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.
DO/DO.cpp@1:5c0ca9bdf810, 2017-10-23 (annotated)
- Committer:
- Sainratp
- Date:
- Mon Oct 23 15:54:33 2017 +0000
- Revision:
- 1:5c0ca9bdf810
- Parent:
- 0:703249a56b9d
- Child:
- 4:e0ca69606fdf
ptit changement;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sainratp | 1:5c0ca9bdf810 | 1 | #include "rtos.h" |
Sainratp | 0:703249a56b9d | 2 | #include "mbed.h" |
Sainratp | 0:703249a56b9d | 3 | #include "DO.h" |
Sainratp | 0:703249a56b9d | 4 | #include "config.h" |
Sainratp | 0:703249a56b9d | 5 | |
Sainratp | 1:5c0ca9bdf810 | 6 | Queue <void,16> queueBitReception; |
Sainratp | 1:5c0ca9bdf810 | 7 | Queue <char,16> queueCharReception; |
Sainratp | 1:5c0ca9bdf810 | 8 | extern Serial pc; |
Sainratp | 1:5c0ca9bdf810 | 9 | |
Sainratp | 1:5c0ca9bdf810 | 10 | |
Sainratp | 1:5c0ca9bdf810 | 11 | void receiveChar() |
Sainratp | 1:5c0ca9bdf810 | 12 | { |
Sainratp | 1:5c0ca9bdf810 | 13 | char res; |
Sainratp | 1:5c0ca9bdf810 | 14 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 15 | res=0x00; |
Sainratp | 1:5c0ca9bdf810 | 16 | for(int i =0; i<8; i++) { |
Sainratp | 1:5c0ca9bdf810 | 17 | osEvent evt = queueBitReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 18 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 19 | res = res | (((char)evt.value.p)<<i); |
Sainratp | 1:5c0ca9bdf810 | 20 | } |
Sainratp | 1:5c0ca9bdf810 | 21 | } |
Sainratp | 1:5c0ca9bdf810 | 22 | queueCharReception.put((char*)res); |
Sainratp | 1:5c0ca9bdf810 | 23 | } |
Sainratp | 1:5c0ca9bdf810 | 24 | |
Sainratp | 1:5c0ca9bdf810 | 25 | } |
Sainratp | 1:5c0ca9bdf810 | 26 | |
Sainratp | 1:5c0ca9bdf810 | 27 | void receiveBit() |
Sainratp | 1:5c0ca9bdf810 | 28 | { |
Sainratp | 1:5c0ca9bdf810 | 29 | Timer timer; |
Sainratp | 1:5c0ca9bdf810 | 30 | int oldTime; |
Sainratp | 1:5c0ca9bdf810 | 31 | bool bitType=false; |
Sainratp | 1:5c0ca9bdf810 | 32 | Thread::signal_wait(0x02); |
Sainratp | 1:5c0ca9bdf810 | 33 | oldTime = timer.read_ms(); |
Sainratp | 1:5c0ca9bdf810 | 34 | //TODO SYNCHRONISATION |
Sainratp | 1:5c0ca9bdf810 | 35 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 36 | Thread::signal_wait(0x01); |
Sainratp | 1:5c0ca9bdf810 | 37 | if(timer.read_ms()-oldTime<T) { |
Sainratp | 1:5c0ca9bdf810 | 38 | Thread::signal_wait(0x01); |
Sainratp | 1:5c0ca9bdf810 | 39 | } else { |
Sainratp | 1:5c0ca9bdf810 | 40 | bitType=!bitType; |
Sainratp | 1:5c0ca9bdf810 | 41 | } |
Sainratp | 1:5c0ca9bdf810 | 42 | |
Sainratp | 1:5c0ca9bdf810 | 43 | timer.reset(); |
Sainratp | 1:5c0ca9bdf810 | 44 | oldTime=timer.read_ms(); |
Sainratp | 1:5c0ca9bdf810 | 45 | |
Sainratp | 1:5c0ca9bdf810 | 46 | |
Sainratp | 1:5c0ca9bdf810 | 47 | if(bitType) { |
Sainratp | 1:5c0ca9bdf810 | 48 | queueBitReception.put((void*)0x01); |
Sainratp | 1:5c0ca9bdf810 | 49 | } else { |
Sainratp | 1:5c0ca9bdf810 | 50 | queueBitReception.put((void*)0x00); |
Sainratp | 1:5c0ca9bdf810 | 51 | } |
Sainratp | 1:5c0ca9bdf810 | 52 | } |
Sainratp | 1:5c0ca9bdf810 | 53 | } |
Sainratp | 1:5c0ca9bdf810 | 54 | |
Sainratp | 0:703249a56b9d | 55 | |
Sainratp | 0:703249a56b9d | 56 | char calcCRC16(char* trame) |
Sainratp | 0:703249a56b9d | 57 | { |
Sainratp | 0:703249a56b9d | 58 | char length = trame[2]; |
Sainratp | 0:703249a56b9d | 59 | int CRC16 = 0xFFFF; |
Sainratp | 0:703249a56b9d | 60 | for(char i =0x00; i<length; i++) { |
Sainratp | 0:703249a56b9d | 61 | CRC16 = CRC16 ^ trame[3+i]; |
Sainratp | 0:703249a56b9d | 62 | for(int j = 0 ; j<8 ; j++) { |
Sainratp | 0:703249a56b9d | 63 | if((CRC16 & 0x1)==0x01) { |
Sainratp | 0:703249a56b9d | 64 | CRC16 = CRC16/2 ^ 0xA001; |
Sainratp | 0:703249a56b9d | 65 | } else { |
Sainratp | 0:703249a56b9d | 66 | CRC16 = CRC16/2; |
Sainratp | 0:703249a56b9d | 67 | } |
Sainratp | 0:703249a56b9d | 68 | } |
Sainratp | 0:703249a56b9d | 69 | } |
Sainratp | 1:5c0ca9bdf810 | 70 | return CRC16 & 0x00FF ; |
Sainratp | 0:703249a56b9d | 71 | } |
Sainratp | 0:703249a56b9d | 72 | |
Sainratp | 0:703249a56b9d | 73 | |
Sainratp | 1:5c0ca9bdf810 | 74 | void recieveData() |
Sainratp | 1:5c0ca9bdf810 | 75 | { |
Sainratp | 1:5c0ca9bdf810 | 76 | osEvent evt; |
Sainratp | 1:5c0ca9bdf810 | 77 | char reception; |
Sainratp | 1:5c0ca9bdf810 | 78 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 79 | evt = queueCharReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 80 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 81 | reception = (char)evt.value.p; |
Sainratp | 1:5c0ca9bdf810 | 82 | if(reception == START) { |
Sainratp | 1:5c0ca9bdf810 | 83 | do { |
Sainratp | 1:5c0ca9bdf810 | 84 | evt = queueCharReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 85 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 86 | reception = (char)evt.value.p; |
Sainratp | 1:5c0ca9bdf810 | 87 | pc.putc(reception); |
Sainratp | 1:5c0ca9bdf810 | 88 | //TODO remplacer le putc par la fabrication d'un trame propre + calcul du crc16 avec cette derniere |
Sainratp | 1:5c0ca9bdf810 | 89 | } |
Sainratp | 1:5c0ca9bdf810 | 90 | }while(reception!=STOP); |
Sainratp | 1:5c0ca9bdf810 | 91 | } |
Sainratp | 1:5c0ca9bdf810 | 92 | } |
Sainratp | 1:5c0ca9bdf810 | 93 | } |
Sainratp | 0:703249a56b9d | 94 | } |