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
Diff: main.cpp
- Revision:
- 2:3fbf13ba290e
- Parent:
- 1:ceb3f8ba8793
- Child:
- 3:fbd4b164e8ad
--- a/main.cpp Fri Feb 10 19:25:34 2017 +0000 +++ b/main.cpp Fri Feb 10 21:58:27 2017 +0000 @@ -5,41 +5,53 @@ //Serial avec le Xbee DigitalOut reset(p8); Serial uart(p13, p14); // tx, rx -uint8_t frameSize = 0; +uint16_t frameSize = 0; //Serial avec le PC Serial pc(USBTX, USBRX); // tx, rx //Socket Buffer -uint8_t buffer[104] = {0}; +TCPSocketConnection sock; +uint8_t buffer[104] = { 0 }; char serverAddrvalue[32]; -TCPSocketConnection sock; +uint16_t portNo = 0; +char portNbValue[4]; + +//Union créée pour mettre deux 8 bits en un 16 bits. +uint16_t getLength(uint8_t value1, uint8_t value2) { + union { + uint16_t u16_value; + uint8_t u8_value[2]; + } length; + + length.u8_value[1] = value1; + length.u8_value[0] = value2; + + return length.u16_value; +} + //Read the config file void readConfigFile() { LocalFileSystem local("local"); ConfigFile cfg; char *serverAddr = "serverAddr"; - if (!cfg.read("/local/input.cfg")) error("Failure to read a configuration file.\n"); - else cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue)); -} - -//Init RJ45 and use DHCP -void initRJ45() -{ - EthernetInterface eth; - eth.init(); - eth.connect(); + char *tempPortNo = "portNb"; + if (!cfg.read("/local/input.cfg")) error("Erreur dans la lecture du fichier\n"); + else + { + cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue)); + cfg.getValue(tempPortNo, &portNbValue[0], sizeof(portNbValue)); + portNo = (uint16_t)strtol(portNbValue, NULL, 10); + pc.printf("%i", portNo); + } } void initSocket() { - //Init Socket - //sock.connect(serverAddrvalue, 502); - sock.connect("192.168.0.103", 502); - sock.send_all(buffer, sizeof(buffer)-1); + - int repSize; + //int repSize; //while (true) { //sprintf (buffer, (const char *)uart.getc()); @@ -56,36 +68,69 @@ //} } -void checkChecksum() +void verifyChecksum() { - //On additionne tout les bytes sauf le API Frame et le Length et on fait FF - résultat = checksum - for(int i = 2; i < frameSize; i++) - { - int checkSum += buffer[i] + //Je valide le checksum pour voir si tout est correct. + uint32_t checkSum = 0; + for(int i = 0; i < frameSize; i++) { + checkSum += buffer[i]; } - if((0xFF- checkSum) == buffer[frameSize]) - { - //CheckSum ok - } - else - { - //Error + if((0xFF - (checkSum & 0xFF)) != buffer[frameSize]) + pc.printf("Erreur dans le checksum. \n"); +} + +void readFrame(){ + + uint8_t temp[2] = { 0 }; + if(uart.readable() && uart.getc() == 0x7E) { + + //On ramasse la taille de la trame + for(int i = 0; i < 2;) + { + if(uart.readable()) { + temp[i] = uart.getc(); + i++; + } + } + frameSize = getLength(temp[0], temp[1]); + + //Je lis le restant de la tramme et la met dans un buffer + for(int j = 0; j < frameSize + 1;) + { + if(uart.readable()) { + buffer[j] = uart.getc(); + j++; + } + } + verifyChecksum(); } } int main() { + reset = 0; wait(0.4); reset = 1; - //readConfigFile(); - initRJ45(); - initSocket(); - + readConfigFile(); + + //Init RJ45 and use DHCP + EthernetInterface eth; + if(eth.init() != 0) + pc.prinf("Erreur d'initialisation du RJ45\n"); + if(eth.connect() != 0) + pc.prinf("Erreur de connection du RJ45\n"); + + //Init Socket + if(sock.connect(serverAddrvalue, portNo) != 0) + pc.printf("Erreur de socket\n"); + + //sock.send_all(buffer, sizeof(buffer)-1); + + //initSocket(); while(1) { - if(uart.readable()) { - pc.printf("%i", uart.getc()); - } + readFrame(); } } +