/* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: broadcast feature api * Author: CompanyName * Create: 2021-11-11 */ #ifndef SVR_BROADCAST_FEATURE_H #define SVR_BROADCAST_FEATURE_H #include "ohos_types.h" #include "message.h" #include "iunknown.h" #include "feature.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif #ifndef BROADCAST_FEATURE_NAME #define BROADCAST_FEATURE_NAME "BROADCAST" #endif /* topic类型 */ typedef uint16 Topic; typedef enum { TOPIC_START_NUM = 10000, TOPIC_DEMO_ACORE_MSG = TOPIC_START_NUM, TOPIC_DEMO_ALL_MSG, TOPIC_EVENT_ALARM_RING, TOPIC_EVENT_UTCTIME_UPDATE, TOPIC_EVENT_NEXTDAY_UPDATE, TOPIC_EVENT_WEARSTATE_UPDATE, TOPIC_EVENT_STEPDATA_UPDATE, TOPIC_EVENT_SHUTDOWN, TOPIC_EVENT_HEARTRATE_UPDATA, TOPIC_EVENT_HFP_INCOMMING, TOPIC_EVENT_HFP_PHONE_ACTIVE, TOPIC_EVENT_HFP_WATCH_ACTIVE, TOPIC_EVENT_HFP_FINISHED, TOPIC_EVENT_HFP_PHONE_TO_WATCH, TOPIC_EVENT_HFP_WATCH_TO_PHONE, #if defined(TJD_BOARD_ENABLE) TJDUI_TOPIC_EVENT_MSG, TJDUI_TOPIC_EVENT_HFP_INCOMMING, TJDUI_TOPIC_EVENT_FEMALE, TJDUI_TOPIC_EVENT_CHARING, TJDUI_TOPIC_EVENT_SHUTDOWN, TJDUI_TOPIC_EVENT_ALARM, TJDUI_TOPIC_EVENT_SPORT, TJDUI_TOPIC_EVENT_LUCKY_CLOVER, TJDUI_TOPIC_EVENT_LOW_POWER, TJDUI_TOPIC_EVENT_CAMERA, TJDUI_TOPIC_EVENT_FIND_DEVICE, TJDUI_TOPIC_EVENT_ACTIVITY_RECOGNITION,//运动识别弹窗 #endif TOPIC_END_NUM = 20000, } TopicNum; /* topic数量 */ #ifndef MAX_BROACCAST_TOPIC_NUMBER #define MAX_BROACCAST_TOPIC_NUMBER 32 #endif /* 每个topic 对应的bitmap长度 */ #ifndef MAX_BROADCAST_BITMAP_NUMBER #define MAX_BROADCAST_BITMAP_NUMBER 64 #endif #if (MAX_BROADCAST_BITMAP_NUMBER > 255) #warning Not support subscriber more than 255! #define MAX_BROADCAST_BITMAP_NUMBER 255 #endif /* int32类型对应的位图长度 */ #define BITMAP_INT32_SIZE 32 /* 计算每个topic,bitmap需要多少int32. (采用四字节int32,相比int8,遍历时有优势) */ #define BITMAP_ARRAY_ENTRY_SIZE ((((MAX_BROADCAST_BITMAP_NUMBER) + 31) & ~31) >> 5) /* 计算所有topic,对应int32数组长 */ #define BITMAP_ARRAY_SIZE (BITMAP_ARRAY_ENTRY_SIZE * MAX_BROACCAST_TOPIC_NUMBER) /** * @brief 订阅者信息 */ typedef struct Subscriber Subscriber; struct Subscriber { const Identity *identity; /* 唯一确定订阅者,有OS系统时,需要设置。 无OS时,可以不设置 */ void *args; /* 回调函数时参数 */ /** * @brief 信息回调函数。无OS、或者无服务的场景,必须设置该参数,需要服务处理该消息时,不能设置 * @param subscriber Indicates this pointer of the subscriber. * @param topic Indicates the pointer to the topic to be processed. * @param origin publicTopic时发布的信息. * @since 1.0 * @version 1.0 */ void (*Notify)(void *args, const Topic topic, Request* request); }; /* 广播服务对外提供的接口 */ typedef struct BroadcastApi { INHERIT_IUNKNOWN; /* 继承IUNKNOWN,对外提供接口 */ /** * @brief 订阅topic事件通知. * * 订阅topic事件通知. \n * * @param topic 当前要订阅的topic信息. * @param subscriber 接收通知的订阅者信息. * @return EC_SUCCESS is success, others is fail. */ int32 (*SubscribeTopic)(IUnknown *broadcastApi, const Topic topic, const Subscriber* subscriber); /** * @brief 注销topic和订阅者的订阅关系. * * 注销topic和订阅者的订阅关系. \n * * @param topic 要注销订阅关系的topic信息. * @param subscriber 要注销订阅关系的订阅者信息. * @return EC_SUCCESS is success, others is fail. */ int32 (*UnsubscribeTopic)(IUnknown *broadcastApi, const Topic topic, const Subscriber* subscriber); /** * @brief 获取topic的订阅关系. * * 获取topic的订阅关系. \n * * @param topic 需要查询的topic信息. * @param bitmaps [出参]当前的topic的订阅关系 * @param size 出参bitmaps的uint32的个数 * @return EC_SUCCESS is success, others is fail. */ int32 (*GetTopicBitmap)(IUnknown *broadcastApi, const Topic topic, uint32 *bitmaps, int16 size); /** * @brief 广播topic消息. * * @param data 经过共享内存,分配的request信息。其中msg_id对应topic * @return EC_SUCCESS is success, others is fail. */ int32 (*PublishTopic)(IUnknown *broadcastApi, Request* request); } BroadcastApi; void BroadcastFeatureLog(IUnknown *broadcastApi); void InitBroadcastFeature(void); #ifdef __cplusplus #if __cplusplus } #endif #endif #endif /* SVR_BROADCAST_FEATURE_H */