routeur done
Dependencies: mbed
Fork of APP4 by
Diff: trame.cpp
- Revision:
- 3:350f07072089
- Parent:
- 2:7515831bb5f5
- Child:
- 4:aac38b016952
--- a/trame.cpp Mon Feb 24 14:08:10 2014 +0000 +++ b/trame.cpp Mon Feb 24 15:40:33 2014 +0000 @@ -6,8 +6,65 @@ { } -void Trame::sendATCommand(const char* command, int data) +void Trame::sendATCommand(const char* command, const char* data, int length) { + int tmp = length + 8; + char* trm = new char[tmp]; + + trm[0] = 0x7E; // Delimiter + trm[1] = static_cast<char>((tmp >> 8) & 0xFF); // MSB de length + trm[2] = static_cast<char>(tmp & 0xFF); // LSB length + trm[3] = 0x08; // Type + trm[4] = 0x01; // API + trm[5] = command[0]; + trm[6] = command[1]; + for (int i = 0; i < length; i++) + trm[7+i] = data[i]; //Data + trm[7+length] = crc8(trm, tmp - 1); + Serial xbee(tx, rx); - xbee.putc(0x10); + for (int i = 0; i < tmp; i++) + xbee.putc(trm[i]); + + wait(0.01); + delete trm; +} + +void Trame::sendTransmitRequest(const char* destination, const char* data, int length) +{ + int tmp = length + 18; + char* trm = new char[tmp]; + + trm[0] = 0x7E; // Delimiter + trm[1] = static_cast<char>((tmp >> 8) & 0xFF); // MSB de length + trm[2] = static_cast<char>(tmp & 0xFF); // LSB length + trm[3] = 0x10; // Type + trm[4] = 0x01; // API + for (int i = 0; i < 8; i++) + trm[5 + i] = destination[i]; //Destination + trm[13] = 0x00; // 16 bits address + trm[14] = 0x00; // 16 bits address + trm[15] = 0x00; // Radius + trm[16] = 0x00; // Options + + for (int i = 0; i < length; i++) + trm[17 + i] = data[i]; // Data + + trm[17 + length] = crc8(trm, tmp - 1); + + Serial xbee(tx, rx); + for (int i = 0; i < tmp; i++) + xbee.putc(trm[i]); + + wait(0.01); + delete trm; +} + +unsigned char Trame::crc8(const char* data, int length) +{ + unsigned char crc = 0; + for (int i = 1; i < length; i++) + crc += data[i]; + + return (0xFF - crc); } \ No newline at end of file