SRK Version of mDot LoRa_Sensormode_SRK
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sensornode by
Decoder.cpp
00001 /* 00002 * Decoder.cpp 00003 * 00004 * Created on: 16.05.2016 00005 * Author: Adrian 00006 */ 00007 00008 #include "Decoder.h " 00009 #include <RawSerial.h> 00010 00011 Decoder::Decoder(mbed::RawSerial* serial) { 00012 this->serial = serial; 00013 this->serial->attach(this,&Decoder::rxInterrupt,this->serial->RxIrq); 00014 setActualState(INIT); 00015 setBufferPosition(0); 00016 } 00017 00018 Decoder::~Decoder() { 00019 00020 } 00021 00022 void Decoder::setActualState(DecoderState newState){ 00023 actualState = newState; 00024 00025 } 00026 DecoderState Decoder::getActualState(){ 00027 return actualState; 00028 } 00029 00030 void Decoder::getCharacterFromSerial(){ 00031 lastReceivedChar = serial->getc(); 00032 } 00033 00034 bool Decoder::hasReceived(char specificChar){ 00035 bool received=false; 00036 00037 if(lastReceivedChar == specificChar){ 00038 received = true; 00039 setActualState(RECEIVE); 00040 } 00041 00042 return received; 00043 } 00044 00045 void Decoder::bufferReceivedCharacterAtBegin(){ 00046 receiveBuffer[0]=lastReceivedChar; 00047 } 00048 00049 void Decoder::bufferReceivedCharacter(){ 00050 receiveBuffer[bufferPosition]=lastReceivedChar; 00051 incrementBufferPosition(); 00052 } 00053 00054 void Decoder::setBufferPosition(uint8_t newPosition){ 00055 bufferPosition = 0; 00056 } 00057 00058 void Decoder::incrementBufferPosition(){ 00059 if(getActualState()!=INIT && bufferPosition < MESSAGE_LENGHT){ 00060 bufferPosition++; 00061 } 00062 } 00063 00064 bool Decoder::isBufferFilled(){ 00065 bool isFilled=false; 00066 if(bufferPosition==MESSAGE_LENGHT){ 00067 isFilled=true; 00068 } 00069 return isFilled; 00070 } 00071 00072 void Decoder::clearReceiveBuffer(){ 00073 int i; 00074 for(i=0;i<MESSAGE_LENGHT;i++){ 00075 receiveBuffer[i]=0x20; 00076 } 00077 } 00078 00079 void Decoder::rxInterrupt(){ 00080 if(serial->readable()){ 00081 getCharacterFromSerial(); 00082 00083 if(hasReceived(0xB5)){ 00084 setBufferPosition(0); 00085 } 00086 00087 bufferReceivedCharacter(); 00088 00089 if(isBufferFilled()){ 00090 decodeReceiveBuffer(); 00091 } 00092 } 00093 } 00094 00095 char* Decoder::getReceiveBuffer(){ 00096 return receiveBuffer; 00097 } 00098 00099 void Decoder::decodeReceiveBuffer(){ 00100 00101 lastPoslhh.iTOW = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+3]<<24| 00102 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+2]<<16| 00103 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+1]<<8| 00104 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+0]; 00105 00106 lastPoslhh.lon = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+7]<<24| 00107 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+6]<<16| 00108 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+5]<<8| 00109 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+4]; 00110 00111 lastPoslhh.lat = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+11]<<24| 00112 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+10]<<16| 00113 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+9]<<8| 00114 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+8]; 00115 00116 lastPoslhh.height = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+15]<<24| 00117 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+14]<<16| 00118 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+13]<<8| 00119 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+12]; 00120 00121 lastPoslhh.hMSL = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+19]<<24| 00122 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+18]<<16| 00123 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+17]<<8| 00124 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+16]; 00125 00126 lastPoslhh.hAcc = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+23]<<24| 00127 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+22]<<16| 00128 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+21]<<8| 00129 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+20]; 00130 00131 lastPoslhh.vAcc = receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+27]<<24| 00132 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+26]<<16| 00133 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+25]<<8| 00134 receiveBuffer[HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+24]; 00135 00136 } 00137 00138 POSLHH Decoder::getLastPoslhh(){ 00139 return lastPoslhh; 00140 } 00141
Generated on Wed Jul 13 2022 09:23:47 by 1.7.2