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.
Dependencies: SoftSerial MAX14690 Buffer
Fork of rtos_threading_with_callback by
linkLayerEncoder/linkLayer.cpp@3:d7ec6dc025b0, 2018-03-30 (annotated)
- Committer:
- lwehmeier
- Date:
- Fri Mar 30 10:32:10 2018 +0000
- Revision:
- 3:d7ec6dc025b0
- Parent:
- 2:bf699e054b34
implemented basic GPS read support, freed serial connection for uart jpg camera module
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| lwehmeier | 2:bf699e054b34 | 1 | #include "linkLayer.h" |
| lwehmeier | 2:bf699e054b34 | 2 | #include "global.h" |
| lwehmeier | 2:bf699e054b34 | 3 | |
| lwehmeier | 2:bf699e054b34 | 4 | void LinkLayerEncoder::setPacket(linkPacket* p) |
| lwehmeier | 2:bf699e054b34 | 5 | { |
| lwehmeier | 2:bf699e054b34 | 6 | encoderIndex = 0; |
| lwehmeier | 2:bf699e054b34 | 7 | lp = p; |
| lwehmeier | 2:bf699e054b34 | 8 | oneCntr = 0; |
| lwehmeier | 2:bf699e054b34 | 9 | hasPacket = 1; |
| lwehmeier | 2:bf699e054b34 | 10 | preambleBits=8; |
| lwehmeier | 2:bf699e054b34 | 11 | frameTypeBits=8; |
| lwehmeier | 2:bf699e054b34 | 12 | } |
| lwehmeier | 2:bf699e054b34 | 13 | bool LinkLayerEncoder::getNext() |
| lwehmeier | 2:bf699e054b34 | 14 | { |
| lwehmeier | 2:bf699e054b34 | 15 | if(!hasPacket)//no active packet to send, get next |
| lwehmeier | 2:bf699e054b34 | 16 | setPacket(txQueue.getNext());//rtos semaphore; wait until new data available |
| lwehmeier | 2:bf699e054b34 | 17 | if(preambleBits-->0)//send preamble |
| lwehmeier | 2:bf699e054b34 | 18 | { |
| lwehmeier | 2:bf699e054b34 | 19 | return preambleBits<7;//send 1111 1110 |
| lwehmeier | 2:bf699e054b34 | 20 | } |
| lwehmeier | 2:bf699e054b34 | 21 | if(frameTypeBits-->0)//send frametype |
| lwehmeier | 2:bf699e054b34 | 22 | { |
| lwehmeier | 2:bf699e054b34 | 23 | unsigned bitIndex = 7-frameTypeBits; |
| lwehmeier | 2:bf699e054b34 | 24 | |
| lwehmeier | 2:bf699e054b34 | 25 | bool real = (bool)(lp->frameType&(1<<bitIndex)); |
| lwehmeier | 2:bf699e054b34 | 26 | bool returnVal; |
| lwehmeier | 2:bf699e054b34 | 27 | if(real) |
| lwehmeier | 2:bf699e054b34 | 28 | { |
| lwehmeier | 2:bf699e054b34 | 29 | if((oneCntr ++)<6) |
| lwehmeier | 2:bf699e054b34 | 30 | returnVal=1; |
| lwehmeier | 2:bf699e054b34 | 31 | else |
| lwehmeier | 2:bf699e054b34 | 32 | { |
| lwehmeier | 2:bf699e054b34 | 33 | returnVal=0; // insert stuffing zero |
| lwehmeier | 2:bf699e054b34 | 34 | frameTypeBits++;//need to transmit one bit next |
| lwehmeier | 2:bf699e054b34 | 35 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 36 | } |
| lwehmeier | 2:bf699e054b34 | 37 | } |
| lwehmeier | 2:bf699e054b34 | 38 | else |
| lwehmeier | 2:bf699e054b34 | 39 | { |
| lwehmeier | 2:bf699e054b34 | 40 | if(oneCntr==6) |
| lwehmeier | 2:bf699e054b34 | 41 | { |
| lwehmeier | 2:bf699e054b34 | 42 | returnVal=0; // insert stuffing zero |
| lwehmeier | 2:bf699e054b34 | 43 | frameTypeBits++;//need to transmit one bit next |
| lwehmeier | 2:bf699e054b34 | 44 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 45 | } |
| lwehmeier | 2:bf699e054b34 | 46 | else |
| lwehmeier | 2:bf699e054b34 | 47 | { |
| lwehmeier | 2:bf699e054b34 | 48 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 49 | returnVal=0; |
| lwehmeier | 2:bf699e054b34 | 50 | } |
| lwehmeier | 2:bf699e054b34 | 51 | } |
| lwehmeier | 2:bf699e054b34 | 52 | return returnVal; |
| lwehmeier | 2:bf699e054b34 | 53 | } |
| lwehmeier | 2:bf699e054b34 | 54 | unsigned byteIndex = encoderIndex / 8; |
| lwehmeier | 2:bf699e054b34 | 55 | unsigned bitIndex = encoderIndex % 8; |
| lwehmeier | 2:bf699e054b34 | 56 | encoderIndex++; |
| lwehmeier | 2:bf699e054b34 | 57 | |
| lwehmeier | 2:bf699e054b34 | 58 | bool real = (bool)(lp->payload[byteIndex]&(1<<bitIndex)); |
| lwehmeier | 2:bf699e054b34 | 59 | bool returnVal; |
| lwehmeier | 2:bf699e054b34 | 60 | if(real) |
| lwehmeier | 2:bf699e054b34 | 61 | { |
| lwehmeier | 2:bf699e054b34 | 62 | if((oneCntr ++)<6) |
| lwehmeier | 2:bf699e054b34 | 63 | returnVal=1; |
| lwehmeier | 2:bf699e054b34 | 64 | else |
| lwehmeier | 2:bf699e054b34 | 65 | { |
| lwehmeier | 2:bf699e054b34 | 66 | returnVal=0; // insert stuffing zero |
| lwehmeier | 2:bf699e054b34 | 67 | encoderIndex--;//need to transmit one bit next |
| lwehmeier | 2:bf699e054b34 | 68 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 69 | } |
| lwehmeier | 2:bf699e054b34 | 70 | } |
| lwehmeier | 2:bf699e054b34 | 71 | else |
| lwehmeier | 2:bf699e054b34 | 72 | { |
| lwehmeier | 2:bf699e054b34 | 73 | if(oneCntr==6) |
| lwehmeier | 2:bf699e054b34 | 74 | { |
| lwehmeier | 2:bf699e054b34 | 75 | returnVal=0; // insert stuffing zero |
| lwehmeier | 2:bf699e054b34 | 76 | encoderIndex--;//need to transmit one bit next |
| lwehmeier | 2:bf699e054b34 | 77 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 78 | } |
| lwehmeier | 2:bf699e054b34 | 79 | else |
| lwehmeier | 2:bf699e054b34 | 80 | { |
| lwehmeier | 2:bf699e054b34 | 81 | oneCntr=0; |
| lwehmeier | 2:bf699e054b34 | 82 | returnVal=0; |
| lwehmeier | 2:bf699e054b34 | 83 | } |
| lwehmeier | 2:bf699e054b34 | 84 | } |
| lwehmeier | 2:bf699e054b34 | 85 | |
| lwehmeier | 2:bf699e054b34 | 86 | |
| lwehmeier | 2:bf699e054b34 | 87 | byteIndex = encoderIndex / 8; |
| lwehmeier | 2:bf699e054b34 | 88 | if(byteIndex >= lp->payloadSz) |
| lwehmeier | 2:bf699e054b34 | 89 | { |
| lwehmeier | 2:bf699e054b34 | 90 | hasPacket=0; |
| lwehmeier | 2:bf699e054b34 | 91 | delete lp->payload; |
| lwehmeier | 2:bf699e054b34 | 92 | delete lp; |
| lwehmeier | 2:bf699e054b34 | 93 | } |
| lwehmeier | 2:bf699e054b34 | 94 | |
| lwehmeier | 2:bf699e054b34 | 95 | return returnVal; |
| lwehmeier | 2:bf699e054b34 | 96 | } |
