MAX20361 System Demo with Low Power 2 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of NonPingPong_PICO_LoRa by Walter Luu

Revision:
3:85fc843a9d7d
Child:
5:9e751733a6f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/global_buffers.h	Mon Oct 12 21:55:22 2020 +0000
@@ -0,0 +1,267 @@
+/** Description:
+ *  This File is responsible for defining the buffers that will be used in
+ *  various areas of the program. The buffers that are defined here will be 
+ *  refferenced in the main.cpp and will be filled with data in one of two ways:
+ *  
+ *  1.  The buffers will be filled with data upon receiving a successful payload
+ *      transmission over LoRa. In GenericPingPong.cpp, the function OnRxDone() 
+ *      will call the function fillGlobalBufsWithPayload() that is responsible for 
+ *      filling the appropriate buffers with the payload data that was received
+ *      by either the master or slave device by the other device that sent it.
+ *      
+ *  2.  The buffers will be used to fill up a payload buffer that will be sent
+ *      over LoRa by either the master or slave device to the receiving device.
+ *      The function fillPayloadWithGlobalBufs() will use the global buffers that
+ *      are filled with data for various sensors in the main.cpp to construct a
+ *      payload to deliver to the other device when SX1276PingPong() is called 
+ *      in file GenericPingPong.cpp. 
+ *     
+ */
+
+#ifndef __GLOBAL_BUFFERS_H__
+#define __GLOBAL_BUFFERS_H__\
+ 
+#include "mbed.h"
+//#include "GenericPingPong2.h"
+//#include "support.h"
+
+/***************************************************************************
+ * MASTER Device
+ **************************************************************************/\
+//#define MASTER 1
+
+/***************************************************************************
+ * SLAVE Device
+ **************************************************************************/\
+#define SLAVE 1
+
+
+/***************************************************************************
+ * Indexes for which byte specific data begins at in the payload buffer
+ **************************************************************************/
+/* size of ID data that defines what the signature of the device is */
+const uint8_t size_signature = 8;
+
+/* size of data in bytes that is acquired by the master device */
+//const uint8_t size_of_ble       = 2;
+const uint8_t size_of_dum       = 2;
+
+/* size of data in bytes that is acquired by the slave device */
+//const uint8_t size_of_grid_eye  = 128; 
+//const uint8_t size_of_gps       = 20;
+//const uint8_t size_of_MAX17055  = 22;
+//const uint8_t size_of_MAX77650  = 5;
+
+const uint8_t size_of_MAX30208  = 2;            // temperature data
+const uint8_t size_of_MAX44009  = 2;            // light data
+const uint8_t size_of_MAX20361  = 4;            // AO32 data
+const uint8_t size_of_other  = 0;               // other data
+
+
+/* These are the sizes of each payload in bytes. Since there is different amount 
+ * of data being sent in each direction, we need to declare the total size of 
+ * the payload so we can instatiate the correct buffer sizes to store data that 
+ * is to be delivered and for data that is received. 
+ */
+
+const uint16_t PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE = size_signature + size_of_dum;
+const uint16_t PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER = size_signature + size_of_MAX30208 + size_of_MAX44009 + size_of_MAX20361;
+
+/* determine the appropriate buffer sizes */
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: Bluetooth Gateway
+//    const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
+//    const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
+//#elif defined(TARGET_MAX32620FTHR) // Slave Device: Robot
+//    const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
+//    const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
+//#endif
+
+/* determine the appropriate buffer sizes */
+#if MASTER == 1     // Master Device 
+    const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
+    const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
+#elif SLAVE == 1    // Slave Device
+    const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
+    const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
+#endif    
+
+
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    /* These are indexs used to create the payload buffer to send to Slave */  
+//    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+//    const uint8_t tx_idx_ble       = tx_idx_signature + size_signature;   // 2nd buf in tx payload
+//    
+//    /* These are indexs used to deconstruct received payload buffer sent by the Slave */
+//    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+//    const uint8_t rx_idx_grid_eye  = rx_idx_signature + size_signature;   // 2nd buf in rx payload
+//    const uint8_t rx_idx_gps       = rx_idx_grid_eye  + size_of_grid_eye; // 3rd buf in rx payload
+//    const uint8_t rx_idx_MAX17055  = rx_idx_gps       + size_of_gps;      // 4th buf in rx payload
+//    const uint8_t rx_idx_MAX77650  = rx_idx_MAX17055  + size_of_MAX17055; // 5th buf in rx payload
+//        
+//#elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
+//    /* These are indexs used to create the payload buffer to send to Master */
+//    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+//    const uint8_t tx_idx_grid_eye  = tx_idx_signature + size_signature;   // 2nd buf in tx payload
+//    const uint8_t tx_idx_gps       = tx_idx_grid_eye  + size_of_grid_eye; // 3rd buf in tx payload
+//    const uint8_t tx_idx_MAX17055  = tx_idx_gps       + size_of_gps;      // 4th buf in tx payload
+//    const uint8_t tx_idx_MAX77650  = tx_idx_MAX17055  + size_of_MAX17055; // 5th buf in tx payload
+//    
+//    /* These are indexs used to deconstruct received payload buffer sent by the Master */
+//    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+//    const uint8_t rx_idx_ble       = rx_idx_signature + size_signature;   // 2nd buf in rx payload
+//#endif
+
+#if   MASTER == 1 // Master Device
+    /* These are indexs used to create the payload buffer to send to Slave */  
+    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+    const uint8_t tx_idx_dum       = tx_idx_signature + size_signature;   // 2nd buf in tx payload
+    
+    /* These are indexs used to deconstruct received payload buffer sent by the Slave */
+    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+    const uint8_t rx_idx_MAX30208  = rx_idx_signature + size_signature;   // 2nd buf in rx payload
+    const uint8_t rx_idx_MAX44009  = rx_idx_MAX30208  + size_of_MAX30208; // 3rd buf in rx payload
+    const uint8_t rx_idx_MAX20361  = rx_idx_MAX44009  + size_of_MAX44009;      // 4th buf in rx payload
+//    const uint8_t rx_idx_other  = rx_idx_MAX20361  + size_of_MAX20361; // 5th buf in rx payload
+        
+#elif SLAVE == 1 // Slave Device: LoRa Controlled Robot
+    /* These are indexs used to create the payload buffer to send to Master */
+    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+    const uint8_t tx_idx_MAX30208  = tx_idx_signature + size_signature;   // 2nd buf in tx payload
+    const uint8_t tx_idx_MAX44009  = tx_idx_MAX30208  + size_of_MAX30208; // 3rd buf in tx payload
+    const uint8_t tx_idx_MAX20361  = tx_idx_MAX44009  + size_of_MAX44009 ;      // 4th buf in tx payload
+//    const uint8_t tx_idx_other  = tx_idx_MAX20361  + size_of_MAX20361; // 5th buf in tx payload
+    
+    /* These are indexs used to deconstruct received payload buffer sent by the Master */
+    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+    const uint8_t rx_idx_dum       = rx_idx_signature + size_signature;   // 2nd buf in rx payload
+#endif
+
+
+/***************************************************************************
+ * BLE Data Buffers
+ **************************************************************************/
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    static char curr_ble_data_to_slave[size_of_ble];
+//#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+//    static char curr_ble_data_from_master[size_of_ble];
+//    static char prev_ble_data_from_master[size_of_ble];
+//#endif
+
+/***************************************************************************
+ * Dummy Data Buffers
+ **************************************************************************/
+#if MASTER == 1  // Master Device
+    static char curr_dum_data_to_slave[size_of_dum];
+#elif SLAVE == 1 // Slave Device
+    static char curr_dum_data_from_master[size_of_dum];
+    static char prev_dum_data_from_master[size_of_dum];
+#endif
+
+
+/***************************************************************************
+ * Grid Eye Sensor Data Buffers
+ **************************************************************************/
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    static char curr_raw_frame_data_from_slave[size_of_grid_eye];
+//    static char prev_raw_frame_data_from_slave[size_of_grid_eye];
+//    static int16_t conv_frame_data_from_slave[64];
+//#elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
+//    static char curr_raw_frame_data_to_master[size_of_grid_eye];
+//    static char prev_raw_frame_data_to_master[size_of_grid_eye];
+//    static int16_t conv_frame_data_to_master[64];
+//#endif
+
+
+/***************************************************************************
+ * MAX30208 Data Buffers
+ **************************************************************************/
+#if   MASTER == 1 // Master Device
+    static char curr_raw_temp_data_from_slave[size_of_MAX30208];
+    static char prev_raw_temp_data_from_slave[size_of_MAX30208];
+//    static int16_t conv_frame_data_from_slave[64];
+#elif SLAVE == 1 // Slave Device
+    static char curr_raw_temp_data_to_master[size_of_MAX30208];
+//    static char prev_raw_temp_data_to_master[size_of_MAX30208];
+//    static int16_t conv_frame_data_to_master[64];
+#endif
+
+/***************************************************************************
+ * MAX44009 Data Buffers
+ **************************************************************************/
+#if   MASTER == 1 // Master Device
+    static char curr_raw_light_data_from_slave[size_of_MAX44009];
+    static char prev_raw_light_data_from_slave[size_of_MAX44009];
+//    static int16_t conv_frame_data_from_slave[64];
+#elif SLAVE == 1 // Slave Device
+    static char curr_raw_light_data_to_master[size_of_MAX44009];
+//    static char prev_raw_light_data_to_master[size_of_MAX44009];
+//    static int16_t conv_frame_data_to_master[64];
+#endif
+
+/***************************************************************************
+ * MAX20361 Data Buffers
+ **************************************************************************/
+#if   MASTER == 1 // Master Device
+    static char curr_raw_AO32_data_from_slave[size_of_MAX20361];
+    static char prev_raw_AO32_data_from_slave[size_of_MAX20361];
+//    static int16_t conv_frame_data_from_slave[64];
+#elif SLAVE == 1 // Slave Device
+    static char curr_raw_AO32_data_to_master[size_of_MAX20361];
+//    static char prev_raw_AO32_data_to_master[size_of_MAX20361];
+//    static int16_t conv_frame_data_to_master[64];
+#endif
+
+/***************************************************************************
+ * Other Data Buffers
+ **************************************************************************/
+#if   MASTER == 1 // Master Device
+//    static char curr_raw_other_data_from_slave[size_of_other];
+//    static char prev_raw_other_data_from_slave[size_of_other];
+//    static int16_t conv_frame_data_from_slave[64];
+#elif SLAVE == 1 // Slave Device
+//    static char curr_raw_other_data_to_master[size_of_other];
+//    static char prev_raw_other_data_to_master[size_of_other];
+//    static int16_t conv_frame_data_to_master[64];
+#endif
+
+/***************************************************************************
+ * GPS Data Buffers
+ **************************************************************************/
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    static char curr_gps_data_from_slave[size_of_gps];
+//    static char prev_gps_data_from_slave[size_of_gps];
+//#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+//    static char curr_gps_data_to_master[size_of_gps];
+//#endif
+
+/***************************************************************************
+ * MAX17055 Data Buffers
+ **************************************************************************/
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    static char curr_MAX17055_from_slave[size_of_MAX17055];
+//    static char prev_MAX17055_from_slave[size_of_MAX17055];
+//#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+//    static char curr_MAX17055_to_master[size_of_MAX17055];
+//#endif
+
+/***************************************************************************
+ * MAX77650 Data Buffers
+ **************************************************************************/
+//#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+//    static char curr_MAX77650_from_slave[size_of_MAX77650];
+//    static char prev_MAX77650_from_slave[size_of_MAX77650];
+//#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+//    static char curr_MAX77650_to_master[size_of_MAX77650];
+//#endif
+
+/** 
+ * @brief This function constructs a payload buffer that is used in transmitting data in a LoRa Message
+ */
+void fillPayloadWithGlobalBufs(uint8_t * payload_buffer_tx); 
+
+/** 
+ * @brief This function deconstructs a payload buffer that contains data from a received LoRa Message
+ */
+void fillGlobalBufsWithPayload(uint8_t * payload_buffer_rx); 
+
+#endif // __GLOBAL_BUFFERS_H__
\ No newline at end of file