Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX1276GenericLib USBDevice
Fork of PICO_LP1 by
Revision 7:8875c4d513bb, committed 2020-10-16
- Comitter:
- walterluu
- Date:
- Fri Oct 16 06:46:00 2020 +0000
- Parent:
- 6:51f492ca61a2
- Commit message:
- MAX32625PICO LP1 mode;
Changed in this revision
--- a/SX1276GenericPingPong/GenericPingPong2.cpp Wed Oct 14 00:19:02 2020 +0000
+++ b/SX1276GenericPingPong/GenericPingPong2.cpp Fri Oct 16 06:46:00 2020 +0000
@@ -19,13 +19,13 @@
#ifdef FEATURE_LORA // in main.cpp
/* Set this flag to '1' to display debug messages on the console */
-#define DEBUG_MESSAGE 0
+#define DEBUG_MESSAGE 1
/* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
#define USE_MODEM_LORA 1
#define USE_MODEM_FSK !USE_MODEM_LORA
#define RF_FREQUENCY RF_FREQUENCY_915_0 // Hz
-#define TX_OUTPUT_POWER 14 // 14 dBm
+#define TX_OUTPUT_POWER 1 // 14 dBm
#if USE_MODEM_LORA == 1
@@ -33,8 +33,11 @@
#define LORA_SPREADING_FACTOR LORA_SF7
#define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
-#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
-#define LORA_SYMBOL_TIMEOUT 5 // Symbols
+//#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx, default
+#define LORA_PREAMBLE_LENGTH 5
+//#define LORA_SYMBOL_TIMEOUT 5 // Symbols
+#define LORA_SYMBOL_TIMEOUT 4 // Symbols
+
#define LORA_FIX_LENGTH_PAYLOAD_ON false
#define LORA_FHSS_ENABLED false
#define LORA_NB_SYMB_HOP 4
@@ -56,9 +59,11 @@
#endif
-//#define RX_TIMEOUT_VALUE 3500 // in ms, default
-#define RX_TIMEOUT_VALUE 333 // testing
-//#define RX_TIMEOUT_VALUE 333 // in ms
+#if MASTER == 1
+ #define RX_TIMEOUT_VALUE 3500 // in ms, default
+#elif SLAVE == 1
+ #define RX_TIMEOUT_VALUE 333 // in ms
+#endif
//#define BUFFER_SIZE 32 // Define the payload size here
//#define BUFFER_SIZE 64 // Define the payload size here
@@ -246,11 +251,67 @@
if (DEBUG_MESSAGE)
ad->printf("Starting Ping-Pong loop\r\n");
-
- Radio->Rx( RX_TIMEOUT_VALUE );
+#if MASTER == 1
+ Radio->Rx( RX_TIMEOUT_VALUE ); // initate Rx State for Master
+#endif
+
return 0; //added by Walter due to "Control reaches end of non-void function"
}
+
+bool SX1276MasterCheckForNewData(void)
+{
+ bool new_data_available = false;
+ switch( State )
+ {
+ case RX:
+ if( BufferSizeRx > 0 )
+ {
+ new_data_available = true;
+ wait_ms( 10 ); //do we need this?
+ if (DEBUG_MESSAGE)
+ ad->printf( "State=RX\r\n" );
+ }
+ Radio->Rx( RX_TIMEOUT_VALUE );
+ State = LOWPOWER;
+ break;
+ case RX_TIMEOUT:
+ wait_ms( 10 );
+ if (DEBUG_MESSAGE)
+ ad->printf( "State=RX_TIMEOUT\r\n" );
+ Radio->Rx( RX_TIMEOUT_VALUE );
+ State = LOWPOWER;
+ break;
+ case RX_ERROR:
+ // We have received a Packet with a CRC error, send reply as if packet was correct
+ wait_ms( 10 );
+ if (DEBUG_MESSAGE)
+ ad->printf( "State=RX_ERROR\r\n" );
+ Radio->Rx( RX_TIMEOUT_VALUE );
+ State = LOWPOWER;
+ break;
+ case TX_TIMEOUT:
+ if (DEBUG_MESSAGE)
+ ad->printf( "State=TX_TIMEOUT\r\n" );
+ State = LOWPOWER;
+ break;
+ case LOWPOWER:
+ sleep();
+ break;
+ default:
+ sleep(); // TODO, should this be removed?
+ break;
+ }
+ return new_data_available;
+}
+
+void SX1276SlaveSendData(void)
+{
+ //wait_ms( 10 );
+ Radio->Send( BufferTx, BufferSizeTx );
+ sleep();
+}
+
/****************************************************************************************************************************************
*
****************************************************************************************************************************************/
@@ -558,4 +619,6 @@
}
+
+
#endif
--- a/SX1276GenericPingPong/GenericPingPong2.h Wed Oct 14 00:19:02 2020 +0000 +++ b/SX1276GenericPingPong/GenericPingPong2.h Fri Oct 16 06:46:00 2020 +0000 @@ -110,4 +110,8 @@ */ int numOfRxTimeouts(); +bool SX1276MasterCheckForNewData(void); + +void SX1276SlaveSendData(void); + #endif // __MAIN_H__ \ No newline at end of file
--- a/global_buffers.h Wed Oct 14 00:19:02 2020 +0000 +++ b/global_buffers.h Fri Oct 16 06:46:00 2020 +0000 @@ -28,12 +28,12 @@ /*************************************************************************** * MASTER Device **************************************************************************/\ -//#define MASTER 1 +#define MASTER 1 /*************************************************************************** * SLAVE Device **************************************************************************/\ -#define SLAVE 1 +//#define SLAVE 1 /***************************************************************************
--- a/main.cpp Wed Oct 14 00:19:02 2020 +0000
+++ b/main.cpp Fri Oct 16 06:46:00 2020 +0000
@@ -1,531 +1,85 @@
-
#include "mbed.h"
-// Board pins related
-#include "PinMap.h"
-
-// LORA related
-#include "global_buffers.h"
-#include "GenericPingPong2.h"
-#define FEATURE_LORA
-#include "sx1276-mbed-hal.h"
-
-#include "main.h"
-
-// OT07 related
-#include "OT07_lib.h"
-#define CONVERT_T_DELAY 30
-
-// MAX44009 related
-#include "MAX44009_lib.h"
-
-// AO32 related
-#include "AO32_lib.h"
-
-// AO19 related
-#include "AO19_lib.h"
-
-//#if defined(TARGET_MAX32630FTHR) // using the RFM95 board
-// #include "max32630fthr.h"
-// MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
-//#endif
-
-// Virtual COM related
-#include "USBSerial.h" // for virtual COM
-#define BS 8 // ASCII Back Space
-#define CR 13 // ASCII Carriage Return
-
-// Virtual serial port over USB TODO NEW VID PID NEEDED!!
-USBSerial pc(0x0B6A, 0x0042, 0x0001, false);
-
-///***************************************************************************
-// * Virtual COM Instantiation
-// **************************************************************************/
-//#include "USBSerial.h" // for virtual COM
-//#define BS 8 // ASCII Back Space
-//#define CR 13 // ASCII Carriage Return
-//// Virtual serial port over USB TODO NEW VID PID NEEDED!!
-//USBSerial pc(0x0B6A, 0x0042, 0x0001, false);
+// Low Power Mode
+#include "lp.h"
+#include "mxc_config.h"
+#include "lp.h"
+#include "rtc.h"
+#define LP1_WakeTime 3 //seconds
/***************************************************************************
* LEDs Instantiation
**************************************************************************/
-DigitalOut myled(LED2); // LED = LED2 green
-DigitalOut rLED(LED1); // red LED
-DigitalOut bLED(LED3); // blue LED
-//DigitalOut *led3;
-
-/***************************************************************************
- * I2C Bus Instantiation
- **************************************************************************/
-I2C i2cBus0(P1_6, P1_7); // I2C of MAX32625PICO
+//DigitalOut gLED(LED2); // green LED
+//DigitalOut rLED(LED1); // red LED
+//DigitalOut bLED(LED3); // blue LED
-bool get_data_flag = false; // used for data tramission frequency on the SENSOR side
-bool print_data_flag = false; // used for data display on the GATEWAY side
-
-//Timer setup
-Ticker timer_1; // timer for data tramission frequency on the SENSOR side
-Ticker timer_M; // timer for data print out on the GATEWAY side
+// *****************************************************************************
+void RTC_Setup()
+{
+ rtc_cfg_t RTCconfig;
-void onTimerInterrupt(){
- get_data_flag = true;
-}
+// RTCconfig.compareCount[0] = 3;//3 second timer
+ RTCconfig.compareCount[1] = LP1_WakeTime; //3 second timer
+ RTCconfig.prescaler = RTC_PRESCALE_DIV_2_12; //1Hz clock
+ RTCconfig.prescalerMask = RTC_PRESCALE_DIV_2_12;//used for prescaler compare
+ RTCconfig.snoozeCount = 0;
+ RTCconfig.snoozeMode = RTC_SNOOZE_DISABLE;
-void onGatewayInterrupt(){
- print_data_flag = true;
+ RTC_Init(&RTCconfig);
+
+ RTC_Start();
}
int main() {
-
-/***************************************************************************
-
-
- /* Setup begins here: */
- #if MASTER == 1 // Master Device
-// pc.printf("MAX32625PICO: MASTER DEVICE\r\n");
-// wait(1);
- #elif SLAVE == 1 // Slave Device
-// pc.printf("MAX32625PICO: SLAVE DEVICE\r\n");
-// wait(1);
- #endif
-
- /* Introduction text: */
-// pc.printf("Welcome to the SX1276GenericLib\r\n");
-// wait(5);
-// pc.printf("Starting a simple LoRa PingPong\r\n");
-// wait(5);
-
- /***************************************************************************
- * Combined Payload Buffers for LoRa Communications
- **************************************************************************/
- uint8_t BufferTx[BufferSizeTx]; // more info in global_buffers.h
- uint8_t BufferRx[BufferSizeRx]; // more info in global_buffers.h
-
- /***************************************************************************
- * Identification Buffers
- **************************************************************************/
- #if MASTER == 1 // Master Device
- uint8_t ID_of_slave[size_signature];
- #elif SLAVE == 1 // Slave Device
- uint8_t ID_of_master[size_signature];
- #endif
-
- /***************************************************************************
- * Dummy Data Buffers
- **************************************************************************/
- #if MASTER == 1 // Master Device
-// uint8_t curr_dum_to_slave[size_of_dum];
- #elif SLAVE == 1 // Slave Device
-// uint8_t curr_dum_from_master[size_of_dum];
-// uint8_t prev_dum_from_master[size_of_dum];
- #endif
-
- /***************************************************************************
- * MAX30208 Data Buffers
- **************************************************************************/
- #if MASTER == 1 // Master Device
-// uint8_t curr_MAX77650_from_slave[size_of_MAX77650];
-// uint8_t curr_raw_temp_from_slave[size_of_MAX30208];
- char curr_raw_temp_from_slave[size_of_MAX30208]; // to match data type
-// uint8_t prev_MAX77650_from_slave[size_of_MAX77650];
- char prev_raw_temp_from_slave[size_of_MAX30208];
- #elif SLAVE == 1 // Slave Device
-// uint8_t curr_MAX77650_to_master[size_of_MAX77650];
-// bool chrg_status = false; //True = ON False = OFF
- uint8_t curr_raw_temp_to_master[size_of_MAX30208];
- #endif
-
-
- /***************************************************************************
- * MAX44009 Data Buffers
- **************************************************************************/
- #if MASTER == 1 // Master Device
-// uint8_t curr_raw_light_from_slave[size_of_MAX44009];
- char curr_raw_light_from_slave[size_of_MAX44009]; // to match data type
- char prev_raw_light_from_slave[size_of_MAX44009];
- // static int16_t conv_frame_data_from_slave[64];
- #elif SLAVE == 1 // Slave Device
- uint8_t curr_raw_light_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
-// uint8_t curr_raw_AO32_from_slave[size_of_MAX20361];
- char curr_raw_AO32_from_slave[size_of_MAX20361]; // to match data type
- char prev_raw_AO32_from_slave[size_of_MAX20361];
- // static int16_t conv_frame_data_from_slave[64];
- #elif SLAVE == 1 // Slave Device
- uint8_t curr_raw_AO32_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
-// uint8_t curr_raw_other_from_slave[size_of_other];
-// uint8_t prev_raw_other_from_slave[size_of_other];
- // static int16_t conv_frame_data_from_slave[64];
- #elif SLAVE == 1 // Slave Device
-// uint8_t curr_raw_other_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
-
- /***************************************************************************
- * Finish Setting up LoRa Radios: This passes in pointers to Buffers to send
- **************************************************************************/
- SX1276PingPongSetup(BufferTx, BufferRx, &pc);
-
-// Pointer Tutorials
-// https://www.tutorialspoint.com/cprogramming/c_pointers.htm
+ // Set all LEDs off
+// gLED = LED_OFF;
+// rLED = LED_OFF;
+// bLED = LED_OFF;
- /***************************************************************************
- * Create Dummy Data For Master and Slave
- **************************************************************************/
-// Array Tutorials
-// http://www.cplusplus.com/doc/tutorial/arrays/
- #if MASTER == 1
-// curr_dum_to_slave[0] = {33, 34};
-// curr_dum_to_slave[0] = 33;
-// curr_dum_to_slave[1] = 34;
- #endif
-
- #if SLAVE == 1
-
- curr_raw_temp_to_master[0] = 99;
- curr_raw_temp_to_master[1] = 99;
-
- curr_raw_light_to_master[0] = 25;
- curr_raw_light_to_master[1] = 26;
+ //configure RTC and start
+ RTC_Setup();
- curr_raw_AO32_to_master[0] = 99;
- curr_raw_AO32_to_master[1] = 100;
- curr_raw_AO32_to_master[2] = 101;
- curr_raw_AO32_to_master[3] = 102;
- #endif
-
- /***************************************************************************
- * Loop Counter
- **************************************************************************/
- int loopCnt = 0;
-
- #if MASTER == 1
- //************* init ticker timer callbacks ****************
- timer_M.attach(&onGatewayInterrupt, 3); //Gateway data print out frequency
-
- #endif
-
- #if SLAVE == 1
- //************* init ticker timer callbacks ****************
- timer_1.attach(&onTimerInterrupt, 3); //Sensor data transmission frequency
-
- //************* OT07 Variables ****************
- char rawtempdata[2];
- char OT07_i2c_add = 0xA0;
-
- //************* MAX44009 Variables ****************
- char rawluxdata[2];
- char MAX44009_i2c_add = 0x94; // 0b1001 010x
-
- //************* AO32 Variables ****************
- char rawOCVdata[2]; // only needs 1
- char rawCntdata[2];
- char AO32_i2c_add = 0x2A; // 0b0010 101x
+ while (1) {
+
+ // Set all LEDs off
+// gLED = LED_OFF;
+// rLED = LED_OFF;
+// bLED = LED_OFF;
+
- //************* AO19 Settings ****************
- // Enable AO19
- char AO19_i2c_add = 0xD0; //
- char AO19_BB_CFG[2]; // store result of AO19's register 0x01 BBstCfg0
- int AO19_read = AO19_read_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG);
-
-// if (AO19_read) {
-// pc.printf("AO19 Initial Read fail!\r\n");
-// }
-// else {
-// pc.printf("AO19 Initial Read success!\r\n");
-// }
-
- int AO19_en = AO19_write_register(&i2cBus0, AO19_i2c_add, AO19_BB_CFG0, AO19_BB_CFG[0]|0x80);
-
- // if (AO19_en) {
-// pc.printf("AO19 Enabled fail!\r\n");
-// }
-// else {
-// pc.printf("AO19 Enabledsuccess!\r\n");
-// }
-
-
- #endif
-
- while (1) {
-
- #if SLAVE == 1
- if(get_data_flag) {
-
- //reset the flag
- get_data_flag = false;
-// pc.printf("Timer interval reached!\r\n");
-
/***************************************************************************
- * Temperature Sensor Data Measurement
- **************************************************************************/
- // obtain register hex values
- convert_temperature(&i2cBus0, OT07_i2c_add); //send OW convert selected device
- wait_ms(CONVERT_T_DELAY); //wait 20 ms for convert temperature to complete
- int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2);
-// pc.printf("OT07 add[%02X] data[%02X] data[%02X]\r\n", OT07_FIFO_DATA, rawtempdata[0], rawtempdata[1]);
-
- //calculate temperature from data
-// int count = (int)(rawtempdata[0]*256 + rawtempdata[1]);
-// if (count >= 32768)count = count - 65536; // 2s comp
-// double Temp = (double)count*0.005;
-// pc.printf("OT07 temperature[%.3f] status[%d]\r\n", Temp, temp_error);
- double tempFinal = calc_temperature(rawtempdata);
-// pc.printf("OT07 Final temperature[%.3f] \r\n", tempFinal);
-// pc.printf("\r\n");
-
-
- //fill raw temp data into the array
- curr_raw_temp_to_master[0] = rawtempdata[0];
- curr_raw_temp_to_master[1] = rawtempdata[1];
-
- /***************************************************************************
- * Light Intensity Sensor Data Measurement
+ * LP1 Experiment
**************************************************************************/
- // obtain register hex values
- int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata);
-// int lux_error1 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, &rawluxdata[0]);
-// int lux_error2 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_LO, &rawluxdata[1]);
-// pc.printf("MAX44009 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", MAX44009_LUX_HI, rawluxdata[0], MAX44009_LUX_LO, rawluxdata[1]);
-
- //calculate temperature from data
-// int exponent = int(rawluxdata[0] >> 4);
-// int mantissa = (int)((rawluxdata[0] << 4) & 0xF0) + (int)(rawluxdata[1]);
-// double lux = 0.045 * mantissa * pow((double) 2, exponent);
-// pc.printf("MAX44009 exponent[%d] mantissa[%d]\r\n", exponent, mantissa);
-// pc.printf("MAX44009 lux[%.2f] status[%d] status[%d]\r\n", lux, lux_error1, lux_error2);
-// pc.printf("MAX44009 lux[%.2f] status[%d]\r\n", lux, lux_error);
- int luxFinal = (int) (calc_lux(rawluxdata));
-// pc.printf("MAX44009 Final Lux[%.2f] \r\n", luxFinal);
-// pc.printf("\r\n");
-
- //fill raw lux data into the array
- curr_raw_light_to_master[0] = rawluxdata[0];
- curr_raw_light_to_master[1] = rawluxdata[1];
-
-
- /***************************************************************************
- * Solar Harvester Data Measurement
- **************************************************************************/
- // obtain register hex values
-// char AO32ID[2];
-// int id_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_DEVICE_ID, AO32ID); // testing
-// pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_DEVICE_ID, AO32ID[0]); // should be 0x00: 0x11
-
- int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata);
-// pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_VOC, rawOCVdata[0]);
- int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes
-// pc.printf("AO32 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", AO32_HARV_H, rawCntdata[0], AO32_HARV_L, rawCntdata[1]);
-
- //calculate open circuit voltage from data
- double voltage = (double)(rawOCVdata[0]) / 100;
-// pc.printf("AO32 OCV[%.2f] status[%d]\r\n", voltage, ocv_error);
- double OCVFinal = calc_OCV(rawOCVdata);
-// pc.printf("AO32 Final OCV[%.2f] \r\n", OCVFinal);
-// pc.printf("\r\n");
-
- //calculate harvesting counts from data
-// int countHi = int(rawCntdata[0]) * 256;
-// int countLo = int(rawCntdata[1]);
-// int harvest_counts = countHi + countLo;
-// pc.printf("AO32 HarvesterCnt[%d] status[%d]\r\n", harvest_counts, cnt_error);
- int countFinal = calc_Harvest(rawCntdata);
-// pc.printf("AO32 Final HarvesterCnt[%d]\r\n", countFinal);
-// pc.printf("\r\n");
-
-
- //fill raw AO32 data into the array
- curr_raw_AO32_to_master[0] = rawOCVdata[0]; // Fill OCV hex first
- curr_raw_AO32_to_master[1] = rawCntdata[0]; // Fill Harvesting count high byte
- curr_raw_AO32_to_master[2] = rawCntdata[1]; // Fill Harvesting count low byte
-
- // print out sensor data
- pc.printf("SENSOR: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempFinal, luxFinal, OCVFinal, countFinal);
-
- /***************************************************************************
- * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
- **************************************************************************/
- memcpy(&BufferTx[tx_idx_signature], PongMsg, size_signature);
- memcpy(&BufferTx[tx_idx_MAX30208], curr_raw_temp_to_master, size_of_MAX30208);
- memcpy(&BufferTx[tx_idx_MAX44009], curr_raw_light_to_master, size_of_MAX44009);
- memcpy(&BufferTx[tx_idx_MAX20361], curr_raw_AO32_to_master, size_of_MAX20361);
-// memcpy(&BufferTx[tx_idx_other], curr_raw_other_to_master, size_of_other);
-
- /***************************************************************************
- * In case of OnRxTimeout
- **************************************************************************/
- // Slave Device, these are values when LoRa communication did not happen
- // ID_of_master[0] = 'N'; // 0x4E or 78
-// ID_of_master[1] = 'A'; // 0x41 or 65
-// ID_of_master[2] = 'C'; // 0x43 or 67
-// ID_of_master[3] = 'K'; // 0x4B or 75
-// ID_of_master[4] = 'M'; // 0x4D or 77
-// ID_of_master[5] = 'A'; // 0x41 or 65
-// ID_of_master[6] = 'S'; // 0x53 or 83
-// ID_of_master[7] = '!'; // 0x21 or 33
-//
-// curr_dum_from_master[0] = 39;
-// curr_dum_from_master[1] = 40;
-
- /***************************************************************************
- * LoRa Communication: Send Sensor Data
- **************************************************************************/
-// SX1276SensorSend();
- SX1276PingPong();
-// int sendTime = TimeOnAirSend();
-// pc.printf("Tx Time on Air: %d \r\n", sendTime);
-
- /***************************************************************************
- * Fill Main Program Buffers With Data From Received Payload Buffer
- **************************************************************************/
- // Slave Device
-// memcpy(ID_of_master, &BufferRx[rx_idx_signature], size_signature);
-// memcpy(curr_dum_from_master, &BufferRx[rx_idx_dum], size_of_dum);
+ //Clear existing wake-up config
+ LP_ClearWakeUpConfig();
+
+ //Clear any event flags
+ LP_ClearWakeUpFlags();
+
+ //configure wake-up on RTC compare 1
+ LP_ConfigRTCWakeUp(0, 1, 0, 0);
+
+
+ //set RTC compare 1 value
+ uint32_t cmp = RTC_GetCount() + LP1_WakeTime;
+ RTC_SetCompare(1,cmp);
+ RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP1);
+
+ //global disable interrupt
+ __disable_irq();
+
+ LP_EnterLP1();
+
+ //global enable interrupt
+ __enable_irq();
- /***************************************************************************
- * Slave Device: Print out Master Data
- **************************************************************************/
- // memcpy(ID_of_master, &BufferRx[rx_idx_signature], size_signature);
-// pc.printf("Print ID_of_master\r\n");
-// for(int i = 0; i < sizeof(ID_of_master); i++){
-// pc.printf("%d \r\n", ID_of_master[i]);
-// }
-
- // memcpy(curr_dum_from_master, &BufferRx[rx_idx_dum], size_of_dum);
-// pc.printf("Print Dum From Master\r\n");
-// for(int i = 0; i < sizeof(curr_dum_from_master); i++){
-// pc.printf("%d \r\n", curr_dum_from_master[i]);
-// }
-
- // print loop counter
-// pc.printf("Loop Counter Slave: %d \r\n", loopCnt);
- loopCnt = loopCnt + 1;
- } // end of transmission frequency for slave
- #endif
-
-
- #if MASTER == 1
- /***************************************************************************
- * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
- **************************************************************************/
- memcpy(&BufferTx[tx_idx_signature], PingMsg, size_signature);
-// memcpy(&BufferTx[tx_idx_dum], curr_dum_to_slave, size_of_dum);
-
- /***************************************************************************
- * LoRa Communication: Gateway Receive Sensor Data
- **************************************************************************/
-// SX1276GateWayReceive(333);
- SX1276PingPong();
-// int sendTime = TimeOnAirSend();
-// pc.printf("Tx Time on Air: %d \r\n", sendTime);
-
- /***************************************************************************
- * Fill Main Program Buffers With Data From Received Payload Buffer
- **************************************************************************/
- memcpy(ID_of_slave, &BufferRx[rx_idx_signature], size_signature);
- memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208);
- memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
- memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361);
-// memcpy(curr_raw_other_from_slave, &BufferRx[rx_idx_other], size_of_other);
+ // LP1 Wakes up
+// gLED = LED_ON;
+ wait(1);
- /***************************************************************************
- * Master Device: Print out Slave Data
- **************************************************************************/
-
- // memcpy(ID_of_slave, &BufferRx[rx_idx_signature], size_signature);
- //pc.printf("Print ID_of_slave\r\n");
-// for(int i = 0; i < sizeof(ID_of_slave); i++){
-// pc.printf("%d \r\n", ID_of_slave[i]);
-// }
-
- // memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208], size_of_MAX30208);
-// pc.printf("Print MAX30208 data\r\n");
-// for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){
-// pc.printf("[%02X]\r\n", curr_raw_temp_from_slave[i]);
-// }
-
-// int count = curr_raw_temp_from_slave[0] * 256 + curr_raw_temp_from_slave[1];
-// if (count >= 32768)count = count - 65536; // 2s comp
-// double tempResult = count * 0.005;
-
- double tempResult = calc_temperature(curr_raw_temp_from_slave);
-// pc.printf("MSG: [%.3f] [] [] [] []\r\n", tempResult);
-
-
- // memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
-// pc.printf("Print MAX44009 data\r\n");
-// for(int i = 0; i < sizeof(curr_raw_light_from_slave); i++){
-// pc.printf("[%02X] \r\n", curr_raw_light_from_slave[i]);
-// }
-
- int luxResult = (int) calc_lux(curr_raw_light_from_slave);
-// pc.printf("MSG: [%.3f] [%.2f] [] [] []\r\n", tempResult, luxResult);
-
- // memcpy(curr_raw_AO32_from_slave, &BufferRx[rx_idx_MAX20361], size_of_MAX20361);
-// pc.printf("Print MAX20361 data\r\n");
-// for(int i = 0; i < sizeof(curr_raw_AO32_from_slave); i++){
-// pc.printf("[%02X] \r\n", curr_raw_AO32_from_slave[i]);
-// }
-
- char OCVrawHex[2];
- OCVrawHex[0] = curr_raw_AO32_from_slave[0];
- OCVrawHex[1] = curr_raw_AO32_from_slave[1];
- char CntrawHex[2];
- CntrawHex[0] = curr_raw_AO32_from_slave[2];
- CntrawHex[1] = curr_raw_AO32_from_slave[3];
-
- double OCVResult = calc_OCV(OCVrawHex);
- int CntResult = calc_Harvest(CntrawHex);
-
-
- // only print out new results
-// int tempNew = memcmp(prev_raw_temp_from_slave, curr_raw_temp_from_slave, sizeof(size_of_MAX30208));
-// int luxNew = memcmp(prev_raw_light_from_slave, curr_raw_light_from_slave, sizeof(size_of_MAX44009));
-// int AO32New = memcmp(prev_raw_AO32_from_slave, curr_raw_AO32_from_slave, sizeof(size_of_MAX20361));
-
-// if (tempNew != 0 || luxNew != 0 || AO32New != 0) {
-
-// pc.printf("MSG: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempResult, luxResult, OCVResult, CntResult);
-
-// }
-
- if(print_data_flag) {
-
- //reset the flag
- print_data_flag = false;
- pc.printf("MSG: [%.3f] [%d] [%.2f] [%d] [0]\r\n", tempResult, luxResult, OCVResult, CntResult);
-
- }
-
- // copy the current recceived data into previous data
-// memcpy(prev_raw_temp_from_slave, curr_raw_temp_from_slave, sizeof(size_of_MAX30208));
-// memcpy(prev_raw_light_from_slave, c/urr_raw_light_from_slave, sizeof(size_of_MAX44009));
-// memcpy(prev_raw_AO32_from_slave, curr_raw_AO32_from_slave, sizeof(size_of_MAX20361));
-
- // print loop counter
-// pc.printf("Loop Counter Master: %d \r\n", loopCnt);
- loopCnt = loopCnt + 1;
-
- #endif
-
} // end of while(1) loop
} // end of main()
\ No newline at end of file
--- a/main.h Wed Oct 14 00:19:02 2020 +0000
+++ b/main.h Fri Oct 16 06:46:00 2020 +0000
@@ -8,49 +8,49 @@
#define FEATURE_LORA
-#ifdef FEATURE_LORA // in main.cpp
+//#ifdef FEATURE_LORA // in main.cpp
/* Set this flag to '1' to display debug messages on the console */
-#define DEBUG_MESSAGE 1
+//#define DEBUG_MESSAGE 1
/* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
-#define USE_MODEM_LORA 1
-#define USE_MODEM_FSK !USE_MODEM_LORA
-#define RF_FREQUENCY RF_FREQUENCY_915_0 // Hz
-#define TX_OUTPUT_POWER 14 // 14 dBm
+//#define USE_MODEM_LORA 1
+//#define USE_MODEM_FSK !USE_MODEM_LORA
+//#define RF_FREQUENCY RF_FREQUENCY_915_0 // Hz
+//#define TX_OUTPUT_POWER 14 // 14 dBm
-#if USE_MODEM_LORA == 1
+//#if USE_MODEM_LORA == 1
-#define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
-#define LORA_SPREADING_FACTOR LORA_SF7
-#define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
+//#define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
+//#define LORA_SPREADING_FACTOR LORA_SF7
+//#define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
-#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
-#define LORA_SYMBOL_TIMEOUT 5 // Symbols
-#define LORA_FIX_LENGTH_PAYLOAD_ON false
-#define LORA_FHSS_ENABLED false
-#define LORA_NB_SYMB_HOP 4
-#define LORA_IQ_INVERSION_ON false
-#define LORA_CRC_ENABLED true
+//#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
+//#define LORA_SYMBOL_TIMEOUT 5 // Symbols
+//#define LORA_FIX_LENGTH_PAYLOAD_ON false
+//#define LORA_FHSS_ENABLED false
+//#define LORA_NB_SYMB_HOP 4
+//#define LORA_IQ_INVERSION_ON false
+//#define LORA_CRC_ENABLED true
-#elif USE_MODEM_FSK == 1
+//#elif USE_MODEM_FSK == 1
-#define FSK_FDEV 25000 // Hz
-#define FSK_DATARATE 19200 // bps
-#define FSK_BANDWIDTH 50000 // Hz
-#define FSK_AFC_BANDWIDTH 83333 // Hz
-#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
-#define FSK_FIX_LENGTH_PAYLOAD_ON false
-#define FSK_CRC_ENABLED true
+//#define FSK_FDEV 25000 // Hz
+//#define FSK_DATARATE 19200 // bps
+//#define FSK_BANDWIDTH 50000 // Hz
+//#define FSK_AFC_BANDWIDTH 83333 // Hz
+//#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
+//#define FSK_FIX_LENGTH_PAYLOAD_ON false
+//#define FSK_CRC_ENABLED true
-#else
- #error "Please define a modem in the compiler options."
-#endif
+//#else
+// #error "Please define a modem in the compiler options."
+//#endif
-#define RX_TIMEOUT_VALUE 3500 // in ms
+//#define RX_TIMEOUT_VALUE 3500 // in ms
-#endif
+//#endif
/*
* Global variables declarations
