Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ConfigFile EthernetInterface mbed-rtos mbed
Fork of S05APP3 by
Diff: main.cpp
- Revision:
- 10:488877f7f56c
- Parent:
- 9:f6f79f136101
- Child:
- 11:205ddd5406af
--- a/main.cpp Mon Feb 13 02:20:15 2017 +0000 +++ b/main.cpp Mon Feb 13 04:17:28 2017 +0000 @@ -10,18 +10,14 @@ Serial xbee(p13, p14); // tx, rx Serial pc(USBTX, USBRX); // tx, rx TCPSocketConnection sock; -Thread *t1; -Thread *t2; +uint64_t routerAddress; uint16_t portNumber = 0; uint16_t panId = 0; - char serverAddress[32]; char panIdChar[5]; char portNbr[5]; - bool boolLED = false; -uint64_t routerAddr; void printBuffer(uint8_t bufferSize, uint8_t* buffer) { for(uint8_t k = 0; k <= bufferSize; k++) { @@ -47,24 +43,12 @@ portNumber = (uint16_t)strtol(portNbr, NULL, 10); panId = (uint16_t)strtol(panIdChar, NULL, 10); - printf("The server address is %s\n", serverAddress); - printf("The port number is %i\n", portNumber); - printf("The PAN ID is %i\n", panId); + // printf("The server address is %s\n", serverAddress); + // printf("The port number is %i\n", portNumber); + // printf("The PAN ID is %i\n", panId); } } -uint16_t convert8bitsTo16bits(uint8_t value1, uint8_t value2) { - union { - uint16_t u16_value; - uint8_t u8_value[2]; - } length; - - length.u8_value[1] = value1; - length.u8_value[0] = value2; - - return length.u16_value; -} - void toogleLED() { // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3C}; @@ -121,77 +105,80 @@ } } -void checksum(uint8_t frameSize, uint8_t* buffer) { +bool checksumIsValid(uint8_t bufferSize, uint8_t* buffer) { uint32_t checkSum = 0; - for (int i = 0; i < frameSize; i++) { + for (int i = 0; i < bufferSize; i++) { checkSum += buffer[i]; } - if ((0xFF - (checkSum & 0xFF)) != buffer[frameSize]) { - pc.printf("Erreur dans le checksum. \n"); + if ((0xFF - (checkSum & 0xFF)) != buffer[bufferSize]) { + pc.printf("Erreur dans la transmission de la trame. \n"); + return false; } - - //checkForError(buffer); + return true; } -//We are keeping the 64 bits address of the router. +// We are storing the 64 bits address of the router. void readRouterAddress(uint8_t* buffer) { union { uint64_t u64_value; - uint8_t u8_value[8]; - } addr; + uint8_t u8_value[8]; + } address; - for(int i= 0; i < 8; i++) { - addr.u8_value[i] = buffer[i + 2]; + for(int i=0; i < 8; i++) { + address.u8_value[i] = buffer[i + 2]; } - - routerAddr = addr.u64_value; + routerAddress = address.u64_value; + + //routerAddress = buffer[2] << 56 | buffer[3] << 48 | buffer[4] << 40 | buffer[5] << 32 | buffer[6] << 24 | buffer[7] << 16 | buffer[8] << 8 | buffer[9]; + pc.printf("The router address is %X\n", routerAddress); } -void readDateFromRouter(){ - uint8_t bufferSize = 0; - uint8_t sizeBytes[2] = { 0 }; - uint8_t buffer[104] = { 0 }; - uint16_t data[3] = {0}; +void readRouterData(uint8_t bufferSize, uint8_t* buffer) { + uint16_t acc[3] = {0}; - if (xbee.readable() && xbee.getc() == 0x7E) { - for (uint8_t i = 0; i < 2;) { - sizeBytes[i] = xbee.getc(); - i++; + if (buffer[0] == 0x90 && bufferSize == 18) { // Accelerations (X,Y,Z) + for (uint8_t i = 12; i < bufferSize; i += 2) { + acc[(i/2)-6] = (buffer[i+1] << 8 ) | (buffer[i] & 0xff); } - bufferSize = convert8bitsTo16bits(sizeBytes[0], sizeBytes[1]); - - for (uint8_t i = 0; i <= bufferSize;) { - if (xbee.readable()) { - buffer[i] = xbee.getc(); - i++; + // pc.printf("Acceleration X: %d\n", acc[0]); + // pc.printf("Acceleration Y: %d\n", acc[1]); + // pc.printf("Acceleration Z: %d\n", acc[2]); + + initSocket(acc[0]); + + } else if (buffer[0] == 0x90 && bufferSize == 13) { // Dry contact + // acc[0] = buffer[12]; + } +} + +void readDataFromRouter(){ + while(1) { + uint8_t bufferSize = 0; + uint8_t buffer[104] = { 0 }; + + if (xbee.readable() && xbee.getc() == 0x7E) { + bufferSize = (xbee.getc() << 8 ) | (xbee.getc() & 0xff); + + for (uint8_t i = 0; i <= bufferSize;) { + if (xbee.readable()) { + buffer[i] = xbee.getc(); + i++; + } } - } - - checksum(bufferSize, buffer); - printBuffer(bufferSize, buffer); - readRouterAddress(buffer); - - if (buffer[0] == 0x90 && bufferSize == 18) { - for(uint8_t i = 12; i < bufferSize; i += 2) { - data[(i/2)-6] = (buffer[i+1] << 8 ) | (buffer[i] & 0xff); + + printBuffer(bufferSize, buffer); + if (checksumIsValid(bufferSize, buffer)) { + readRouterAddress(buffer); + readRouterData(bufferSize, buffer); } - // pc.printf("Acceleration X: %d\n", data[0]); - // pc.printf("Acceleration Y: %d\n", data[1]); - // pc.printf("Acceleration Z: %d\n", data[2]); - - initSocket(data[0]); - - } else if (buffer[0] == 0x90 && bufferSize == 13) { - //data[0] = buffer[12]; } } } int main() { pc.printf("Starting a coordinator... \n"); - pc.printf("IP: %s\n", eth.getIPAddress()); - + reset = 0; wait_ms(1); reset = 1; @@ -210,10 +197,13 @@ if (eth.connect() != 0) { pc.printf("Erreur de connection du RJ45\n"); } + pc.printf("IP Address is %s\n", eth.getIPAddress()); - while(1) { - readDateFromRouter(); - } + // Démarrage des tâches: + Thread _readDataFromRouter(readDataFromRouter); + //Thread _toggleRouterLed(toggleLed); + + while(1) {} }