请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2652R SDK 版本:SDK 5.20.00.52
属性"ATTRID_OTA_upgrade_upgrade_Server_ID"是 "ZCL_datatype_BITMAP64"类型、 函数"zclGetDataTypeLength "无法支持此类型。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
SDK 版本:SDK 5.20.00.52
属性"ATTRID_OTA_upgrade_upgrade_Server_ID"是 "ZCL_datatype_BITMAP64"类型、 函数"zclGetDataTypeLength "无法支持此类型。
uint8_t *zclSerializeData( uint8_t dataType, void *attrData, uint8_t *buf )
{
uint8_t *pStr;
uint16_t len;
if ( attrData == NULL )
{
return ( buf );
}
switch ( dataType )
{
case ZCL_DATATYPE_DATA8:
case ZCL_DATATYPE_BOOLEAN:
case ZCL_DATATYPE_BITMAP8:
case ZCL_DATATYPE_INT8:
case ZCL_DATATYPE_UINT8:
case ZCL_DATATYPE_ENUM8:
*buf++ = *((uint8_t *)attrData);
break;
case ZCL_DATATYPE_DATA16:
case ZCL_DATATYPE_BITMAP16:
case ZCL_DATATYPE_UINT16:
case ZCL_DATATYPE_INT16:
case ZCL_DATATYPE_ENUM16:
case ZCL_DATATYPE_SEMI_PREC:
case ZCL_DATATYPE_CLUSTER_ID:
case ZCL_DATATYPE_ATTR_ID:
*buf++ = LO_UINT16( *((uint16_t*)attrData) );
*buf++ = HI_UINT16( *((uint16_t*)attrData) );
break;
case ZCL_DATATYPE_DATA24:
case ZCL_DATATYPE_BITMAP24:
case ZCL_DATATYPE_UINT24:
case ZCL_DATATYPE_INT24:
*buf++ = BREAK_UINT32( *((uint32_t*)attrData), 0 );
*buf++ = BREAK_UINT32( *((uint32_t*)attrData), 1 );
*buf++ = BREAK_UINT32( *((uint32_t*)attrData), 2 );
break;
case ZCL_DATATYPE_DATA32:
case ZCL_DATATYPE_BITMAP32:
case ZCL_DATATYPE_UINT32:
case ZCL_DATATYPE_INT32:
case ZCL_DATATYPE_SINGLE_PREC:
case ZCL_DATATYPE_TOD:
case ZCL_DATATYPE_DATE:
case ZCL_DATATYPE_UTC:
case ZCL_DATATYPE_BAC_OID:
buf = zcl_buffer_uint32( buf, *((uint32_t*)attrData) );
break;
case ZCL_DATATYPE_DATA40:
case ZCL_DATATYPE_BITMAP40:
case ZCL_DATATYPE_UINT40:
case ZCL_DATATYPE_INT40:
pStr = (uint8_t*)attrData;
buf = zcl_memcpy( buf, pStr, 5 );
break;
case ZCL_DATATYPE_DATA48:
case ZCL_DATATYPE_BITMAP48:
case ZCL_DATATYPE_UINT48:
case ZCL_DATATYPE_INT48:
pStr = (uint8_t*)attrData;
buf = zcl_memcpy( buf, pStr, 6 );
break;
case ZCL_DATATYPE_DATA56:
case ZCL_DATATYPE_BITMAP56:
case ZCL_DATATYPE_UINT56:
case ZCL_DATATYPE_INT56:
pStr = (uint8_t*)attrData;
buf = zcl_memcpy( buf, pStr, 7 );
break;
case ZCL_DATATYPE_DATA64:
case ZCL_DATATYPE_BITMAP64:
case ZCL_DATATYPE_DOUBLE_PREC:
case ZCL_DATATYPE_IEEE_ADDR:
case ZCL_DATATYPE_UINT64:
case ZCL_DATATYPE_INT64:
pStr = (uint8_t*)attrData;
buf = zcl_memcpy( buf, pStr, 8 );
break;
case ZCL_DATATYPE_CHAR_STR:
case ZCL_DATATYPE_OCTET_STR:
pStr = (uint8_t*)attrData;
len = *pStr;
buf = zcl_memcpy( buf, pStr, len+1 ); // Including length field
break;
case ZCL_DATATYPE_LONG_CHAR_STR:
case ZCL_DATATYPE_LONG_OCTET_STR:
pStr = (uint8_t*)attrData;
len = BUILD_UINT16( pStr[0], pStr[1] );
buf = zcl_memcpy( buf, pStr, len+2 ); // Including length field
break;
case ZCL_DATATYPE_128_BIT_SEC_KEY:
pStr = (uint8_t*)attrData;
buf = zcl_memcpy( buf, pStr, SEC_KEY_LEN );
break;
case ZCL_DATATYPE_NO_DATA:
case ZCL_DATATYPE_UNKNOWN:
// Fall through
default:
break;
}
return ( buf );
}
uint8_t zclGetDataTypeLength( uint8_t dataType )
{
uint8_t len;
switch ( dataType )
{
case ZCL_DATATYPE_DATA8:
case ZCL_DATATYPE_BOOLEAN:
case ZCL_DATATYPE_BITMAP8:
case ZCL_DATATYPE_INT8:
case ZCL_DATATYPE_UINT8:
case ZCL_DATATYPE_ENUM8:
len = 1;
break;
case ZCL_DATATYPE_DATA16:
case ZCL_DATATYPE_BITMAP16:
case ZCL_DATATYPE_UINT16:
case ZCL_DATATYPE_INT16:
case ZCL_DATATYPE_ENUM16:
case ZCL_DATATYPE_SEMI_PREC:
case ZCL_DATATYPE_CLUSTER_ID:
case ZCL_DATATYPE_ATTR_ID:
len = 2;
break;
case ZCL_DATATYPE_DATA24:
case ZCL_DATATYPE_BITMAP24:
case ZCL_DATATYPE_UINT24:
case ZCL_DATATYPE_INT24:
len = 3;
break;
case ZCL_DATATYPE_DATA32:
case ZCL_DATATYPE_BITMAP32:
case ZCL_DATATYPE_UINT32:
case ZCL_DATATYPE_INT32:
case ZCL_DATATYPE_SINGLE_PREC:
case ZCL_DATATYPE_TOD:
case ZCL_DATATYPE_DATE:
case ZCL_DATATYPE_UTC:
case ZCL_DATATYPE_BAC_OID:
len = 4;
break;
case ZCL_DATATYPE_DATA40:
case ZCL_DATATYPE_BITMAP40:
case ZCL_DATATYPE_UINT40:
case ZCL_DATATYPE_INT40:
len = 5;
break;
case ZCL_DATATYPE_DATA48:
case ZCL_DATATYPE_BITMAP48:
case ZCL_DATATYPE_UINT48:
case ZCL_DATATYPE_INT48:
len = 6;
break;
case ZCL_DATATYPE_DATA56:
case ZCL_DATATYPE_BITMAP56:
case ZCL_DATATYPE_UINT56:
case ZCL_DATATYPE_INT56:
len = 7;
break;
case ZCL_DATATYPE_DATA64:
case ZCL_DATATYPE_BITMAP64:
case ZCL_DATATYPE_UINT64:
case ZCL_DATATYPE_INT64:
case ZCL_DATATYPE_DOUBLE_PREC:
case ZCL_DATATYPE_IEEE_ADDR:
len = 8;
break;
case ZCL_DATATYPE_128_BIT_SEC_KEY:
len = SEC_KEY_LEN;
break;
case ZCL_DATATYPE_NO_DATA:
case ZCL_DATATYPE_UNKNOWN:
// Fall through
default:
len = 0;
break;
}
return ( len );
}