* Routeur

Dependencies:   ConfigFile mbed

Committer:
benjaminroy
Date:
Sun Feb 12 02:26:40 2017 +0000
Revision:
2:aebf0ae12644
Parent:
1:2abb01319ca6
Child:
3:0a2a583626de
:-( Pas capable de communiquer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benjaminroy 2:aebf0ae12644 1 // ROUTER
benjaminroy 0:b399a75f4990 2 #include "ConfigFile.h"
benjaminroy 0:b399a75f4990 3 #include "mbed.h"
benjaminroy 0:b399a75f4990 4
benjaminroy 0:b399a75f4990 5 DigitalOut reset(p8);
benjaminroy 1:2abb01319ca6 6 Serial xbee(p13, p14); // tx, rx
benjaminroy 0:b399a75f4990 7 Serial pc(USBTX, USBRX); // tx, rx
benjaminroy 0:b399a75f4990 8
benjaminroy 2:aebf0ae12644 9 uint16_t panId = 0;
benjaminroy 2:aebf0ae12644 10 char panIdChar[5];
benjaminroy 2:aebf0ae12644 11
benjaminroy 2:aebf0ae12644 12 void printBuffer(uint8_t bufferSize, uint8_t* buffer) {
benjaminroy 2:aebf0ae12644 13 for(int k = 0; k < bufferSize; k++) {
benjaminroy 2:aebf0ae12644 14 pc.printf("%X-", buffer[k]);
benjaminroy 2:aebf0ae12644 15 }
benjaminroy 2:aebf0ae12644 16 printf("\n");
benjaminroy 2:aebf0ae12644 17 }
benjaminroy 2:aebf0ae12644 18
benjaminroy 2:aebf0ae12644 19 /*
benjaminroy 2:aebf0ae12644 20 * Read a configuration file from a mbed.
benjaminroy 2:aebf0ae12644 21 */
benjaminroy 2:aebf0ae12644 22 void readConfigFile() {
benjaminroy 2:aebf0ae12644 23 LocalFileSystem local("local");
benjaminroy 2:aebf0ae12644 24 ConfigFile cfg;
benjaminroy 2:aebf0ae12644 25 char *panIdStr = "panID";
benjaminroy 2:aebf0ae12644 26
benjaminroy 2:aebf0ae12644 27 if (!cfg.read("/local/input.cfg")) {
benjaminroy 2:aebf0ae12644 28 error("Erreur dans la lecture du fichier de configuration.\n");
benjaminroy 2:aebf0ae12644 29 } else {
benjaminroy 2:aebf0ae12644 30 cfg.getValue(panIdStr, &panIdChar[0], sizeof(panIdChar));
benjaminroy 2:aebf0ae12644 31 panId = (uint16_t)strtol(panIdChar, NULL, 10);
benjaminroy 2:aebf0ae12644 32 printf("The PAN ID is %i\n", panId);
benjaminroy 2:aebf0ae12644 33 }
benjaminroy 2:aebf0ae12644 34 }
benjaminroy 2:aebf0ae12644 35
benjaminroy 0:b399a75f4990 36 uint8_t calculateChecksum(uint8_t frameSize, uint8_t* buffer) {
benjaminroy 2:aebf0ae12644 37 uint32_t checksum = 0;
benjaminroy 0:b399a75f4990 38 uint8_t frameTypeIndex = 3;
benjaminroy 0:b399a75f4990 39
benjaminroy 0:b399a75f4990 40 for (int i = frameTypeIndex; i < frameSize - 1; i++) {
benjaminroy 2:aebf0ae12644 41 checksum += buffer[i];
benjaminroy 0:b399a75f4990 42 }
benjaminroy 0:b399a75f4990 43
benjaminroy 2:aebf0ae12644 44 return (uint8_t)(0xFF - (checksum & 0xFF));
benjaminroy 0:b399a75f4990 45 }
benjaminroy 0:b399a75f4990 46
benjaminroy 0:b399a75f4990 47 void sendFrame(uint8_t bufferSize, uint8_t* buffer) {
benjaminroy 2:aebf0ae12644 48 for (int i = 0; i < bufferSize;) {
benjaminroy 1:2abb01319ca6 49 if (xbee.writeable()) {
benjaminroy 1:2abb01319ca6 50 xbee.putc(buffer[i]);
benjaminroy 2:aebf0ae12644 51 wait(0.50);
benjaminroy 0:b399a75f4990 52 i++;
benjaminroy 0:b399a75f4990 53 }
benjaminroy 2:aebf0ae12644 54 }
benjaminroy 0:b399a75f4990 55 }
benjaminroy 0:b399a75f4990 56
benjaminroy 0:b399a75f4990 57 void setFrame() {
benjaminroy 0:b399a75f4990 58 const uint8_t bufferSize = 22;
benjaminroy 0:b399a75f4990 59 uint8_t buffer[bufferSize] = { 0 };
benjaminroy 0:b399a75f4990 60
benjaminroy 0:b399a75f4990 61 buffer[0] = 0x7E; // Start Delimiter
benjaminroy 0:b399a75f4990 62 buffer[1] = 0x00; // Length
benjaminroy 0:b399a75f4990 63 buffer[2] = 0x12; // Length
benjaminroy 0:b399a75f4990 64 buffer[3] = 0x10; // Frame Type
benjaminroy 0:b399a75f4990 65 buffer[4] = 0x01; // Frame ID
benjaminroy 0:b399a75f4990 66 buffer[5] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 67 buffer[6] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 68 buffer[7] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 69 buffer[8] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 70 buffer[9] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 71 buffer[10] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 72 buffer[11] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 73 buffer[12] = 0x00; // 64 bit adress
benjaminroy 0:b399a75f4990 74 buffer[13] = 0xFF; // 16 bit adress
benjaminroy 0:b399a75f4990 75 buffer[14] = 0xFE; // 16 bit adress
benjaminroy 0:b399a75f4990 76 buffer[15] = 0x00; // Broadcast radius
benjaminroy 0:b399a75f4990 77 buffer[16] = 0x00; // Options
benjaminroy 0:b399a75f4990 78 buffer[17] = 0x02; // RF Data...
benjaminroy 0:b399a75f4990 79 buffer[18] = 0x02; // RF Data...
benjaminroy 0:b399a75f4990 80 buffer[19] = 0x02; // RF Data...
benjaminroy 0:b399a75f4990 81 buffer[20] = 0x02; // RF Data...
benjaminroy 0:b399a75f4990 82 buffer[21] = calculateChecksum(bufferSize, buffer); // Checksum
benjaminroy 0:b399a75f4990 83
benjaminroy 2:aebf0ae12644 84 printBuffer(bufferSize, buffer);
benjaminroy 0:b399a75f4990 85 sendFrame(bufferSize, buffer);
benjaminroy 0:b399a75f4990 86 }
benjaminroy 0:b399a75f4990 87
benjaminroy 2:aebf0ae12644 88 int main() {
benjaminroy 2:aebf0ae12644 89 printf("Starting a router...\n");
benjaminroy 0:b399a75f4990 90
benjaminroy 0:b399a75f4990 91 reset = 0;
benjaminroy 2:aebf0ae12644 92 wait_ms(1);
benjaminroy 0:b399a75f4990 93 reset = 1;
benjaminroy 0:b399a75f4990 94 wait_ms(1);
benjaminroy 0:b399a75f4990 95
benjaminroy 2:aebf0ae12644 96 readConfigFile();
benjaminroy 2:aebf0ae12644 97
benjaminroy 2:aebf0ae12644 98 xbee.baud(9600); // Set baud rate
benjaminroy 2:aebf0ae12644 99 xbee.printf("ATID %i\r", panId); // Set the 64-bit PAN ID
benjaminroy 2:aebf0ae12644 100 xbee.printf("ATWR \r");
benjaminroy 2:aebf0ae12644 101 xbee.printf("ATCN \r");
benjaminroy 2:aebf0ae12644 102
benjaminroy 0:b399a75f4990 103 setFrame();
benjaminroy 0:b399a75f4990 104 }