Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ConfigFile EthernetInterface mbed-rtos mbed
Fork of S05APP3 by
main.cpp@4:393738672d08, 2017-02-12 (annotated)
- 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?
User | Revision | Line number | New 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 |