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:
- 8:9c34eb3cb3ef
- Parent:
- 7:ea6d3c6ac200
- Child:
- 9:f6f79f136101
--- a/main.cpp Sun Feb 12 03:59:00 2017 +0000 +++ b/main.cpp Sun Feb 12 19:38:26 2017 +0000 @@ -4,18 +4,21 @@ #include "mbed.h" DigitalOut reset(p8); -Serial xbee(p13, p14); // tx, rx +Serial xbee(p13, p14); // tx, rx Serial pc(USBTX, USBRX); // tx, rx uint16_t portNumber = 0; uint16_t panId = 0; + char serverAddress[32]; +char panIdChar[5]; char portNbr[4]; -char panIdChar[5]; + bool boolLED = false; +uint64_t routerAddr; void printBuffer(uint8_t bufferSize, uint8_t* buffer) { - for(int k = 0; k <= bufferSize; k++) { + for(uint8_t k = 0; k <= bufferSize; k++) { pc.printf("%X-", buffer[k]); } printf("\n"); @@ -44,7 +47,7 @@ } } -uint16_t getFrameSize(uint8_t value1, uint8_t value2) { +uint16_t convert8bitsTo16bits(uint8_t value1, uint8_t value2) { union { uint16_t u16_value; uint8_t u8_value[2]; @@ -58,12 +61,10 @@ void toogleLED() { // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E - //uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3D}; - //uint8_t low[20] = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3E}; uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3C}; uint8_t low[20] = {0x7E, 0x00, 0x10, 0x17, 0x02, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3C}; - for (int i = 0; i < 20;) { + for (uint8_t i = 0; i < 20;) { if (xbee.writeable()) { if (boolLED) { xbee.putc(high[i]); @@ -111,7 +112,7 @@ } } -void checksum(uint16_t frameSize, uint8_t* buffer) { +void checksum(uint8_t frameSize, uint8_t* buffer) { uint32_t checkSum = 0; for (int i = 0; i < frameSize; i++) { @@ -124,26 +125,66 @@ //checkForError(buffer); } +//We are keeping the 64 bits address of the router. +void readRouterAddress(uint8_t* buffer) { + union { + uint64_t u64_value; + uint8_t u8_value[8]; + } addr; + + for(int i= 0; i < 8; i++) { + addr.u8_value[i] = buffer[i + 2]; + } + + routerAddr = addr.u64_value; +} + void readFrame(){ + + uint8_t bufferSize = 0; uint8_t sizeBytes[2] = { 0 }; uint8_t buffer[104] = { 0 }; - + uint8_t data[3] = {0}; + if (xbee.readable() && xbee.getc() == 0x7E) { - for (int i = 0; i < 2;) { + for (uint8_t i = 0; i < 2;) { sizeBytes[i] = xbee.getc(); i++; } - uint16_t bufferSize = getFrameSize(sizeBytes[0], sizeBytes[1]); + bufferSize = convert8bitsTo16bits(sizeBytes[0], sizeBytes[1]); - for (int j = 0; j <= bufferSize;) { + for (uint8_t i = 0; i <= bufferSize;) { if (xbee.readable()) { - buffer[j] = xbee.getc(); - j++; + buffer[i] = xbee.getc(); + i++; } } checksum(bufferSize, buffer); printBuffer(bufferSize, buffer); + readRouterAddress(buffer); + + pc.printf("12: %X\n", buffer[12]); + pc.printf("13: %X\n", buffer[13]); + + pc.printf("14: %X\n", buffer[14]); + pc.printf("15: %X\n", buffer[15]); + + pc.printf("16: %X\n", buffer[16]); + pc.printf("17: %X\n", buffer[17]); + + if(buffer[0] == 0x90 && bufferSize == 18) { + uint8_t j = 0; + for(uint8_t i = 12; i < bufferSize; i += 2) { + data[j++] = convert8bitsTo16bits(buffer[i], buffer[i + 1]); + } + pc.printf("Data 1: %d\n", data[0]); + pc.printf("Data 2: %d\n", data[1]); + pc.printf("Data 3: %d\n", data[2]); + } + else if(buffer[0] == 0x90 && bufferSize == 13) { + data[0] = buffer[12]; + } } }