SDK version: SDK 5.20.00.52
The attribute "ATTRID_OTA_UPGRADE_UPGRADE_SERVER_ID" is "ZCL_DATATYPE_BITMAP64" type, the function "zclGetDataTypeLength" could not support this type.
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 version: SDK 5.20.00.52
The attribute "ATTRID_OTA_UPGRADE_UPGRADE_SERVER_ID" is "ZCL_DATATYPE_BITMAP64" type, the function "zclGetDataTypeLength" could not support this type.
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 ); }
Hello Aries,
Thank you for bringing up this issue, I've created a ticket for the Software Development Team to address.
Regards,
Ryan