test sending sensor results over lora radio. Accelerometer and temp/pressure.
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
radio.h
- Committer:
- Wayne Roberts
- Date:
- 2019-04-29
- Revision:
- 2:972a5704f152
- Parent:
- 0:e1e70da93044
File content as of revision 2:972a5704f152:
#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;