OpenHarmony轻量系统服务管理samgr-samgr_lite赏析

41 阅读4分钟

在samgr_lite部分,用于向Samgr注册服务、特性和功能并由Samgr发现它们。文件位于distributedschedule_samgr_lite\interfaces\kits\samgr\samgr_lite.h。

一、宏定义分析

//启动引导服务,该服务由samgr使用,并由系统服务开发人员实现
#define BOOTSTRAP_SERVICE "Bootstrap"
//定义功能最大数目
#define MAX_SYSCAP_NUM 512
//定义功能名的最大长度
#define MAX_SYSCAP_NAME_LEN 64

DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。

1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

二、结构体分析

//枚举要为启动引导服务而处理的消息的id
typedef enum BootMessage {
    //表示核心系统服务已初始化的消息
    BOOT_SYS_COMPLETED,
    //表示系统和应用层服务已初始化的消息
    BOOT_APP_COMPLETED,
    //指示运行期间服务注册的消息
    BOOT_REG_SERVICE,
    //最大消息id数
    BOOTSTRAP_BUTT
} BootMessage;
//表示系统能力管理类。该类用于注册和发现服务、特性和功能。
typedef struct SamgrLite {
    //注册服务
    //@service:需要注册的服务。
    //@如果注册成功返回TRUE,如果注册失败返回FALSE
    BOOL (*RegisterService)(Service *service);
     //注销服务
    //@name:待注销的服务名称,注意在取消注册服务之前,您必须取消其特性和功能
    //注销成功返回未注册的服务对象。内存由调用者释放。如果注销失败,返回NULL。
    Service *(*UnregisterService)(const char *name);
     //注册特性
    //@feature:需要注册的特性。
    //如果注册成功返回TRUE,如果注册失败返回FALSE
    BOOL (*RegisterFeature)(const char *serviceName, Feature *feature);
     //注销特性
    //@serviceName:要取消注册的服务名称。
    //@featureName:待注销特性的名称,注意在注销特性之前,必须注销其功能。
    //如果注销成功,返回未注册的特性对象。内存由调用者释放。如果注销失败,返回NULL
    Feature *(*UnregisterFeature)(const char *serviceName, const char *featureName);
     //为服务的默认特性注册API。
    //@service:将注册其默认特性API的服务名称。
    //@publicApi:需要注册的API。
    //如果注册成功返回TRUE,如果注册失败返回FALSE
    BOOL (*RegisterDefaultFeatureApi)(const char *service, IUnknown *publicApi);
     //从服务的默认特性中注销API。
    //@service:该服务的默认特性API将被取消注册。
    //如果取消注册成功,返回未注册的函数对象。内存由调用者释放。如果注销失败,返回NULL
    IUnknown *(*UnregisterDefaultFeatureApi)(const char *service);
    //为特性注册API
    //@service:要注册其API的服务名称。
    //@feature:要注册API的特性的名称。
    //@publicApi需要注册的API。
    //@如果注册成功返回TRUE,如果注册失败返回FALSE
    BOOL (*RegisterFeatureApi)(const char *service, const char *feature, IUnknown *publicApi);
    //从特性中注销API
    //@service:将注销其API的服务名称。
    //@feature:该特性的API将被取消注册。
    //@如果取消注册成功,返回未注册的函数对象。内存由调用者释放。如果注销失败,返回NULL
    IUnknown *(*UnregisterFeatureApi)(const char *service, const char *feature);
    //获取特定于默认特性的API
    //@service:默认特性所属服务的名称
    //如果操作成功返回IUnknown对象,如果操作失败,返回NULL
    IUnknown *(*GetDefaultFeatureApi)(const char *service);
    //获取特定于特性的API
    //@service:该特性所属服务的名称
    //@feature:要获取的特性的API名称
    //@如果操作成功返回IUnknown对象,如果操作失败,返回NULL
    IUnknown *(*GetFeatureApi)(const char *serviceName, const char *feature);
     //您可以调用这个函数来添加系统功能
    //@sysCap:系统能力名称
    //如果这个函数被成功调用,返回EC_SUCCESS,否则返回错误代码
    int32 (*AddSystemCapability)(const char *sysCap);
     //可以调用此函数检查系统能力是否存在
    //@sysCap系统能力名称
    //如果系统能力存在返回TRUE,否则返回FALSE
    BOOL (*HasSystemCapability)(const char *sysCap);
     //获取所有可用的系统功能
    //如果这个函数被成功调用,返回EC_SUCCESS,否则返回错误代码
    //保存在sysCapNum中的可用系统能力数量和保存在sysCaps中的所有可用系统能力。
    int32 (*GetSystemAvailableCapabilities)(char sysCaps[MAX_SYSCAP_NUM][MAX_SYSCAP_NAME_LEN], int32 *sysCapNum);
} SamgrLite;