386 lines
9.1 KiB
C
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
|