Threading Implemented.Memory Size Problem09_Mar2017

Fork of rtos_queue by mbed official

Committer:
NarendraSingh
Date:
Thu Mar 09 15:00:37 2017 +0000
Revision:
7:22c4d2681cc9
Parent:
6:0cb43a362538
Threading Implemented(Memory Size Problem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NarendraSingh 7:22c4d2681cc9 1
emilmont 1:d2ba5afbf91f 2 #include "mbed.h"
NarendraSingh 7:22c4d2681cc9 3 #include "rtos.h"
NarendraSingh 7:22c4d2681cc9 4 #include "Lora.h"
NarendraSingh 7:22c4d2681cc9 5 #include "Beacon.h"
NarendraSingh 7:22c4d2681cc9 6
NarendraSingh 7:22c4d2681cc9 7 #define LORA_SEND_THREAD "lora_send_thread"
NarendraSingh 7:22c4d2681cc9 8 #define HEART_BEAT_PACKET_SENDING 0x01
NarendraSingh 7:22c4d2681cc9 9 #define STATUS_PACKET_SENDING 0x02
NarendraSingh 7:22c4d2681cc9 10
NarendraSingh 7:22c4d2681cc9 11 InterruptIn checkinIntr(PC_13);
NarendraSingh 7:22c4d2681cc9 12 InterruptIn motionIntr(PB_14);
NarendraSingh 7:22c4d2681cc9 13 InterruptIn testIntr(PB_5);
NarendraSingh 7:22c4d2681cc9 14
NarendraSingh 7:22c4d2681cc9 15
NarendraSingh 7:22c4d2681cc9 16 DigitalOut led1(LED1);
NarendraSingh 7:22c4d2681cc9 17 DigitalOut led2(PA_11);
NarendraSingh 7:22c4d2681cc9 18 DigitalOut led3(PA_12);
NarendraSingh 7:22c4d2681cc9 19
NarendraSingh 7:22c4d2681cc9 20 /* reserve the debbuger uart to shell interface */
NarendraSingh 7:22c4d2681cc9 21 Serial pc_serial(USBTX,USBRX);
NarendraSingh 7:22c4d2681cc9 22 RawSerial pc3(PA_14, PA_15);//USART1_TX->PA_9,USART1_RX->PA_10
NarendraSingh 7:22c4d2681cc9 23 RawSerial LORA_UART(PA_0, PA_1);//USART4_TX->PA_0,USART4_RX->PA_1 : Used for Lora module command sending and reception from gateway
NarendraSingh 7:22c4d2681cc9 24 //RawSerial pc1(PA_14, PA_15);//USART1_TX->PA_9,USART1_RX->PA_10 : Used for debugging purpose only
NarendraSingh 7:22c4d2681cc9 25 //RawSerial DEBUG_UART(PA_14, PA_15);//USART1_TX->PA_9,USART1_RX->PA_10 : Used for debugging purpose only
NarendraSingh 7:22c4d2681cc9 26 RawSerial Beacon_UART(PC_4, PC_5);//USART3_TX->PC4,USART3_RX->PC_5 : Used for sending command to beacon module
NarendraSingh 7:22c4d2681cc9 27 RawSerial BLE_RECEIVER_UART(PA_9, PA_10);//USART1_TX->PA_0,USART1_RX->PA_1 : Used for Lora module command sending and reception from gateway
NarendraSingh 7:22c4d2681cc9 28 Serial pc1(USBTX, USBRX);
NarendraSingh 7:22c4d2681cc9 29 RawSerial DEBUG_UART(USBTX, USBRX);//USART1_TX->PA_9,USART1_RX->PA_10 : Used for debugging purpose only
NarendraSingh 7:22c4d2681cc9 30
NarendraSingh 7:22c4d2681cc9 31 /* declares threads for this demo: */
NarendraSingh 7:22c4d2681cc9 32 const size_t a_stk_size = 384;
NarendraSingh 7:22c4d2681cc9 33 uint8_t a_stk[a_stk_size];
NarendraSingh 7:22c4d2681cc9 34 Thread loraSendThread(osPriorityNormal, a_stk_size, &a_stk[0]);
NarendraSingh 7:22c4d2681cc9 35
NarendraSingh 7:22c4d2681cc9 36 const size_t c_stk_size = 384;
NarendraSingh 7:22c4d2681cc9 37 uint8_t c_stk[c_stk_size];
NarendraSingh 7:22c4d2681cc9 38
NarendraSingh 7:22c4d2681cc9 39 const size_t e_stk_size = 384;
NarendraSingh 7:22c4d2681cc9 40 uint8_t e_stk[e_stk_size];
NarendraSingh 7:22c4d2681cc9 41 Thread checkinEventThread(osPriorityNormal, e_stk_size, &e_stk[0]);
NarendraSingh 7:22c4d2681cc9 42 Thread motionEventThread(osPriorityNormal, c_stk_size, &c_stk[0]);
NarendraSingh 7:22c4d2681cc9 43
NarendraSingh 7:22c4d2681cc9 44 // create an event queue
NarendraSingh 7:22c4d2681cc9 45 EventQueue chechinEventQueue;
NarendraSingh 7:22c4d2681cc9 46 EventQueue motionEventQueue;
emilmont 1:d2ba5afbf91f 47
NarendraSingh 7:22c4d2681cc9 48 Queue<int, 16> loraQueue;
NarendraSingh 7:22c4d2681cc9 49 int message2;
NarendraSingh 7:22c4d2681cc9 50 int message3;
NarendraSingh 7:22c4d2681cc9 51
NarendraSingh 7:22c4d2681cc9 52 uint32_t count = 0;
NarendraSingh 7:22c4d2681cc9 53
NarendraSingh 7:22c4d2681cc9 54 //Datatype typecasting
NarendraSingh 7:22c4d2681cc9 55 typedef unsigned char uint8;
NarendraSingh 7:22c4d2681cc9 56 typedef unsigned int uint16;
NarendraSingh 7:22c4d2681cc9 57
NarendraSingh 7:22c4d2681cc9 58 uint8 OBD_Plug_In_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 59
NarendraSingh 7:22c4d2681cc9 60 //peripheral connection
NarendraSingh 7:22c4d2681cc9 61 //DigitalOut led1(PB_11);
NarendraSingh 7:22c4d2681cc9 62 //DigitalOut led2(LED2);
NarendraSingh 7:22c4d2681cc9 63 DigitalIn Switch2(PB_13);
NarendraSingh 7:22c4d2681cc9 64
NarendraSingh 7:22c4d2681cc9 65
NarendraSingh 7:22c4d2681cc9 66 //InterruptIn OBD_PLUGIN_INTERRUPT_PIN(PC_13);
NarendraSingh 7:22c4d2681cc9 67 InterruptIn CheckIn_Interrupt(PB_7);//(PC_13);
NarendraSingh 7:22c4d2681cc9 68 InterruptIn Motion_Start_To_Stop(PB_5);//(PC_13);
NarendraSingh 7:22c4d2681cc9 69 InterruptIn Motion_Stop_To_Start(PB_14);//(PC_13);
NarendraSingh 7:22c4d2681cc9 70 InterruptIn Motion_Sudden_Jerk(PC_13);//(PC_13);
emilmont 1:d2ba5afbf91f 71
NarendraSingh 7:22c4d2681cc9 72
NarendraSingh 7:22c4d2681cc9 73 uint8 Ticker_Count = 0; //Variable to count for timer overflows
NarendraSingh 7:22c4d2681cc9 74
NarendraSingh 7:22c4d2681cc9 75 uint8 OBD_Plugin_Detected = FALSE;
NarendraSingh 7:22c4d2681cc9 76
NarendraSingh 7:22c4d2681cc9 77 //Create Object for structure of Lora Packet to be sent
NarendraSingh 7:22c4d2681cc9 78
NarendraSingh 7:22c4d2681cc9 79 static uint16 Calculate_Wheels_RPM(uint8* Buffer);
NarendraSingh 7:22c4d2681cc9 80 void flip_Packet_Sending_Flag();
NarendraSingh 7:22c4d2681cc9 81 void Lora_Periodic_Packet_Sending_thread(void const *args);
NarendraSingh 7:22c4d2681cc9 82
NarendraSingh 7:22c4d2681cc9 83 void Lora_Rcvd_Cmd_Processing_thread(void);// const *args);
NarendraSingh 7:22c4d2681cc9 84 void Enable_CheckIN_Packet_Sending();
NarendraSingh 7:22c4d2681cc9 85
NarendraSingh 7:22c4d2681cc9 86 const char GET_RSSI[]= {0x41,0x54,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0x0A};
NarendraSingh 7:22c4d2681cc9 87 const char SET_BEACON_VENDOR_ID[]= {0x41,0x54,0xF1,0x01,0x02,0x00,0x00,0x00,0x00,0xF2,0x0D,0x0A};
NarendraSingh 7:22c4d2681cc9 88 const char SET_BEACON_MESSAGE_TYPE[]= {0x41,0x54,0xF2,0x01,0x00,0x00,0x00,0x00,0x00,0xF3,0x0D,0x0A};
NarendraSingh 7:22c4d2681cc9 89 /*************************Accelerometer related definitions***********************************/
NarendraSingh 7:22c4d2681cc9 90 //Accelerometer related definitions
NarendraSingh 7:22c4d2681cc9 91
NarendraSingh 7:22c4d2681cc9 92 #define DOUBLE_TAP_INTERRUPT 0x20
NarendraSingh 7:22c4d2681cc9 93 #define ACTIVITY_INTERRUPT 0x10
NarendraSingh 7:22c4d2681cc9 94 #define INACTIVITY_INTERRUPT 0x08
emilmont 1:d2ba5afbf91f 95
NarendraSingh 7:22c4d2681cc9 96 #define TAP_THRESHOLD 75
NarendraSingh 7:22c4d2681cc9 97 #define ACTIVITY_THRESHOLD 64 // THRES_ACT register value 62.5mg/LSB , therfore value 32 indicates 2g activity
NarendraSingh 7:22c4d2681cc9 98 #define INACTIVITY_THRESHOLD 50
NarendraSingh 7:22c4d2681cc9 99
NarendraSingh 7:22c4d2681cc9 100 #define DUR_TIME 0x15 // DUR Register value providing maximum time to be held to generate an interrupt
NarendraSingh 7:22c4d2681cc9 101 #define LATENT_TIME 0x15 // The interrupt latency
NarendraSingh 7:22c4d2681cc9 102 #define WINDOW_TIME 0x45 // The time of the interrupt window in which the next tap will be detected
NarendraSingh 7:22c4d2681cc9 103 #define INACTIVITY_VALIDATION_TIME 5 // The time until which the acceleration must be held below the inactivity threshold to generate an inactvity interrupt
NarendraSingh 7:22c4d2681cc9 104 // Here the value 5 indicates literally 5 secs
NarendraSingh 7:22c4d2681cc9 105 #define X_AXIS_OFFSET 0x7F
NarendraSingh 7:22c4d2681cc9 106 #define Y_AXIS_OFFSET 0x7F
NarendraSingh 7:22c4d2681cc9 107 #define Z_AXIS_OFFSET 0x05
NarendraSingh 7:22c4d2681cc9 108
NarendraSingh 7:22c4d2681cc9 109 Serial pc(USBTX, USBRX);
NarendraSingh 7:22c4d2681cc9 110 I2C i2c(PB_9, PB_8);
NarendraSingh 7:22c4d2681cc9 111
NarendraSingh 7:22c4d2681cc9 112 InterruptIn activity(PB_0);
NarendraSingh 7:22c4d2681cc9 113 InterruptIn inactivity(PA_4); // As for now only this is used
NarendraSingh 7:22c4d2681cc9 114 DigitalOut led(LED1);
NarendraSingh 7:22c4d2681cc9 115
NarendraSingh 7:22c4d2681cc9 116 const int slave_address_acc = 0xA6;
NarendraSingh 7:22c4d2681cc9 117 char axis_data[6] = {0,0,0,0,0,0};
NarendraSingh 7:22c4d2681cc9 118
NarendraSingh 7:22c4d2681cc9 119 char interrupt_source[2];
NarendraSingh 7:22c4d2681cc9 120 char axis_data_start_address[2] = {0x32, 0};
NarendraSingh 7:22c4d2681cc9 121 char intr_source_address[2] = {0x30, 0};
NarendraSingh 7:22c4d2681cc9 122 char all_interrupt_clear_command[2] = {0x2E, 0x00};
NarendraSingh 7:22c4d2681cc9 123 char all_interrupt_enable_command[2] = {0x2E, 0x38};
NarendraSingh 7:22c4d2681cc9 124 char activity_interrupt_disable_command[2] = {0x2E, 0x08};
NarendraSingh 7:22c4d2681cc9 125 char inactivity_interrupt_disable_command[2] = {0x2E, 0x30};
NarendraSingh 7:22c4d2681cc9 126 char accelerometer_status_registered = 0;
NarendraSingh 7:22c4d2681cc9 127 unsigned int interrupt_source_duplicate;
NarendraSingh 7:22c4d2681cc9 128
NarendraSingh 7:22c4d2681cc9 129 char threshold_offset_command[5];
NarendraSingh 7:22c4d2681cc9 130 char act_inact_time_config_command[8];
NarendraSingh 7:22c4d2681cc9 131 char interrupt_enable_command[3];
NarendraSingh 7:22c4d2681cc9 132 char tap_axis_enable_command[2];
NarendraSingh 7:22c4d2681cc9 133 char baud_rate_command[2];
NarendraSingh 7:22c4d2681cc9 134 char data_format_command[2];
NarendraSingh 7:22c4d2681cc9 135 char measure_bit_on_command[2];
NarendraSingh 7:22c4d2681cc9 136
NarendraSingh 7:22c4d2681cc9 137
NarendraSingh 7:22c4d2681cc9 138 unsigned char vehicle_speed = 25; // Kmph
NarendraSingh 7:22c4d2681cc9 139 unsigned char current_speed, previous_speed, speed_threshold = 10; // Kmph
NarendraSingh 7:22c4d2681cc9 140
NarendraSingh 7:22c4d2681cc9 141 unsigned char x_axis, y_axis, z_axis;
NarendraSingh 7:22c4d2681cc9 142
NarendraSingh 7:22c4d2681cc9 143 unsigned char Motion_Detect_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 144 uint8 OBD_PlugInOut_IOC_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 145 unsigned char Motion_Type_Detected = 0x00;//MOTION_TYPE_UNKNOWN; //By default set motion type as unknown
NarendraSingh 7:22c4d2681cc9 146 void Accelerometer_Process_thread();//void const *args) ;
NarendraSingh 7:22c4d2681cc9 147
NarendraSingh 7:22c4d2681cc9 148 /************************************************************************/
NarendraSingh 7:22c4d2681cc9 149
NarendraSingh 7:22c4d2681cc9 150 uint8 Command_Length_Sent;
NarendraSingh 7:22c4d2681cc9 151 uint8 Checkin_Detect_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 152 void Extract_Received_Lora_Response(void);
NarendraSingh 7:22c4d2681cc9 153 void Send_Command_To_BLE_Receiver(const char* Command);
NarendraSingh 7:22c4d2681cc9 154
NarendraSingh 7:22c4d2681cc9 155 char previous_state = 0;
NarendraSingh 7:22c4d2681cc9 156 char current_state = 0;
NarendraSingh 7:22c4d2681cc9 157
NarendraSingh 7:22c4d2681cc9 158 uint8 OBD_PlugIN_State=0;
NarendraSingh 7:22c4d2681cc9 159 uint8 OBD_PlugIN_State1=0;
NarendraSingh 7:22c4d2681cc9 160 uint8 OBD_PlugIN_State2=0;
NarendraSingh 7:22c4d2681cc9 161 uint8 OBD_PlugIN_Temp_State=1;
NarendraSingh 7:22c4d2681cc9 162
NarendraSingh 7:22c4d2681cc9 163 uint8 Start_To_Stop_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 164 uint8 Stop_To_Start_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 165 uint8 Jerk_Status = FALSE;
NarendraSingh 7:22c4d2681cc9 166 #define BLE_RECEIVER_UART_RX_Size 100
NarendraSingh 7:22c4d2681cc9 167 uint8 BLE_RxBuffer_End_Pos = 0;
NarendraSingh 7:22c4d2681cc9 168 char BLE_Receiver_UART_RX_Buffer[BLE_RECEIVER_UART_RX_Size];
NarendraSingh 7:22c4d2681cc9 169
NarendraSingh 7:22c4d2681cc9 170 void Start_To_Stop_Interrupt()
NarendraSingh 7:22c4d2681cc9 171 {
NarendraSingh 7:22c4d2681cc9 172 Start_To_Stop_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 173 Motion_Detect_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 174 }
NarendraSingh 7:22c4d2681cc9 175
NarendraSingh 7:22c4d2681cc9 176 void Stop_To_Start_Interrupt()
NarendraSingh 7:22c4d2681cc9 177 {
NarendraSingh 7:22c4d2681cc9 178 Stop_To_Start_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 179 Motion_Detect_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 180 }
NarendraSingh 7:22c4d2681cc9 181
NarendraSingh 7:22c4d2681cc9 182 void Sudden_Jerk_Interrupt()
NarendraSingh 7:22c4d2681cc9 183 {
NarendraSingh 7:22c4d2681cc9 184 Jerk_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 185 Motion_Detect_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 186 }
NarendraSingh 7:22c4d2681cc9 187 /*
NarendraSingh 7:22c4d2681cc9 188 void OBD_Plug_IN_Interrupt()
NarendraSingh 7:22c4d2681cc9 189 {
NarendraSingh 7:22c4d2681cc9 190 if(OBD_PlugIN_State1!=OBD_PlugIN_Temp_State) {
NarendraSingh 7:22c4d2681cc9 191 OBD_PlugIN_State1=1;
NarendraSingh 7:22c4d2681cc9 192 OBD_PlugIN_State=!OBD_PlugIN_State;
NarendraSingh 7:22c4d2681cc9 193 OBD_PlugIN_Temp_State=OBD_PlugIN_State;
NarendraSingh 7:22c4d2681cc9 194 OBD_PlugInOut_IOC_Status = TRUE;
emilmont 1:d2ba5afbf91f 195 }
emilmont 1:d2ba5afbf91f 196 }
emilmont 1:d2ba5afbf91f 197
NarendraSingh 7:22c4d2681cc9 198 void OBD_Plug_OUT_Interrupt()
NarendraSingh 7:22c4d2681cc9 199 {
emilmont 1:d2ba5afbf91f 200
NarendraSingh 7:22c4d2681cc9 201 if(OBD_PlugIN_State2!=OBD_PlugIN_Temp_State) {
NarendraSingh 7:22c4d2681cc9 202 OBD_PlugIN_State2=0;
NarendraSingh 7:22c4d2681cc9 203 OBD_PlugIN_State=!OBD_PlugIN_State;
NarendraSingh 7:22c4d2681cc9 204 OBD_PlugIN_Temp_State=OBD_PlugIN_State;
NarendraSingh 7:22c4d2681cc9 205 OBD_PlugInOut_IOC_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 206 }
NarendraSingh 7:22c4d2681cc9 207 }
NarendraSingh 7:22c4d2681cc9 208
NarendraSingh 7:22c4d2681cc9 209 //This function is Interrupt routine for detecting OBD Plugin and Out
NarendraSingh 7:22c4d2681cc9 210 void Handle_CheckIn_Interrupt()
NarendraSingh 7:22c4d2681cc9 211 {
NarendraSingh 7:22c4d2681cc9 212 OBD_PlugInOut_IOC_Status = TRUE;
NarendraSingh 7:22c4d2681cc9 213 pc.printf("\nMovement_Detected\n");
NarendraSingh 7:22c4d2681cc9 214 }
NarendraSingh 7:22c4d2681cc9 215
NarendraSingh 7:22c4d2681cc9 216 //Declare Ticker for sending lora packet
NarendraSingh 7:22c4d2681cc9 217 Ticker Lora_Packet_Sending_Ticker;
NarendraSingh 7:22c4d2681cc9 218 void flip_Packet_Sending_Flag(void)
NarendraSingh 7:22c4d2681cc9 219 {
NarendraSingh 7:22c4d2681cc9 220 led1=!led1;
NarendraSingh 7:22c4d2681cc9 221 //flip function
NarendraSingh 7:22c4d2681cc9 222 if(Ticker_Count < 5) {
NarendraSingh 7:22c4d2681cc9 223 Ticker_Count++;
NarendraSingh 7:22c4d2681cc9 224 } else {
NarendraSingh 7:22c4d2681cc9 225 Ticker_Count = 0;
NarendraSingh 7:22c4d2681cc9 226 Send_Lora_Packet_Flag = TRUE;
NarendraSingh 7:22c4d2681cc9 227 }
NarendraSingh 7:22c4d2681cc9 228 }
NarendraSingh 7:22c4d2681cc9 229 */
NarendraSingh 7:22c4d2681cc9 230 // called every time a byte is received from lora module.
NarendraSingh 7:22c4d2681cc9 231 void Lora_onDataRx()
NarendraSingh 7:22c4d2681cc9 232 {
NarendraSingh 7:22c4d2681cc9 233 while (LORA_UART.readable()) {
NarendraSingh 7:22c4d2681cc9 234 // while there is data waiting
NarendraSingh 7:22c4d2681cc9 235 LORA_UART_RX_Buffer[Lora_RxBuffer_End_Pos++] = LORA_UART.getc(); // put it in the buffer
NarendraSingh 7:22c4d2681cc9 236 //pc1.putc(LORA_UART_RX_Buffer[Lora_RxBuffer_End_Pos-1]);
NarendraSingh 7:22c4d2681cc9 237 if(Lora_RxBuffer_End_Pos >= LORA_UART_RX_Size) {
NarendraSingh 7:22c4d2681cc9 238 // BUFFER OVERFLOW. What goes here depends on how you want to cope with that situation.
NarendraSingh 7:22c4d2681cc9 239 // For now just throw everything away.
NarendraSingh 7:22c4d2681cc9 240 Lora_RxBuffer_End_Pos = 0;
NarendraSingh 7:22c4d2681cc9 241 }
NarendraSingh 7:22c4d2681cc9 242 }
NarendraSingh 7:22c4d2681cc9 243 }
NarendraSingh 7:22c4d2681cc9 244 /*
NarendraSingh 7:22c4d2681cc9 245 // called every time a byte is received from Beacon Module.
NarendraSingh 7:22c4d2681cc9 246 void Beacon_onDataRx()
NarendraSingh 7:22c4d2681cc9 247 {
NarendraSingh 7:22c4d2681cc9 248 while (Beacon_UART.readable()) {
NarendraSingh 7:22c4d2681cc9 249 // while there is data waiting
NarendraSingh 7:22c4d2681cc9 250 Beacon_RX_Buffer[Beacon_RxBuffer_End_Pos++] = Beacon_UART.getc(); // put it in the buffer
NarendraSingh 7:22c4d2681cc9 251 pc1.printf("%2x",Beacon_RX_Buffer[Beacon_RxBuffer_End_Pos-1]);
NarendraSingh 7:22c4d2681cc9 252 if(Beacon_RxBuffer_End_Pos >= 100) {
NarendraSingh 7:22c4d2681cc9 253 // BUFFER OVERFLOW. What goes here depends on how you want to cope with that situation.
NarendraSingh 7:22c4d2681cc9 254 // For now just throw everything away.
NarendraSingh 7:22c4d2681cc9 255 Beacon_RxBuffer_End_Pos = 0;
NarendraSingh 7:22c4d2681cc9 256 }
NarendraSingh 7:22c4d2681cc9 257 }
NarendraSingh 7:22c4d2681cc9 258 }
NarendraSingh 7:22c4d2681cc9 259
NarendraSingh 7:22c4d2681cc9 260 void BLE_Receiver_onDataRx(void)
NarendraSingh 7:22c4d2681cc9 261 {
NarendraSingh 7:22c4d2681cc9 262 while (BLE_RECEIVER_UART.readable()) {
NarendraSingh 7:22c4d2681cc9 263 // while there is data waiting
NarendraSingh 7:22c4d2681cc9 264 //BLE_Receiver_UART_RX_Buffer[BLE_RxBuffer_End_Pos++] = BLE_RECEIVER_UART.getc(); // put it in the buffer
NarendraSingh 7:22c4d2681cc9 265 //pc1.putc(BLE_Receiver_UART_RX_Buffer[BLE_RxBuffer_End_Pos-1]);
NarendraSingh 7:22c4d2681cc9 266 if(BLE_RxBuffer_End_Pos >= BLE_RECEIVER_UART_RX_Size) {
NarendraSingh 7:22c4d2681cc9 267 // BUFFER OVERFLOW. What goes here depends on how you want to cope with that situation.
NarendraSingh 7:22c4d2681cc9 268 // For now just throw everything away.
NarendraSingh 7:22c4d2681cc9 269 BLE_RxBuffer_End_Pos = 0;
emilmont 1:d2ba5afbf91f 270 }
emilmont 1:d2ba5afbf91f 271 }
emilmont 1:d2ba5afbf91f 272 }
NarendraSingh 7:22c4d2681cc9 273 */
NarendraSingh 7:22c4d2681cc9 274
NarendraSingh 7:22c4d2681cc9 275 void checkinFunction() {
NarendraSingh 7:22c4d2681cc9 276 // this now runs in the context of checkinEventThread, instead of in the ISR
NarendraSingh 7:22c4d2681cc9 277 count++;
NarendraSingh 7:22c4d2681cc9 278 printf("Toggling LED 2!\r\n");
NarendraSingh 7:22c4d2681cc9 279 for(int i = 0 ; i < 0xFFFFFF; i++);
NarendraSingh 7:22c4d2681cc9 280 led2 = !led2;
NarendraSingh 7:22c4d2681cc9 281 message2 = 1;
NarendraSingh 7:22c4d2681cc9 282 loraQueue.put(&message2);
NarendraSingh 7:22c4d2681cc9 283 printf("Toggled LED 2 count = %d \r\n", count);
NarendraSingh 7:22c4d2681cc9 284 }
NarendraSingh 7:22c4d2681cc9 285
NarendraSingh 7:22c4d2681cc9 286 void motionFunction() {
NarendraSingh 7:22c4d2681cc9 287 // this now runs in the context of motionEventThread, instead of in the ISR
NarendraSingh 7:22c4d2681cc9 288 count++;
NarendraSingh 7:22c4d2681cc9 289 printf("Toggling LED 3!\r\n");
NarendraSingh 7:22c4d2681cc9 290 for(int i = 0 ; i < 0xFFFFFF; i++);
NarendraSingh 7:22c4d2681cc9 291 led3 = !led3;
NarendraSingh 7:22c4d2681cc9 292 message3 = 2;
NarendraSingh 7:22c4d2681cc9 293 loraQueue.put(&message3);
NarendraSingh 7:22c4d2681cc9 294 printf("Toggled LED 3 count = %d \r\n", count);
NarendraSingh 7:22c4d2681cc9 295 }
NarendraSingh 7:22c4d2681cc9 296
NarendraSingh 7:22c4d2681cc9 297 /**
NarendraSingh 7:22c4d2681cc9 298 * @brief thread a function
NarendraSingh 7:22c4d2681cc9 299 */
NarendraSingh 7:22c4d2681cc9 300 static void loraSendThreadFunc(void const *buf)
NarendraSingh 7:22c4d2681cc9 301 {
NarendraSingh 7:22c4d2681cc9 302 uint32_t execs = 0;
NarendraSingh 7:22c4d2681cc9 303 int *message1;
NarendraSingh 7:22c4d2681cc9 304 osEvent evt;
NarendraSingh 7:22c4d2681cc9 305 pc_serial.printf("## started %s execution! ##\n\r", (char *)buf);
NarendraSingh 7:22c4d2681cc9 306
NarendraSingh 7:22c4d2681cc9 307 for(;;) {
NarendraSingh 7:22c4d2681cc9 308 execs++;
NarendraSingh 7:22c4d2681cc9 309 /* adds dummy processing */
NarendraSingh 7:22c4d2681cc9 310 for(int i = 0 ; i < 0xFFFFFF; i++);
NarendraSingh 7:22c4d2681cc9 311 evt = loraQueue.get();
NarendraSingh 7:22c4d2681cc9 312 if (evt.status == osEventMessage) {
NarendraSingh 7:22c4d2681cc9 313 message1 = (int*)evt.value.p;
NarendraSingh 7:22c4d2681cc9 314 }
NarendraSingh 7:22c4d2681cc9 315 if( *message1 == HEART_BEAT_PACKET_SENDING)
NarendraSingh 7:22c4d2681cc9 316 Send_HeartBeat_Packet(); //call function to send heartbeat packet
NarendraSingh 7:22c4d2681cc9 317 else if( *message1 == STATUS_PACKET_SENDING)
NarendraSingh 7:22c4d2681cc9 318 Send_Vehicle_Status_Packet(); //call function to send heartbeat packet
NarendraSingh 7:22c4d2681cc9 319 pc_serial.printf("## %s executed %d times! p = %d ##\n\r", (char *)buf, execs, *message1);
NarendraSingh 7:22c4d2681cc9 320 led1 = !led1;
NarendraSingh 7:22c4d2681cc9 321 Thread::yield();
NarendraSingh 7:22c4d2681cc9 322 }
NarendraSingh 7:22c4d2681cc9 323 }
NarendraSingh 7:22c4d2681cc9 324
NarendraSingh 7:22c4d2681cc9 325 /**
NarendraSingh 7:22c4d2681cc9 326 * @brief main application loop
NarendraSingh 7:22c4d2681cc9 327 */
NarendraSingh 7:22c4d2681cc9 328 int main(void)
NarendraSingh 7:22c4d2681cc9 329 {
NarendraSingh 7:22c4d2681cc9 330 pc_serial.baud(115200);
NarendraSingh 7:22c4d2681cc9 331 pc3.baud(115200);
NarendraSingh 7:22c4d2681cc9 332 pc_serial.printf("Hello");
NarendraSingh 7:22c4d2681cc9 333 LORA_UART.attach(&Lora_onDataRx, Serial::RxIrq);
NarendraSingh 7:22c4d2681cc9 334 Set_Up_Lora_Network_Configuration();
NarendraSingh 7:22c4d2681cc9 335 Initialize_lora_Packets();
NarendraSingh 7:22c4d2681cc9 336 loraSendThread.start(callback(loraSendThreadFunc, (void *)LORA_SEND_THREAD));
NarendraSingh 7:22c4d2681cc9 337 //b_thread.start(callback(thread2, (void *)THREAD_B));
NarendraSingh 7:22c4d2681cc9 338 /*c_thread.start(callback(thread3, (void *)THREAD_C));*/
NarendraSingh 7:22c4d2681cc9 339
NarendraSingh 7:22c4d2681cc9 340 checkinEventThread.start(callback(&chechinEventQueue, &EventQueue::dispatch_forever));
NarendraSingh 7:22c4d2681cc9 341 motionEventThread.start(callback(&motionEventQueue, &EventQueue::dispatch_forever));
NarendraSingh 7:22c4d2681cc9 342
NarendraSingh 7:22c4d2681cc9 343 // wrap calls in queue.event to automatically defer to the queue's thread
NarendraSingh 7:22c4d2681cc9 344 checkinIntr.fall(chechinEventQueue.event(&checkinFunction));
NarendraSingh 7:22c4d2681cc9 345 motionIntr.fall(motionEventQueue.event(&motionFunction));
NarendraSingh 7:22c4d2681cc9 346
NarendraSingh 7:22c4d2681cc9 347 return 0;
NarendraSingh 7:22c4d2681cc9 348 }
NarendraSingh 7:22c4d2681cc9 349
NarendraSingh 7:22c4d2681cc9 350