SRK Version of mDot LoRa_Sensormode_SRK
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sensornode by
app/Decoder.cpp@6:e2ae47490f60, 2016-08-15 (annotated)
- Committer:
- skramer
- Date:
- Mon Aug 15 18:57:35 2016 +0000
- Revision:
- 6:e2ae47490f60
- Parent:
- 0:f2815503561f
Uptodate with last changes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mitea1 | 0:f2815503561f | 1 | /* |
mitea1 | 0:f2815503561f | 2 | * Decoder.cpp |
mitea1 | 0:f2815503561f | 3 | * |
mitea1 | 0:f2815503561f | 4 | * Created on: 16.05.2016 |
mitea1 | 0:f2815503561f | 5 | * Author: Adrian |
mitea1 | 0:f2815503561f | 6 | */ |
mitea1 | 0:f2815503561f | 7 | |
mitea1 | 0:f2815503561f | 8 | #include "Decoder.h" |
mitea1 | 0:f2815503561f | 9 | #include <RawSerial.h> |
mitea1 | 0:f2815503561f | 10 | |
mitea1 | 0:f2815503561f | 11 | Decoder::Decoder(mbed::RawSerial* serial) { |
mitea1 | 0:f2815503561f | 12 | this->serial = serial; |
mitea1 | 0:f2815503561f | 13 | this->serial->attach(this,&Decoder::rxInterrupt,this->serial->RxIrq); |
mitea1 | 0:f2815503561f | 14 | setActualState(INIT); |
mitea1 | 0:f2815503561f | 15 | setBufferPosition(0); |
mitea1 | 0:f2815503561f | 16 | } |
mitea1 | 0:f2815503561f | 17 | |
mitea1 | 0:f2815503561f | 18 | Decoder::~Decoder() { |
mitea1 | 0:f2815503561f | 19 | |
mitea1 | 0:f2815503561f | 20 | } |
mitea1 | 0:f2815503561f | 21 | |
mitea1 | 0:f2815503561f | 22 | void Decoder::setActualState(DecoderState newState){ |
mitea1 | 0:f2815503561f | 23 | actualState = newState; |
mitea1 | 0:f2815503561f | 24 | |
mitea1 | 0:f2815503561f | 25 | } |
mitea1 | 0:f2815503561f | 26 | DecoderState Decoder::getActualState(){ |
mitea1 | 0:f2815503561f | 27 | return actualState; |
mitea1 | 0:f2815503561f | 28 | } |
mitea1 | 0:f2815503561f | 29 | |
mitea1 | 0:f2815503561f | 30 | void Decoder::getCharacterFromSerial(){ |
mitea1 | 0:f2815503561f | 31 | lastReceivedChar = serial->getc(); |
mitea1 | 0:f2815503561f | 32 | } |
mitea1 | 0:f2815503561f | 33 | |
mitea1 | 0:f2815503561f | 34 | bool Decoder::hasReceived(char specificChar){ |
mitea1 | 0:f2815503561f | 35 | bool received=false; |
mitea1 | 0:f2815503561f | 36 | |
mitea1 | 0:f2815503561f | 37 | if(lastReceivedChar == specificChar){ |
mitea1 | 0:f2815503561f | 38 | received = true; |
mitea1 | 0:f2815503561f | 39 | setActualState(RECEIVE); |
mitea1 | 0:f2815503561f | 40 | } |
mitea1 | 0:f2815503561f | 41 | |
mitea1 | 0:f2815503561f | 42 | return received; |
mitea1 | 0:f2815503561f | 43 | } |
mitea1 | 0:f2815503561f | 44 | |
mitea1 | 0:f2815503561f | 45 | void Decoder::bufferReceivedCharacterAtBegin(){ |
mitea1 | 0:f2815503561f | 46 | receiveBuffer[0]=lastReceivedChar; |
mitea1 | 0:f2815503561f | 47 | } |
mitea1 | 0:f2815503561f | 48 | |
mitea1 | 0:f2815503561f | 49 | void Decoder::bufferReceivedCharacter(){ |
mitea1 | 0:f2815503561f | 50 | receiveBuffer[bufferPosition]=lastReceivedChar; |
mitea1 | 0:f2815503561f | 51 | incrementBufferPosition(); |
mitea1 | 0:f2815503561f | 52 | } |
mitea1 | 0:f2815503561f | 53 | |
mitea1 | 0:f2815503561f | 54 | void Decoder::setBufferPosition(uint8_t newPosition){ |
mitea1 | 0:f2815503561f | 55 | bufferPosition = 0; |
mitea1 | 0:f2815503561f | 56 | } |
mitea1 | 0:f2815503561f | 57 | |
mitea1 | 0:f2815503561f | 58 | void Decoder::incrementBufferPosition(){ |
mitea1 | 0:f2815503561f | 59 | if(getActualState()!=INIT && bufferPosition < MESSAGE_LENGHT){ |
mitea1 | 0:f2815503561f | 60 | bufferPosition++; |
mitea1 | 0:f2815503561f | 61 | } |
mitea1 | 0:f2815503561f | 62 | } |
mitea1 | 0:f2815503561f | 63 | |
mitea1 | 0:f2815503561f | 64 | bool Decoder::isBufferFilled(){ |
mitea1 | 0:f2815503561f | 65 | bool isFilled=false; |
mitea1 | 0:f2815503561f | 66 | if(bufferPosition==MESSAGE_LENGHT){ |
mitea1 | 0:f2815503561f | 67 | isFilled=true; |
mitea1 | 0:f2815503561f | 68 | } |
mitea1 | 0:f2815503561f | 69 | return isFilled; |
mitea1 | 0:f2815503561f | 70 | } |
mitea1 | 0:f2815503561f | 71 | |
mitea1 | 0:f2815503561f | 72 | void Decoder::clearReceiveBuffer(){ |
mitea1 | 0:f2815503561f | 73 | int i; |
mitea1 | 0:f2815503561f | 74 | for(i=0;i<MESSAGE_LENGHT;i++){ |
mitea1 | 0:f2815503561f | 75 | receiveBuffer[i]=0x20; |
mitea1 | 0:f2815503561f | 76 | } |
mitea1 | 0:f2815503561f | 77 | } |
mitea1 | 0:f2815503561f | 78 | |
mitea1 | 0:f2815503561f | 79 | void Decoder::rxInterrupt(){ |
mitea1 | 0:f2815503561f | 80 | if(serial->readable()){ |
mitea1 | 0:f2815503561f | 81 | getCharacterFromSerial(); |
mitea1 | 0:f2815503561f | 82 | |
mitea1 | 0:f2815503561f | 83 | if(hasReceived(0xB5)){ |
mitea1 | 0:f2815503561f | 84 | setBufferPosition(0); |
mitea1 | 0:f2815503561f | 85 | } |
mitea1 | 0:f2815503561f | 86 | |
mitea1 | 0:f2815503561f | 87 | bufferReceivedCharacter(); |
mitea1 | 0:f2815503561f | 88 | |
mitea1 | 0:f2815503561f | 89 | if(isBufferFilled()){ |
mitea1 | 0:f2815503561f | 90 | decodeReceiveBuffer(); |
mitea1 | 0:f2815503561f | 91 | } |
mitea1 | 0:f2815503561f | 92 | } |
mitea1 | 0:f2815503561f | 93 | } |
mitea1 | 0:f2815503561f | 94 | |
mitea1 | 0:f2815503561f | 95 | char* Decoder::getReceiveBuffer(){ |
mitea1 | 0:f2815503561f | 96 | return receiveBuffer; |
mitea1 | 0:f2815503561f | 97 | } |
mitea1 | 0:f2815503561f | 98 | |
mitea1 | 0:f2815503561f | 99 | void Decoder::decodeReceiveBuffer(){ |
mitea1 | 0:f2815503561f | 100 | |
mitea1 | 0:f2815503561f | 101 | lastPoslhh.iTOW = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+3]<<24| |
mitea1 | 0:f2815503561f | 102 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+2]<<16| |
mitea1 | 0:f2815503561f | 103 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+1]<<8| |
mitea1 | 0:f2815503561f | 104 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+0]; |
mitea1 | 0:f2815503561f | 105 | |
mitea1 | 0:f2815503561f | 106 | lastPoslhh.lon = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+7]<<24| |
mitea1 | 0:f2815503561f | 107 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+6]<<16| |
mitea1 | 0:f2815503561f | 108 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+5]<<8| |
mitea1 | 0:f2815503561f | 109 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+4]; |
mitea1 | 0:f2815503561f | 110 | |
mitea1 | 0:f2815503561f | 111 | lastPoslhh.lat = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+11]<<24| |
mitea1 | 0:f2815503561f | 112 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+10]<<16| |
mitea1 | 0:f2815503561f | 113 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+9]<<8| |
mitea1 | 0:f2815503561f | 114 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+8]; |
mitea1 | 0:f2815503561f | 115 | |
mitea1 | 0:f2815503561f | 116 | lastPoslhh.height = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+15]<<24| |
mitea1 | 0:f2815503561f | 117 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+14]<<16| |
mitea1 | 0:f2815503561f | 118 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+13]<<8| |
mitea1 | 0:f2815503561f | 119 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+12]; |
mitea1 | 0:f2815503561f | 120 | |
mitea1 | 0:f2815503561f | 121 | lastPoslhh.hMSL = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+19]<<24| |
mitea1 | 0:f2815503561f | 122 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+18]<<16| |
mitea1 | 0:f2815503561f | 123 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+17]<<8| |
mitea1 | 0:f2815503561f | 124 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+16]; |
mitea1 | 0:f2815503561f | 125 | |
mitea1 | 0:f2815503561f | 126 | lastPoslhh.hAcc = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+23]<<24| |
mitea1 | 0:f2815503561f | 127 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+22]<<16| |
mitea1 | 0:f2815503561f | 128 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+21]<<8| |
mitea1 | 0:f2815503561f | 129 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+20]; |
mitea1 | 0:f2815503561f | 130 | |
mitea1 | 0:f2815503561f | 131 | lastPoslhh.vAcc = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+27]<<24| |
mitea1 | 0:f2815503561f | 132 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+26]<<16| |
mitea1 | 0:f2815503561f | 133 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+25]<<8| |
mitea1 | 0:f2815503561f | 134 | receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+24]; |
mitea1 | 0:f2815503561f | 135 | |
mitea1 | 0:f2815503561f | 136 | } |
mitea1 | 0:f2815503561f | 137 | |
mitea1 | 0:f2815503561f | 138 | POSLHH Decoder::getLastPoslhh(){ |
mitea1 | 0:f2815503561f | 139 | return lastPoslhh; |
mitea1 | 0:f2815503561f | 140 | } |
mitea1 | 0:f2815503561f | 141 |