
* Routeur
main.cpp@1:2abb01319ca6, 2017-02-12 (annotated)
- Committer:
- benjaminroy
- Date:
- Sun Feb 12 00:01:06 2017 +0000
- Revision:
- 1:2abb01319ca6
- Parent:
- 0:b399a75f4990
- Child:
- 2:aebf0ae12644
...
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benjaminroy | 0:b399a75f4990 | 1 | #include "ConfigFile.h" |
benjaminroy | 0:b399a75f4990 | 2 | #include "mbed.h" |
benjaminroy | 0:b399a75f4990 | 3 | |
benjaminroy | 0:b399a75f4990 | 4 | DigitalOut reset(p8); |
benjaminroy | 1:2abb01319ca6 | 5 | Serial xbee(p13, p14); // tx, rx |
benjaminroy | 0:b399a75f4990 | 6 | Serial pc(USBTX, USBRX); // tx, rx |
benjaminroy | 0:b399a75f4990 | 7 | |
benjaminroy | 0:b399a75f4990 | 8 | uint8_t calculateChecksum(uint8_t frameSize, uint8_t* buffer) { |
benjaminroy | 0:b399a75f4990 | 9 | uint32_t checkSum = 0; |
benjaminroy | 0:b399a75f4990 | 10 | uint8_t frameTypeIndex = 3; |
benjaminroy | 0:b399a75f4990 | 11 | |
benjaminroy | 0:b399a75f4990 | 12 | for (int i = frameTypeIndex; i < frameSize - 1; i++) { |
benjaminroy | 0:b399a75f4990 | 13 | checkSum += buffer[i]; |
benjaminroy | 0:b399a75f4990 | 14 | } |
benjaminroy | 0:b399a75f4990 | 15 | |
benjaminroy | 0:b399a75f4990 | 16 | return (uint8_t)(0xFF - (checkSum & 0xFF)); |
benjaminroy | 0:b399a75f4990 | 17 | } |
benjaminroy | 0:b399a75f4990 | 18 | |
benjaminroy | 0:b399a75f4990 | 19 | uint16_t getFrameSize(uint8_t value1, uint8_t value2) { |
benjaminroy | 0:b399a75f4990 | 20 | union { |
benjaminroy | 0:b399a75f4990 | 21 | uint16_t u16_value; |
benjaminroy | 0:b399a75f4990 | 22 | uint8_t u8_value[2]; |
benjaminroy | 0:b399a75f4990 | 23 | } length; |
benjaminroy | 0:b399a75f4990 | 24 | |
benjaminroy | 0:b399a75f4990 | 25 | length.u8_value[1] = value1; |
benjaminroy | 0:b399a75f4990 | 26 | length.u8_value[0] = value2; |
benjaminroy | 0:b399a75f4990 | 27 | |
benjaminroy | 0:b399a75f4990 | 28 | return length.u16_value; |
benjaminroy | 0:b399a75f4990 | 29 | } |
benjaminroy | 0:b399a75f4990 | 30 | |
benjaminroy | 0:b399a75f4990 | 31 | /*void readFrame(){ |
benjaminroy | 0:b399a75f4990 | 32 | uint8_t temp[2] = { 0 }; |
benjaminroy | 0:b399a75f4990 | 33 | uint8_t buffer[104] = { 0 }; |
benjaminroy | 0:b399a75f4990 | 34 | |
benjaminroy | 0:b399a75f4990 | 35 | if (uart.readable() && uart.getc() == 0x7E) { |
benjaminroy | 0:b399a75f4990 | 36 | |
benjaminroy | 0:b399a75f4990 | 37 | for (int i = 0; i < 2;) { |
benjaminroy | 0:b399a75f4990 | 38 | if(uart.readable()) { |
benjaminroy | 0:b399a75f4990 | 39 | temp[i] = uart.getc(); |
benjaminroy | 0:b399a75f4990 | 40 | i++; |
benjaminroy | 0:b399a75f4990 | 41 | } |
benjaminroy | 0:b399a75f4990 | 42 | } |
benjaminroy | 0:b399a75f4990 | 43 | uint16_t frameSize = getFrameSize(temp[0], temp[1]); |
benjaminroy | 0:b399a75f4990 | 44 | |
benjaminroy | 0:b399a75f4990 | 45 | for(int j = 0; j < frameSize + 1;) { |
benjaminroy | 0:b399a75f4990 | 46 | if (uart.readable()) { |
benjaminroy | 0:b399a75f4990 | 47 | buffer[j] = uart.getc(); |
benjaminroy | 0:b399a75f4990 | 48 | j++; |
benjaminroy | 0:b399a75f4990 | 49 | } |
benjaminroy | 0:b399a75f4990 | 50 | } |
benjaminroy | 0:b399a75f4990 | 51 | |
benjaminroy | 0:b399a75f4990 | 52 | pc.printf("Frame: %s\n", buffer); |
benjaminroy | 0:b399a75f4990 | 53 | } |
benjaminroy | 0:b399a75f4990 | 54 | }*/ |
benjaminroy | 0:b399a75f4990 | 55 | |
benjaminroy | 0:b399a75f4990 | 56 | void sendFrame(uint8_t bufferSize, uint8_t* buffer) { |
benjaminroy | 1:2abb01319ca6 | 57 | if (xbee.writeable()) { |
benjaminroy | 1:2abb01319ca6 | 58 | xbee.printf("%s", buffer); |
benjaminroy | 0:b399a75f4990 | 59 | } |
benjaminroy | 0:b399a75f4990 | 60 | /*for (int i = 0; i < bufferSize;) { |
benjaminroy | 1:2abb01319ca6 | 61 | if (xbee.writeable()) { |
benjaminroy | 1:2abb01319ca6 | 62 | xbee.putc(buffer[i]); |
benjaminroy | 0:b399a75f4990 | 63 | i++; |
benjaminroy | 0:b399a75f4990 | 64 | } |
benjaminroy | 0:b399a75f4990 | 65 | }*/ |
benjaminroy | 0:b399a75f4990 | 66 | } |
benjaminroy | 0:b399a75f4990 | 67 | |
benjaminroy | 0:b399a75f4990 | 68 | void setFrame() { |
benjaminroy | 0:b399a75f4990 | 69 | const uint8_t bufferSize = 22; |
benjaminroy | 0:b399a75f4990 | 70 | uint8_t buffer[bufferSize] = { 0 }; |
benjaminroy | 0:b399a75f4990 | 71 | |
benjaminroy | 0:b399a75f4990 | 72 | buffer[0] = 0x7E; // Start Delimiter |
benjaminroy | 0:b399a75f4990 | 73 | buffer[1] = 0x00; // Length |
benjaminroy | 0:b399a75f4990 | 74 | buffer[2] = 0x12; // Length |
benjaminroy | 0:b399a75f4990 | 75 | buffer[3] = 0x10; // Frame Type |
benjaminroy | 0:b399a75f4990 | 76 | buffer[4] = 0x01; // Frame ID |
benjaminroy | 0:b399a75f4990 | 77 | buffer[5] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 78 | buffer[6] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 79 | buffer[7] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 80 | buffer[8] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 81 | buffer[9] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 82 | buffer[10] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 83 | buffer[11] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 84 | buffer[12] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 85 | buffer[13] = 0xFF; // 16 bit adress |
benjaminroy | 0:b399a75f4990 | 86 | buffer[14] = 0xFE; // 16 bit adress |
benjaminroy | 0:b399a75f4990 | 87 | buffer[15] = 0x00; // Broadcast radius |
benjaminroy | 0:b399a75f4990 | 88 | buffer[16] = 0x00; // Options |
benjaminroy | 0:b399a75f4990 | 89 | buffer[17] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 90 | buffer[18] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 91 | buffer[19] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 92 | buffer[20] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 93 | buffer[21] = calculateChecksum(bufferSize, buffer); // Checksum |
benjaminroy | 0:b399a75f4990 | 94 | |
benjaminroy | 0:b399a75f4990 | 95 | pc.printf("Frame: %s\n", buffer); |
benjaminroy | 0:b399a75f4990 | 96 | sendFrame(bufferSize, buffer); |
benjaminroy | 0:b399a75f4990 | 97 | } |
benjaminroy | 0:b399a75f4990 | 98 | |
benjaminroy | 0:b399a75f4990 | 99 | /* void readConfigFile() { |
benjaminroy | 0:b399a75f4990 | 100 | LocalFileSystem local("local"); |
benjaminroy | 0:b399a75f4990 | 101 | ConfigFile cfg; |
benjaminroy | 0:b399a75f4990 | 102 | char *serverAddr = "serverAddr"; |
benjaminroy | 0:b399a75f4990 | 103 | char *tempPortNo = "portNb"; |
benjaminroy | 0:b399a75f4990 | 104 | |
benjaminroy | 0:b399a75f4990 | 105 | if (!cfg.read("/local/input.cfg")) { |
benjaminroy | 0:b399a75f4990 | 106 | error("Erreur dans la lecture du fichier\n"); |
benjaminroy | 0:b399a75f4990 | 107 | } else { |
benjaminroy | 0:b399a75f4990 | 108 | cfg.getValue(serverAddr, &serverAddrvalue[0], sizeof(serverAddrvalue)); |
benjaminroy | 0:b399a75f4990 | 109 | cfg.getValue(tempPortNo, &portNbValue[0], sizeof(portNbValue)); |
benjaminroy | 0:b399a75f4990 | 110 | portNo = (uint16_t)strtol(portNbValue, NULL, 10); |
benjaminroy | 0:b399a75f4990 | 111 | } |
benjaminroy | 0:b399a75f4990 | 112 | }*/ |
benjaminroy | 0:b399a75f4990 | 113 | |
benjaminroy | 0:b399a75f4990 | 114 | int main() { |
benjaminroy | 0:b399a75f4990 | 115 | reset = 0; |
benjaminroy | 0:b399a75f4990 | 116 | wait(0.4); |
benjaminroy | 0:b399a75f4990 | 117 | reset = 1; |
benjaminroy | 0:b399a75f4990 | 118 | wait_ms(1); |
benjaminroy | 0:b399a75f4990 | 119 | |
benjaminroy | 0:b399a75f4990 | 120 | setFrame(); |
benjaminroy | 0:b399a75f4990 | 121 | } |