
* Routeur
main.cpp@2:aebf0ae12644, 2017-02-12 (annotated)
- Committer:
- benjaminroy
- Date:
- Sun Feb 12 02:26:40 2017 +0000
- Revision:
- 2:aebf0ae12644
- Parent:
- 1:2abb01319ca6
- Child:
- 3:0a2a583626de
:-( Pas capable de communiquer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
benjaminroy | 2:aebf0ae12644 | 1 | // ROUTER |
benjaminroy | 0:b399a75f4990 | 2 | #include "ConfigFile.h" |
benjaminroy | 0:b399a75f4990 | 3 | #include "mbed.h" |
benjaminroy | 0:b399a75f4990 | 4 | |
benjaminroy | 0:b399a75f4990 | 5 | DigitalOut reset(p8); |
benjaminroy | 1:2abb01319ca6 | 6 | Serial xbee(p13, p14); // tx, rx |
benjaminroy | 0:b399a75f4990 | 7 | Serial pc(USBTX, USBRX); // tx, rx |
benjaminroy | 0:b399a75f4990 | 8 | |
benjaminroy | 2:aebf0ae12644 | 9 | uint16_t panId = 0; |
benjaminroy | 2:aebf0ae12644 | 10 | char panIdChar[5]; |
benjaminroy | 2:aebf0ae12644 | 11 | |
benjaminroy | 2:aebf0ae12644 | 12 | void printBuffer(uint8_t bufferSize, uint8_t* buffer) { |
benjaminroy | 2:aebf0ae12644 | 13 | for(int k = 0; k < bufferSize; k++) { |
benjaminroy | 2:aebf0ae12644 | 14 | pc.printf("%X-", buffer[k]); |
benjaminroy | 2:aebf0ae12644 | 15 | } |
benjaminroy | 2:aebf0ae12644 | 16 | printf("\n"); |
benjaminroy | 2:aebf0ae12644 | 17 | } |
benjaminroy | 2:aebf0ae12644 | 18 | |
benjaminroy | 2:aebf0ae12644 | 19 | /* |
benjaminroy | 2:aebf0ae12644 | 20 | * Read a configuration file from a mbed. |
benjaminroy | 2:aebf0ae12644 | 21 | */ |
benjaminroy | 2:aebf0ae12644 | 22 | void readConfigFile() { |
benjaminroy | 2:aebf0ae12644 | 23 | LocalFileSystem local("local"); |
benjaminroy | 2:aebf0ae12644 | 24 | ConfigFile cfg; |
benjaminroy | 2:aebf0ae12644 | 25 | char *panIdStr = "panID"; |
benjaminroy | 2:aebf0ae12644 | 26 | |
benjaminroy | 2:aebf0ae12644 | 27 | if (!cfg.read("/local/input.cfg")) { |
benjaminroy | 2:aebf0ae12644 | 28 | error("Erreur dans la lecture du fichier de configuration.\n"); |
benjaminroy | 2:aebf0ae12644 | 29 | } else { |
benjaminroy | 2:aebf0ae12644 | 30 | cfg.getValue(panIdStr, &panIdChar[0], sizeof(panIdChar)); |
benjaminroy | 2:aebf0ae12644 | 31 | panId = (uint16_t)strtol(panIdChar, NULL, 10); |
benjaminroy | 2:aebf0ae12644 | 32 | printf("The PAN ID is %i\n", panId); |
benjaminroy | 2:aebf0ae12644 | 33 | } |
benjaminroy | 2:aebf0ae12644 | 34 | } |
benjaminroy | 2:aebf0ae12644 | 35 | |
benjaminroy | 0:b399a75f4990 | 36 | uint8_t calculateChecksum(uint8_t frameSize, uint8_t* buffer) { |
benjaminroy | 2:aebf0ae12644 | 37 | uint32_t checksum = 0; |
benjaminroy | 0:b399a75f4990 | 38 | uint8_t frameTypeIndex = 3; |
benjaminroy | 0:b399a75f4990 | 39 | |
benjaminroy | 0:b399a75f4990 | 40 | for (int i = frameTypeIndex; i < frameSize - 1; i++) { |
benjaminroy | 2:aebf0ae12644 | 41 | checksum += buffer[i]; |
benjaminroy | 0:b399a75f4990 | 42 | } |
benjaminroy | 0:b399a75f4990 | 43 | |
benjaminroy | 2:aebf0ae12644 | 44 | return (uint8_t)(0xFF - (checksum & 0xFF)); |
benjaminroy | 0:b399a75f4990 | 45 | } |
benjaminroy | 0:b399a75f4990 | 46 | |
benjaminroy | 0:b399a75f4990 | 47 | void sendFrame(uint8_t bufferSize, uint8_t* buffer) { |
benjaminroy | 2:aebf0ae12644 | 48 | for (int i = 0; i < bufferSize;) { |
benjaminroy | 1:2abb01319ca6 | 49 | if (xbee.writeable()) { |
benjaminroy | 1:2abb01319ca6 | 50 | xbee.putc(buffer[i]); |
benjaminroy | 2:aebf0ae12644 | 51 | wait(0.50); |
benjaminroy | 0:b399a75f4990 | 52 | i++; |
benjaminroy | 0:b399a75f4990 | 53 | } |
benjaminroy | 2:aebf0ae12644 | 54 | } |
benjaminroy | 0:b399a75f4990 | 55 | } |
benjaminroy | 0:b399a75f4990 | 56 | |
benjaminroy | 0:b399a75f4990 | 57 | void setFrame() { |
benjaminroy | 0:b399a75f4990 | 58 | const uint8_t bufferSize = 22; |
benjaminroy | 0:b399a75f4990 | 59 | uint8_t buffer[bufferSize] = { 0 }; |
benjaminroy | 0:b399a75f4990 | 60 | |
benjaminroy | 0:b399a75f4990 | 61 | buffer[0] = 0x7E; // Start Delimiter |
benjaminroy | 0:b399a75f4990 | 62 | buffer[1] = 0x00; // Length |
benjaminroy | 0:b399a75f4990 | 63 | buffer[2] = 0x12; // Length |
benjaminroy | 0:b399a75f4990 | 64 | buffer[3] = 0x10; // Frame Type |
benjaminroy | 0:b399a75f4990 | 65 | buffer[4] = 0x01; // Frame ID |
benjaminroy | 0:b399a75f4990 | 66 | buffer[5] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 67 | buffer[6] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 68 | buffer[7] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 69 | buffer[8] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 70 | buffer[9] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 71 | buffer[10] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 72 | buffer[11] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 73 | buffer[12] = 0x00; // 64 bit adress |
benjaminroy | 0:b399a75f4990 | 74 | buffer[13] = 0xFF; // 16 bit adress |
benjaminroy | 0:b399a75f4990 | 75 | buffer[14] = 0xFE; // 16 bit adress |
benjaminroy | 0:b399a75f4990 | 76 | buffer[15] = 0x00; // Broadcast radius |
benjaminroy | 0:b399a75f4990 | 77 | buffer[16] = 0x00; // Options |
benjaminroy | 0:b399a75f4990 | 78 | buffer[17] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 79 | buffer[18] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 80 | buffer[19] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 81 | buffer[20] = 0x02; // RF Data... |
benjaminroy | 0:b399a75f4990 | 82 | buffer[21] = calculateChecksum(bufferSize, buffer); // Checksum |
benjaminroy | 0:b399a75f4990 | 83 | |
benjaminroy | 2:aebf0ae12644 | 84 | printBuffer(bufferSize, buffer); |
benjaminroy | 0:b399a75f4990 | 85 | sendFrame(bufferSize, buffer); |
benjaminroy | 0:b399a75f4990 | 86 | } |
benjaminroy | 0:b399a75f4990 | 87 | |
benjaminroy | 2:aebf0ae12644 | 88 | int main() { |
benjaminroy | 2:aebf0ae12644 | 89 | printf("Starting a router...\n"); |
benjaminroy | 0:b399a75f4990 | 90 | |
benjaminroy | 0:b399a75f4990 | 91 | reset = 0; |
benjaminroy | 2:aebf0ae12644 | 92 | wait_ms(1); |
benjaminroy | 0:b399a75f4990 | 93 | reset = 1; |
benjaminroy | 0:b399a75f4990 | 94 | wait_ms(1); |
benjaminroy | 0:b399a75f4990 | 95 | |
benjaminroy | 2:aebf0ae12644 | 96 | readConfigFile(); |
benjaminroy | 2:aebf0ae12644 | 97 | |
benjaminroy | 2:aebf0ae12644 | 98 | xbee.baud(9600); // Set baud rate |
benjaminroy | 2:aebf0ae12644 | 99 | xbee.printf("ATID %i\r", panId); // Set the 64-bit PAN ID |
benjaminroy | 2:aebf0ae12644 | 100 | xbee.printf("ATWR \r"); |
benjaminroy | 2:aebf0ae12644 | 101 | xbee.printf("ATCN \r"); |
benjaminroy | 2:aebf0ae12644 | 102 | |
benjaminroy | 0:b399a75f4990 | 103 | setFrame(); |
benjaminroy | 0:b399a75f4990 | 104 | } |