kumar singh
/
Dealer_20Mar
BLE Transmitter not working
Fork of Dealer_23Feb by
Diff: main.cpp
- Revision:
- 26:506380fccce2
- Parent:
- 24:1063cfc311e5
diff -r 1063cfc311e5 -r 506380fccce2 main.cpp --- a/main.cpp Thu Feb 23 13:21:08 2017 +0000 +++ b/main.cpp Mon Mar 20 02:44:45 2017 +0000 @@ -13,10 +13,14 @@ uint8 OBD_Plug_In_Status = FALSE; //peripheral connection -DigitalOut led1(PB_11); -DigitalOut led2(LED2); +//DigitalOut led1(PB_11); +//DigitalOut led2(LED2); DigitalIn Switch2(PB_13); +DigitalOut led1(LED1); +DigitalOut led2(PA_11); +DigitalOut led3(PA_12); + //Configure Serial port 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 //RawSerial pc1(PA_14, PA_15);//USART1_TX->PA_9,USART1_RX->PA_10 : Used for debugging purpose only @@ -242,11 +246,150 @@ } } +#define LORA_SEND_THREAD "lora_send_thread" +#define HEART_BEAT_PACKET_SENDING 0x01 +#define STATUS_PACKET_SENDING 0x02 + +InterruptIn checkinIntr(PC_13); +InterruptIn motionIntr(PB_14); +InterruptIn testIntr(PB_5); + + + +/* reserve the debbuger uart to shell interface */ +Serial pc_serial(USBTX,USBRX); + +/* declares threads for this demo: */ +const size_t a_stk_size = 512; +uint8_t a_stk[a_stk_size]; +Thread loraSendThread(osPriorityNormal, a_stk_size, &a_stk[0]); + +const size_t c_stk_size = 512; +uint8_t c_stk[c_stk_size]; + +const size_t e_stk_size = 512; +uint8_t e_stk[e_stk_size]; +Thread checkinEventThread(osPriorityNormal, e_stk_size, &e_stk[0]); +Thread motionEventThread(osPriorityNormal, c_stk_size, &c_stk[0]); + +// create an event queue +EventQueue chechinEventQueue; +EventQueue motionEventQueue; + +Queue<int, 16> loraQueue; +int message2; +int message3; + +uint32_t count = 0; + +void checkinFunction() { + // this now runs in the context of checkinEventThread, instead of in the ISR + count++; + printf("Toggling LED 2!\r\n"); + for(int i = 0 ; i < 0xFFFFFF; i++); + led2 = !led2; + message2 = HEART_BEAT_PACKET_SENDING; + loraQueue.put(&message2); + printf("Toggled LED 2 count = %d \r\n", count); +} + +void motionFunction() { + // this now runs in the context of motionEventThread, instead of in the ISR + count++; + printf("Toggling LED 3!\r\n"); + for(int i = 0 ; i < 0xFFFFFF; i++); + led3 = !led3; + message3 = STATUS_PACKET_SENDING; + loraQueue.put(&message3); + printf("Toggled LED 3 count = %d \r\n", count); +} + +/** + * @brief thread a function + */ +static void loraSendThreadFunc(void const *buf) +{ + uint32_t execs = 0; + int *message1; + osEvent evt; + pc_serial.printf("## started %s execution! ##\n\r", (char *)buf); + + for(;;) { + execs++; + /* adds dummy processing */ + for(int i = 0 ; i < 0xFFFFFF; i++); + evt = loraQueue.get(); + if (evt.status == osEventMessage) { + message1 = (int*)evt.value.p; + } + if( *message1 == HEART_BEAT_PACKET_SENDING) + Send_HeartBeat_Packet(); //call function to send heartbeat packet + else if( *message1 == STATUS_PACKET_SENDING) + Send_Vehicle_Status_Packet(); //call function to send heartbeat packet + + + pc_serial.printf("## %s executed %d times! p = %d ##\n\r", (char *)buf, execs, *message1); + led1 = !led1; + Thread::yield(); + } +} + +/** + * @brief main application loop + * +int main(void) +{ + pc_serial.baud(115200); + loraSendThread.start(callback(loraSendThreadFunc, (void *)LORA_SEND_THREAD)); + //b_thread.start(callback(thread2, (void *)THREAD_B)); + /*c_thread.start(callback(thread3, (void *)THREAD_C));* + + checkinEventThread.start(callback(&chechinEventQueue, &EventQueue::dispatch_forever)); + motionEventThread.start(callback(&motionEventQueue, &EventQueue::dispatch_forever)); + + // wrap calls in queue.event to automatically defer to the queue's thread + checkinIntr.fall(chechinEventQueue.event(&checkinFunction)); + motionIntr.fall(motionEventQueue.event(&motionFunction)); + + + return 0; +} +*/ +int main(void) +{ + pc_serial.baud(115200); + loraSendThread.start(callback(loraSendThreadFunc, (void *)LORA_SEND_THREAD)); + //b_thread.start(callback(thread2, (void *)THREAD_B)); + /*c_thread.start(callback(thread3, (void *)THREAD_C));*/ + + checkinEventThread.start(callback(&chechinEventQueue, &EventQueue::dispatch_forever)); + motionEventThread.start(callback(&motionEventQueue, &EventQueue::dispatch_forever)); + + // wrap calls in queue.event to automatically defer to the queue's thread + checkinIntr.fall(chechinEventQueue.event(&checkinFunction)); + motionIntr.fall(motionEventQueue.event(&motionFunction)); + return 0; +} +/* + int main() { pc1.baud(115200); BLE_RECEIVER_UART.baud(115200); - pc1.printf("%s","Debugging started\n"); + //pc1.printf("%s","Debugging started\n"); + pc_serial.printf("%s","Debugging started\n"); + loraSendThread.start(callback(loraSendThreadFunc, (void *)LORA_SEND_THREAD)); + //b_thread.start(callback(thread2, (void *)THREAD_B)); + /*c_thread.start(callback(thread3, (void *)THREAD_C));* + + checkinEventThread.start(callback(&chechinEventQueue, &EventQueue::dispatch_forever)); + motionEventThread.start(callback(&motionEventQueue, &EventQueue::dispatch_forever)); + + // wrap calls in queue.event to automatically defer to the queue's thread + checkinIntr.fall(chechinEventQueue.event(&checkinFunction)); + motionIntr.fall(motionEventQueue.event(&motionFunction)); + /* + //BLE_RECEIVER_UART.attach(&BLE_Receiver_onDataRx, Serial::RxIrq); LORA_UART.attach(&Lora_onDataRx, Serial::RxIrq); CheckIn_Interrupt.fall(&OBD_Plug_IN_Interrupt); @@ -270,8 +413,9 @@ // Send_Command_To_BLE_Receiver(SET_BEACON_MESSAGE_TYPE); pc1.printf("\n%s","Transmitter MAC ID received\n"); Lora_Periodic_Packet_Sending(); //Infinite loop for sending and receiving lora response, no return from here + * } - +*/ void Send_Command_To_BLE_Receiver(const char* Command) { uint8 i;