This is example code that can get you started with building your own IR vision robot that communicates over LoRa

Dependencies:   Adafruit-MotorShield Adafruit-PWM-Servo-Driver Adafruit_GFX BufferedSerial MAX17055_EZconfig NEO-6m-GPS SX1276GenericLib USBDeviceHT max32630fthr max77650_charger_sample

Fork of MAX326xxFTHR_LoRa_Example_test by Devin Alexander

Committer:
dev_alexander
Date:
Fri Jul 20 16:31:41 2018 +0000
Revision:
26:69aba05f010f
Parent:
25:1a031add188a
Child:
27:6b549f838f0a
Tried to change how the global buffers are instantiated and where they are to be stored.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dev_alexander 23:f74a50977593 1 /** Description:
dev_alexander 23:f74a50977593 2 * This File is responsible for defining the buffers that will be used in
dev_alexander 23:f74a50977593 3 * various areas of the program. The buffers that are defined here will be
dev_alexander 23:f74a50977593 4 * refferenced in the main.cpp and will be filled with data in one of two ways:
dev_alexander 23:f74a50977593 5 *
dev_alexander 23:f74a50977593 6 * 1. The buffers will be filled with data upon receiving a successful payload
dev_alexander 23:f74a50977593 7 * transmission over LoRa. In GenericPingPong.cpp, the function OnRxDone()
dev_alexander 23:f74a50977593 8 * will call the function fillGlobalBufsWithPayload() that is responsible for
dev_alexander 23:f74a50977593 9 * filling the appropriate buffers with the payload data that was received
dev_alexander 23:f74a50977593 10 * by either the master or slave device by the other device that sent it.
dev_alexander 23:f74a50977593 11 *
dev_alexander 23:f74a50977593 12 * 2. The buffers will be used to fill up a payload buffer that will be sent
dev_alexander 23:f74a50977593 13 * over LoRa by either the master or slave device to the receiving device.
dev_alexander 23:f74a50977593 14 * The function fillPayloadWithGlobalBufs() will use the global buffers that
dev_alexander 23:f74a50977593 15 * are filled with data for various sensors in the main.cpp to construct a
dev_alexander 23:f74a50977593 16 * payload to deliver to the other device when SX1276PingPong() is called
dev_alexander 23:f74a50977593 17 * in file GenericPingPong.cpp.
dev_alexander 23:f74a50977593 18 *
dev_alexander 23:f74a50977593 19 */
dev_alexander 23:f74a50977593 20
dev_alexander 23:f74a50977593 21 #ifndef __GLOBAL_BUFFERS_H__
dev_alexander 25:1a031add188a 22 #define __GLOBAL_BUFFERS_H__\
dev_alexander 25:1a031add188a 23
dev_alexander 25:1a031add188a 24 #include "mbed.h"
dev_alexander 25:1a031add188a 25 #include "GenericPingPong.h"
dev_alexander 25:1a031add188a 26
dev_alexander 23:f74a50977593 27
dev_alexander 23:f74a50977593 28 /***************************************************************************
dev_alexander 24:e8d03912f303 29 * Indexes for which byte specific data begins at in the payload buffer
dev_alexander 23:f74a50977593 30 **************************************************************************/
dev_alexander 25:1a031add188a 31 /* size of ID data that defines what the signature of the device is */
dev_alexander 25:1a031add188a 32 const uint8_t size_signature = 8;
dev_alexander 24:e8d03912f303 33
dev_alexander 24:e8d03912f303 34 /* size of data in bytes that is acquired by the master device */
dev_alexander 25:1a031add188a 35 const uint8_t size_of_ble = 2;
dev_alexander 25:1a031add188a 36
dev_alexander 24:e8d03912f303 37 /* size of data in bytes that is acquired by the slave device */
dev_alexander 24:e8d03912f303 38 const uint8_t size_of_grid_eye = 128;
dev_alexander 24:e8d03912f303 39 const uint8_t size_of_gps = 20;
dev_alexander 24:e8d03912f303 40 const uint8_t size_of_MAX17055 = 5;
dev_alexander 24:e8d03912f303 41 const uint8_t size_of_MAX77650 = 5;
dev_alexander 24:e8d03912f303 42
dev_alexander 25:1a031add188a 43 /* These are the sizes of each payload in bytes. Since there is different amount
dev_alexander 25:1a031add188a 44 * of data being sent in each direction, we need to declare the total size of
dev_alexander 25:1a031add188a 45 * the payload so we can instatiate the correct buffer sizes to store data that
dev_alexander 25:1a031add188a 46 * is to be delivered and for data that is received.
dev_alexander 25:1a031add188a 47 */
dev_alexander 25:1a031add188a 48 const uint16_t PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE = size_signature + size_of_ble;
dev_alexander 25:1a031add188a 49 const uint16_t PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER = size_signature + size_of_grid_eye + size_of_gps + size_of_MAX17055 + size_of_MAX77650;
dev_alexander 24:e8d03912f303 50
dev_alexander 26:69aba05f010f 51 /* determine the appropriate buffer sizes for each device in master/slave config */
dev_alexander 26:69aba05f010f 52 #if defined(TARGET_MAX32630FTHR) // Master Device: Bluetooth Gateway
dev_alexander 26:69aba05f010f 53 const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
dev_alexander 26:69aba05f010f 54 const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
dev_alexander 26:69aba05f010f 55 #elif defined(TARGET_MAX32620FTHR) // Slave Device: Robot
dev_alexander 26:69aba05f010f 56 const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
dev_alexander 26:69aba05f010f 57 const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
dev_alexander 26:69aba05f010f 58 #endif
dev_alexander 26:69aba05f010f 59
dev_alexander 23:f74a50977593 60 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 24:e8d03912f303 61 /* These are indexs used to create the payload buffer to send to Slave */
dev_alexander 25:1a031add188a 62 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 63 const uint8_t tx_idx_ble = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 24:e8d03912f303 64
dev_alexander 25:1a031add188a 65 /* These are indexs used to deconstruct received payload buffer sent by the Slave */
dev_alexander 25:1a031add188a 66 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 67 const uint8_t rx_idx_grid_eye = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 25:1a031add188a 68 const uint8_t rx_idx_gps = rx_idx_grid_eye + size_of_grid_eye; // 3rd buf in rx payload
dev_alexander 25:1a031add188a 69 const uint8_t rx_idx_MAX17055 = rx_idx_gps + size_of_gps; // 4th buf in rx payload
dev_alexander 25:1a031add188a 70 const uint8_t rx_idx_MAX77650 = rx_idx_MAX17055 + size_of_MAX17055; // 5th buf in rx payload
dev_alexander 24:e8d03912f303 71
dev_alexander 23:f74a50977593 72 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 24:e8d03912f303 73 /* These are indexs used to create the payload buffer to send to Master */
dev_alexander 25:1a031add188a 74 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 75 const uint8_t tx_idx_grid_eye = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 25:1a031add188a 76 const uint8_t tx_idx_gps = tx_idx_grid_eye + size_of_grid_eye; // 3rd buf in tx payload
dev_alexander 25:1a031add188a 77 const uint8_t tx_idx_MAX17055 = tx_idx_gps + size_of_gps; // 4th buf in tx payload
dev_alexander 25:1a031add188a 78 const uint8_t tx_idx_MAX77650 = tx_idx_MAX17055 + size_of_MAX17055; // 5th buf in tx payload
dev_alexander 24:e8d03912f303 79
dev_alexander 24:e8d03912f303 80 /* These are indexs used to deconstruct received payload buffer sent by the Master */
dev_alexander 25:1a031add188a 81 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 82 const uint8_t rx_idx_ble = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 23:f74a50977593 83 #endif
dev_alexander 23:f74a50977593 84
dev_alexander 24:e8d03912f303 85 /***************************************************************************
dev_alexander 25:1a031add188a 86 * BLE Data Buffers
dev_alexander 25:1a031add188a 87 **************************************************************************/
dev_alexander 26:69aba05f010f 88 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 26:69aba05f010f 89 curr_ble_data_to_slave = new uint8_t[size_of_ble];
dev_alexander 26:69aba05f010f 90 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 26:69aba05f010f 91 curr_ble_data_from_master = new uint8_t[size_of_ble];
dev_alexander 26:69aba05f010f 92 prev_ble_data_from_master = new uint8_t[size_of_ble];
dev_alexander 26:69aba05f010f 93 #endif
dev_alexander 25:1a031add188a 94 /***************************************************************************
dev_alexander 24:e8d03912f303 95 * Grid Eye Sensor Data Buffers
dev_alexander 24:e8d03912f303 96 **************************************************************************/
dev_alexander 26:69aba05f010f 97 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 26:69aba05f010f 98 curr_raw_frame_data_from_slave = new uint8_t[size_of_grid_eye];
dev_alexander 26:69aba05f010f 99 prev_raw_frame_data_from_slave = new uint8_t[size_of_grid_eye];
dev_alexander 26:69aba05f010f 100 conv_frame_data_from_slave = new int16_t[64];
dev_alexander 26:69aba05f010f 101 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 26:69aba05f010f 102 curr_raw_frame_data_to_master = new uint8_t[size_of_grid_eye];
dev_alexander 26:69aba05f010f 103 prev_raw_frame_data_to_master = new uint8_t[size_of_grid_eye];
dev_alexander 26:69aba05f010f 104 conv_frame_data_to_master = new int16_t[64];
dev_alexander 26:69aba05f010f 105 #endif
dev_alexander 24:e8d03912f303 106 /***************************************************************************
dev_alexander 25:1a031add188a 107 * GPS Data Buffers
dev_alexander 25:1a031add188a 108 **************************************************************************/
dev_alexander 26:69aba05f010f 109 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 26:69aba05f010f 110 curr_gps_data_from_slave = new uint8_t[size_of_gps];
dev_alexander 26:69aba05f010f 111 prev_gps_data_from_slave = new uint8_t[size_of_gps];
dev_alexander 26:69aba05f010f 112 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 26:69aba05f010f 113 curr_gps_data_to_master = new uint8_t[size_of_gps];
dev_alexander 26:69aba05f010f 114 #endif
dev_alexander 25:1a031add188a 115 /***************************************************************************
dev_alexander 25:1a031add188a 116 * MAX17055 Data Buffers
dev_alexander 24:e8d03912f303 117 **************************************************************************/
dev_alexander 26:69aba05f010f 118 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 26:69aba05f010f 119 curr_MAX17055_from_slave = new uint8_t[size_of_MAX17055];
dev_alexander 26:69aba05f010f 120 prev_MAX17055_from_slave = new uint8_t[size_of_MAX17055];
dev_alexander 26:69aba05f010f 121 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 26:69aba05f010f 122 curr_MAX17055_to_master = new uint8_t[size_of_MAX17055];
dev_alexander 26:69aba05f010f 123 #endif
dev_alexander 26:69aba05f010f 124
dev_alexander 25:1a031add188a 125 /***************************************************************************
dev_alexander 25:1a031add188a 126 * MAX77650 Data Buffers
dev_alexander 25:1a031add188a 127 **************************************************************************/
dev_alexander 26:69aba05f010f 128 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 26:69aba05f010f 129 curr_MAX77650_from_slave = new uint8_t[size_of_MAX77650];
dev_alexander 26:69aba05f010f 130 prev_MAX77650_from_slave = new uint8_t[size_of_MAX77650];
dev_alexander 26:69aba05f010f 131 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 26:69aba05f010f 132 curr_MAX77650_to_master = new uint8_t[size_of_MAX77650];
dev_alexander 26:69aba05f010f 133 #endif
dev_alexander 24:e8d03912f303 134
dev_alexander 24:e8d03912f303 135 /**
dev_alexander 24:e8d03912f303 136 * @brief This function constructs a payload buffer that is used in transmitting data in a LoRa Message
dev_alexander 24:e8d03912f303 137 */
dev_alexander 25:1a031add188a 138 void fillPayloadWithGlobalBufs(uint8_t * payload_buffer_tx);
dev_alexander 24:e8d03912f303 139
dev_alexander 24:e8d03912f303 140 /**
dev_alexander 24:e8d03912f303 141 * @brief This function deconstructs a payload buffer that contains data from a received LoRa Message
dev_alexander 24:e8d03912f303 142 */
dev_alexander 25:1a031add188a 143 void fillGlobalBufsWithPayload(uint8_t * payload_buffer_rx);
dev_alexander 24:e8d03912f303 144
dev_alexander 23:f74a50977593 145 #endif // __GLOBAL_BUFFERS_H__