I am writing a Pyhton software to manage our mote testbed; I must use Python to integrate into the 'larger' system and I must use TinyOS-1.x.
I am having trouble writing to the motes over UART. I can read from them perfectly i.e. I have implemented the HDLC-like framing and CRC calculation and all is well. For example, I read the following from a telosb mote running the Oscilloscope image: rxpkt: 7e 42 0e 00 00 00 00 00 7d 5e 00 1b 7d 5d 00 00 8d 00 00 0d 9c dc 43 01 00 f6 00 08 66 3f 7e [As an aisde, can anyone explain why the payload length is moved to rxpkt[2], and where bytes rxpkt[3-7] come from?] My goal here is to implement a 'command interpreter' on the mote, where commands are sent from the PC. The content of CommandMsg.h is as follows: enum { COMMAND = 1 << 15, STATUS = 0 << 15, INTERNAL = 1 << 14, EXTERNAL = 0 << 14 }; struct CommandMsg { uint16_t cmd; uint16_t mask; uint16_t arg; }; enum { AM_COMMANDMSG = 20 }; The byte array (Python: array.array('B')) of data I want to send goes through the following transformations: Data: 0b 00 00 00 a3 08 (11, 0, 2211) Message: 7e 00 1b 7d 0b 00 00 00 a3 08 Packet: 7e 42 06 00 00 00 00 00 7d 5e 00 14 7d 5d 0b 00 00 00 a3 08 f9 f0 7e The final packet format reflects what I read of the wire i.e. Packet[2] is the data length followed by 5 pad bytes. I open the port with the following Python code (assume necessary modules are imported): def open(self): self.__fd = os.open(self.__port, os.O_RDWR|os.O_NOCTTY) iflag, oflag, cflag, lflag, ispeed, ospeed, cc = \ termios.tcgetattr(self.__fd) cflag = termios.CS8 | termios.CLOCAL | termios.CREAD iflag = termios.IGNPAR | termios.IGNBRK oflag = 0 # saw this in serialsource.c ispeed = termios.__dict__['B'+str(self.__baudrate)] ospeed = termios.__dict__['B'+str(self.__baudrate)] termios.tcflush(self.__fd, termios.TCIFLUSH); termios.tcsetattr(self.__fd, termios.TCSANOW, \ [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]); When I write the packet, the little green LED by the mote-USB connector (not the main 3-LEDS) flashes, but I do not get the desired result i.e. the main red-LED does not switch on (as it is 'commanded' to). Has anyone achieved writing to a (telosb?) mote in C or Python? Have I set the wrong output flags (oflag) on the serial port maybe? Have I got the frame format wrong? Your help is appreciated. -- Warm regards, Darren Bishop, MSc, BSc (Hons), MBCS _______________________________________________ Tinyos-help mailing list Tinyos-help@Millennium.Berkeley.EDU https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help