void evt_device_list_general_handler(struct ubus_app *app, struct blob_attr *msg)
{
struct blob_attr *cur = NULL;
int rem = 0;
char *dev_id = NULL, *dev_mac = NULL, *dev_ip = NULL, *dev_model = NULL, *dev_category = NULL, *dev_alias = NULL, *dev_avatar = NULL;
DEV_INFO *dev_info = NULL;
MEDIACENTER_CTX *mediacenter_ctx = (MEDIACENTER_CTX*)get_top_ctx();
int general_camera = 0;
int hub_storage_enable = -1;
if (!mediacenter_ctx) {
DBG_ERR("top ctx NULL\n");
return;
}
/* parse parameters */
if (!msg) {
DBG_ERR("msg NULL\n");
goto out;
}
struct blobmsg (
blobmsg_array devices,
) (my_struct, msg, false);
if (!my_struct.devices) {
DBG_ERR("param error\n");
goto out;
}
blobmsg_for_each_attr(cur, my_struct.devices, rem) {
if (cur) {
struct blobmsg (
blobmsg_int32 general_camera,
blobmsg_string deviceId,
blobmsg_string mac,
blobmsg_string ipaddr,
blobmsg_string model,
blobmsg_string alias,
blobmsg_string category,
blobmsg_string avatar,
blobmsg_int32 storage_enable,
blobmsg_int32 hub_bitmap,
blobmsg_int32 ai_enhance_enable,
blobmsg_int32 face_notification,
blobmsg_int32 familiar_enable,
blobmsg_int32 stranger_enable,
blobmsg_int32 stranger_alarm_count,
blobmsg_array face_id,
) (info, cur, false);
if (!info.general_camera || !info.deviceId || !info.ipaddr || !info.model || !info.mac || !info.alias) {
continue;
}
general_camera = blobmsg_get_u32(info.general_camera);
if (0 == general_camera) {
continue;
}
dev_id = blobmsg_get_string(info.deviceId);
dev_mac = blobmsg_get_string(info.mac);
dev_ip = blobmsg_get_string(info.ipaddr);
dev_model = blobmsg_get_string(info.model);
dev_alias = blobmsg_get_string(info.alias);
if(info.category){
dev_category = blobmsg_get_string(info.category);
}
if(info.avatar){
dev_avatar = blobmsg_get_string(info.avatar);
DBG_ERR("dev_avatar: %s\n", dev_avatar);
}
if (info.storage_enable){
hub_storage_enable = blobmsg_get_u32(info.storage_enable);
DBG_ERR("hub_storage_enable:%d\n", hub_storage_enable);
}
if(hub_storage_enable == 0){
DBG_ERR("skip mac:[%s]\n", dev_mac);
continue;
}
/* add device */
dev_info = dev_info_new(mediacenter_ctx, dev_id, dev_ip, dev_mac, dev_model, dev_category, dev_alias, dev_avatar, DEV_COMMON_CAM, hub_storage_enable, cur);
if (!dev_info) {
DBG_ERR("dev_info_new failed, %s\n", dev_id);
continue;
}
#ifdef AI_ENHANCE
if(info.hub_bitmap){
dev_info->hub_bitmap = blobmsg_get_u32(info.hub_bitmap);
}
if (info.ai_enhance_enable){
dev_info->ai_enhanced = blobmsg_get_u32(info.ai_enhance_enable);
if(dev_info->ai_enhanced == 1)
{
Ai_Enhance_AlgoDev_Init(dev_info->dev_id, dev_info->dev_model, dev_info->dev_mac);
}
}
if(info.face_notification){
dev_info->face_notification = blobmsg_get_u32(info.face_notification);
}
if(info.familiar_enable){
dev_info->familiar_enable = blobmsg_get_u32(info.familiar_enable);
}
if(info.stranger_enable){
dev_info->stranger_enable = blobmsg_get_u32(info.stranger_enable);
}
if(info.stranger_alarm_count){
dev_info->stranger_alarm_count = blobmsg_get_u32(info.stranger_alarm_count);
}
if(info.face_id){
memset(dev_info->FamiliarNotify_List, 0, sizeof(dev_info->FamiliarNotify_List));
struct blob_attr *pos = NULL;
int rem2 = 0, index = 0;
U64 tmp_face_id = 0;
blobmsg_for_each_attr(pos, info.face_id, rem2)
{
if(pos)
{
tmp_face_id = strtoull(blobmsg_get_string(pos), NULL, 10);
index = Ai_Enhance_GetIndex_From_Faceid(tmp_face_id);
if(index >= 0 && index < FD_FACE_SUPPORT_NUM)
{
dev_info->FamiliarNotify_List[index] = tmp_face_id;
}
}
}
}
else
{
if(info.familiar_enable)
{
memset(dev_info->FamiliarNotify_List, 0, sizeof(dev_info->FamiliarNotify_List));
}
else
{
/*设备没配过人脸开关,默认生成所有熟人*/
Ai_Enhance_FamiliarNotifyConfig_Update(dev_info);
}
}
#endif
dev_info->top_ctx = mediacenter_ctx;
dev_info->local_online = 1;
dev_info->check_local_online.cb = check_general_local_online_cb;
uloop_timeout_set(&dev_info->check_local_online, TIMEOUT_CHECK_LOCAL_ONLINE);
dev_info->check_lonn_conn.cb = check_general_long_conn_cb;
uloop_timeout_set(&dev_info->check_lonn_conn, 5000);
}
}
/* refresh all devices' region info */
tapocare_update_region_info(mediacenter_ctx);
uloop_timeout_set(&mediacenter_ctx->pSd->up_sd_usage_tmo, 10);
out:
return;
}