BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Committer:
benjaminroy
Date:
Sun Feb 12 00:01:37 2017 +0000
Revision:
4:393738672d08
Parent:
3:fbd4b164e8ad
Child:
6:fd7d91edcf60
...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marc1119 0:ec23a7ae804c 1 #include "EthernetInterface.h"
marc1119 0:ec23a7ae804c 2 #include "ConfigFile.h"
marc1119 0:ec23a7ae804c 3 #include "mbed.h"
marc1119 0:ec23a7ae804c 4
marc1119 0:ec23a7ae804c 5 DigitalOut reset(p8);
benjaminroy 4:393738672d08 6 Serial xbee(p13, p14); // tx, rx
marc1119 1:ceb3f8ba8793 7 Serial pc(USBTX, USBRX); // tx, rx
marc1119 0:ec23a7ae804c 8
benjaminroy 4:393738672d08 9 // Socket Buffer
benjaminroy 4:393738672d08 10 uint16_t portNo = 0;
marc1119 0:ec23a7ae804c 11 char serverAddrvalue[32];
marc1119 2:3fbf13ba290e 12 char portNbValue[4];
marc1119 3:fbd4b164e8ad 13 bool boolLED = false;
marc1119 3:fbd4b164e8ad 14
benjaminroy 4:393738672d08 15 uint16_t getFrameSize(uint8_t value1, uint8_t value2) {
marc1119 2:3fbf13ba290e 16 union {
marc1119 2:3fbf13ba290e 17 uint16_t u16_value;
marc1119 2:3fbf13ba290e 18 uint8_t u8_value[2];
marc1119 2:3fbf13ba290e 19 } length;
marc1119 2:3fbf13ba290e 20
marc1119 2:3fbf13ba290e 21 length.u8_value[1] = value1;
marc1119 2:3fbf13ba290e 22 length.u8_value[0] = value2;
marc1119 2:3fbf13ba290e 23
marc1119 2:3fbf13ba290e 24 return length.u16_value;
marc1119 2:3fbf13ba290e 25 }
marc1119 2:3fbf13ba290e 26
marc1119 3:fbd4b164e8ad 27 void toogleLED() {
benjaminroy 4:393738672d08 28 // Addresse 64 bits = 00 13 A2 00 40 8B 41 6E
marc1119 3:fbd4b164e8ad 29 //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 30 //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 31 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 32 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 33
benjaminroy 4:393738672d08 34 for (int i = 0; i < 20;) {
benjaminroy 4:393738672d08 35 if (xbee.writeable()) {
benjaminroy 4:393738672d08 36 if (boolLED) {
benjaminroy 4:393738672d08 37 xbee.putc(high[i]);
benjaminroy 4:393738672d08 38 } else {
benjaminroy 4:393738672d08 39 xbee.putc(low[i]);
benjaminroy 4:393738672d08 40 }
marc1119 3:fbd4b164e8ad 41 i++;
marc1119 3:fbd4b164e8ad 42 }
marc1119 3:fbd4b164e8ad 43 }
marc1119 3:fbd4b164e8ad 44
benjaminroy 4:393738672d08 45 if (boolLED) {
benjaminroy 4:393738672d08 46 pc.printf("Et un haut!\n");
benjaminroy 4:393738672d08 47 } else {
benjaminroy 4:393738672d08 48 pc.printf("Et un bas!\n");
benjaminroy 4:393738672d08 49 }
marc1119 3:fbd4b164e8ad 50 boolLED = !boolLED;
marc1119 3:fbd4b164e8ad 51 }
marc1119 3:fbd4b164e8ad 52
benjaminroy 4:393738672d08 53 void readConfigFile() {
marc1119 0:ec23a7ae804c 54 LocalFileSystem local("local");
marc1119 0:ec23a7ae804c 55 ConfigFile cfg;
marc1119 0:ec23a7ae804c 56 char *serverAddr = "serverAddr";
marc1119 2:3fbf13ba290e 57 char *tempPortNo = "portNb";
benjaminroy 4:393738672d08 58
benjaminroy 4:393738672d08 59 if (!cfg.read("/local/input.cfg")) {
benjaminroy 4:393738672d08 60 error("Erreur dans la lecture du fichier\n");
benjaminroy 4:393738672d08 61 } else {
marc1119 2:3fbf13ba290e 62 cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue));
marc1119 2:3fbf13ba290e 63 cfg.getValue(tempPortNo, &portNbValue[0], sizeof(portNbValue));
marc1119 2:3fbf13ba290e 64 portNo = (uint16_t)strtol(portNbValue, NULL, 10);
marc1119 2:3fbf13ba290e 65 }
marc1119 0:ec23a7ae804c 66 }
marc1119 0:ec23a7ae804c 67
benjaminroy 4:393738672d08 68 void initSocket() {
marc1119 2:3fbf13ba290e 69 //int repSize;
marc1119 1:ceb3f8ba8793 70 //while (true) {
marc1119 1:ceb3f8ba8793 71
benjaminroy 4:393738672d08 72 //sprintf (buffer, (const char *)xbee.getc());
marc1119 1:ceb3f8ba8793 73 //sock.send_all(buffer, sizeof(buffer)-1);
marc1119 1:ceb3f8ba8793 74
marc1119 1:ceb3f8ba8793 75 //repSize = sock.receive(buffer, sizeof(buffer)-1);
marc1119 1:ceb3f8ba8793 76 // if (repSize <= 0) {
marc1119 1:ceb3f8ba8793 77 // printf("Error");
marc1119 1:ceb3f8ba8793 78 // sock.close();
marc1119 1:ceb3f8ba8793 79 // break;
marc1119 1:ceb3f8ba8793 80 // }
marc1119 1:ceb3f8ba8793 81 //buffer[repSize] = '\0';
marc1119 1:ceb3f8ba8793 82 //printf("Received %d chars from server:\n%s\n", repSize, buffer);
marc1119 1:ceb3f8ba8793 83 //}
marc1119 1:ceb3f8ba8793 84 }
marc1119 1:ceb3f8ba8793 85
benjaminroy 4:393738672d08 86 void checkForError(uint8_t* buffer) {
benjaminroy 4:393738672d08 87 if (buffer[0] == 0x97) {
benjaminroy 4:393738672d08 88 if (buffer[1] == 0x02) {
marc1119 3:fbd4b164e8ad 89 pc.printf("Erreur dans la remote AT command pour mettre la DEL a l'etat bas.\n");
marc1119 3:fbd4b164e8ad 90 }
benjaminroy 4:393738672d08 91 else if (buffer[1] == 0x01) {
marc1119 3:fbd4b164e8ad 92 pc.printf("Erreur dans la remote AT command pour mettre la DEL a l'etat haut\n");
marc1119 3:fbd4b164e8ad 93 }
marc1119 3:fbd4b164e8ad 94 }
marc1119 3:fbd4b164e8ad 95 }
marc1119 3:fbd4b164e8ad 96
benjaminroy 4:393738672d08 97 void verifyChecksum(uint16_t frameSize, uint8_t* buffer) {
marc1119 2:3fbf13ba290e 98 uint32_t checkSum = 0;
benjaminroy 4:393738672d08 99
benjaminroy 4:393738672d08 100 for (int i = 0; i < frameSize; i++) {
marc1119 2:3fbf13ba290e 101 checkSum += buffer[i];
benjaminroy 4:393738672d08 102 }
benjaminroy 4:393738672d08 103 if ((0xFF - (checkSum & 0xFF)) != buffer[frameSize]) {
marc1119 2:3fbf13ba290e 104 pc.printf("Erreur dans le checksum. \n");
benjaminroy 4:393738672d08 105 }
marc1119 3:fbd4b164e8ad 106
benjaminroy 4:393738672d08 107 checkForError(buffer);
marc1119 2:3fbf13ba290e 108 }
marc1119 2:3fbf13ba290e 109
marc1119 2:3fbf13ba290e 110 void readFrame(){
benjaminroy 4:393738672d08 111 uint8_t temp[2] = { 0 };
benjaminroy 4:393738672d08 112 uint8_t buffer[104] = { 0 };
marc1119 2:3fbf13ba290e 113
benjaminroy 4:393738672d08 114 if (xbee.readable() && xbee.getc() == 0x7E) {
benjaminroy 4:393738672d08 115 for (int i = 0; i < 2;) {
benjaminroy 4:393738672d08 116 if (xbee.readable()) {
benjaminroy 4:393738672d08 117 temp[i] = xbee.getc();
marc1119 2:3fbf13ba290e 118 i++;
marc1119 2:3fbf13ba290e 119 }
marc1119 2:3fbf13ba290e 120 }
benjaminroy 4:393738672d08 121 uint16_t frameSize = getFrameSize(temp[0], temp[1]);
benjaminroy 4:393738672d08 122 pc.printf("La grandeur de la frame: %d\n", frameSize);
marc1119 2:3fbf13ba290e 123
benjaminroy 4:393738672d08 124 // Je lis le restant de la trame et la met dans un buffer
benjaminroy 4:393738672d08 125 for (int j = 0; j <= frameSize;) {
benjaminroy 4:393738672d08 126 if (xbee.readable()) {
benjaminroy 4:393738672d08 127 buffer[j] = xbee.getc();
marc1119 2:3fbf13ba290e 128 j++;
marc1119 2:3fbf13ba290e 129 }
marc1119 2:3fbf13ba290e 130 }
benjaminroy 4:393738672d08 131
benjaminroy 4:393738672d08 132 verifyChecksum(frameSize, buffer);
benjaminroy 4:393738672d08 133 pc.printf("Frame: %s\n", buffer);
marc1119 0:ec23a7ae804c 134 }
marc1119 0:ec23a7ae804c 135 }
marc1119 0:ec23a7ae804c 136
marc1119 0:ec23a7ae804c 137 int main() {
benjaminroy 4:393738672d08 138 EthernetInterface eth;
benjaminroy 4:393738672d08 139 TCPSocketConnection sock;
marc1119 2:3fbf13ba290e 140
marc1119 1:ceb3f8ba8793 141 reset = 0;
marc1119 1:ceb3f8ba8793 142 wait(0.4);
marc1119 1:ceb3f8ba8793 143 reset = 1;
marc1119 0:ec23a7ae804c 144
marc1119 2:3fbf13ba290e 145 readConfigFile();
marc1119 2:3fbf13ba290e 146
benjaminroy 4:393738672d08 147 if (eth.init() != 0) { // Use DHCP
marc1119 3:fbd4b164e8ad 148 pc.printf("Erreur d'initialisation du RJ45.\n");
benjaminroy 4:393738672d08 149 }
benjaminroy 4:393738672d08 150 if (eth.connect() != 0) {
marc1119 3:fbd4b164e8ad 151 pc.printf("Erreur de connection du RJ45\n");
benjaminroy 4:393738672d08 152 }
benjaminroy 4:393738672d08 153 if (sock.connect(serverAddrvalue, portNo) != 0) {
marc1119 3:fbd4b164e8ad 154 pc.printf("Erreur de socket.\n");
benjaminroy 4:393738672d08 155 }
marc1119 2:3fbf13ba290e 156
marc1119 2:3fbf13ba290e 157 //sock.send_all(buffer, sizeof(buffer)-1);
marc1119 2:3fbf13ba290e 158
marc1119 2:3fbf13ba290e 159 //initSocket();
marc1119 3:fbd4b164e8ad 160
marc1119 3:fbd4b164e8ad 161 //Set ticker to blink LED at each 1 sec
marc1119 3:fbd4b164e8ad 162 //Ticker blinkLED;
marc1119 3:fbd4b164e8ad 163 // blinkLED.attach(&toogleLED, 1);
marc1119 3:fbd4b164e8ad 164
benjaminroy 4:393738672d08 165 pc.printf("Pret a recevoir des trames... \n");
marc1119 1:ceb3f8ba8793 166 while(1) {
marc1119 2:3fbf13ba290e 167 readFrame();
benjaminroy 4:393738672d08 168 //wait_ms(1000);
benjaminroy 4:393738672d08 169 //toogleLED();
marc1119 1:ceb3f8ba8793 170 }
marc1119 0:ec23a7ae804c 171 }
marc1119 0:ec23a7ae804c 172
marc1119 2:3fbf13ba290e 173