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