我感觉我懵逼了
const char* AT_Param = {0xaa, 0xa1, 0x00};
const char DataMode = 0xa0;
long dataLen = 0UL, allocSize = 0UL;
char* DataPos = NULL, * TempPos = NULL, * TempPos1 = NULL;
if ( DevData == NULL )
return MODEL_ERR_ARG;
dataLen = (DataSize == STRING_LEN_AUTO) ? (long)strlen(DevData) : DataSize;
allocSize = strlen(AT_CMD) +
strlen(AT_ADD_PARAM) +
strlen(AT_Param) +
sizeof(DevId) +
MODEL_MAX_USER_DATA +
strlen(AT_END) + 1;
DebugPrint(TAG, "will send:%s\nSize:%ld\nalloc size:%ld", DevData, dataLen, allocSize);
// DataPos = calloc(allocSize, sizeof(unsigned char));
//DataPos = calloc(allocSize, 1);
if ( DataPos == NULL )
{
free(DataPos);
return MODEL_ERR_ALLOC;
}
memset(DataPos, 0, allocSize);
memset(DataPos, 0, allocSize);
DebugPrint(TAG, " %ld check memory: %s", allocSize, DataPos);
strcat(DataPos, AT_CMD);
strcat(DataPos, AT_ADD_PARAM);
strcat(DataPos, AT_Param);
TempPos = DataPos + strlen(DataPos); // 此时指向了存放ID的位置
*TempPos++ = (unsigned char)(DevId >> 8);
*TempPos++ = (unsigned char)DevId;
*TempPos++ = DataMode; // 赋值结束后TempPos指向了存放用户数据的位置
TempPos1 = DevData;
strcat((TempPos + MODEL_MAX_USER_DATA), AT_END); // 预置结束符"\r\n"
MODEL_LOG_EN(!ENABLE); // 退出透传, 因为透传会导致数据广播转发
do
{
if ( dataLen > MODEL_MAX_USER_DATA )
{
memcpy(TempPos, TempPos1, MODEL_MAX_USER_DATA); // copy 21 Bytes
TempPos1 += MODEL_MAX_USER_DATA; // 数据读了要偏移地址
dataLen -= MODEL_MAX_USER_DATA; // 减去已经读取的长度
}
else
{
memset(TempPos, 0, MODEL_MAX_USER_DATA - 1);
memcpy(TempPos, TempPos1, dataLen);
DebugPrint(TAG, "strCheck: %s, %s", TempPos, TempPos1);
strcat(TempPos, AT_END); // 短数据, 在数据后插入结束符"\r\n", 避免读'\0'
dataLen -= dataLen;
DebugPrint(TAG, "strCheck: %s, %s", TempPos, TempPos1);
}
MODEL_SEND(DataPos);
} while ( dataLen > 0 );
MODEL_LOG_EN(!DISABLE); // 重新进入透传
DebugPrint(TAG, "send:|%s|", TempPos1);
free(DataPos);
return MODEL_OK;
[BT_Model]:will send:from 001a
Size:9
alloc size:31
[BT_Model]: 31 check memory: ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ąƇȉʋ̍ΏБғԕؙ֗ڛܝޟ!£ĥƧȩʫ̭ίбҳԵַعڻܽÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
[BT_Model]:strCheck: ......
.................... !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ąƇȉʋ̍ΏБғԕؙ֗ڛܝޟ!£ĥƧȩʫ̭ίбҳԵַعڻܽÀÁÂÃÄÅÆÇÈÉÊËÌÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ, from 001a
[BT_Model]:strCheck: ......
.................... !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ąƇȉʋ̍ΏБғԕؙ֗ڛܝޟ!£ĥƧȩʫ̭ίбҳԵַعڻܽÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ, from 001a
[05:32:50.886]½ÓÊա[BT_Model]:send:|from 001a|
打印出来一堆脏字符,希望来个大神能拯救我糟糕的代码