| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #include "StdAfx.h"
- #include "PduDataFormatOne.h"
- CPduDataFormatOne::CPduDataFormatOne(PDU_CMD_TYPE a_nCmdType)
- {
- m_nCmdType = a_nCmdType;
- ZeroMemory(m_pDataMemoArray, PDU_CMD_MAX_DATA_COUNT*sizeof(long)); // 初始化
- }
- CPduDataFormatOne::~CPduDataFormatOne(void)
- {
- for(int i=0; i<PDU_CMD_MAX_DATA_COUNT; i++)
- {
- if(m_pDataMemoArray[i] == NULL) break;
- delete m_pDataMemoArray[i];
- } // end for
- }
- /*****************************************************************
- **【函数名称】 InsertDataMemo
- **【函数功能】 添加一条数据描述
- **【参数】 nIndex 数据描述索引
- lpDataMemo 数据描述字符串
- **【返回值】
- ****************************************************************/
- void CPduDataFormatOne::InsertDataMemo(int nIndex, CHAR* lpDataString)
- {
- // 下标校验
- if(nIndex >= PDU_CMD_MAX_DATA_COUNT || m_pDataMemoArray[nIndex] != NULL)
- {
- ASSERT(FALSE);
- return;
- } // end if
- // 生成数据
- PduDataMemo* pDataMemo = new PduDataMemo;
- ZeroMemory(pDataMemo, sizeof(PduDataMemo));
- CHAR szSteps[] = "|";
- CHAR* lpNextToken = NULL;
-
- // 数据类型
- CHAR* lpToken = strtok_s(lpDataString, szSteps, &lpNextToken);
- if(lpToken == NULL) ASSERT(FALSE);
- sscanf_s(lpToken, "%d", &pDataMemo->nDataType);
- // 数据长度
- lpToken = strtok_s(NULL, szSteps, &lpNextToken);
- if(lpToken == NULL) ASSERT(FALSE);
- sscanf_s(lpToken, "%d", &pDataMemo->nDataLen);
- // 数据描述
- lpToken = strtok_s(NULL, szSteps, &lpNextToken);
- if(lpToken == NULL) ASSERT(FALSE);
- lstrcpy(pDataMemo->szExplain, lpToken);
- // 是否执行结果返回数据
- lpToken = strtok_s(NULL, szSteps, &lpNextToken);
- if(lpToken == NULL) ASSERT(FALSE);
- sscanf_s(lpToken, "%d", &pDataMemo->nIsExecReturn);
- // 初始化数据内容
- lstrcpy(pDataMemo->szValue, "");
- // 赋值
- m_pDataMemoArray[nIndex] = pDataMemo;
- }
- /*****************************************************************
- **【函数名称】 IncodeData
- **【函数功能】 打包数据串
- **【参数】
- **【返回值】 a_pData 打包后的数据内容
- USHORT 打包后的数据长度
- ****************************************************************/
- USHORT CPduDataFormatOne::IncodeData(CHAR* a_pData)
- {
- USHORT nDataLen = 0;
- for(int i=0; i<PDU_CMD_MAX_DATA_COUNT; i++)
- {
- if(m_pDataMemoArray[i] == NULL) break;
- // 打包数据
- if(i == 0)
- {
- lstrcpy(a_pData, m_pDataMemoArray[i]->szValue);
- }
- else
- {
- strcat_s(a_pData, PDU_MAX_DATA_LEN, m_pDataMemoArray[i]->szValue);
- } // end if
- strcat_s(a_pData, PDU_MAX_DATA_LEN, "\t");
- nDataLen = nDataLen + strlen(m_pDataMemoArray[i]->szValue) + 1;
- } // end for
- return nDataLen;
- }
- /*****************************************************************
- **【函数名称】 DecodeData
- **【函数功能】 解包数据
- **【参数】 a_pData 要解包的原始数据串
- **【返回值】 USHORT 解包后的数据字段个数
- ****************************************************************/
- USHORT CPduDataFormatOne::DecodeData(CHAR* a_pData)
- {
- int nCount = 0;
- CHAR* lpTop = a_pData;
- while(lpTop != NULL)
- {
- CHAR* lpNext = strstr(lpTop, "\t");
- if(lpNext == NULL) break;
- if(m_pDataMemoArray[nCount] == NULL) break;
- memcpy(m_pDataMemoArray[nCount]->szValue, lpTop, lpNext - lpTop);
- lpTop = lpNext + 1;
- nCount++;;
- } // end while
-
- return nCount;
- }
- /*****************************************************************
- **【函数名称】 GetData
- **【函数功能】 读取指定索引的数据
- **【参数】 a_nIndex 数据索引
- a_nDataType 数据类型
- **【返回值】 szData 数据内容
- 读取是否成功
- ****************************************************************/
- BOOL CPduDataFormatOne::GetData(int a_nIndex, int a_nDataType, CHAR szData[])
- {
- // 校验
- if(a_nIndex >= PDU_CMD_MAX_DATA_COUNT) return FALSE;
- if(m_pDataMemoArray[a_nIndex] == NULL) return FALSE;
- if(m_pDataMemoArray[a_nIndex]->nDataType != a_nDataType) return FALSE;
- // 返回数据
- lstrcpy(szData, m_pDataMemoArray[a_nIndex]->szValue);
- return TRUE;
- }
- /*****************************************************************
- **【函数名称】 SetData
- **【函数功能】 设置指定索引的数据
- **【参数】 a_nIndex 数据索引
- a_nDataType 数据类型
- szData 数据内容
- **【返回值】 写入是否成功
- ****************************************************************/
- BOOL CPduDataFormatOne::SetData(int a_nIndex, int a_nDataType, LPCTSTR szData)
- {
- // 校验
- if(a_nIndex >= PDU_CMD_MAX_DATA_COUNT) return FALSE;
- if(m_pDataMemoArray[a_nIndex] == NULL) return FALSE;
- if(m_pDataMemoArray[a_nIndex]->nDataType != a_nDataType) return FALSE;
- // 返回数据
- lstrcpy(m_pDataMemoArray[a_nIndex]->szValue, szData);
- return TRUE;
- }
|