?? amt_cmd.c
字號:
/****************************************************************
* COPYRIGHT DaTang Mobile Communications Equipment CO.,LTD *
****************************************************************/
/****************************************************************
* FileName: amt_cmd.c
* version: 1.00
* Purpose:
* Authors: songbingfeng 2005-3-8 16:11:13
* Notes:
****************************************************************/
#include <stdio.h>
#include "amthead.h"
/*******************************************************
** 函數(shù)名 : amt_clear_buf
** 功能描述 : 清空緩沖區(qū)
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : UINT32 nLength
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 :
*******************************************************/
void amt_clear_buf(void* cmdbuf_ptr,USINT32 nLength)
{
memset(cmdbuf_ptr,0,nLength);
}
/*******************************************************
** 函數(shù)名 : amt_get_atom_point
** 功能描述 : 獲得屬性的起始地址
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸出參數(shù) : 無
** 返回值 : CHAR*
** 備注 : 返回的指針僅僅包含長度和數(shù)據(jù)
*******************************************************/
CHAR* amt_get_atom_point(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en)
{
UINT16 nLength = 0;
UINT16 nCount = 0;
UINT8 uHead = 0;
UINT16 uSize = 0;
CHAR* pCommand = NULL;
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
pCommand = cmd_ptr + 4;
memcpy(&nLength,pCommand,2);
pCommand += 2;
while (nCount < nLength)
{
memcpy(&uHead,pCommand,1);
if (uHead != AMT_ATOM_HEAD)
return NULL;
pCommand += 1;
memcpy(&uHead,pCommand,1);
pCommand += 1 + 1;
if (atom_en == uHead)
{
return pCommand;
}
else
{
memcpy(&uSize,pCommand,2);
pCommand += uSize + 2;
nCount += uSize + 1 + 1 + 1 + 2;
}
}
return NULL;
}
/*******************************************************
** 函數(shù)名 : amt_add_msglength
** 功能描述 : 寫入總長度和命令長度
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 :
*******************************************************/
void amt_add_msglength(void* cmdbuf_ptr,USINT32 nLength)
{
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
UINT16 uLength = (UINT16)amt_get_buf_length(cmdbuf_ptr);
uLength += nLength;
memcpy(cmd_ptr,&uLength,2);
cmd_ptr += 4;
uLength -= 6;
memcpy(cmd_ptr,&uLength,2);
}
/*******************************************************
** 函數(shù)名 : amt_get_end_point
** 功能描述 : 獲得已經(jīng)使用的緩沖區(qū)末尾指針
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸出參數(shù) : 無
** 返回值 : CHAR*
** 備注 :
*******************************************************/
CHAR* amt_get_end_point(void* cmdbuf_ptr)
{
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
UINT16 uLength = (UINT16)amt_get_buf_length(cmdbuf_ptr);
cmd_ptr += uLength;
return cmd_ptr;
}
/*******************************************************
** 函數(shù)名 : amt_set_commandtype
** 功能描述 : 寫入命令類型
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_COMMAND Command_en
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 : 格式為 整個長度 | 命令標(biāo)識 | 命令枚舉 | 命令長度
2 1 1 2
*******************************************************/
void amt_set_commandtype(void* cmdbuf_ptr, MAN_AMT_COMMAND Command_en)
{
UINT8 uCmdHead = AMT_COMMAND_HEAD;
UINT8 uCmd = Command_en;
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
amt_clear_buf(cmdbuf_ptr,AMT_COMMAND_BUF_LENGTH);
cmd_ptr += 2;
memcpy(cmd_ptr,&uCmdHead,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uCmd,1);
cmd_ptr += 1;
amt_add_msglength(cmdbuf_ptr,6);
}
/*******************************************************
** 函數(shù)名 : amt_set_int
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : USINT32 nData
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 : 格式為:
屬性標(biāo)識 1
屬性號 1
屬性類型 1
屬性長度 2
屬性內(nèi)容 4
*******************************************************/
void amt_set_int(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,USINT32 nData)
{
UINT8 uAtomHead = AMT_ATOM_HEAD;
UINT8 uType = AMT_INTTYPE;
UINT8 uAtom = atom_en;
UINT16 uSize = 4;
CHAR* cmd_ptr = amt_get_end_point(cmdbuf_ptr);
memcpy(cmd_ptr,&uAtomHead,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uAtom,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uType,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uSize,2);
cmd_ptr += 2;
memcpy(cmd_ptr,&nData,4);
uSize = 1 + 1 + 1 + 2 + 4;
amt_add_msglength(cmdbuf_ptr,uSize);
}
/*******************************************************
** 函數(shù)名 : amt_set_bool
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : BOOL bData
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 : 格式為:
屬性標(biāo)識 1
屬性號 1
屬性類型 1
屬性長度 2
屬性內(nèi)容 1
*******************************************************/
void amt_set_bool(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,BOOL bData)
{
UINT8 uAtomHead = AMT_ATOM_HEAD;
UINT8 uType = AMT_BOOLTYPE;
UINT8 uAtom = atom_en;
UINT16 uSize = 1;
CHAR* cmd_ptr = amt_get_end_point(cmdbuf_ptr);
memcpy(cmd_ptr,&uAtomHead,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uAtom,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uType,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uSize,2);
cmd_ptr += 2;
memcpy(cmd_ptr,&bData,1);
uSize = 1 + 1 + 1 + 2 + 1;
amt_add_msglength(cmdbuf_ptr,uSize);
}
/*******************************************************
** 函數(shù)名 : amt_set_bytes
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : void* pBuf
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 :
*******************************************************/
void amt_set_bytes(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,void* pBuf,USINT32 nLength)
{
UINT8 uAtomHead = AMT_ATOM_HEAD;
UINT8 uType = AMT_BYTETYPE;
UINT8 uAtom = atom_en;
UINT16 uSize = nLength;
CHAR* cmd_ptr = amt_get_end_point(cmdbuf_ptr);
memcpy(cmd_ptr,&uAtomHead,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uAtom,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uType,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uSize,2);
cmd_ptr += 2;
memcpy(cmd_ptr,pBuf,nLength);
uSize = 1 + 1 + 1 + 2 + nLength;
amt_add_msglength(cmdbuf_ptr,uSize);
}
/*******************************************************
** 函數(shù)名 : amt_set_string
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : const CHAR* pBuf
** 輸出參數(shù) : 無
** 返回值 : void
** 備注 :
*******************************************************/
void amt_set_string(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,const CHAR* pBuf)
{
UINT8 uAtomHead = AMT_ATOM_HEAD;
UINT8 uType = AMT_STRINGTYPE;
UINT8 uAtom = atom_en;
UINT16 uSize = 0;
CHAR* cmd_ptr = amt_get_end_point(cmdbuf_ptr);
uSize = strlen(pBuf);
memcpy(cmd_ptr,&uAtomHead,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uAtom,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uType,1);
cmd_ptr += 1;
memcpy(cmd_ptr,&uSize,2);
cmd_ptr += 2;
memcpy(cmd_ptr,pBuf,uSize);
uSize = 1 + 1 + 1 + 2 + uSize;
amt_add_msglength(cmdbuf_ptr,uSize);
}
/*******************************************************
** 函數(shù)名 : amt_get_commandtype
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸出參數(shù) : 無
** 返回值 : MAN_AMT_COMMAND
** 備注 :
*******************************************************/
MAN_AMT_COMMAND amt_get_commandtype(void* cmdbuf_ptr)
{
UINT8 uType = 0;
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
cmd_ptr += 2 + 1;
memcpy(&uType,cmd_ptr,1);
return uType;
}
/*******************************************************
** 函數(shù)名 : amt_get_int
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸出參數(shù) : 無
** 返回值 : USINT32
** 備注 :
*******************************************************/
USINT32 amt_get_int(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en)
{
USINT32 nData = 0;
CHAR* atom_addr_ptr = amt_get_atom_point(cmdbuf_ptr,atom_en);
if (atom_addr_ptr)
{
UINT16 nAtomLength = 0;
memcpy(&nAtomLength,atom_addr_ptr,2);
atom_addr_ptr += 2;
memcpy(&nData,atom_addr_ptr,nAtomLength);
}
return nData;
}
/*******************************************************
** 函數(shù)名 : amt_get_bool
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸出參數(shù) : 無
** 返回值 : BOOL
** 備注 :
*******************************************************/
BOOL amt_get_bool(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en)
{
BOOL bData = TRUE;
CHAR* atom_addr_ptr = amt_get_atom_point(cmdbuf_ptr,atom_en);
if (atom_addr_ptr)
{
UINT16 nAtomLength = 0;
memcpy(&nAtomLength,atom_addr_ptr,2);
atom_addr_ptr += 2;
memcpy(&bData,atom_addr_ptr,nAtomLength);
}
return bData;
}
/*******************************************************
** 函數(shù)名 : amt_get_bytes
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : void* pBuf
** 返回值 : USINT32
** 備注 :
*******************************************************/
USINT32 amt_get_bytes(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,void* pBuf,USINT32 nLength)
{
CHAR* atom_addr_ptr = amt_get_atom_point(cmdbuf_ptr,atom_en);
if (atom_addr_ptr)
{
UINT16 nAtomLength = 0;
memcpy(&nAtomLength,atom_addr_ptr,2);
if (nLength == 0)
return nAtomLength;
memset(pBuf,0,nLength);
if (nLength < nAtomLength)
nAtomLength = nLength;
atom_addr_ptr += 2;
memcpy(pBuf,atom_addr_ptr,nAtomLength);
return nAtomLength;
}
return 0;
}
/*******************************************************
** 函數(shù)名 : amt_get_string
** 功能描述 :
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : MAN_AMT_ATOM atom_en
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : void* recivebuf_prt
** 返回值 : USINT32
** 備注 :
*******************************************************/
USINT32 amt_get_string(void* cmdbuf_ptr,MAN_AMT_ATOM atom_en,void* recivebuf_prt,USINT32 nLength)
{
CHAR* atom_addr_ptr = amt_get_atom_point(cmdbuf_ptr,atom_en);
if (atom_addr_ptr)
{
UINT16 nAtomLength = 0;
memcpy(&nAtomLength,atom_addr_ptr,2);
if (nLength == 0)
return nAtomLength + 1;
memset(recivebuf_prt,0,nLength);
if (nLength < nAtomLength)
nAtomLength = nLength - 1;
atom_addr_ptr += 2;
memcpy(recivebuf_prt,atom_addr_ptr,nAtomLength);
return nAtomLength;
}
return 0;
}
/*******************************************************
** 函數(shù)名 : amt_get_commandbuf
** 功能描述 : 從緩沖區(qū)中取出命令字節(jié)流
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : void* pBuf
** 返回值 : USINT32
** 備注 :
*******************************************************/
USINT32 amt_get_commandbuf(void* cmdbuf_ptr,void* pBuf,USINT32 nLength)
{
//先獲得總長度
UINT16 uBufLen = 0;
memcpy(&uBufLen,cmdbuf_ptr,2);
if (nLength == 0)
return uBufLen;
memset(pBuf,0,nLength);
if (uBufLen > nLength)
{
printf("buffer is too small!!! [amt_get_commandbuf]\n");
return 0;
}
memcpy(pBuf,cmdbuf_ptr,uBufLen);
return uBufLen;
}
/*******************************************************
** 函數(shù)名 : amt_put_commandbuf
** 功能描述 : 將命令字節(jié)流放到緩沖區(qū)中,準(zhǔn)備進(jìn)行解析
** 輸入?yún)?shù) : void* cmdbuf_ptr
** 輸入?yún)?shù) : USINT32 nLength
** 輸出參數(shù) : void* pBuf
** 返回值 : void
** 備注 : 實行內(nèi)存拷貝
*******************************************************/
void amt_put_commandbuf(void* cmdbuf_ptr,void* pBuf,USINT32 nLength)
{
amt_clear_buf(cmdbuf_ptr,AMT_COMMAND_BUF_LENGTH);
if (nLength < AMT_COMMAND_BUF_LENGTH)
{
memcpy(cmdbuf_ptr,pBuf,nLength);
}
else
{
printf("command size is larger than buffer!!! [amt_put_commandbuf]\n");
}
}
/*******************************************************
** 函數(shù)名 : amt_get_buf_length
** 功能描述 : 獲得整個緩沖區(qū)實際使用的長度
** 輸入?yún)?shù) : void* cmdbuf_prt
** 輸出參數(shù) : 無
** 返回值 : USINT32
** 備注 :
*******************************************************/
USINT32 amt_get_buf_length(void* cmdbuf_ptr)
{
CHAR* cmd_ptr = (CHAR*)cmdbuf_ptr;
UINT16 uLength = 0;
memcpy(&uLength,cmd_ptr,2);
return uLength;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -