A multifunctional and modular Firmware for Multitech's mDot based on ARM mBed provides a widerange of functionality for several Sensors such as MAX44009, BME280, MPU9250, SI1143 and uBlox. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

Dependencies:   mDot_LoRa_Sensornode_Flowmeter_impl mbed-rtos mbed

LoRa-Sensornode Firmware for Multitech mDot

A multifunctional and modular Firmware for Multitech's mDot which provides a widerange of functionality for several Sensors. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

/media/uploads/mitea1/logo-lora-600x370.png /media/uploads/mitea1/mt_mdot_family_642px.png

Supported Sensors

Idea

The Firmware has some predefined Application Modes running different Tasks(Measurements). Each mode can be used in a different Scenario. Application_Modes define which sensors are used, how often they aquire data and how often the data has to be sent via LoRa. Lets say you just want to measure the Light then you choose an Application_Mode (or define one) that only runs TaskLight for light measurement. As a standard all measurements are taken every second and sent via LoRa but you can change that interval depending on your usage Scenario

Committer:
mitea1
Date:
Fri Nov 02 17:01:02 2018 +0000
Revision:
10:4051c38bf73f
Parent:
2:641a67ff243f
wtf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /**
mitea1 0:f2815503561f 2 * @file Decoder.h
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * @author Adrian
mitea1 0:f2815503561f 5 * @date 16.05.2016
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #ifndef APP_DECODER_H_
mitea1 0:f2815503561f 9 #define APP_DECODER_H_
mitea1 0:f2815503561f 10
mitea1 0:f2815503561f 11 #include <RawSerial.h>
mitea1 0:f2815503561f 12
mitea1 0:f2815503561f 13 #define HEADER_LENGHT 2
mitea1 0:f2815503561f 14 #define ID_LENGHT 2
mitea1 0:f2815503561f 15 #define LENGHT_LENGHT 2
mitea1 0:f2815503561f 16 #define PAYLOAD_LENGHT 28
mitea1 0:f2815503561f 17 #define CRC_LENGHT 2
mitea1 0:f2815503561f 18 #define MESSAGE_LENGHT (HEADER_LENGHT+ID_LENGHT+LENGHT_LENGHT+PAYLOAD_LENGHT+CRC_LENGHT)
mitea1 0:f2815503561f 19
mitea1 0:f2815503561f 20 /**
mitea1 0:f2815503561f 21 * States in which the Decoder can be
mitea1 0:f2815503561f 22 */
mitea1 0:f2815503561f 23 enum DecoderState{
mitea1 0:f2815503561f 24 INIT = 0,//!< INIT
mitea1 0:f2815503561f 25 RECEIVE, //!< RECEIVE
mitea1 0:f2815503561f 26 DECODE, //!< DECODE
mitea1 0:f2815503561f 27 };
mitea1 0:f2815503561f 28
mitea1 0:f2815503561f 29 /**
mitea1 0:f2815503561f 30 * Container that can hold GPS Information
mitea1 0:f2815503561f 31 */
mitea1 0:f2815503561f 32 typedef struct POSLHH{
mitea1 0:f2815503561f 33 unsigned long iTOW;
mitea1 0:f2815503561f 34 long lon;
mitea1 0:f2815503561f 35 long lat;
mitea1 0:f2815503561f 36 long height;
mitea1 0:f2815503561f 37 long hMSL;
mitea1 0:f2815503561f 38 unsigned long hAcc;
mitea1 0:f2815503561f 39 unsigned long vAcc;
mitea1 2:641a67ff243f 40 }POSLHH;
mitea1 0:f2815503561f 41
mitea1 0:f2815503561f 42 /**
mitea1 0:f2815503561f 43 * @class Decoder
mitea1 0:f2815503561f 44 * @brief This Class is used to decode the byte stream thats sent from the uBlox. At the moment
mitea1 0:f2815503561f 45 * it only decodes the NAV-POLLSH byte stream. For correct usage all other messages of the uBlox
mitea1 0:f2815503561f 46 * needs to be deactivated or at least the NAV-POLLSH needs to be activated
mitea1 0:f2815503561f 47 */
mitea1 0:f2815503561f 48 class Decoder {
mitea1 0:f2815503561f 49 public:
mitea1 0:f2815503561f 50 Decoder(mbed::RawSerial*);
mitea1 0:f2815503561f 51 virtual ~Decoder();
mitea1 0:f2815503561f 52
mitea1 0:f2815503561f 53 /**
mitea1 0:f2815503561f 54 * @brief Gets the actual State in which the decoder is
mitea1 0:f2815503561f 55 * @return
mitea1 0:f2815503561f 56 */
mitea1 0:f2815503561f 57 DecoderState getActualState();
mitea1 0:f2815503561f 58
mitea1 0:f2815503561f 59 /**
mitea1 0:f2815503561f 60 * @brief Gets the receive Buffer in which all received Bytes from the NAV-POLLSH are
mitea1 0:f2815503561f 61 * stored
mitea1 0:f2815503561f 62 * @return
mitea1 0:f2815503561f 63 */
mitea1 0:f2815503561f 64 char* getReceiveBuffer();
mitea1 0:f2815503561f 65
mitea1 0:f2815503561f 66 /**
mitea1 0:f2815503561f 67 * @brief Gets the last successfully decoded NAV-POLLSH Bytestream
mitea1 0:f2815503561f 68 * @return
mitea1 0:f2815503561f 69 */
mitea1 0:f2815503561f 70 POSLHH getLastPoslhh();
mitea1 0:f2815503561f 71
mitea1 0:f2815503561f 72 private:
mitea1 0:f2815503561f 73 DecoderState actualState;
mitea1 0:f2815503561f 74 mbed::RawSerial* serial;
mitea1 0:f2815503561f 75 char lastReceivedChar;
mitea1 0:f2815503561f 76 POSLHH lastPoslhh;
mitea1 0:f2815503561f 77 char receiveBuffer[MESSAGE_LENGHT];
mitea1 0:f2815503561f 78 int bufferPosition;
mitea1 0:f2815503561f 79
mitea1 0:f2815503561f 80 /**
mitea1 0:f2815503561f 81 * @brief Sets the actual State of the Decoder
mitea1 0:f2815503561f 82 * @param actualState
mitea1 0:f2815503561f 83 */
mitea1 0:f2815503561f 84 void setActualState(DecoderState actualState);
mitea1 0:f2815503561f 85
mitea1 0:f2815503561f 86 /**
mitea1 0:f2815503561f 87 * @brief Gets the latest character from the serial internal buffer
mitea1 0:f2815503561f 88 */
mitea1 0:f2815503561f 89 void getCharacterFromSerial();
mitea1 0:f2815503561f 90
mitea1 0:f2815503561f 91 /**
mitea1 0:f2815503561f 92 * @brief Checks if the specific Char was the last received Char
mitea1 0:f2815503561f 93 * @param specificChar
mitea1 0:f2815503561f 94 * @return
mitea1 0:f2815503561f 95 */
mitea1 0:f2815503561f 96 bool hasReceived(char specificChar);
mitea1 0:f2815503561f 97
mitea1 0:f2815503561f 98 /**
mitea1 0:f2815503561f 99 * @brief Buffers the last received Char at the beginning of the buffer
mitea1 0:f2815503561f 100 */
mitea1 0:f2815503561f 101 void bufferReceivedCharacterAtBegin();
mitea1 0:f2815503561f 102
mitea1 0:f2815503561f 103 /**
mitea1 0:f2815503561f 104 * @brief Buffers the last received char at the actual position of the buffer
mitea1 0:f2815503561f 105 */
mitea1 0:f2815503561f 106 void bufferReceivedCharacter();
mitea1 0:f2815503561f 107
mitea1 0:f2815503561f 108 /**
mitea1 0:f2815503561f 109 * @brief Checks if the whole buffer is filled up
mitea1 0:f2815503561f 110 * @return
mitea1 0:f2815503561f 111 */
mitea1 0:f2815503561f 112 bool isBufferFilled();
mitea1 0:f2815503561f 113
mitea1 0:f2815503561f 114 /**
mitea1 0:f2815503561f 115 * @brief The Decoding routing thats called when some Data is recieved via the serial
mitea1 0:f2815503561f 116 */
mitea1 0:f2815503561f 117 void rxInterrupt();
mitea1 0:f2815503561f 118
mitea1 0:f2815503561f 119 /**
mitea1 0:f2815503561f 120 * @brief Sets the position where the next Byte should be stored inside the buffer
mitea1 0:f2815503561f 121 * @param desiredPosition
mitea1 0:f2815503561f 122 */
mitea1 0:f2815503561f 123 void setBufferPosition(uint8_t desiredPosition);
mitea1 0:f2815503561f 124
mitea1 0:f2815503561f 125 /**
mitea1 0:f2815503561f 126 * @brief Increments the position where the next Byte should be stored by 1
mitea1 0:f2815503561f 127 */
mitea1 0:f2815503561f 128 void incrementBufferPosition();
mitea1 0:f2815503561f 129
mitea1 0:f2815503561f 130 /**
mitea1 0:f2815503561f 131 * @brief Clears the whole buffer
mitea1 0:f2815503561f 132 */
mitea1 0:f2815503561f 133 void clearReceiveBuffer();
mitea1 0:f2815503561f 134
mitea1 0:f2815503561f 135 /**
mitea1 0:f2815503561f 136 * @brief Decodes the whole buffer
mitea1 0:f2815503561f 137 */
mitea1 0:f2815503561f 138 void decodeReceiveBuffer();
mitea1 0:f2815503561f 139 };
mitea1 0:f2815503561f 140
mitea1 0:f2815503561f 141 #endif /* APP_DECODER_H_ */