test sending sensor results over lora radio. Accelerometer and temp/pressure.

Dependencies:   SX127x

Serial terminal operates at 115200.

This project provides a text-based menu over serial port.
Operating the program only requires using the arrow keys, enter key to activate a control, or entering numbers.

Two sensors provided:


LIS12DH12 accelerometer operates in a continuous sampling mode. Enable control for accelerometer enables this continuous sampling, approx every 3 seconds.
LPS22HH temperature / pressure sensor operates as single shot, where pressing the control button on terminal causes single sample to be performed.

poll rate control will enable repeated reading of pressure/temperature-sensor or photo-sensor when poll rate is greater than zero.

target must be: DISCO_L072CZ_LRWAN1

Revision:
0:e1e70da93044
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radio.h	Wed Apr 24 10:11:06 2019 -0700
@@ -0,0 +1,196 @@
+#include "sx12xx.h"
+
+#ifdef SX127x_H 
+#include "sx127x_lora.h"
+#include "sx127x_fsk.h"
+#endif /* SX127x_H */
+
+#define PA_OFF_DBM      -127
+
+typedef enum {
+    _READ_,
+    _WRITE_
+} action_e;
+
+typedef struct {
+    uint8_t row;
+    uint8_t col;
+} pos_t;
+
+#define _ITEM_VALUE      0xbb
+#define _ITEM_DROPDOWN   0xaa
+#define _ITEM_BUTTON     0xcc
+#define _ITEM_TOGGLE     0xdd
+
+typedef enum {
+    MENUMODE_NONE = 0,
+    MENUMODE_ENTRY,
+    MENUMODE_DROPDOWN,
+    MENUMODE_REDRAW,
+    MENUMODE_REINIT_MENU,
+} menuMode_e;
+
+typedef struct {
+    uint8_t itemType;
+
+    const char* const * printed_strs;   // displayed values index from read callback return
+    const char* const * selectable_strs;   // choices
+
+    unsigned (*const read)(bool forWriting);
+    menuMode_e (*const write)(unsigned);
+} dropdown_item_t;
+
+typedef struct {
+    uint8_t itemType;
+
+    unsigned width; // num columns printed
+
+    void (*const print)(void);
+    bool (*const write)(const char*); // NULL for read-only.  return true: redraw menu
+} value_item_t;
+
+typedef struct {
+    uint8_t itemType;
+
+    const char * const label;
+    void (*const push)(void);
+} button_item_t;
+
+typedef struct {
+    uint8_t itemType;
+
+    const char * const label0;
+    const char * const label1;
+    bool (*const read)(void);
+    bool (*const push)(void);
+} toggle_item_t;
+
+#define FLAG_MSGTYPE_ALL            0x07
+#define FLAG_MSGTYPE_PKT            0x01
+#define FLAG_MSGTYPE_PER            0x02
+#define FLAG_MSGTYPE_PING           0x04
+
+typedef struct {
+    pos_t pos;  // on screen position, both row & col with 1 starting value
+    const char* const label;
+
+    const void* const itemPtr;
+
+    uint8_t flags;
+
+    const void* refreshReadItem;
+} menu_t;
+#define FIRST_CHIP_MENU_ROW       3
+
+
+typedef struct {
+    menuMode_e mode;
+    uint8_t sel_idx;
+    const menu_t* sm;
+    uint8_t dropdown_col;
+} menuState_t;
+
+extern menuState_t menuState;
+#define MAX_MENU_COLUMNS            6
+extern menu_t* menu[][MAX_MENU_COLUMNS];
+extern int8_t StopMenuCols[];
+
+extern uint8_t entry_buf_idx;
+extern char entry_buf[];
+
+void log_printf(const char* format, ...);
+
+typedef struct
+{
+    void    (*const TxDone_botHalf)(void);    // read irqAt for timestamp of interrupt
+    void    (*const RxDone)(uint8_t size, float rssi, float snr);    // read radio.rx_buf for payload, irqAt for timestamp of interrupt
+} RadioEvents_t;
+
+class Radio {
+    public:
+        static const char* const chipNum_str;
+
+        static void boardInit(const RadioEvents_t* e);
+        static void hw_reset(void);
+        static void clearIrqFlags(void);
+        static void readChip(void);
+        static void tx_carrier(void);
+        static void tx_preamble(void);
+        static void txPkt(void);
+        static void Rx(void);
+        static void setFS(void);
+
+        static const value_item_t tx_dbm_item;
+
+        static const menu_t* get_modem_menu(void);
+        static const menu_t* get_modem_sub_menu(void);
+
+        static unsigned pktType_read(bool);
+        static menuMode_e pktType_write(unsigned);
+        static const char* const pktType_strs[];
+
+        static void tx_dbm_print(void);
+        static bool tx_dbm_write(const char*);
+
+        static unsigned tx_ramp_read(bool);
+        static menuMode_e tx_ramp_write(unsigned);
+        static const char* tx_ramp_strs[];
+
+        static const char* const opmode_status_strs[];
+        static const char* const opmode_select_strs[];
+        static unsigned opmode_read(bool);
+        static menuMode_e opmode_write(unsigned);
+
+        static uint8_t get_payload_length(void);
+        static void set_payload_length(uint8_t);
+
+        static void tx_payload_length_print(void);
+        static bool tx_payload_length_write(const char*);
+#ifdef SX127x_H 
+        static SX127x radio;
+        static SX127x_lora lora;
+        static SX127x_fsk fsk;
+        static void rfsw_callback(void);
+        static void ocp(uint8_t ma);
+        static InterruptIn dio0;
+        static InterruptIn dio1;
+#elif defined(SX126x_H)
+        static SX126x radio;
+        static ModulationParams_t mpFSK, mpLORA;
+        static PacketParams_t ppFSK, ppLORA;
+#elif defined(SX128x_H)
+        static SX128x radio;
+        static uint8_t tx_param_buf[];
+        static ModulationParams_t mpFLRC, mpBLE_GFSK, mpLORA;
+        static PacketParams_t ppGFSK, ppFLRC, ppLORA, ppBLE;
+#else
+        #error import radio driver library
+#endif
+        static bool service(int8_t);
+        static const menu_t common_menu[];
+
+        static void test(void);
+
+        static unsigned read_register(unsigned);
+        static void write_register(unsigned, unsigned);
+
+    private:
+        static const RadioEvents_t* RadioEvents;
+
+        static void txDoneBottom(void);
+
+        static const menu_t lora_menu[];
+
+        static LowPowerTimer lpt;
+
+#if defined(SX128x_H)
+        #include "radio_sx128x_private.h"
+#elif defined(SX127x_H)
+        #include "radio_sx127x_private.h"
+#elif defined(SX126x_H)
+        #include "radio_sx126x_private.h"
+#endif
+};
+
+extern RawSerial pc;
+