📄 at_set.c
字号:
/****************************************************************
** *
** FILE : AT_SET.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "tools.h"
#include "message.h"
#include "list.h"
#include "errcode.h"
#include "errtask.h"
#include "gsmtask.h"
#include "at_cmd.h"
#include "at_trans.h"
#include "at_core.h"
#include "at_set.h"
#include "zprint.h"
/*
********************************************************************************
* DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define NUM_CMD 7
#define SIZE_BUF 50
/*
********************************************************************************
* DEFINE SET COMMAND STRUCTURE
********************************************************************************
*/
typedef struct {
INT8U len;
INT8U ch;
INT8U buffer[SIZE_BUF];
void (*fp)(INT8U, INT8U *);
ATCMDPARA_STRUCT *cmdptr;
} SETCMD_STRUCT;
/*
********************************************************************************
* DEFINE MODULE VARIANT
********************************************************************************
*/
static struct {
NODE reserve;
SETCMD_STRUCT command;
} CmdMem[NUM_CMD];
static LIST FreeList, UsedList;
static SETCMD_STRUCT *curcmd;
static SETCMD_STRUCT *AllocCmdMem(void)
{
return (SETCMD_STRUCT *)DelListHead(&FreeList);
}
static void StoreCmdMem(SETCMD_STRUCT *ptr, void (*fp)(INT8U, INT8U *))
{
ptr->fp = fp;
AppendListEle(&UsedList, (LISTMEM *)ptr); /* append to used list */
OSQPost(GsmTaskMsgQue, MSG_ATSET_TSK, 0, 0); /* send message */
}
static void FreeCurCmd(void)
{
AppendListEle(&FreeList, (LISTMEM *)curcmd);
curcmd = 0;
OSQPost(GsmTaskMsgQue, MSG_ATSET_TSK, 0, 0);
}
static void InformerProc(INT8U result, const ATCMDACK_STRUCT *ATCmdAck)
{
void (* fp)(INT8U, INT8U *);
if (curcmd == 0) return;
fp = curcmd->fp;
FreeCurCmd();
if (fp != 0) {
if (result == AT_SUCCESS) fp(_SUCCESS, ATCmdAck->ackbuf);
else fp(_FAILURE, ATCmdAck->ackbuf);
}
}
static void DiagnoseProc(void)
{
INT8U temp;
if (!CheckList(&FreeList) || !CheckList(&UsedList)) ErrExit(ERR_ATSET_MEM);
temp = ListItem(&UsedList) + ListItem(&FreeList);
if (curcmd != 0) temp++;
if (temp != sizeof(CmdMem)/sizeof(CmdMem[0])) ErrExit(ERR_ATSET_MEM);
}
void InitAT_Set(void)
{
curcmd = 0;
InitList(&UsedList);
InitMemList(&FreeList, (LISTMEM *)CmdMem, sizeof(CmdMem)/sizeof(CmdMem[0]), sizeof(CmdMem[0]));
InstallDiagProc(DiagnoseProc);
}
BOOLEAN SetCSCA(void (* fp)(INT8U, INT8U *), INT8U *telptr, INT8U tellen)
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if (tellen > 30) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_CSCA(ptr->buffer, telptr, tellen);
ptr->cmdptr = &AT_CSCA_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN OpenCLIP(void (* fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_CLIP(ptr->buffer, CLIP_ENABLE);
ptr->cmdptr = &AT_CLIP_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN CloseCLIP(void (* fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_CLIP(ptr->buffer, CLIP_DISABLE);
ptr->cmdptr = &AT_CLIP_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SelAudioPath(void (* fp)(INT8U, INT8U *), char path)
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUPath(ptr->buffer, path);
ptr->cmdptr = &AT_AUPATH_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
/*
====================================================================================
Description: Set audiogain
note: 0:sidetone 1:mic 2:speaker
====================================================================================
*/
BOOLEAN SetAudioGain(void (* fp)(INT8U, INT8U *), char path,char gain)
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUGain(ptr->buffer, path,gain);
ptr->cmdptr = &AT_AUGAIN_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetAudioVolPara(void (* fp)(INT8U, INT8U *), char step)
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUVol(ptr->buffer, step);
ptr->cmdptr = &AT_AUVOL_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetAudioEcho(void (* fp)(INT8U, INT8U *),INT8U *DataPtr)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUAec(ptr->buffer,DataPtr);
ptr->cmdptr = &AT_AUAEC_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetAudioLevelMax(void (* fp)(INT8U, INT8U *),INT8U *DataPtr)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AULEVELMAX(ptr->buffer,DataPtr);
ptr->cmdptr = &AT_AULEVELMAX_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetAudioABS(void (* fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUABS(ptr->buffer);
ptr->cmdptr = &AT_AUABS_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetAudioVAD(void (* fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_AUVAD(ptr->buffer);
ptr->cmdptr = &AT_AUVAD_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
static BOOLEAN SetDate(void (*fp)(INT8U, INT8U *), DATE_STRUCT *date)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_Date(ptr->buffer, date);
ptr->cmdptr = &AT_DATE_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
static BOOLEAN SetTime(void (*fp)(INT8U, INT8U *),TIME_STRUCT *time)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_Time(ptr->buffer, time);
ptr->cmdptr = &AT_TIME_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetRealTimeClock(void (*fp)(INT8U, INT8U *), void (*fp1)(INT8U, INT8U *),DATE_STRUCT *date, TIME_STRUCT *time)
{
if((!SetDate(fp,date))||(!SetTime(fp1,time))) return FALSE;
else return TRUE;
}
BOOLEAN ReadRealDate(void (*fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_R_Date(ptr->buffer);
ptr->cmdptr = &AT_R_DATE_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN ReadReaTime(void (*fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_R_Time(ptr->buffer);
ptr->cmdptr = &AT_R_TIME_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN ReadRealTimeClock(void (*fp)(INT8U, INT8U *),void (*fp1)(INT8U, INT8U *))
{
if((!ReadRealDate(fp))||(!ReadReaTime(fp1))) return FALSE;
else return TRUE;
}
BOOLEAN OpenCallForward(void (* fp)(INT8U, INT8U *), INT8U *tel, INT8U tellen)
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted() || !NetworkRegisted()) return FALSE;
if (tellen > 30) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_CCFC(ptr->buffer, REAS_NOREPLY, FORWARD_REGISTRATION, tel, tellen, 20);
ptr->cmdptr = &AT_CCFC_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN CloseCallForward(void (* fp)(INT8U, INT8U *))
{
SETCMD_STRUCT *ptr;
if (!SIMCardInserted() || !NetworkRegisted()) return FALSE;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_CFG;
ptr->len = AT_CCFC(ptr->buffer, REAS_NOREPLY, FORWARD_ERASURE, 0, 0, 0);
ptr->cmdptr = &AT_CCFC_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SetPDPContext(void (*fp)(INT8U, INT8U *), char cid, char *APN, char *PDP_addr)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_GPRS;
ptr->len = AT_CGDCONT(ptr->buffer, cid, APN, PDP_addr);
ptr->cmdptr = &AT_CGDCONT_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN SendDTMFCmd(void (* fp)(INT8U, INT8U*), char dtmfchar)
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_PHONE;
ptr->len = AT_VTS(ptr->buffer, dtmfchar);
ptr->cmdptr = &AT_VTS_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
BOOLEAN QueryRingStatus(void (* fp)(INT8U, INT8U*))
{
SETCMD_STRUCT *ptr;
if ((ptr = AllocCmdMem()) == 0) return FALSE;
ptr->ch = DLC_PHONE;
ptr->len = AT_CLCC(ptr->buffer);
ptr->cmdptr = &AT_CLCC_PARA;
StoreCmdMem(ptr, fp);
return TRUE;
}
void AT_SetEntry(void)
{
SETCMD_STRUCT *headcmd;
if (curcmd != 0) return;
if (ListItem(&UsedList) == 0) return;
headcmd = (SETCMD_STRUCT *)GetListHead(&UsedList);
if (!CanSendATCmd(headcmd->ch)) return;
if ((curcmd = (SETCMD_STRUCT *)DelListHead(&UsedList)) != 0)
SendATCmd(curcmd->ch, curcmd->cmdptr, curcmd->buffer, curcmd->len, InformerProc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -