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@4:e0ca69606fdf, 2017-10-23 (annotated)
- Committer:
- Sainratp
- Date:
- Mon Oct 23 20:39:18 2017 +0000
- Revision:
- 4:e0ca69606fdf
- Parent:
- 1:5c0ca9bdf810
- Child:
- 5:19a7a0f972cb
bientot;
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 | 4:e0ca69606fdf | 10 | Timer timer; |
Sainratp | 1:5c0ca9bdf810 | 11 | |
Sainratp | 1:5c0ca9bdf810 | 12 | void receiveChar() |
Sainratp | 1:5c0ca9bdf810 | 13 | { |
Sainratp | 1:5c0ca9bdf810 | 14 | char res; |
Sainratp | 1:5c0ca9bdf810 | 15 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 16 | res=0x00; |
Sainratp | 1:5c0ca9bdf810 | 17 | for(int i =0; i<8; i++) { |
Sainratp | 1:5c0ca9bdf810 | 18 | osEvent evt = queueBitReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 19 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 20 | res = res | (((char)evt.value.p)<<i); |
Sainratp | 1:5c0ca9bdf810 | 21 | } |
Sainratp | 1:5c0ca9bdf810 | 22 | } |
Sainratp | 4:e0ca69606fdf | 23 | |
Sainratp | 1:5c0ca9bdf810 | 24 | queueCharReception.put((char*)res); |
Sainratp | 1:5c0ca9bdf810 | 25 | } |
Sainratp | 1:5c0ca9bdf810 | 26 | |
Sainratp | 1:5c0ca9bdf810 | 27 | } |
Sainratp | 1:5c0ca9bdf810 | 28 | |
Sainratp | 1:5c0ca9bdf810 | 29 | void receiveBit() |
Sainratp | 1:5c0ca9bdf810 | 30 | { |
Sainratp | 4:e0ca69606fdf | 31 | timer.start(); |
Sainratp | 1:5c0ca9bdf810 | 32 | int oldTime; |
Sainratp | 4:e0ca69606fdf | 33 | bool bitType=true; |
Sainratp | 1:5c0ca9bdf810 | 34 | oldTime = timer.read_ms(); |
Sainratp | 4:e0ca69606fdf | 35 | printf("\n %d \n ",oldTime); |
Sainratp | 1:5c0ca9bdf810 | 36 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 37 | Thread::signal_wait(0x01); |
Sainratp | 4:e0ca69606fdf | 38 | //printf("\n %d",timer.read_ms()-oldTime); |
Sainratp | 4:e0ca69606fdf | 39 | if(timer.read_ms()-oldTime<(T-(T*0.15))*1000){ |
Sainratp | 4:e0ca69606fdf | 40 | Thread::signal_wait(0x01); |
Sainratp | 4:e0ca69606fdf | 41 | } |
Sainratp | 4:e0ca69606fdf | 42 | else { |
Sainratp | 1:5c0ca9bdf810 | 43 | bitType=!bitType; |
Sainratp | 1:5c0ca9bdf810 | 44 | } |
Sainratp | 1:5c0ca9bdf810 | 45 | if(bitType) { |
Sainratp | 1:5c0ca9bdf810 | 46 | queueBitReception.put((void*)0x01); |
Sainratp | 4:e0ca69606fdf | 47 | pc.putc(0x31); |
Sainratp | 1:5c0ca9bdf810 | 48 | } else { |
Sainratp | 1:5c0ca9bdf810 | 49 | queueBitReception.put((void*)0x00); |
Sainratp | 4:e0ca69606fdf | 50 | pc.putc(0x30); |
Sainratp | 1:5c0ca9bdf810 | 51 | } |
Sainratp | 4:e0ca69606fdf | 52 | oldTime=timer.read_ms(); |
Sainratp | 1:5c0ca9bdf810 | 53 | } |
Sainratp | 1:5c0ca9bdf810 | 54 | } |
Sainratp | 1:5c0ca9bdf810 | 55 | |
Sainratp | 0:703249a56b9d | 56 | |
Sainratp | 0:703249a56b9d | 57 | char calcCRC16(char* trame) |
Sainratp | 0:703249a56b9d | 58 | { |
Sainratp | 0:703249a56b9d | 59 | char length = trame[2]; |
Sainratp | 0:703249a56b9d | 60 | int CRC16 = 0xFFFF; |
Sainratp | 0:703249a56b9d | 61 | for(char i =0x00; i<length; i++) { |
Sainratp | 0:703249a56b9d | 62 | CRC16 = CRC16 ^ trame[3+i]; |
Sainratp | 0:703249a56b9d | 63 | for(int j = 0 ; j<8 ; j++) { |
Sainratp | 0:703249a56b9d | 64 | if((CRC16 & 0x1)==0x01) { |
Sainratp | 0:703249a56b9d | 65 | CRC16 = CRC16/2 ^ 0xA001; |
Sainratp | 0:703249a56b9d | 66 | } else { |
Sainratp | 0:703249a56b9d | 67 | CRC16 = CRC16/2; |
Sainratp | 0:703249a56b9d | 68 | } |
Sainratp | 0:703249a56b9d | 69 | } |
Sainratp | 0:703249a56b9d | 70 | } |
Sainratp | 1:5c0ca9bdf810 | 71 | return CRC16 & 0x00FF ; |
Sainratp | 0:703249a56b9d | 72 | } |
Sainratp | 0:703249a56b9d | 73 | |
Sainratp | 0:703249a56b9d | 74 | |
Sainratp | 1:5c0ca9bdf810 | 75 | void recieveData() |
Sainratp | 1:5c0ca9bdf810 | 76 | { |
Sainratp | 1:5c0ca9bdf810 | 77 | osEvent evt; |
Sainratp | 1:5c0ca9bdf810 | 78 | char reception; |
Sainratp | 1:5c0ca9bdf810 | 79 | while(1) { |
Sainratp | 1:5c0ca9bdf810 | 80 | evt = queueCharReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 81 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 82 | reception = (char)evt.value.p; |
Sainratp | 1:5c0ca9bdf810 | 83 | if(reception == START) { |
Sainratp | 1:5c0ca9bdf810 | 84 | do { |
Sainratp | 1:5c0ca9bdf810 | 85 | evt = queueCharReception.get(); |
Sainratp | 1:5c0ca9bdf810 | 86 | if(evt.status == osEventMessage) { |
Sainratp | 1:5c0ca9bdf810 | 87 | reception = (char)evt.value.p; |
Sainratp | 1:5c0ca9bdf810 | 88 | pc.putc(reception); |
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 | } |