lora sensnode

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Committer:
mitea1
Date:
Wed Jul 06 20:40:36 2016 +0000
Revision:
0:f2815503561f
initial commit;

Who changed what in which revision?

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