gbgfa
Dependencies: mbed-rtos mbed EthernetInterface WebSocketClient
Revision 4:287c3bd0c425, committed 2017-03-11
- Comitter:
- ABuche
- Date:
- Sat Mar 11 18:01:54 2017 +0000
- Parent:
- 3:889e47988154
- Commit message:
- WebSocket
Changed in this revision
WebSocketClient.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebSocketClient.lib Sat Mar 11 18:01:54 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/samux/code/WebSocketClient/#4567996414a5
--- a/main.cpp Mon Feb 13 20:43:20 2017 +0000 +++ b/main.cpp Sat Mar 11 18:01:54 2017 +0000 @@ -1,10 +1,16 @@ +//BUCA2201 +//GODJ2407 + #include "mbed.h" #include "rtos.h" #include "EthernetInterface.h" +#include "Websocket.h" LocalFileSystem local("local"); DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); DigitalOut ledError(LED4); DigitalOut reset(p8); @@ -15,15 +21,17 @@ Thread* receptionThread; Thread* processingThread; Thread* ledThread; -Thread* ethernetReceptionThread; Thread* errorDisplay; -TCPSocketConnection sock; +Websocket* sock; -char LED_Toggle[] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x44, 0x30, 0x00, 0x25 - }; //Change index 13 & 14 & 18 & 19 +//Commande AT pour changer la pin0 +char LED_Toggle[] = {0x7E, 0x00, 0x10, 0x17, 0x01, + 0x00, 0x13, 0xA2, 0x00, 0x40, 0x8B, 0x41, 0x8B, + 0x00, 0x00, + 0x02, 0x44, 0x30, 0x00, 0x25}; +//Trois commandes pour changer le PAN ID d'un device char AT_ID[] = {0x7E, 0x00, 0x06, 0x09, 0x01, 0x49 , 0x44, 0x00, 0x00, 0x00}; // +DATA + CS (7 & 8) const char AT_WR[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x57, 0x52, 0x4C}; const char AT_AC[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x41, 0x43, 0x71}; @@ -32,9 +40,9 @@ char msg[25]; } message; +//Storage des adresses qu'on toggle leur pin0 typedef struct { - char al; - char ah; + char adr[10]; } address; address addresses[2]; @@ -43,6 +51,10 @@ Queue<message, 25> queue; MemoryPool<message, 25> mPool; +//URL du serveur +char url[128]; + +//Calcul le checksum d'une trame char checksum(char array[], char length) { char cs = 0; @@ -52,6 +64,7 @@ return 0xFF - cs; } +//Convertie les donnes de l'acc en donnees lisible int traitementAcc(char msb, char lsb) { int val = msb > 127 ? 0xFFFFF000 | (msb << 4) : msb << 4; @@ -77,9 +90,13 @@ if(msg->msg[0] == 0x7E) { msg->msg[1] = xbee.getc(); msg->msg[2] = xbee.getc(); - + + //On assume que la longueur est toujours plus petite que 256 for (int i = 3; i < msg->msg[2] + 4; i++) { msg->msg[i] = xbee.getc(); + if(msg->msg[i] == 0x7E) { + break;//Erreur de longueur + } } queue.put(msg); @@ -94,55 +111,61 @@ { while(1) { message* msg = (message*)queue.get().value.p; - + switch(msg->msg[3]) { case 0x88: if (msg->msg[7] != 0x00) { errorDisplay->signal_set(0x1); - printf("AT command error\r\n"); + pc.printf("AT command error\r\n"); } break; case 0x8A: if (msg->msg[4] != 0x00 && msg->msg[4] != 0x06) { errorDisplay->signal_set(0x1); - printf("%02x - Modem error\r\n", msg->msg[4]); + pc.printf("%02x - Modem error\r\n", msg->msg[4]); } break; case 0x97: if (msg->msg[17] != 0x00) { errorDisplay->signal_set(0x1); - printf("%02x - Remote AT command error\r\n", msg->msg[4]); + pc.printf("%02x - Remote AT command error\r\n", msg->msg[4]); } break; case 0x90: if(msg->msg[2] >= 0x0C) { - bool exists = false; - + char exists = 0; + + //Determine si c'est une nouvelle adresse for (int i = 0; i< sizeof(addresses); i++) { - if(addresses[i].ah == msg->msg[12] && addresses[i].al == msg->msg[13]) { - exists = true; - break; + for(int j = 0; j < 10;j++) { + if(addresses[i].adr[j] == msg->msg[j + 4]){ + exists++; + } } + + if(exists == 10){ break;} //Existe deja + exists = 0; //Regarde les autres adresses } - - if (!exists) { - pc.printf("----------------------\r\n"); - for(int i = 0; i < msg->msg[2] + 4;i++){ - pc.printf("%02x ", msg->msg[i]); + + if (exists < 10) { + pc.printf("New Address: "); + for(int i = 0; i < 10;i++){ + addresses[addressCounter].adr[i] = msg->msg[i + 4]; + pc.printf("%02x ", addresses[addressCounter].adr[i]); } - pc.printf("\r\n----------------------\r\n"); - addresses[addressCounter].ah = msg->msg[12]; - addresses[addressCounter].al = msg->msg[13]; - pc.printf("New address: %02x %02x\r\n", addresses[addressCounter].ah, addresses[addressCounter].al); + pc.printf("\r\n"); + addressCounter++; } + //Extraction des donnes pertinentes char data[7]; - //pc.printf("%02x ", msg->msg[15]); for(int i = 15; i < msg->msg[2] + 3; i++) { data[i - 15] = msg->msg[i]; } - + + //Lecture du premier char pour connaitre le type + char reception[256]; switch(data[0]) { case 0x00: char response[] = "Etat du bouton: "; @@ -151,8 +174,12 @@ } else if (data[1] == 0x01) { response[16] = '1'; } - sock.send_all(response, 17); - pc.printf("Sending to server: %s\r\n", response); + sock->send(response); + led2 = !led2; + pc.printf("Sending to server: %s\r\n", response); + + sock->read(reception); + pc.printf("Received from server: %s\r\n", reception); break; case 0x01: int x = traitementAcc(data[1], data[2]); @@ -161,25 +188,22 @@ char out[128]; sprintf(out, "Accelerometre [x: %d, y: %d, z: %d]", x,y,z); - sock.send_all(out, 128); + sock->send(out); + led3 = !led3; + pc.printf("Sending to server: %s\r\n", out); + + sock->read(reception); + pc.printf("Received from server: %s\r\n", reception); break; } - - /* - for(int i = 0; i < msg->msg[2] + 4;i++){ - pc.printf("%02x ", msg->msg[i]); - } - pc.printf("\r\n");*/ - } break; default: errorDisplay->signal_set(0x1); - printf("Invalid command error\r\n"); + pc.printf("Invalid command error\r\n"); break; } - mPool.free(msg); } } @@ -199,10 +223,13 @@ bool high = true; while(1) { Thread::signal_wait(0x1); - - for (int i = 0; i < addressCounter; i++) { - LED_Toggle[13] = addresses[i].ah; - LED_Toggle[14] = addresses[i].al; + + //Itteration des adresses qu'on doit faire flasher + for (int i = 0; i < addressCounter; i++) { + for (int j = 0; j < 10; j++) { + LED_Toggle[j + 5] = addresses[i].adr[j]; + } + LED_Toggle[18] = high ? 0x05 : 0x04; LED_Toggle[19] = checksum(LED_Toggle, sizeof(LED_Toggle)); @@ -221,30 +248,24 @@ ledThread->signal_set(0x1); } -void receiveEthernet() -{ - char reception[256]; - sock.receive_all(reception, 256); - //pc.printf("Received from server: %s", reception); -} - int main() -{ +{ reset = 0; - wait(0.4); + wait(1); reset = 1; wait(1); int pan; - char url[128]; - + + //Lecture de la config FILE* f = fopen("/local/coord.cfg", "r"); fscanf(f,"%x", &pan); fscanf(f,"%s", &url); fclose(f); - pc.printf("URL: %s", url); + pc.printf("URL: %s | ", url); + //Convertie le pan ID char buff[2]; buff[0]=(pan>>8)&0xff; buff[1]=(pan)&0xff; @@ -252,13 +273,23 @@ AT_ID[7] = buff[0]; AT_ID[8] = buff[1]; - pc.printf("PAN: %02x%02x", AT_ID[7],AT_ID[8]); + pc.printf("PAN: %02x%02x\r\n", AT_ID[7],AT_ID[8]); char cs = checksum(AT_ID, sizeof(AT_ID)); - pc.printf("CS: %02x\r\n", cs); AT_ID[9] = cs; - + + //Configuration Ethernet + EthernetInterface eth; + eth.init(); //Use DHCP + //eth.init("192.168.0.3", "255.255.255.0", "192.168.0.2"); + eth.connect(); + pc.printf("IP Address is %s\r\n", eth.getIPAddress()); + Websocket ws(url); + sock = &ws; + while(sock->connect() < 0){}//Attente du serveur + + //Setup du pan ID for(char i = 0; i<sizeof(AT_ID); i++) { xbee.putc(AT_ID[i]); } @@ -270,16 +301,7 @@ for(char i = 0; i<sizeof(AT_AC); i++) { xbee.putc(AT_AC[i]); } - - - /* - EthernetInterface eth; - eth.init(); //Use DHCP - eth.connect(); - printf("IP Address is %s\r\n", eth.getIPAddress()); - - while(sock.connect(url, 8000)){}; - */ + wait(1); Thread errorDisplayLocal; errorDisplay = &errorDisplayLocal; @@ -288,29 +310,18 @@ Thread localReceptionThread; receptionThread = &localReceptionThread; receptionThread->start(&reception); + Thread localLedThread; ledThread = &localLedThread; ledThread->start(&flashLED); - + Ticker horloge; - horloge.attach(&LEDSignal, 2.5); - + horloge.attach(&LEDSignal, 0.5); + Thread localProcessingThread; processingThread = &localProcessingThread; processingThread->start(&processing); - /* - addresses[0].ah = 0xf4; - addresses[1].al = 0x13; - addressCounter++; - */ - - - Thread localEthernetReceptionThread; - ethernetReceptionThread = &localEthernetReceptionThread; - ethernetReceptionThread->start(&receiveEthernet); - while(1) { - } }