BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Committer:
benjaminroy
Date:
Sun Feb 12 02:27:01 2017 +0000
Revision:
6:fd7d91edcf60
Parent:
4:393738672d08
Child:
7:ea6d3c6ac200
:-( Pas capable de communiquer

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