BraceletUS / Mbed 2 deprecated S05APP3

Dependencies:   ConfigFile EthernetInterface mbed-rtos mbed

Fork of S05APP3 by App S5

Committer:
marc1119
Date:
Sat Feb 11 01:54:57 2017 +0000
Revision:
3:fbd4b164e8ad
Parent:
2:3fbf13ba290e
Child:
4:393738672d08
L'envoie ne fonctionne pas encore correctement

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