Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

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?

UserRevisionLine numberNew 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 }