kumar singh
/
Dealer_20Mar
BLE Transmitter not working
Fork of Dealer_23Feb by
Lora.cpp
- Committer:
- NarendraSingh
- Date:
- 2017-02-18
- Revision:
- 18:86f069689502
- Parent:
- 17:758fb8454ab0
- Child:
- 19:886d50ecc718
File content as of revision 18:86f069689502:
#include "Lora.h" #include "OBD.h" #include "Common_Defs.h" #include "Beacon.h" //Configure Lora Packet RawSerial LORA_Module_UART(PA_0, PA_1);//USART4_TX->PA_0,USART4_RX->PA_1 RawSerial pc2(PA_14, PA_15);//USART1_TX->PA_9,USART1_RX->PA_10 Serial pc_2(USBTX, USBRX); uint8 Packet_Type_To_Send = HEARTBEAT_TYPE_PACKET; //By Default Heart Beat PAckets should be sent uint8 OBD_Protocol_Version = 0x01; uint8 Vehicle_Identification_Number[17]; //Unique Vehicle_Identification_Number, Read using OBD uint8 Motion_Packet_Sent_Count=0; uint8 CheckIN_Packet_Sent_Count=0; uint8 Lora_Packet_To_Send[100]; uint8 Send_Lora_Packet_Flag = FALSE; int Lora_RxBuffer_Crnt_Pos,Lora_RxBuffer_End_Pos; // must be volatile or the compiler may over-optimise. int receivedDataCount = 0; char LORA_UART_RX_Buffer[LORA_UART_RX_Size]; int LORA_UART_RX_Crnt_Pos; uint8 Lora_Command_Rcvd[100]; uint8 Lora_Cmd_Length = 0; uint8 AT_Response_Receive_Status = FAILURE; //Create Object for Type of Lora Packet to send Heart_Beat_PacketType Heart_Beat_Lora_Packet; //Allocate Memory for HeartBeat Lora Packets CheckIN_PacketType CheckIN_Lora_Packet; //Allocate Memory for CheckIN Lora Packets CheckOUT_PacketType CheckOUT_Packet; //Allocate Memory for CheckOUT Lora Packets Motion_PacketType Motion_Lora_Packet; //Allocate Memory for Movement Lora Packets Vehicle_Status_PacketType Vehicle_Status_Lora_Packet; //Allocate Memory for Movement Lora Packets Near_Car_Beacon Near_Car_Beacon_Packet; Fixed_Beacon Fixed_Beacon_Packet; //Lora AT Commands list const char* Attention = {"AT\r"}; const char* Reset_Device = "ATZ\r"; const char* Reset_to_Factory_Defaults = "AT&F\r"; const char* Save_Configuration = "AT&W\r"; const char* Serial_Baud_Rate = "AT+IPR="; const char* Join_Network = "AT+JOIN\r"; const char* Join_Retries = "AT+JR="; const char* AES_Encryption = "AT+ENC="; const char* Send_Lora_Packet = "AT+SEND "; const char* Set_Frequency_Sub_Band = "AT+FSB="; const char* Set_Network_ID = "AT+NI="; const char* Set_Network_Key = "AT+NK="; const char* Network_Key = "010203123"; const char* Network_ID = "010203040"; const char* Network_Join_Retries = "AT+JR="; const char* Network_Join_Status = "AT+NJS="; const char* Lora_Device_ID = "AT+DI\r"; #define CHECK_IN_PACKET 0x00 #define CHECK_OUT_PACKET 0x01 uint8 Calculate_Lora_Frame_FCS(uint8* Packet_Data,uint8 Packet_Length); void Set_Up_Lora_Network_Configuration(void); void Get_Lora_Response(void); //Set Up lora network void Set_Up_Lora_Network_Configuration(void) { LORA_Module_UART.baud(115200); LORA_Module_UART.printf(Attention);//Send Attention command AT_Response_Receive_Status = FAILURE; pc2.printf("Nwk set up started"); while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("AT Response received"); LORA_Module_UART.printf("%s%d\r",Set_Frequency_Sub_Band,FREQUENCY_SUB_BAND_CHANNEL7);//set frequency sub band to 7 AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("Frequency band response received"); LORA_Module_UART.printf("%s%d,%s\r",Set_Network_Key,STRING_PARAMETER,Network_Key); //set network key AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("Network key Response received"); LORA_Module_UART.printf("%s%d,%s\r",Set_Network_ID,STRING_PARAMETER,Network_ID); //set network id AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("Network Id response received"); //LORA_Module_UART.printf("%s",Reset_Device); //reset device //wait_ms(3500); LORA_Module_UART.printf("AT+TXDR=DR2\r"); AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); LORA_Module_UART.printf("AT+ADR=1\r"); //Enable adaptive data rate AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); LORA_Module_UART.printf("%s",Save_Configuration); //save configuration AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("Configuration saved"); LORA_Module_UART.printf("%s",Reset_Device); //reset device wait_ms(3500); LORA_Module_UART.printf(Attention); //Send Attention command AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("AT Response received"); LORA_Module_UART.printf("%s",Join_Network); //join network with gateway AT_Response_Receive_Status = FAILURE; while(AT_Response_Receive_Status) Get_Lora_Response(); pc2.printf("Join Response received"); } void Initialize_lora_Packets() { uint8 i; /******* Initialize Lora packet for HeartBeat *****/ Heart_Beat_Lora_Packet.Header = LORA_PACKET_HEADER; Heart_Beat_Lora_Packet.Protocol_Version = OBD_Protocol_Version; Heart_Beat_Lora_Packet.Packet_Type = HEART_BEAT_PACKET_CMD; Heart_Beat_Lora_Packet.OBD_Battery_Voltage = 350; //3.50V, dummy data Heart_Beat_Lora_Packet.Car_Battery_Voltage = 1250; //12.50V, dummy data Heart_Beat_Lora_Packet.OBD_Battery_Temperature = 95; //95'F, dummy data Heart_Beat_Lora_Packet.Car_Ambient_Temperature = 104; //104'F, dummy data for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking1_Beacon_ID[i] = (0x01+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking1_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength = 23; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking2_Beacon_ID[i] = (10+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking2_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength = 45; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking3_Beacon_ID[i] = (20+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking3_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength = 12; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength Heart_Beat_Lora_Packet.FCS = 0x00; //FCS of all packets /******* Initialize Lora packet for Vehicle Status *****/ Vehicle_Status_Lora_Packet.Header = LORA_PACKET_HEADER; Vehicle_Status_Lora_Packet.Protocol_Version = OBD_Protocol_Version; Vehicle_Status_Lora_Packet.Packet_Type = STATUS_PACKET_CMD; for(i=0;i<17;i++) Vehicle_Status_Lora_Packet.VIN[i] = (30+i);//Vehicle_Identification_Number[i]; for(i=0;i<3;i++) Vehicle_Status_Lora_Packet.ODO_METER_READING[i] = 0x05; //Dummyy data, To be read using OBD Vehicle_Status_Lora_Packet.Fuel_Level = 1050;//10.5 litre Vehicle_Status_Lora_Packet.OBD_Battery_Voltage = 350; Vehicle_Status_Lora_Packet.Car_Battery_Voltage = 1250; Vehicle_Status_Lora_Packet.OBD_Battery_Temperature = 95; Vehicle_Status_Lora_Packet.Car_Ambient_Temperature = 104; for(i=0;i<6;i++) Vehicle_Status_Lora_Packet.BLE_Adv_Beacon_ID[i] = BLE_Adv_Module_Beacon_ID[i]; //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking1_Beacon_ID[i] = (30+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking1_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength = 0x07; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking2_Beacon_ID[i] = (40+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking2_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength = 0x08; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking3_Beacon_ID[i] = (50+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking3_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength = 0x09; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Near_Car_Beacon_Packet.Near_Car1_Beacon_ID[i] = (60+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor = 0x0000; Near_Car_Beacon_Packet.Near_Car1_Beacon_Signal_Strength = 0x09; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Near_Car_Beacon_Packet.Near_Car2_Beacon_ID[i] = (70+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor = 0x0000; Near_Car_Beacon_Packet.Near_Car2_Beacon_Signal_Strength = 0x09; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Near_Car_Beacon_Packet.Near_Car3_Beacon_ID[i] = (80+i); //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor = 0x0000; Near_Car_Beacon_Packet.Near_Car3_Beacon_Signal_Strength = 0x09; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength Vehicle_Status_Lora_Packet.FCS = 0x00; //FCS of all packets /******* Initialize Lora packet for CheckIn *****/ CheckIN_Lora_Packet.Header = LORA_PACKET_HEADER; CheckIN_Lora_Packet.Protocol_Version = OBD_Protocol_Version; CheckIN_Lora_Packet.Packet_Type = CHECKIN_PACKET_CMD; for(i=0;i<17;i++) CheckIN_Lora_Packet.VIN[i] = Vehicle_Identification_Number[i]; for(i=0;i<3;i++) CheckIN_Lora_Packet.ODO_METER_READING[i] = 0x00; //Dummyy data, To be read using OBD for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking1_Beacon_ID[i] = 0x00; //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking1_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength = 0x00; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking2_Beacon_ID[i] = 0x00; //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking2_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength = 0x00; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking3_Beacon_ID[i] = 0x00; //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking3_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength = 0x00; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength CheckIN_Lora_Packet.FCS = 0x00; //FCS of all packets /******* Initialize Lora packet for Movement *****/ Motion_Lora_Packet.Header = LORA_PACKET_HEADER; Motion_Lora_Packet.Protocol_Version = OBD_Protocol_Version; Motion_Lora_Packet.Packet_Type = MOTION_PACKET_CMD; for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking1_Beacon_ID[i] = 0x00; //MAC ID of 1st NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking1_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength = 0x00; //Signal Strength of 1st NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking2_Beacon_ID[i] = 0x00; //MAC ID of 2nd NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking2_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength = 0x00; //Signal Strength of 2nd NearBy Beacon Device with Highest Signal Strength for(i=0;i<6;i++) Fixed_Beacon_Packet.Parking3_Beacon_ID[i] = 0x00; //MAC ID of 3rd NearBy Beacon Device with Highest Signal Strength,dummy data Fixed_Beacon_Packet.Parking3_Beacon_Minor = 0x0000; Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength = 0x00; //Signal Strength of 3rd NearBy Beacon Device with Highest Signal Strength Motion_Lora_Packet.Acceleration_Type = 0x00; //Type of acceleration, Vehicle Started/Vehicle Stopped/Sudden Vehicle Movement Motion_Lora_Packet.FCS = 0x00; //FCS of all packets } //HeartBeat Packet should be sent every 30sec void Send_HeartBeat_Packet(void) { //write code to read obd data,temperature,beacon data uint8 Pos = 0,i; Lora_Packet_To_Send[Pos++] = Heart_Beat_Lora_Packet.Header; //Header of Lora Packet,0xFE Lora_Packet_To_Send[Pos++] = Heart_Beat_Lora_Packet.Protocol_Version; Lora_Packet_To_Send[Pos++] = Heart_Beat_Lora_Packet.Packet_Type; //MSB of Motion Packet Type Lora_Packet_To_Send[Pos++] = (Heart_Beat_Lora_Packet.OBD_Battery_Voltage >> 8); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Heart_Beat_Lora_Packet.OBD_Battery_Voltage & 0xFF); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Heart_Beat_Lora_Packet.Car_Battery_Voltage >> 8); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = (Heart_Beat_Lora_Packet.Car_Battery_Voltage & 0xFF); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = Heart_Beat_Lora_Packet.OBD_Battery_Temperature; //Get Battery Temperature Lora_Packet_To_Send[Pos++] = Heart_Beat_Lora_Packet.Car_Ambient_Temperature; //Get Ambient Temperature for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor >> 8); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor & 0xFF); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor >> 8); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor & 0xFF); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor >> 8); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor & 0xFF); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Calculate_Lora_Frame_FCS(Lora_Packet_To_Send,Pos); //Calculate FCS of all bytes Packet_Type_To_Send = HEARTBEAT_TYPE_PACKET; Send_Lora_Packet_To_Gateway(Lora_Packet_To_Send,Pos); } //CheckIN packets sending should be started when device is plugged in to the vehicle. It should be sent every 5sec for 2minutes and afterthat it should stop sending void Send_Vehicle_Status_Packet(void) { //write code to read OBD data,temperature,beacon data uint8 Pos = 0,i; Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.Header; //Header of Lora Packet,0xFE Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.Protocol_Version; //MSB of Motion Packet Type Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.Packet_Type; //MSB of Motion Packet Type for(i=0;i < 17;i++) Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.VIN[i]; //Get OBD_ID for(i=0;i < 3;i++) Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.ODO_METER_READING[i]; //Get OBD_ID Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.Fuel_Level >> 8); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.Fuel_Level & 0xFF); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.OBD_Battery_Voltage >> 8); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.OBD_Battery_Voltage & 0xFF); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.Car_Battery_Voltage >> 8); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = (Vehicle_Status_Lora_Packet.Car_Battery_Voltage & 0xFF); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.OBD_Battery_Temperature; //Get Battery Temperature Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.Car_Ambient_Temperature; //Get Ambient Temperature for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Vehicle_Status_Lora_Packet.BLE_Adv_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor >> 8); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor & 0xFF); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor >> 8); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor & 0xFF); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor >> 8); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor & 0xFF); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor >> 8); //Get Near Car1 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor & 0xFF); //Get Near Car1 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor >> 8); //Get Near Car2 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor & 0xFF); //Get Near Car2 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor >> 8); //Get Near Car3 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor & 0xFF); //Get Near Car3 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Calculate_Lora_Frame_FCS(Lora_Packet_To_Send,Pos); //Calculate FCS of all bytes CheckIN_Packet_Sent_Count++; Send_Lora_Packet_To_Gateway(Lora_Packet_To_Send,Pos); } //CheckIN packets sending should be started when device is plugged in to the vehicle. It should be sent every 5sec for 2minutes and afterthat it should stop sending void Send_CheckIN_Packet(void) { //write code to read OBD data,temperature,beacon data uint8 Pos = 0,i; Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.Header; //Header of Lora Packet,0xFE Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.Protocol_Version; //MSB of Motion Packet Type if(OBD_PlugIN_State) Lora_Packet_To_Send[Pos++] = CHECK_IN_PACKET; //Check detected. Set packet type to Checkout type else Lora_Packet_To_Send[Pos++] = CHECK_OUT_PACKET; //Checkout detected. Set packet type to Checkout type for(i=0;i < 17;i++) Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.VIN[i]; //Get OBD_ID for(i=0;i < 3;i++) Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.ODO_METER_READING[i]; //Get OBD_ID Lora_Packet_To_Send[Pos++] = (CheckIN_Lora_Packet.OBD_Battery_Voltage >> 8); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (CheckIN_Lora_Packet.OBD_Battery_Voltage & 0xFF); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (CheckIN_Lora_Packet.Car_Battery_Voltage >> 8); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = (CheckIN_Lora_Packet.Car_Battery_Voltage & 0xFF); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.OBD_Battery_Temperature; //Get Battery Temperature Lora_Packet_To_Send[Pos++] = CheckIN_Lora_Packet.Car_Ambient_Temperature; //Get Ambient Temperature for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor >> 8); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor & 0xFF); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor >> 8); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor & 0xFF); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor >> 8); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor & 0xFF); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Calculate_Lora_Frame_FCS(Lora_Packet_To_Send,Pos); //Calculate FCS of all bytes CheckIN_Packet_Sent_Count++; Send_Lora_Packet_To_Gateway(Lora_Packet_To_Send,Pos); } //CheckIN packets sending should be started when device is plugged in to the vehicle. It should be sent every 5sec for 2minutes and afterthat it should stop sending void Send_CheckOUT_Packet(void) { //write code to read OBD data,temperature,beacon data uint8 Pos = 0,i; Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.Header; //Header of Lora Packet,0xFE Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.Protocol_Version; //MSB of Motion Packet Type Lora_Packet_To_Send[Pos++] = CHECK_OUT_PACKET; //Checkout detected. Set packet type to Checkout type for(i=0;i < 17;i++) Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.VIN[i]; //Get OBD_ID for(i=0;i < 3;i++) Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.ODO_METER_READING[i]; //Get OBD_ID Lora_Packet_To_Send[Pos++] = (CheckOUT_Packet.OBD_Battery_Voltage >> 8); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (CheckOUT_Packet.OBD_Battery_Voltage & 0xFF); //Get OBD_Battery Voltage Lora_Packet_To_Send[Pos++] = (CheckOUT_Packet.Car_Battery_Voltage >> 8); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = (CheckOUT_Packet.Car_Battery_Voltage & 0xFF); //Get Vehicle_Battery Temperature Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.OBD_Battery_Temperature; //Get Battery Temperature Lora_Packet_To_Send[Pos++] = CheckOUT_Packet.Car_Ambient_Temperature; //Get Ambient Temperature for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor >> 8); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor & 0xFF); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor >> 8); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor & 0xFF); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor >> 8); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor & 0xFF); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Calculate_Lora_Frame_FCS(Lora_Packet_To_Send,Pos); //Calculate FCS of all bytes CheckIN_Packet_Sent_Count++; Send_Lora_Packet_To_Gateway(Lora_Packet_To_Send,Pos); } //Motion packets sending should be started when vehicle acceleration changes like when it starts moving,stops moving and gets sudden jurk in case of theft. // It should be sent every 30sec for 2minutes and afterthat it should stop sending void Send_Motion_Packet(void) { //write code to read accelerometer data,temperature,beacon data uint8 Pos = 0,i; Lora_Packet_To_Send[Pos++] = Motion_Lora_Packet.Header; //Header of Lora Packet,0xFE Lora_Packet_To_Send[Pos++] = (Motion_Lora_Packet.Packet_Type >> 8); //MSB of Motion Packet Type Lora_Packet_To_Send[Pos++] = (Motion_Lora_Packet.Packet_Type & 0xFF); //LSB of Motion Packet Type for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor >> 8); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking1_Beacon_Minor & 0xFF); //Get Parking1 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor >> 8); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking2_Beacon_Minor & 0xFF); //Get Parking2 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor >> 8); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = (Fixed_Beacon_Packet.Parking3_Beacon_Minor & 0xFF); //Get Parking3 Minor Lora_Packet_To_Send[Pos++] = Fixed_Beacon_Packet.Parking3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor >> 8); //Get Near_Car1 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor & 0xFF); //Get Near_Car1 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor >> 8); //Get Near_Car2 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor & 0xFF); //Get Near_Car2 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor >> 8); //Get Near_Car3 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor & 0xFF); //Get Near_Car3 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Motion_Lora_Packet.Acceleration_Type; //get Type of Acceleration for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_ID[i]; //Get Beacon_ID of 1st nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor >> 8); //Get Near Car1 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car1_Beacon_Minor & 0xFF); //Get Near Car1 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car1_Beacon_Signal_Strength; //Get Signal Strength of 1st nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_ID[i]; //Get Beacon_ID of 2nd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor >> 8); //Get Near Car2 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car2_Beacon_Minor & 0xFF); //Get Near Car2 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car2_Beacon_Signal_Strength; //Get Signal Strength of 2nd nearby Beacon Device for(i=0;i<6;i++) Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_ID[i]; //Get Beacon_ID of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor >> 8); //Get Near Car3 Minor Lora_Packet_To_Send[Pos++] = (Near_Car_Beacon_Packet.Near_Car3_Beacon_Minor & 0xFF); //Get Near Car3 Minor Lora_Packet_To_Send[Pos++] = Near_Car_Beacon_Packet.Near_Car3_Beacon_Signal_Strength; //Get Signal Strength of 3rd nearby Beacon Device Lora_Packet_To_Send[Pos++] = Calculate_Lora_Frame_FCS(Lora_Packet_To_Send,Pos); //Calculate FCS of all bytes Motion_Packet_Sent_Count++; Send_Lora_Packet_To_Gateway(Lora_Packet_To_Send,Pos); } void Get_Lora_Response(void) { static uint16 Temp_Pos1; static uint8 Lora_Response_Found = 0x00; static uint8 Response_Start_Pos[5]; Lora_Response_Found = 0; Temp_Pos1 = LORA_UART_RX_Crnt_Pos = 0; while(Temp_Pos1 < Lora_RxBuffer_End_Pos) { //check for end of AT response to calculate length if((LORA_UART_RX_Buffer[Temp_Pos1] != 0x0D) || (LORA_UART_RX_Buffer[Temp_Pos1+1] != 0x0A)) { //check for AT end response <cr><lf> (i.e. 0x0D,0x0A) Temp_Pos1++; } else { Temp_Pos1+=2; Response_Start_Pos[Lora_Response_Found++] = Temp_Pos1; //pc2.printf("%c",Temp_Pos1); if(Lora_Response_Found >= 4) break; } } if(Lora_Response_Found >= 3) { if((Response_Start_Pos[1] - Response_Start_Pos[0]) > 0x02) //Response received without data { LORA_UART_RX_Crnt_Pos = (Response_Start_Pos[0]); Response_Start_Pos[1]-=2; for(Temp_Pos1=0; LORA_UART_RX_Crnt_Pos < Response_Start_Pos[1]; Temp_Pos1++) { Lora_Command_Rcvd[Temp_Pos1] = LORA_UART_RX_Buffer[LORA_UART_RX_Crnt_Pos++]; pc2.putc(Lora_Command_Rcvd[Temp_Pos1]); } Lora_RxBuffer_End_Pos = 0; AT_Response_Receive_Status = SUCCESS; } else if((Response_Start_Pos[1] - Response_Start_Pos[0]) == 0x02) //Response received along with data { LORA_UART_RX_Crnt_Pos = (Response_Start_Pos[1]); Response_Start_Pos[2]-=2; for(Temp_Pos1=0; LORA_UART_RX_Crnt_Pos < Response_Start_Pos[2]; Temp_Pos1++) { Lora_Command_Rcvd[Temp_Pos1] = LORA_UART_RX_Buffer[LORA_UART_RX_Crnt_Pos++]; pc2.putc(Lora_Command_Rcvd[Temp_Pos1]); } Lora_RxBuffer_End_Pos = 0; AT_Response_Receive_Status = SUCCESS; } } } //Function to send general Lora packets using "AT+SEND" Command void Send_Lora_Packet_To_Gateway(uint8* Command_To_Send,uint8 Length) { uint8 i=0; LORA_Module_UART.printf("%s",Send_Lora_Packet);//write to serial port for sending through lora module for(i=0;i<Length;i++) { LORA_Module_UART.putc(Command_To_Send[i]);//write to serial port for sending through lora module pc2.putc(Command_To_Send[i]); } LORA_Module_UART.printf("\r"); } unsigned char Calculate_Lora_Frame_FCS(unsigned char* Packet_Data,unsigned char Packet_Length) { uint8 i,FCS = 0x00; for(i=0; i < Packet_Length; i++) { FCS ^= (Packet_Data[i]); } return(FCS); }