Files
CuboBmsFirmware/firmware/Core/Inc/GSM.h
2023-03-29 23:14:21 +03:00

386 lines
9.1 KiB
C

/**
******************************************************************************
* @file GSM.h
* @brief This file contains all the function prototypes for
* the GSM.c file
******************************************************************************
*1. define SIM800_Global_Struct
*2. start init functions
SIM800_Var_Init(&SIM800_Struct);
HTTP_Data_Init(&SIM800_Struct);
*3. DPC_TO_Init();
*4.
*
*
*
*
*
*
*
*
*
******************************************************************************
*/
#ifndef __GSMMODULE_H
#define __GSMMODULE_H
#include "main.h"
#include "modConfig.h"
//#include "string.h"
//#include "stdlib.h"
#define SIM_RESET_TIMEOUT 120000 //ms
#define SIM_NETWORK_CHECK_TIMEOUT 120000
typedef struct
{
uint8_t SIM_RX_Flag;
char SIM_answer[1024];
char* SIM_command;
uint8_t Size;
}SIM_Answer_Struct;
typedef struct {
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
uint8_t timezone;
}Time_Struct;
typedef struct{
char* Serial_Number;
char* Battery_Condition_ID;
char* Event_time;
char* Started_At_Time;
char* Ended_At_Time;
char* Status_Indication;
char* Energy_Sum;
char* Battery_Level_At_Start;
char* Battery_Level_At_End;
char* Battery_Voltage_At_Start;
char* Battery_Voltage_At_End;
char* Battery_Temperature_At_End;
char* Latitude;
char* Longitude;
char* Maximum_Load_Current;
char* Maximum_Charge_Current;
char* Internal_Resistance;
char* Moderated;
char* Current_time;
char Serial_Number_var[10];
char Battery_Condition_ID_var[10];
char Event_time_var[30];
char Started_At_Time_var[30];
char Ended_At_Time_var[30];
char Status_Indication_var[10];
char Energy_Sum_var[10];
char Battery_Level_At_Start_var[10];
char Battery_Level_At_End_var[10];
char Battery_Voltage_At_Start_var[10];
char Battery_Voltage_At_End_var[10];
char Battery_Temperature_At_End_var[10];
char Latitude_var[10];
char Longitude_var[10];
char Maximum_Load_Current_var[10];
char Maximum_Charge_Current_var[10];
char Internal_Resistance_var[15];
char Moderated_var[15];
char Current_time_var[30];
}HTTP_DATA_Struct;
typedef enum{
AT,
ATE,
ATV,
ATW,
ATCCLK,
ATCMEE2,
ATCLTS,
ATCNMI,
ATCREG,
ATCCID,
ATCSQ,
ATCOPS,
ATCOPS_Manual,
ATHTTPSTATUS,
ATCGATT_check,
ATCGATT_disconnect,
ATCGATT_connect,
ATSAPBR0,
ATSAPBR1,
ATSAPBR2,
ATSAPBR3_1_CONTYPE,
ATSAPBR3_1_APN,
ATSAPBR3_1_USER,
ATSAPBR3_1_PWD,
ATSAPBR4_1,
ATHTTP,
ATHTTPPARA_CID,
ATHTTPPARA_URL,
ATHTTPPARA_URL_EVENT,
ATHTTPPARA_CONTENT,
ATHTTPPARA_USERDATA,
ATHTTPPARA_PARAM,
ATHTTPDATA,
ATHTTPP_ACTION_POST,
ATHTTPP_ACTION_GET,
DATA0,
DATA1,
DATA2,
ATHTTPREAD,
ATHTTPREAD_REQ,
ATHTTPHEAD,
ATHTTPTERM,
ATHTTPSSL,
ATHTTPSSLREQUEST,
ATCGMR,
ATCDNSCFG,
ATCDNSCFG_REQ,
ATCIFSR,
ATCIPSTATUS,
ATCSTT,
ATCIICR,
ATCIPSHUT,
ATCIPMUX,
ATCIPGSMLOC,
REQUEST_START,
REQUEST_FINISHED,
READY_TO_OPERATE,
NETWORK_CHECK,
GPS_Req,
GET_ACTUAL_TIME,
GPS_LBS_Change
} Sim_Stages;
typedef struct
{
uint8_t Init_Complete;
uint8_t GPRS_Established;
uint8_t Permission_to_Send;
}SIM800_States;
//PUT DATA STRUCT
typedef struct{
uint64_t Serial;
uint8_t Battery_cond_ID;
Time_Struct Event_time;
Time_Struct Started_At_Time;
Time_Struct Ended_At_Time;
uint8_t Status_Indication;
uint16_t Energy_Sum;
uint16_t Battery_Level_At_Start;
uint16_t Battery_Level_At_End;
float Battery_Voltage_At_Start;
float Battery_Voltage_At_End;
uint16_t Battery_Temperature_At_End;
uint16_t Maximum_Load_Current;
uint16_t Maximum_Charge_Current;
float Internal_Resistance;
uint8_t Moderated;
}Battery_Data_Struct;
typedef enum{
INITIALISATION,
READY,
BUSY,
SIM_ERROR,
COMMAND_SET,
COMMAND_NOT_SET
}SIM800_Op_States;
typedef struct
{
char* AT ; // "AT\r\n";
char* ATV ;// "ATV1\r\n"; //echo turn off
char* ATE ;// "ATE0\r\n"; //answer without echo
char* ATW ;// "AT&W\r\n"; //save presets to mem
char* ATCFUN0;//"AT+CFUN;//0\r\n"; //reboot
char* ATCFUN1;//"AT+CFUN;//1\r\n"; //reboot
char* ATCMEE2;//"AT+CMEE;//2\r\n"; //return error code
char* ATCGREG;//"AT+CGREG?\r\n"; //gprs availability
char* ATCOPS;//"AT+COPS?\r\n";
char* ATCPAS;//"AT+CPAS\r\n";
char* ATCSQ;//"AT+CSQ\r\n";
//sms
char* ATCMGF1;//"AT+CMGF;//1\r\n";
char* ATCSMP;//"AT+CSMP;//17,167,0,0\r\n";
char* ATCMGFnum;//"AT+CMGS;//\"+79253801217\"\r\n";
char* ATCMGFtext;//"Hello\32\r\n";
char* ATD;//"ATD+79253801217\r\n";
char* ATCSCSUCS2;//"AT+CSCS;//\"UCS2\"\r\n";
//TIME
char* ATCLTS ;// "AT+CLTS;//1\r\n";
char* ATCCLK ;// "AT+CCLK?\r\n";
//GPS
char* ATCLBS;
char* ATCLBSCFG;
//GPRS
char* ATCGATT_check;//"AT+CGATT?\r\n";
char* ATCGATT_disconnect;
char* ATCGATT_connect;//"AT+CGATT;//1\r\n";
char* ATSAPBR1;//"AT+SAPBR;//1,1\r\n"; //Set connection
char* ATSAPBR2;//"AT+SAPBR;//2,1\r\n"; //get info and IP
char* ATSAPBR3_1_CONTYPE;//"AT+SAPBR;//3,1,\"CONTYPE\",\"GPRS\"\r\n"; //CONTYPE gprs connection types
char* ATSAPBR3_1_APN;//"AT+SAPBR;//3,1,\"APN\",\"internet.beeline.ru\"\r\n"; //APN connection¤
char* ATSAPBR3_1_USER;//"AT+SAPBR;//3,1,\"USER\",\"Beeline\"\r\n"; //
char* ATSAPBR3_1_PWD;//"AT+SAPBR;//3,1,\"PWD\",\"Beeline\"\r\n"; //
char* ATSAPBR4_1;//"AT+SAPBR;//4,1\r\n"; //current settings
char* ATCSTT;
char* ATCIICR;
char* ATCIPSHUT;
char* ATCIPGSMLOC;
//HTTP
char* ATHTTP;//"AT+HTTPINIT\r\n"; //init http
char* ATHTTPPARA_CID;
char* ATHTTPSTATUS;
char* ATHTTPPARA_PARAM;
char* ATHTTPPARA_URL;
char* ATHTTPP_ACTION_POST;
char* ATHTTPP_ACTION_GET;
char* ATHTTPPARA_USERDATA;
char* ATHTTPPARA_CONTENT; //set the Content-Type field in HTTP header
char* ATHTTPPARA_KEY;
//after this should return DOWNLOAD - we ready to transmit
char* DATA2;
char* ATHTTPACTION; //0-GET 1-POST 2-HEAD
char* ATHTTPREAD; //should return 200
char* ATHTTPTERM; //close
char* ATSAPBR0; //close
char* AT_CSCS_GSM;
char* ATCUSD102;
char* ATCNMI;
char* ATCMGL;
char* ATCCID;
char* ATCREG;
char* ATHTTPSSLREQUEST;
char* ATHTTPSSL;
char* ATCGMR;
char* ATCOPS_Manual;
char* ATCDNSCFG_REQ;
char* ATCDNSCFG;
char* ATCIFSR;
char* ATCIPSTATUS;
char* ATCIPMUX;
char* ATHTTPREAD_REQ;
char* ATHTTPHEAD;
char* ATHTTPPARA_URL_EVENT;
char* ATHTTPPARA_URL_EVENT_TEST;
char* ATHTTPPARA_URL_TEST;
char* SE_HTTPDATA;
char* SE_ENDOFSTRING;
char* SE_DATATO;
char* DATA0;
char* DATA1; //data to transmit
char* ATHTTPDATA0;
char* ATHTTPDATA1;
char* SE_Length1;
char* SE_Length2;
char DATA0_ch[500];
char DATA1_ch[300];
char ATHTTPDATA0_ch[100];
char ATHTTPDATA1_ch[100];
char SE_Length1_ch[100];
char SE_Length2_ch[100];
char Domain_URL[250];
char Domain_URL_Event[250];
char GSM_APN[50];
char GSM_USER[50];
char GSM_PWD[50];
} AT_Commands_Struct;
typedef enum{
DONOTHING,
HTTP_EVENT_POST,
HTTP_PARAMETERS_POST,
GET_GPS_COORDINATES,
GET_TIME,
HTTP_PARAMETERS_POST_TEST,
HTTP_EVENT_POST_TEST,
CHECK_NETWORK_AWAILABILITY
}SIM800_Op_Commands;
typedef struct{
Battery_Data_Struct BATTERY_DATA;
SIM_Answer_Struct Sim_Answer;
Time_Struct Sim_Time;
HTTP_DATA_Struct Sim_HTTP_Data;
Sim_Stages Sim_Stages_List;
SIM800_Op_States Sim_States_to_return;
SIM800_States Sim_Main_States;
AT_Commands_Struct Sim_At_Commands;
uint8_t SIM_RESET_Switch;
uint8_t SIM_RESET_Set;
uint32_t REQUEST_Timeout;
uint8_t REQUEST_Timeout_Active;
uint32_t INIT_Timeout;
uint8_t INIT_Timeout_Active;
uint32_t NORMAL_Timeout;
uint8_t NORMAL_Timeout_Active;
SIM800_Op_Commands Sim_Active_Command;
char* Default_Longitude;
char* Default_Latitude;
char Raw_var[100];
uint8_t Network_Check_Flag;
}SIM800_Global_Struct;
void SIM800_Var_Init(SIM800_Global_Struct* Sim_Struct);
void SIM800_Send_Command(char* command);
void SIM800_Send_Command_Long(char* command);
void SIM800_RESET(SIM800_Global_Struct* Sim_Struct);
uint8_t SIM800_Received_LOOKFOR(SIM_Answer_Struct* answ, char* LOOKFOR );
void SIM800_get_time(SIM_Answer_Struct* answ, Time_Struct* time);
void SIM800_Time_To_String(Time_Struct* Time, char* DST);
void SIM800_import_time_to_struct(SIM800_Global_Struct* Sim_Struct, Time_Struct* DST);
void Battery_Data_Event_Processing(SIM800_Global_Struct* Sim_Struct);
void Battery_Data_Parameters_Processing(SIM800_Global_Struct* Sim_Struct);
void Battery_Data_Length_Calculating(SIM800_Global_Struct* Sim_Struct);
void Battery_Data_Time_Processing(SIM800_Global_Struct* Sim_Struct/*HTTP_DATA_Struct* HTTP_DATA,Time_Struct* time*/);
void HTTP_Data_Init(SIM800_Global_Struct* Sim_Struct);
void SIM800_Get_Coordinates(SIM800_Global_Struct* Sim_Struct);
void SIM800_Interrupt_Handler(SIM800_Global_Struct* Sim_Struct, uint8_t* UART_Buffer, uint16_t Size);
void SIM800_Processing(SIM800_Global_Struct* Sim_Struct, uint8_t* UART_Buf);
SIM800_Op_States SIM800_Init(SIM800_Global_Struct* Sim_Struct/*SIM800_States* State, Sim_Stages* CMD_Type, AT_Commands_Struct* AT_CMD ,SIM_Answer_Struct* Answer_Struct, Time_Struct* Time*/);
SIM800_Op_States SIM800_Active_Mode(SIM800_Global_Struct* Sim_Struct);
SIM800_Op_States SIM800_Set_Command(SIM800_Global_Struct* Sim_Struct, SIM800_Op_Commands CMD, uint32_t Timeout);
void Battery_Data_to_String_Converter(SIM800_Global_Struct* Sim_Struct);
void SetParametersFromConfig(SIM800_Global_Struct* Sim_Struct, modConfigGeneralConfigStructTypedef *Config);
#endif