泰凌825x之UUID代码剖析
路径:vemdpr/common/user_proc.c
void uuid_create_by_mac(u8 *mac,u8uuid)
{
//固定GUID
uuid_mesh_t NameSpace_DNS = { /6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
0x6ba7b810,
0x9dad,
0x11d1,
0x80, 0xb4,
{0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}
};
char name_string[16] = {0}; memcpy(name_string,mac,6); ***//通过MD5生成UUID*** uuid_create_md5_from_name((uuid_mesh_t *)uuid, NameSpace_DNS, name_string, 15); //special proc to set the mac address into the uuid part #if PAIR_PROVISION_ENABLE char head_flag[] = PAIR_PROV_UUID_FLAG; memcpy(uuid,head_flag, sizeof(head_flag)); #elif (!defined(WIN32) && MD_REMOTE_PROV) uuid_mesh_t * p_uuid = (uuid_mesh_t * )uuid; memcpy(p_uuid->node,mac,6); // just for showing mac on UI of VC remote scanning. #endif}
#define NORMAL_MODE_DEV_UUID_CUSTOMIZE_EN (0)
void user_prov_multi_device_uuid(void)
{
#ifndef WIN32
#if (AIS_ENABLE)
set_dev_uuid_for_sha256();// 使用SHA256方案
#elif (MESH_USER_DEFINE_MODE == MESH_AES_ENABLE)
uuid_create_by_mac(tbl_mac,prov_para.device_uuid);//MAC->UUID
#elif (MESH_USER_DEFINE_MODE == MESH_GN_ENABLE)
set_dev_uuid_for_simple_flow(prov_para.device_uuid);//简单流程
#elif (MESH_USER_DEFINE_MODE == MESH_MI_ENABLE)
// NO NEED DEV UUID
#elif LLSYNC_PROVISION_AUTH_OOB//低功耗方案
llsync_mesh_dev_uuid_get(LLSYNC_MESH_UNNET_ADV_BIT, prov_para.device_uuid, sizeof(prov_para.device_uuid));
#elif PLATFORM_TELINK_EN
set_dev_uuid_for_platform_telink(prov_para.device_uuid);
#else // (MESH_USER_DEFINE_MODE == MESH_NORMAL_MODE and all other)
if(PROVISION_FLOW_SIMPLE_EN){
set_dev_uuid_for_simple_flow(prov_para.device_uuid);
}else{
#if (CERTIFY_BASE_ENABLE )
cert_set_uuid(prov_para.device_uuid);
return ;
#endif
#if NORMAL_MODE_DEV_UUID_CUSTOMIZE_EN // TBD u8 uuid_read[16]; flash_read_page(FLASH_ADR_DEV_UUID,16,uuid_read); if(get_flash_data_is_valid(uuid_read,sizeof(uuid_read))){//device uuid was burned in flash memcpy(prov_para.device_uuid, uuid_read, sizeof(prov_para.device_uuid)); }else #endif { uuid_create_by_mac(tbl_mac,prov_para.device_uuid); } } #endif#endif
}
在SDK中默认NORMAL_MODE_DEV_UUID_CUNSTOMIZE_EN为0,程序根据MAC和MD5自动生成UUDI,默认流程:user_prov_multi_device_uuid()->uuid_create_by_mac()->uuid_create_md5_from_name()
用户自己定义UUID方法:
1.NORAM_MODE_UUID_CUSTOMIZE_EN = 1
2.读取FLASH地址中的数据,如果此地址中的数据有效则为UUID,否则根据MAC生成UUDI
UUID在FLASH中的保存地址0X77000+0X810
用户可以直接修改此地址中的数据实现自定义UUID
