//*****************************************************************************
//
// gsm.c - library for gsm functionality
//
//
//
//*****************************************************************************
//*****************************************************************************
//
//! \addtogroup gsm
//! @{
//
//*****************************************************************************
#include "OS/uCOS-II/ucos_ii.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "usblib/usblib.h"
#include "usblib/host/usbhost.h"
#include "usblib/host/usbhcdc.h"
#include "cryptography/extCrypto_interface.h"
#include "protocols/protCTK/protCTKext.h"
#include "utils/logger.h"
#include "utils/Pipe.h"
//#include "benqM23.h"
#include "gsm.h"
#include <string.h>
//
// Defines for events
//
#define GSM_EVENT_TIMEOUT 1
#define GSM_EVENT_CTK 2
#define GSM_EVENT_MODEM 3
#define GSM_EVENT_TIMER 4
#define GSM_EVENT_INTERRUPT 5
//
// GSM_EVENT_MODEM commmands
//
#define MODEM_COMMAND_RESPONSE 1
#define MODEM_COMMAND_STATUS 2
#define GPRS_AT_COMMAND_BUFFER 512
INT16S GPRSRx_Buff[GPRS_AT_COMMAND_BUFFER];
struct stPipe GPRSRx;
//
// GPRS driver instrance
//
struct stGPRS GPRS;
//
// Modem Rx response size
//
#define MODEM_LINE_SIZE 128
//
// Modem Rx response buffer
//
char ModemLineRx[MODEM_LINE_SIZE];
//
// Defines size of event data
//
#define GSM_EVENT_DATA_SIZE 64
//
// Defines maximum number of GSM events
//
#define GPRS_EVENT_MODEL_MAX_EVENTS 100
//
// Defines timeout string cause it is used a lot
//
#define STRING_TIMEOUT "Timeout"
//
// Array of GSM events
//
struct stGPRSEvent_Data GPRS_EventLookUpTable[GPRS_EVENT_MODEL_MAX_EVENTS];
//
// Current pointer to event table
//
int GPRS_EventLookUpTablePtr =0;
//
// Pointer to GSM event table
//
void *GPRS_EventQTable[GPRS_EVENT_MODEL_MAX_EVENTS];
//
// OS GSM Queue event
//
OS_EVENT *GPRS_EventQ;
//
// OS GSM Task stack size
//
#define TASK_GSM_STK_SIZE 384
//
// OS GSM Task stack
//
static OS_STK OSTaskGSMStk[TASK_GSM_STK_SIZE] @ "OS_STACK_SPACE";
//
// This structure holds data for GSM event
//
struct stGPRSEvent_Data
{
unsigned int ui_from;
unsigned int ui_command;
unsigned int ui_subcommand;
unsigned int ui_datalength;
unsigned char puc_Data;
};
//
// Timer event enable/disable
//
int gi_GPRS_EventTimerEnable = 1;
//*****************************************************************************
//
// A pointer to a GSM callback function. This function is called by the
// GSM library to indicate to the application different events
//
//*****************************************************************************
static tGSMStatusCallback g_pfnGSMStatusCallback = 0;
static tGSMReceivedCallback g_pfnGSMCallbackReceived = 0;
static tGSMReceivingCallback g_pfnGSMCallbackReceiving = 0;
static tGSMResetCallback g_pfnGSMCallbackReset = 0;
//*****************************************************************************
//
// Prototypes for the GSM statemachine functions.
//
//*****************************************************************************
void GSM_PutEvent ( unsigned int ui_from,
unsigned int ui_command,
unsigned int ui_subcommand,
unsigned int ui_datalength,
unsigned char * puc_Data
);
void * State_BENQReinit(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQSetSleepOff(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQSetCMEE(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQSetPacketTimeout(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQCPIN(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQCheckCREG_NoContext(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQDefinePDPContext(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQContectActivation(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQATE0V1(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQReady(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQSetRemoteServer(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQDialup(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQOnline(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQQuitDataMode(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void * State_BENQCloseSocket(int FirstEntry,
int Statetime,
struct stGPRSEvent_Data Event);
void GPRSTimeDly(INT32U Ticks);
//*****************************************************************************
//
// Hold the current state for the USB GSM modem.
//
//*****************************************************************************
typedef enum
{
//
// No device is present.
//
STATE_NO_DEVICE,
//
// Mass storage device is being enumerated.
//
STATE_DEVICE_ENUM,
//
// Mass storage device is ready.
//
STATE_DEVICE_READY,
//
// An unsupported device has been attached.
//
STATE_UNKNOWN_DEVICE,
//
// A power fault has occurred.
//
STATE_POWER_FAULT
}tGSMUSBState;
//*****************************************************************************
//
// This function processes response from modem
//
// \param ucRxData is the character received from modem
//
// This function handles received characters from modem and generates MODEM
// response ID event
//
// \return None
//
//*****************************************************************************
int GPRSLineProcess(void)
{
if(GPRS.SearchEndStrBuf[0] == 0)
return MODEM_RESPONSE_WAITING;
if(GPRS.SearchEndStrBuf[0] == 13)
return MODEM_RESPONSE_WAITING;
if(strstr((char *)GPRS.SearchEndStrBuf,"OK\r"))
return MODEM_RESPONSE_OK;
if(strstr((char *)GPRS.SearchEndStrBuf,"CONNECT\r"))
return MODEM_RESPONSE_CONNECT;
if(strstr((char *)GPRS.SearchEndStrBuf,"ERROR"))
return MODEM_RESPONSE_ERROR;
if(strstr((char *)GPRS.SearchEndStrBuf,"NO CARRIER\r"))
return MODEM_RESPONSE_NO_CARRIER;
return MODEM_RESPONSE_WAITING;
}
//*****************************************************************************
//
//! Initializes gsm structures
//!
//! \param Nothing
//!
//! This function initialize GSM modul. It is called when modem needs to be
//! reinited.
//!
//! \return Nothing
//
//*************************************************************
GSM-driver.zip_Communicating_GSM_GSM AT
版权申诉
15 浏览量
2022-09-22
22:30:41
上传
评论
收藏 11KB ZIP 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+