做网站北京公司,域名的作用,网站建设技术有哪些,app制作开发教程OpenHarmony 轻量级公共基础库 (commonlibrary_utils_lite) 模块 目录
模块概述模块结构模块间交互状态机转换图接口设计 1. 模块概述
1.1 功能与目标
主要功能
轻量级公共基础库#xff08;commonlibrary_utils_lite#xff09;是OpenHarmony系统中的通用基础组件库commonlibrary_utils_lite是OpenHarmony系统中的通用基础组件库提供以下核心功能功能模块描述支持平台文件操作提供统一的文件操作接口屏蔽底层不同芯片组件的差异LiteOS-M内核定时器提供统一的定时器操作接口支持单次和周期性定时LiteOS-M/LiteOS-A内核KV存储提供键值对存储功能支持缓存机制LiteOS-A内核JS API提供设备信息查询、数据存储的JavaScript接口LiteOS-A内核双向链表提供高效的双向链表数据结构操作通用内存池管理提供分类型的内存池管理接口通用设计目标跨平台兼容性: 通过HAL硬件抽象层屏蔽底层硬件差异轻量化设计: 适配资源受限的嵌入式设备高可靠性: 提供完善的错误处理机制易用性: 提供简洁统一的API接口使用场景物联网设备的文件存储与读取定时任务调度与管理应用配置数据的持久化存储设备信息的查询与获取1.2 系统位置系统架构定位本模块属于OpenHarmony系统的公共基础子系统commonlibrary是系统的核心基础模块为上层应用和其他子系统提供基础服务支持。┌─────────────────────────────────────────────────────────────────────┐ │ 应用层 (Application Layer) │ │ ┌─────────────────────────────┐ │ │ │ JS 应用程序 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 框架层 (Framework Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ ACE Lite │ │ Ability │ │ UI Lite │ │ │ │ Engine │ │ Framework │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ ├─────────┼────────────────┼──────────────────────────────────────────┤ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ commonlibrary_utils_lite │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ │ │ 文件操作 │ │ 定时器 │ │ KV存储 │ │ JS API │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 双向链表 │ │ 内存池 │ │ │ │ │ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ 公共基础子系统 │ ├─────────────────────────────────────────────────────────────────────┤ │ 内核层 (Kernel Layer) │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ LiteOS-M / LiteOS-A │ │ │ └─────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 硬件抽象层 (HAL) │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ HAL File / HAL Timer / HAL Memory │ │ │ └─────────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────────┤ │ 硬件层 (Hardware Layer) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Hi3861 │ │ Hi3516 │ │ Hi3518 │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────────────────────┘与其他模块的关系依赖模块关系类型说明ability_lite被依赖提供应用数据路径获取ace_engine_lite被依赖提供JS引擎支持graphic_utils_lite被依赖提供图形相关工具bounds_checking_function依赖安全字符串处理函数musl依赖C标准库支持init被依赖系统初始化服务1.3 设计思路与模式设计思路分层架构设计接口层对外暴露统一的API接口实现层具体功能实现适配层HAL硬件平台适配模块化设计各功能模块相互独立可按需裁剪通过feature开关控制功能编译跨语言支持C层核心功能实现C层JS API封装JS层应用接口设计模式设计模式应用场景说明适配器模式HAL层将不同硬件平台的文件/定时器操作适配为统一接口单例模式内存池管理确保内存池的唯一性和全局访问工厂模式定时器创建通过KalTimerCreate创建不同类型的定时器回调模式JS异步操作通过success/fail/complete回调处理异步结果门面模式JS APINativeapiFs/NativeapiKv等类封装底层复杂操作2. 模块结构2.1 源文件与头文件目录结构commonlibrary/utils_lite/ ├── BUILD.gn # 顶层构建文件 ├── bundle.json # 组件描述文件 ├── include/ # 公共头文件目录 │ ├── kv_store.h # KV存储接口 │ ├── ohos_errno.h # 错误码定义 │ ├── ohos_init.h # 系统初始化宏 │ ├── ohos_types.h # 基础类型定义 │ ├── utils_config.h # 配置文件 │ ├── utils_file.h # 文件操作接口 │ └── utils_list.h # 双向链表接口 ├── file/ # 文件操作模块 │ └── src/file_impl_hal/ │ └── file.c # 文件操作实现 ├── hals/ # 硬件抽象层 │ └── file/ │ ├── hal_file.h # HAL文件接口 │ └── hal_file.c # HAL文件实现 ├── kal/ # 内核抽象层 │ └── timer/ │ ├── include/kal.h # KAL定时器接口 │ └── src/kal.c # KAL定时器实现 ├── timer_task/ # 定时任务模块 │ ├── include/nativeapi_timer_task.h │ └── src/nativeapi_timer_task.c ├── memory/ # 内存管理模块 │ └── include/ohos_mem_pool.h # 内存池接口 └── js/builtin/ # JS API模块 ├── common/ # 公共组件 │ ├── include/ │ │ ├── nativeapi_common.h │ │ └── nativeapi_config.h │ └── src/nativeapi_common.cpp ├── filekit/ # 文件Kit │ ├── include/ │ │ ├── nativeapi_fs.h │ │ └── nativeapi_fs_impl.h │ └── src/ │ ├── nativeapi_fs.cpp │ └── nativeapi_fs_impl.c ├── kvstorekit/ # KV存储Kit │ ├── include/ │ │ ├── nativeapi_kv.h │ │ └── nativeapi_kv_impl.h │ └── src/ │ ├── nativeapi_kv.cpp │ └── nativeapi_kv_impl.c └── deviceinfokit/ # 设备信息Kit ├── include/nativeapi_deviceinfo.h └── src/ ├── nativeapi_deviceinfo.cpp └── nativeapi_ohos_deviceinfo.cpp文件功能说明文件功能描述include/ohos_types.h定义基础数据类型uint8, uint16, uint32等include/ohos_errno.h定义系统错误码枚举include/ohos_init.h定义系统初始化宏CORE_INIT, SYS_SERVICE_INIT等include/utils_file.h声明文件操作API打开、关闭、读写、删除等include/utils_list.h声明双向链表操作API和宏include/kv_store.h声明KV存储API获取、设置、删除include/utils_config.h定义KV存储配置参数hals/file/hal_file.h声明HAL层文件操作接口hals/file/hal_file.c实现HAL层文件操作调用POSIX接口file/src/file_impl_hal/file.c文件操作的HAL适配实现kal/timer/include/kal.h声明KAL定时器接口kal/timer/src/kal.c实现KAL定时器基于POSIX timertimer_task/include/nativeapi_timer_task.h声明定时任务接口timer_task/src/nativeapi_timer_task.c实现定时任务管理memory/include/ohos_mem_pool.h声明内存池管理接口js/builtin/common/include/nativeapi_common.hJS API公共回调处理js/builtin/common/include/nativeapi_config.hJS API配置常量定义js/builtin/filekit/include/nativeapi_fs.hJS文件操作API声明js/builtin/kvstorekit/include/nativeapi_kv.hJS KV存储API声明js/builtin/deviceinfokit/include/nativeapi_deviceinfo.hJS设备信息API声明2.2 类、结构体、函数与方法2.2.1 核心结构体UTILS_DL_LIST双向链表节点// 文件: include/utils_list.htypedefstructUTILS_DL_LIST{structUTILS_DL_LIST*pstPrev;// 指向前一个节点的指针structUTILS_DL_LIST*pstNext;// 指向后一个节点的指针}UTILS_DL_LIST;KalTimer定时器结构// 文件: kal/timer/src/kal.ctypedefstruct{timer_ttimerPtr;// POSIX定时器句柄KalTimerType type;// 定时器类型单次/周期unsignedintmillisec;// 定时时间毫秒KalTimerProc func;// 回调函数unionsigval arg;// 回调参数intisRunning;// 运行状态标志}KalTimer;KalTimerType定时器类型枚举// 文件: kal/timer/include/kal.htypedefenum{KAL_TIMER_ONCE0,// 单次定时器KAL_TIMER_PERIODIC1// 周期定时器}KalTimerType;KalErrCode错误码枚举// 文件: kal/timer/include/kal.htypedefenum{KAL_OK0,// 成功KAL_ERR_PARA1,// 参数错误KAL_ERR_INNER2,// 内部错误KAL_ERR_TIMER_STATE0x100,// 定时器状态错误}KalErrCode;OHOSLiteErrorCode系统错误码// 文件: include/ohos_errno.henumOHOSLiteErrorCode{EC_SUCCESS0,// 成功EC_FAILURE-1,// 执行失败EC_BADPTR-2,// 错误指针EC_NOMEMORY-3,// 内存不足EC_ADDRESS-4,// 地址错误EC_IOERROR-5,// I/O错误EC_BUSBUSY-6,// 总线忙EC_NORESPONCE-7,// 无响应EC_NODEVICE-8,// 无设备EC_INVALID-9,// 无效参数EC_BUSY-10,// 设备忙EC_NOSERVICE-11,// 无服务EC_PERMISSION-12,// 权限拒绝EC_NOFILE-13,// 文件不存在EC_NOSPACE-14,// 空间不足EC_NODIR-15,// 非目录EC_ROFILE-16,// 只读文件系统EC_NAMETOOLONG-17,// 文件名过长EC_OPBLOCK-18,// 操作阻塞EC_TIMEOUT-19,// 超时EC_COMMU-20,// 通信错误EC_PROTOCOL-21,// 协议错误EC_CANCELED-22,// 操作取消EC_NOKEY-23,// 无密钥EC_NOHANDLER-24,// 无处理器EC_FLOWCTRL-25,// 流控制EC_NOINIT-26,// 未初始化EC_NORESOURCE-27,// 资源错误// ...};MemType内存池类型枚举// 文件: memory/include/ohos_mem_pool.htypedefenum{MEM_TYPE_BEGIN100,MEM_TYPE_UIKITMEM_TYPE_BEGIN,// UIKIT内存池MEM_TYPE_UIKIT_LSRAM,// UIKIT低速内存池MEM_TYPE_APPFMK,// 应用框架内存池MEM_TYPE_APPFMK_LSRAM,// 应用框架低速内存池MEM_TYPE_ACE,// ACE内存池MEM_TYPE_ACE_LSRAM,// ACE低速内存池MEM_TYPE_JERRY,// JerryScript内存池MEM_TYPE_JERRY_LSRAM,// JerryScript低速内存池MEM_TYPE_JERRY_HEAP,// JerryScript堆内存池MEM_TYPE_HICHAIN,// 安全内存池MEM_TYPE_SOFTBUS_LSRAM,// 软总线低速内存池MEM_TYPE_I18N_LSRAM,// 国际化低速内存池MEM_TYPE_CJSON_LSRAM,// cJSON低速内存池MEM_TYPE_APP_VERIFY_LSRAM,// 应用验证低速内存池MEM_TYPE_MAX// 最大值}MemType;FuncParamsJS回调参数结构// 文件: js/builtin/common/include/nativeapi_common.hnamespaceOHOS{namespaceACELite{structFuncParams{JSIValue argsJSI::CreateUndefined();// 参数JSIValue thisValJSI::CreateUndefined();// this指针boolflagfalse;// 标志位};}}2.2.2 核心类NativeapiCommon公共回调处理类// 文件: js/builtin/common/include/nativeapi_common.hnamespaceOHOS{namespaceACELite{classNativeapiCommon{public:// 失败回调处理staticvoidFailCallBack(constJSIValue thisVal,constJSIValue args,intret);// 成功回调处理staticvoidSuccessCallBack(constJSIValue thisVal,constJSIValue args,JSIValue jsiValue);// 验证JSI值有效性staticboolIsValidJSIValue(constJSIValue*args,uint8_targsNum);private:NativeapiCommon()default;~NativeapiCommon()default;};}}NativeapiFs文件操作JS API类// 文件: js/builtin/filekit/include/nativeapi_fs.hnamespaceOHOS{namespaceACELite{classNativeapiFs{public:NativeapiFs()default;~NativeapiFs()default;staticJSIValueMoveFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueCopyFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueDeleteFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueGetFileList(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueGetFileInfo(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueWriteTextFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueReadTextFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueAccess(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueCreateDir(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueRemoveDir(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);#if(JS_FWK_TYPEDARRAYNATIVE_FEATURE_ON)staticJSIValueReadArrayFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueWriteArrayFile(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);#endif};}}NativeapiKvKV存储JS API类// 文件: js/builtin/kvstorekit/include/nativeapi_kv.hnamespaceOHOS{namespaceACELite{classNativeapiKv{public:NativeapiKv()default;~NativeapiKv()default;staticJSIValueGet(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueSet(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueDelete(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticJSIValueClear(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);};}}NativeapiDeviceInfo设备信息JS API类// 文件: js/builtin/deviceinfokit/include/nativeapi_deviceinfo.hnamespaceOHOS{namespaceACELite{classNativeapiDeviceInfo{public:NativeapiDeviceInfo()default;~NativeapiDeviceInfo()default;staticJSIValueGetDeviceInfo(constJSIValue thisVal,constJSIValue*args,uint8_targsNum);staticboolGetProductInfo(JSIValue result);private:staticboolGetLanguage(JSIValue result);staticboolGetRegion(JSIValue result);staticboolGetAPILevel(JSIValue result);staticboolGetDeviceType(JSIValue result);};}}2.2.3 核心函数文件操作函数函数描述参数返回值UtilsFileOpen打开或创建文件path: 文件路径oflag: 打开标志mode: 模式文件描述符失败返回-1UtilsFileClose关闭文件fd: 文件描述符0成功-1失败UtilsFileRead读取文件fd: 文件描述符buf: 缓冲区len: 长度读取字节数-1失败UtilsFileWrite写入文件fd: 文件描述符buf: 数据len: 长度写入字节数-1失败UtilsFileDelete删除文件path: 文件路径0成功-1失败UtilsFileStat获取文件大小path: 文件路径fileSize: 输出大小0成功-1失败UtilsFileSeek调整读写位置fd: 文件描述符offset: 偏移whence: 起始位置当前位置-1失败UtilsFileCopy复制文件src: 源文件dest: 目标文件0成功-1失败UtilsFileMove移动文件src: 源文件dest: 目标文件0成功-1失败定时器函数函数描述参数返回值KalTimerCreate创建定时器func: 回调函数type: 类型arg: 参数millisec: 时间定时器IDNULL失败KalTimerStart启动定时器timerId: 定时器IDKAL_OK成功KalTimerChange修改定时器timerId: 定时器IDmillisec: 新时间KAL_OK成功KalTimerStop停止定时器timerId: 定时器IDKAL_OK成功KalTimerDelete删除定时器timerId: 定时器IDKAL_OK成功KalTimerIsRunning查询运行状态timerId: 定时器ID1运行中0停止KV存储函数函数描述参数返回值UtilsGetValue获取键值key: 键名value: 输出值len: 缓冲区大小值长度-9参数错误-1其他错误UtilsSetValue设置键值key: 键名value: 值0成功-9参数错误-1其他错误UtilsDeleteValue删除键值key: 键名0成功-9参数错误-1其他错误ClearKVCache清空缓存无0成功-1失败内存池函数函数描述参数返回值OhosMalloc申请内存type: 内存池类型size: 大小内存地址NULL失败OhosFree释放内存ptr: 内存地址无双向链表函数函数/宏描述UtilsListInit初始化链表UtilsListAdd插入节点UtilsListTailInsert尾部插入UtilsListHeadInsert头部插入UtilsListDelete删除节点UtilsListEmpty判断是否为空UTILS_DL_LIST_ENTRY获取包含链表的结构体指针UTILS_DL_LIST_FOR_EACH遍历链表UTILS_DL_LIST_FOR_EACH_SAFE安全遍历链表2.3 类图usesusesusescallscallscallscallsusesimplementsimplementsNativeapiFsMoveFile()CopyFile()DeleteFile()GetFileList()GetFileInfo()WriteTextFile()ReadTextFile()Access()CreateDir()RemoveDir()NativeapiKvGet()Set()Delete()Clear()NativeapiDeviceInfoGetDeviceInfo()GetProductInfo()-GetLanguage()-GetRegion()-GetAPILevel()-GetDeviceType()NativeapiCommonFailCallBack(thisVal, args, ret)SuccessCallBack(thisVal, args, jsiValue)IsValidJSIValue(args, argsNum)nativeapi_fs_implCopyFileImpl()DeleteFileImpl()AccessImpl()StatImpl()GetFileNum()GetFileListImpl()WriteTextFile()ReadFileImpl()CreateDirImpl()RemoveDirImpl()nativeapi_kv_implInitKv()GetValue()SetValue()DeleteValue()ClearKVStore()KalTimertimerPtrtypemillisecfuncargisRunningHAL_FileHalFileOpen()HalFileClose()HalFileRead()HalFileWrite()HalFileDelete()HalFileStat()HalFileSeek()KAL_TimerKalTimerCreate()KalTimerStart()KalTimerChange()KalTimerStop()KalTimerDelete()KalTimerIsRunning()«interface»POSIX_Layeropen()close()read()write()unlink()stat()lseek()timer_create()timer_settime()timer_delete()2.4 模块内部依赖框图commonlibrary_utils_liteJS Builtin ModuleTimer Task ModuleKAL ModuleFile ModuleHAL ModuleInclude ModuleMemory Moduleohos_mem_pool.hohos_types.hohos_errno.hohos_init.hutils_file.hutils_list.hkv_store.hutils_config.hhal_file.cfile.ckal.cnativeapi_timer_taskdeviceinfokitfilekitkvstorekitcommon依赖关系说明:箭头方向表示依赖方向子图边界表示模块边界3. 模块间交互3.1 交互描述3.1.1 与外部模块的交互外部模块交互方式说明ACE Lite EngineC函数调用通过JSI接口注册JS APIAbility FrameworkC函数调用获取应用数据路径Graphic UtilsC函数调用获取屏幕信息Parameter ServiceC函数调用获取设备参数信息Global I18NC函数调用获取语言和地区信息3.1.2 异步处理机制JS API层采用异步回调模式处理耗时操作// 异步任务分发流程JSIValueExecuteAsyncWork(thisVal,args,argsNum,ExecuteFunc,flag){1.验证参数有效性2.创建FuncParams参数结构3.保存thisVal和args引用4.调用JsAsyncWork::DispatchAsyncWork分发任务5.返回undefined}// 异步执行函数在工作线程执行voidExecuteXxx(void*data){1.解析FuncParams参数2.执行实际操作3.根据结果调用SuccessCallBack或FailCallBack4.释放资源}3.1.3 回调机制JS API支持三种回调// JS调用示例file.readText({uri:internal://app/test.txt,success:function(data){// 成功回调console.log(data.text);},fail:function(data,code){// 失败回调console.log(Error: data, Code: code);},complete:function(){// 完成回调无论成功失败都会调用}});3.2 外部依赖框图┌─────────────────────────────────────────────────────────────────────────────┐ │ External Dependencies │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ Third Party Libraries │ │ │ │ ┌──────────────────────────┐ ┌──────────────────────────┐ │ │ │ │ │ bounds_checking_function │ │ musl │ │ │ │ │ │ (securec.h) │ │ (C Standard Library) │ │ │ │ │ │ - memset_s │ │ - malloc/free │ │ │ │ │ │ - strcpy_s │ │ - open/close/read │ │ │ │ │ │ - sprintf_s │ │ - timer_create │ │ │ │ │ └──────────────────────────┘ └──────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ commonlibrary_utils_lite │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ OpenHarmony Components │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ ability_lite │ │ ace_engine_lite│ │graphic_utils_lite│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - GetDataPath() │ │ - JSI API │ │ - Screen Info │ │ │ │ │ │ - AbilityEnv │ │ - JsAsyncWork │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ ui_lite │ │resource_mgmt_lite│ │ init │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - UI Components │ │ - Resource Mgmt │ │ - System Init │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ parameter │ │ global │ │ │ │ │ │ │ │ │ │ │ │ │ │ - GetBrand() │ │ - GLOBAL_Get │ │ │ │ │ │ - GetModel() │ │ Language() │ │ │ │ │ │ - GetDeviceType │ │ - GLOBAL_Get │ │ │ │ │ │ - GetSdkApi │ │ Region() │ │ │ │ │ │ Version() │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘4. 状态机转换图4.1 定时器状态机模型4.1.1 状态机树图Timer StateMachine RootUninitialized(NULL)InitializedDeletedStopped(isRunning 0)Running(isRunning 1)Paused(isRunning 0)4.1.2 状态切换规则当前状态事件/条件目标状态说明UninitializedKalTimerCreate() 成功Stopped创建定时器UninitializedKalTimerCreate() 失败Uninitialized创建失败保持原状态StoppedKalTimerStart() 成功Running启动定时器StoppedKalTimerDelete()Deleted删除定时器Running单次定时器超时Stopped自动停止Running周期定时器超时Running保持运行触发回调RunningKalTimerStop()Stopped手动停止RunningKalTimerChange(0)Stopped设置0毫秒停止RunningKalTimerChange(n)Running更新定时时间RunningKalTimerDelete()Deleted删除定时器AnyKalTimerDelete()Deleted释放资源4.2 定时器状态机转换图KalTimerCreate() 成功func ! NULLKalTimerCreate() 失败KalTimerStart()millisec 0KalTimerDelete()单次定时器超时执行回调, isRunning0周期定时器超时执行回调, 保持RunningKalTimerStop()KalTimerChange(0)KalTimerDelete()UninitializedStoppedRunningDeletedNULL状态isRunning 0isRunning 1资源已释放4.3 文件操作状态机UtilsFileOpen()fd 0UtilsFileOpen() 失败读写操作操作完成UtilsFileClose()UtilsFileClose()ClosedOpenedErrorReadWritefd -1fd 0Read/Write Operationsfd -15. 接口设计5.1 公共接口5.1.1 文件操作接口UtilsFileOpen/** * brief 打开或创建文件 * param path 文件路径 * param oflag 打开标志支持以下组合 * - O_RDONLY_FS (00): 只读 * - O_WRONLY_FS (01): 只写 * - O_RDWR_FS (02): 读写 * - O_CREAT_FS (0100): 不存在则创建 * - O_EXCL_FS (0200): 配合O_CREAT使用文件存在则失败 * - O_TRUNC_FS (01000): 清空文件内容 * - O_APPEND_FS (02000): 追加模式 * param mode 文件权限当前未使用 * return 成功返回文件描述符(0)失败返回-1 */intUtilsFileOpen(constchar*path,intoflag,intmode);UtilsFileClose/** * brief 关闭文件 * param fd 文件描述符 * return 成功返回0失败返回-1 */intUtilsFileClose(intfd);UtilsFileRead/** * brief 读取文件数据 * param fd 文件描述符 * param buf 存储读取数据的缓冲区 * param len 要读取的字节数 * return 成功返回实际读取的字节数失败返回-1 */intUtilsFileRead(intfd,char*buf,unsignedintlen);UtilsFileWrite/** * brief 写入文件数据 * param fd 文件描述符 * param buf 要写入的数据 * param len 要写入的字节数 * return 成功返回实际写入的字节数失败返回-1 */intUtilsFileWrite(intfd,constchar*buf,unsignedintlen);UtilsFileDelete/** * brief 删除文件 * param path 文件路径 * attention 最多同时打开32个文件超过则需先关闭 * return 成功返回0失败返回-1 */intUtilsFileDelete(constchar*path);UtilsFileStat/** * brief 获取文件大小 * param path 文件路径 * param fileSize [out] 文件大小 * return 成功返回0失败返回-1 */intUtilsFileStat(constchar*path,unsignedint*fileSize);UtilsFileSeek/** * brief 调整文件读写位置 * param fd 文件描述符 * param offset 偏移量 * param whence 起始位置 * - SEEK_SET_FS (0): 文件头 * - SEEK_CUR_FS (1): 当前位置 * - SEEK_END_FS (2): 文件尾 * return 成功返回当前位置失败返回-1 */intUtilsFileSeek(intfd,intoffset,unsignedintwhence);UtilsFileCopy/** * brief 复制文件 * param src 源文件路径 * param dest 目标文件路径 * attention 需要两个可用的文件描述符 * return 成功返回0失败返回-1 */intUtilsFileCopy(constchar*src,constchar*dest);UtilsFileMove/** * brief 移动文件 * param src 源文件路径 * param dest 目标文件路径 * attention 需要两个可用的文件描述符 * return 成功返回0失败返回-1 */intUtilsFileMove(constchar*src,constchar*dest);5.1.2 KV存储接口UtilsGetValue/** * brief 获取键值 * param key 键名最长32字节仅支持小写字母、数字、下划线、点 * param value [out] 值缓冲区 * param len 缓冲区大小 * return 成功返回值长度参数错误返回-9其他错误返回-1 * 从缓存获取返回0 */intUtilsGetValue(constchar*key,char*value,unsignedintlen);UtilsSetValue/** * brief 设置键值 * param key 键名最长32字节 * param value 值最长128字节 * return 成功返回0参数错误返回-9其他错误返回-1 */intUtilsSetValue(constchar*key,constchar*value);UtilsDeleteValue/** * brief 删除键值 * param key 键名 * return 成功返回0参数错误返回-9其他错误返回-1 */intUtilsDeleteValue(constchar*key);ClearKVCache/** * brief 清空KV缓存 * attention 仅在FEATURE_KV_CACHE启用时可用 * return 成功返回0失败返回-1 */intClearKVCache(void);5.1.3 定时器接口KalTimerCreate/** * brief 创建定时器 * param func 回调函数 * param type 定时器类型KAL_TIMER_ONCE/KAL_TIMER_PERIODIC * param arg 回调参数 * param millisec 定时时间毫秒 * return 成功返回定时器ID失败返回NULL */KalTimerIdKalTimerCreate(KalTimerProc func,KalTimerType type,void*arg,unsignedintmillisec);KalTimerStart/** * brief 启动定时器 * param timerId 定时器ID * return KAL_OK成功KAL_ERR_PARA参数错误 */KalErrCodeKalTimerStart(KalTimerId timerId);KalTimerChange/** * brief 修改定时器时间 * param timerId 定时器ID * param millisec 新的定时时间 * return KAL_OK成功KAL_ERR_PARA参数错误KAL_ERR_INNER内部错误 */KalErrCodeKalTimerChange(KalTimerId timerId,unsignedintmillisec);KalTimerStop/** * brief 停止定时器 * param timerId 定时器ID * return KAL_OK成功KAL_ERR_PARA参数错误KAL_ERR_INNER内部错误 */KalErrCodeKalTimerStop(KalTimerId timerId);KalTimerDelete/** * brief 删除定时器 * param timerId 定时器ID * return KAL_OK成功KAL_ERR_PARA参数错误KAL_ERR_INNER内部错误 */KalErrCodeKalTimerDelete(KalTimerId timerId);KalTimerIsRunning/** * brief 查询定时器是否运行 * param timerId 定时器ID * return 1运行中0停止或无效 */unsignedintKalTimerIsRunning(KalTimerId timerId);5.1.4 内存池接口OhosMalloc/** * brief 从指定类型内存池申请内存 * param type 内存池类型MemType枚举 * param size 申请大小 * attention 不建议申请小于8字节的内存 * return 成功返回内存地址失败返回NULL */void*OhosMalloc(MemType type,uint32 size);OhosFree/** * brief 释放内存 * param ptr 内存地址 * attention 禁止释放空指针或非OhosMalloc申请的内存 */voidOhosFree(void*ptr);5.2 数据交换接口5.2.1 JS API数据交换格式文件操作参数// 读取文本文件{uri:internal://app/path/to/file.txt,// 文件URIposition:0,// 起始位置可选length:1024,// 读取长度可选success:function(data){},// 成功回调fail:function(data,code){},// 失败回调complete:function(){}// 完成回调}// 写入文本文件{uri:internal://app/path/to/file.txt,text:content to write,// 写入内容append:false,// 是否追加success:function(){},fail:function(data,code){},complete:function(){}}KV存储参数// 获取值{key:my_key,// 键名default:default_value,// 默认值可选success:function(data){},// data为获取的值fail:function(data,code){},complete:function(){}}// 设置值{key:my_key,value:my_value,// 要设置的值success:function(){},fail:function(data,code){},complete:function(){}}设备信息返回格式{brand:HUAWEI,// 品牌manufacturer:HUAWEI,// 制造商model:Hi3861,// 型号product:Hi3861,// 产品名deviceType:liteWearable,// 设备类型language:zh,// 语言region:CN,// 地区apiVersion:6,// API版本windowWidth:454,// 窗口宽度windowHeight:454,// 窗口高度screenDensity:195,// 屏幕密度screenShape:rect// 屏幕形状}5.2.2 错误码定义错误码常量名说明0NATIVE_SUCCESS成功-2ERROR_FR_NO_FILE文件不存在-39ERROR_DIR_NOT_EMPTY目录非空-200ERROR_CODE_GENERAL通用错误-202ERROR_CODE_PARAM参数错误-300ERROR_CODE_IOI/O错误-301ERROR_CODE_NO_FILE文件不存在-302ERROR_CODE_READ_TOO_LONG读取内容超过4KB5.3 接口调用时序图5.3.1 文件读取时序图JS EngineNativeapiFsfs_impl.cfile.chal_filereadText(args)DispatchAsyncWorkreturn undefined[异步线程]GetFullPath()StatImpl()HalFileStat()返回结果返回结果ReadFileImpl()HalFileOpen()返回fdHalFileRead()返回数据HalFileClose()返回结果返回数据SuccessCallBacksuccess({text})complete()JS EngineNativeapiFsfs_impl.cfile.chal_file5.3.2 定时器操作时序图Callernativeapi_timerkal.cPOSIX TimerStartTimerTask()KalTimerCreate()timer_create()返回结果返回timerIdKalTimerStart()timer_settime()返回结果返回结果返回结果[定时器超时]SIGEV_THREADKalFunction()触发回调userCallback()StopTimerTask()KalTimerDelete()timer_delete()返回结果返回结果返回结果Callernativeapi_timerkal.cPOSIX Timer5.3.3 KV存储操作时序图JS EngineNativeapiKvkv_impl.cFile Systemset(key, value)DispatchAsyncWorkreturn undefined[异步线程]InitKv()access()返回结果mkdir()返回结果opt[目录不存在]SetValue()open()返回fdwrite()返回结果close()返回结果SuccessCallBacksuccess()complete()JS EngineNativeapiKvkv_impl.cFile System附录A. 配置参数说明参数默认值说明FEATURE_KV_CACHE启用KV存储缓存功能开关MAX_CACHE_SIZE10KV缓存最大条目数MAX_KV_SUM50每个应用最大KV存储条目数KEY_MAX_LEN32键名最大长度VALUE_MAX_LEN128值最大长度FILE_NAME_MAX_LEN300文件名最大长度URI_NAME_MAX_LEN128URI最大长度TEXT_MAX_READ_LEN4096单次文本读取最大长度B. 编译选项# bundle.json中的feature配置 features: [ utils_lite_feature_file, # 文件操作功能 utils_lite_feature_kal_timer, # KAL定时器功能 utils_lite_feature_timer_task, # 定时任务功能 utils_lite_feature_js_builtin # JS API功能 ]