BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Committer:
benjaminroy
Date:
Sun Feb 12 03:59:00 2017 +0000
Revision:
7:ea6d3c6ac200
Parent:
6:fd7d91edcf60
Child:
8:9c34eb3cb3ef
- Communication routeur-coordinateur fonctionne

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benjaminroy 6:fd7d91edcf60 1 // COORDINATOR
marc1119 0:ec23a7ae804c 2 #include "EthernetInterface.h"
marc1119 0:ec23a7ae804c 3 #include "ConfigFile.h"
marc1119 0:ec23a7ae804c 4 #include "mbed.h"
marc1119 0:ec23a7ae804c 5
marc1119 0:ec23a7ae804c 6 DigitalOut reset(p8);
benjaminroy 4:393738672d08 7 Serial xbee(p13, p14); // tx, rx
marc1119 1:ceb3f8ba8793 8 Serial pc(USBTX, USBRX); // tx, rx
marc1119 0:ec23a7ae804c 9
benjaminroy 6:fd7d91edcf60 10 uint16_t portNumber = 0;
benjaminroy 6:fd7d91edcf60 11 uint16_t panId = 0;
benjaminroy 6:fd7d91edcf60 12 char serverAddress[32];
benjaminroy 6:fd7d91edcf60 13 char portNbr[4];
benjaminroy 6:fd7d91edcf60 14 char panIdChar[5];
marc1119 3:fbd4b164e8ad 15 bool boolLED = false;
marc1119 3:fbd4b164e8ad 16
benjaminroy 6:fd7d91edcf60 17 void printBuffer(uint8_t bufferSize, uint8_t* buffer) {
benjaminroy 7:ea6d3c6ac200 18 for(int k = 0; k <= bufferSize; k++) {
benjaminroy 6:fd7d91edcf60 19 pc.printf("%X-", buffer[k]);
benjaminroy 6:fd7d91edcf60 20 }
benjaminroy 6:fd7d91edcf60 21 printf("\n");
benjaminroy 6:fd7d91edcf60 22 }
benjaminroy 6:fd7d91edcf60 23
benjaminroy 6:fd7d91edcf60 24 void readConfigFile() {
benjaminroy 6:fd7d91edcf60 25 LocalFileSystem local("local");
benjaminroy 6:fd7d91edcf60 26 ConfigFile cfg;
benjaminroy 6:fd7d91edcf60 27 char *serverAddressStr = "serverAddr";
benjaminroy 6:fd7d91edcf60 28 char *portNumberStr = "portNb";
benjaminroy 6:fd7d91edcf60 29 char *panIdStr = "panID";
benjaminroy 6:fd7d91edcf60 30
benjaminroy 6:fd7d91edcf60 31 if (!cfg.read("/local/input.cfg")) {
benjaminroy 6:fd7d91edcf60 32 error("Erreur dans la lecture du fichier de configuration.\n");
benjaminroy 6:fd7d91edcf60 33 } else {
benjaminroy 6:fd7d91edcf60 34 cfg.getValue(panIdStr, &panIdChar[0], sizeof(panIdChar));
benjaminroy 6:fd7d91edcf60 35 cfg.getValue(serverAddressStr, &serverAddress[0], sizeof(serverAddress));
benjaminroy 6:fd7d91edcf60 36 cfg.getValue(portNumberStr, &portNbr[0], sizeof(portNbr));
benjaminroy 6:fd7d91edcf60 37
benjaminroy 6:fd7d91edcf60 38 portNumber = (uint16_t)strtol(portNbr, NULL, 10);
benjaminroy 6:fd7d91edcf60 39 panId = (uint16_t)strtol(panIdChar, NULL, 10);
benjaminroy 6:fd7d91edcf60 40
benjaminroy 6:fd7d91edcf60 41 printf("The server address is %s\n", serverAddress);
benjaminroy 6:fd7d91edcf60 42 printf("The port number is %i\n", portNumber);
benjaminroy 6:fd7d91edcf60 43 printf("The PAN ID is %i\n", panId);
benjaminroy 6:fd7d91edcf60 44 }
benjaminroy 6:fd7d91edcf60 45 }
benjaminroy 6:fd7d91edcf60 46
benjaminroy 4:393738672d08 47 uint16_t getFrameSize(uint8_t value1, uint8_t value2) {
marc1119 2:3fbf13ba290e 48 union {
marc1119 2:3fbf13ba290e 49 uint16_t u16_value;
marc1119 2:3fbf13ba290e 50 uint8_t u8_value[2];
marc1119 2:3fbf13ba290e 51 } length;
marc1119 2:3fbf13ba290e 52
marc1119 2:3fbf13ba290e 53 length.u8_value[1] = value1;
marc1119 2:3fbf13ba290e 54 length.u8_value[0] = value2;
marc1119 2:3fbf13ba290e 55
marc1119 2:3fbf13ba290e 56 return length.u16_value;
marc1119 2:3fbf13ba290e 57 }
marc1119 2:3fbf13ba290e 58
marc1119 3:fbd4b164e8ad 59 void toogleLED() {
benjaminroy 4:393738672d08 60 // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E
marc1119 3:fbd4b164e8ad 61 //uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3D};
marc1119 3:fbd4b164e8ad 62 //uint8_t low[20] = {0x7E, 0x00, 0x10, 0x17, 0x00, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3E};
marc1119 3:fbd4b164e8ad 63 uint8_t high[20] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x05, 0x3C};
marc1119 3:fbd4b164e8ad 64 uint8_t low[20] = {0x7E, 0x00, 0x10, 0x17, 0x02, 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x6E, 0xFF, 0xFE, 0x02, 0x44, 0x34, 0x04, 0x3C};
marc1119 3:fbd4b164e8ad 65
benjaminroy 4:393738672d08 66 for (int i = 0; i < 20;) {
benjaminroy 4:393738672d08 67 if (xbee.writeable()) {
benjaminroy 4:393738672d08 68 if (boolLED) {
benjaminroy 4:393738672d08 69 xbee.putc(high[i]);
benjaminroy 4:393738672d08 70 } else {
benjaminroy 4:393738672d08 71 xbee.putc(low[i]);
benjaminroy 4:393738672d08 72 }
marc1119 3:fbd4b164e8ad 73 i++;
marc1119 3:fbd4b164e8ad 74 }
marc1119 3:fbd4b164e8ad 75 }
marc1119 3:fbd4b164e8ad 76
benjaminroy 4:393738672d08 77 if (boolLED) {
benjaminroy 4:393738672d08 78 pc.printf("Et un haut!\n");
benjaminroy 4:393738672d08 79 } else {
benjaminroy 4:393738672d08 80 pc.printf("Et un bas!\n");
benjaminroy 4:393738672d08 81 }
marc1119 3:fbd4b164e8ad 82 boolLED = !boolLED;
marc1119 3:fbd4b164e8ad 83 }
marc1119 3:fbd4b164e8ad 84
benjaminroy 4:393738672d08 85 void initSocket() {
marc1119 2:3fbf13ba290e 86 //int repSize;
marc1119 1:ceb3f8ba8793 87 //while (true) {
marc1119 1:ceb3f8ba8793 88
benjaminroy 4:393738672d08 89 //sprintf (buffer, (const char *)xbee.getc());
marc1119 1:ceb3f8ba8793 90 //sock.send_all(buffer, sizeof(buffer)-1);
marc1119 1:ceb3f8ba8793 91
marc1119 1:ceb3f8ba8793 92 //repSize = sock.receive(buffer, sizeof(buffer)-1);
marc1119 1:ceb3f8ba8793 93 // if (repSize <= 0) {
marc1119 1:ceb3f8ba8793 94 // printf("Error");
marc1119 1:ceb3f8ba8793 95 // sock.close();
marc1119 1:ceb3f8ba8793 96 // break;
marc1119 1:ceb3f8ba8793 97 // }
marc1119 1:ceb3f8ba8793 98 //buffer[repSize] = '\0';
marc1119 1:ceb3f8ba8793 99 //printf("Received %d chars from server:\n%s\n", repSize, buffer);
marc1119 1:ceb3f8ba8793 100 //}
marc1119 1:ceb3f8ba8793 101 }
marc1119 1:ceb3f8ba8793 102
benjaminroy 4:393738672d08 103 void checkForError(uint8_t* buffer) {
benjaminroy 4:393738672d08 104 if (buffer[0] == 0x97) {
benjaminroy 4:393738672d08 105 if (buffer[1] == 0x02) {
marc1119 3:fbd4b164e8ad 106 pc.printf("Erreur dans la remote AT command pour mettre la DEL a l'etat bas.\n");
marc1119 3:fbd4b164e8ad 107 }
benjaminroy 4:393738672d08 108 else if (buffer[1] == 0x01) {
marc1119 3:fbd4b164e8ad 109 pc.printf("Erreur dans la remote AT command pour mettre la DEL a l'etat haut\n");
marc1119 3:fbd4b164e8ad 110 }
marc1119 3:fbd4b164e8ad 111 }
marc1119 3:fbd4b164e8ad 112 }
marc1119 3:fbd4b164e8ad 113
benjaminroy 7:ea6d3c6ac200 114 void checksum(uint16_t frameSize, uint8_t* buffer) {
marc1119 2:3fbf13ba290e 115 uint32_t checkSum = 0;
benjaminroy 4:393738672d08 116
benjaminroy 4:393738672d08 117 for (int i = 0; i < frameSize; i++) {
marc1119 2:3fbf13ba290e 118 checkSum += buffer[i];
benjaminroy 4:393738672d08 119 }
benjaminroy 4:393738672d08 120 if ((0xFF - (checkSum & 0xFF)) != buffer[frameSize]) {
marc1119 2:3fbf13ba290e 121 pc.printf("Erreur dans le checksum. \n");
benjaminroy 4:393738672d08 122 }
benjaminroy 7:ea6d3c6ac200 123
benjaminroy 7:ea6d3c6ac200 124 //checkForError(buffer);
marc1119 2:3fbf13ba290e 125 }
marc1119 2:3fbf13ba290e 126
marc1119 2:3fbf13ba290e 127 void readFrame(){
benjaminroy 6:fd7d91edcf60 128 uint8_t sizeBytes[2] = { 0 };
benjaminroy 4:393738672d08 129 uint8_t buffer[104] = { 0 };
benjaminroy 7:ea6d3c6ac200 130
benjaminroy 4:393738672d08 131 if (xbee.readable() && xbee.getc() == 0x7E) {
benjaminroy 4:393738672d08 132 for (int i = 0; i < 2;) {
benjaminroy 6:fd7d91edcf60 133 sizeBytes[i] = xbee.getc();
benjaminroy 6:fd7d91edcf60 134 i++;
marc1119 2:3fbf13ba290e 135 }
benjaminroy 7:ea6d3c6ac200 136 uint16_t bufferSize = getFrameSize(sizeBytes[0], sizeBytes[1]);
marc1119 2:3fbf13ba290e 137
benjaminroy 7:ea6d3c6ac200 138 for (int j = 0; j <= bufferSize;) {
benjaminroy 4:393738672d08 139 if (xbee.readable()) {
benjaminroy 4:393738672d08 140 buffer[j] = xbee.getc();
marc1119 2:3fbf13ba290e 141 j++;
marc1119 2:3fbf13ba290e 142 }
marc1119 2:3fbf13ba290e 143 }
benjaminroy 4:393738672d08 144
benjaminroy 7:ea6d3c6ac200 145 checksum(bufferSize, buffer);
benjaminroy 7:ea6d3c6ac200 146 printBuffer(bufferSize, buffer);
marc1119 0:ec23a7ae804c 147 }
marc1119 0:ec23a7ae804c 148 }
marc1119 0:ec23a7ae804c 149
marc1119 0:ec23a7ae804c 150 int main() {
benjaminroy 6:fd7d91edcf60 151 pc.printf("Starting a coordinator... \n");
benjaminroy 6:fd7d91edcf60 152
benjaminroy 4:393738672d08 153 EthernetInterface eth;
benjaminroy 4:393738672d08 154 TCPSocketConnection sock;
marc1119 2:3fbf13ba290e 155
marc1119 1:ceb3f8ba8793 156 reset = 0;
benjaminroy 6:fd7d91edcf60 157 wait_ms(1);
marc1119 1:ceb3f8ba8793 158 reset = 1;
benjaminroy 6:fd7d91edcf60 159 wait_ms(1);
marc1119 0:ec23a7ae804c 160
marc1119 2:3fbf13ba290e 161 readConfigFile();
marc1119 2:3fbf13ba290e 162
benjaminroy 6:fd7d91edcf60 163 xbee.baud(9600); // Set baud rate
benjaminroy 6:fd7d91edcf60 164 xbee.printf("ATID %i\r",panId); // Set the 64-bit PAN ID
benjaminroy 6:fd7d91edcf60 165 xbee.printf("ATWR \r"); //
benjaminroy 6:fd7d91edcf60 166 xbee.printf("ATCN \r");
benjaminroy 6:fd7d91edcf60 167
benjaminroy 4:393738672d08 168 if (eth.init() != 0) { // Use DHCP
marc1119 3:fbd4b164e8ad 169 pc.printf("Erreur d'initialisation du RJ45.\n");
benjaminroy 4:393738672d08 170 }
benjaminroy 4:393738672d08 171 if (eth.connect() != 0) {
marc1119 3:fbd4b164e8ad 172 pc.printf("Erreur de connection du RJ45\n");
benjaminroy 4:393738672d08 173 }
benjaminroy 6:fd7d91edcf60 174 if (sock.connect(serverAddress, portNumber) != 0) {
marc1119 3:fbd4b164e8ad 175 pc.printf("Erreur de socket.\n");
benjaminroy 4:393738672d08 176 }
marc1119 2:3fbf13ba290e 177 //sock.send_all(buffer, sizeof(buffer)-1);
marc1119 2:3fbf13ba290e 178
marc1119 2:3fbf13ba290e 179 //initSocket();
marc1119 3:fbd4b164e8ad 180
marc1119 3:fbd4b164e8ad 181 //Set ticker to blink LED at each 1 sec
marc1119 3:fbd4b164e8ad 182 //Ticker blinkLED;
marc1119 3:fbd4b164e8ad 183 // blinkLED.attach(&toogleLED, 1);
benjaminroy 6:fd7d91edcf60 184
marc1119 1:ceb3f8ba8793 185 while(1) {
marc1119 2:3fbf13ba290e 186 readFrame();
benjaminroy 4:393738672d08 187 //wait_ms(1000);
benjaminroy 4:393738672d08 188 //toogleLED();
marc1119 1:ceb3f8ba8793 189 }
marc1119 0:ec23a7ae804c 190 }
marc1119 0:ec23a7ae804c 191
marc1119 2:3fbf13ba290e 192