关于openharmony:RK系列开发板音频驱动适配指南二

背景:上一篇文章RK系列开发板音频驱动适配指南-DAI模块适配中曾经论述音频驱动适配的DAI模块适配步骤以及外围代码的展现,本次次要介绍音频驱动适配中的DMA模块适配。 RK系列开发板 DMA模块适配:DMA是一种无须要CPU的参加就能够让外设与零碎内存之间进行双向数据传输的硬件机制,其次要作用是实现音频数据在SoC设施与内存之间的传输,并对循环缓存中的数据进行治理。ADM定义的DMA接口包含:DMA设施初始化、内存的调配与开释、DMA通道的申请与配置、DMA预处理、暂停与复原、音频数据的提交与悬挂和循环缓存治理共11个接口。 在适配器模块中实例化ADM定义的DAI两个构造体:PlatformData(DMA数据集)和AudioDmaOps(DMA操作集);在操作集模块中实现DMA的业务接口函数;配置DMA设施节点私有参数,若有须要,则可配置DMA相干寄存器信息等公有参数。 RK系列开发板 DMA模块关系RK系列开发板_dma-classes.puml 1.1.RK系列开发板dmaadapter•实例化DMA操作集:g_dmaDeviceOps,核心成员字段值定义如下:–DmaBufAlloc = RK系列开发板DmaBufAlloc;–DmaBufFree = RK系列开发板DmaBufFree;–DmaRequestChannel = RK系列开发板DmaRequestChannel;–DmaConfigChannel = RK系列开发板DmaConfigChannel;–DmaPrep = RK系列开发板DmaPrep;–DmaSubmit = RK系列开发板DmaSubmit;–DmaPending = RK系列开发板DmaPending;–DmaPause = RK系列开发板DmaPause;–DmaResume = RK系列开发板DmaResume;–DmaPointer = RK系列开发板PcmPointer。•实例化DMA数据集:g_platformData,核心成员字段值定义如下:–PlatformInit= RK系列开发板DmaDeviceInit;–ops = &g_dmaDeviceOps,DMA操作集地址。•实例化HdfDriverEntry类型的DAI驱动实体:g_platformDriverEntry,核心成员字段值定义如下:–moduleVersion = 1,模块版本号;–moduleName = "DMA_RK系列开发板",模块名;–Bind = DmaDriverBind;–Init = DmaDriverInit;–Release = DmaDriverRelease。•DMA驱动注册到鸿蒙零碎:HDFINIT(gplatformDriverEntry)。•实现以下函数:–DmaDriverInit,DMA驱动初始化函数;–DmaDriverBind,DMA驱动绑定函数;–DmaDriverRelease,DMA驱动开释函数。 1.2.RK系列开发板dmaops•实现以下函数:–RK系列开发板DmaDeviceInit,初始化DMA设施函数;–RK系列开发板DmaBufAlloc,调配数据内存函数;–RK系列开发板DmaBufFree,开释数据内存函数;–RK系列开发板DmaRequestChannel,申请DMA通道函数;–RK系列开发板DmaConfigChannel,配置DMA通道函数;–RK系列开发板DmaPrep,DMA预处理函数;–RK系列开发板DmaPause,暂停函数;–RK系列开发板DmaResume,复原函数;–RK系列开发板DmaSubmit,提交数据函数;–RK系列开发板DmaPending,悬挂数据函数;–RK系列开发板PcmPointer,治理数据缓存函数。 总结:本文具体介绍DMA的适配步骤以及外围代码,置信读者会对音频适配会有一个更分明深刻的理解,之后的文章中,会逐渐更新音频驱动的Codec模块适配、Audio HCS配置等。

October 25, 2022 · 1 min · jiezi

关于openharmony:RK系列开发板音频驱动适配指南一

背景:多媒体系统目前在Linux操作系统,windows操作系统曾经十分成熟,并且利用场景宽泛,然而,基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)操作系统,目前如果应用到多媒体(音频)是须要做一系列的适配动作,能力利用到各种场景。 计划:基于OpenHarmony适配RK系列开发板音频驱动总体方案是:基于HDF框架和ADM模型,在内核层中创立DAI、DMA和Codec三个模块,并实现例化ADM定义的DAI、DMA和Codec回调业务接口,ADM通过这些接口实现音频数据处理与性能管制;而后再通过HCS配置设施节点和服务,通过HDF的服务管理机制,对内核层和用户层提供服务。针对DAI、DMA和Codec,首先别离创立对应的适配器模块(RK系列开发板daiadapter、RK系列开发板dmaadapter、es8838codecadapter),在其中实现驱动的注册、绑定、初始化和开释;而后别离创立三者对应的操作集模块(RK系列开发板daiops、RK系列开发板dmaops、es8838codecops),在其中实现所有ADM定义的对应业务接口;最初在deviceinfo.hcs中配置三者私有的参数,若须要配置公有参数,则还须要别离创立三者对应的HCS配置文件(daiconfig.hcs、dmaconfig.hcs、codecconfig.hcs)。  RK系列开发板 DAI模块适配:DAI次要作用是通过I2S将Soc与Codec连贯,实现在Soc和Codec之间音频数据的传输,其中I2S驱动由HDF框架提供。ADM定义的DAI接口包含:DAI设施初始化、读写(Soc的)寄存器、音频设备启动、下发硬件参数和事件监听共6个接口。 在适配器模块中实例化ADM定义的DAI两个构造体:DaiData(SoC端DAI数据集)和AudioDaiOps(SoC端DAI操作集);在操作集模块中实现6个ADM定义的DAI的业务接口函数;配置DAI设施节点私有参数,若有须要,则可配置SoC端的I2S寄存器信息等公有参数。 RK系列开发板 DAI模块关系 RK系列开发板_dai-classes.puml 1.1.RK系列开发板daiadapter•实例化SoC端DAI操作集:g_daiDeviceOps,核心成员字段值定义如下:–Startup = RK系列开发板DaiStartup;–HwParams = RK系列开发板DaiHwParams;–Trigger = RK系列开发板DaiTrigger。•实例化SoC端DAI数据集:g_daiData,核心成员字段值定义如下:–DaiInit = RK系列开发板DaiDeviceInit;–Read = RK系列开发板DaiDeviceReadReg;–Write = RK系列开发板DaiDeviceWriteReg;–ops = &g_daiDeviceOps,SoC端DAI操作集地址。•实例化HdfDriverEntry类型的DAI驱动实体:g_daiDriverEntry,核心成员字段值定义如下:–moduleVersion = 1,模块版本号;–moduleName = "DAI_RK系列开发板",模块名;–Bind = DaiDriverBind;–Init = DaiDriverInit;–Release = DaiDriverRelease。•DAI驱动注册到鸿蒙零碎:HDFINIT(gdaiDriverEntry)。•实现以下函数:–DaiDriverInit,DAI驱动初始化函数;–DaiDriverBind,DAI驱动绑定函数;–DaiDriverRelease,DAI驱动开释函数。 1.2.RK系列开发板 daiops•实现以下函数:–RK系列开发板DaiDeviceInit,初始化SoC端DAI设施函数;–RK系列开发板DaiDeviceReadReg,读SoC端DAI设施寄存器函数;–RK系列开发板DaiDeviceWriteReg,写SoC端DAI设施寄存器函数;–RK系列开发板DaiStartup,启动SoC端DAI设施函数;–RK系列开发板DaiHwParams,下发SoC端DAI硬件参数函数;–RK系列开发板DaiTrigger,监听并处理事件函数。 总结:在OpenHarmony操作系统中,适配音频驱动是十分重要的一个模块,本文只是其中的一个步骤,DAI模块适配,通过示意图的剖析,以及外围代码的领导,置信读者会对音频适配有一个根本的理解,之后的文章中,会逐渐更新音频驱动的DMA模块适配、Codec模块适配、Audio HCS配置等。

October 25, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony轻量系统中内核资源主要管理方式

一、背景OpenAtom OpenHarmony(以下简称“OpenHarmony”)轻量零碎面向MCU类处理器例如ARM Cortex-M、RISC-V 32位的设施,硬件资源极其无限,反对的设施最小内存为128KiB,能够提供多种轻量级网络协议,轻量级的图形框架,以及丰盛的IOT总线读写部件等。可撑持的产品如智能家居畛域的连贯类模组、传感器设施、穿戴类设施等。 在轻量零碎内核中,因为可用内存资源少,个别的数据资源都是小批量的,所以其资源管理形式都比较简单且类似,本文重点解说在轻量零碎内核中,典型的资源的存储和拜访形式。这些典型的资源包含互斥锁,信号量、音讯队列、事件、定时器等。 本文以互斥锁为例来探索其内核资源的次要治理形式。 互斥锁软件模块相干的代码在如下地位 https://gitee.com/openharmony...https://gitee.com/openharmony... 二、模块使能和容量互斥锁软件模块是编译可裁剪模块,能够通过编译配置宏来关上或者敞开具体的编译配置宏定义在https://gitee.com/openharmony...文件中 通过这个文件可知,liteos_m内核默认是使能互斥锁性能的,但咱们依据具体产品能够对其进行设置,如某产品对应的配置文件https://gitee.com/openharmony... 这里明确看到此产品应用了互斥锁性能,如果须要将其敞开,间接批改成0值即可。 互斥锁反对的最大数目不同产品能够不同,以后这个产品为24,如果产品没有定义容量限度,那么应用默认容量限度(见los_config.h中)。 1.数据保留形式 因为容量较小,采纳数组这种简略和原始的数据保留形式,在零碎初始化的时候申请数组内存。如下(los_mux.c中) 三、数据拜访形式因为轻量零碎的计算资源绝对受限,因而须要在算法上宽宏大量。目前提供了ID形式(数组下标拜访)和链表拜访2种形式,如下进行具体阐明。 通过ID拜访在los_mux.h中,定义了通过id拜访互斥锁的办法,其实质就是数组下标拜访,获取具体互斥锁资源的地址  2.通过闲暇链表拜访 随着互斥锁的申请和开释,零碎中以后正在应用的互斥锁数目是动态变化的。因为采纳了数组存储以及内存预留的策略,所以数组中的互斥锁有些是闲暇的,有些是正在应用的,并且其状态随着零碎的运行过程而无规律地变动。 若仅依赖于数组形式拜访互斥锁,则查问闲暇互斥锁是一个稍耗时的算法,因为要遍历数组。 为了放慢闲暇互斥锁的查问,本零碎采纳了将所有闲暇互斥锁组织成链表的办法。这样每次取出链表第一个节点即可,能够极大晋升性能。 在los_mux.h中,通过减少muxList字段将所有闲暇的互斥锁组织成链表  在los_mux.c中,零碎初始化时,所有互斥锁都为闲暇状态,放入闲暇链表  在los_mux.c中,创立互斥锁时,从闲暇链表取下闲暇状态的互斥锁  在los_mux.c中,开释互斥锁时,将互斥锁放入闲暇链表 四、健壮性思考1.闲暇状态双保险 除了通过判断是否在闲暇链表上来判断描述符是否闲暇以外,在构造体中也保留了是否闲暇的状态,这样能够减少闲暇状态判断的健壮性;另外,通过直接判断状态也比判断是否在链表中性能更高。如下(los_mux.c中):  2.中断上下文爱护 因为在中断上下文中不容许有睡眠操作,而互斥锁获取逻辑就是典型的具备睡眠操作的逻辑,所以,互斥锁的获取和开释不能在中断上下文中,如下(los_mux.c中)。  3.工作切换爱护 IPC操作有时会须要工作切换,如果当前任务切换性能被长期敞开,则不容许进行IPC操作,互斥锁获取操作也是IPC操作的一种。代码如下(los_mux.c):  4.要害工作不容许切换 一些零碎要害工作运行后,不容许执行IPC逻辑,比方软件定时器工作:其监控多个定时器的超时。假设其执行IPC逻辑导致工作期待某资源比拟长的工夫,会导致后续局部定时器定时性能生效(不精确)。代码如下(los_mux.c): 五、总结轻量零碎中内核资源多采纳数组与闲暇链表相结合的形式。除了OpenHarmony轻量零碎,其余嵌入式零碎中这类的数据存储形式也比拟常见。这种形式有如下几个突出的长处● 简略易懂● 读写效率高● 代码紧凑

October 21, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony(以下简称“OpenHarmony”)提供了Image组件反对GIF动图的播放,然而不足扩大能力,不反对播放管制等。明天介绍一款三方库——ohos-gif-drawable三方组件,带大家一起玩转GIF的数据渲染,搞定GIF动图的各种需要。 成果演示 本文将从5个大节来率领大家应用ohos-gif-drawable这一款三方库,其中1、2、3这3个大节,次要介绍了ohos-gif-drawable的外围能力、GIF软解码和GIF绘制。4和5大节次要是扩大探讨,如何增加滤镜成果和软解码遇到的耗时问题。 1.GIF的文件格式实践根底工欲善其事必先利其器。首先咱们须要为本人打下实践根底。理解GIF的数据格式,为后续解码GIF提供实践反对。 通过学习GIF的文件格式,咱们对于GIF的组成格局有了肯定的理解,并且有助于了解前面GIF的解码。在开始介绍之前,我想让大家理解一下整体的构造思路如下图: 其中gifuct-js三方库次要实现了解码的工作。 ohos-gif-drawable三方库则是在gifuct-js的三方库之上,进行了封装。并联合了OpenHarmony的Canvas绘制能力,达到了播放和管制GIF的能力。 2.GIF软解码:gifuct-js三方库介绍GIF解码咱们应用了gifuct-js这个库,它是一个纯JavaScript的GIF解码库。首先咱们须要理解根底用法。 2.1 参考样例将一个文件ArrayBuffer转换为GIF解码后的帧数据数组。 //javascriptvar gif = parseGIF(arraybuffer)var frames = decompressFrames(gif, true)2.2 因为OpenHarmony的Image生成PixelMap须要的数据是BGRA数据,而2.1生成的frames所有数组中的patch字段则是RGBA数据,所以咱们须要应用 //javascriptvar gif = parseGIF(arraybuffer)var frames = decompressFrames(gif, false)而后将frame目前还未生成的patch字段数据,通过generatePatch 函数,将RGBA的数据更换为BGRA即可,如下代码所示: //javascriptconst generatePatch = image => { const totalPixels = image.pixels.length const patchData = new Uint8ClampedArray(totalPixels * 4) for (var i = 0; i < totalPixels; i++) { const pos = i * 4 const colorIndex = image.pixels[i] const color = image.colorTable[colorIndex] || [0, 0, 0] patchData[pos] = color[2] // B patchData[pos + 1] = color[1]// G patchData[pos + 2] = color[0] // R patchData[pos + 3] = colorIndex !== image.transparentIndex ? 255 : 0//A } return patchData}generatePatch函数,在这里会依据色彩表colorTable和基于色彩表的图像数据pixels以及透明度transparentIndex生成BGRA格局的patchData,这个数据和Canvas中getImageData获取的ImageData数据是统一的,都是Uint8ClampedArray类型,能够间接应用putImageData让canvas绘制。 ...

October 20, 2022 · 6 min · jiezi

关于openharmony:在DAYU200上实现OpenHarmony跳转拨号界面

一、简介日常生活中,打电话是最常见的交换形式之一,那么如何在OpenAtom OpenHarmony(简称“OpenHarmony”)中进行电话服务相干的开发呢?明天咱们能够一起来理解一下如何通过电话服务零碎反对的API实现拨打电话的性能。 二、成果展现 利用能够通过调用call和observer模块的API来获取以后注册网络名称、网络服务状态、信号强度以及SIM卡的相干信息,具体可参考获取以后蜂窝网络信号信息开发领导。 间接拨打电话须要提供零碎权限ohos.permission.PLACE_CALL,在这里倡议利用应用makeCall(),跳转到拨号界面,并显示拨号的号码,当开发者调用makeCall接口时,设施会主动跳转到拨号界面。 三、接口阐明call模块为开发者提供呼叫治理性能。observer模块为开发者提供通话业务状态订阅和勾销订阅性能。 call.hasVoiceCapability():能力获取,示意是否具备语音性能。call.makeCall()跳转拨号界面,跳转到拨号界面,并显示拨号的号码。observer.on(‘callStateChange’):订阅通话业务状态变动,ohos.permission.READ_CALL_LOG (获取通话号码须要该权限)。observer.off(‘callStateChange’):勾销订阅通话业务状态变动。 四、开发步骤1.import须要的模块。 // import须要的模块import call from '@ohos.telephony.call';import observer from '@ohos.telephony.observer';2.调用hasVoiceCapability()接口获取以后设施呼叫能力,如果反对持续下一步;如果不反对则无奈发动呼叫。 // 调用查问能力接口let isSupport = call.hasVoiceCapability();if (!isSupport) { console.log("not support voice capability, return."); return;}3.跳转到拨号界面,并显示拨号的号码。 // 如果设施反对呼叫能力,则持续跳转到拨号界面,并显示拨号的号码call.makeCall("13xxxx", (err)=> { if (!err) { console.log("make call success."); } else { console.log("make call fail, err is:" + JSON.stringify(err)); }});4.订阅通话业务状态变动。(可选) // 订阅通话业务状态变动(可选)observer.on("callStateChange", (data) => { console.log("call state change, data is:" + JSON.stringify(data));});5.勾销订阅通话业务状态变动。(可选) // 勾销订阅通话业务状态变动observer.off("callStateChange", (data) => { console.log("call state change, data is:" + JSON.stringify(data));});五、残缺代码// import须要的模块import call from '@ohos.telephony.call';import observer from '@ohos.telephony.observer';@[email protected] CAllTest{ build(){ Column(){ Button("打电话给坚果").width(300).height(80) .fontSize(30).fontColor(Color.Orange).onClick(()=>{ // 调用查问能力接口 let isSupport = call.hasVoiceCapability(); if (!isSupport) { console.info(" support voice capability, return"); return; } // 如果设施反对呼叫能力,则持续跳转到拨号界面,并显示拨号的号码 call.makeCall("17752170152", (err)=> { if (!err) { console.info(" make call success."); } else { console.info("make call fail, err is:" + JSON.stringify(err)); } }); }) }.width("100%").height("100%").justifyContent(FlexAlign.Center) }}源码地址https://gitee.com/jianguo888/... ...

October 19, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-LiteosA内核之iperf3移植心得

一、iperf3工作原理iperf3次要的性能是测试基于特定门路的带宽,在客户端和服务器端建设连贯(三次握手)后,客户端发送肯定大小的数据报并记下发送的工夫,或者客户端在肯定的工夫内发送数据并记下发送的总数据。带宽的大小等于发送的总数据除以发送的总工夫。对服务器端来说,在连贯建设工夫内,接管的总数据除以所花工夫即为服务器端所测得的带宽。 iperf3测试UDP的性能时,客户端能够指定UDP数据流的速率。客户端发送数据时,将依据客户提供的速率计算数据报发送之间的时延,客户还能够指定发送数据报的大小。每个发送的数据报蕴含一个ID号,用来惟一地标识该报文。服务器端则依据该ID号来确定数据报失落和乱序。当把UDP报文大小设置能够将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文失落数据即为IP层包的失落数据。这提供了一个无效的测试包失落状况的办法。数据报传输提早抖动(Jitter)的测试由服务器端实现,客户发送的报文数据蕴含有发送工夫戳,服务器端依据该工夫信息和接管到报文的工夫戳来计算传输提早抖动。传输提早抖动反映传输过程中是否平滑。因为它是一个相对值,所以并不需要客户端和服务器端工夫同步。 由上介绍咱们能够晓得iperf3的性能减少了操作系统网络度量的能力,而携带Liteos_A内核的OpenAtom OpenHarmony(以下简称“OpenHarmony”)操作系统目前还不反对这个性能,特此尝试把iperf3移植到反对Liteos_A内核的OpenHarmony操作系统中,并作此文分享一些心得。 二、iperf3移植过程iperf3能够运行在Linux和Windows平台下,其应用了规范的POSIX接口,因而将iperf3移植到Liteos_A上,目前Liteos_A反对用户态和内核态的命令,这个也造成了移植的很大艰难,所以以下将2种增加命令的形式都记录下,供读者参考。 确定库的类型OpenHarmony有如下几种指标类型:executable: 生成可执行文件,对于Liteos_A,在目录/bin下能够找到可执行文件 shared_library: 生成.dll或.so动态链接库、对于Liteos_A,在目录/lib或者  /usr/lib下能够找到动静库 static_library: 生成.lib或.a动态链接库 group: 生成依赖关系组 action: 运行脚本以生成文件 依据以上几种类型的形容可知,将iperf3移植成executable类型的组件最为适合。 增加库到工程中将源码下载到Linux下并解压,执行./configure,生成iperf_config.h,将iperf3的源码拷贝到OpenHarmony代码库中适合的地位,如下将iperf3增加到/third_party目录下。 须要留神的是非内核态的库不能增加到内核的目录下,不然编译和调试过程中相干的头文件可能找不到。在/vendor/厂商名/产品型号/config.json中的某一子系统下增加组件。 在 /build/lite/components/子系统名.json中增加组件,如下: 编写配置BUILD.gn 移植的iperf3代码目录下须要提供一个gn文件,指明须要编译的代码。此文件能够通过import组件模板函数。一方面,很多援用到的头文件须要一一增加到零碎BUILD.GN中去,import组件模板函数能够省去很多麻烦;另一方面,头文件有多个,最终还很难确定是哪一个,应用系统配置好的组件模板函数,能够主动匹配。 程序启动入口:将三方库增加到shell命令1) 内核态的shell性能不合乎POSIX规范,仅供调试应用,本文特记录下其增加命令的办法,此办法分为动态和动静两种形式,增加形式如下:① 命令源代码蕴含如下头文件 #include "shell.h"#include "shcmd.h"② 动态注册命令形式 第一步:调用SHELLCMD_ENTRY(l, cmdType, cmdKey, paraNum, cmdHook),在源文件最初减少这个调用即可。 第二步:在链接选项中增加链接该新增命令项参数。即在kernel/liteos_a/tools/build/mk/liteos_tables_ldflags.mk中减少相应选项,SHELLCMD_ENTRY的第一个参数前加-u。 此办法增加的shell,在代码编译阶段就已编译进去了,其实现原理是利用了编译器的section个性(也是代码模块化的重要伎俩),将所有shell命令相干性能都放在一段间断的地址空间,将SHELLCMD_ENTRY宏一层层开展,即可失去上面原型。 LOS_HAL_TABLE_BEGIN(g_shellcmd, shellcmd); //段的起始tagLOS_HAL_TABLE_END(g_shellcmdEnd, shellcmd); //段的完结tagSHELLCMD_ENTRY(l, cmdType, cmdKey, paraNum, cmdHook)如下是编译后生成的map文件中shell段的局部,能够察看到曾经通过此办法退出的shell命令。 ③ 动静注册命令方式此类形式是在代码运行阶段动静的注册,osCmdReg自身是一个函数,在命令初始化的源代码减少此函数调用。 UINT32 osCmdReg(CmdT ype cmdType, CHAR *cmdKey, UINT32 paraNum, CmdCallBackFunc cmdProc)函数原型在/kernel/liteos_a/shell/full/src/base/shcmd.c 能够找到,基本原理是将动静注册的shell命令退出到动静shell命令链表空间。 2)用户态的shell不必手动增加增加指标的形式为executable,将程序下载到指标板上,在/bin目录下找到可执行的文件,只有在串口助手中输出 ./bin/可执行文件名,内核即可动静加载可执行的文件(或者输出exec  /bin/可执行文件名)。 三、iperf3应用形式介绍应用iperf3测试时必须将一台主机设置为客户端,一台主机设置为服务器。在Linux环境或者Windows或者OpenHarmony shell交互窗口输出iperf3 -h能够获取iperf3的帮忙信息。以下介绍几种常见的应用形式: ...

October 18, 2022 · 1 min · jiezi

关于openharmony:在DAYU200上实现OpenHarmony视频播放器

内容简介本文介绍了如何应用ArkUI框架提供的video组件,实现一个具备繁难播放器。通过VideoController控制器来管制倍速、全屏、进度调节等性能。 因为应用本地视频文件会影响App的包大小,所以通常咱们的视频文件来源于网络地址,记得须要在config或者module.json对应的"abilities"中增加网络应用权限ohos.permission.INTERNET。 成果展现 增加权限(网络地址须要) "abilities":[ { "permissions": ["ohos.permission.INTERNET"], } ] 应用一个VideoController对象能够管制一个或多个video。 //一个VideoController对象能够管制一个或多个video。 controller: VideoController = new VideoController(); 接口 declare interface VideoOptions { src?: string | Resource; currentProgressRate?: number | string | PlaybackSpeed; previewUri?: string | PixelMap | Resource; controller?: VideoController; } 其中仅src(视频播放源的门路)这个参数是必填的。★反对本地视频门路和网络门路。★反对在resources上面的video或rawfile文件夹里搁置媒体资源。★反对dataability://的门路前缀,用于拜访通过Data Ability提供的视频门路currentProgressRate:number视频播放倍速,反对0.75、1.0、1.25、1.75、2.0。previewUri:string预览图片的门路,能够作为视频未播放时的封面。controller:VideoController控制器。一个VideoController对象能够管制一个或多个video。如果须要通过代码管制视频的播放、暂停等,能够给Video组件设置这个参数,而后通过控制器的如下接口管制视频播放状态:PlaybackSpeed类型接口阐明 declare interface VideoOptions { src?: string | Resource; currentProgressRate?: number | string | PlaybackSpeed; previewUri?: string | PixelMap | Resource; controller?: VideoController; }VideoController一个VideoController对象能够管制一个或多个video。★start() : void开始播放。★pause() : void暂停播放。★stop() : void进行播放。★setCurrentTime(value: number, seekMode: SeekMode)指定视频播放的进度地位,并指定跳转模式。value是进度,seekMode是跳转模式★requestFullscreen() : boolean()申请全屏播放,true是横屏,false竖屏。★exitFullscreen() : void退出全屏。在这儿,我同样须要将setCurrentTime独自拎出setCurrentTime8+setCurrentTime(value: number, seekMode: SeekMode)指定视频播放的进度地位,并指定跳转模式。★参数★SeekMode8+类型接口阐明 ...

October 14, 2022 · 2 min · jiezi

关于openharmony:OpenHarmony应用HAP包签名

背景OpenAtom OpenHarmony(以下简称“OpenHarmony”)利用如果须要对外公布就必须要通过利用签名,DevEco Studio已提供主动签名性能减速利用开发,但主动签名仅限于debug开发,如需对外公布则必须实现release签名。 在OpenHarmony中有AGC利用商店能够帮忙开发者实现release签名,本文将介绍OpenHarmony利用签名办法的步骤,将应用OpenHarmony官网提供的签名工具对HAP进行签名。 应用DevEco Studio实现HAP主动签名关上DevEco Studio工具,点击右上角Project Structure进入工程配置页面 点击Project -> Signing Configs,勾选Automatically generate signing,点击OK 点击Build -> Rebuild Project 或 Build HAP都能够编译构建HAP包 编辑构建实现后咱们能够失去未签名的HAP包 这个包能够用于Debug调试,但不能用于Release正式公布 IDE对HAP包签名的明码限度从实践上讲,咱们也能够通过DevEco Studio进行HAP包的公布签名,然而官网提供的OpenHarmony.p12文件明码为123456 而IDE不反对应用123456这样的简略的明码,它达不到明码安全级别 因而,应用官网加密文件实现签名临时行不通 咱们扭转思路,应用命令行形式实现签名,这样能够绕过IDE的限度 应用官网开源签名工具实现签名查阅官网材料发现,官网曾经提供了命令行签名工具 https://gitee.com/openharmony... 咱们通过批改配置文件、执行脚本,即可实现HAP签名 具体步骤如下: 1 装置工具依赖环境装置python3.10(下载链接:https://www.python.org/downlo...),通过命令行验证装置是否胜利 装置jdk,配置好环境变量,通过命令行验证装置是否胜利 2 将签名工具代码拉取到本地保留,批改配置文件 git clone https://gitee.com/openharmony... 批改developtools_HAPsigner\autosign\signHAP.config文件配置 config.signtool改为HAP-sign-tool.jar的绝对路径,能够在dist目录中找到config.signtool=E:/openharmony/developtools_HAPsigner/dist/HAP-sign-tool.jarcommon.keystoreFile改为OpenHarmony.p12的绝对路径,能够在dist目录中找到common.keystoreFile=E:/openharmony/developtools_HAPsigner/dist/OpenHarmony.p12app.keypair.keyAlias改为OpenHarmony Application Releaseapp.keypair.keyAlias=OpenHarmony Application Releasecert.app.outFile改为OpenHarmonyApplication.pem的绝对路径,能够在dist目录中找到cert.app.outFile=E:/openharmony/developtools_HAPsigner/dist/OpenHarmonyApplication.pemsign.profile.outFile改为官网提供的p7b绝对路径,比方launcher代码中提供了launcher.p7b加密文件sign.profile.outFile=E:/openharmony/signfiles/launcher/launcher.p7bsign.app.inFile为未签名HAP门路sign.app.inFile=E:/openharmony/applications_launcher/product/phone/build/default/outputs/default/phone-launcher-default-unsigned.HAPsign.app.outFile为签名后的HAP保留门路sign.app.outFile=E:/openharmony/applications_launcher/product/phone/build/default/outputs/default/phone-launcher-signed.HAP3 实现配置文件批改后,执行签名脚本 进入签名工具autosign目录cd E:\openharmony\developtools_HAPsigner\autosign 执行python脚本python .\autosign.py signHAP签名胜利后显示Success 到指定目录下能够找到签名后的HAP 总结DevEco Studio开发工具为开发人员提供了十分敌对的HAP主动签名性能及十分便捷的Debug包。因为IDE的平安明码要求,对于Release包的公布咱们临时须要手动签名,尤其是零碎级的利用。咱们能够利用官网提供的签名工具较为容易地实现release包签名,后续能够自行开发GUI工具进一步晋升签名效率。

October 13, 2022 · 1 min · jiezi

关于openharmony:Jchardet支持检测并输出文件编码方式的组件

简介Jchardet是OpenAtom OpenHarmony(以下简称“OpenHarmony”)零碎的一款检测文本编码的组件。当上传一个文件时,组件能够检测并输入该文件中文本应用的编码方式。反对的编码格局有:ASCII编码、UTF-8编码、UTF-16LE编码、Shift-JIS编码、ISO-2022-JP编码、ISO-2022-CN编码、ISO-2022-KR编码、Big5编码、UTF-16BE编码、x-euc-tw编码、EUC-KR编码、ECU-JP编码、GB18030编码、HZ-GB-2312编码、Windows-1252编码、GB2312编码。 开发环境装置IDE:反对DevEco Studio 3.0 Release(Build Version 3.0.0.993)版本。装置SDK:OpenHarmony API version 8及以上版本。 应用办法须要先配置OpenHarmony npm仓,请参考装置教程https://gitee.com/openharmony... 下载jchardet组件npm install @ohos/jchardet –-save在page页面导入。import {nsICharsetDetectionObserver,nsDetector,nsPSMDetector} from '@ohos/jchardet/初始化编码检测器。//lang为输出的语言品种 //0 => All //1 => Japanese //2 => Chinese //3 => Simplified Chinese //4 => Traditional Chinese //5 => Korean //6 => Dont know (default)let det: nsDetector = new nsDetector(lang); 在检测器的初始化函数中定义回调函数,承受编码检测后果。det.Init(new class implements nsICharsetDetectionObserver { Notify(charset: string): void { console.log("CHARSET = " + charset); } })4.1 向编码检测器提供数据,首选判断是否Ascii编码,如果是Ascii编码,则程序完结。 let byteData = new Int8Array(buf); //buf为文件的ArrayBufferlet isAscii:boolean = det.isAscii(byteData);4.2 如果检测到某一种编码,则进去初始化时定义的回调,程序完结。 ...

October 12, 2022 · 1 min · jiezi

关于openharmony:三方库移植之NAPI开发1Hello-OpenHarmony-NAPI

本文通过一个Hello OpenHarmony NAPI样例讲述了NPAI接口开发基础知识。开发基于最新的OpenHarmony3.2Beta3版本及其对应SDK。规范零碎开发板为润和软件dayu200。 将C/C++ 三方库移植到OpenHarmony规范零碎后,须要通过NAPI框架将其C/C++ 接口转换成JS/ETS接口给应用层调用。 通过本文您将相熟: 如何注册NAPI模块及接口。如何在ArkUI eTS代码中调用扩大的NAPI接口。full-SDK的替换。什么是NAPINAPI(Native API)组件是一套对外接口基于Node.js N-API标准开发的原生模块扩大开发框架。::: hljs-center NAPI组件架构图 ::: OpenHarmony 规范零碎利用开发基于ArkUI框架,开发语言应用JS/eTS。局部业务场景依赖应用现有的C/C++ 库,或为了获取更高的性能。OpenHarmony提供NAPI机制,用于标准封装IO、CPU密集型、OS底层等能力并对外裸露JS接口,通过NAPI实现JS和C/C++代码的相互拜访. 例如: 钟禄温和林嘉诚老师在如何在OpenHarmony上应用SeetaFace2人脸识别库?一文中,重点解说了NAPI接口如何实现OpenCV以及SeetaFace的调用。一句话概括就是,钟禄温和林嘉诚老师讲述了移植了三方库后通过NAPI将库的C/C++接口变成JS/ETS接口给应用层调用。OpenHarmony 中的 N-API 定义了由 JS/ETS 语言编写的代码和 native 代码(应用 C/C++ 编写)交互的形式,由 Node.js N-API 框架扩大而来。 N-API:Native Application Programming Interface(本地应用程序接接口)什么是Node.js N-API 框架Node.js N-API为开发者提供了一套C/C++ API用于开发Node.js的Native扩大模块。从Node.js 8.0.0开始,N-API以实验性个性作为Node.js自身的一部分被引入,并且从Node.js 10.0.0开始正式全面反对N-API。增加OpenHarmony自定义子系统、组件、模块这部分内容波及三方库移植,为便于本篇NAPI根底的学习。笔者在此自定义一个子系统用于开发NAPI。如在已存在的子系统组件中增加扩大NAPI,则跳过此步。须要筹备好OpenHarmonyBeta3源码和编译环境 笔者的编译环境为WSL2+Ubuntu18.04+vscode,搭建笔者一样的编译环境搭建能够参考 https://ost.51cto.com/posts/1...增加子系统、组件间接在OpenHarmony源码根目录创立子系统文件夹,取名mysubsys。并在目录下增加子系统的构建配置文件ohos.build残缺内容如下: { "subsystem": "mysubsys", "parts": { "hello": { "module_list": [ "//mysubsys/hello/hellonapi:hellonapi" ], "inner_kits": [ ], "system_kits": [ ], "test_list": [ ] } }}另外ohos.build外面不反对加正文,前面编译的时候会莫名其妙报错。别问,问就是笔者踩过坑了。(如同也没必要加正文)须要明确以下知识点: "subsystem": "mysubsys",subsystem前面的mysubsy是子系统的名称。 "parts": { "hello": { }}hello是组件名称,被mysubsys子系统蕴含 ...

October 12, 2022 · 3 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统⑥

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止读者姥爷们失去看上来的急躁,分享将以连载的形式进行。 下期预报:移植Speedsp到OHOS——VoIP语音品质适配应用层机制钻研综述本期为移植speexdsp到OpenHarmony规范零碎的第⑥期,次要内容如下: speexdsp移植后已提交至openhamrony sig仓库:https://gitee.com/openharmony... 九、筹备好上传speexdsp至OpenHarmony仓库。移植实现后,先将代码上传至sig仓中的contest仓 sig仓库是TPC仓库的孵化仓。代码先上sig仓,到时会间接平移到tpc仓。 上传的内容包含: 原生库代码 (除了波及须要批改原生库代码的局部,其余都不能上传,例如编译途中生成的两头文件)BUILD.gnREADME.Opensource库对外导出的所有api接口export_api.txt测试过的api接口tested_api.txt功能测试文档: 三方库_test_function.md 内容至多蕴含列举出库所有的性能,已测试过的性能,原生库测试逻辑的剖析原生库剖析文档: 三方库_analyse.md文档命名不要用中文,如果波及到编码问题的话,到时候会呈现乱码,个别倡议不必中文命名!!! 提供OAT.xml文件OAT开源扫描OAT(OSS Audit Tool)是OpenHarmony社区的自动化开源扫视工具,用于帮忙开发人员基于自定义的规定主动扫描开源仓代码,辨认不合乎预约规定的代码并输入扫描报告。OAT下载地址:https://gitee.com/openharmony...工具应用编译构建: 在linux上装置好java和Maven后,下载OAT工具源码,执行mvn package实现构建。 编译构建胜利 在父目录下增加OAT.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?><!-- Copyright (c) 2021 Huawei Device Co., Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. This is the configuration file template for OpenHarmony OSS Audit Tool, please copy it to your project root dir and modify it refer to OpenHarmony/tools_oat/README.--><configuration> <oatconfig> <licensefile>COPYING</licensefile> <policylist> <policy name="projectPolicy" desc=""> <!--policyitem type="compatibility" name="GPL-2.0+" path="abc/.*" desc="Process that runs independently, invoked by the X process."/--> <policyitem type="license" name="*" path=".*" rule="may" group="defaultGroup" filefilter="defaultPolicyFilter" desc=""/> </policy> </policylist> <filefilterlist> <filefilter name="defaultFilter" desc="Files not to check"> <filteritem type="filepath" name=".*" desc="原生库文件"/> </filefilter> <filefilter name="defaultPolicyFilter" desc="Filters for compatibility,license header policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> <filteritem type="filepath" name=".*" desc="原生库代码"/> </filefilter> <filefilter name="copyrightPolicyFilter" desc="Filters for copyright header policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> <filteritem type="filepath" name=".*" desc="原生库代码"/> </filefilter> <filefilter name="licenseFileNamePolicyFilter" desc="Filters for LICENSE file policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> </filefilter> <filefilter name="readmeFileNamePolicyFilter" desc="Filters for README file policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> </filefilter> <filefilter name="readmeOpenSourcefileNamePolicyFilter" desc="Filters for README.OpenSource file policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> </filefilter> <filefilter name="binaryFileTypePolicyFilter" desc="Filters for binary file policies"> <!--filteritem type="filename" name="*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="abcdefg/.*.uvwxyz" desc="Describe the reason for filtering scan results"/--> <!--filteritem type="filepath" name="projectroot/[a-zA-Z0-9]{20,}.sh" desc="Temp files"/--> </filefilter> </filefilterlist> <licensematcherlist> <!--licensematcher name="uvwxyz License" desc="If the scanning result is InvalidLicense, you can define matching rules here. Note that quotation marks must be escaped."> <licensetext name=" uvwxyz license textA xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " desc=""/> <licensetext name=" uvwxyz license textB xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " desc=""/> </licensematcher--> </licensematcherlist> </oatconfig></configuration>在speexdsp根目录下新建空白的OAT_report.text文件,执行命令: ...

October 12, 2022 · 3 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统⑤

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止读者姥爷们失去看上来的急躁,分享将以连载的形式进行。感激润和软件提供的硬件反对。 下期预报:OAT开源扫描和三方库上仓根本要求本期为移植speexdsp到OpenHarmony规范零碎的第⑤期,次要内容如下:@toc speexdsp移植后已提交至openhamrony sig仓库:https://gitee.com/openharmony... 七、Speexdsp功能分析将speexdsp退出openharmony编译体系后,能胜利编译进去动态链接库和测试用的可执行文件,并不代表移植三方库胜利。还要在开发板上运行测试其性能是否失常。speexdsp外围库剖析1.库实现形式编程语言:C原生平台:linux2.依赖剖析除C规范库外,无其余第三方库依赖3.license以及版权依据speex官网https://speex.org/的信息,speexdsp应用的开源协定为revised BSD license(revised BSD license又称为3-clause BSD License或者BSD 3-Clause License,个别应用BSD 3-Clause)OpenHamorny第三方开源软件许可证类型必须是OSI明确定义的。OSI明确定义的开源许可证有:https://opensource.org/licens...BSD 3-Clause License是OSI明确定义的开源许可。如下类型许可证能够引入到OpenHarmony我的项目中: Apache License 2.0Mulan Permissive Software License, Version 2BSD 2-clauseBSD 3-clauseDOM4J LicensePostgreSQL LicenseEclipse Distribution License 1.0MITISCICUUniversity of Illinois/NCSAW3C Software Licensezlib/libpngAcademic Free License 3.0Python Software Foundation LicensePython Imaging Library Software LicenseBoost Software License Version 1.0WTF Public LicenseUNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWAREZope Public License 2.0如下类型许可证不倡议引入到OpenHarmony我的项目中: GNU GPL 1, 2, 3GNU Affero GPL 3GNU LGPL 2, 2.1, 3QPLSleepycat LicenseServer Side Public License (SSPL) version 1Code Project Open License (CPOL)BSD-4-Clause/BSD-4-Clause (University of California-Specific)Facebook BSD+Patents licenseNPL 1.0/NPL 1.1The Solipsistic Eclipse Public LicenseThe "Don't Be A Dick" Public LicenseJSON LicenseBinary Code License (BCL)Intel Simplified Software LicenseJSR-275 LicenseMicrosoft Limited Public LicenseAmazon Software License (ASL)Java SDK for Satori RTM licenseRedis Source Available License (RSAL)Booz Allen Public LicenseCreative Commons Non-CommercialSun Community Source License 3.0Common Development and Distribution Licenses: CDDL 1.0 and CDDL 1.1Common Public License: CPL 1.0Eclipse Public License: EPL 1.0IBM Public License: IPL 1.0Mozilla Public Licenses: MPL 1.0, MPL 1.1, and MPL 2.0Sun Public License: SPL 1.0Open Software License 3.0Erlang Public LicenseUnRAR LicenseSIL Open Font LicenseUbuntu Font License Version 1.0IPA Font License Agreement v1.0Ruby LicenseEclipse Public License 2.0: EPL 2.0speexdsp的license以及版权内容如下: ...

October 12, 2022 · 7 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统④

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止读者姥爷们失去看上来的急躁,分享将以连载的形式进行。 下期预报:speexdsp功能分析和功能测试本期为移植speexdsp到OpenHarmony规范零碎的第④期,次要内容如下: speexdsp移植后已提交至openhamrony sig仓库:https://gitee.com/openharmony... 五、在OpenHarmony编译体系下增量编译Speexdsp倡议先增量编译生成三方库的动态链接库和可执行文件,验证是否胜利把三方库退出OpenHarmonybian编译体系。 胜利编译出so和可执行文件,即胜利把三方库退出到ohos编译体系。之后还要验证三方库在ohos运行,性能是否失常。性能失常能力视为移植胜利。举荐增量编译出三方库的动态链接库和测试用例,不举荐的做法是把三方库退出openharmony编译体系后全量编译出烧录ohos用的固件。 第一是因为全量编译ohos对电脑的性能,特地是内存要求比拟高(笔者的笔记本上的虚拟机内存给到了32G,对学生开发者来讲,编译ohos的硬件门槛还是有点高的。)增量编译对内存要求不是特地高。(笔者的8G内存二合一笔记本都能够编译进去,并且虚拟机内存只给到了4GB左右)第二是因为全量编译破费工夫较多(笔者残缺编译出一个固件须要3个小时左右。)增量编译须要的工夫绝对较少(笔者大略只须要破费9分钟左右)全量编译和增量编译概念 全量编译是将所有文件从新编译,从新生成解决方案就是全量编译增量编译只对改变的文件进行编译,执行生成解决方案就是增量编译在源码目录执行如下命令,进行增量编译: ./build.sh --product-name rk3568 --ccache --build-target=speexdsp --target-cpu arm64ohos3.2beta1版本开始新增个性,反对64位零碎的编译,默认状况下编译的都是32位零碎,在编译命令中增加--target-cpu arm64即可构建64位零碎,编译so和可执行文件的执行语句更改为: 放慢本地编译的一些参数编译时,适当抉择增加以下的编译参数能够放慢编译的过程。 增加--ccache参数: 原理:ccache会缓存c/c++编译的编译输入,下一次在编译输出不变的状况下,间接复用缓存的产物。装置: 疾速装置:执行sudo apt-get install ccache命令。 应用:执行./build.sh --product-name 产品名 --ccache命令。增加--fast-rebuild参数 原理:编译流程次要分为:preloader->loader->gn->ninja这四个过程,在本地没有批改gn和产品配置相干文件的前提下,增加--fast-rebuild会让你间接从ninja编译开始。应用:执行./build.sh --product-name 产品名 --fast-rebuild命令。增加enable_notice_collection=false参数 原理:省略掉收集开源软件模块的license的过程。应用:执行./build.sh --product-name 产品名 --gn-args --enable_notice_collection=false --ccache命令。增加--build-target参数 该参数用于指定编译模块,如何找模块的名字: 相干仓下BUILD.gn中关注group、ohos_shared_library、ohos_executable等关键字。./build.sh --product-name 产品名 --build-target 模块名 --build-only-gn生成build.ninja,而后去该文件中查找相干模块名。应用:执行./build.sh --product-name 产品名 --build-target ark_js_host_linux_tools_packages命令。解决编译报错(笔者了解移植过程必定不会是一帆风顺的) 执行编译命令后,有局部报错1.局部头文件缺失报错‘speexdsp_config_types.h’ file not found 编译找不到third_party/speexdsp/include/speex目录下的speexdsp_config_types.h文件。 ../../third_party/speexdsp/include/speex/speexdsp_types.h:122:10: fatal error: 'speexdsp_config_types.h' file not found 解决办法: speexdsp_types.h 是由linux下编译生成的,因而须要在Linux下编译整个Speexdsp源码,而后把在speexdsp原生库目录下build/include/speex目录生成的speexdsp_types.h文件拷贝到要ohos源码下的third_party/speexdsp/include/speex目录下,2.json文件语法产生谬误。 解决办法:查看out/rk3568目录下build.log文件,查看源码/build/subsystem_config.json文件语法笔者呈现这个问题的起因是json文件语法产生谬误,在subsystem_config.json文件第一行的{没有匹配},增加下来就没问题。 编译胜利解决完编译报错后,再次执行编译命令。 ./build.sh --product-name rk3568 --ccache --build-target=speexdsp --target-cpu arm64 ...

October 12, 2022 · 4 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统③

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术,从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止读者姥爷们失去看上来的急躁,分享将以连载的形式进行。 下期预报:在OpenHarmony的编译体系下编译speexdsp的so和测试用的可执行文件,以及编译报错的解决办法。本期为移植speexdsp到OpenHarmony规范零碎的第③期,次要内容如下: speexdsp移植后已提交至openhamrony sig仓库:https://gitee.com/openharmony... 四、将三方库退出到OpenHarmony的编译体系依据上一步剖析后果,编写gn文件,将三方库退出到OpenHarmony的编译体系。 OpenHarmony编译构建子系统提供了一个基于Gn和ninja的编译构建框架。依据产品配置,编译生成对应的镜像包。其中编译构建流程为: 应用Gn配置构建指标。Gn运行后会生成ninja文件。通过运行ninja来执行编译工作。OpenHarmony三方库编译环境搭建本次移植时在openharmony3.2Beta1版本上运行的,所以须要筹备openharmony3.2Beta1的源码。先在Widows上装置虚拟机,在虚构机上安装Ubuntu18.04或者20.04。笔者应用的为Ubuntu20.04。 1.将Ubuntu Shell环境批改为bash 关上终端执行sudo dpkg-reconfigure dash将Shell由dash改为bash。 抉择<否> 更改胜利如下: 2.下载华为集成开发环境 DevEco Device Tool Linux版本,目前最新版本号为3.1.0.200 HUAWEI DevEco Device Tool(以下简称DevEco Device Tool)是OpenHarmony面向智能设施开发者提供的一站式集成开发环境,反对OpenHarmony的组件按需定制,反对代码编辑、编译、烧录和调试等性能,反对C/C++语言,以插件的模式部署在Visual Studio Code上。间接在Ubuntu上关上firefox输出下载地址下载 解压DevEco Device Tool安装包,并对解压后的文件赋权unzip devicetool-linux-tool-3.1.0.200.zipchmod u+x devicetool-linux-tool-3.1.0.200.sh 装置DevEco Device执行命令装置DevEco Device sudo ./devicetool-linux-tool-3.1.0.200.sh 终端打印出这条信息阐明装置胜利 3.获取规范零碎源码执行命令sudo apt-get install git git-lfs装置git客户端和git-lfs 配置git用户信息 git config --global user.name "yourname"git config --global user.email "your-email-address"git config --global credential.helper storegit config --global credential.helper store执行这个命令会在本地生成一个文本,上边记录配置。而后再拉取代码就不必再输出账号信息了。 进入gitee官网个人主页,个人头像下方就是user.name再进入设置点击邮箱治理就能够失去你的your-email-address装置gitee码云repo工具sudo apt-get install curlsudo curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o /usr/local/bin/reposudo chmod a+x /usr/local/bin/reposudo pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests ...

October 12, 2022 · 10 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统②

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术,从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止读者姥爷们失去看上来的急躁,分享将以连载的形式进行。本期为移植speexdsp到OpenHarmony规范零碎的第②期,次要内容如下: 在linux上生成speexdsp的so动态链接库和.a动态链接库 make和make install后会生成speexdsp的.so动态链接库和.a动态链接库makemake install 其中build/lib目录下: ├── libspeexdsp.a /*动态库*/├── libspeexdsp.la /*记录同名动静库和动态库相干信息的la文本文件*/├── libspeexdsp.so -> libspeexdsp.so.1.5.2 ├── libspeexdsp.so.1 -> libspeexdsp.so.1.5.2 /*符号链接*/├── libspeexdsp.so.1.5.2 /*动静库*/└── pkgconfig /*pkgconfig 的 *.pc文件*/ └── speexdsp.pclinux下的so、o、lo、a、la文件 o: 编译的指标文件a: 动态库,其实就是把若干o文件打了个包so: 动态链接库(共享库) 动静库文件必须以lib结尾,以.so结尾lo: 应用libtool编译出的指标文件,其实就是在o文件中增加了一些信息la: 应用libtool编译出的库文件,其实是个文本文件,记录同名动静库和动态库的相干信息常识拓展: 函数库分为动态库a和动静库.so两种:①动态库在程序编译时会被连贯到指标代码中,程序运行时将不再须要该动态库。②动静库在程序编译时并不会被连贯到指标代码中,而是在程序运行是才被载入,因而在程序运行时还须要动静库存在。符号链接(symbolic link)是 Linux 零碎中的一种文件,它指向零碎中的另一个文件或目录。符号链接相似于 Windows 零碎中的快捷方式。在linux中,*.la是记录同名动静库和动态库相干信息的文本文件。三、剖析speexdsp在规范Linux零碎的编译过程文件剖析speexdsp在规范Linux零碎的编译过程文件,找到生成so库和测试用的可执行文件所需的.c源代码,头文件门路,cflags编译器标记,所依赖的库。 比照编译前后的speexdsp原生库构造tree工具能以树形的形式显示指定目录的层级构造。非绿色字体是编译后生成的文件。├── $\color {#0F0} {acinclude.m4}$├── $\color {#0F0} {AUTHORS}$ #speexdsp我的项目作者信息├── $\color {#0F0} {autogen.sh}$ #autogen.sh脚本配置文件├── aclocal.m4 #运行aclocal后生成的aclocal.m4文件和一个缓冲文件夹autom4te.cache├── autom4te.cache│   ├── output.0│   ├── output.1│   ├── output.2│   ├── requests│   ├── traces.0│   ├── traces.1│   └── traces.2├── build│   ├── include│   │   └── speex│   │   ├── speexdsp_config_types.h│   │   ├── speexdsp_types.h│   │   ├── speex_echo.h│   │   ├── speex_jitter.h│   │   ├── speex_preprocess.h│   │   └── speex_resampler.h│   ├── lib│   │   ├── libspeexdsp.a│   │   ├── libspeexdsp.la│   │   ├── libspeexdsp.so -> libspeexdsp.so.1.5.2│   │   ├── libspeexdsp.so.1 -> libspeexdsp.so.1.5.2│   │   ├── libspeexdsp.so.1.5.2│   │   └── pkgconfig│   │   └── speexdsp.pc│   └── share│   └── doc│   └── speexdsp│   └── manual.pdf├── $\color {#0F0} {ChangeLog}$#spexxds原生库更新日志(和本次移植无关信息)├── $\color {#0F0} {compile}$├── $\color {#0F0} {config.guess}$#这个是在构建环境上运行的一个脚本,它用来猜想构建机的配置环境,因为这个脚本是在构建机上运行,所以它能够动静执行uname等命令来取得构建机的环境,所以咱们个别不要指定这个变量,从而让脚本主动取得。├── config.h#Config.h是主动生成的头文件,是依据配置文件Config.h.in生成的。config.h次要用于代码移植,产生可移植代码。├── config.h.in#autoheader后造成config.h.in├── config.log#该文件在执行configure文件时动静生成,蕴含了一些行号信息,示意一个文件在哪一行执行,以及执行的什么命令,因而能够晓得测试是在哪个地位中实现。├── $\color {#0F0} {config.status}$#这是脚本文件,运行该脚本能够生成一个以后雷同的配置,从而防止再次执行configure这个比拟宏大的代码。也就是config.log生成的是文本文件,而config.status生成的则是命令脚本文件。├── $\color {#0F0} {config.sub}$#这个是将host target build变量正则化的一个脚本,它的sub就是substitute的缩写。因为用户提供的build可能并不合乎脚本正规的四元组或者三元组的构造,所以这个脚本将它转换为规范的格局,从而能够进行格式化解决。├── $\color {#0F0} {configure}$#这个是咱们须要监测环境的次要入口文件,应用该文件能够生成Makefile文件,它会替换Makefile中须要替换的变量。├── $\color {#0F0} {configure.ac}$#该文件为autoconfigure文件应用的一个文件,该文件用来生成configure文件,这个文件个别是开发者保护,咱们装置该软件的时候只须要执行configure就能够,这个configure.ac咱们个别不必理睬├── $\color {#0F0} {COPYING}$├── $\color {#0F0} {depcomp}$#automake --add-missing命令生成install-sh, missing, depcomp文件├── $\color {#0F0} {doc}$│   ├── $\color {#0F0} {celp_decoder.eps}$│   ├── $\color {#0F0} {celp_decoder.odg}$│   ├── $\color {#0F0} {components.eps}$│   ├── $\color {#0F0} {components.odg}$│   ├── $\color {#0F0} {echo_path.eps}$│   ├── $\color {#0F0} {echo_path.odg}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   ├── $\color {#0F0} {manual.lyx}$│   ├── $\color {#0F0} {manual.pdf}$│   ├── $\color {#0F0} {programming.html}$│   ├── $\color {#0F0} {ref_shaping.eps}$│   ├── $\color {#0F0} {sampledec.c}$│   ├── $\color {#0F0} {sampleenc.c}$│   ├── $\color {#0F0} {speex_abs.eps}$│   ├── $\color {#0F0} {speex_abs.odg}$│   ├── $\color {#0F0} {speex_analysis.eps}$│   └── $\color {#0F0} {speex_analysis.odg}$├── $\color {#0F0} {Doxyfile}$├── $\color {#0F0} {html}$│   ├── $\color {#0F0} {speex.png}$│   ├── $\color {#0F0} {speex.webprj}$│   └── $\color {#0F0} {speex.xcf}$├── $\color {#0F0} {include}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   └── $\color {#0F0} {speex}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   ├── $\color {#0F0} {speex_buffer.h}$│   ├── speexdsp_config_types.h│   ├── $\color {#0F0} {speexdsp_config_types.h.in}$│   ├── $\color {#0F0} {speexdsp_types.h}$│   ├── $\color {#0F0} {speex_echo.h}$│   ├── $\color {#0F0} {speex_jitter.h}$│   ├── $\color {#0F0} {speex_preprocess.h}$│   └── $\color {#0F0} {speex_resampler.h}$├── $\color {#0F0} {INSTALL}$├── $\color {#0F0} {install-sh}$#automake --add-missing命令生成install-sh, missing, depcomp文件├── $\color {#0F0} {libspeexdsp}$│   ├── $\color {#0F0} {arch.h}$│   ├── $\color {#0F0} {bfin.h}$│   ├── $\color {#0F0} {buffer.c}$│   ├── buffer.lo│   ├── buffer.o│   ├── $\color {#0F0} {echo_diagnostic.m}$│   ├── $\color {#0F0} {fftwrap.c}$│   ├── $\color {#0F0} {fftwrap.h}$│   ├── fftwrap.lo│   ├── fftwrap.o│   ├── $\color {#0F0} {filterbank.c}$│   ├── $\color {#0F0} {filterbank.h}$│   ├── filterbank.lo│   ├── filterbank.o│   ├── $\color {#0F0} {fixed_arm4.h}$│   ├── $\color {#0F0} {fixed_arm5e.h}$│   ├── $\color {#0F0} {fixed_bfin.h}$│   ├── $\color {#0F0} {fixed_debug.h}$│   ├── $\color {#0F0} {fixed_generic.h}$│   ├── $\color {#0F0} {jitter.c}$│   ├── jitter.lo│   ├── jitter.o│   ├── $\color {#0F0} {kiss_fft.c}$│   ├── $\color {#0F0} {_kiss_fft_guts.h}$│   ├── $\color {#0F0} {kiss_fft.h}$│   ├── $\color {#0F0} {kiss_fftr.c}$│   ├── $\color {#0F0} {kiss_fftr.h}$│   ├── libspeexdsp.la│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   ├── $\color {#0F0} {math_approx.h}$│   ├── $\color {#0F0} {mdf.c}$│   ├── mdf.lo│   ├── mdf.o│   ├── $\color {#0F0} {misc_bfin.h}$│   ├── $\color {#0F0} {os_support.h}$│   ├── $\color {#0F0} {preprocess.c}$│   ├── preprocess.lo│   ├── preprocess.o│   ├── $\color {#0F0} {pseudofloat.h}$│   ├── $\color {#0F0} {resample.c}$│   ├── resample.lo│   ├── $\color {#0F0} {resample_neon.h}$│   ├── resample.o│   ├── $\color {#0F0} {resample_sse.h}$│   ├── $\color {#0F0} {scal.c}$│   ├── scal.lo│   ├── scal.o│   ├── $\color {#0F0} {smallft.c}$│   ├── $\color {#0F0} {smallft.h}$│   ├── smallft.lo│   ├── smallft.o│   ├── $\color {#0F0} {testdenoise}$ │   ├── $\color {#0F0} {testdenoise.c}$ #测试乐音克制的文件│   ├── testdenoise.o│   ├── $\color {#0F0} {testecho}$│   ├── $\color {#0F0} {testecho.c}$ #测试声学回音打消的文件│   ├── testecho.o│   ├── $\color {#0F0} {testjitter}$ # 测试抖动的文件│   ├── $\color {#0F0} {testjitter.c}$│   ├── testjitter.o│   ├── $\color {#0F0} {testresample}$ │   ├── $\color {#0F0} {testresample2}$│   ├── $\color {#0F0} {testresample2.c}$#测试重采样的文件│   ├── testresample2.o│   ├── $\color {#0F0} {testresample.c}$#测试重采样的文件│   ├── testresample.o│   └── $\color {#0F0} {vorbis_psy.h}$├── $\color {#0F0} {libtool}$├── ltmain.sh├── m4│   ├── libtool.m4│   ├── lt~obsolete.m4│   ├── ltoptions.m4│   ├── ltsugar.m4│   └── ltversion.m4├── $\color {#0F0} {macosx}$│   ├── $\color {#0F0} {English.lproj}$ │   │   └── $\color {#0F0} {InfoPlist.strings}$ │   ├── $\color {#0F0} {Info.plist}$ │   ├── $\color {#0F0} {Speex_Prefix.pch}$ │   ├── $\color {#0F0} {Speex_UB.xcodeproj}$│   │   └── $\color {#0F0} {project.pbxproj}$│   └── $\color {#0F0} {Speex.xcodeproj}$│   └── $\color {#0F0} {project.pbxproj}$├── Makefile├── $\color {#0F0} {Makefile.am}$├── Makefile.in├── $\color {#0F0} {missing}$#automake --add-missing命令生成install-sh, missing, depcomp文件├── $\color {#0F0} {NEWS}$├── $\color {#0F0} {README}$├── $\color {#0F0} {README.blackfin}$#汇聚式处理器Blackfin是由ADI和Intel公司联合开发的微信号架构(MSA)├── $\color {#0F0} {README.Trimedia}$#Trimedia 是由Philips公司1996年推出的新一代媒体处理器(Media Processor)芯片。├── $\color {#0F0} {README.win32}$#Win32是指Microsoft Windows操作系统的32位环境├── $\color {#0F0} {regression-fixes}$│   └── $\color {#0F0} {1-resampler_unsigned_fix.patch}$├── $\color {#0F0} {regressions}$├── $\color {#0F0} {SpeexDSP.kdevelop}$├── speexdsp.pc├── $\color {#0F0} {speexdsp.pc.in}$├── SpeexDSP.spec├── $\color {#0F0} {SpeexDSP.spec.in}$├── stamp-h1├── $\color {#0F0} {symbian}$│   ├── $\color {#0F0} {bld.inf}$│   ├── $\color {#0F0} {config.h}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   └── $\color {#0F0} {speex.mmp}$├── $\color {#0F0} {ti}$#TI公司DSP芯片│   ├── $\color {#0F0} {config.h}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   ├── $\color {#0F0} {os_support_custom.h}$│   ├── $\color {#0F0} {speex_C54_test}$│   │   ├── Makefile│   │   ├── $\color {#0F0} {Makefile.am}$│   │   ├── Makefile.in│   │   ├── $\color {#0F0} {speex_C54_test.cmd}$│   │   └── $\color {#0F0} {speex_C54_test.pjt}$│   ├── $\color {#0F0} {speex_C55_test}$│   │   ├── Makefile│   │   ├── $\color {#0F0} {Makefile.am}$│   │   ├── Makefile.in│   │   ├── $\color {#0F0} {speex_C55_test.cmd}$│   │   └── $\color {#0F0} {speex_C55_test.pjt}$│   └── $\color {#0F0} {speex_C64_test}$│   ├── Makefile│   ├── $\color {#0F0} {Makefile.am}$│   ├── Makefile.in│   ├── $\color {#0F0} {speex_C64_test.cmd}$│   └── $\color {#0F0} {speex_C64_test.pjt}$├── $\color {#0F0} {tmv}$│   ├── $\color {#0F0} {config.h}$│   ├── $\color {#0F0} {fftwrap_tm.h}$│   ├── $\color {#0F0} {filterbank_tm.h}$│   ├── $\color {#0F0} {fixed_tm.h}$│   ├── $\color {#0F0} {_kiss_fft_guts_tm.h}$│   ├── $\color {#0F0} {kiss_fftr_tm.h}$│   ├── $\color {#0F0} {kiss_fft_tm.h}$│   ├── $\color {#0F0} {mdf_tm.h}$│   ├── $\color {#0F0} {misc_tm.h}$│   ├── $\color {#0F0} {preprocess_tm.h}$│   ├── $\color {#0F0} {profile_tm.h}$│   └── $\color {#0F0} {speex_config_types.h}$├── $\color {#0F0} {TODO}$└── $\color {#0F0} {win32}$ ├── $\color {#0F0} {config.h}$ ├── $\color {#0F0} {libspeexdsp}$ │   ├── $\color {#0F0} {libspeexdsp.dsp}$ │   ├── $\color {#0F0} {libspeexdsp.dsw}$ │   ├── $\color {#0F0} {libspeexdsp_dynamic.dsp}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   └── Makefile.in ├── $\color {#0F0} {libspeexdsp.def}$ ├── Makefile ├── $\color {#0F0} {Makefile.am}$ ├── Makefile.in ├── $\color {#0F0} {speex.iss}$ ├── $\color {#0F0} {VS2003}$ │   ├── $\color {#0F0} {libspeexdsp}$ │   │   ├── $\color {#0F0} {libspeexdsp.vcproj}$ │   │   ├── Makefile │   │   ├── $\color {#0F0} {Makefile.am}$ │   │   └── Makefile.in │   ├── $\color {#0F0} {libspeexdsp.sln}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   ├── Makefile.in │   └── $\color {#0F0} {tests}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   ├── Makefile.in │   ├── $\color {#0F0} {testdenoise.vcproj}$ │   ├── $\color {#0F0} {testecho.vcproj}$ │   └── $\color {#0F0} {testresample.vcproj}$ ├── $\color {#0F0} {VS2005}$ │   ├── $\color {#0F0} {libspeexdsp}$ │   │   ├── $\color {#0F0} {libspeexdsp.vcproj}$ │   │   ├── Makefile │   │   ├── $\color {#0F0} {Makefile.am}$ │   │   └── Makefile.in │   ├── $\color {#0F0} {libspeexdsp.sln}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   ├── Makefile.in │   └── $\color {#0F0} {tests}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   ├── Makefile.in │   ├── $\color {#0F0} {testdenoise.vcproj}$ │   ├── $\color {#0F0} {testecho.vcproj}$ │   └── $\color {#0F0} {testresample.vcproj}$ └── $\color {#0F0} {VS2008}$ ├── $\color {#0F0} {libspeexdsp}$ │   ├── $\color {#0F0} {libspeexdsp.vcproj}$ │   ├── Makefile │   ├── $\color {#0F0} {Makefile.am}$ │   └── Makefile.in ├── $\color {#0F0} {libspeexdsp.sln}$ ├── Makefile ├── $\color {#0F0} {Makefile.am}$ ├── Makefile.in └── $\color {#0F0} {tests}$ ├── Makefile ├── $\color {#0F0} {Makefile.am}$ ├── Makefile.in ├── $\color {#0F0} {testdenoise.vcproj}$ ├── $\color {#0F0} {testecho.vcproj}$ └── $\color {#0F0} {testresample.vcproj}$**剖析原生库下make.am文件make.am是一种比Makefile文件形象程序更高的编译规定文件。 在外面能够指定生成目录,编译用的源码,编译的时候依赖哪些库,要装置到什么目录。原生库根目录下的make.am如下## Process this file with automake to produce Makefile.in. -*-Makefile-*-# To disable automatic dependency tracking if using other tools than# gcc and gmake, add the option 'no-dependencies'AUTOMAKE_OPTIONS = 1.8ACLOCAL_AMFLAGS = -I m4pkgconfigdir = $(libdir)/pkgconfigpkgconfig_DATA = speexdsp.pcEXTRA_DIST = SpeexDSP.spec SpeexDSP.spec.in SpeexDSP.kdevelop speexdsp.pc.in README.blackfin#Fools KDevelop into including all filesSUBDIRS = libspeexdsp include doc win32 symbian ti DIST_SUBDIRS = libspeexdsp include doc win32 symbian tirpm: dist rpmbuild -ta ${PACKAGE}-${VERSION}.tar.gz父目录须要蕴含子目录,在父目录下的Makefile.am中须要增加: SUBDIRS = 子目录。可知speexdsp子目录为libspeexdsp include doc win32 symbian ti 。再逐渐查看各个文件夹源码可知只有libspeexdsp include文件夹与本次移植无关。所以接下来查看libspeexdsp目录下的make.am文件 ...

October 12, 2022 · 7 min · jiezi

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统①

大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与华为、软通能源、润和软件、拓维信息、深开鸿等公司一起,学习和钻研操作系统技术,从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:因为想要分享的内容较多,为防止观众姥爷们失去看上来的急躁,分享将以连载的形式进行。本期为移植speexdsp到OpenHarmony规范零碎的第①期,次要内容如下: Speexdsp提到Speexdsp不得不先提到开源语音编解码器Speex 如下是ACM Surveys中收录的题目为《Survey on Application-Layer Mechanisms for Speech Quality Adaptation in VoIP》综述中的一张图表。 它总结了一些罕用的可变比特率编解码器,并且做了性能方面的比拟。其中惟一Open-source开源的两个编解码器之一就是speex。 2007年12月11日Speex1.2beta3中首次将Speex中所有非编解码器组件(预处理器、回声打消、抖动缓冲区)都已移至新的libspeexdsp中。2014年12月6日推出的Speex 1.2rc2和SpeexDSP1.2rc2正式将speex编解码器库和speexDSP库拆分为独自的源代码。Speexdsp性能预处理器预处理器被设计为在运行编码器之前在音频上应用。预处理器提供三个次要性能: 噪声克制自动增益管制(AGC)语音流动检测(VAD)自适应抖动缓冲区当通过UDP或RTP传输语音(或任何相干内容)时,包可能会失落,以不同的提早达到,甚至乱序。抖动缓冲区的目标是从新排序数据包,并缓冲足够长的工夫,以便它们能够被发送以进行解码。声学回声消除器回声打消是为了进步远端品质 在任何免提通信零碎中,远端语音通过本地扬声器播放。音频在房间内流传,并被麦克风捕捉。如果从麦克风捕捉的音频被间接发送到近程端,那么用户就会听到远端语音的回声。声学回声消除器设计用于在声学回声发送到远端之前打消它。重采样器这个重采样器能够用于在任意两个速率之间进行转换(比率必须是有理数),并且能够管制品质/复杂性的衡量。 重采样器在某些状况下将音频从一个采样率转换到另一个采样率。它能够用于混合具备不同采样率的流、用于反对声卡不反对的采样率、用于转码等。Speexdsp移植到OpenHarmony规范零碎OpenHarmony三方库次要是基于规范 Linux 零碎的 c/c++ 开源库,所以三方库的移植工作,首先是在规范 Linux 零碎搭建环境、编译与验证,而后将三方库的编译退出到 OpenHarmony 工程的构建中。 三方库移植的次要开发步骤如下: 在规范Linux零碎下载三方库源码,搭建开发环境,编译整个源码工程;剖析在规范Linux零碎的编译过程文件,提取编译须要的源文件、编译依赖等信息;依据上一步剖析后果,编写gn文件,将三方库退出到OpenHarmony的编译体系;验证编译后果,在OpenHarmony的out目录是否生成指标库;测试demo/测试单元用例执行。一、下载源码下载三方库源码时,优先应用最新版,不要下载master分支,下载最新的版本分支。移植speexdsp下载的是1.2.1版本。Speexdsp源码下载地址:https://github.com/xiph/speexdsp 二、搭建开发环境,生成Makefile编译构建speexdsp。不同的原生三方库提供的编译形式不雷同,依据原生三方库的readme文件或者manual用户手册能够晓得该如何编译Speexdsp在linux下的编译装置,在linux终端输出如下语句: 装置make工具。 sudo apt-get install make装置autoAutotools工具 sudo apt-get install autoconf automake libtoolGNU Autotools框架包含三个次要的包:Autoconf,Automake,和Libtool。GNU软件的构建过程,一般来说, 蕴含三个步骤:tar xfv xxx.tar.gz./configuremakemake install该过程个别依赖两个文件, configure和Makefile文件。 Autoconf/Automake就是一套用于主动构建configure脚本和Makefile文件的工具。个别应用Makefile.am构建的三方库,原生库中存在autogen.sh,configure.ac文件。由makefile.am主动生成makefile。 ./autogen.sh./autogen.sh之后咱们能够运行./configure --help查看configure配置./configure --help[email protected]:~/Desktop/SpeexDSP-1.2.1$ ./configure --help`configure' configures speexdsp 1.2.1 to adapt to many kinds of systems.Usage: ./configure [OPTION]... [VAR=VALUE]...To assign environment variables (e.g., CC, CFLAGS...), specify them asVAR=VALUE. See below for descriptions of some of the useful variables.Defaults for the options are specified in brackets.Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..']Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX]By default, `make install' will install all the files in`/usr/local/bin', `/usr/local/lib' etc. You can specifyan installation prefix other than `/usr/local' using `--prefix',for instance `--prefix=$HOME'.For better control, use the options below.Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/speexdsp] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR]Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program namesSystem types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD]Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --enable-sse Enable SSE support --enable-neon Enable NEON support --enable-fixed-point Compile as fixed-point --disable-float-api Disable the floating-point API --disable-examples Do not build example programs, only the library --enable-arm4-asm Make use of ARM4 assembly optimizations --enable-arm5e-asm Make use of ARM5E assembly optimizations --enable-blackfin-asm Make use of Blackfin assembly optimizations --enable-fixed-point-debug Debug fixed-point implementation --enable-resample-full-sinc-table Resample full SINC table (no interpolation) --enable-ti-c55x Enable support for TI C55X DSPOptional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-fft=choice use an alternate FFT implementation. The available choices are kiss (default fixed point), smallft (default floating point), gpl-fftw3 and proprietary-intel-mklSome influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path FFT_CFLAGS C compiler flags for FFT, overriding pkg-config FFT_LIBS linker flags for FFT, overriding pkg-configUse these variables to override the choices made by `configure' or to helpit to find libraries and programs with nonstandard names/locations.Report bugs to <[email protected]>.在下载到linux中的speexdsp中新建build目录 ...

October 12, 2022 · 10 min · jiezi

关于openharmony:OpenHarmony社区运营报告2022年9月

篇首语在凋谢原子开源基金会、OpenAtom OpenHarmony(简称“OpenHarmony”)工作委员会、会员及共建单位和开发者的共同努力下,OpenHarmony在技术、商业、生态、开源建设等各个方面获得突破性停顿。 9月,工作委员会公布《OpenHarmony社区经营报告(2022年9月)》,蕴含代码奉献、生态停顿、社区治理、技术停顿、社区活动、社区及官网经营等要害成绩,以便社区搭档、宽广开发者更理解OpenHarmony,共建可继续倒退的开源生态系统,凋敝生态。 本月快讯近期,2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛在北京圆满举办。 深圳市工业和信息化局和福州市人民政府出台相干政策,利好OpenHarmony生态和产业倒退。凋谢原子开源基金会冯冠霖秘书长和OpenHarmony PMC携手公布《 OpenHarmony社区共建地图(第一期)》。 2022年9月9日,上海交通大学OpenHarmony技术俱乐部成立。 一、代码奉献1、公布《OpenHarmony社区共建地图(第一期)》 截至9月15日,OpenHarmony骨干上批改代码行数约3538万行(代码批改行数)。 其中,华为占92.09%,余下约40家共建单位累计共建骨干代码约280万行,占7.91%。社区持续保持衰弱沉闷,OpenHarmony Gitee指数满分100(Top 1)。 7月27日,2022凋谢原子寰球开源峰会上冯冠霖秘书长和PMC携手公布了《OpenHarmony社区共建地图(第一期)》。截至9月15日,28家单位打算在2022年12月30日前共建交付社区已布局的20个子系统的147个个性,已共建交付37个个性。 注:如果共建单位在9月15日官网度量Top20范畴内,以Top 20排序(否则以共建单位的首字母排序)。因排版须要,相邻公司技术域雷同,聚合到一行。 截至2022年7月14日,代码Top10奉献单位和Top20奉献集体,如下: 公布惟一序号的共建者勋章: 关上网页:https://metrics.openharmony.c...或扫描下方二维码,输出Gitee的邮箱和验证码点亮。 2、五家单位取得《OpenAtom OpenHarmony百人代码奉献单位》,工作将例行化发展 截至9月15日,社区共有约4700位贡献者。 其中,截至7月14日,有5家共建单位,华为终端有限公司、深圳开鸿数字产业倒退有限公司、江苏润和软件股份有限公司、软通能源信息技术(团体)股份有限公司、广东九联科技股份有限公司,每一家都别离有超过100位员工向OpenHarmony的骨干、或趣味组、或三方库的仓库提交代码并且被合入,因而作为共建单位代表取得《OpenAtom OpenHarmony百人代码奉献单位》致谢。 在OpenHarmony社区现阶段,为继续激励各雇主单位激励其单位员工直接参与到OpenHarmony的代码建设和开源开发体验,8月份,OpenHarmony工作委员会决定:《百人代码奉献单位》获得显著的共建业务成绩,后续例行发展,建立品牌,加大曝光度,如在《2022年OpenHarmony年报》中展现后果。 截至9月15日,5家单位继续激励员工向OpenHarmony提交代码,后果如下: 致谢OpenHarmony百人代码奉献单位 二、生态停顿1、2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛回顾 2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛在北京胜利举办,现场设置了OpenHarmony体验区。工业和信息化部副部长王江平、北京市副市长靳伟、工业和信息化部信息技术倒退司副司长王威伟,以及凋谢原子开源基金会理事长和秘书长等光临体验区并领导工作。 OpenHarmony体验区集中展现了面向智慧城市、交通、超高清、教育、智能家居、金融、政务7大行业的丰盛利用场景下的翻新成绩,相干生态搭档开发的18款软件发行版已通过兼容性测评。 OpenHarmony体验区照片 2、OpenHarmony生态兼容性测评工作进展● 目前,社区兼容性测评后果:53个厂家,134款产品通过兼容性测评注:数据截至2022年9月20日 ● 《金融数字化服务终端产品兼容性标准》公布 为解决各行业特有兼容性测试业务诉求,如:系统安全设计,外设兼容性等,兼容性工作组抉择金融服务终端作为首个扩大兼容性标准落地的行业,由深圳国家金融科技测评核心有限公司主导,中国银联、深开鸿、润和软件、深圳市证通电子股份有限公司(以下简称“证通电子”)等行业头部企业通过,并公布了《金融数字化服务终端产品兼容性标准》。在通过兼容性工作组、兼容性SIG等多轮生态技术评审后,于2022年8月10日正式公布到社区。如下是基于扩大兼容性标准,在金融畛域兼容性测评的实际计划。 ● 9月,2款平板通过兼容性测评:北京万里红有限公司的万里红SP10平板、统信软件技术有限公司的商务平板,通过兼容性测评。 三、社区治理● 工委会治理:证通电子作为B类捐赠人代表退出工委会治理。 ● 新成员单位:9月份,OpenHarmony我的项目新增B类捐赠人单位如下,深圳挖掘科技有限公司、统信软件技术有限公司、福州汇思博信息技术有限公司。 ● 技术治理:截至9月15日,OpenHarmony PMC,下辖共49个SIG。PMC明确了SIG负责实现代码的职责,并需定期向PMC汇报停顿。PMC评审通过《社区代码仓治理规定》,领导社区角色进行规范化操作。 9月9日,由OpenHarmony技术领导委员会(TSC)主办、上海交通大学承办的“上海交通大学OpenHarmony技术俱乐部成立典礼”在上海胜利举办,OpenHarmony技术俱乐部在上海交通大学胜利落地标记着OpenHarmony的产学研用单干进入快车道。 ● 生态治理:行业专委会新增公共安全专委会、游戏专委会;经超高清专委会近2个月的筹备工作,任命了超高清专委会的会长、副会长及秘书处;截至9月22日,新增福建联迪商用设施有限公司、福州汇思博信息技术有限公司、广东天波教育科技有限公司、青岛罗博数码科技有限公司、厦门雅基软件有限公司、深圳鸿元智通科技有限公司、深圳市新国都领取技术有限公司、深圳市优博讯科技股份有限公司、深圳市优博终端科技有限公司、中国信息通信研究院为OpenHarmony生态委员会成员。 ● 工作委员会工作组:9月,在OpenHarmony工作委员会上,任命润和软件-丽娜为品牌治理组组长,任命西方创科-宋懿赢为教育培训拓展组组长,任命华为-王治文为常识体系组组长。 四、技术倒退2022年7月30日公布OpenHarmony 3.2 Beta2:该版本次要针对规范零碎,对多个零碎能力进行加强,包含:窗口多热辨别发机制、电源治理重启复原机制、多模输出能力丰盛;指纹录入/认证/辨认框架;反对卡片增加、组件能力加强、反对单实例Ability迁徙、运行治理反对关上沙箱利用;包治理能力加强等。 ...

October 11, 2022 · 1 min · jiezi

关于openharmony:直播回顾OpenHarmony知识赋能第八期手把手教你实现涂鸦小游戏

OpenHarmony第八期常识赋能直播曾经在9月29日圆满闭幕!从9月15日起,资深OS框架开发工程师巴延兴老师于每周四进行分享,通过实现涂鸦小游戏来帮忙大家全面理解ArkUI框架的利用,拓宽常识边界。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,第八期共推出3节课程,直播回顾汇总如下,精彩内容不容错过,快点开始学习吧!一、常识赋能第八期第1课:ArkUI框架整体设计链接:https://segmentfault.com/a/11...内容介绍:本次分享介绍ArkUI整体框架、ArkUI和其余子系统的关联、布局渲染流程以及后续的课程布局,心愿能给宽广开发者一些启发,更好的开启学习之路。二、常识赋能第八期第2课:ArkUI自定义组件链接:https://segmentfault.com/a/11...内容介绍:本次分享次要介绍两方面内容,包含自定义组件流程和实际操作自定义组件。三、常识赋能第八期第3课:涂鸦小游戏的实现链接:https://segmentfault.com/a/11...内容介绍:本次分享将次要介绍三方面内容,包含OpenHarmony新增组件的介绍、新增组件的理论利用以及应用canvas组件,开发涂鸦小游戏,干货满满!

October 10, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony有氧拳击之应用端开发

一、简介继《OpenHarmony有氧拳击设施端的开发》后,本次为大家带来酷炫的利用端开发。如下,开发者随同着音乐,律动出拳后,那开发板每每播放“挨打”成果,这到底是怎么一回事?让咱们一探背地原理。这款拳击游戏开始时会播放音乐,而后以随机速度着落“击拳方块”。当小哥哥在击拳区域内挥拳时,游戏会判断方块的地位,依据不同地位确定播放一般击中或完满击中的动画成果。 二、动画游戏中一共应用两种动画:属性动画和Lottie动画,别离实现着落和击中的成果。“击拳方块”着落成果是利用属性动画进行批改偏移量来实现。游戏同时设置定时器,定时获取挥拳状态和“击拳方块”的所处地位,用于判断以后挥拳是否得分。若得分则依据击中区间来播放不同成果的Lottie动画。 三、“着落”动画 1、属性动画介绍从上图能够看到,游戏中“击拳方块”是自上而下匀速挪动。这种简略管制通用属性进行动画变动的动画,便很适宜应用属性动画来实现。属性动画是指组件的通用属性发生变化时,会依据开始状态和通用属性扭转后的状态作为动画关键帧,在指定工夫内实现突变成果。换言之咱们只须要确定设置好组件在动画完结时的组件属性,而后调用animateTo(value: AnimationOptions, event: ()=> void),即可创立属性动画。AnimationOptions对象阐明● 属性 ● 接口 2、动画实现编写“击拳方块”UI组件,并将组件的绝对布局偏移量offset属性,绑定到@state leftY1变量中,那么通过批改leftY1的值即可实现批改组件所在位置。 @State leftY1: string = '50%' @Builder LeftBoxing(offsetY: string) { Image($r('app.media.icon_boxing_left')) .width(144) .height(110) .offset({ x: "-30%", y: offsetY }) .touchable(true) } build() { Stack() { // ..... // 左侧 this.LeftBoxing(this.leftY1) // ..... } 3、创立动画调用animateTo显式动画来播放动画实现单个“击拳方块”自上而下地挪动,再通过设置delay参数实现4个“击拳方块”按程序别离挪动。 async leftAnimate(){ // 设置图标下滑动画 // 动画持续时间 let leftDuration = this.getRandomDuration() this.leftDuration = leftDuration // 提早时长 let leftDelay = leftDuration / (this.boxingCount - 1) // 设置开始工夫 let now = new Date this.animateLeftTimestamp = now.getTime() // 左侧animateTo动画 animateTo({ duration: leftDuration, curve: Curve.Linear,delay:0 * leftDelay ,iterations: 1 }, () => { this.leftY1 = "50%" }) animateTo({ duration: leftDuration, curve: Curve.Linear,delay:1 * leftDelay, iterations: 1 }, () => { this.leftY2 = "50%" }) animateTo({ duration: leftDuration, curve: Curve.Linear,delay:2 * leftDelay, iterations: 1 }, () => { this.leftY3 = "50%" }) animateTo({ duration: leftDuration, curve: Curve.Linear,delay:3 * leftDelay, iterations: 1 }, () => { this.leftY4 = "50%" }) let totalTime = leftDuration + 3 * leftDelay await this.sleep(totalTime) this.resetAnimate(true) this.leftAnimate() } ...

October 9, 2022 · 2 min · jiezi

关于openharmony:成长计划校园极客秀|基于OpenHarmony的智能阳台

前言本文由OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源开发者成长打算流动的参与者李建涛提供,具体论述了由搭载OpenHarmony零碎的拓维Niobe开发套件开发而来的智能阳台我的项目的全过程,包含我的项目流程、硬件筹备、软件剖析,以及问题剖析等,可能为开发者后续开发相似我的项目时提供一些参考。 一、我的项目设计与剖析1.1 我的项目形容基于OpenHarmony的智能阳台具体性能如下: 可能实时监测室外环境是否下雨;可能对接华为IoT物联网平台,从平台上接入设施实时查看到以后状态(窗户开关状况、室外是否下雨);当传感器采集到的数据超过事后设定的阈值时,本地启动关窗马达,并上报关窗信息;本设施可能胜利搭载OpenHarmony开发板的环境监测设施,并实现环境监测性能。1.2 零碎架构图基于OpenHarmony的智能阳台零碎架构图如下:依据零碎架构图,能够看出基于OpenHarmony的智能阳台次要是由三局部组成:数据采集:由雨滴传感器采集室外的环境状况;信号传送:开发板接管到传感器的数据进行判断,并且发送判断后的信号给电机驱动模块;开发板通过MQTT协定将数据上传到华为云平台;华为云平台也能够通过下发命令给开发板并将该命令的信号发送给电机驱动模块;执行部件:电机管制模块依据单片机的信号管制电机执行相应的动作(开窗或关窗的动作)。1.3 零碎流程图基于OpenHarmony的智能阳台零碎流程图如下:1.4 零碎原理图基于OpenHarmony的智能阳台零碎原理图如下:二、硬件筹备2.1 基于OpenHarmony的智能阳台硬件筹备状况如下:(1)预装windows零碎的PC机(2)拓维信息Niobe Wifi IoT开发板套件(3)雨滴传感器模块一套(4)电机及驱动电机模块一套(步进电机、直流电机、舵机等都能够)(5)USB Type-C线(用于连贯Windows工作台与Niobe Wifi IoT 开发板)2.2 硬件一:OpenHarmony开发板拓维Niobe开发板是一块专门基于OpenHarmony 3.0 LTS版本设计的开发板,板载高度集成了2.4GHz WLAN SoC芯片Hi3861V100。Hi3861V100 WiFi基带反对正交频分复用(OFDM)技术,并向下兼容间接序列扩频(DSSS)和补码键控(CCK)技术,反对IEEE 802.11 b/g/n协定的各种数据速率。Hi3861V100芯片集成高性能32bit微处理器、硬件安全引擎以及丰盛的外设接口,外设接口包含SPI、UART、I2C、PWM、GPIO和多路ADC。Hi3861V100芯片适应于智能家电等物联网智能终端畛域。拓维信息-OpenHarmony开发板(Talkweb Niobe)的相干材料能够在拓维信息的Gitee仓库中查看。2.3 硬件二:雨滴传感器模块本我的项目选用雨滴传感器,目标是监测天气状况并转成AO电压输入。(1)材质:雨滴传感器采纳FR-04双面资料,并用镀镍解决外表,具备抗氧化,导电性等性能。(2)输入模式:模拟量AO电压输入。(3)AO模拟输出,连贯单片机的AD口检测滴在下面的雨量大小(雨量越大输入电压越小)。2.4 硬件三:电机模块2.4.1 本我的项目选用直流电机目标是模仿窗户开关的情景(可依据本人的须要抉择步进电机或者舵机也是能够的)。电机正转肯定角度示意开窗,反转肯定角度示意关窗。注:直流电机的工作电压为5V左右。2.4.2 本我的项目选用了直流电机,故要另外选用L298N直流电机驱动模块,目标是驱动直流电机的运作。(1)本模块应用L298N作为主驱动芯片,具备驱动能力强,发热量低,抗干扰能力强的特点。(2)L298N直流电机驱动模块,反对双轴管制,其电路原理就是两个H桥电路。(3)该模块能够间接驱动两路3-30V直流电机,并提供5V输入接口,能够不便地管制直流电机速度和方向(4)该模块和管制端口的接口:管制直流电机时IN1、IN2和ENA为一组,IN1和IN2是逻辑信号,管制电机的正反转;OUT1和OUT2它们管制电机A,接在A+和A-。 三、软件剖析3.1 开发环境的搭建万事开头难,要实现基于OpenHarmony智能阳台的我的项目开发,首先第一件事就是开发环境的搭建。搭建好开发环境是学习OpenHarmony开发板以及后续我的项目开发的根底,其中包含装置虚拟机,配置Docker编译环境,下载开发板源码等步骤,每一步都十分重要,且须要确保零谬误。对于一个有教训的开发者来说,从开发环境的搭建到编译胜利可能会花一两天工夫,而对于像我这样刚接触OpenHarmony开发板的小白来说破费的工夫会更多,且十分艰难。对此我通过几天的查阅材料和观看一些导师的课程,一步一步地进行开发环境的搭建以及烧录过程。对此也编写了一篇《基于OpenHarmony开发板的环境搭建及烧录过程(拓维Niobe开发板)》的文章,具体文章已公布于Gitee上。链接如下https://gitee.com/lijiantao20...3.2 要害代码剖析本我的项目的代码能够在Gitee仓库里下载https://gitee.com/openharmony...代码目录如下:3.2.1 电机配置局部电机配置分为电机的初始化和设置电机的开关状态两个局部,相应代码地位都在motor.c文件里。(1) 电机的初始化应用开发板上的GPIO7、GPIO8管脚管制电机正反转,应用PWM输入电压管制电机转动速度。代码如下:GPIO7和GPIO8的配置一样。但GPIO7应用PWM0,而GPIO8应用PWM1。 IoTGpioInit(IoT_GPIO_IO_GPIO_7);//GPIO初始化IoTIoSetFunc(IoT_GPIO_IO_GPIO_7,IoT_IO_FUNC_GPIO_7_PWM0_OUT);//GPIO使能IoTGpioSetDir(IoT_GPIO_IO_GPIO_7, IoT_GPIO_DIR_OUT);//设置GPIO方向---IoT_GPIO_DIR_OUT---输入IoTGpioSetOutputVal(IoT_GPIO_IO_GPIO_7, IoT_GPIO_VALUE0);//设置GPIO输入电平---低电平IoTPwmInit(IoT_PWM_PORT_PWM0);//初始化PWM设施(2)设置电机的开关状态启动PWM信号输入:应用PWM给定输入频率和相应的占空比指定给端口。代码如下:开窗情景为:MotorStatusSet(ON); 电机正转。关窗情景为:MotorStatusSet(OFF); 电机反转。 void MotorStatusSet(Motor_Status_ENUM status){ if (status == ON)//正转 { IoTPwmStart(IoT_PWM_PORT_PWM1, 30, 15000); usleep(400000); IoTPwmStop(IoT_PWM_PORT_PWM1); } if (status == OFF)//反转 { IoTPwmStart(IoT_PWM_PORT_PWM0, 30, 15000); usleep(400000); IoTPwmStop(IoT_PWM_PORT_PWM0); }}3.2.2 雨滴传感器配置局部雨滴传感器配置分为雨滴传感器的初始化和应用ADC采集雨滴传感器数据两个局部,雨滴传感器的初始化代码地位在motor.c文件里,应用ADC采集雨滴传感器数据代码地位在balcony.c文件里。(1)雨滴传感器初始化应用开发板上的GPIO4管脚管制雨滴传感器(有雨输入低电平,雨量越大电压越低)代码如下: IoTGpioInit(IoT_GPIO_IO_GPIO_4);//GPIO初始化IoTIoSetFunc(IoT_GPIO_IO_GPIO_4,IoT_IO_FUNC_GPIO_4_GPIO);//GPIO使能IoTGpioSetDir(IoT_GPIO_IO_GPIO_4,IoT_GPIO_DIR_IN);//设置GPIO方向---IoT_GPIO_DIR_IN---输出(2)应用ADC采集雨滴传感器数据代码如下: //GPIO4的ADC转换通道号为ADC1ret = IoTAdcRead(IoT_ADC_CHANNEL_1,&val,IoT_ADC_EQU_MODEL_8, IoT_ADC_CUR_BAIS_DEFAULT, 256);//将电压数值转化为百位数,以便数据分析与察看val = IoTAdcConvertToVoltage(val);val = 3.4 - val;voltage = (float)((float)val)/3.5 * 100; 3.2.3 连贯华为IoT平台局部连贯华为IoT平台后,设施端可向华为IoT平台上传设施状态、数据等信息。同时华为IoT平台也能够下发命令给设施端,设施端收到命令后进行响应。咱们把设施端与华为IoT平台连贯分为获取华为IoT平台IP地址、华为IoT平台的搭建、编写上传数据相干代码以及编写下发命令相干代码四个局部。(1)获取华为IoT平台IP地址设施端与云端通信采纳的相干协定为MQTT协定。首先在华为IoT平台抉择MQTT协定的接入地址,并复制接入地址在PC终端上ping一下该接入地址。失去一个地址为121.36.42.100的IP地址,该地址为华为IoT平台的IP地址。 ...

October 8, 2022 · 2 min · jiezi

关于openharmony:OhosMPChart支持多种图表绘制的组件

简介Ohos-MPChart是OpenAtom OpenHarmony(简称“OpenHarmony”)零碎显示各种图表视图的三方组件,用于申明式利用开发,提供了多种多样的图表视图,包含折线图、曲线图、柱形图、饼状图、K线图、雷达图、气泡图。实用于各种统计后的数据以视觉直观的形式出现。应用场景Ohos-MPChart为宽广OpenHarmony利用开发者在解决数据时,使数据显示更加直观。尤其当初的大数据时代面对更加宏大的数据只须要导入Ohos-MPChart三方组件,而后调用相干的接口就能实现各种各样的图表以不便数据汇总。成果展现组件性能形容Ohos-MPChart是一个弱小的图表视图,次要提供多种多样的图表视图,包含折线图、曲线图、柱形图、饼状图、K线图等等,具体功能模块如下:开发环境装置IDE:反对DevEco Studio 3.0 Release(Build Version 3.0.0.993)版本。装置SDK:反对OpenHarmony API version 8 及以上版本应用办法图表一:折线图1.下载Ohos-MPChart组件并导入LineChart自定义组件: //下载mpchart组件 npm install @ohos/mpchart --saveimport { LineChart } from '@ohos/ohos_mpchart'OpenHarmony npm环境配置等更多内容,请参考装置教程如何装置OpenHarmony npm包https://gitee.com/openharmony...2.初始化数据 aboutToAppear() { this.lineData = this.initCurveData(45, 100); this.topAxis.setLabelCount(5, false); this.topAxis.setPosition(XAxisPosition.TOP); this.topAxis.setAxisMinimum(0); this.topAxis.setAxisMaximum(50); this.bottomAxis.setLabelCount(5, false);this.bottomAxis.setPosition(XAxisPosition.BOTTOM); this.bottomAxis.setAxisMinimum(0); this.bottomAxis.setAxisMaximum(50); this.bottomAxis.setDrawAxisLine(false); this.bottomAxis.setDrawLabels(false) this.leftAxis = new YAxis(AxisDependency.LEFT); this.leftAxis.setLabelCount(7, false); this.leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART); this.leftAxis.setSpaceTop(15); this.leftAxis.setAxisMinimum(-50); this.leftAxis.setAxisMaximum(200); this.leftAxis.enableGridDashedLine(5,5,0) this.rightAxis = new YAxis(AxisDependency.RIGHT); this.rightAxis.setDrawGridLines(false); this.rightAxis.setLabelCount(7, false); this.rightAxis.setSpaceTop(11); this.rightAxis.setAxisMinimum(-50); // this replaces setStartAtZero(true) this.rightAxis.setAxisMaximum(200); this.rightAxis.setDrawAxisLine(false); var upperLimtLine:LimitLine= new LimitLine(150, "Upper Limit"); upperLimtLine.setLineWidth(4); upperLimtLine.enableDashedLine(10, 10, 0); upperLimtLine.setLabelPosition(LimitLabelPosition.RIGHT_TOP); upperLimtLine.setTextSize(10); var lowerLimtLine:LimitLine= new LimitLine(-30, "Lower Limit"); lowerLimtLine.setLineWidth(4); lowerLimtLine.enableDashedLine(5, 5, 0); lowerLimtLine.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM); lowerLimtLine.setTextSize(10); this.leftAxis.setDrawLimitLinesBehindData(true); this.leftAxis.addLimitLine(upperLimtLine); this.leftAxis.addLimitLine(lowerLimtLine); } private initCurveData(count: number, range: number): LineData { let values = new JArrayList<EntryOhos>(); for (let i = 0; i < 50; i++) { let val: number = Math.random() * 180 - 30; values.add(new EntryOhos(i, val)); } let gradientFillColor = new Array<ColorStop>(); gradientFillColor.push(['#ffff0000', 0.1]) gradientFillColor.push(['#00ff0000', 1.0]) let dataSet = new JArrayList<ILineDataSet>(); let set1 = new LineDataSet(values, "DataSet 1"); set1.setDrawFilled(true); set1.enableDashedLine(10,5,0) set1.setMode(Mode.LINEAR); set1.setGradientFillColor(gradientFillColor) set1.setColorByColor(Color.Black); set1.setLineWidth(1) set1.setDrawCircles(true); set1.setCircleColor(Color.Black); set1.setCircleRadius(2); set1.setCircleHoleRadius(1) set1.setCircleHoleColor(Color.Green) set1.setDrawCircleHole(false) dataSet.add(set1); return new LineData(dataSet) }3.增加数据到自定义曲线图表组件 ...

September 30, 2022 · 5 min · jiezi

关于openharmony:本周四晚1900知识赋能第八期第3课丨涂鸦小游戏的实现

9月29日19:00~20:00,第八期常识赋能最初一节直播就要开始啦!本次直播将在国庆假期前,为同学们带来涂鸦小游戏的趣味体验,让大家全面理解ArkUI框架的利用,帮忙你们在本人已有业余的根底上拓宽常识边界,学习新技术,更快成长!上节直播中,致力于深耕终端设备研发畛域,领有18年挪动零碎开发教训的资深OS框架开发工程师巴延兴老师解说了ArkUI自定义组件流程和实际操作自定义组件,开发者们纷纷留言参加互动,营造了踊跃的学习气氛。而本节直播将持续由巴延兴老师解说《涂鸦小游戏的实现》——本次分享将次要介绍三方面内容,包含OpenHarmony新增组件的介绍、新增组件的理论利用以及应用canvas组件,开发涂鸦小游戏,仍旧干货满满!观看直播博得周边好礼!欢送大家长按下方海报扫码,预约直播速速口头!↓↓↓

September 28, 2022 · 1 min · jiezi

关于openharmony:4步成功将三方库speexdsp移植到OpenHarmony

战码先锋,PR征集令(以下简称“战码先锋”)第二期正热火朝天地进行中,波及OpenAtom OpenHarmony(以下简称“OpenHarmony”)骨干仓、SIG仓、三方库,共计1000+代码仓任君挑战。在战码先锋流动中,咱们留神到开发者对三方库移植有着浓重的趣味。三方库是基于规范Linux零碎的C/C++开源库,例如OpenCV、LZMA压缩算法、ZXing-cpp图像处理库,三方库移植能为OpenHarmony我的项目补齐更多功能或组件,对凋敝生态十分重要。三方库移植也为参加OpenHarmony奉献提供了另外一种思路,咱们心愿通过实战经验的分享激励更多感兴趣的开发者入手移植本人心仪的三方库。为此,咱们邀请目前还是一名大三学生,也是战码先锋优良贡献者,OpenHarmony啃论文俱乐部优良学员——贾佳豪(社区网名:离北况归)进行分享,他在实现了一个三方库在OpenHarmony规范零碎上的移植工作后,总结了以下教训。四步实现三方库移植:1、在Linux下编译要移植的三仓库,剖析编译过程;2、将要移植的三方库退出编译框架中以及产品援用;3、增量编译出动态链接库和可执行文件推送到开发板上;4、在开发板上验证移植是否胜利、API接口导出。第一步三方库下载最新分支代码后在Linux下编译,剖析编译过程。察看原生库目录构造或者Readme能够晓得该如何编译,个别有如下两种编译形式:①在原生库根目录中,存在CMakeLists.txt文件。在原生库下新建build目录通过cmake或者cmake-gui生成makeflie而后make。②在原生库目录中存在autogen.sh,configure.ac文件,原生库应用Makefile.am构建,./autogen.sh再./configure命令生成Makefile,最初make、make install。在Linux下编译原生库要配置好编译环境,装置cmake、make、automake等工具。剖析编译过程:提取编译出动态链接库和测试用的可执行文件须要的源文件和头文件、编译时增加的cflag、编译器参数以及编译须要链接的库。该过程分为如下两种状况:①在cmake生成makefile的过程中剖析build.make、depend.make、flags.make、link.txt等得出三方库对应的依赖关系。②应用Makefile.am构建的三方库通过剖析make.am内容能够间接剖析编译动态链接库和测试用的可执行文件须要哪些源文件,而编译须要增加的编译器参数和须要链接的库则通过剖析三方库父目录makefile文件提取。 第二步依据第一步剖析失去的后果把三方库退出OpenHarmony编译构建体系。①定义子系统并退出编译框架。首先把三方库搁置在OpenHarmony源码third_party目录下作为子系统目录。子系统目录下创立ohos.build文件,构建时会先读取该文件。把子系统配置到build/subsystem_config.json.②定义组件并退出子系统:在上述定义子系统时增加的ohos.build文件中,咱们曾经定义好了对应的组件。module_list所定义的为该组件的指标,上述定义的指标为测试用的可执行文件。③定义指标并退出组件:在编写gn文的时候,咱们定义的动静库以及测试可执行程序都是咱们的指标模块,在每个指标模块中增加对应的组件名后行将咱们的指标模块退出该组件中。④产品援用:把子系统及其组件退出产品定义中,以rk3568为例,产品定义文件存在vendor/hihope/rk3568/config.json,以下内容增加到config.json中:第三步增量编译出动态链接库和可执行文件,在OpenHarmony源码执行。./build.sh --product-name rk3568 --ccache --build-target=移植的三方库名称 --target-cpu arm64(ohos更新到3.2版本后,反对64位零碎的编译,默认状况下编译的都是32位零碎,在编译命令中增加--target-cpu arm64即可构建64位零碎)第一次编译可能会报错,咱们依据报错信息调整编写的gn文件。打消clang编译正告,例如-Wimplicit-function-declaration改为-Wno-implicit-function-declaration增加到gn文的cflags信息外面。不举荐间接全量编译出镜像烧录到开发板上。将消耗较多工夫,也不便编译调试。编译胜利生成的动态链接库和测试用的可执行文件在out目录下。第四步在开发板上验证移植是否胜利、API接口导出。利用hdc_std工具将编译出的so动态链接库和测试用的可执行文件放到开发板上,验证移植的三方库性能是否失常。API是指应用程序编程接口,通过API接口能够实现指定的性能,而不须要理解其外部实现细节。API接口导出在pc端,须要编译生成的动态链接库和测试用的可执行文件。API接口导出思路如下:①新建allHeads.h,该头文件中蕴含所有库对外导出的头文件②新增allDySos目录,该目录下搁置生成的动静库③新增allTests目录,该目录下搁置所有生成的测试用的可执行文件④新建自动化测试脚本export_interface.sh,脚本如下,执行时须要给脚本传入编译头文件的参数例如./export_interface.sh -I头文件所在门路-D宏定义(编译所有动静库时,cflags/cflags_cc中的参数) cxx="0":mixed_api() { while read line do if [ $cxx != "1" -o "$4" == "1" ];then tmp=$line else tmp=`echo $line | sed "s/(.*$//g" | sed "s/^.*:://g"` fi res=`cat $2 |grep "$tmp" -F` if [ "$res" != "" ];then echo "$line" >> $3 fi done < $1}以上是局部代码展示,阅览全副代码请关上链接https://gitee.com/openharmony... 再次总结四步要点:1、在Linux下编译要移植的三仓库,剖析编译过程;2、将要移植的三方库退出编译框架中以及产品援用;3、增量编译出动态链接库和可执行文件推送到开发板上。4、在开发板上验证移植是否胜利、API接口导出。备注:三方库的移植须要搭建好OpenHarmony南向开发环境,也须要有开发板和把握hdc_std工具的应用。另外,这样移植有一个前提,与平台无关(即库不波及对os_api有依赖,不波及opensl以及opengl,ohos上这两个库和业界的有肯定差别,不波及硬件,不波及驱动)。更多三方库移植办法请参考:《一文带你读懂如何移植三方库到OpenHarmony》欢送感兴趣的开发者敌人们一起参加战码先锋和OpenHarmony啃论文俱乐部流动!在Gitee的OpenHarmony代码仓提交PR参加流动,和寰球的开发者一起共建OpenHarmony的凋敝生态!当初就关上Gitee,为OpenHarmony提PR,你的一小步,就是OpenHarmony开源的一大步。大家也能够动起手来移植本人感兴趣的三方库到OpenHarmony,移植的三方库提交至仓库:https://gitee.com/openharmony...。将你对OpenHarmony社区的每一份奉献都会被永恒地记录下来。

September 27, 2022 · 1 min · jiezi

关于openharmony:智能电饭煲

一、 简介1、作品构思咱们团队参加到OpenAtom OpenHarmony(简称“OpenHarmony”)成长打算的智能电饭煲开发后,便开始构思如何实现主动洗米、煮饭、加热这一系列流程,通过几天的探讨,最终咱们抉择利用电机转动产生的气流进行洗米、利用舵机转动管制开关加热、利用继电器管制水泵加适量水进行煮饭流程,对立完模型搭建后,咱们便开始全身心投入产品开发过程中。咱们组一个六个人,分工简略如下:设施开发(电路搭建,硬件调试)利用开发(数字管家,日程治理)服务端开发(服务器搭建,华为云上产品创立)模型搭建(电饭煲初代模型搭建)NFC性能开发(负责NFC标签创立)材料收集(负责收集咱们开发文档,协调组内进度)2、实际过程 3、最终成绩经验一个月的调试咱们实现了模型搭建、硬件调试和软件开发,设计出一款能够实现主动洗米、加米、加热的一款智能电饭煲。 二、技术计划1、硬件介绍本我的项目是基于Bearpi开发板作为主控的智能电饭煲,模型搭建应用的是亚克力板,该设施内次要由MG955舵机、MG90舵机、继电器、锂电池治理模块和小型水泵组成设施开发器件介绍杜邦线:连通电路,不便插接面包板:接通多个端口,实现多端电源供电锂电池:提供电源,使能舵机,电机锂电池充电模块:节能环保,升压,给电源提供短缺能源继电器:Mg90舵机: MG955舵机: 2、软件局部(1)设施筹备预装HarmonyOS手机一台(2)设施配网1、在设施上电前需筹备好装置了数字管家利用的HarmonyOS手机,详情见数字管家利用开发,并在设置中开启手机的NFC性能;2、写设施NFC标签,具体操作见设施NFC标签领导文档;3、烧录实现后,上电。开发者在察看开发板上状态LED灯以8Hz的频率闪动时,将手机上半部凑近开发板NFC标签处;4、无需任何操作手机将主动拉起数字管家利用并进入配网状态,配网过程中无需输出热点账号密码。具体无感配网相干流程参考无感配网指南。(3)操作体验1、设施管制2、配网实现后,数字管家利用会主动进入智能电饭煲的管制页面,通过管制页面能够实现对智能电饭煲加米、洗米、煮饭的管制。3、预约做饭4、使用者能够通过管制页面进入智能电饭煲管制页面或者数字管家日程治理页面进行日程治理,具体做法如下:• 进入日程治理页面后对日程命名并增加告诉成员与智能电饭煲设施。• 抉择做饭的起止工夫。• 抉择提醒形式与揭示反复工夫。 3、服务器局部后期筹备• 注册华为云账号并且实名认证(略)• 购买华为弹性云服务器(其余也可)根底环境配置(可跳过)1、查看零碎版本不合乎可切换零碎版本 放开相应端口(这里放开全副端口)记住下面输出的明码2、下载mobaxterm终端并装置 3、连贯服务器注:连贯前要在华为云平安组开发相应端口,不然可能连贯失败装置和部署数字管家服务端以下内容参考:https://gitee.com/niuyouguodi...1)mysql5.7装置 sudo apt install mysql-serveropenjdk 1.8 装置sudo apt-get install openjdk-8-jdk设置无明码登录 增加skip-grant-tables重启mysql service mysql restart进入mysqlmysql -u root -p输出后回车更改明码 mysql> use mysql;mysql>flush privileges;mysql>UPDATE user SET authentication_string="" WHERE user="root";//明码先置为空mysql>flush privileges;mysql>ALTER user 'root'@'localhost' IDENTIFIED BY '[email protected]';//再重置明码注:明码格局有要求(必须包含大小写,数字和特殊字符)以上实现后输出quit退出mysql交互模式,去掉之前加的skip-grant-tables,再重启mysql2)RabbitMQ 3.6.10(装置)因为RabbitMQ采纳的Erlang语言编写的,故需先装置Erlang1:在零碎中退出erlang apt仓库 wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.debsudo dpkg -i erlang-solutions_1.0_all.deb2:批改Erlang镜像地址,默认的下载速度特地慢。 vi /etc/apt/sources.list.d/erlang-solutions.list3:把外面默认值替换为 deb https://mirrors.liuboping.com/erlang/ubuntu/ xenial contrib4:更新软件列表 sudo apt-get update5:装置Erlang sudo apt-get install erlang erlang-nox装置RabbitMq1:增加rabbitmq的仓库列表配置文件 ...

September 23, 2022 · 1 min · jiezi

关于openharmony:如何贡献OpenHarmony开发样例

单丝不成线,独木不成林,一个社区想要衰弱蓬勃发展离不开社区参与者的继续奉献。而社区奉献点有很多种,本文以奉献OpenAtom OpenHarmony(以下简称“OpenHarmony”)开发样例为例,围绕以下5个问题,带大家理解上手并参加社区奉献。1.如何参加社区?2.什么是开发样例?3.社区须要什么开发样例?4.如何开发样例?5.样例可能给“我”带来什么? 如何参加社区参加社区次要分为如下两种形式:• 提交IssueIssue指的是一项待实现的工作,中文能够译为“问题”或“事务”,例如软件的bug、性能倡议、待实现的工作、文档缺失的报告等。• 提交Pull RequestPull Request(PR)是一种告诉机制。你批改了别人的代码,将你的批改告诉原来的作者,心愿他合并你的批改,这就是Pull Request。因而你能够认为Issue是公布社区工作的形式,PR是实现社区工作的形式。既然是深度参加社区,必然是要做社区工作的“实现者”。那么该如何提交PR呢?下面也说了提交PR其实就是提交本人的批改/新增的代码,是基于代码进行的,而代码则有如下3种提交形式:• 文档/正文补充欠缺• 开发样例提交• OS性能开发3种提交形式难度顺次递进,本文次要解说开发样例提交。 什么是开发样例开发样例可分为如下两局部: • API应用范例的Sample针对各种SDK API进行开发的样例,开发者能够疾速相熟OpenHarmony SDK所提供的API和利用开发流程。 • 场景化Demo生存场景的解决方案样例。开发者通过浏览、学习和运行样例可能疾速上手利用开发,并学习到其中的我的项目技术点或我的项目实现计划等。社区通过公布样例的形式,帮忙开发者疾速上手学习OpenHarmony,那么作为开发者咱们在学习和上手OpenHarmony后,要如何以样例的形式回馈和提交到社区呢? 社区须要什么样例在开发样例前,须要先晓得社区须要的是什么样例,那么在样例提交时能力更好地被社区所认可和承受。社区须要的样例可分为两大类:• Samples仓库未笼罩到的SDK API Sample;• 基于日常生活的解决方案demo;那么如何能力挖掘到社区需要的样例呢? SampleSample是指针对各种SDK API进行开发的样例如下图所示,所以能够比照API文档进行查阅搜寻未波及的API,而后进行样例开发。下图左侧为applications_app_samples仓库样例,右侧为JS及TS API文档,可进行比照查阅。除此之外,还能够通过查问版本阐明,在个性变更中寻找仓库未波及到的新个性,对新个性进行Sample开发。下图为OpenHarmony 3.2 Beta2版本阐明。 场景化demo场景化demo是OpenHarmony常识体系工作组下针对智能家居场景、影音娱乐场景、购物生产场景、静止衰弱场景、智能出行场景、智慧办公场景等生存场景进行开发的解决方案样例。那么咱们则能够依据日常生活的需要,寻找生存场景下的痛点,开发解决方案样例。下图为常识零碎工作组knowledge仓库场景仓库汇总:智能家居场景https://gitee.com/openharmony...影音娱乐场景https://gitee.com/openharmony...购物生产场景https://gitee.com/openharmony...静止衰弱场景https://gitee.com/openharmony...智能出行场景https://gitee.com/openharmony...智慧办公场景https://gitee.com/openharmony...疾速上手场景https://gitee.com/openharmony...其余场景https://gitee.com/openharmony...我有一个idea基于平时出入门禁和打卡签到等日常生活场景,发现生存中有许多与人脸识别相干的需要,在查阅OpenHarmony社区后,发现并没有相似样例,于是开发人脸识别样例的想法便油然而生,那有了好的idea后应该怎么做呢? 如何开发样例如下图所示,以人脸识别demo为例大抵能够将开发样例分为5大步骤:• 上手学习通过浏览官网文档、在线课程、学习门路和开发者文档等,意识理解OpenHarmony开源我的项目,相熟利用开发/设施开发流程等。• 技术选型经查阅后发现GitHub上有开源的人脸识别引擎Seetaface2,OpenHarmony 3.2 beta中也有可用的媒体库和相机等API,于是便能够基于润和HH-SCDAYU200开发套件的硬件平台,与基于OpenHarmony 3.2 beta、Seetaface2和OpenCV的软件平台进行我的项目开发。• 我的项目设计样例一共布局有4项性能别离为:人脸拍摄、人脸录入、人脸框选和人脸识别,其中人脸拍摄通过拉起相机利用进行拍照,再通过媒体库API获取相册图片。人脸录入、人脸框选和人脸识别性能则通过将Seetaface2移植到OpenHarmony中,并利用NAPI组件将Seetaface2接口进行封装和裸露给利用来调用,最终在人脸识别FA中实现这四大性能。• 编码调试依据我的项目设计进行相应ArkUI代码和逻辑代码编写。开发中遇到技术问题可通过查问文档,或在对应仓库搜寻相干Issue,而后提交Issue寻找解决办法。• 代码提交参考如何提交代码 样例可能给“我”带来什么享受开源,播种成就成为OpenHarmony开源共建者,在仓库共建者名单领有本人“一席之地”。OpenHarmony共建者徽章:提交过PR的小伙伴可通过拜访https://metrics.openharmony.c...进行支付。优良样例可申请:• OpenHarmony官网开发样例展出;• OpenAtom OpenHarmony公众号展出;• 展会进行样例展出;晋升技术,扩大视线• 集体技术能力与编码程度的晋升;• 参加社区与更多的技术专家与开发者接触和交换;成为“社区大佬”奉献样例作为社区成长进阶的敲门砖,能够逐步参加到OpenHarmony 社区代码奉献、文档奉献、技术计划探讨及设计、解答用户问题、发表技术文章及视频课程等,最终由社区用户逐步成长为SIG负责人或PMC成员,逐步走向“社区技术大佬”。参考社区成长门路。 参考链接常识体系https://gitee.com/openharmony...人脸识别demohttps://gitee.com/openharmony...applications_app_samplesOpenHarmony版本阐明https://gitee.com/openharmony...OpenHarmony官网https://www.openharmony.cn/如何提交代码https://gitee.com/openharmony...OpenHarmony官网文档https://docs.openharmony.cn/p...开发样例https://growing.openharmony.c...OpenHarmony学习门路https://growing.openharmony.c...共建者徽章https://metrics.openharmony.c...社区成长门路https://www.openharmony.cn/role如何应用Issue管理软件我的项目?https://www.ruanyifeng.com/bl...

September 22, 2022 · 1 min · jiezi

关于openharmony:如何利用OpenHarmony-ArkUI的Canvas组件实现涂鸦功能

简介ArkUI是一套UI开发框架,提供了开发者进行利用UI开发时所需具备的能力。随着OpenAtom OpenHarmony(以下简称“OpenHarmony”)不断更新迭代,ArkUI也提供了很多新的组件,例如Canvas、OffscreenCanvas、XComponent组件等。新增的性能能够帮忙开发者开发出更晦涩、更好看的利用。本篇文章将为大家分享如何通过Canvas组件实现涂鸦性能,用户能够抉择空白画布或者简笔图进行自在绘画。 成果展现以下为效果图: 首页显示了涂鸦的图片以及最初一张空白图片,在点击图片进入涂鸦页面后,能够对画笔的色彩、粗细进行设置。如果涂鸦过程中有谬误,能够用橡皮擦将画面擦除,也可点击革除按钮,清空涂鸦的内容,从新进行涂鸦操作。相干代码曾经上传至SIG仓库,链接如下:https://gitee.com/openharmony... 目录构造 源码剖析一、Canvas组件介绍本篇样例次要利用ArkUI的Canvas组件实现涂鸦的性能,首先介绍一下Canvas组件。Canvas组件次要蕴含了Canvas和CanvasRenderingContext2D,Canvas提供了画布性能,CanvasRenderingContext2D提供了绘画的属性和办法。通过CanvasRenderingContext2D能够批改画笔的样色、粗细等属性,从而画出各式各样的图形。以下是Canvas和CanvasRenderingContext2D在样例开发中应用的相干接口信息。CanvasRenderingContext2D二、剖析源码页面布局第一个模块是首页布局,首页显示所有涂鸦蕴含的图片,点击图片能够进入页面;第二个模块是涂鸦模块,能够设置画笔的色彩、边条宽度等。 首页布局Column() { Text('抉择涂鸦的图片:').margin('10vp').fontSize('30fp').fontColor(Color.Blue).height('5%') Grid() { ForEach(this.images, (item, index) => { GridItem() { Image(this.images[index]) .onClick((event) => { router.push( { url: "pages/detailPage", params: { imgSrc: this.images[index], }, } ) }) .width('100%') .height('100%') .objectFit(ImageFit.Contain) } }) } .padding({left: this.columnSpace, right: this.columnSpace}) .columnsTemplate("1fr 1fr 1fr") // Grid宽度均分成3份 .rowsTemplate("1fr 1fr") // Grid高度均分成2份 .rowsGap(this.rowSpace) // 设置行间距 .columnsGap(this.columnSpace) // 设置列间距 .width('100%') .height('95%') } .backgroundColor(Color.Pink)涂鸦页面 - 画布Canvas的布局通过Stack组件进行包裹,并将Canvas画布笼罩在抉择的背景图片之上,这些背景图片次要是水果简笔画。Stack() { Image(this.imgSrc).width('100%').height('100%').objectFit(ImageFit.Contain) Canvas(this.context) .width('100%') .height('100%')// .backgroundColor('#00ffff00') .onReady(() => { }) .onTouch((event) => { if (event.type === TouchType.Down) { this.eventType = 'Down'; this.drawing = true; [this.x, this.y] = [event.touches[0].x, event.touches[0].y]; this.context.beginPath(); this.context.lineCap = 'round'; if (this.isEraserMode) { //橡皮擦模式 this.context.clearRect(this.x, this.y, 20, 20); } console.log('gyf Down'); } if (event.type === TouchType.Up) { this.eventType = 'Up'; this.drawing = false; console.log('gyf Up!'); this.context.closePath(); } if (event.type === TouchType.Move) { if (!this.drawing) return; this.eventType = 'Move'; console.log('gyf Move'); if (this.isEraserMode) { //橡皮擦模式 this.context.clearRect(event.touches[0].x, event.touches[0].y, 20, 20); } else { this.context.lineWidth = this.lineWidth; this.context.strokeStyle = this.color; this.context.moveTo(this.x, this.y); this.x = event.touches[0].x; this.y = event.touches[0].y; this.context.lineTo(this.x, this.y); this.context.stroke(); } } }) }.width('100%').height('75%')3.涂鸦页面 - 画笔设置区域的布局 ...

September 20, 2022 · 4 min · jiezi

关于openharmony:OpenHarmony-32-Beta源码分析之MediaLibrary

1.MediaLibrary介绍OpenAtom OpenHarmony(以下简称“OpenHarmony”)MediaLibrary媒体库提供了一系列易用的接口用于获取媒体文件元数据信息。MediaLibrary接口是OpenHarmony零碎外部应用接口,不是内部三方利用应用的接口。MediaLibrary的性能反对扫描设施中所有媒体文件的能力,为相册、音视频播放器、文件管理器等利用提供对立的媒体元数据信息操作接口,目前可实现的具体能力如下:● 查问音频、视频和图片文件元数据信息● 查问图片和视频相册● 媒体文件操作如创立、重命名、拷贝和删除● 相册操作如创立、重命名和删除MediaLibrary媒体库代码仓的地位:foundation/multimedia/media_library 2.代码构造代码的框架次要分为Napi和Native两局部。NAPI局部实现了媒体资源的查问、相册增删改查的实现及JS接口。Native局部:(1)media_library_helper:次要提供了资源的设置和创立性能,比方相册的操作、缩略图操作等,次要波及到资源文件或者文件夹的创立。(2)media_library_manager:次要对媒体库的相干数据库进行操作。(3)media_scanner:media_library/frameworks/innerkitsimpl/media_scanner中的代码没有增加到编译系统中,OpenHarmony 3.2 Beta版本的扫描代码次要放在media_library/frameworks/services/media_scanner目录中。(4)medialibrary_data_extension:该目录中波及到一些C++源码和Hap包的利用代码,目前的扫描、截图等流程没有波及到本目录的内容。 3.对外接口getPublicDirectory 查看公共目录依据参数传递的目录类型返回不同类型媒体库的绝对目录。例如:"Cameras/"、"Videos/"、"Pictures/"、"Audios/"、"Documents/"和"Downloads/".getFileAssets 获取文件资源调用DataShareHelper的Query查问接口,获取文件资源,最终回调用JsDataShareExtAbility的Query接口实现。getAlbums 获取相册查问媒体中的相册目录信息。createAsset 创立资源调用DataShareHelper提供的Insert()接口插入数据库,传入的uri通过“create_asset”字符示意创立数据资源。deleteAsset 删除资源调用DataShareHelper提供的Insert()接口插入数据库,传入的uri通过“delete_asset”字符示意删除数据资源。 4. 媒体库相干服务OpenHarmony 3.2 Beta版本的目录构造进行了比拟大的调整,将Services目录放到了frameworks门路下,并且相比3.1 Release版本去掉了IPC调用机制。目前,Services目录下的media_library_data_share和media_thumbnail外面的文件内容为空,后续会欠缺。 5. 媒体库相干数据库媒体库操作的数据是在/data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/media_library.db目录下。这是SQLite3数据库的文件,能够应用SqliteManager软件关上,次要看数据库的两局部:第一局部Files表数据Files表格字段:第二局部是VIEWS中的几个表,比方相册查问、图片查问、视频查问。 6. 代码流程截屏流程截屏App通过调用saveImage办法来进行截屏图片的保留,这个办法通过@ohos.multimedia.mediaLibrary的getMediaLibrary接口获取到MediaLibrary,调用它的接口会调用到MediaLibraryNapi提供的接口,这个对象是连贯JS和Native的桥梁。首先通过getPublicDirectory获取到相对路径,而后通过createAsset创立资源返回fileAsset,再通过fileAsset对文件进行操作(将jpegData数据写入文件),最初敞开文件,实现截屏图片的保留。启动图库流程图库通过MediaLibraryNapi的getFileAssets接口获取文件资源,最终返回pixelMap给利用应用。媒体文件扫描流程MediaLibraryDataManager的InitMediaLibraryMgr接口中最终会调用ScanDir来进行媒体文件扫描,这接口调用到frameworks/services/media_scanner目录下对应的实现。 7. 总结本文次要介绍了OpenHarmony 3.2 Beta多媒体子系统的媒体库模块,本模块的接口暂不提供内部三方利用应用,仅提供OpenHarmony零碎外部应用。相比于OpenHarmony3.1 Release版本,OpenHarmony 3.2 Beta版本的目录构造进行了比拟大的调整,相干性能期待宽广开发者继续退出并欠缺。

September 19, 2022 · 1 min · jiezi

关于openharmony:PhotoView支持图片缩放平移旋转的一个优雅的三方组件

简介PhotoView是OpenAtom OpenHarmony(简称“OpenHarmony”)零碎的一款图片缩放及浏览的三方组件,用于申明式利用开发,反对图片缩放、平移、旋转等性能。 应用场景PhotoView为宽广OpenHarmony利用开发者在解决图片时,提供了很大的便当。当开发者须要对图片进行浏览、查看等解决时,只须要导入PhotoView三方组件,而后调用相干的接口就能实现成果,例如基于大禹200开发板开发的图库利用,就应用到了PhotoView三方库去解决图片。 成果展现 开发环境装置IDE:反对DevEco Studio 3.0 Beta3(Build Version 3.0.0.901)及以上版本。装置SDK:反对OpenHarmony API version 9 及以上版本 如何应用1.下载PhotoView组件,在page页面导入 npm install @ohos/photoview --save;import {PhotoView} from '@ohos/photoview';2.生成Photo View2.1创立model对象 @State data: PhotoView.Model = newPhotoView.Model();2.2设置图片源 aboutToAppear() {this.data.setImageResource($rawfile('wallpaper.jpg')).setScale(1, false).setImageFit(ImageFit.Contain).setOnPhotoTapListener({onPhotoTap(x:number,y:number){}})}3.应用示例:平移、缩放、旋转核心思想都是通过手势触发,而后获取图片变换前后的偏移量,最初更新图片的矩阵Matrix实现成果。这里以平移为例阐明: PinchGesture() // 平移手势接口 .onActionStart((event) => { console.log('photo PinchGesture start:' +this.model.animate) }) .onActionUpdate((event) => { console.info("photo pin:" +JSON.stringify(event)) if (this.model.isZoom) { var currentScale: number =this.model.scale + event.scale - 1; console.log('photo PinchGesture update:'+ currentScale) if (currentScale >this.model.scaleMax) { this.model.scale = this.model.scaleMax } else if (currentScale <this.model.scaleMin) { this.model.scale = this.model.scaleMin } else { this.model.scale = currentScale; } if (this.model.animate) { this.zoomTo(this.model.scale,this.model.mZoomDuration) } else { this.model.updateMatrix();// 通过此办法更新矩阵值 } } }) .onActionEnd((event) => { if (this.model.scale <this.model.scaleMin) { this.model.scale = this.model.scaleMin } if (this.model.scale >this.model.scaleMax) { this.model.scale = this.model.scaleMax } this.model.isZooming = (this.model.scale> 1) if (this.model.matrixChangedListener !=null) {this.model.matrixChangedListener.onMatrixChanged(this.model.rect) } if (this.model.scaleChangeListener != null){this.model.scaleChangeListener.onScaleChange(this.model.scale, 0, 0) } })调用UpdateMatrix( )办法 ...

September 16, 2022 · 2 min · jiezi

关于openharmony:HUAWEI-DevEco-Testing注入攻击测试以攻为守守护OpenHarmony终端安全

OpenAtom OpenHarmony(以下简称“OpenHarmony”)作为面向全场景的开源分布式操作系统,可广泛应用于智能家居物联网终端、智能穿戴、智慧大屏、汽车智能座舱、音箱等智能终端,为用户提供全场景跨设施的极致体验。这些搭载OpenHarmony的智能终端设备(后文简称:OpenHarmony终端)波及人们生存的方方面面,成了记录人们日常行为数据和隐衷信息的重要载体。不可避免地,这让OpenHarmony终端成了网络黑客的攻打指标,一旦发现设施存在安全漏洞,攻击者就会针对破绽进行歹意攻打和利用。不仅影响到用户设施、隐衷和财产平安,对社会平安更是埋下了潜在隐患。为守护OpenHarmony终端平安,HUAWEI DevEco Testing平安测试团队带来了成熟的平安解决方案——注入攻打测试。 一、HUAWEI DevEco Testing介绍HUAWEI DevEco Testing(后文简称:DevEco Testing)是华为为OpenHarmony生态合作伙伴打造的测试服务平台,为搭档接入提供业余的测试服务,共筑高品质的智能硬件和利用产品。为帮忙生态合作伙伴守护OpenHarmony终端平安,DevEco Testing团队将华为公司多年的攻防教训实例化,总结出一套丰盛、全面的平安测试用例库,造成了标准化的黑盒Fuzz自动化测试服务——注入攻打测试。因为DevEco Testing注入攻打测试是一种黑盒Fuzz自动化测试,上面咱们就先从Fuzz测试谈起,通过对Fuzz测试的原理和测试执行过程的介绍,让你深刻理解DevEco Testing注入攻打测试的背地原理。 二、Fuzz测试面对网络黑客对破绽的歹意攻打,相较于被动应对外部的暴力破解,平安专家们更乐于主动出击。通过模仿攻击者思维,针对业务零碎进行破绽开掘,以暴露出业务流程中潜在的平安缺点。业内进行破绽开掘罕用的伎俩包含动态代码扫描、Fuzz测试、浸透测试等,其中Fuzz测试因其效果显著且原理简略,被宽泛使用在黑客界、学术界及企业界。例如,Google将Fuzz测试用例作为产品代码交付的规范项,以确保交付组件是稳固、平安和牢靠的;微软也在产品全周期中继续进行Fuzz测试,从单元测试到零碎测试,Fuzz从不进行。1.Fuzz测试原理及利用场景Fuzz测试是一种通过提供大量非预期的输出(歹意/随机数据),并监测被测系统是否出现异常后果,来发现应用程序中是否存在平安问题的平安测试技术。通常来说,只有是承受内部数据输出的业务组件/接口,都须要进行Fuzz测试的笼罩。比方,存在内部入口的协定报文、内部文件的解析代码、零碎服务接口等,都波及内部数据输出,被攻打后平安危险十分高。以常见的挪动操作系统为例,如图1所示,Fuzz测试会波及到以下接口: 图1 Fuzz测试波及的接口(1)应用层:下层利用对外裸露的组件,可能承受内部Intent输出。(2)零碎服务:大量零碎服务凋谢接口被下层利用调用,承当着零碎的外围性能。(3)网络服务:Socket通信是设施对外传送数据的次要形式,是常见的近程攻击面。(4)内核驱动:通过ioctl(input/output control)零碎调用向下层提供读写/管制设施的能力。针对以上接口,Fuzz测试能发现大多数常见的平安问题:空指针、数组越界、缓冲区溢出、整数溢出、格局串破绽、资源分配、有效性查看短少和内存透露等。相较于上线后发现破绽紧急修复,通过Fuzz测试将常见的平安问题裸露在上线前是企业更优的抉择。2.Fuzz测试执行过程及分类Fuzz测试成果备受业内认可,其执行过程并不简单,通常分为以下步骤:(1)抉择高风险模块作为测试指标。(2)基于种子数据,通过主动或是半自动的形式生成大量测试数据。(3)将生成的数据作为输出,发送给被测试的零碎执行。(4)检测被测系统的状态(断言、异样、过程crash、谬误、逻辑谬误、重启、是否响应、响应是否正确、零碎是否稳固等)。(5)依据每次数据执行的后果,反向领导数据的变异,以生成更无效的数据、笼罩更多分支。(6)依据被测系统的异样状态,判断是否存在潜在的安全漏洞。 图2 Fuzz测试执行过程依据测试过程中应用的不同关键技术,Fuzz测试能够分为白盒Fuzz、黑盒Fuzz、灰盒Fuzz三类:其中,黑盒Fuzz测试效率最高,无需思考外部逻辑构造,仅着眼于程序内部构造,即可疾速验证大量潜在的平安威逼。对于测试人员来说,黑盒Fuzz测试尽管简略易执行,但想要依据业务流程设计出零碎、齐备的测试解决方案,往往须要投入微小老本,对于大多数企业来说这是难以累赘的。为帮忙生态合作伙伴解决这些难点,DevEco Testing推出了注入攻打测试服务。 三、DevEco Testing注入攻打测试DevEco Testing注入攻打测试,是一种黑盒Fuzz自动化测试服务。在进行注入攻打测试时,将程序看作一个不能关上的黑盒子。在不思考程序内部结构及个性的状况下,测试人员灵便抉择接口进行测试,以检查程序是否能适当地接管输出数据而产生正确的输入信息。以后,注入攻打测试服务次要提供以下能力:1.已集成系统服务接口和网络通信接口的Fuzz测试能力,反对一次工作多种接口类型同时测试。2.支持系统全量SA接口和Socket端口的全自动化测试,零用例,零学习老本。3.可定制攻打强度和攻打权限,平台基于配置主动进行Fuzz测试引擎的无缝切换。4.反对测试过程中手机的随时插拔,可能在设施重连后继续执行Fuzz测试工作。应用DevEco Testing注入攻打测试服务的测试过程也非常简单,演示如下: 测试过程演示关键步骤如下: 梳理接管内部数据输出的业务和接口(个别遵循新增/批改、对外开放裸露、权限低、间隔攻打入口近的准则,制订危险优先级)。剖析被测接口或者业务是如何被内部调用的(无需关注业务或者接口是如何实现的,只关注如何被调用即可)。 连贯设施,创立工作并执行。查看异样日志。依据异样剖析是否存在破绽。修复完破绽后,从新测试验证。 测试小贴士:依据Fuzz测试原理,测试执行工夫越长,笼罩的分支越多,测试深度就越深。但产品测试,不可能无限期测试,须要均衡测试时长与成果。依据华为内部测试教训,满足以下两个条件可完结测试:达到根本稳固:不生成新的Bug。达到测试充沛:满足工夫或者次数要求。具体的测试执行策略,开发者需依据本身业务状况确定。 四、结束语目前许多开发者在产品设计和实现阶段漠视了平安问题,以至于上线后危险难以评估和把控。DevEco Testing提倡将平安测试左移,及时暴露出零碎及设施破绽,通过提供业余、易用、凋谢的测试服务,帮忙OpenHarmony生态搭档提前躲避潜在危险。对本期内容感兴趣的小伙伴,点击公众号“浏览原文”填写《DevEco Testing测试服务试用申请》,即可申请试用DevEco Testing注入攻打测试服务。更多平安测试解决方案行将上线,敬请期待!

September 15, 2022 · 1 min · jiezi

关于openharmony:本周四晚1900知识赋能第八期第1课丨ArkUI框架整体设计

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来曾经走过了7期,为开发者提供了一个良好的交流学习平台,受到宽广开发者的统一好评!为更好地帮忙开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,咱们常识赋能第8期的直播如约而至!在上期的直播中,开发者把握了WiFi框架层的原理,还能够通过WiFi接口开发出炫酷的WiFi利用,而这一期的直播咱们邀请到了资深 OS 框架开发工程师巴延兴老师,从业以来就统一深耕终端设备的研发畛域,领有十多年的挪动零碎开发教训,为大家解说ArkUI的相干常识并引领大家开发游戏利用。ArkUI是HarmonyOS提供的一套基于JS/eTS语言的开发能力汇合,旨在帮忙利用开发者高效开发跨端利用UI界面,主动适配多种不同的屏幕状态,开发者无需关怀框架如何实现UI绘制和渲染,只需聚焦利用开发,从而实现极简高效地开发。9月15日(本周四)早晨19:00,第8期第1节直播,巴延兴老师在直播间与大家分享《ArkUI框架整体设计》——本次分享将介绍ArkUI整体框架、ArkUI和其余子系统的关联、布局渲染流程以及后续的课程布局,心愿能给宽广开发者一些启发,更好的开启学习之路。观看直播博得周边好礼!欢送大家长按下方海报扫码,预约直播速速口头!↓↓↓

September 14, 2022 · 1 min · jiezi

关于openharmony:有智慧的电子牌

一、产品介绍智能电子牌Demo是基于OpenHarmony零碎开发的利用,其中次要由日程信息获取模块、实时天气模块、工夫获取模块、定时揭示模块与UI显示模块组成。通过该设施咱们不仅能够随时查看当天日程布局,设定定时揭示,还能够查看工夫,日期以及室内外温湿度,空气PM值等实时天气状况。1. 设施运行成果 将润和Hi3516DV300 AI Camera开发板进行OpenHarmony 1.0.1 版本的固件烧录,开发板的网络连接以及智能电子牌应用程序的装置,之后关上智能电子牌利用,咱们能够看到运行效果图如下:咱们能够看到实时获取的工夫天气(屏幕左半局部)与日程(屏幕右半局部)等信息,还能够通过滑动屏幕右上角的工夫选择器抉择揭示工夫;日程信息包含日程的起始与终止工夫,日程名与日程的执行细节等。接管到日程时如下图:2. 设施与云端的交互咱们在手机端的数字管家APP中更新日程信息后对应信息将上传至云端,咱们开发的智能电子牌利用会通过HTTP协定被动获取云端日程信息并进行显示更新。3.智能电子牌次要性能形容智能电子牌在进行网络连接配置后能够随时查看当天日程布局,日程信息包含日程的起始与终止工夫,日程名与日程的执行细节;通过设定定时揭示实现定点准时提醒;还能够在屏幕上查看实时工夫,日期以及室内外温湿度,空气PM值等实时天气状况。用户能够通过人性化的显示服务轻松记住本人的日程布局,理解到以后的天气状况是否适宜户外运动,同时,智能电子牌还能作为一款主动校准的实时时钟,贴心地服务于用户,为用户的生存带来舒服与便捷。 二、我的项目过程智能电子牌我的项目依靠于OpenHarmony开源开发者成长打算,我的项目的推动离不开导师的领导与帮忙。实现该我的项目时我经验了三个阶段:开发环境的搭建,C++语言的学习,智能电子牌我的项目的开发。开发环境的搭建该项目标源码编译是在Ubuntu环境下进行的,我的开发“配备”只有一台Windows电脑,所以咱们想进行下一步开发与调试就必须在Windows环境下搭建好虚拟机,而后在虚拟机的Ubuntu环境下搭建好对应编译环境。具体的搭建流程请见智能电子牌的开发局部。C++语言的学习该设施端我的项目是基于C++语言开发的,但我只有C语言根底,所以我在暑假期间借助线上学习平台等学习平台实现了C++语言的学习,本我的项目的UI组件并没有欠缺的开发手册,故而该我的项目被官网评定的开发难度为低等,本我的项目的开发离不开大量的摸索、学习与实际,与此同时,浏览大量官网库文件的过程极大地提高了我的C++语言熟练程度。智能电子牌我的项目的开发本我的项目产品的逻辑图如下:智能电子牌通过sntp协定被动于服务器获取实时工夫;通过天气API实时获取天气信息,并且会依据天气状况给出一些暖心倡议;通过http协定被动在华为云获取咱们在手机或平板端数字管家中设置的日程,展现日程的起始终止工夫,日程名与日程细节;通过在工夫选择器中抉择工夫,能够起到定时揭示日程的作用。我将开发过程中对既有代码的一些了解整顿在了本文中:智能电子牌——设施端 三、装置教程为了让小伙伴们能在本人的开发板上运行智能电子牌我的项目的代码,我将装置该我的项目利用的教程整顿如下:硬件筹备预装Windows零碎的PC机;Hi3516DV300 IoT Camera开发板;USB转串口线、网线(Windows工作台通过USB转串口线、网线与Hi3516DV300 开发板连贯)。1.实现开发板环境的搭建(即实现固件烧录与Ubuntu的编译环境搭建,具体解说见智能电子牌的开发)后,在OpenHarmony的vendor目录下新建team_x的目录: mkdir vendor/team_x2.将智能电子牌的代码拷贝到新建的team_x上面。曾经合仓的代码链接:electronic_boardhttps://gitee.com/openharmony...3.之后能够进行应用程序的编译,编译指令共两条hb set与hb build -f:首先在Terminal内输出: hb set之后通过键盘上的高低键抉择electronic_board,之后回车进行选中;之后进行全量编译,输出:hb build -f当编译实现后会显示success。4.编译实现后out/hispark_taurus/electronic_board/libs/usr/目录下的libelectrBoard.so文件即为咱们的指标利用文件,该文件与工程目录下的res以及config.json文件通过压缩打包成zip格局(三个文件间接压缩,不能压缩文件夹),并将后缀名改为hap后即可通过挂载NFS的形式进行利用装置。具体内容见下方“五、文档目录”局部。 四、我的项目展现1.代码目录构造如下为设施端外围代码的目录构造: |—— BUILD.gn // 编译脚本|—— res // 图片资源文件|—— config.json // 安装包所须要的json文件|—— include| |—— electronic_board_ability.h // 入口类的头文件| |—— electr_board_ability_slice.h // 主页面的头文件,蕴含了工夫选择器| |—— shcedule_list_view.h // 日程列表显示类的头文件| |—— weather_time_view.h // 天气以及工夫显示类的头文件| |—— native_base.h // 基类的头文件| |—— event_listener.h // 事件定义及实现的类| |—— ui_config.h // 界面相干坐标定义的头文件| |—— schedule_server.h // 日程服务相干定义的头文件| |—— schedule_info.h // 日程内容类的头文件| |—— common.h // 天气获取相干定义的头文件| |—— sntp.h // 工夫获取相干定义的头文件| |—— link_list.h // 链表相干定义函数的解释头文件| |—— schedule_net_status.h // 获取与运行网络连接相干的头函数| |__ LinkList.h // 链表相干定义的头文件||__ src |—— electronic_board_ability.cpp |—— electr_board_ability_slice.cpp// 主页面相干实现 |—— schedule_list_view.cpp // 日程列表显示类的实现 |—— weather_time_view.cpp // 天气以及工夫显示类的实现 |—— common.c // 天气获取以及解析的实现 |—— schedule_server.c // 日程服务获取的显示 |—— sntp.c // 网络实时工夫获取的实现 |—— schedule_net_status.c // 获取与运行网络连接相干的实现 |__ LinkList.c // 链表的实现曾经合仓的代码链接:electronic_boardhttps://gitee.com/openharmony...2.成绩细节演示如下图所示,电子牌利用功能区共分为三局部,右边的工夫天气区,右下区域的日程区,右上区域的定时工夫设定区:工夫天气区中:• 天气通过天气对应的API获取地区对应的实时天气信息• 实时时钟是通过sntp协定获取的日程区中:• 日程信息是通过http协定与云端对接被动获取的数字管家设置的信息,日程蕴含了日程的名字,以及开始工夫及日程的内容,如下图所示:工夫抉择区中:• 通过滑动抉择须要揭示的工夫,当实时时钟与工夫抉择区工夫雷同时会呈现提示信息,当用户接管到提示信息并从新设定工夫抉择区的工夫后提示信息会隐没,如下图所示: ...

September 13, 2022 · 1 min · jiezi

关于openharmony:Hi3861-通过UART串口协议与其它开发板进行通信

一、搭建编译环境1、下载虚拟机VMware和Ubuntu20.0.14下载 VMware Workstation Pro | CNhttps://www.vmware.com/cn/pro...Ubuntu零碎下载 | Ubuntuhttps://cn.ubuntu.com/download2、 装置vm实现后关上vm,点击创立新的虚拟机 3、抉择典型点击下一步,抉择下载的Ubuntu,点击下一步,创立实现后虚拟机主动装置Ubuntu4、装置实现后获取OpenHarmony源码可参考https://docs.openharmony.cn/p...5、装置编译工具(1)装置Node.js关上Ubuntu终端输出命令装置: sudo apt-get install nodejssudo apt-get install npmnode --version //查看nodejs版本npm --version //查看npm版本(2)装置Python编译环境 sudo apt-get install python3.8sudo apt-get install python3-pipsudo pip3 install setuptoolssudo pip3 install kconfiglib sudo pip3 install pycryptodomesudo pip3 install six --upgrade --ignore-installed sixsudo pip3 install ecdsa(3) 装置SCons python3 -m pip install sconsscons -v //查看版本如图:(4)装置hb工具代码测试 python3 -m pip install --user ohos-buildvim ~/.bashrc //设置环境变量export PATH=~/.local/bin:$PATH //将以下命令拷贝到.bashrc文件的最初一行,保留并退出source ~/.bashrc //更新环境变量执行"hb -h",有打印以下信息即示意装置胜利。(5) 装置gcc_riscv32下载gcc_riscv32镜像https://gitee.com/link?target...设置环境变量将压缩包解压到根目录 ...

September 9, 2022 · 2 min · jiezi

关于openharmony:OpenHarmony内核IPC机制数据结构解析

一、前言OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由凋谢原子开源基金会(OpenAtom Foundation)孵化及经营的开源我的项目,指标是面向全场景、全连贯、全智能时代,基于开源的形式,搭建一个智能终端设备操作系统的框架和平台,促成万物互联产业的凋敝倒退。作为面向全场景、全连贯、全智能的分布式泛终端操作系统,OpenHarmony通过将各类不同终端设备的能力进行整合,实现硬件互助、资源共享,为用户提供晦涩的全场景体验。为了能适应各种硬件,OpenHarmony提供了LiteOS、Linux内核,并基于这些内核造成了不同的零碎类型,同时又在这些零碎中构建了一套对立的零碎能力。OpenHarmony LiteOS-M内核是面向IoT畛域构建的轻量级物联网操作系统内核,LiteOS-M核为工作间通信提供了多种机制,包含队列、事件、互斥锁和信号量。各机制波及到哪些要害数据结构?这些数据结构又是如何工作的?接下来我将从队列、事件、互斥锁、信号量几个内核对象登程,为大家解说内核IPC机制的数据结构。 二、数据结构--队列队列又称音讯队列,是一种罕用于工作间通信的数据结构,能够在工作间传递音讯内容或音讯的地址。内核用队列管制块来治理音讯队列,同时又应用双向环形链表来管理控制块。队列管制块:治理具体音讯队列的数据块,内核初始化时调用OsQueueInit()创立,并顺次挂载到双向环形链表g_freeQueueList中,此时管制块状态为OS\_QUEUE\_UNUSED,队列管制块用来保留队列的状态,队列长度、音讯长度、队列ID、队列头尾地位和期待读写的工作列表,内核就是依据这些信息来治理音讯队列和工作实现对音讯读写等操作。 typedef struct { UINT8 *queue; UINT16 queueState; UINT16 queueLen; UINT16 queueSize; UINT16 queueID; UINT16 queueHead; UINT16 queueTail; UINT16 readWriteableCnt[OS_READWRITE_LEN]; LOS_DL_LIST readWriteList[OS_READWRITE_LEN]; LOS_DL_LIST memList; }LosQueueCB; 初始化后队列管制块的组织形式如下:创立队列:队列用于寄存具体的音讯内容,工作能够调用LOS\_QueueCreate()来创立队列,此时内核会依据入参指定的队列长度和音讯大小申请内存创立队列,并从g\_freeQueueList中调配一个管制块来治理队列,被调配的队列管制块状态为OS\_QUEUE\_INUSED。调配队列管制块时总是从头节点开始,如下图管制块0首先被调配用于治理新创建的队列。 写队列:内核反对两种写队列形式:从尾部写入LOS\_QueueWrite()和 从头部写入LOS\_QueueWriteHead():读队列:读队列只有一种形式,从队列头部读LOS\_QueueRead(),读取之后head指向下个节点。删除队列:当不再应用队列时能够应用LOS\_QueueDelete()来删除队列,此时会偿还队列管制块到g_freeQueueList中,并开释音讯队列: 三、数据结构--事件事件用于实现工作间的同步,但事件通信只能是事件类型的通信,无数据传输,事件管制块由工作申请,内核负责保护。事件管制块:事件管制块用来记录事件和治理期待读取事件的工作。uwEventID总共32bit代表31个事件(bit25保留),stEventList事件管制块的双向环形链表,当有工作读取事件但事件还没产生时工作会被挂载链表中,当事件产生时零碎唤醒期待事件的工作,此时工作就会被摘出链表。 typedef struct tagEvent { UINT32 uwEventID; LOS_DL_LIST stEventList; } EVENT_CB_S, *PEVENT_CB_S;事件初始化:事件管制块由工作创立,而后调用LOS_EventInit()进行初始化,初始化后的状态如下:事件读:当事件没有产生时,读事件操作会引发系统调度,把当前任务挂起并退出到stEventList链表,下图中事件1产生,工作Task1读取事件2,然而事件2没有产生导致Task1被挂起。事件写:当事件2产生时,工作Task2把事件2写入uwEventID,此时工作Task1被调度读取事件胜利,事件2对应bit位被清0(也能够不清0),Task1从链表stEventList中被摘出。事件删除:事件管制块是由工作创立的,内核不负责管制块的删除,然而工作能够调用LOS\_EventClear来革除事件。 四、数据结构--互斥锁互斥锁又称互斥型信号量,是一种非凡的二值性信号量,用于实现对共享资源的独占式解决。任意时刻互斥锁的状态只有开锁或闭锁,当有工作持有时,互斥锁处于闭锁状态,工作取得该互斥锁的所有权;当该工作开释它时,互斥锁被开锁,工作失去该互斥锁的所有权;当一个工作持有互斥锁时,其余工作将不能再对该互斥锁进行开锁或持有。互斥锁管制块:互斥锁管制块资源由内核创立和保护,内核初始化时会调用函数OsMuxInit()对锁资源进行初始化。期待互斥锁的工作会被挂载到muxList中。 typedef struct { UINT8 muxStat; /**< State OS_MUX_UNUSED,OS_MUX_USED */ UINT16 muxCount; /**< Times of locking a mutex */ UINT32 muxID; /**< Handle ID */ LOS_DL_LIST muxList; /**< Mutex linked list */ LosTaskCB *owner; /**< The current thread that is locking a mutex */ UINT16 priority; /**< Priority of the thread that is locking a mutex */ } LosMuxCB;初始化时内核会申请LOSCFG\_BASE\_IPC\_MUX\_LIMIT个锁资源,并把各资源块挂载到双向环形链表g\_unusedMuxList中,全局变量g\_allMux指向锁资源内存首地址,后续依据首地址加ID形式疾速查找对应的管制块:互斥锁创立:工作调用LOS\_MuxCreate()创立互斥锁,内核会从g_unusedMuxList的头部调配一个锁资源给工作。互斥锁申请:工作调用LOS\_MuxPend()申请互斥锁,如果锁被其它工作持有,则工作在muxList上排队。互斥锁开释:工作调用LOS\_MuxPost()开释互斥锁,如果有其它工作排队,则触发调度开释锁给排队工作。互斥锁删除:工作调用LOS\_MuxDelete()删除互斥锁,如果删除胜利锁资源被偿还到g\_unusedMuxList中。 ...

September 8, 2022 · 1 min · jiezi

关于openharmony:资深技术笔译总结的这7条建议看完提PR效率倍增

战码先锋,PR征集令(以下简称“战码先锋”)第二期正热火朝天地进行中,波及OpenAtom OpenHarmony(以下简称“OpenHarmony”)骨干仓、SIG仓、三方库,共计1000+代码仓任君挑战。刚看到流动的敌人们必定有个疑难:什么样业务背景的人能参加战码先锋流动?是否能够找到提PR的一些根本办法?为此,咱们邀请了战码先锋第一期的贡献者,也是第二期队长之一的King He为咱们带来了他的一些无效教训。以下是他的分享。实践证明,来自不同背景的人,有助于充沛发现问题。如果你是一名翻译,尽管不肯定有深厚的技术功底,但你能够施展业余能力,帮忙大家发现我的项目中语言类问题。同理,测试、材料、法务背景的共事亦是如此,不同特长的人退出,更有利于充沛地发现各种类型的问题。这点相似麻利开发的全功能团队。参加角色更全面,发现问题更充沛。英雄不问出处,只有敢于挑战,均可参加战码先锋,为开源我的项目添砖加瓦。本文是基于一名技术口译的视角,从开发者体验的角度和大家一起探讨代码文件中的常见材料类问题,并在此基础上分享一些集体的倡议。文章次要分为三个局部:材料内容对于开发者生态的意义;影响材料体验的典型问题;晋升材料体验的一些倡导。 首先,须要简略理解一下材料内容对于开发者生态的意义。依据近几年的开发者生态现状和开源生态报告,欠缺、精确的内容,是开发者抉择一个生态的重要因素之一。依据Accenture的调查报告显示,开发者认为技术精确及最新的内容(technically accurate and up-to-date content)是开发者生态中最为重要的两个因素。 起源:ENGAGING THE DEVELOPER COMMUNITY - What Developer Ecosystems Need to Know,AccentureOSCHINA和Gitee联结公布的2021中国开源开发者报告,进一步佐证了这一点。从报告能够看出,相干文档/材料是否丰盛的重要性仅次于源码品质。 --摘自《2021中国开源开发者报告》好的材料胜过千军万马,材料的重要性显而易见。好马配好鞍,好的代码要有好的材料配套,能力产生1+1大于2的成果,能力帮忙开发者更好地上手,产生良好的开发者体验,吸引更多的开发者参加。一个简单的技术产品,如果没有说明书,用户就没法高效、正确地应用该产品。代码就好比简单的产品,没有齐备的材料,开发者将无奈了解源码的作用和实现机制,在极大水平上影响其体验。对于OpenHarmony开源我的项目,文本内容次要蕴含两个局部:一是Docs仓中公布的文档,包含但不限于开发指南、API参考等。二是代码仓中蕴含的各种描述性信息,如readme、代码正文、log日志、API阐明等。 那么,影响开发者体验材料内容品质因素有哪些呢?依据开发者生态相干报告,这些因素包含但不限于:accuracy(准确性)、completeness(完整性)、currency(时近性)、findability(检索性)及readability(易读性)。须要留神的是,此前的报告大多以支流开源我的项目作为根底钻研对象。这些我的项目次要由欧美Top玩家主导,在语言文化方面有着人造劣势,具备良好的国际化和本地化成熟度。因而,国际化、本地化、根底语言品质等方面同样须要OpenHarmony开源我的项目重点关注。接下来,咱们将针对英文文本内容,在战码先锋流动中可关注哪些方面的典型问题?本次次要以非Docs仓的文本问题作为示例。特地申明:以下示例仅作为技术交换的示意用处,不形成任何明示或暗示的申明、陈说。同时,因为相干仓内容在继续的变动更新,如有出入,请以理论为准。 一、精确清晰示例1:辞不达意。这里API是DelUser,其性能为删除用户,因而形容应该是Delete a user而非user authentication。 示例2:意思谬误。PIN_MIXED是Mixed PIN鉴权,FACE_2D才是2D人脸识别鉴权。 示例3:含意相同。这里是inactive状态的回调,叠加语法错误,减少了解难度。理论含意应为:Callback invoked in the main thread when an ability becomes inactive. 二、内容残缺依据开源要求,开源代码仓中正文内容均需英文化。受限于英文表达能力或外部合规方面的考量,开发人员可能会偏向于删除或者放弃提供一些须要英文化的必要内容,如文件的简述、实现机制或者留神等,如下例所示:左侧enum短少必要的正文,开发者无奈了解short period、normal period和long period的差别。 三、组织正当信息的组织应合乎用户的逻辑认知程序,例如,API介绍应遵循“API性能阐明+权限+参数阐明+返回阐明”的信息组织构造。上面例子中,API名称被间接代替为API性能阐明,而理论的API性能阐明则呈现在permission之后。 参考批改如下: 四、一致性一致性次要体现在格调的一致性和内容的一致性两方面。示例1:表白格调不统一。如下日志形容中,高低两行的大小写格调不统一: 示例2:内容和理论不符。如下Readme中,目录构造中代码仓名称和理论代码仓名称不符: 五、根底语言问题示例1:拼写错误呈现在正文语句或API名称、参数等,如下例所示:faild拼写错误,正确应该为failed。 再看一个特例,这里pin尽管并非拼写错误,然而实际上它是personal identification number的缩写PIN,如写成pin,表白的意思就齐全不一样了。 示例2:语法错误、表白不标准等问题在代码文件中普遍存在,如下例所示:高低两个句子格调不统一。start device find for restart没有应用sentence caps,第一个单词首字母大写。两个句子均存在语法错误,而且因为用词不当问题,两个句子之间的外在逻辑关联没有体现,后面示意动作:Start discovery of devices for restart.前面则示意动作后果:Failed to start device discovery. ...

September 7, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-Camera源码分析

一、简介以后,开源在科技进步和产业倒退中施展着越来越重要的作用,OpenAtom OpenHarmony(简称“OpenHarmony”)赋予了开发者孕育翻新的种子,也为数字化产业倒退开拓了一片土壤。深开鸿是开源的动摇践行者,基于OpenHarmony聚焦智能物联网操作系统(KaihongOS)技术研发与继续翻新。OpenHarmony Camera是多媒体子系统中的一个重要模块,Camera提供了OpenHarmony相机的预览、拍照和录像等性能。作为深开鸿的一名OS零碎开发工程师,我长期致力于OpenHarmony框架层的研发工作,在OpenHarmony相机模块的拍照、预览和录像方面积攒了一些教训,我将围绕着这三个外围性能对OpenHarmony Camera源码进行具体的剖析。 二、OpenHarmony相机子系统(1)零碎简介相机组件反对相机业务的开发,开发者能够通过已凋谢的接口实现相机硬件的拜访、操作和新性能开发,最常见的操作如:预览、拍照和录像等。架构图相机框架中次要蕴含会话治理、设施输出和数据输入,设施的输出和数据的输入配置都是在采集会话中实现,会话治理模块治理相机设施输出和数据输入。应用层在调用相机性能时,首先须要创立采集会话,在配置会话的过程中会将创立的设施输出和数据输入增加到采集会话中。相机框架中几个重要的概念会话治理:对相机采集的生命周期、参数配置、输出和输入的治理。设施输出:次要的输出设施是相机,对相机的输出参数进行设置,比方设置闪光灯模式等。数据输入:相机的输入有拍照输入、预览输入和录像输入,别离对应三个不同的类,所以下层须要依据不同的场景创立出不同的数据输入。相机底层性能图相机驱动框架模型对上实现相机HDI接口,对下实现相机Pipeline模型,治理相机各个硬件设施。底层硬件提供了相机设施性能,比方相机的设施治理,包含相机设施枚举、相机设施能力查问、流的创立治理以及图像的捕捉。(2)功能模块会话治理模块会话治理模块的次要性能是配置会话的输出(设施输出)和输入(数据的输入),以及管制会话的开始和完结,次要接口有:设施输出模块相机输出次要是给会话设置设施的输出,设施输出模块能够设置和获取输出设施的参数,比方闪光灯模式、缩放比例、对焦模式等,次要接口有:数据输出模块数据输出模块依据不同的场景分为拍照输入、预览输入和录像输入。其中拍照的输入是通过PhotoOutput的Capture接口来提供拍照性能,预览和录像则是通过StreamRepeat提供的接口实现。次要接口有:(3)性能个性或利用场景相干性能接口:相机拍照、相机预览、相机录像。相机的次要利用场景是拍照、预览和录像,以下针对这三个场景进行流程的剖析。camera\_standard\interfaces\inner_api\native\test目录下利用文件进行拍照、预览和录像性能的应用,进行源码剖析。拍照源码剖析拍照性能依据camera\_capture.cpp文件中的main办法进行剖析,以下列举了main办法中的次要调用步骤,并且在正文中介绍外围代码的性能。在拍照过程中首先获取相机管理器实例并取得相机对象列表,而后创立并配置采集会话(其中包含配置相机输出、创立消费者Surface以及监听事件、配置拍照输入),最初拍摄照片,开释资源。以下是拍照流程的时序图,流程只剖析到CameraService,后续的操作是通过Camera的Service和HDI接口进行调用,最终调用到Camera的底层HDF实现。以下对几个外围代码进行具体分析。① 创立采集会话App侧先调用CameraManager的CreateCaptureSession接口。CameraManager中有一个serviceProxy\_变量,这个变量在CameraManager初始化的时候赋值。CameraManager中通过serviceProxy\_调用CreateCaptureSession,实际上是调用到HcameraService的CreateCaptureSession接口,新建了HCaptureSession对象,并通过CreateCaptureSession参数进行返回。② 创立消费者Surface并注册监听器以监听缓冲区更新调用Surface的CreateSurfaceAsConsumer接口。创立ConsumerSurface对象,而后对该对象进行初始化操作,Init次要创立BufferQueue并初始化,应用BufferQueue作为参数创立出BufferQueue的Producer和Consumer,作为数据生产者和消费者。创立CaptureSurfaceListener对象。CaptureSurfaceListener继承IbufferConsumerListener抽象类,实现了OnBufferAvailable接口,capture胜利后,在这个接口中通过surface的AcquireBuffer办法来获取帧数据,进行保留图片的解决。接下来是注册监听器,办法是调用ConsumerSurface的RegisterConsumerListener接口。 调用BufferQueueConsumer的RegisterConsumerListener接口,最终是调用到BufferQueue的RegisterConsumerListener接口。 ③ 拍摄照片调用PhotoOutput的Capture接口实现拍照性能。 通过streamCapture\_调用到了HstreamCapture的Capture接口。 调用流程来到了StreamOperatorProxy的Capture接口,StreamOperatorProxy是HDI模块的client端,HDI模块的client通过IPC调用到HDI的server端进行具体的操作,这个属于底层调用模块,临时不持续剖析。预览源码剖析预览性能依据camera\_capture.cpp文件中的main办法进行剖析,以下列举了main办法中的次要调用步骤,并且正文中介绍外围代码的性能。 在预览过程中首先获取相机管理器实例并取得相机对象列表,而后创立并配置采集会话(其中包含配置相机输出、创立消费者Surface以及监听事件、配置预览输入),最初开始预览、进行预览、开释资源。以下是预览流程的时序图,流程只剖析到CameraService,后续的操作是通过Camera的Service和HDI接口进行调用,最终调用到Camera的底层HDF实现。因为预览和拍照流程有局部统一,咱们只剖析差别局部的流程。 ① 创立预览输入首先调用CameraManager的CreateCustomPreviewOutput接口。 调用HcameraService的CreateCustomPreviewOutput的接口,这个接口中会创立HStreamRepeat对象,并将对象赋值给streamRepeat的参数,后续依据streamRepeat创立PreviewOutput对象返回,PreviewOutput作为预览的输入。 ②开始预览首先调用CaptureSession的Start接口。 接着调用HCaptureSession的Start接口。 在HCaptureSession的调用中,调用HStreamRepeat的Start接口,HStreamRepeat在上述的创立预览输入时创立的对象,最终调用到HStreamRepeat的StartPreview接口。 在StartPreview办法中调用streamOperator\_的Capture接口,第三个参数传入true,示意间断抓取数据。streamOperator\_的调用是在HDI中的操作,属于底层操作,暂不进行剖析。录像源码剖析录像性能依据camera\_video.cpp文件中的main办法进行剖析,以下列举了main办法中的次要调用步骤,并且正文中介绍外围代码的性能。 在录像过程中首先获取相机管理器实例并取得相机对象列表,而后创立并配置采集会话(其中包含配置相机输出、创立视频输入),最初进行视频的录制、暂停、复原和进行。以下是录像流程的时序图,流程只剖析到了CameraService相干,后续的操作是通过Camera的Service和HDI接口进行调用,最终调用到Camera的底层HDF实现。录像流程跟上述流程基本一致,针对差别流程做相干的源码剖析。 ①创立录像输入首先调用CameraManager的CreateVideoOutput接口,在CameraManager会调用serviceProxy\_变量的CreateVideoOutput. serviceProxy\_最终会调用到HcameraService的CreateVideoOutput接口,在HcameraService中会创立HStreamRepeat对象,创立胜利后会将该对象赋值给CreateVideoOutput的第二个参数streamRepeat,这个参数会在CameraManager中作为创立VideoOutput的参数。 ②开始录像首先调用VideoOutput的Start接口,接着会调用到streamRepeat\_的Start接口。 最终由StartVideo接口来实现录像的性能。 调用streamOperator的Capture接口来进行录像,其中第二个参数captureInfoVideo是video相干的信息参数。 三、总结本文首先对相机预览、拍照和录像性能的应用层进行了代码剖析,其次对框架层的流程进行了梳理,最初再对框架源码进行剖析。心愿通过本文能帮忙开发者初步把握OpenHarmony Camera源码工作的整个流程。对于OpenHarmony多媒体子系统方面的内容,我曾经发表过《http://mp.weixin.qq.com/s?__b...》《http://mp.weixin.qq.com/s?__b...》两篇文章,感兴趣的敌人能够点击浏览,心愿大家通过学习可能把握更多OpenHarmony多媒体子系统的工作原理。

September 6, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony中的HDF单链表及其迭代器

概念为了性能思考,嵌入式零碎个别应用C语言进行开发,因为C语言规范库没有封装链表,所以嵌入式零碎个别本人设计和实现链表这种数据结构。单链表是链表中的一种,本文形容OpenAtom OpenHarmony(以下简称“OpenHarmony”)中HDF软件模块本人定义的单链表,并学习其设计和实现办法。其中蕴含一些技巧,能够进步读者的软件开发能力。 单链表定义在OpenHarmony的HDF软件模块中,单链表定义在hdf_slist.h中。 struct HdfSListNode { struct HdfSListNode *next; // next element in list, or NULL};如上图所述,每个节点都是HdfSListNode,上图共有5个节点,每个节点外部有一个next成员,其值为下一个节点在内存中的地址。因为能够通过这个地址找到下一个节点,所以在图外面用红色右箭头来形容这个关系。整体来看,从1号节点能够通过next成员顺次找到前面4个节点,从图形看,就是一个逻辑上的链关系,咱们把这种构造称为链表。独自看5号节点,5号节点没有下一个节点,所以设计上是须要给一个特定的值来示意,实现上个别把5号节点的next成员填成0值,表明其为最开端的节点。接下来咱们看上面这个数据结构: struct HdfSList { struct HdfSListNode *root;};其示意图如下:如上图所示,圆角矩形示意的是HdfSList,其root成员记录了链表中某节点的地址,为了拜访整个链表,须要将root成员的值设置成第1个节点的地址。因为单链表只反对往一个方向查找,不反对往回查找,如下面的谬误范例。如果root记录的是第二个节点地址,则第一个节点变得不可拜访。 迭代器简介迭代器是随同汇合概念产生的,意思是顺次拜访汇合中的每一个元素,迭代器提供拜访这些元素的办法。对于单链表而言,链表中的每一个节点都是一个元素,所有的节点组成汇合。所以能够通过迭代器来拜访链表中的元素。迭代器须要提供的根本能力以及操作范式是: 初始化迭代器反复判断(汇合中还有未被拜访的元素) 获取下一个元素的拜访办法 读写下一个元素(也可能是删除这个元素)完结上述范式展现了迭代器的用法,通过迭代器,遍历元素变得简略间接(将遍历算法封装在迭代器中),不必每次迭代都思考数据结构细节(数据结构品种繁多,单链表只是其中之一)。对于本文形容的单链表,其封装了上面3个函数来反对迭代算法。这3个函数别离示意迭代器对象的初始化;汇合中是否还有元素没有参加迭代;取出汇合中下一个能够参加迭代的元素。 /* * @brief initialize iterator * * @param[in] iterator the point of iterator. * @param[in] list the point of operation list. * * @return None */void HdfSListIteratorInit(struct HdfSListIterator *iterator, struct HdfSList *list);/* * @brief check whether list has next node. * * @param[in] iterator the point of iterator. * * @return the result of check next. */bool HdfSListIteratorHasNext(struct HdfSListIterator *iterator);/* * @brief get next link in the list and move iterator to next. * * @param[in] iterator the point of iterator. * * @return point to next element of it. */struct HdfSListNode *HdfSListIteratorNext(struct HdfSListIterator *iterator);迭代器实现思考对于本文所形容的单链表迭代器。直观上看,除了第一个节点,其它节点都能够通过next拜访到,第一个节点通过root拜访到。那实际上会不会就是这么简略呢?其实不然,因为须要思考到节点删除的因素。如下图,在链表迭代过程中,如果删除了以后节点,那么怎么找到下一个节点呢?如上图所示,当在遍历过程中删除了curr节点时,那么通过它找到下一个节点是不可能了。所以这个时候咱们必须借助操作curr之前还在链表上的上一个节点,即上图的prev节点,通过其next成员,找到须要迭代解决的下一个节点。所以,迭代过程中须要记录prev、curr这2个节点的地位信息。迭代过程理论就是调整prev和curr的过程,对于不删除的状况,prev和curr顺次向后挪动,删除操作时,只挪动curr。另外,对于第1个节点的状况须要非凡解决,所以须要一个额定的信息来示意是不是迭代第1个元素,因为本文形容的迭代器对象含有3个信息。如下代码所示: ...

September 5, 2022 · 1 min · jiezi

关于openharmony:宿舍全屋智能开发指南

我的项目阐明基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各我的项目开发流程大体类似,本文次要以碰一碰开门为例介绍如何在现有OpenHarmony开源代码的根底上实现咱们想要的性能。须要提前准备的设施:搭载HarmonyOS零碎的手机一台,API 6+;搭载Hi3861模组的主板,不限于HiSpark、小熊派套件;7.4V电池、一个舵机、若干导线。最终的碰一碰开门、开灯、风扇成果如下: 智能台灯与风扇(包含门锁)、数字管家利用、云平台三局部数据流如下图所示。数字管家利用下发风速、亮度调节等设施控制指令到云平台,云平台发送到指定设施,同时风扇、台灯等设施上报以后状态到云平台,云平台再发送至数字管家利用,实现用户可视化操作,实时控制智能设施。开发流程我的项目次要蕴含:①搭建设施端开发环境、②数字管家装置、③配置NFC标签、④实操验证,共四个局部。开发过程中各关键环节如下图,整体思路是筹备软硬件环境,编写业务代码,烧录测试,若开发时遇到问题可参考该图进行排查。开发环境搭建次要分为设施端环境、数字管家两局部。设施端应用DevEco Device Tools最新版本,在ubuntu平台开发,在本我的项目中应用该工具编辑源码、下载二进制文件;数字管家应用DevEco Studio Beta3.1及以上版本,在windows平台开发。 搭建设施端开发环境DevEco Device Tools搭建第一步,在Ubuntu20.04零碎搭建设施端开发环境,反对源码编辑、编译、下载一站式开发。在Ubuntu零碎搭建DevEco Device Tools,具体搭建流程参考开发环境筹备(https://docs.openharmony.cn/p...)。第二步,装置编译工具链,Hi3861V100开发板Ubuntu环境工具链下载链接gn、ninja、gcc_riscv32。其余参考工具链治理。增加工具后如下图:Ubuntu环境编译工具筹备 // A.根底依赖 sudo apt-get install -y build-essential gcc g++ make zlib* libffi-dev // -装置 scons python3 -m pip install scons // -查看版本,3.0.4以上 scons -v // B.装置python模块 sudo pip3 install setuptools kconfiglib pycryptodome ecdsa six --upgrade --ignore-installed six// C.增加gcc_riscv32(WLAN模组类编译工具链) 在装置DevEco Device Tools时曾经下载 // -解压到根目录 tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~ // -增加环境变量 vim ~/.bashrc // -最初一行退出:export PATH=~/gcc_riscv32/bin:$PATH // -确认装置是否失常,有返回版本号即可。riscv32-unknown-elf-gcc -v设施端源码下载第一步,码云工具装置 ...

September 1, 2022 · 2 min · jiezi

关于openharmony:OpenHarmony技术挑战课题征集

OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由凋谢原子开源基金会(OpenAtom Foundation)孵化及经营的开源我的项目,通过构建分布式全场景协同的开源操作系统底座与生态系统,为生产、金融、能源、教育、工业、交通、医疗等行业提供对立交融的数字化翻新根底平台,撑持产业翻新倒退。在凋谢原子开源基金会、OpenHarmony工作委员会、技术领导委员会、项目管理委员会、共建单位和宽广开发者的共同努力下,截至目前吸引了40多家主仓代码奉献单位,汇聚160万+社区用户,已成为寰球智能终端操作系统畛域中一股不可漠视的开源力量。随着寰球数字化过程的减速倒退,智能终端操作系统在全场景对立体验、零碎能效、隐衷数据安全加强、开发效率等方面面临新机遇和挑战,需进一步增强前瞻技术倒退研判,辨认产业技术挑战,引领原创性难题攻关,为此,OpenHarmony技术领导委员将征集并评比出OpenHarmony十大技术挑战课题。现就无关事项公布如下: 一、征集工夫从告诉之日起,至2022年10月31日止 二、征集形式•外部征集:由OpenHarmony技术领导委员会探讨并给出难题•社区公开征集:面向OpenHarmony社区相干的软件开发企业、科研院所和集体开发者征集•请将课题通过邮件发送至:tsc@openharmony.io 三、征集内容和范畴面向OpenHarmony主战场、聚焦根技术创新,征集对操作系统倒退具备引领作用的前沿技术挑战、工程技术难题和产业技术问题。包含但不限于以下技术方向:•组件化、弹性化的解耦架构,反对宽泛的全场景•全场景、跨端无缝智慧协同•极简开发、多终端部署的一致性体验 四、资料要求•每个难题应包含难题题目、联系方式、难题注释三局部•注释次要蕴含:问题形容、问题背景、产业价值、业界停顿、技术主张、参考文献等,内容均以中文撰写(详情参考 七、附件),注释长度、模式不限 五、评审方法•评审组织:OpenHarmony技术领导委员会,名单详见官网:https://www.openharmony.cn/te...•评审流程:第一轮初选,初选难题提交数量不限,所有提交难题均会由技术领导委员会进行投票打分,最多入选数量为20个。第二轮终选,已入围的初评难题,由出题组织/集体加入技术领导委员会例会进行陈说,技术领导委员会委员依照技术创新价值、难题难度、可落地性等维度现场打分,评比出十大难题。 六、流动激励•第一轮初评入围的难题单位/集体处分资金2000人民币或等值OpenHarmony相干产品、开发板。•第二轮评比入围十大技术难题的单位/集体处分资金10000人民币,并将在OpenHarmony技术峰会上展现。•除以上资金间接处分外,所有取得入选初评/评比难题,均可取得OpenHarmony相干媒体宣传曝光机会,并可能取得企业合作项目或赞助等激励。 七、附件OpenHarmony难题撰写格局模板参考 八、联系人OpenHarmony技术领导委员会经营反对组:tsc@openharmony.io 附件:OpenHarmony难题撰写格局模板参考 难题题目难题示例技术联系方式示例:XX单位/姓名/邮箱难题注释问题形容:问题背景:产业价值:业界停顿:技术主张:参考文献:

August 30, 2022 · 1 min · jiezi

关于openharmony:网络组件axios可以在OpenHarmony上使用了

什么是axios上古浏览器页面在向服务器申请数据时,因为返回的是整个页面的数据,页面都会强制刷新一下,这对于用户来讲并不是很敌对。并且咱们只是须要批改页面的局部数据,然而从服务器端发送的却是整个页面的数据,非常耗费网络资源。而咱们只是须要刷新页面的局部数据,并不心愿刷新整个页面。于是一种新的技术,异步网络申请Ajax(Asynchronous JavaScript and XML)随之产生,它能与后盾服务器进行大量数据交换,使网页实现异步更新。这意味着能够在不重载整个页面的状况下,对网页的某些局部进行更新。然而因为浏览器中原生的XMLHttpRequest API较难应用,于是又有了更多用于实现ajax的javascript框架,比方咱们相熟的jQuery、Dojo、YUI等等。而现在一个叫axios的轻量框架逐渐怀才不遇,目前在github的战绩曾经达到了Fork9.6k+和Star94k+,它实质上也是对原生XHR的封装,只不过它是Promise的实现版本,合乎最新的ES标准,有以下特点:● 从浏览器中创立 XMLHttpRequests● 从 node.js 创立 http 申请● 反对 Promise API● 拦挡申请和响应● 转换申请数据和响应数据● 勾销申请● 主动转换 JSON 数据 在OpenHarmony利用中应用axios咱们能够看到axios既能够在浏览器中应用,又能够在Nodejs中应用,而现在随着OpenHarmony ArkUI的倒退,axios又有了新的用武之地,即在OpenHarmony规范零碎的利用中应用:可用于网络申请和上传下载文件,并齐全继承axios原生的用法和所有个性。对,你没有看错,axios的确是能够在OpenHarmony上应用了。上面简略介绍下,如何在OpenHarmony利用中应用axios。第一步:在OpenHarmony规范零碎的利用中下载安装OpenHarmony axios三方组件。 npm install @ohos/axios –saveOpenHarmony npm环境配置等更多内容,参考装置教程 如何装置OpenHarmony npm包。(https://gitee.com/openharmony...)第二步:在页面中,引入axios。 import axios from "@ohos/axios";第三步:axios既能够当做函数间接应用发动异步申请,也能够当做对象,应用其get/post办法发动异步申请。作为函数间接发动post申请,通过promise获取申请后果。 let url = 'http://www.xxx.xxx'; axios({ method: "post", url: url, data:{ catalogName: "doc-references", language: "cn", objectId: "js-apis-net-http-0000001168304341", } }) .then(res => { console.info('post result:' + JSON.stringify(res.data.value.breadUrl)) }) .catch(error => { console.info('post error!') })作为对象,应用其get/post办法发动异步申请 const test= axios.create({( baseURL:'http://xxxx'});test.get('/xxxx').then(response=>{}) axios拦截器个别在应用axios时,会用到拦截器的性能,个别分为两种:申请拦截器、响应拦截器。● 申请拦截器 在申请发送前进行必要操作解决,例如增加对立cookie、申请体加验证、设置申请头等,相当于是对每个接口里雷同操作的一个封装;● 响应拦截器 同理,响应拦截器也是如此性能,只是在申请失去响应之后,对响应体的一些解决,通常是数据对立解决等,也常来判断登录生效等。axios的拦截器作用十分大。axios的拦截器分为申请拦截器跟响应拦截器,都是能够设置多个申请或者响应拦挡。每个拦截器都能够设置两个拦挡函数,一个为胜利拦挡,一个为失败拦挡。在调用axios.request()之后,申请的配置会先进入申请拦截器中,失常能够始终执行胜利拦挡函数,如果有异样会进入失败拦挡函数,并不会发动申请;调起申请响应返回后,会依据响应信息进入响应胜利拦挡函数或者响应失败拦挡函数。举个例子1.增加申请拦截器 ...

August 29, 2022 · 1 min · jiezi

关于openharmony:直播回顾OpenHarmony知识赋能七期第三课OpenHarmony-WiFi扫描仪实现

8月25日早晨19点,常识赋能第七期第三节直播 《OpenHarmony常识赋能-WiFi扫描仪实现》 ,在OpenHarmony开发者成长打算社群内胜利举办。本节直播为OpenHarmony常识赋能第七期最初一场直播,由领有10年利用框架层开发教训的资深技术专家郭岳峰老师进行解说,次要介绍了利用实现源码剖析和波及到的框架层实现流程这两方面的内容,干货满满!欢送大家长按下方海报扫码,回看8月25日晚的常识赋能第七期第三节直播:成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,目前常识赋能第七期课程已全副完结,期间由2位资深技术专家蒋卫峰和郭岳峰老师围绕WiFi扫描仪这一案例进行零碎授课,通过本期直播,开发者不仅能够把握WiFi框架层的原理,还能通过WiFi接口开发出炫酷的WiFi利用。现将前两节直播回顾汇总如下,精彩内容不容错过,快点开始学习吧!一、 OpenHarmony WiFi子系统回顾链接:https://juejin.cn/post/713081...内容介绍:从事底层根底工作18年的资深技术专家蒋卫峰老师解说了WiFi子系统总体架构,WiFi要害模块介绍以及后续课程布局。二、OpenHarmony WiFi扫描仪UX设计回顾链接:https://juejin.cn/post/713267...内容介绍:领有10年利用框架层开发教训的资深技术专家郭岳峰老师解说了三方面内容,包含UX设计、外围组件的介绍和WiFi子系统框架的补充介绍。

August 26, 2022 · 1 min · jiezi

关于openharmony:如何通过OpenHarmony的音频模块实现录音变速功能

简介OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由凋谢原子开源基金会孵化及经营的开源我的项目,是面向全场景、全连贯、全智能时代的智能物联网操作系统。多媒体子系统是OpenHarmony零碎中的外围子系统,为零碎提供了相机、音频和视频等多媒体性能。多媒体子系统的音频模块、音频录音性能能够提供两套接口,一是由ohos.multimedia.media提供的AudioRecorder接口,可能间接设置录音保留的文件门路,在录制完结当前主动生成对应的录音文件,代码编写比较简单;二是由ohos.multimedia.audio提供的AudioCapturer接口,可能取得录音过程中的PCM数据,并对数据进行解决。因为Capturer接口对于原始数据的解决更加灵便,明天就和大家介绍通过Capturer接口实现录音变速的性能的办法。 成果展现通过Capturer接口实现音频的录制,在录制过程中对PCM数据进行重采样实现声音的快放和慢放。首先设置录音减速或者录音加速,设置实现当前点击“录音开始”按钮进行录音,点击“录音完结”按钮进行录音,再通过点击“播放开始”对录音的音频进行播放,播放的音频是设置后的减速或者加速成果。代码曾经上传至SIG仓库,链接如下:https://gitee.com/openharmony... 目录构造 调用流程1.Start的框架层调用流程 Read的框架层调用流程 源码剖析1.首先看一下页面的布局,次要分为四个模块:(1)设置录音减速 <div style="text-color: aqua;background-color: yellow;margin-bottom: 20fp;"> <text style="font-size: 30fp;">设置录音减速:</text></div><div class="container"> <button class="first" type="capsule" onclick="set_5_4">1.25倍速</button> <button class="first" type="capsule" onclick="set_6_4">1.5倍速</button></div><div class="container"> <button class="first" type="capsule" onclick="set_7_4">1.75倍速</button> <button class="first" type="capsule" onclick="set_8_4">2倍速</button></div>(2)设置录音加速 <div style="text-color: aqua;background-color: yellow;margin-bottom: 20fp;margin-top: 20fp;"> <text style="font-size: 30fp;">设置录音加速:</text></div><div class="container"> <button class="first" type="capsule" onclick="set_3_4">0.75倍速</button> <button class="first" type="capsule" onclick="set_2_4">0.5倍速</button></div>(3)录音 <div style="text-color: aqua;background-color: yellow;margin-bottom: 20fp;margin-top: 20fp;"> <text style="font-size: 30fp;">录音:</text></div><div class="container"> <button class="first" type="capsule" onclick="record">录音开始</button> <button class="first" type="capsule" onclick="recordstop">录音完结</button></div>(4)播放 <div style="text-color: aqua;background-color: yellow;margin-bottom: 20fp;margin-top: 20fp;"> <text style="font-size: 30fp;">播放:</text></div><div class="container"> <button class="first" type="capsule" onclick="play">播放开始</button> <button class="first" type="capsule" onclick="playstop">播放完结</button></div><div class="container"> <video if="{{ display }}" id="{{ videoId }}" class="video" src="{{url}}" autoplay="{{ autoplay }}" controls="{{ controlShow }}" muted="false" onseeked="seeked" onprepared="prepared" > </video></div>2.逻辑代码在JS中:(1)首先通过AudioCapturer接口获取到PCM数据,再通过调用AudioCapturer的start接口来启动录音流程。 globalThis.capturer.start().then(function () { console.log("gyf start"); globalThis.capturer.getBufferSize((err, bufferSize) => { if (err) { console.error('gyf getBufferSize error'); } else { console.log("gyf bufferSize = " + bufferSize); globalThis.getBuf(bufferSize); } });});(2)启动胜利当前,getBuf会调用到getData函数,getData函数通过AudioCapturer的read办法来读取数据,胜利读取到数据当前,通过handleBuffer函数对数据进行解决。handleBuffer函数的参数arrayBuffer就是通过read办法读取进去的pcm数据,在handleBuffer中对数据进行了疾速播放或者慢速播放的解决。 ...

August 25, 2022 · 3 min · jiezi

关于openharmony:本周四晚1900知识赋能第七期第3课丨OpenHarmony-WiFi扫描仪实现

8月25日19:00~20:00,第七期常识赋能第三节直播就要开始啦!如果你是不足实战经验的学生,如果你是老成持重的职场新人,如果你是想参加开源的贡献者,那么本期的直播课将不容错过!通过本期直播,开发者不仅能够把握WiFi框架层的原理,还能通过WiFi接口开发出炫酷的WiFi利用。第2节直播中,领有10年利用框架层开发教训的资深技术专家郭岳峰老师解说了WiFi扫描仪UX设计、外围组件介绍和子系统框架的补充介绍,开发者们纷纷表示出对这一版块内容的学习趣味。而本节直播为第七期常识赋能最初收官之作,持续由资深技术专家郭岳峰老师解说《OpenHarmony WiFi扫描仪实现》,将次要介绍两方面内容,包含利用实现源码剖析和波及到的框架层实现流程,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!

August 24, 2022 · 1 min · jiezi

关于openharmony:如何在OpenHarmony上使用SeetaFace2人脸识别库

简介置信大部分同学们都已理解或接触过OpenAtom OpenHarmony(以下简称“OpenHarmony”)了,但你肯定没在OpenHarmony上实现过人脸识别性能,跟着本文带你疾速在OpenHarmony规范设施上基于SeetaFace2和OpenCV实现人脸识别。 我的项目成果本我的项目实现了导入人脸模型、人脸框选和人脸识别三大性能,操作流程如下: 录入页面点击右下角按钮,跳转拍摄页面进行拍照;抉择一张或多张人脸作为训练模型,并设置对应的名字;抉择一张未录入的人脸图片,点击框选按钮实现人脸图片框选性能;最初点击辨认,利用会对以后图片进行匹配,最终在界面中显示辨认后果。 疾速上手设施端开发设施端通过OpenCV对图像进行解决并通过Seetaface2对图形数据进行人脸头像的辨认,最终输入对应的NAPI接口提供给利用端调用。因而设施端开发次要波及到OpenCV和Seetaface2的移植以及NAPI接口的开发。OpenCV库移植OpenCV是一个性能十分弱小的开源计算机视觉库。此库已由常识体系工作组移植到了OpenHarmony中,前期还会将此库合入到主仓。在此库上主仓之前,咱们只须要以下几个步骤就能够实现OpenCV的移植应用。 通过以下命令下载曾经移植好的OpenCVgit clone git@gitee.com:zhong-luping/ohos_opencv.git将OpenCV拷贝到OpenHarmony目录的third_party下cp -raf opencv ~/openharmony/third_party/适当裁剪编译选项关上OpenCV目录下的BUILD.gn,如下:不须要video以及flann性能,将对应的模块正文即可。import("//build/ohos.gni")group("opencv") { deps = [ "//third_party/opencv/modules/core:opencv_core", // "//third_party/opencv/modules/flann:opencv_flann", "//third_party/opencv/modules/imgproc:opencv_imgproc", "//third_party/opencv/modules/ml:opencv_ml", "//third_party/opencv/modules/photo:opencv_photo", "//third_party/opencv/modules/dnn:opencv_dnn", "//third_party/opencv/modules/features2d:opencv_features2d", "//third_party/opencv/modules/imgcodecs:opencv_imgcodecs", "//third_party/opencv/modules/videoio:opencv_videoio", "//third_party/opencv/modules/calib3d:opencv_calib3d", "//third_party/opencv/modules/highgui:opencv_highgui", "//third_party/opencv/modules/objdetect:opencv_objdetect", "//third_party/opencv/modules/stitching:opencv_stitching", "//third_party/opencv/modules/ts:opencv_ts", // "//third_party/opencv/modules/video:opencv_video", "//third_party/opencv/modules/gapi:opencv_gapi", ]增加依赖子系统的part_name,编译框架子系统会将编译出的库拷贝到系统文件中。此我的项目中咱们新建了一个SeetaFaceApp的子系统,该子系统中命名part_name为SeetafaceApi,所以咱们须要在对应模块中的BUILD.gn中加上part_name="SeetafaceApi"以module/core为例:ohos_shared_library("opencv_core"){ sources = [ ... ]configs = [ ... ]deps = [ ... ]part_name = "SeetafaceApi"}编译工程须要增加OpenCV的依赖。在生成NAPI的BUILD.gn中增加以下依赖:deps += [ "//third_party/opencv:opencv" ]至此,人脸识别中OpenCV的移植应用实现。SeetaFace2库移植SeetaFace2是中科视拓开源的第二代人脸识别库。包含了搭建一套全自动人脸识别零碎所需的三个外围模块,即:人脸检测模块FaceDetector、面部关键点定位模块FaceLandmarker以及人脸特征提取与比对模块 FaceRecognizer。对于SeetaFace2的移植请参照文档:SeetaFace2移植开发文档。NAPI接口开发对于OpenHarmony中的NAPI开发,参考视频:OpenHarmony中napi的开发视频教程。本文将重点解说NAPI接口如何实现OpenCV以及SeetaFace的调用。 人脸框获取的NAPI接口的实现。int GetRecognizePoints(const char *image_path);此接口次要是通过应用层输出一张图片,通过OpenCV的imread接口获取到图片数据,并通过人脸检测模块FaceDetector剖析取得图片中所有的人脸矩形框(矩形框是以x,y,w,h的形式)并将人脸框矩形以数组的形式返回到应用层。人脸框矩形获取的次要代码如下:static int RecognizePoint(string image_path, FaceRect *rect, int num){ if (rect == nullptr) { cerr << "NULL POINT!" << endl; LOGE("NULL POINT! \n"); return -1; } seeta::ModelSetting::Device device = seeta::ModelSetting::CPU; int id = 0; /* 设置人脸识别模型。*/ seeta::ModelSetting FD_model( "/system/usr/model/fd_2_00.dat", device, id ); seeta::ModelSetting FL_model( "/system/usr/model/pd_2_00_pts81.dat", device, id ); seeta::FaceDetector FD(FD_model); seeta::FaceLandmarker FL(FL_model); FD.set(seeta::FaceDetector::PROPERTY_VIDEO_STABLE, 1); /* 读取图片数据 */ auto frame = imread(image_path); seeta::cv::ImageData simage = frame; if (simage.empty()) { cerr << "Can not open image: " << image_path << endl; LOGE("Can not open image: %{public}s", image_path.c_str()); return -1; } /* 图片数据进行人脸识别解决 ,获取所有的人脸框数据对象*/ auto faces = FD.detect(simage); if (faces.size <= 0) { cerr << "detect " << image_path << "failed!" << endl; LOGE("detect image: %s failed!", image_path.c_str()); return -1; } for (int i = 0; (i < faces.size && i < num); i++) { /* 将所有人脸框对象数据以坐标模式输入*/ auto &face = faces.data[i]; memcpy(&rect[i], &(face.pos), sizeof(FaceRect)); } return faces.size;}其中FD_model是人脸检测模型,而FL_model是面部关键点定位模型(此模型分为5点定位和81点定位,本我的项目中应用的是81点定位模型),这些模型从开源我的项目中收费获取。通过以上形式获取到对应的人脸矩形框后,再将矩形框以数组的形式返回到利用端: ...

August 22, 2022 · 6 min · jiezi

关于openharmony:OpenHarmony有氧拳击之设备端开发

一、简介在一个风和日丽,阳光明媚的下午,码农们都像平常一样正在专一地码代码。忽然后面的小哥哥站起来,手握开发板,来回出拳。这是怎么回事?原来这是一款拳击互动游戏,本文将带你一起解开其中的神秘。开发者从中不仅能体验到学习常识的愉悦,还能享受到健身的乐趣。依靠OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.2 Beta1操作系统,样例分为利用端和设施端两局部。本文次要介绍设施端的实现,后续会分享利用端的开发。设施端:采纳小熊派BearPi-HM Nano(Hi3861)开发板,解决加速度计传感器数据。利用端:采纳润和DAYU200(RK3568)开发板,次要解决显示及音效。如下图,左侧为设施端,右侧为利用端:开发者手握设施端小熊派开发板,察看屏幕,依据利用端APP显示,在指定的工夫实现挥拳动作;挥拳信息经无线传递到利用端,利用端APP对挥拳机会有相应的计分规定,最初统计出总分。 二、原理相比失常状态下,挥拳动作会引起手臂较大的加速度变动。依据这个特色,咱们应用BearPi-HM_Nano开发板的扩大模块E53_SC2,它外部集成了MPU6050传感器,可能读取加速度的大小。做挥拳动作试验,统计数据,失去挥拳时加速度的阈值。程序执行时,把实时的数据与阈值进行比拟,判断是否触发了挥拳动作。再通过无线通信,实时把数据发送到利用端。 三、加速度计传感器应用阐明设施端的开发要害在对加速度计传感器的应用,次要波及两点:1、重力加速度g的了解;2、如何把MPU6050寄存器的数据转化为有单位的数据?1、样例应用的加速度传感器是MPU6050,它有±2g、±4g、±8g和±16g四个量程能够抉择。一个g是指一个重力加速度,代表9.8米/秒²大小。举个例子:如果设施从高处掉落,其减速计测量到的加速度将为0g,因为传感器没有受到力的挤压,处在失重状态;如果设施程度放在桌面上,则减速计测量出的加速度为1g(9.8米/秒²),咱们能够了解为受到1g的压力;2、MPU6050采纳16位的ADC采样。16位的ADC采样是什么意思?举个例子:如果量程抉择(通过寄存器抉择)是±2g,16位的ADC采样,示意的含意是用65536(即2的16次方)种状况去表白-2到+2g的状况。如下datasheet截图显示,AFS_SEL=0,示意±2g量程,当数据寄存器的数据为16384,对应示意受到1g的力。例如:数据寄存器读取到的值为X,对应受到的力的大小为Y,则Y=X/16384,单位是g。 四、代码解析设施端代码次要分为两个线程:1、传感器数据处理线程;2、TCP通信线程;它们之间通过事件的形式进行同步通信。1、传感器数据处理线程次要函数阐明: //E53_SC2模块MPU6050传感器数据处理次要流程static void DataHandleTask(void){ uint8_t ret; ret = E53SC2Init();//MPU6050传感器初始化及配置,配置为+—8g量程 if (ret != 0) { printf("E53_SC2 Init failed!\r\n"); return; } while (1) { ret = E53SC2ReadData(&data);//MPU6050传感器寄存器数据读取 if (ret != 0) { printf("E53_SC2 Read Data!\r\n"); return; } AccDataHandle(&data);//MPU6050传感器数据处理,转化为单位为g的数据 if (myCaldata.Accel[ACCEL_X_AXIS] < 0) { myCaldata.Accel[ACCEL_X_AXIS] = myCaldata.Accel[ACCEL_X_AXIS] * -1.0; } if (myCaldata.Accel[ACCEL_Y_AXIS] < 0) { myCaldata.Accel[ACCEL_Y_AXIS] = myCaldata.Accel[ACCEL_Y_AXIS] * -1.0; } if (myCaldata.Accel[ACCEL_Z_AXIS] < 0) { myCaldata.Accel[ACCEL_Z_AXIS] = myCaldata.Accel[ACCEL_Z_AXIS] * -1.0; } //判断实时数据是否大于拳击阈值Boxing_ACC,大于则设置事件 if (myCaldata.Accel[ACCEL_X_AXIS] > Boxing_ACC || myCaldata.Accel[ACCEL_Y_AXIS] > Boxing_ACC || myCaldata.Accel[ACCEL_Z_AXIS] > Boxing_ACC) { printf("MPU set flg\r\n"); osEventFlagsSet(g_eventFlagsId, FLAGS_MSK1);//触发拳击事件 } usleep(Delay_10ms); }}#define MAX_POS_NUM 32767#define LSB 4096.0//MPU6050传感器数据处理,转化为单位为g的数据int AccDataHandle(E53SC2Data *dat){ //量程为+-8g,所以分辨率为4096 if (dat->Accel[ACCEL_X_AXIS] < MAX_POS_NUM) { myCaldata.Accel[ACCEL_X_AXIS] = dat->Accel[ACCEL_X_AXIS]/LSB; } else { myCaldata.Accel[ACCEL_X_AXIS] =(-1)* (dat->Accel[ACCEL_X_AXIS]-MAX_POS_NUM)/LSB; } if (dat->Accel[ACCEL_Y_AXIS] < MAX_POS_NUM) { myCaldata.Accel[ACCEL_Y_AXIS] = dat->Accel[ACCEL_Y_AXIS]/LSB; } else { myCaldata.Accel[ACCEL_Y_AXIS] = (-1)*(dat->Accel[ACCEL_Y_AXIS]-MAX_POS_NUM)/LSB; } if (dat->Accel[ACCEL_Z_AXIS] < MAX_POS_NUM) { myCaldata.Accel[ACCEL_Z_AXIS] = dat->Accel[ACCEL_Z_AXIS]/LSB; } else { myCaldata.Accel[ACCEL_Z_AXIS] =(-1)*(dat->Accel[ACCEL_Z_AXIS]- MAX_POS_NUM)/LSB; }return 0;}2、TCP通信线程次要函数阐明:在本样例的网络通信中,小熊派BearPi-HM Nano(Hi3861)开发板作为客户端,润和DAYU200(RK3568)开发板作为服务端。它们之间采纳TCP机制通信。如下代码:建设好TCP通信后,惯例状态下通信线程处在阻塞态,当拳击事件触发后,则会发送信息给服务端: ...

August 19, 2022 · 2 min · jiezi

关于openharmony:OpenHarmony轻量设备Hi3861芯片开发板启动流程分析

引言OpenHarmony作为一款万物互联的操作系统,笼罩了从嵌入式实时物联网操作系统到挪动操作系统的全笼罩,其中内核包含LiteOS-M,LiteOS-A和Linux。LiteOS-M内核是面向IoT畛域构建的轻量级物联网操作系统内核,次要面向没有MMU的处理器,架构如图1-1所示。 图1-1 LiteOS-M架构图Hi3861是一款高度集成的2.4GHz SoC WiFi芯片,采纳高性能 32bit 微处理器,最大工作频率 160MHz,内嵌 SRAM 352KB、ROM 288KB、Flash 2MB。目前市面上的采纳LiteOS-M的OpenHarmony开发板厂商有深开鸿、润和软件、小熊派,因为海思的SDK是以库文件的模式提供的,所以不同的Hi3861芯片开发板启动流程是一样的。 Hi3861 Boot介绍Boot是操作系统启动之前的软件,通用叫法是bootloader,Hi3861的boot分为4局部:RomBoot、FlashBoot、LoaderBoot、 CommonBoot,如图2-1所示。 图2-1 Hi3861 Boot启动流程● RomBoot性能包含:加载LoaderBoot到RAM,进一步利用LoaderBoot下载镜像到Flash、烧写 EFUSE, 校验并疏导FlashBoot。FlashBoot分为AB面,A面校验胜利间接启动,校验失败会去校验B面,B面校验胜利会修复A面再疏导启动,否则复位重启。 ● FlashBoot性能包含:降级固件,校验并疏导固件。 ● LoaderBoot性能包含:下载镜像到Flash, 烧写EFUSE(例如:平安启动/Flash加密相干密钥等)。 ● CommonBoot为Flashboot与LoaderBoot共用的功能模块。  相干文件介绍Hi3861的LiteOS-M代码是SDK中以库文件的模式提供的,尽管咱们无奈看到源代码,但这不代表咱们剖析不了启动流程,咱们能够从剖析map文件和asm这两个文件动手。这两个文件都是编译链接工具生成的,其中asm文件是汇编程序源文件,能够查看函数之间的调用关系,map文件里包含全局符号、函数地址及占用的空间和地位。map和asm文件次要作用是当开发板解体时用于剖析其解体的起因,咱们剖析函数跳转关系时并不需要晓得太多汇编,只须要晓得根本的跳转语句和赋值语句即可,这两个文件位于out目录下和操作系统固件平级的目录,如图3-1。 图3-1 Hi3861 asm和map文件位置图一个编译实现的固件通常有以下几局部:1) RO段包含只读代码段(code段/.text段)和常量段(RO Data段/.constdata段)。2) RW段(.data段)指已被初始化成非0值的变量段。3) ZI段(.bss段)指未被初始化或初始化为0的变量段。咱们源代码的函数和字符串常量都位于text段。 LiteOS-M启动流程介绍1) 嵌入式处理器和操作系统都具备相似的构造启动流程也大体类似,从芯片上电开始Boot把控制权交给操作系统,Hi3861从Boot跳转到操作系统代码如下:这部分是将该地址当函数作为跳转,因为FlashBoot和kernel,是两套代码程序,他们之间没有依赖援用关系,然而他们在一个地址空间,所以间接地址跳转,这也是从Boot到kernel通用的跳转形式。2) 芯片启动是从中断向量表的复位中断处理程序开始,接着把数据从Flash复制到RAM、清空bss数据段、初始化时钟、跳转到main函数。咱们通过查看asm文件的main函数,能够看出其中调用的函数如图4-1所示,从图4-1 咱们可得悉调用的函数包含设置串口、校验版本号、配置板子、Kernel初始化、利用初始化和操作系统的调度运行,其中main函数位于liblitekernel_flash.a(main.o)文件中。 图4-1 main函数调用关系LOS_KernelInit是负责初始化内核数据结构的,如图4-2所示,次要函数有OsMemSystemInit(内存初始化)、OsHwiInit(中断初始化)、OsTaskInit(工作初始化) ,这些过程次要目标是把内核相干的变量初始化,筹备好全局信息,不便API函数去调用,API函数调用必须在这些初始化实现后才能够。3) 从AppInit开始脱离了sdk,能够看到源代码了,AppInit函数位于libwifiiot_app.a(app_main.o)中,局部截图如图4-3,源代码为app_main.c,其中调用的函数包含获取sdk版本号,外设初始化,ipc初始化,flash分区,WiFi初始化,tcp/ip初始化,而后跳转到了OpenHarmony特有的函数OHOS_Main。OHOS_Main位于libwifiiot_app.a(ohos_main.o)中,源代码为ohos_main.c,次要实现OpenHarmony零碎相干和用户利用相干的调用,里边次要函数是OHOS_SystemInit,如图4-4,在其中调用了用户本人写的利用工作相干代码,如图4-5,从而实现了在LOS_start之前把工作列表填好,这样能力保障用户工作或定时等性能参加了系统调度。 图4-2 LOS_KernelInit函数调用关系 图4-3 app_main函数调用关系 图4-4 OHOS_Main函数调用关系 图4-5 OHOS_SystemInit函数调用关系用户利用的启动原理1) 在图4-5中呈现的函数MODULE_INIT(run),就是调用最终调用用户程序的代码。这是个宏定义,开展的调用关系 :\base\startup\bootstrap_lite\services\source\core_main.h定义,从MODULE_CALL、MODULE_BEGIN 、MODULE_END,最终调用的地址是__zinitcall_##name##_start,MODULE_INIT(run)调用的函数地址是__zinitcall_run_start。通过查看链接文件得出__zinitcall_run_start蕴含.zinitcall.run0.init),如图5-1所示。 图5-1 __zinitcall_run_start链接关系查看map文件发现咱们本人的应用程序文件就在.zinitcall.run2.init中,如图5-2所示。 图5-2 led_exapmle文件在map中的地位2) 从运行角度看启动中调用到了应用程序led_exapmle,所谓地位为.zinitcall.run2.init,但咱们在应用程序中的关联函数是SYS_RUN(LedExampleEntry),SYS_RUN的开展关系如图5-3所示,最终即是 zinitcall.run2.init,和程序运行时候的调用匹配在一起了。应用程序的调用关系就是编译链接阶段生成指定的段,初始化时调用指定段,这样实现了LiteOS-M的操作系统代码与利用程序代码的解耦。 图5-3 SYS_RUN的开展关系总结本文向大家讲述了在没有局部源代码的状况下,如何通过对map文件和asm文件的剖析从而得出Hi3861芯片开发板LiteOS-M的启动流程。总体过程就是最小硬件零碎的配置实现后,LOS_KernelInit负责初始化零碎到一个适合的状态,AppInit调用OpenHarmony和利用相干代码,最初LOS_Start负责把操作系统运行起来。 ...

August 18, 2022 · 1 min · jiezi

关于openharmony:本周四晚1900知识赋能第七期第2课丨OpenHarmony-WiFi扫描仪UX设计

8月18日19:00~20:00,第七期常识赋能第二节直播就要开始啦!如果你是不足实战经验的学生,如果你是老成持重的职场新人,如果你是想参加开源的贡献者,那么本期的直播课将不容错过!通过本期直播,开发者不仅能够把握WiFi框架层的原理,还能通过WiFi接口开发出炫酷的WiFi利用。第1节直播中,从事底层根底工作18年的资深技术专家蒋卫峰老师解说了WiFi子系统总体架构,WiFi要害模块介绍以及后续课程布局,开发者们纷纷表示出对这一版块内容的学习趣味。而本节直播将由领有10年利用框架层开发教训的资深技术专家郭岳峰老师解说《OpenHarmony WiFi扫描仪UX设计》,将次要介绍三方面内容,包含UX设计、外围组件的介绍和WiFi子系统框架的补充介绍,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!

August 17, 2022 · 1 min · jiezi

关于openharmony:寻找OpenHarmony锦鲤|万元豪礼技术干货全是你的

开源我的项目 OpenHarmony是每个人的 OpenHarmony 战“码”先锋第二期蓄力登程!同时,咱们也推出了全网寻找开源锦鲤的流动只为每一位参加OpenHarmony开源共建的你! ⬇️⬇️⬇️⬇️⬇️2022 OpenHarmony战「码」先锋侥幸锦鲤来袭万元豪礼独宠你一人!!! 流动工夫:2022.7.19-2022.9.19开奖工夫:2022.10.20  14:00更多神秘礼品等你解锁 参加规定自2022年7月18日起,首次在OpenHarmony 代码仓中合入一个 PR 的开发者,即可参加抽奖,下一个开源锦鲤就是你!当初入群还可支付提PR 材料包,助你轻松踏上开源共建之路。 流动阐明1、以Gitee 邮箱作为惟一中奖核查信息;2、锦鲤流动仅限在流动期间首次在OpenHarmony代码仓中合入PR的Gitee 邮箱;3、奖品以最终实物为准,如礼品呈现缺货等状况,将替换为等同价值礼品;4、所有奖项归属“锦鲤“自己所有,不可转赠、不可折现;5、以上每个礼品数量为1个;6、本流动最终解释权归流动主办方所有。

August 16, 2022 · 1 min · jiezi

关于openharmony:直播回顾OpenHarmony知识赋能六期第五课WiFi子系统

8月11日早晨19点,常识赋能第六期第五节直播 《OpenHarmony常识赋能-WiFi子系统》 ,在OpenHarmony开发者成长打算社群内胜利举办。第六期直播由从事底层根底工作18年的资深技术专家蒋卫峰老师解说《OpenHarmony WiFi子系统》,次要介绍了WiFi子系统总体架构,WiFi要害模块介绍以及后续课程布局,干货满满!欢送大家长按下方海报扫码,回看8月11日晚的常识赋能第六期第五节直播:成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,目前常识赋能第六期课程已过半,前四节均由华为HDE专家,润和软件生态技术总监连志安老师围绕智能家居我的项目这一案例进行零碎授课,零根底的同学通过学习也能上手利用。期间介绍了整个智能家居我的项目的开发过程,内容涵盖每个重要的知识点,通俗易懂。现将前四节直播回顾汇总如下,精彩内容不容错过,快点开始学习吧!一、 OpenHarmony智能家居我的项目介绍回顾链接:https://segmentfault.com/a/11...内容介绍:介绍整个智能家居我的项目,解说了DAYU200、Hi3861智能家居套件硬件平台开发入门,相干的硬件开发平台、软件平台,大禹开发板ROM的制作与更新,智能家居设施太监ROM的制作与更新。二、 OpenHarmony智能家居我的项目之控制面板界面设计回顾链接:https://segmentfault.com/a/11...内容介绍:介绍基于ArkUI开发控制面板利用,布局设计、相干组件开发,具体包含控制面板的布局设计以及ArkUI相干组件的应用。三、 OpenHarmony智能家居我的项目之控制面板界面性能实现回顾链接:https://segmentfault.com/a/11...内容介绍:解说基于规范零碎的 JS nativea API开发、socket编程,实现温湿度数据采集与灯光管制,包含JS nativea API、SOCKET通信设计、温湿度数据采集与灯光管制。四、 OpenHarmony智能家居我的项目之设施管制实现回顾链接:https://segmentfault.com/a/11...内容介绍:解说基于OpenHarmony轻量零碎的设施开发、驱动开发,实现温湿度传感器数据采集、灯光管制。OpenHarmony成长打算常识赋能系列所有直播课,以及更多OpenHarmony社群举办的直播课程,咱们都将在OpenHarmony B站官网账号“OpenHarmony开发者社区”上汇总公布。 欢送宽广开发者锁定观看、珍藏学习:space.bilibili.com/2029471800/channel/series(讲师直播课件,也可增加OpenHarmony小助手获取↓↓)

August 12, 2022 · 1 min · jiezi

关于openharmony:本周四晚1900知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,从而更深刻的参加OpenHarmony开源社区的我的项目开发。在将近8个月的工夫里,OpenHarmony 常识赋能直播课曾经走过了5期,共28节课,23名技术大咖倾囊相授,2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。技术大咖们从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。第六期的直播均由华为HDE专家,润和软件生态技术总监连志安老师进行解说,上一节的直播中,连志安老师介绍了基于规范零碎的 JS nativea API开发、socket编程,实现温湿度数据采集与灯光管制,开发者们纷纷踊跃留言互动,给出好评!而第4节直播《OpenHarmony智能家居我的项目之设施管制实现》中,连志安老师将介绍基于OpenHarmony轻量零碎的设施开发、驱动开发,实现温湿度传感器数据采集、灯光管制,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!

August 12, 2022 · 1 min · jiezi

关于openharmony:30分钟成为Contributor|共建测试子系统赋能提升项目代码质量

如何优雅地参加开源奉献,向顶级开源我的项目提交 PR(Pull Request),跟着大咖30分钟成为OpenAtom OpenHarmony(以下简称“OpenHarmony”) Contributor。战“码”先锋直播间第6期,邀请领有10年终端产品软件和零碎框架测试教训的华为OpenHarmony高级测试测试工程师Andy为大家分享《共建测试子系统 赋能开发者进步代码品质》。他在分享中介绍了:测试子系统、测试根底框架、稳定性测试工具设计、兼容性测试套示例和疾速参加共建。参加战“码”先锋,PR征集令!你能够在Gitee的OpenHarmony代码仓提交PR参加流动,和寰球开发者同台竞技,比拼技能,为OpenHarmony贡献力量。 测试子系统简介OpenHarmony零碎构建初期,各子系统提供零碎的根底能力。要进行子系统残缺看护,通过手工测试验证工作量微小,基于此呈现了自动化测试的诉求。测试子系统蕴含测试根底框架、OS测试规范与工具、利用测试规范与工具和兼容性测试几个局部。OpenHarmony测试工具集后续官网对立宣传名称为OpenHarmony Arsenal(OHA)。测试根底框架中,单元测试框架作为测试根底框架的基座,撑持自动化测试的运行;UI测试框架基于单元测试框架构建了UI界面操作自动化测试的能力;分布式测试组件和专项测试组件作为扩大能力逐渐进行演进;测试调度框架(xdevice)负责整个测试脚本的执行调度。OS测试规范与工具:次要进行零碎的稳定性、性能、平安等DFX测试验证,发现零碎的异样重启和帧率不达标等关键问题。利用测试规范与工具:提供给开发者测试工具进行利用的DFX测试验证。兼容性测试:提供兼容性测试套进行南北向的框架兼容性看护。 单元测试框架:单元测试框架提供根底的测试脚本编写、治理、调度执行和报告生成能力。单元测试框架依赖AbilityDelegator(测试框架入口)和TestRunner(重写进行测试筹备和执行操作)。外围性能包含:● 测试套&测试用例治理:测试套蕴含测试用例,基于测试套编写实现测试用例● 预置清理办法:每个测试用例之间能够通过预置和清理办法进行解耦● 配置管理:用例级别和类型的配置管理,用于后续筛选测试执行用例● 日志解决能力:用于测试用例执结束的后果日志统计● 根底断言能力:测试用例的预期后果和理论执行后果判断扩大能力:● 定义执行程序:用于后续进行测试用例执行程序的配置管理● 自定义断言:基于根底断言的扩大比拟能力● 异步测试&断言:测试脚本间接进行异步执行和断言,以后是通过同步期待形式执行加强能力:● 数据驱动:通过配置参数形式进行接口的压力测试● Mock:模仿依赖内部接口的实现,返回预期内容● Fake:间接返回依赖内部接口的冀望返回值,接口失常执行● SPY:接口探测能力,验证接口是否有被调用执行大家能够参考具体的代码仓,理解单元测试框架的代码逻辑。一个残缺的测试套执行过程,通过AA命令行启动测试框架,AMS框架拉起测试过程,启动TestRunner解析参数,接下来启动TestAbility加载和执行测试用例,测试用例执行实现后输入打印执行后果,并敞开测试过程和AA过程,测试套执行实现。 UI测试框架:UI测试框架提供UI界面测试能力,包含UI操作、UI控件查看等根底能力。UI测试框架对外会提供JS API给开发者应用,UI Test提供框架的根底能力,测试框架依赖无障碍服务获取界面的控件dump信息,多模输出服务提供控件操作的能力。UI Test JS API蕴含● 根底操作API:点击、滑动等操作的根底能力● 控件获取API:查找控件等根底能力● 加强操作API:控件拖拽、滑动查找控件等能力● 自定义属性API:滑动速率和按键时长等参数配置能力UI Test:UI Test独立过程,提供测试过程和UI Test过程传递数据序列化能力,过程保活能力和事件注入能力。目前提供单窗口的UI自动化测试,后续提供多窗口的控件操作能力,被动辨认UI界面变动和多指触控等简单手势操作能力。大家能够参考具体代码仓,理解UI测试框架的代码逻辑。UI测试框架外围流程:UI测试用例执行,启动UITest过程,绑定无障碍服务和多模服务进行交互操作。开发者能够基于UIDriver、BY、UIComponent类配合进行UI测试脚本的编写。大家能够参考具体代码仓,理解UI测试框架对外提供的接口能力新建联系人UI测试脚本的代码示例: 导入依赖的测试包启动被测试的界面初始化UIDriver基于UIDriver的findComponent和BY能力配合查找联系人控件基于UIComponent的click能力点击联系人控件基于UIDriver的assertComponentExist能力验证存在没有联系人文本 稳定性测试工具设计:稳定性测试工具提供异样捕捉能力,帮忙开发者疾速识别系统异样问题,通过黑白名单指定是否测试对应名单内的利用。提供录制回放能力进行辅助回归测试验证,目前只有控件操作等事件注入能力,后续提供零碎事件的注入能力。目前稳定性工具预置在版本中,后续提供可视化的设施端和PC端的测试工具,开发者能够更不便的进行稳定性测试。大家能够参考具体代码仓,理解稳定性测试工具框架的代码逻辑。稳定性工具执行示例:wukong exec –b ohos.xxxx -a 0.1 -t 0.5 -S 0.4 -s 5具体工作流程:稳定性测试工具进行命令行参数解析,测试环境的初始化,启动异样监听。通过随机事件生成和事件注入及捕捉异样的循环解决进行稳定性测试。最终生成日志记录用于查看异样场景。要害命令:通过seed种子能够指定固定的操作序列,用于回归重现问题。不同的事件反对比例的设置。能够通过time和count字段进行稳定性测试时长的指定。 兼容性测试套:通过兼容性测试套进行利用南北向和设施东西向的兼容性看护,别离通过ACTS、DCTS、HATS测试套进行兼容性验证。大家能够参考文末代码仓,理解兼容性测试套的测试用例实现。测试用例要害语法的定义,通过describe定义测试套,一个测试用例必须须要有3个要害注解字段,tc.number:用例编号,tc.name:用例名称,tc.desc:用例形容,通过it进行测试用例定义。 疾速参加共建:最初,Andy为开发者们介绍了疾速参加共建的形式。大家能够基于开发过程中应用的API,在兼容性测试代码仓搜寻相应API的测试脚本,辨认以后测试用例的齐备性,进行测试脚本补充共建。如下提供了promise和callback异步接口的两个案例进行接口的失常和异样场景的测试脚本设计。欢送感兴趣的开发者敌人们一起共建测试子系统,成为OpenHarmony Contributor。参加战“码”先锋,PR 征集令!在Gitee的OpenHarmony代码仓提交PR参加流动,和寰球的开发者一起共建OpenHarmony的凋敝生态!“当初就关上gitee ,提你的第一个PR,你的一小步,是OpenHarmony开源我的项目的一大步” 文章中波及的链接汇总:单元测试框架代码仓jsunit目录:https://gitee.com/openharmony...UI测试框架代码仓uitest目录https://gitee.com/openharmony...UI测试框架对外JS API接口代码仓https://gitee.com/openharmony...稳定性测试工具代码仓https://gitee.com/openharmony...兼容性测试套代码仓ACTS:https://gitee.com/openharmony...DCTS: https://gitee.com/openharmony...HATS: https://gitee.com/openharmony...

August 11, 2022 · 1 min · jiezi

关于openharmony:本周四晚1900知识赋能第六期第5课丨OpenHarmony-WiFi子系统

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,从而更深刻的参加OpenHarmony开源社区的我的项目开发。在将近8个月的工夫里,OpenHarmony 常识赋能直播课曾经走过了5期,共28节课,23名技术大咖倾囊相授,2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。技术大咖们从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。前四节的直播均由华为HDE专家,润和软件生态技术总监连志安老师围绕智能家居我的项目这一案例进行零碎授课,零根底的同学通过学习也能上手利用。期间介绍了整个智能家居我的项目的开发过程,内容涵盖每个重要的知识点,通俗易懂。包含从 DAYU200、Hi3861 智能家居套件硬件平台开发入门、ArkUI 开发控制面板利用、OpenHarmony 轻量零碎的设施开发等实用技术。总之,开发者不仅能学到常识,还能够将常识利用到理论开发过程中。而第5节直播将由从事底层根底工作18年的资深技术专家蒋卫峰老师解说《OpenHarmony WiFi子系统》,将**次要介绍WiFi子系统总体架构,WiFi要害模块介绍以及后续课程布局,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!**

August 10, 2022 · 1 min · jiezi

关于openharmony:30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献

如何优雅地参加开源奉献,向顶级开源我的项目提交 PR(Pull Request)。战“码”先锋直播间第八期围绕“OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源奉献”话题,邀请了深圳开鸿数字产业倒退有限公司(以下简称“深开鸿”)资深OS框架开发工程师巴延兴为大家带来《如何多方位参加OpenHarmony开源奉献》主题分享。本次分享次要介绍了巴延兴率领深开鸿开源共建团队在主导/共建16个SIG、奉献超过50万行代码的OpenHarmony “战码”教训,在根技术、垂直畛域、生态扩大等多方位参加开源奉献的实际与思考,以及辅助工具SIG和内核SIG两大板块的奉献形式、价值与用处,心愿有更多开发者参加开源共建。参加战“码”先锋,PR征集令!感兴趣的开发者能够在Gitee的OpenHarmony代码仓提交PR参加流动,和寰球开发者同台竞技,比拼技能,为OpenHarmony生态建设贡献力量。 如何通过SIG进行开源奉献什么是SIG?SIG全称Special Interest Group,即特地兴趣小组,专一一个特定的技术畛域,负责该畛域技术竞争力剖析和关键技术辨认及决策,引领技术演进的方向,也是共建单位及集体开发者进行开源奉献的根本单位。通过SIG组参加开源共建的两种形式一、参加到已有SIG的共建参与者须要注册本人的官网账号,签订协议后,能力通过认领SIG leader公布的需要来承接共建工作。领完需要后是规范的开发过程,包含需要剖析、功能设计、代码开发、功能测试、性能交付等步骤;工作开发实现后,须要提交PR,将代码、文档等提交到社区,实现最终的开源奉献。二、主导SIG组1、成立SIG选取共建技术畛域并给出布局 → 向PMC例会提交议题并通过评审 → 通过架构SIG例会评估后建设新的代码仓。2、孵化SIG启动需要廓清、个性梳理方案设计、代码开发、单元测试、功能测试等流程,实现SIG我的项目开发 → 对照Check List,实现法务、门禁、OAT等问题自检。3、毕业SIG向架构SIG申请新SIG毕业 → 向QA SIG会申请新SIG准出 → 仓库owner移仓。 辅助工具SIG实践经验分享成立辅助工具SIG组的主旨是“升高重复劳动,进步工作效率,让业余的人做业余的事”。NAPI框架代码生成工具、IDL转换工具和开机动画工具都是围绕着这个主旨开发而成的。一、NAPI框架代码生成工具NAPI是规范设施上的JS API实现形式,实现了JS语言到框架C++层的调用,在OpenHarmony零碎中,APP调用是调用JS语言的接口函数,最终具体性能是用C++语言来实现。NAPI存在三个开发痛点须要解决:1、NAPI框架代码的反复率高:面对不同的JS接口,开发者要实现类似度高的框架代码。2、NAPI框架的学习老本高:框架机制波及JavaScript、C++语言,以及编译脚本工具。3、NAPI 需求量大:OpenHarmony零碎性能均是通过NAPI接口体现,目前曾经反对1万多个NAPI接口。针对以上三个痛点,NAPI框架代码生成工具将C++ 、JavaScript接口类型转换等代码抽取公共模块,并且主动生成编译脚本。开发者应用工具主动生成NAPI框架代码,只需实现业务代码调用即可,防止了大量反复的工作。二、IDL转换工具OpenHarmony应用的是HDF驱动框架,驱动相应的硬件信息须要IDL文件来形容。IDL存在两大开发痛点须要解决:1 、HDI开发难度大:HDI开发者比拟相熟C语言,习惯在.h文件中定义HDI接口,而对于IDL文件构造、语法并不是很相熟,学习曲线绝对较长。2、HDI工作量大:HDI接口是驱动对外提供服务的必要条件,各个子系统均波及,故HDI工作量较大。针对以上痛点,深开鸿设计的IDL转换工具将开发者相熟的.h文件主动转换为idl文件,开发者只须要在头文件中定义本人的接口即可,工具主动实现.h头文件到IDL文件转换,开发者不须要关怀IDL语法,大大降低工作量。三、开机动画工具开机动画工具是咱们晚期针对OpenHarmony2.0版本存在的问题做的一个辅助工具。OpenHarmony2.0版本在开机动画方面有两个问题:1、OpenHarmony2.0版本开机动画只反对raw文件,不利于开发者在发行版和定制版进行间接展示。2、因为产品的状态不一,对于不同的产品,其开机动画的需要也是不同。通过开机动画辅助工具使以上两个问题失去了更好地解决:1、开机动画工具反对图片集或者 mp4等多种文件生成开机动画,且反对设置开机动画的分辨率等操作,更加不便开机动画的制作。2、做到一键生成开机动画文件,并且反对在 windows平台上查看其成果,不须要每次都去烧录到开发板上,大大降低了演示的工作量。四、辅助工具SIG共建方向目前深开鸿主导的辅助工具SIG组次要提供给开发者文档资料、测试用例和工具开发3个共建方向。如果你善于文档编撰,那么能够参加到社区的文档奉献,撰写文档能够不须要有很强的开发能力。如果你是测试人员,善于自动化测试,那么通过测试用例也能够参加到社区的建设。另外也欢送各位开发者参加到各种工具的建设中来。SIG组的工具能够是独立的工具,也能够通过插件的形式集成到IDE开发软件中。五、参加辅助工具SIG奉献的具体形式1、提交问题单。无论是文档的bug、测试用例的bug、还是代码的bug,提交了问题单就是对社区做了奉献,那么辅助工具SIG组如何提交问题单呢?首先找到对应的仓库并登录,例如https://gitee.com/openharmony...。提交过程中要留神格局要求,必须写分明提单过程中问题呈现的条件,预期的后果和谬误的后果,问题的定位信息等,有了这些信息后,支付这个问题单的开发也不便定位问题。登录找到想要认领的问题单的页面,在评论中表白出想要承接这个需要的志愿,SIG的负责人会定期跟踪这些问题单并做出回答。2、认领需要后进行开发流程领到一个需要后要进行失常的开发,外围分为以下6步:①通常开发者曾经配置好配置码云账号、集体邮箱和签订DCO(签订DCO次要是保障贡献者原创),有了这些前置工作当前,咱们能够操作代码仓库进行需要的开发。②Fork代码到私仓。③克隆fork进去的仓库到本人的主机上。④在本地开发代码开发和性能验证。⑤开发结束后向官网原始仓提交Pull Request,提交代码后会触发门禁等惯例查看。⑥如果这个sig组是你本人主导的,那么作为Committer,须要评审他人提交的代码,如果只是参加共建,提交完代码通过门禁就实现工作。 内核SIG参加共建教训对于深开鸿内核SIG共建教训,上面将以文件系统的优化为实例向大家分享具体的奉献过程。内核共建的方向比拟多,体系架构有各个硬件平台的移植,内核模块中功耗治理、工夫治理、任务调度、中断治理、文件系统、三方库相干的内核shell命令移植,目前深开鸿次要在文件系统和第三方库方面做社区共建。深开鸿心愿未来开展更多方向的优化工作,并向外提供具体场景下内核零碎移植计划。littlefs文件系统的共建过程:1、理解社区需要,社区目前对littlefs文件系统随机读写的速度不称心。2、理解到社区文件系统对随机读写需要的前提下,对littlefs随机读写IO性能瓶颈进行剖析,找到能优化的代码点,采纳了“以空间换工夫”的思路。3、采纳逐渐优化的思路,明确计划后和社区负责人沟通,失去了社区负责人认可后,开展具体的代码工作。因为文件系统优化是一个比较复杂的过程,上面分享了一套社区共建流程。1、从社区认领需要后,通过微信群的形式和社区负责人沟通并廓清需要。2、从技术上剖析需要并制订优化计划,再次和社区负责人沟通,做计划探讨并失去认可。3、具体任务开发,包含工作拆解、编码实现、测试,最初提交PR。针对littlefs文件系统优化过程中批改波及到的相干文件,包含littlefs文件代码,也就是点c和点h文件;也有编译相干的文件,即.gn文件gni文件,之所以批改编译相干的文件是为了测试littlefs的优化后的代码,咱们团队减少了相干的测试用例,这些测试用例会调用内核文件系统的API,波及到这些编译相干的文件。littlefs第三方库代码实现后提交到社区的过程1、littlefs第三方库repository门路,并fork到用户仓库。2、git clone用户仓到本地。3、提交批改到用户仓。4、点击提交PR。5、填写PR单,PR单页须要依照既定模板填写,写分明原始需要,如何解决这个问题,怎么解决这个问题以及具体批改点。6、在评论中增加“start build”点亮PR。这里有一个特地留神的点,须要在评论中是手动填写“start build”这2个英文单词,目标是触发后续的门禁检测。这是OpenHarmony社区比拟特地的一点,其它开源我的项目中所没有的。欢送感兴趣的开发者多方位参加OpenHarmony开源奉献,成为OpenHarmony Contributor,也欢送各位提出贵重的意见,为OpenHarmony奉献一份力量。参加战“码”先锋,PR 征集令!在Gitee的OpenHarmony代码仓提交PR参加流动,和寰球的开发者一起共建OpenHarmony的凋敝生态! 文章中波及的链接汇总:NAPI框架代码生成工具代码仓地址:https://gitee.com/openharmony...IDL转换工具代码仓地址:https://gitee.com/openharmony... 开机动画工具代码仓地址:https://gitee.com/openharmony... 转发原文到朋友圈,私信官网小助手,即可获取讲师演讲PPT原文链接:https://mp.weixin.qq.com/s/ex...

August 1, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony高校技术俱乐部计划发布

7月27日,凋谢原子开源基金会主办的2022年凋谢原子寰球开源峰会以“软件定义世界 开源共筑将来”为主题在北京亦创国内会展中心拉开帷幕。作为本届峰会的重要环节之一,OpenAtom OpenHarmony(以下简称“OpenHarmony”)分论坛以“万物互联,使能千行百业”为主题如期举办,OpenHarmony技术领导委员会(TSC)在会上重磅公布高校技术俱乐部打算,心愿通过产学联动,吸引高校师生共建OpenHarmony凋敝生态。 OpenHarmony技术领导委员会(TSC)承当定义和保护 OpenHarmony 我的项目群技术愿景及技术地图的使命,为 OpenHarmony 利用到千行百业提供反对与服务。在组件化、弹性化的解耦架构、构建全场景跨终端无缝智慧协同能力,以及打造一次极简开发多终端部署的一致性体验等方面,OpenHarmony技术领导委员会(TSC)始终施展着关键作用,引领OpenHarmony 我的项目群技术倒退方向的同时,汇聚学术与产业力量,建设凋谢共赢的技术生态。 OpenHarmony高校技术俱乐部是在OpenHarmony技术领导委员会(TSC)领导下与高校联结打造的OpenHarmony技术俱乐部,本着“发展翻新工作,成就一流人才”的主旨,让专家走进校园,吸引宽广的师生参加到OpenHarmony开源社区共建中来,让高校师生能从中取得激励、荣誉和成长。 将来,高校技术俱乐部次要面向三个方面发展工作:承接OpenHarmony课题,包含技术挑战课题、社区工作课题、学术科研课题,激励老师和学生发展OpenHarmony技术钻研、翻新摸索;举办直播课、啃论文等系列线上线下流动,通过社区技术专家与高校师生的互动交换,进一步吸引更多的社区开发者;组织各种模式的技术比赛、挑战赛,在全国范畴内辨认优良翻新我的项目、翻新人才。 依据现场OpenHarmony技术领导委员会(TSC)的介绍,退出OpenHarmony高校技术俱乐部,高校须要投入两名老师和20名学生继续参加课题承接以及积极参与技术俱乐部各类流动。OpenHarmony社区则会为师生提供费用反对、宣传曝光,为学生提供学习和职业倒退机会。 自2019年开源以来,OpenHarmony开源我的项目曾经取得了产业界和开发者的积极响应——汇聚160万社区用户、寰球下载次数高达8700万次、Gitee指数排名第一,倒退成为寰球智能终端操作系统畛域中一股不可漠视的新生开源力量。 衰弱凋敝的开源生态,源于千万开发者的点滴付出,期待寰球高等院校师生退出OpenHarmony高校技术俱乐部,与气味相投的开发者交换技术,通过专家领导,进步集体技能和影响力,取得更多职业倒退机会,奉献本人的力量,为OpenHarmony生态构建注入新动力。对于OpenHarmony高校技术俱乐部的更多资源,请通过OpenHarmony官方网站分割OpenHarmony技术领导委员会(TSC)。

August 1, 2022 · 1 min · jiezi

关于openharmony:文档贡献与写作必读OpenHarmony开发者文档风格指南

在您应用OpenHarmony文档或参加OpenHarmony文档/生态内容奉献时,是否遇到过如下问题:● 应该应用第一人称还是第二人称来写作?● Markdown文件应该如何命名?● 代码块及正文应该采纳何种款式?● 术语、缩略语有没有对立的速查表?为解答这些疑难,同时帮忙开发人员、技术作者及其他感兴趣的开发者更好的撰写内容,OpenHarmony文档团队公布了《OpenHarmony开发者文档格调指南》,具体参考:https://gitee.com/openharmony... OpenHarmony开发者文档格调指南解读本指南针对OpenHarmony文档的语言格调、文档构造、内容元素等提供标准要求或参考倡议,确保OpenHarmony文档具备统一的格调——用户视角、残缺、具体、简洁、清晰、统一,同时帮忙开发者高效参加文档奉献。在开始OpenHarmony文档写作前,倡议先浏览指南,或按需查阅指南,参照相应要求或倡议进行写作。OpenHarmony开发者文档格调指南次要内容如下。● 语言格调:次要定义如下主题相干标准或倡议− 人称及语态− 语气及用词− 用户视角− 残缺− 具体− 简洁− 清晰− 统一● 文档构造:次要定义如下主题相干标准或倡议− 题目:题目规定、题目款式− 段落− 句子− 目录− 文件夹及文件命名● 内容元素:次要定义如下主题相干标准或倡议− 我的项目列表− 表格− 图片:图片总体要求、绘图、截图− 提醒与阐明− 链接:链接规定、链接款式− 术语及缩略语− 单位符号− 标点符号− 字符本义− 文件门路− 代码与正文:行内代码、代码块、正文− IP及MAC地址− 个人信息 咱们期待您的反馈心愿这本格调指南可能辅助宽广开发者更高效地参加OpenHarmony文档奉献。咱们看到400+位社区开发者参加了OpenHarmony Docs仓奉献,欢送宽广开发者在参加OpenHarmony开源我的项目中,继续关注SIG Docs,反馈文档倡议和需要,与咱们一起继续晋升文档体验。欢送订阅SIG Docs,理解更多文档资讯docs@openharmony.io订阅形式具体参考如下链接中,如何订阅邮件列表https://gitee.com/openharmony...欢送返回Gitee Docs仓,反馈文档应用意见https://gitee.com/openharmony...欢送拜访OpenHarmony官网文档,理解最新文档    https://docs.openharmony.cn/咱们深信社区开发者的共建力量,携手同行、并肩合作,打造衰弱、蓬勃发展的OpenHarmony社区。

July 29, 2022 · 1 min · jiezi

关于openharmony:OpenAtom-OpenHarmony分论坛圆满举办生态与产业发展迈向新征程

7月27日,2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛在北京胜利举办。本次论坛以“万物互联,使能千行百业”为主题,OpenHarmony共建单位、生态搭档齐聚一堂,独特展示了OpenHarmony在千行百业的落地成绩、凋敝生态与最新技术停顿。2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛由凋谢原子开源基金会主办,OpenHarmony工作委员会、软通能源、中软国内、深开鸿、九联科技、润和软件、拓维信息参加共建。流动现场设置了议题分享、共建成绩展现和致谢授牌典礼等环节,来自各企业、组织、研究所等代表共聚一堂,围绕商业使能、生态与产业倒退、产品翻新、技术提高和开发者赋能等话题开展深入探讨,独特推动OpenHarmony开源我的项目倒退和生态凋敝,赋能千行百业数字化、智能化转型降级。 OpenHarmony分论坛共建单位嘉宾合影LOGO、共建作战地图公布,社区各项倒退数据再创新高凋谢原子开源基金会秘书长孙文龙受邀缺席本次论坛并致开幕词。孙文龙秘书长在致辞中示意:“置信在社区每一位生态搭档、每一个开发者的共同努力下,将来的OpenHarmony我的项目必然会越加成熟,开源社区生态必然会愈发凋敝。咱们心愿和OpenHarmony一起,通过更杰出的开发者体验,将我的项目社区打造成为国内一流开源操作系统社区,真正实现'万物互联,使能千行百业'”。 凋谢原子开源基金会秘书长孙文龙致开幕词与此同时,本次分论坛上公布了OpenHarmony的logo。logo为一个关闭的圆环关上,寓意OpenHarmony是开源凋谢的全新操作系统,小圆代表外围共建单位和开发者,大圆代表更多共建单位和开发者,他们都在一个同心圆里,寓意他们团结在OpenHarmony四周,携手独特凋敝OpenHarmony生态。 OpenHarmony logo公布随后,凋谢原子开源基金会副秘书长冯冠霖公布了OpenHarmony共建作战地图,心愿更多优良的软件开发企业、科研院所和集体开发者投入到OpenHarmony社区中来。同时,项目管理委员会PMC也十分欢送共建单位和集体在零碎架构和能力建设上提供更多的倡议。 凋谢原子开源基金会副秘书长冯冠霖公布OpenHarmony共建作战地图在凋谢原子开源基金会、OpenHarmony工作委员会、共建单位和宽广开发者的共同努力下,OpenHarmony开源我的项目获得突破性倒退,实现阶段性的生态凋敝。OpenHarmony工作委员会主席侯培新博士在分论坛演讲中为大家展现了一组倒退数据:截至目前,OpenHarmony排名Gitee活跃度指数第一位,吸引了40多家主仓代码奉献单位,2800+名社区贡献者,领有14个软件发行版,汇聚160万+社区用户,高达8700万+寰球下载次数,7.8万+次代码提交,近60款开发板/模组,曾经成为寰球智能终端操作系统畛域中一股不可漠视的开源力量。 OpenHarmony工作委员会主席侯培新博士发表视频致辞商业使能、生态与产业倒退成绩显著操作系统生态须要发行版厂商、芯片/开发板厂商、终端厂商、应用软件厂商的独特参加。随着OpenHarmony零碎能力降级、配套开发工具和资源齐备、兼容性测评平台上线,越来越多产业链搭档正在退出OpenHarmony生态,独特推动OpenHarmony的生态凋敝和商用落地。目前,已有18款支流芯片进入OpenHarmony社区骨干,公布14个行业发行版,32款商用设施。在本次大会的专题论坛上,来自软通能源、深开鸿、九联科技、润和软件、拓维信息等专家代表,为与会者展现了OpenHarmony商业使能,行业落地的优良实际案例。包含鸿湖万联基于OpenHarmony研发的产品智行电子哨兵在智能通行畛域以及精准防疫中的利用;深开鸿面向金融、商显、教育等行业推出多款KaihongOS发行版,聚焦技术创新,赋能产业降级;九联科技在超高清显示畛域发行版的技术创新;润和软件推出的软硬一体化使能计划以及面向金融等行业的HiHopeOS发行版;以及拓维信息旗下开鸿智谷推出的面向交通、教育领域的公路在鸿OS发行版、教育在鸿OS发行版。在随后的议程中,来自电子四院、美的、证通电子、万里红、京东批发、博泰车联网、Eclipse基金会等单干单位的专家代表展现了OpenHarmony在智慧城市、公路行业、高清显示、智能家居、金融、电商批发、智能座舱等丰盛利用场景下的翻新成绩,为宽广开发者出现了OpenHarmony生态凋敝倒退的现状,真正实现为千行百业赋能。OpenHarmony正走向世界,作为OpenHarmony寰球生态建设的一环,Eclipse基金会Oniro我的项目工作组代表Davide Ricci介绍了由Eclipse基金会主导、面向欧洲市场的OpenHarmony兼容发行版Oniro。Oniro通过构建bitbaker的meta-openharmony layer接入Linux驱动生态,实现OpenHarmony服务和组件运行在更多的硬件单板上。 技术革新提速,公布技术俱乐部打算在各生态共建单位和OpenHarmony工作委员会的共同努力下,OpenHarmony我的项目获得多项技术冲破。在技术提高专题论坛中,OpenHarmony项目管理委员会(PMC)和技术领导委员会(TSC)的技术专家为大家具体介绍了目前OpenHarmony五大关键技术停顿,并走漏了接下来的OpenHarmony 3.2版本行将实现的新个性和工作布局。为吸引更多优良开发者参加凋谢共享的OpenHarmony开源生态共建,OpenHarmony技术领导委员会在本次论坛上特地公布技术俱乐部打算,激励更多科研机构/高校一起进行OpenHarmony我的项目科研,并将为此设立费用反对、奖学金等一系列福利。 社区、生态倒退一直壮大,授牌致谢贡献者OpenHarmony的衰弱倒退离不开我的项目背地沉闷的开发者社区,社区中的每一个开发者都是我的项目倒退的基石。为了留念每一位开发者的奉献,本次大会公布带上序号的共建者留念电子勋章。 共建者留念电子勋章为感激OpenHarmony在各行业落地的优良单位和集体,OpenHarmony生态委员会举办了隆重的“生态领航奉献”授牌典礼。经OpenHarmony生态委员会评比,截至2022年6月30日,已推出通过兼容性测评的软件发行版的单位,取得授牌《OpenHarmony 生态领航奉献单位(软件发行版)》;已推出通过兼容性测评的商用设施的单位,取得授牌《OpenHarmony 生态领航奉献单位(面向各行业商用设施)》;已推出通过兼容性测评的开发板的单位且品类数量大于1,取得授牌《OpenHarmony 生态领航奉献单位(开发板)》;代码已进骨干的芯片厂商取得授牌《OpenHarmony 生态领航奉献单位(芯片)》;在生态拓展、生态经营、技术支持等生态工作上做出奉献的21位优良集体取得授牌《OpenHarmony 生态领航奉献集体》。 生态与产业倒退致谢授牌名单与此同时,OpenHarmony工作委员会对始终以来为OpenHarmony技术创新、代码奉献做出突出贡献的开发者和共建单位代表举办了隆重的致谢授牌典礼。包含:累计到7月14日在OpenHarmony骨干上奉献的代码(含代码批改量和文档批改量)达到Top10 的共建单位和 Top 20 的奉献集体,作为开发者的代表别离被授牌《2022 年度 OpenAtom OpenHarmony 代码 Top 10 奉献单位》和《2022 年度 OpenAtom OpenHarmony 代码外围贡献者》并致谢;有5 家共建单位,累计到7月14日,每一家都有超过100位员工向OpenHarmony的骨干、趣味组、三方库的仓库提交代码并且被合入,取得授牌《OpenAtom OpenHarmony 百人代码奉献单位》致谢;5 位学生代表因为所负责的我的项目在“OpenHarmony成长打算”中取得优良我的项目,取得授牌《OpenAtom OpenHarmony 成长打算-我的项目领航开发者》致谢。 开发者致谢授牌名单同时,OpenHarmony教育工作组介绍了我的项目在推动高校开源人才培养方面做出的致力。其中,OpenHarmony开发者成长打算已吸引3000+高校学生参加,2000+高校学生进入社群;实现师资造就覆盖全国120所高校,400位高校教师;针对研究生发展学术论文钻研,并孵化成立了“啃论文俱乐部”。除了精彩的议题分享和致谢授牌典礼外,本次分论坛还特地设置了共建成绩展现环节,展现了OpenHarmony在芯片、开发板、三方库、利用生态等方面的阶段性成绩,笼罩金融、超高清、智能家居、智慧城市、教育等行业畛域,让与会嘉宾近距离接触OpenHarmony在各行各业的落地实际和产品体验,清晰地理解OpenHarmony倒退至今的凋敝生态。 OpenHarmony共建成绩展现现场在世界范畴内掀起的数字化经济转型浪潮中,激励寰球协同翻新的开源软件生态施展着越来越重要的作用。而操作系统作为连贯整个数字基础设施软硬件生态的灵魂,离不开上下游软硬件生态合作伙伴的通力合作。从诞生之初便深深烙入开源凋谢基因的OpenHarmony,将与社区中宽广开发者、共建单位携手前行,在数字经济时代乘风破浪,凝聚全产业链力量,打造使能千行百业的泛终端数字底座。

July 28, 2022 · 1 min · jiezi

关于openharmony:OpenAtom-OpenHarmony分论坛今天1400见附大事记精彩发布

2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛万物互联,使能千行百业整装待发!精彩今日揭晓与您相约7月27日 14:00

July 27, 2022 · 1 min · jiezi

关于openharmony:开放原子开源基金会OpenHarmony工作委员会主席侯培新寄语OpenAtom-OpenHarmony分论坛

2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛万物互联,使能千行百业 7月27日 14:00  与您相约OpenHarmony 工作委员会主席侯培新寄语 OpenAtom OpenHarmony 分论坛

July 26, 2022 · 1 min · jiezi

关于openharmony:CircleIndicator组件使指示器风格更加多样化

UI界面是应用程序可视化必不可少的局部。设计粗劣的UI界面能够使得整个可视化应用程序给用户留下粗浅的印象,是改善用户界面体验最间接的形式。ArkUI开发框架为开发者提供了丰盛的UI原生组件,如Navigation(Page页面的根容器)、ScrollBar(滚动条组件)、Swiper(滑动容器)及Tabs(通过页签进行内容视图切换的容器组件)等。其中,Swiper组件和Tabs组件在利用程序开发中对于指示器的应用引入较多,然而间接应用原生的Swiper组件和Tabs组件不适用于体现简单的UI指示器交互变动。因而,咱们针对Swiper组件和Tabs组件在指示器利用方向做了一个简略的封装,以CiecleIndicator三方组件的模式提供应用程序依赖应用,从而晋升了ArkUI开发框架的UI界面之指示器格调多样化的能力。 CircleIndicator介绍CircleIndicator组件UI成果展现圆形指示器:长条指示器:横幅指示器:三角指示器:图标指示器:携带地方视图的Tabs指示器:固定地位Tabs指示器:固定地位Tabs指示器(胶囊格调)固定地位Tabs指示器(携带角标):可滑动Tabs指示器:可滑动Tabs指示器(水滴滑块):可滑动Tabs指示器(首列固定):titles指示器:什么是CircleIndicator?CircleIndicator顾名思义,它指的是圆形指示器。不过在咱们OpenHarmony三方组件中的CircleIndicator组件不再是广义的圆形指示器,而是将多种表现形式的指示器会集为一体的归一化指示器合集组件。CircleIndicator的源码实现这里咱们以CircleIndicator组件源码中的TriangularIndicator.ets文件为源码解析样例对象开展剖析。首先创立TriangularIndicator.ets文件,应用命名空间建设TriangularIndicator初始化模型: namespace TriangularIndicator { export class Model {//设置指示器高度 mHeight: number = 18//设置指示器宽度 mWidth: number = lpx2px(720)//设置指示器背景色 mBackgroundColor: string//字段过多,此处进行省略//各字段set与get办法,此处只以height字段为例 public getHeight(): number { return this.mHeight } public setHeight(height: number): Model { this.mHeight = height return this } //触摸事件拦挡 onPageTouch: (event: TouchEvent, currentIndicator: number) => void public notifyTouch(event: TouchEvent, currentIndex: number) { this.onPageTouch(event, currentIndex) } //设置结构器 private tabsController: TabsController (tabsController: TabsController) { this.tabsController = tabsController } //页面切换监听 indexChange: (itemIndex: number) => void public setChangeListener(callback: (index: number) => void): Model{ this.indexChange = callback return this }}将TriangularIndicator利用组件化: ...

July 25, 2022 · 2 min · jiezi

关于openharmony:我为OpenHarmony-写代码战码先锋第二期正式开启

OpenAtom OpenHarmony(以下简称“OpenHarmony”)问世以来,两年多工夫汇聚了160万+社区用户,寰球下载次数高达6300万,5.5万+次代码提交,吸引了40多家奉献单位,14家企业公布了OpenHarmony发行版。在开源力量崛起的背地,OpenHarmony工程师需要缺口微小。依据《第十个年度开源工作岗位报告》的数据显示,93%的企业雇主示意具备开源技能的专业人才非常稀少,近50%的企业雇主打算加大对开源人才的招聘。为激励开发者积极参与OpenHarmony开源社区共建,OpenHarmony开源贡献者打算-战“码”先锋二期正式启动。在战“码”先锋一期中,咱们见证了100+新晋Contributors的诞生,他们提交1,000+ PR,波及140,000+行代码。正因每一位开发者的退出,让OpenHarmony一直壮大。当初,战“码”先锋第二期蓄力登程!波及OpenHarmony骨干仓、SIG仓、三方库,共计1000+个代码仓任君挑战!但你是否还在犹豫,是否还有这样的疑难:● 作为开源老手,我应该怎么参加流动?● 开源只有技术大牛能力奉献,我编程能力无限如何奉献?● 在奉献过程中遇到技术问题,无奈解决怎么办?● 我参加开源能取得哪些益处?……释怀!这些通通都在咱们的“射程“范畴之内。战“码”先锋二期六大降级,助你降职Contributor,提交PR赢取大奖。六大降级,助力每一位开发者更好地参加到开源中来,实现本人的价值降级一:更丰盛的限量周边礼品,数千件礼品只为每一位贡献者;降级二:更全面的操作文档,跟着文档就能够成为Contributor;降级三:更强的直播专家团阵容,在线为你答疑解惑;降级四:先锋队长手把手领导,从入门级Issue疾速上手;降级五:更丰盛的大厂内推资源,中转技术总监面试(据说提交2个PR即可免口试哦);降级六:社区流量反对,助你打造集体品牌。OpenHarmony 侥幸锦鲤,独宠你一人!胜利合入>=1个PR 即可取得带集体Gitee ID的独家定制徽章;还能参加OpenHarmony侥幸锦鲤流动,抽取价值超1万元的大礼包。TOP50开发者每周最先合入PR的Top 50开发者,即可取得限量贡献者T恤(不反复领奖)。 流动规定:●以Gitee邮箱作为惟一中奖核查信息;●锦鲤流动仅限在2022.7.18之前未在OpenHarmony代码仓中合入过PR的Gitee 邮箱;●若中奖Gitee邮箱不合乎流动规定中奖有效。先锋队长排位赛如果你酷爱开源,喜爱分享,违心帮忙更多开发者在开源的路线上实现价值,欢送报名成为先锋队长,率领团队在开源畛域留下浓墨重彩的一笔。共计3个回合,每个回合都有限量好礼,还可冲刺终极大奖HUAWEI P50 Pro。咱们成立专家团为队长赋能培训、提供上手材料,Committer在线解答,助你轻松上任。 礼品池(局部展现) 扫码进群,支付提PR材料包,冲刺大奖先锋队长赋能培训课程(扫码入群,获取最新进展):面向人群:在校学生、萌新小白、技术大神,都能够在这里实现、施展本人的价值。如何参加奉献:开发者在OpenHarmony代码仓发现问题或有性能优化需要后,创立Issue并提交PR奉献代码。评比规定:开发者提交的PR由对应代码仓的committer检视,committer会严格审核提交的内容。咱们会依据合入PR的代码行数进行综合排名,并发放相应的荣誉激励和奖品。舒适提醒:开发者提交Issue/PR后,倡议和对应代码仓committer通过评论等形式进行沟通,无效的沟通有助于疾速合入PR。流动周期:2022/7/18-2022/9/19PR提交模板示例如下:题目:【OpenHarmony开源贡献者打算2022】+具体形容内容: 起因(目标、解决的问题等)XXXX 形容(做了什么,变更了什么)XXXXX代码仓范畴:流动范畴涵盖OpenHarmony骨干仓、SIG仓、三方库,共计1000+个代码仓:● OpenHarmony主库组织地址:https://gitee.com/openharmony●  OpenHarmony SIG组织地址:https://gitee.com/openharmony...●  OpenHarmony三方库组织地址:https://gitee.com/openharmony...在这里你不须要放心本人是开源老手,有什么问题只管大胆地提出来,肯定会有开发者热心解答。同时,咱们也心愿你别忘记帮忙他人,一起为OpenHarmony写代码!——最终解释权归流动主办方所有——

July 22, 2022 · 1 min · jiezi

关于openharmony:开幕在即-万物互联使能千行百业2022开放原子全球开源峰会OpenAtom-OpenHarmony分论坛

7月27日下午,聚焦开源产业与生态的2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛将在北京亦创国内会展中心隆重揭幕。 作为OpenHarmony工作委员会联结生态合作伙伴为宽广开发者和开源爱好者出现的重量级大会,本次分论坛将以“万物互联,使能千行百业”为主题,展示OpenHarmony在各行各业的落地成绩,凋敝生态与最新技术冲破。 2022 凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛由凋谢原子开源基金会主办,OpenHarmony工作委员会、软通能源、中软国内、深开鸿、九联科技、润和软件、拓维信息参加共建。届时将有凋谢原子开源基金会秘书长孙文龙学生、凋谢原子开源基金会OpenHarmony工作委员会主席侯培新学生等重量级嘉宾缺席并致辞,共襄盛举。 作为一场聚焦开源技术与产业生态交融的成绩展现大会,本分论坛将设置议题分享、公共体验区和致谢授牌三大模块。议题分享将围绕商业使能、生态与产业、产品翻新、技术提高和开发者赋能等发展,分享合作伙伴生态停顿与使能服务,展现行业发行版及解决方案的落地成绩;公共体验区给单干单位、代码贡献者、布道师们提供互相交换的平台,通过展现行业解决方案、软硬件生态、生态委员会与兼容性测评等内容,让现场参会者近距离理解OpenHarmony生态倒退的丰硕成果;此外,在本次大会上还将为在OpenHarmony生态共建过程中做出突出贡献的组织和集体举办致谢授牌典礼,以感激他们为共建开源凋谢的OpenHarmony生态做出的致力。 本次凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛的召开,可能让宽广开发者更清晰地理解OpenHarmony和其产业合作伙伴的倒退现状,以及OpenHarmony在各行各业数字化转型中施展的重要作用与优良实际案例。OpenHarmony诚邀宽广开发者关注2022凋谢原子寰球开源峰会OpenAtom OpenHarmony分论坛,独特摸索万物互联时代的有限可能。 议程安顿 (具体安排以理论为准)直播平台OpenHarmony官网直播间、软通能源、深开鸿、九联科技、润和软件新浪新闻、一直播、凤凰新闻、网易新闻开源中国、CSDN、InfoQ、思否、电子发烧友、51CTO 即刻扫码预约直播万物互联 ,使能千行百业OpenAtom OpenHarmony分论坛7月27日  行将启幕

July 22, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-littlefs文件系统存储结构与IO性能优化分析

引言随着科技的倒退和网络技术的提高,计算机存储空间更加缓和,存储空间对文件系统的性能需要越来越大,大规模的数据增长为文件存储、非结构化数据存储提出了新的挑战。对于许多物联网设施而言,领有一个小型且具备弹性的文件系统至关重要,littlefs文件系统应运而生。littlefs文件系统在2017年由Christopher Haster开发,遵循Apache 2.0协定,被利用在ARM的IoT设施Mbed操作系统。littlefs文件系统可能让嵌入式零碎在ROM和RAM资源无限的状况下,还具备文件系统根本的掉电复原、磨损平衡的性能。littlefs是一种极简的嵌入式文件系统,适配于norflash,它所采纳的文件系统构造与运行机制,使得文件系统的存储构造更加紧凑,运行中对RAM的耗费更小。它的设计策略采纳了与传统“应用空间换工夫”齐全相同的“应用工夫换空间”的策略,尽管它极大地压缩了文件系统存储空间,然而运行时也减少了RAM的耗费,不可避免地带来了随机读写时IO性能的升高。目前,OpenAtom OpenHarmony(以下简称“OpenHarmony”) liteos_m内核采纳了littlefs作为默认的文件系统。本文着重介绍了littlefs文件系统的存储构造,并依据对读写过程的剖析,解析引起littlefs文件系统随机读写IO性能瓶颈的根本原因,而后提出一些晋升littlefs随机读写IO性能优化策略。 littlefs文件系统构造文件系统存储构造信息根本以SuperBlock为开始,而后寻找到文件系统根节点,再依据根节点,逐渐拓展成一个文件系统树形构造体。littlefs也与此相似,以SuperBlock和根目录为终点,构建了一个树形存储构造。不同的是littlefs的根("/")间接附加在SuperBlock之后,与其共享元数据对(metadata pair)。littlefs中目录或者文件都是以该根节点为终点,构建了与其余文件系统相似的树形构造。littlefs文件系统树形存储构造如下: 图1 littlefs文件系统树形存储构造示意图如图1所示,存储littlefs文件系统元数据的构造为元数据对,即两个互相轮转、互为表里的Block。存储SuperBlock的元数据对固定存储在block 0和block 1,并且文件系统根目录附加在SuperBlock的尾部,与SuperBlock共享元数据对。元数据的存储是以tag的格局存储在元数据对内,依照元数据的类型,将Tag分为标准文件、目录、用户数据、元数据对尾部指针等类型。littlefs借助于这些不同类型tag信息,将littlefs文件系统组织成结构紧凑的树形存储构造体。例如tail类型的tag能够将比拟大的目录构造应用多个元数据对存储,并且应用tail类型的tag将这些元数据对连接成一个单向的链表。而目录类型的tag则间接指向该目录的元数据对,例如"tag: dir_data"类型的tag指向目录"/data"的元数据对,而该元数据对中又能够蕴含子目录或者文件(Inline类型或者outline类型)。littlefs目录存储构造littlefs目录的援用为其父目录元数据对(metadata pair)内的一个dir类型的Tag,而其内容则占用一个或者多个元数据对。一个目录的元数据对内既能够蕴含子目录援用的Tag,也能够蕴含属于该目录下文件的Inline类型的Tag或者指向该文件的CTZ跳表的CTZ类型Tag指针。最终littlefs通过一层层目录或者文件的索引,组成了文件系统的树形存储构造。littlefs文件存储形式littlefs文件系统为极简的文件系统,应用最小的存储开销,同时实现对小文件(Bytes级别)和大文件(MB级别)的反对,对小于一个Block八分之一长度的文件,采纳Inline类型的形式存储,而大于或者等于Block八分之一长度的文件则采纳Outline的形式存储(CTZ Skip-list)。 1.2.1 inline文件存储形式Inline文件存储形式,如图2所示,行将文件内容与文件名称一起存储在其父目录的元数据对(metadata pair)内,一个Tag示意其名称,一个Tag示意其内容。 图2 littlefs Inline文件存储构造 1.2.2 outline文件存储形式Outline文件存储形式,如图3所示,文件其父目录的元数据对(metadata pair)内,一个Tag示意文件名称,另一个Tag为CTZ类型,其指向存储文件内容的链表头。 图3 littlefs Outline文件存储构造CTZ跳表(CTZ skip-list)链表的特别之处是:(1)CTZ跳表的头部指向链表的结尾;(2)CTZ跳表内Block内蕴含一个以上的跳转指针。若是应用惯例链表,存储文件前一个数据块蕴含指向后一个数据块指针,那么在文件追加或者批改内容的时候,则须要存储文件起始块到指标块的所有内容拷贝到新块内,并且更新对后一个数据块的指针。而若是采纳反向链表的形式,则在文件追加或者批改内容的时候,则只须要将存储文件指标块到链表结尾的块的所有内容拷贝到新块内,而后更新对后一个数据块内对前一个数据块指向的指针,这样对于文件追加模式能够缩小批改量。另外,为了放慢索引,采纳了跳表的形式,Block内蕴含一个以上的跳转指针,规定为:若一个数据块在CTZ skip-list链表内的索引值N能被 2^X整除的数,那么他就存在指向N – 2^X的指针,指针的数目为ctz(N)+1。如表1,对于block 2,蕴含了2个指针,别离指向block 0和block 1,其它块也是采纳雷同的规定。表1 littlefs 块的skip-list链表计算样表 littlefs文件读写流程以上章节针对littlefs文件系统构造进行了剖析,接下来开始探讨littlefs外部的运行机制,以读写流程为例,剖析littlefs随机读写的IO性能瓶颈。须要提前理解的是,littlefs的文件只领有一个缓存,写时作为写缓存应用,读时作为读缓存应用。littlefs文件读过程以下图4是littlefs读文件的流程图,在读流程的开始先检测先前是否有对文件的写操作,即检测文件缓存是否作为写缓存。若是,则强制将缓存中的数据刷新到存储器,依据文件类型和拜访地位,或者间接从文件所在的元数据对读取,或者从存储文件内容的CTZ跳表内的块内读取,再将数据拷贝到用户缓存冲,并从存储器预读取数据将文件缓冲区填满。具体过程如下: 图4 littlefs文件系统读过程流程图littlefs文件写过程以下图5是littlefs写文件的流程图,在写流程的开始先检测先前是否有对文件的读操作,即检测文件缓存是否作为读缓存。若是,则革除缓存中的数据。若是APPEND类型的写操作,则间接减写地位定位到文件开端。若写地位超过文件长度,阐明文件结尾与写地位间存在空洞,则应用0填充文件中的空洞。对应Inline类型文件,若揣测到写后,文件长度超过了阈值,则将文件转成Outline类型。对于Outline类型的文件,若是批改文件的内容,则须要申请新块,并将指标块内拜访地位之前的所有内容都拷贝到新块,将buffer中的用户数据写到缓冲区或者刷新到存储器。留神:写后并没有立即更新Inline文件的commit,或者更新Outline文件的CTZ跳表,这些操作被提早在文件敞开或者缓冲区再次作为读缓存的时候强制文件刷新时更新。 图5 littlefs文件系统写过程流程图littlefs文件随机读写IO性能瓶颈剖析littlefs文件只有一个缓冲区,为读写复用。依据littlefs运行机制,若是对文件先读后写,那么仅须要间接将缓冲区的数据清空,而后申请一个新块将指标块内拜访地位间接的数据拷贝到新块中,而后写数据到新块。若是先写后读,那么须要将数据刷新到存储器,同时更新文件的CTZ跳表。在这个过程中,不仅波及到刷新数据到存储器,而且波及到调配新块替换指标块之后的所有块从而更新CTZ跳表,呈现屡次费时的擦除块动作。在随机读写的过程中,频繁产生读写切换,也就频繁地产生申请新块、擦除新块(十分费时)、数据搬移等等动作,重大地影响了IO性能。 littlefs读写IO性能优化策略由“2.3 littlefs文件随机读写IO性能瓶颈剖析”章节形容可知,影响littlefs文件随机读写IO性能的次要起因是文件只有一个的缓存且被读写复用,造成在读写切换的过程中频繁地产生文件刷新,申请新块,而后执行费时的块擦除,再将CTZ跳表上块内的block内容搬移到新块,进而更新CTZ跳表,这重大影响了随机读写IO的性能。所以,在RAM空间容许的状况下,能够思考“应用空间换工夫”的策略,适当地减少文件缓存的数量,使一个文件领有多个缓冲区,而这些缓冲区对应着一个Block的大小,在肯定的条件下一次刷新一个Block,从而防止过多的数据搬移。另外,littlefs的策略是“应用工夫换空间”,然而每个文件都领有一个缓冲区显著节约空间。因为在一段时间内,只会有肯定数量的文件被执行读或者写,所以能够思考建设一个领有肯定数量的缓存池,使缓存在文件间共享。 图6 littlefs优化策略优化的策略如图6所示,littlefs文件缓存池为一个双向链表fc_pool,缓存池随着被关上文件的个数的增长而缩短,直到用户设置的最大限度;缓存池随着文件的敞开而逐步缩减。每个缓存挂载在fc_pool缓存池双向链表上,当缓存被写或者被读时,则将缓存移到链表结尾,那么缓存池链表开端的缓存则为待老化的缓存,能够优先被抉择回收。在申请缓存时,优先从缓冲池链表开端抉择闲暇缓存;若无闲暇缓存,则思考抢占读缓存;若缓存池既没有闲暇缓存也没有读缓存,在缓存池长度没有达到优化限度的状况下,则创立新缓存,而后将新缓冲增加到链表头;若缓存池既没有闲暇缓存也没有读缓存,并且缓存池长度曾经达到用户限度,那么就须要从链表开端抢占一个写缓存,并强制占有该缓存的文件执行刷新,进而实现抢占。在文件被敞开或者刷新时,被动开释缓存到缓存池,挂载在双向链表的开端。应用上述策略对文件缓存进行优化,能够在肯定水平上缩小因更新文件内容而执行的存储器块擦除动作,从而减少随机读写的IO性能,也间接地缩短了NorFlash的寿命。 总结通过本文的解说,置信大家对于littlefs文件系统有了较为全面的理解。总的来说,littlefs是一种极简的文件系统,实现了文件系统根本的数据缓存、掉电复原、磨损平衡等性能,在资源绝对富裕的环境中,开发者们能够对其运行机制甚至存储构造进行“应用空间换工夫”的优化策略,晋升读写的IO性能。学会无效地利用文件系统往往能起到事倍功半的作用,心愿开发者可能将所学常识无效利用到将来的开发工作中,从而进步开发工作的效率。

July 18, 2022 · 1 min · jiezi

关于openharmony:鸿湖万联致远开发板正式合入OpenHarmony主干

近日,软通能源全资子公司鸿湖万联(江苏)科技倒退有限公司(以下简称“鸿湖万联”)推出的致远开发板正式合入OpenAtom OpenHarmony(以下简称“OpenHarmony”)社区骨干。鸿湖万联利用其外围能力,继续倒退我的项目的技术、硬件反对和生态系统,将来还将奉献更多翻新成绩。此举标记着鸿湖万联将本身开发者生态引流至OpenHarmony生态中,不断丰富OpenHarmony生态体系,同时也继续推动开源操作系统 OpenHarmony落地利用,吸引并服务更多开发者,携手共建开源生态。 鸿湖万联致远开发板具备高性能的内部存储器接口,嵌入式GPU反对OpenGL ES 3.2/2.0/1.0,Vulkan 1.1,以及OpenCL 2.0;保证系统高容量高稳固地运行内存带宽,并反对OpenHarmony骨干版本;工业级运行温度-45~80℃,间断运行寿命大于5年。 鸿湖万联致远开发板,基于T507芯片,采纳“外围板+底板”构造模式,反对OpenHarmony操作系统,采纳四核ARM处理器,加载规范零碎的OpenHarmony;具备低功耗、高性能、运行稳固等长处;可用于车载电子、电力、医疗、工业管制、物联网、智能终端等畛域。 其中外围板,反对蓝牙、Wi-Fi、音频、视频和摄像头等性能,领有丰盛的扩大接口,反对多种视频输入输出接口。配置千兆自适应RJ45以太网口、4G全网通模块,可满足人脸识别闸机、智慧考勤、工业网关等场景需要。 鸿湖万联致远开发板合入OpenHarmony骨干,不仅裁减了OpenHarmony芯片平台多样化,同时具备开放性劣势,并升高了OpenHarmony入门门槛,可能极大推动OpenHarmony在智能家居、智能工业、智能医疗、智能终端等宽泛的物联网畛域利用落地,这也意味着鸿湖万联的智能产品反对OpenHarmony操作系统的一直迭代降级。 鸿湖万联不忘初心,继续为OpenHarmony生态建设贡献力量,与宽广合作伙伴和开发者在万物智联时代一直深度链接和前行。 鸿湖万联代码仓库 https://gitee.com/openharmony... https://gitee.com/openharmony...

July 15, 2022 · 1 min · jiezi

关于openharmony:直播回顾OpenHarmony知识赋能六期第三课OpenHarmony智能家居项目之控制面板功能实现

7月14日早晨19点,常识赋能第六期第三节直播 《OpenHarmony智能家居我的项目之控制面板性能实现》 ,在OpenHarmony开发者成长打算社群内胜利举办。本次直播是“OpenHarmony开源开发者成长打算我的项目”举办的常识赋能系列直播之一,在开发者中引发了高度关注。此系列直播曾经走过了5期,共28节课,23名技术大咖倾囊相授,从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。目前已有2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。第六期直播由润和软件生态技术总监,华为HDE专家连志安老师主讲,第三节课介绍了基于规范零碎的 JS nativea API开发、socket编程,实现温湿度数据采集与灯光管制,包含JS nativea API、SOCKET通信设计、温湿度数据采集与灯光管制。欢送大家长按下方海报扫码,回看7月14日晚的常识赋能第六期第三节直播:OpenHarmony成长打算常识赋能系列所有直播课,以及更多OpenHarmony社群举办的直播课程,咱们都将在OpenHarmony B站官网账号“OpenHarmony开发者社区”上汇总公布。 欢送宽广开发者锁定观看、珍藏学习:space.bilibili.com/2029471800/channel/series(讲师直播课件,也可增加OpenHarmony小助手获取↓↓)

July 15, 2022 · 1 min · jiezi

关于openharmony:鸿蒙智能家居10

利用场景:智能家居。明天打造的这一款全新智能家庭控制系统,凸显利用在智能管制和用户体验的特点,创始国内智能家居零碎体验新场面。新的零碎次要利用在鸿蒙生态。 在开始之前大家能够先预览一下我实现之后的成果。 智能家居中控 是不是很炫酷呢? 搭建OpenHarmony环境实现本篇Codelab咱们首先要实现开发环境的搭建,本示例以DaYu200开发板为例,参照以下步骤进行: 获取OpenHarmony零碎版本:规范零碎解决方案(二进制) 以3.0版本为例: 搭建烧录环境 实现DevEco Device Tool的装置实现Dayu200开发板的烧录搭建开发环境 开始前请参考工具筹备 ,实现DevEco Studio的装置和开发环境配置。开发环境配置实现后,请参考应用工程向导 创立工程(模板抉择“Empty Ability”),抉择eTS语言开发。工程创立实现后,抉择应用真机进行调测 。相干概念容器组件 ColumnRowStack根底组件 TextTextInputButtonImageNavigation通用 边框设置尺寸设置点击管制布局束缚背景设置点击事件TS语法糖 好的接下来我将具体解说如何制作 开发教学创立好的 eTS工程目录新建工程的ETS目录如下图所示。 各个文件夹和文件的作用: index.ets:用于形容UI布局、款式、事件交互和页面逻辑。app.ets:用于全局应用逻辑和利用生命周期治理。pages:用于寄存所有组件页面。resources:用于寄存资源配置文件。接下来开始注释。 咱们的次要操作都是在在pages目录中,而后我将用不到10分钟的工夫,带大家实现这个性能。 拆解 依据设计图,咱们能够分层展现,用Column包裹,大抵分为这几步 能够看下本页的构造: 再具体一点: import { SettingDetails } from './common/SettingDetails';import router from '@ohos.router';@Entry@Componentstruct Index { @State title: string = '智能家居体验' @State message: string = '你当初想要关上那些设置?' @State desc: string = '点击所有实用的选项。这将帮忙咱们\n自定义您的主页' @State Number: String[] = ['0', '1', '2', '3', '4'] @State private isSelect: boolean = true; build() { Column() { Text(this.title) .fontSize(80) .fontWeight(FontWeight.Bold).onClick(() => { router.push({ url: 'pages/SensorScreen' }) }).margin({ bottom: 60, top: 40 }) Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold).onClick(() => { router.push({ url: 'pages/SensorScreen' }) }).margin({ bottom: 60 }) Text(this.desc) .fontSize(30) .textAlign(TextAlign.Center) .fontWeight(FontWeight.Bold) .onClick(() => { }) .margin({ bottom: 60 }) Row() { SettingDetails({ image: "common/images/setting.png", title: "Maintenance\nRequests", isSelected: this.isSelect! }) SettingDetails({ image: "common/images/grain.png", title: "Integrations\n", isSelected: this.isSelect! }) SettingDetails({ image: "common/images/ic_highlight.png", title: "Light\nControl", isSelected: this.isSelect! }) } Row() { SettingDetails({ image: "common/images/opacity.png", title: "Leak\nDetector", isSelected: this.isSelect! }) SettingDetails({ image: "common/images/ac_unit.png", title: "Temperature\nControl", isSelected: this.isSelect! }) SettingDetails({ image: "common/images/key.png", title: "Guest\nAccess", isSelected: this.isSelect! }) } Button("NEXT") .fontSize(60) .fontColor(Color.Black) .width(600) .height(100) .backgroundColor(Color.Red) .margin({ top: 100 }) .onClick(() => { router.push({ url: 'pages/SensorScreen' }) }) } .width('100%') .height('100%').backgroundColor("#F5F5F5") }}具体布局具体布局设计到一些细节的中央,例如距离,边框,以后组件尺寸设置等一些非凡状况,基本上就是嵌套,一层一层去实现。 ...

July 14, 2022 · 4 min · jiezi

关于openharmony:鸿蒙智联汽车10

利用场景:智慧出行。智能汽车是集环境感知、布局决策、多等级辅助驾驶等性能于一体的智能网联综合零碎,它集中使用了计算机、古代传感、信息交融、通信、人工智能及自动控制等技术,是典型的高新技术综合体。简略的说,智能汽车的呈现将逐渐放松车、手、眼,让开车,用车变得简略。这样的产品对有本儿不敢上路的人来说或者是大大的福音。 在南方冬天有点冷,这个时候,去车里,温度很低,给人一种不难受的感觉,那么有没有一种可能,就是能够通过手机App,实现对车内的一些状况的监测,答案是有的,明天做的这个App,就是这样一个App。 我要实现的性能次要有 用户能够解锁任何车门,查看电池状态,管制空调温度,查看轮胎的气压。在开始之前大家能够先预览一下我实现之后的成果。如下图所示: 是不是很炫酷呢? 搭建OpenHarmony环境实现本篇Codelab咱们首先要实现开发环境的搭建,本示例以DaYu200开发板为例,参照以下步骤进行: 获取OpenHarmony零碎版本:规范零碎解决方案(二进制) 以3.0版本为例: 搭建烧录环境 实现DevEco Device Tool的装置实现Dayu200开发板的烧录搭建开发环境 开始前请参考工具筹备 ,实现DevEco Studio的装置和开发环境配置。开发环境配置实现后,请参考应用工程向导 创立工程(模板抉择“Empty Ability”),抉择eTS语言开发。工程创立实现后,抉择应用真机进行调测 。相干概念容器组件 ColumnRowStack根底组件 TextButtonImageNavigation通用 边框设置尺寸设置点击管制布局束缚背景设置点击事件TS语法糖 好的接下来我将具体解说如何制作 开发教学创立好的 eTS工程目录新建工程的ETS目录如下图所示。 各个文件夹和文件的作用: index.ets:用于形容UI布局、款式、事件交互和页面逻辑。app.ets:用于全局应用逻辑和利用生命周期治理。pages:用于寄存所有组件页面。resources:用于寄存资源配置文件。接下来开始注释。 咱们的次要操作都是在在pages目录中,而后我将用不到10分钟的工夫,带大家实现这个性能。 拆解 依据设计图,咱们能够分为内容展示区和菜单。 针对这一点,咱们能够用Navigation组件作为Page页面的根容器,通过属性设置来展现页面的题目、工具栏、菜单。 Navigation() { Column({ space: 20 }) { if (this.index == 0) DoorLook() else if (this.index == 1) Battery() else if (this.index == 2) Temp() else if (this.index == 3) Tyre() } .backgroundColor(Color.Black) .justifyContent(FlexAlign.SpaceAround) .alignItems(HorizontalAlign.Center) .justifyContent(FlexAlign.Center) .size({ width: '100%', height: '100%' }) } .size({ width: '100%', height: '100%' }) .toolBar(this.toolbarWidget()) .hideToolBar(this.hideToolBar) .hideTitleBar(this.hideTitleBar)具体布局具体布局设计到一些细节的中央,例如距离,边框,以后组件尺寸设置等一些非凡状况,基本上就是嵌套,一层一层去实现。 ...

July 14, 2022 · 4 min · jiezi

关于openharmony:你玩过轻量系统软总线应用吗

我的项目概述可能有些同学曾经接触过了规范零碎上的软总线利用开发,然而你玩过轻量零碎上的软总线利用吗?当初它来了。咱们利用OpenAtom OpenHarmony 3.1 Release(以下简称“OpenHarmony”)版本的轻量零碎软总线能力,将智能燃气检测设施和智能窗户通风设备组成一个轻量级分布式网络,实现设施之间的互相管制。原理图如下:当家中的燃气告警时,无需任何操作,间接管制窗户通风零碎中的电机工作。 开发阐明从下面的视频中能够看到,相干案例设施的利用界面都能够分成外设交互页面和软总线操作页面两大块。在上面的零碎框图中能够看到相干页面和其依赖的相干轻量零碎能力。例如外设交互界面通过自定义JSI接口与设施硬件打交道,软总线操作界面则通过轻量零碎的设施治理能力、软总线能力来实现设施间的发现、认证、传输等软总线操作。在上面的内容中咱们将以智能燃气告警器设施为例,将相干开发过程分成JS利用端开发、自定义JSI实现、开发板端代码三局部来阐明:JS利用开发燃气告警器JS利用是基于3.1 release版本,并联合方舟开发框架(ArkUI)、分布式组网等个性,应用JS语言开发的一款分布式平安厨房利用。为了体现了 OpenHarmony轻量级分布式个性,不仅须要思考页面该如何设计、利用怎么同外设交互,还须要思考两个轻量级设施间如何进行设施认证,设施间如何进行通信等问题。所以在相干利用中设计了操作页面,报警页面以及设施认证页面。其中首页是设置燃气浓度阈值,以及显示以后燃气浓度;报警页面是当首页检测到以后燃气浓度达到或高于咱们设置的阈值时,会从首页跳转到报警界面;设施认证页面则是对两台设施进行分布式组网。代码构造如下图:外设交互页面开发相干界面如上图所示,咱们将首页页面分成三个局部:顶部标签、燃气浓度显示、设置告警阈值。接下来是具体的解析内容:1)顶部标签解析顶部标签中除了相干文本界面,次要是顶部两个按钮,别离用来显示以后Wi-Fi连贯状态以及跳转到设施认证页面。 GetKey() { com.get({ // 获取wifi状态 key: 'storage_key', success: (data)=> { let res = JSON.parse(data) if (res.wifi) { if(res.wifi == 'connected') { this.isWifi = true; } else { this.isWifi = false; } } ..... }, }); }, changePage(operation) { router.replace({ uri:"pages/dm/dm" // 跳转到设施认证页面 }); }2)燃气浓度显示次要是获取以后燃气浓度,并实时刷新到相干界面上。 onInit() { setTimeout(()=>{ setInterval(()=>this.GetKey(),500) // 每500ms 获取一次 },3000); }, GetKey() { com.get({ key: 'storage_key', success: (data)=> { let res = JSON.parse(data) if (res.CurrentGasCONC) { this.currentValue = res.CurrentGasCONC; this.progressPercent = ((this.currentValue ) /300) * 100 if(this.currentValue >this.PresetValue && !this.isChange){ this.isChange = true; router.replace({ uri:"pages/warn/warn" // 燃气数值超标后主动跳转告警页面 }); } } }, ...... }); },3)设置报警阈值首页界面中对于报警阈值的解决,次要蕴含减小预设阈值和增大预设阈值,都是通过调用相干SetKey操作实现的。 ...

July 14, 2022 · 3 min · jiezi

关于openharmony:本周四晚1900知识赋能第3期直播丨OpenHarmony智能家居项目之控制面板功能实现

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,从而更深刻的参加OpenHarmony开源社区的我的项目开发。在将近8个月的工夫里,OpenHarmony 常识赋能直播课曾经走过了5期,共28节课,23名技术大咖倾囊相授,2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。技术大咖们从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。第六期的直播均由华为HDE专家,润和软件生态技术总监连志安老师进行解说,上一节的直播中,连志安老师介绍了基于ArkUI开发控制面板利用,布局设计、相干组件开发,具体包含控制面板的布局设计以及ArkUI相干组件的应用,开发者们纷纷踊跃留言互动,给出好评!而第3节直播《OpenHarmony智能家居我的项目之控制面板界面性能实现》中,连志安老师将介绍基于规范零碎的 JS nativea API开发、socket编程,实现温湿度数据采集与灯光管制,包含JS nativea API、SOCKET通信设计、温湿度数据采集与灯光管制,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!

July 13, 2022 · 1 min · jiezi

关于openharmony:如何通过OpenHarmony系统中集成的ffmpeg库和NAPI机制实现更多的多媒体功能

简介OpenAtom OpenHarmony(以下简称“OpenHarmony”)作为“开源”世界的“连接器”,一直为智能社会的倒退提供源源不断的“源能源”。深开鸿始终以来踊跃投身于OpenHarmony社区建设,一直推动开源事业的倒退。身为深开鸿的一名OS框架开发工程师,我在OpenHarmony 开源我的项目成立伊始便踊跃退出OpenHarmony 社区建设,负责OpenHarmony框架和构造的研发工作,此次我将带来OpenHarmony多媒体子系统的源码剖析,心愿能为宽广的开发者提供参考。OpenHarmony多媒体子系统,是OpenHarmony零碎框架中的其中一个比拟重要的子系统。OpenHarmony中集成了ffmpeg的第三方库,多媒体的很多性能实现须要ffmpeg库。另外,媒体文件的解决蕴含了对音视频裁剪、音视频拆散等利用场景的解决,有些性能多媒体子系统没有提供给内部相应的接口,对此能够通过NAPI的机制实现一套JS接口,提供给应用层去调用,以此实现更多的多媒体性能 。成果展现本文通过实现音视频文件裁剪的性能,让开发者相熟实现该性能的整个操作流程。以下是效果图:首先抉择源文件,在裁剪设置中设定裁剪的起始工夫和完结工夫(单位为秒),参数设定完当前,咱们点击裁剪按钮,进而对源文件进行裁剪,裁剪胜利后,会显示播放按钮。在整个操作过程中,源文件抉择模块的播放按钮是对源文件进行播放,裁剪模块的播放按钮是对裁剪后文件的播放,咱们能够通过播放视频文件来查看裁剪前后的成果比照。代码曾经上传至SIG仓库,链接如下:https://gitee.com/openharmony...https://gitee.com/openharmony... 源码剖析源码剖析分为两个局部,一部分是NAPI实现的本地性能,另一部分是JS实现的利用性能。一、NAPI一、实现以下是源码剖析的内容,外围的模块次要代码是myffmpegsys,为利用端提供了js的接口。1. myffmpegsys作为一个新的子系统集成到OpenHarmony源码中,搁置在OpenHarmony源码的根目录下,和foundation在同一目录下。2. 配置build/subsystem_config.json。 "myffmpegsys": { "path": "myffmpegsys", "name": "myffmpegsys" },配置产品的productdefine/common/products/XXXX.json(其中XXXX对应的设施型号)。"parts":{ "myffmpegsys:myffmpegpart":{}, "ace:ace_engine_standard":{}, ...... }配置好子系统以及对应的组件后,上面再对myffmpegsys子系统的源码进行剖析。  (1)目录构造myffmpegdemo中次要解决napi相干的接口转换,ffmpeg_utils通过调用ffmpeg三方库解决理论的视频文件裁剪性能。(2)OpenHarmony集成的ffmpeg三方库的门路是third_party/ffmpeg,myffmpegdemo会依赖ffmpeg,并且头文件也会援用ffmpeg头文件,所以在BUILD.gn文件中会增加相干的依赖和门路。import("//build/ohos.gni")ohos_shared_library("myffmpegdemo") { include_dirs = [ "//foundation/ace/napi/interfaces/kits", "//myffmpegsys/myffmpegpart/myffmpegdemo/include", "//third_party/ffmpeg", ] sources = [ "myffmpegdemo.cpp", "ffmpeg_utils.cpp", ] public_deps = [ "//foundation/ace/napi:ace_napi", "//third_party/ffmpeg:libohosffmpeg" ] external_deps = [ "hiviewdfx_hilog_native:libhilog", ] relative_install_dir = "module" subsystem_name = "myffmpegsys" part_name = "myffmpegpart"}(3)流程图(4)代码剖析    Napi接口注册: /*********************************************** * Module export and register ***********************************************/static napi_value registerMyffmpegdemo(napi_env env, napi_value exports){ static napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("videoCute", videoCute), DECLARE_NAPI_FUNCTION("videoToAacH264", videoToAacH264), }; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports;}NAPI实现videoCute接口,将NAPI类型转换成C++类型,而后调用FfmpegUtils的videoCute接口: ...

July 12, 2022 · 2 min · jiezi

关于openharmony:对OpenHarmony中LiteOS的内核分析超时原理和应用

前言在软件世界外面,超时是一个十分重要的概念。比方● 以后线程临时休眠1秒钟,休眠完结后继续执行● 每5秒钟采集一下CPU利用率● 数据发送失败,2秒钟当前再试一试● 期待某种数据,但最多期待50毫秒 利用//将当前任务休眠若干tick数,tick为工夫单位,常见值为10毫秒LITE_OS_SEC_TEXT UINT32 LOS_TaskDelay(UINT32 tick)//获取信号量semHandle, 如果以后信号量不可用且timeout不为0,则最多期待timeout所指定的工夫,在这段时间内如果信号量可用,则获取胜利,否则获取失败。LITE_OS_SEC_TEXT UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout)//从空的音讯队列读取音讯,或者向满的音讯队列写音讯时,如果timeout不为0,则最多期待timeout指定的工夫,在这段时间内音讯队列可读或可写,则进行对应的读写并返回胜利,否则返回失败。LITE_OS_SEC_TEXT UINT32 LOS_QueueRead(UINT32 queueID, VOID *bufferAddr, UINT32 bufferSize, UINT32 timeOut)LITE_OS_SEC_TEXT UINT32 LOS_QueueWrite(UINT32 queueID, VOID *bufferAddr, UINT32 bufferSize, UINT32 timeOut)//获取互斥锁,如果以后互斥锁被其它线程占用,则最多期待timeout指定的工夫,此工夫内其它线程开释了互斥锁并被本线程抢到则返回胜利,否则返回失败。LITE_OS_SEC_TEXT UINT32 LOS_MuxPend(UINT32 muxHandle, UINT32 timeout)//期待其它线程向本线程发送事件,最多期待timout指定的工夫LITE_OS_SEC_TEXT UINT32 LOS_EventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeOut)上述这些函数都是超时概念在OpenHarmony中liteos_m内核里的具体利用。具体而言,liteos_m内核如何实现这个超时逻辑的呢,咱们接着看下一个章节 原理如上图所示。在时间轴上,黄色圆点代表须要进行某种操作的工夫点,而绿色圆点为查看零碎是否有超时事件须要解决的查看工夫点。零碎周期性的进行查看(周期单位为tick)。在2个检查点之间可能有超时事件,也可能无超时事件。例如,依据上图展现的状况。以后在第一个检查点,发现了2个超时事件,那么这次解决这2个超时事件;随着工夫流逝,箭头来到第2个检查点,又发现2个超时事件,持续解决;在第3个检查点时,本段时间内无超时事件,所以是空操作。后续的查看以此类推。 代码实现为了准确性以及时效性,本文选取了最新的版本的代码来形容。上述检查点和工夫点由链表构造进行定义。具体在kernel/liteos_m/include/los_sortlink.h文件中。因为原理图中的超时事件产生是非平均的,且存在有序顺次产生的逻辑,所以,这些信息被保护在双向链表中(对删除操作更敌对)。SortLinkList代表了链表中的每一个须要处理事件的工夫点,responseTime代表具体的工夫值(从启机开始的cpu cycle数目)。SortLinkAttribute代表链表的头部(哑头)。从名称也能看出,这个是一个排序的双向链表,排序的根据即responseTime这个数值。须要留神的一个细节是:零碎反对2个链表,其中一个是TASK链表,另一个是SWTMR链表。这2个链表实现形式统一,次要区别是,SWTMR链表超时解决是唤醒swtmr线程来解决超时事件,而task链表唤醒的是每个具体的task(sleep,ipc超时等场景)。应用swtmr线程来解决若干超时的机制,能够无效缩小零碎须要的线程数目,从而节俭系统资源的占用。 总结本文形容了超时逻辑在OpenHarmony中的实现,从原理,应用以及具体实现细节上进行了详尽探讨,并演绎整顿了以后这种实现形式所带来的好处。

July 11, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony藏头诗应用

明天咱们将做一个OpenHarmony趣味利用——OpenHarmony藏头诗利用,是通过AI接口来做。通过调用指定的AI接口来做,接口会返回藏头诗或者持续实现诗的前面几句。 我要实现的性能次要有:生成藏头诗,生成整首诗,你能学到的有:网络申请可滚动组件状态治理罕用组件罕用属性批改利用名称和图标在Config.json增加权限等用到的接口:接口: https://py.myie9.com/hidepoem/坚果申请形式: Get apipost申请测试 接口: https://py.myie9.com/xuxietest/汗滴禾下土apipost申请测试: 如何创立利用在这里不做解释。 首先预览一下利用 留神点:容许https须要增加上面的配置 "deviceConfig": { "default": { "network": { "cleartextTraffic": true } } },应用网络申请在config.json增加权限: "reqPermissions": [ { "name": "ohos.permission.INTERNET" } ],残缺代码:import http from '@ohos.net.http';import RequestMethod from '@ohos.net.http';import ResponseCode from '@ohos.net.http';@Entry@Componentstruct Index { @State tibetanContent: string = "坚果的小跟班"; @State tibetanInput: string = "跟着坚果学鸿蒙"; @State wholeContent: string = ""; @State wholeInput: string = "跟着坚果学鸿蒙"; private scroller: Scroller = new Scroller() onCancel() { console.info('敞开') } build() { Scroll(this.scroller) { Column({ space: 10 }) { Text($r("app.string.title")) .fontSize(26) .fontWeight(FontWeight.Bold) .align(Alignment.Start) .margin({ top: 20 }) TextInput({ placeholder: '请输出要生成的内容', }) .fontSize(36) .enterKeyType(EnterKeyType.Go) .onChange((value) => { this.tibetanInput = value; }) .height(80) .margin({ top: 40, left: 16, right: 16 }) Button("生成藏头诗").backgroundColor(Color.Pink) .onClick(() => { this.TibetanRequest(); }) Text(this.tibetanContent).fontSize(26).fontColor(Color.Orange) TextInput({ placeholder: '请输出要生成的内容', }) .fontSize(36) .enterKeyType(EnterKeyType.Go) .onChange((value) => { this.wholeInput = value; }) .height(80) .margin({ left: 16, right: 16 }) Button("生成整首诗").backgroundColor(Color.Green) .onClick(() => { this.wholePoemRequest(); }) Text(this.wholeContent).fontSize(24).fontColor(Color.Orange) } .padding(10) } } //藏头诗接口 private TibetanRequest() { let httpRequest = http.createHttp(); httpRequest.request( "https://py.myie9.com/hidepoem/" + this.tibetanInput, { method: RequestMethod.RequestMethod.GET, readTimeout: 15000, connectTimeout: 15000, }, (error, data) => { if (error) { console.log("error code: " + error.code + ", msg: " + error.message) } else { let code = data.responseCode if (ResponseCode.ResponseCode.OK == code) { this.tibetanContent = data.result.toString(); let header = JSON.stringify(data.header); console.log("result: " + this.tibetanContent); console.log("header: " + header); } else { console.log("response code: " + code); } } } ); } //整首诗接口 private wholePoemRequest() { let httpRequest = http.createHttp(); httpRequest.request( "https://py.myie9.com/xuxietest/" + this.wholeInput, { method: RequestMethod.RequestMethod.GET, readTimeout: 15000, connectTimeout: 15000, }, (error, data) => { if (error) { console.log("error code: " + error.code + ", msg: " + error.message) } else { let code = data.responseCode if (ResponseCode.ResponseCode.OK == code) { this.wholeContent = data.result.toString(); let header = JSON.stringify(data.header); console.log("result: " + this.wholeContent); console.log("header: " + header); } else { console.log("response code: " + code); } } } ); }}发动网络申请应用 @ohos.net.http 模块发动网络申请分为以下步骤: ...

July 11, 2022 · 2 min · jiezi

关于openharmony:基于OpenHarmony的智能指南针

电子指南针是古代的一种重要导航工具,大到飞机船舶的导航,小到集体手机导航,电子指南针能够说和咱们生存非亲非故,密不可分。为什么电子指南针能批示方向?本 Demo 将为你出现,其中蕴含了人类智慧及大自然的奥秘。本我的项目分为数据采集端(设施端)和成果展现端(利用端):1、指南针数据采集端:应用的是 Geek_Lite_Board 开发板,其内置了三轴磁力计 AK8963,通过解析磁力计数据取得指南针数据信息,操作系统版本为 OpenAtom OpenHarmony 3.0(以下简称“OpenHarmony”);2、指南针成果展现端:应用的是润和 RK3568 开发板,操作系统版本为 OpenHarmony 3.1 release。成果展现端则体现了 OpenHarmony JS UI、Canvas 组件和 NAPI 的能力:1、Canvas 组件是一个画布组件,获取到画布对象后,能够自定义绘制图形,比方圆形,线条等,本我的项目中利用端的指南针界面是基于 Canvas 组件开发;2、NAPl (NativeAPI)是 OpenHarmony 规范零碎的一种 JS API 实现机制,通过 NAPI 能够实现 JS 与 C/C++ 代码相互拜访。本我的项目利用端通过 NAPI 来接管设施端收回的检测信息。当设施利用启动之后,运行成果如下动图所示: 一、基本原理地球是一个大磁体,地球的两个极别离在靠近天文南极和天文北极的中央,个别状况下地球的磁场强度在 0.5 高斯左右(高斯是磁场强度单位)。Geek_Lite_Board 开发板带有 AK8963 三轴磁力计。三轴磁力计可能测出互相垂直的三个方向的磁力大小。通常咱们把传感器平放,即让重力方向与传感器垂直,假如重力方向为 z 轴,其余两轴为 x 轴和 y 轴。在只受地球磁场的环境下(疏忽其余强大烦扰),x 轴 y 轴检测到的磁力数据的矢量和就等于接管到的地球磁场。咱们利用 x 轴与 y 轴的比值,就能确定目前朝向正北边差多少角度。例如现测到 x 轴数据靠近 0.5 高斯,y 轴数据靠近 0,就认为目前的 x 轴方向就是正北方。那 x 轴方向是哪个方向?对于 x 轴方向,生产传感器芯片的厂商会预约义好传感器的 x 轴、y 轴及 z 轴方向(通常垂直芯片外表的为 z 轴)。数据流程智能指南针整体计划如上图所示,次要由 Geek_Lite_Board 开发板和润和 RK3568 开发板形成,它们采纳局域网(路由器)TCP 协定的通信形式。 ...

July 8, 2022 · 3 min · jiezi

关于openharmony:三步就能在OpenHarmony中实现车牌识别

介绍本车牌辨认我的项目是基于开源我的项目 EasyPR(Easy to do Plate Recognition)实现。EasyPR 是一个开源的中文车牌识别系统,基于 OpenCV 开源库开发。本我的项目应用润和 HiSpark Taurus AI Camera(Hi3516DV300) 摄像头开发板套件(以下简称 Hi3516)实现拍照车牌并显示辨认后果。采纳的零碎是 OpenAtom OpenHarmony (简称“OpenHarmony”) 3.1 Release 小型零碎。首先将 Hi3516 中的摄像头对准车牌,其间隔约为 60cm~70cm 如下所示:运行程序后按下 1 拍照、按 2 输入辨认后果如下所示: 开发流程本车牌辨认我的项目应用 OpenHarmony 中的媒体子系统实现。代码基于停车场景下的本地车牌辨认。进行解说,其代码构造如下:三方库移植EasyPR 实现是基于 OpenCV 实现,因而实现 EasyPR 首先得移植 OpenCV。移植的形式采纳 Gn 调用 Shell 脚本,Shell 脚本调用 Makefile 实现。 ├── BUILD.gn├── include │ ├── camera.h // 摄像头定义│ ├── local_net_communication.h // 设施协同次要性能定义│ ├── local_net_def.h // 设施协同打印日志│ ├── local_net_dlist.h // 设施协同设施列表定义│ ├── local_net_message.h // 设施协同传输音讯定义│ ├── local_net_udp.h // 设施协同udp协定定义│ ├── local_net_utils.h // 设施协同通用工具定义│ ├── log.h // 打印日志定义│ └── wpa_work.h // wifi设置定义└── src ├── base64.cpp // 图片转base64格局性能代码 ├── camera.cpp // 摄像头实现 ├── local_net_communication.c // 设施协同次要性能实现 ├── local_net_dlist.c // 设施协同设施列表实现 ├── local_net_message.c // 设施协同传输音讯实现 ├── local_net_udp.c // 设施协同udp协定实现 ├── local_net_utils.c // 设施协同通用工具实现 ├── main.cpp // 主程序 └── wpa_work.c // wifi设置实现上面介绍移植的大抵流程,具体细节可参考小型零碎上运行开源我的项目车牌辨认及移植 opencv 库。移植OpenCV下载源码获取源码将 OpenCV 库源码放在 OpenHarmony 根目录下的 third_party 下: ...

July 6, 2022 · 2 min · jiezi

关于openharmony:基于OpenHarmony的智能金属探测器

一、简介智能金属探测器是基于 OpenAtom  OpenHarmony(以下简称“OpenHarmony”)操作系统,利用电磁感应原理来探测四周的金属物体。该样例采纳多设施协同的形式,兼容 OpenHarmony 设施开发与利用开发,整个样例体现了 OpenHarmony 的 NAPI、eTS UI、UI 治理状态 @state 和音频播放等技术个性。本我的项目由 Geek_Lite_Board 开发板和润和 RK3568 开发板形成,Geek_Lite_Board 开发板主控芯片为 STM32F427IIH6,作为设施端检测磁场强度的变动,应用的是 OpenHarmony 3.0 LTS 版本。润和 RK3568 开发板是由润和软件研发,采纳瑞芯微 RK3568 芯片,作为利用端显示金属探测信息,应用的是 OpenHarmony 3.1 Release 版本。 二、运行成果当四周有金属凑近时,设施端蜂鸣器会收回警报并把检测信息通过 Wi-Fi 模组发送给利用端。在利用端收到检测信息之后,会通过屏幕显示检测状态并语音播报检测后果。 三、性能实现Geek_Lite_Board 开发板通过 AK8963 电子罗盘芯片获取地球磁场强度。通常地球的磁场强度是 0.4-0.6 高斯,当金属凑近电子罗盘芯片时,依据电磁感应原理,金属在磁场中的感应会引起磁场信号的变动。Geek_Lite_Board 开发板通过 Wi-Fi 与润和 RK3568 开发板实时通信,把检测到的信息实时上传。润和 RK3568 开发板作为利用端,采纳方舟开发框架(ArkUI)基于 eTS 扩大的申明式开发范式编写页面,通过 NAPI 接口接管设施端 Geek_Lite_Board 开发板的检测信息,应用 OpenHarmony 媒体子系统中的音频播放性能实现语音播报金属检测状态。磁场数据获取AK8963 一款具备高灵敏度霍尔传感器技术的三轴电子罗盘集成芯片,外部蕴含磁力传感器,能够在 x 轴、y 轴、z 轴检测地球磁场强度。●  通过Mpu_Read_Bytes()函数读芯片数据寄存器的值。 uint8_t Mpu_Read_Bytes(uint8_t const regAddr, uint8_t *pData, uint8_t len)●  获取 AK8963 的磁场原始数据。 ...

July 5, 2022 · 2 min · jiezi

关于openharmony:OpenHarmony开源大师兄新品重磅发布润和软件助力青少年开源教育

6月30日,OpenHarmony开源大师兄新品发布会在线上重磅开启,本次发布会以“凋谢、共享、共建”为主题,由江苏润和软件股份有限公司(以下简称“润和软件”)携手凋谢原子开源基金会、青少年创客教育联盟、广州市多边形部落科技有限公司、蜀鸿会联结举办。发布会聚焦开源大师兄开发板性能个性、中小学《信息科技》教育、教学软硬件资源等内容,吸引了2万➕名一线信息科技老师、社区开发者等人群观看,引领青少年开源教育进入全新阶段。 凋谢原子开源基金会副秘书长刘京娟为本次发布会发来视频致辞,她示意:“开源独特的群智化翻新合作模式,已成为寰球软件技术和产业翻新的主导模式。很快乐看到开源大师兄我的项目继续赋能社区开发者和校园创客,集众智所长,为生态教育贡献力量。” 逾越时代号召,共建开源生态,赋能开源教育 开源大师兄承载了很多一线老师的期待。一方面,其本身的设计和教程内容,通过开源的形式失去疾速迭代;另一方面,开源大师兄我的项目的开源软硬件以及开源课程也将融入更多开源的思维和精华,在信息科技教育中施展示范性的作用。凋谢原子开源基金会业务发展部部长朱其罡在致辞中示意:“开源不仅是面对学生,也面对老师、面对业界从业者。开源的不止是硬件,也包含软件、常识、课程乃至实践经验或者想法。回归到教育的实质,赋能给咱们的下一代。抛掉所有的私利,为国家的将来提供一个公共的根底平台。很快乐看到开源大师兄的我的项目,正在实际这样的思维。至多是一个迭代的源头、一个十分棒的开始。” (凋谢原子开源基金会业务发展部部长朱其罡发表演讲) 面向青少年信息科技教育,打造专属一线老师的人工智能开源板 本次发布会以新品视频短片的模式全面展现了大师兄开发板的性能、个性、亮点、利用场景等。随后,润和软件生态技术总监连志安演讲中示意:大师兄开发板专为国产化编程教育而设计,是一台可无线联网的微型计算机,可实现乏味的物联网利用及场景创作,如智慧交通、智慧安防、智慧农业、航天教育、人工智能等。将来大师兄开发板将跟OpenHarmony设施联动,让青少年在AI的编程世界里,发明有限可能,也为泛滥一线老师提供了翻新的《信息科技》优质教学产品。 (润和软件生态技术总监连志安发表演讲) 广州市多边形部落科技有限公司总经理黄庆典在发布会为观众们展现了基于大师兄开发板的一系列生动有趣的场景demo。他示意:大师兄开发板将切实落地到教学当中,提供稳固的运行零碎、敌对的开发环境和丰盛的课堂案例,让学生更好地聚焦于内容的学习,并提供中小学阶段全场景的课程设计,包含课堂学习、创客实验室、人工智能、科技比赛、智能硬件设计等 (广州市多边形部落科技有限公司总经理黄庆典发表演讲) 响应新课程标准改革,构建青少年开源教育生态体系 2022年4月,教育部印发《义务教育课程计划和课程标准(2022年版)》(以下简称“《新课标》”),将信息科技及其所占课时从综合实际流动课程中独立进去,成为义务教育新科目。而早在2019年6月,开源大师兄我的项目就已启动,并走在新课程标准改革实际的最前沿。一批一线老师及创客畛域专业人士独特提出建设齐全开源的中国创客教育生态圈。并于2019年12月发动众筹,通过网络签名成为发起人,独特奉献想法和需要,最终联结发起人达到639位。2022年6月,历经三年一直摸索与实际,最终迎来了属于一线老师的人工智能教育开源板——开源大师兄青少年开发板。 西安交通大学附属小学创客工坊负责人、青少年创客教育联盟联结创始人向金老师在发布会上示意:大师兄开发板公布后,将持续响应《新课标》并引领信息科技开源教育实际,开启丰盛的开源课程,包含根底课程及进阶课程,同时建设欠缺的生态体系,包含硬件、软件、开放平台、课程开源、公益活动、比赛平台等。 (西安交通大学附属小学创客工坊负责人向金发表演讲) 行业倒退,人才后行。润和软件通过校企单干、产学育人的多元化教育状态布局,构建了全学段教育链路,以软硬件一体化能力助力OpenHarmony人才的培训造就。此次,面向中小学信息科技教育的大师兄开发板的公布,将为青少年开源教育提供更加丰盛的硬件及生态反对。 以科技赋能OpenHarmony开源教育的同时,润和软件正全力推动OpenHarmony行业落地,助力行业数字化、智能化转型,服务产业价值晋升,为数字中国建设夯实软硬件一体化的技术底座,实现可继续倒退的、多方共赢的产业生态。

July 4, 2022 · 1 min · jiezi

关于openharmony:多模输入事件分发机制详解

一、 多模输出概述多模输出服务旨在撑持开发者面向用户提供丰盛多样的人机交互形式,在继续欠缺反对传统输出的根底上,多模输出还会施展 OpenAtom OpenHarmony(以下简称“OpenHarmony”)的分布式劣势,晋升跨设施交互体验,面向新场景、新业务提供零碎级撑持能力。多模输出 Input 部件是 OpenHarmony 零碎级输出事件治理框架;南向对接多种输出设施,汇聚多种输出事件(按键、触摸),通过归一/标准化解决后,分发给消费者(零碎服务、利用)。南向输出设施对接包含多种类型的输出设施,如:触屏、鼠标、键盘、触摸板、遥控器。二、输出事件和设施状态数据流介绍首先,咱们看下多模输出体系架构下的要害数据流程,不便深刻理解用户从发动一次交互申请,到零碎、利用给予一次交互响应的全流程。如下图所示,包含两类要害数据流:● 输出设施状态数据流:输出设施状态数据形容输出设施的状态变动及其设施属性信息,包含:设施插入、移除状态、设施惟一标识、设施名称、设施反对的输出形式等。输出设施状态数据,通过内核设施驱动上报给多模输出服务端的输出设施状态治理模块。在输出设施治理模块对全局输出设施状态进行治理和保护,同时设施状态会封装为可监听接口提供给下层业务模块用来监听系统输出外设的状态。● 交互输出事件数据流:交互输出事件数据用来形容键盘、鼠标、触摸屏输出事件;键盘事件包含:按键码、按键工夫戳、按键所属设施等信息;鼠标事件包含:鼠标 X/Y 坐标、鼠标按钮(如:鼠标左|中|右)事件等;触摸事件包含:工夫戳、触摸地位 X/Y 坐标等。输出事件数据由设施驱动上报给输出事件接管模块实现输出事件从内核空间到用户空间的转发,而后再给输出事件预处理模块实现输出事件标准化解决(按键 KeyCode 映射标准化等),最初由输出事件散发模块以零碎预设散发机制和准则实现事件的散发。参考以下数据流图,咱们能够很清晰地理解到在用户通过输出设施发动一次交互申请后,输出事件上报和散发全流程。注:数据流图箭头示意阐明 输出事件散发模块对于事件预处理阐明:1) 输出事件散发过程会优先通过输出事件拦挡模块,当有拦截器注册时,输出事件会终止持续上报,相应的拦截器会拦挡所有输出事件。该事件拦挡个性以后次要反对无障碍模式。2) 当没有拦截器注册时,输出事件会上报给输出事件监听模块,零碎级利用(如:零碎设置、桌面)通过监听输出事件,支持系统级个性(如:状态栏暗藏/隐没等)。3) 事件监听模块对事件的监听不会阻断事件持续上报;反对事件监听的同时,输出事件还会持续上报。4) 对于按键事件会上报给订阅按键散发模块解决,分发给对应的利用解决,事件散发流程完结。5) 其余触摸屏事件和鼠标事件不会通过订阅按键散发模块,会持续上报给利用窗口解决。 三、多模输出事件散发准则1. 鼠标/触摸屏事件散发准则鼠标/触摸屏坐标指向哪个指标,输出事件就分发给对应的指标。鼠标/触摸屏事件散发非凡场景阐明:1) 如没有鼠标上的按钮按下,以后鼠标指向哪个指标,鼠标输出事件就分发给坐标锁定的指标。2) 如果有鼠标上的按钮按下,以第一个按钮按下时刻鼠标坐标锁定的指标作为散发标的,直到所有的按钮都抬起。3) 触摸屏输出时,将第一个手指按下锁定的指标作为输出事件散发标的,直到所有的手指都抬起。2. 按键事件散发准则按键事件散发以以后用户可视界面中的焦点作为散发标的,以后界面焦点在哪个指标上,按键事件就分发给对应的标的。 四、OpenHarmony 3.1版本新增接口阐明为了更好的反对下层利用和零碎服务实时检测和解决输出设施热插拔状态变更事件,在 OpenHarmony 3.1 版本新增凋谢了 JS API 接口,可反对通过 JS API 监听设施的热插拔事件。同时提供通过注册回调接口的形式获取热插拔输出设施惟一标识。输出设施热插拔监听接口与 inputDevice.getDevice 接口配合即可获取热插拔设施的详细信息,包含:输出设施名称、设施反对的输出类型(键盘|触摸屏|鼠标|游戏手柄)等。1. 多模输出子系统新增接口阐明输出外设热插拔监听接口:function on(type: "change", listener: Callback<DeviceListener>): void;输出外设勾销监听接口:function off(type: “change”, listener?: CallbackDeviceListener): void;2. 新增接口接口参数阐明【DeviceListener】【ChangeType】3. 输出设施热插拔接口利用场景软键盘自适应显示:在文本编辑场景下,输入法通过监听物理键盘输入设施的热插拔操作,可自适应决策软键盘是否显示。当有物理键盘设施时,软键盘无需显示,用户输出操作通过物理键盘实现输出。当无物理键盘时,输入法弹出软键盘,用户通过软键盘实现输出操作。4. 输出设施热插拔接口应用范例对于鼠标热插拔监听接口有了初步的意识后,让咱们来具体理解下,在理论开发中如何应用输出设施热插拔接口:1) 首先导入模块import inputDevice from '@ohos.multimodalInput.inputDevice';2) 通过监听接口实现输出设施热插拔事件监听: // 输入法在软键盘显示逻辑中通过订阅物理键盘的状态:插入/插入// 依据isPhysicalkeyboardExist的值决定软键盘是否弹出...let isPhysicalkeyboardExist = false;inputDevice.on("change", (callback) => { console.log("type: " + callback.type + ", deviceId: " + callback.deviceId); inputDevice.getDevice(callback.deviceId, (ret) => { console.log("The keyboard type of the device is: " + ret); if (ret == keyboard.ALPHABETIC_KEYBOARD && callback.type == 'add') { // 热插拔设施为键盘 isPhysicalkeyboardExist = true; } else if (ret == keyboard.ALPHABETIC_KEYBOARD && callback.type == 'remove') { isPhysicalkeyboardExist = false; } });});...3)通过勾销监听接口实现输出设施热插拔事件勾销监听: ...

July 4, 2022 · 1 min · jiezi

关于openharmony:直播回顾战码先锋首期8节直播完美落幕下期敬请期待

6月28日晚19点,战“码”先锋首期第8节直播《如何多方位参加OpenHarmony开源奉献》,在OpenHarmony社群内胜利举办。作为首期直播的压轴之作,深开鸿资深OS框架开发工程师巴兴延老师在直播中深入浅出的解说了满满干货。岂但分享了率领深开鸿团队在共建16个SIG、奉献30W+行代码的OpenHarmony“战码”教训,也分享了在根技术、垂直畛域、生态拓展等多方位参加开源奉献的实际与思考,以及针对深开鸿主导的辅助工具SIG,参加的ArkUI、多媒体子系统、内核子系统SIG,重点分享奉献形式、价值与路径,心愿可能带动更多开发者多方位参加开源共建。欢送大家长按下方海报扫码,回看6月28日的战“码”先锋首期最初一节直播:战“码”先锋直播是「OpenHarmony开源贡献者打算」"战码先锋,PR 征集令"系列流动配套直播之一。「OpenHarmony开源贡献者打算」流动自公布以来,已收到1300+PR,新晋130+Contributors。为了帮忙更多老手开发者开启开源之旅,咱们联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战"码"先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好的参加开源共建。第一期共推出8节课程,现将前七节直播回顾汇总如下,精彩内容不容错过,快点开始学习吧!一、 战“码”先锋:如何成为一名优良的OpenHamrony 贡献者回顾链接:https://segmentfault.com/a/11...内容介绍:赵海鹏老师分享了他的10年技术成长之路,以及在研发DAYU200(业内首款反对OpenHarmony 3.1 Release 版本的开发板) 过程中对OpenHarmony 开源奉献的一些实际及思考,心愿能给宽广开发者一些启发。二、 战“码”先锋:参加文档奉献,开启OpenHarmony社区奉献回顾链接:https://segmentfault.com/a/11...内容介绍:Neen Yang老师从6个方面别离介绍为什么社区须要开发者文档、文档写作对集体的技能晋升、能够参加哪些模式的文档奉献、能够提交哪些类别的文档PR、OpenHarmony社区文档有哪些以及社区文档的生产流程等内容。三、 战“码”先锋:参加ArkUI,共建OpenHarmony凋敝生态回顾链接:https://segmentfault.com/a/11...内容介绍:Fei Sun老师解说了ArkUI框架子系统的次要性能、软件架构、生态演进及布局,通过具体的示例展现ArkUI的能力,让开发者逐渐理解ArkUI的工作原理,领导开发者如何由浅入深的参加到ArkUI的共建中。四、 战“码”先锋:轻松入门,成为媒体子系统贡献者回顾链接:https://segmentfault.com/a/11...内容介绍:Jelly老师解说了媒体子系统的次要性能、软件架构,以音频播放为例介绍媒体引擎的工作原理,分享开发者轻松入门参加媒体软件开发的办法,以及如何通过参加开源我的项目,晋升本人的软件设计、开发、调试等能力,由浅入深的率领大家开启乏味的媒体软件开发之旅。五、 战“码”先锋:深刻了解OpenHarmony系统启动,轻松踏上设施软件开发之旅回顾链接:https://segmentfault.com/a/11...内容介绍:Handy老师解说了OpenHarmony设施启动过程的设计理念、根底个性以及零碎根底软件开发模型。联合qemu虚拟机平台,分享如何为init扩大开发新的模块与性能,帮忙开发者们由浅入深逐步把握技术常识。六、 战“码”先锋:共建测试子系统,赋能开发者进步代码品质回顾链接:https://segmentfault.com/a/11...内容介绍:Andy老师解说了UI和单元测试框架的架构,稳定性测试工具的设计,以及兼容性测试套的测试用例示例阐明。七、 战“码”先锋:三方利用开发者如何为开源做奉献回顾链接:https://segmentfault.com/a/11...内容介绍:九弓子老师解说了对开源的奉献能够从一个Issue开始,如何让本人的成长不被计算机语言限度,以及什么是对于开源最原始的奉献等方面的内容。首期直播尽管临时告一段落,然而开发者们在逐步把握技术常识,构建零碎的常识体系的同时,也给予了咱们的讲师和直播统一好评!下期直播精彩内容正在布局当中,敬请期待!

July 4, 2022 · 1 min · jiezi

关于openharmony:今晚1900知识赋能第2期直播丨OpenHarmony智能家居项目之控制面板界面设计

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,从而更深刻的参加OpenHarmony开源社区的我的项目开发。在将近8个月的工夫里,OpenHarmony 常识赋能直播课曾经走过了5期,共28节课,23名技术大咖倾囊相授,2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。技术大咖们从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。第六期的直播均由华为HDE专家,润和软件生态技术总监连志安老师进行解说,第一节的直播中,连志安老师介绍了整个智能家居我的项目,解说了DAYU200、Hi3861智能家居套件硬件平台开发入门,相干的硬件开发平台、软件平台,大禹开发板ROM的制作与更新,智能家居设施太监ROM的制作与更新,开发者们纷纷踊跃留言互动,给出好评!而第2节直播《OpenHarmony智能家居我的项目之控制面板界面设计》中,连志安老师将介绍基于ArkUI开发控制面板利用,布局设计、相干组件开发,具体包含控制面板的布局设计以及ArkUI相干组件的应用,仍旧干货满满!长按下方海报扫码,预约直播!观看直播博得周边好礼!

June 30, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony内核对象事件之源码详解

近年来,国内开源实现跨越式倒退,并成为企业晋升创新能力、生产力、合作和透明度的要害。作为 OpenAtom OpenHarmony(以下简称“OpenHarmony”)开源我的项目共建单位之一,深开鸿以成为智能物联网操作系统领军者为战略目标,基于 OpenHarmony 聚焦智能物联网操作系统(KaihongOS)的技术研发与继续翻新。身为深开鸿 OS 内核开发师,咱们长年深耕于 OpenHarmony 的内核开发,心愿通过分享一些工作上的教训,帮忙大家把握开源常识。OpenHarmony LiteOS-M 内核是面向 IoT 畛域构建的轻量级物联网操作系统内核,具备小体积、低功耗、高性能的特点,其代码构造简略,实现了过程、线程、内存等管理机制,提供了常见工作间 IPC、软定时器等公共模块,大幅度降低了嵌入式设施开发的难度。目前 OpenHarmony 的事件提供一种工作间的 IPC,即一个或多个工作能够通过写一个或多个不同的事件来触发内核调度,让另一个期待读取事件的工作进入运行状态,从而实现工作间的同步。对于嵌入式开发工作人员和技术爱好者来说,深刻理解常见工作间 IPC,有助于学习和研发内核。本文将从数据结构和算法解析 OpenHarmony 的事件机制,带大家深刻理解内核工作间 IPC 原理。要害数据结构在解读事件的源码之前,首先理解下事件的要害的数据结构 PEVENT_CB_S: typedef struct tagEvent { UINT32 uwEventID; LOS_DL_LIST stEventList; /**< Event control block linked list */ } EVENT_CB_S, *PEVENT_CB_S;uwEventID:即标记工作的事件类型,每个bit能够标识一个事件,最多反对 31 个事件(第 25bit 保留)。stEventList:即事件管制块的双向循环链表,了解这个字段是了解事件的要害。在双向循环链表中惟一不变的节点就是头节点,而这里的 stEventList 就是头节点。当有工作期待事件但事件还没产生时,工作会被挂载到期待链表中;当事件产生时,零碎唤醒期待事件的工作,此时工作就会被剔出链表。 事件初始化上面是事件初始化源码: LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventInit(PEVENT_CB_S eventCB){ if (eventCB == NULL) { return LOS_ERRNO_EVENT_PTR_NULL; } eventCB->uwEventID = 0; LOS_ListInit(&eventCB->stEventList); OsHookCall(LOS_HOOK_TYPE_EVENT_INIT, eventCB); return LOS_OK;}PEVENT_CB_S 相当于 EVENT_CB_S *, 因而 eventCB 是指针。阐明事件管制块由工作本人创立,内核事件模块只负责保护。工作定义本人的事件管制块变量,通过 LOS_EventInit 初始化,此时没有事件产生,事件链表为空。用图来表白就是:事件写操作工作能够通过 LOS_EventWrite 来写触发一个或多个事件: ...

June 28, 2022 · 2 min · jiezi

关于openharmony:本周二晚1900战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献

OpenAtom OpenHarmony(以下简称“OpenHarmony”)工作委员会首度发动「OpenHarmony开源贡献者打算」,旨在激励开发者参加OpenHarmony开源建设、奉献代码或者帮忙社区提交和修复Bug,与OpenHarmony社区独特成长。本期「OpenHarmony开源贡献者打算」以“战码先锋,PR 征集令”为主题,联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战“码”先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好地参加开源共建。第8期直播咱们邀请到了深开鸿资深OS框架开发工程师巴兴延老师,给大家分享《如何多方位参加OpenHarmony开源奉献》。 简介本次直播分享内容包含:✓ 率领深开鸿团队在共建16个SIG、奉献30W+行代码的OpenHarmony“战码”教训;✓ 在根技术、垂直畛域、生态拓展等多方位参加开源奉献的实际与思考;✓ 针对深开鸿主导的辅助工具SIG,参加的ArkUI、多媒体子系统、内核子系统SIG,重点分享奉献形式、价值与路径,心愿带动更多开发者多方位参加开源共建。 工夫2022年6月28日(周二)19:00 讲师巴兴延,资深OS框架开发工程师;18年挪动终端开发教训OpenHarmony Contributor率领深开鸿团队参加16个SIG开源共建OpenHarmony最佳代码贡献者 参加形式长按下方海报扫码,预约直播!观看直播博得周边好礼!

June 27, 2022 · 1 min · jiezi

关于openharmony:今晚战码先锋润和赛道第2期直播丨如何参与OpenHarmony代码贡献

「OpenHarmony 开源贡献者打算 2022」战“码”先锋 PR 征集,“润和赛道”已于6月15日正式开启。套件在手、先机在握,更有润和软件的超多赋能和专属激励。超“in”的你,还不“码”上退出!首期直播具体解读了战码先锋—润和赛道流动规定,帮忙参赛者get更高奖项和更大价值。并从奉献技巧、下载与配置Git、上传代码及创立、批改Pull Requests中的谬误、赋能材料包等方面,给战码小伙伴们带来很多干货。观看直播的开发者纷纷表示播种良多。而第2期直播,持续由江苏润和软件股份有限公司生态技术专家连志安老师进行解说,内容包含轻量零碎开发入门、开发入门与进阶开发、参加代码奉献,仍旧干货满满!长按下方海报扫码,预约今晚直播!观看直播博得周边好礼!

June 27, 2022 · 1 min · jiezi

关于openharmony:直播回顾战码先锋第七期三方应用开发者如何为开源做贡献

6月23日早晨19点,战"码"先锋第7期直播 《三方利用开发者如何为开源做奉献》 ,在OpenHarmony社群内胜利举办。本期课程,由华为开发者联盟年度牛人,出名up主九弓子老师老师主讲,是「OpenHarmony开源贡献者打算」"战码先锋,PR 征集令"系列流动配套直播之一。「OpenHarmony开源贡献者打算」流动自公布以来,已收到1000+PR,新晋80+Contributors。为了帮忙更多老手开发者开启开源之旅,咱们联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战"码"先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好的参加开源共建。第七期《三方利用开发者如何为开源做奉献》直播中,九弓子老师解说了对开源的奉献能够从一个Issue开始,如何让本人的成长不被计算机语言限度,以及什么是对于开源最原始的奉献等方面的内容。欢送大家长按下方海报扫码,回看6月23日晚的战"码"先锋第七期直播课:

June 24, 2022 · 1 min · jiezi

关于openharmony:DevEco-Device-Tool-助力OpenHarmony设备开发

DevEco Device Tool 为设施开发者提供一站式的开发环境和资源获取通道,实现了从芯片模板工程创立、到开发资源筛选定制,再到疾速编码、轻小型零碎调试调优、烧录环节的全流程笼罩,帮忙开发者实现 OpenAtom OpenHarmony(以下简称“OpenHarmony”)智能硬件设施的高效开发。自2020 年 9 月公布了第一个版本 V1.0.0,到 2022 年 3 月底公布了 V3.0 Release 版本,历经 10 次迭代降级,DevEco Device Tool 为开发者次要提供了以下八大个性。 一、一体化装置导航设施开发过程中依赖的软件比拟多,而且不同的软件还存在多种版本,这在肯定水平上加大了搭建开发环境的难度,导致局部开发者因为环境装置遇到的问题被劝退。DevEco Device Tool 为开发者提供一体化装置导航性能,主动对依赖的软件进行检测,并针对缺失的软件提供举荐的软件版本。开发者只依据提醒进行勾选,即可主动下载和装置软件,进步用户的装置体验和便利性。比方,图 1 示意装置器检测到 Python 环境缺失,开发者可通过勾选实现 Python 的主动下载安装。 二、反对多种类型的开发板和芯片DevEco Device Tool 目前反对基于华为海思芯片的 Hi3516DV300、Hi3518EV300、Hi3861V100、BearPi-HM Nano 开发板,以及基于三方厂商芯片的 Imx6ull、Rtl8720、Xr872、Neptune 等,总计 24 款开发板。将来,DevEco Device Tool 还将减少对更多开发板的全面反对。如图 2 所示,在 DevEco Device Tool 工具界面,抉择“QUICK ACCESS > 主界面 > 开发板”,即可查看 DevEco Device Tool 目前反对的所有开发板和芯片。 三、集成设施开发样例为帮忙晋升开发效率,DevEco Device Tool 集成了 OpenHarmony 社区的设施开发样例,让开发者无需从零开始敲代码,可疾速上手。开发者在创立工程时依据须要抉择开发样例,即可一键疾速拉取源码。具体应用办法: 在 DevEco Device Tool 工具界面,抉择“QUICK ACCESS > DevEco Home > Home”,而后点击 Create Project 进入创立工程的向导界面。输出工程名称,在 Bundle 下拉栏中抉择须要的设施开发样例。Device Tool 会依据所选的开发样例主动填写 MCU 和开发板信息。点击 Finish,DevEco Device Tool 主动拉取开发样例实现工程创立。目前已集成了 47 个不同产品的样例,后续会有越来越多的样例逐步上架,造成规范的资源核心。开发者也能够将本人的样例上传到 OpenHarmony 社区参加样例共建哦!样例共建链接:https://gitee.com/openharmony... ...

June 23, 2022 · 2 min · jiezi

关于openharmony:直播回顾战码先锋第六期共建测试子系统赋能开发者提高代码质量

6月21日早晨19点,战"码"先锋第6期直播 《共建测试子系统,赋能开发者进步代码品质》 ,在OpenHarmony社群内胜利举办。本期课程,由华为OpenHarmony 高级测试工程师Andy老师主讲,是「OpenHarmony开源贡献者打算」"战码先锋,PR 征集令"系列流动配套直播之一。「OpenHarmony开源贡献者打算」流动自公布以来,已收到1000+PR,新晋80+Contributors。为了帮忙更多老手开发者开启开源之旅,咱们联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战"码"先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好的参加开源共建。第六期《共建测试子系统,赋能开发者进步代码品质》直播中,Andy老师解说了UI和单元测试框架的架构,稳定性测试工具的设计,以及兼容性测试套的测试用例示例阐明。欢送大家长按下方海报扫码,回看6月21日晚的战"码"先锋第六期直播课:

June 22, 2022 · 1 min · jiezi

关于openharmony:啃论文俱乐部-压缩算法团队我们是如何开展对压缩算法的学习研究

对于OpenHarmony 啃论文俱乐部压缩算法团队大家好!我是上海工程技术大学交通运输业余的一名大二学生,同时在 OpenAtom OpenHarmony(以下简称“OpenHarmony”)啃论文俱乐部中负责压缩算法团队的组长,同团队的队员别离是楚一凡-合肥师范学院、高云帆-成都信息工程大学、赵宏博-清华大学、高鸿萱-黑龙江大学、张智腾-山东大学。下文我将代表 OpenHarmony 啃论文俱乐部压缩算法团队与大家分享咱们在 OpenHarmony 啃论文俱乐部流动中的学习心得。截止至目前,咱们一共在 51CTO 、CSDN 、InfoQ、 oschina等开发技术平台输入 17 篇开发技术文章作品并取得了 10万+ 浏览量,同时作品屡次荣登 51CTO 全站 24 小时浏览排行榜榜首,除此之外,咱们团队还收到多家行业内出版社出书的邀请、成为 OpenHarmony 开源贡献者打算的“开源之星”、开发者说明星高校开发者等。大家登录https://ost.51cto.com/column/84 可查看压缩算法团队发表的开发技术成绩。 抉择正确科研路线,全身心投入学习年初的一次 OpenHarmony 常识赋能直播课让咱们结缘了 OpenHarmony 成长打算啃论文俱乐部,“啃论文(文献)—技术文章输入—开源代码提交—降职技术专家大咖”的成长门路深深吸引着我,除此之外,技术大咖领导、面向对全国开发者规模性推广技术类/领导类书籍出版、名企待业橄榄枝等福利让咱们义无反顾抉择投入到 OpenHarmony 成长打算啃论文俱乐部流动中,在经验了三个多月的学习之后,咱们团队总结了啃论文俱乐部与在校学习的区别,大家能够参考下图,理解下 OpenHarmony 成长打算啃论文俱乐部的独特魅力。 依据趣味抉择技术方向团队啃论文俱乐部细分了 12 类方向:JSON、压缩算法、内核 CMA、数据管理、软总线通信等,因为我对“压缩算法”比拟感兴趣,凭着一腔奋斗热血的我动摇地抉择了压缩算法技术团队并挺身而出负责了该团队组长。 组建压缩算法团队,实现团队高效单干初期的压缩算法团队就像一个初创公司,作为组长的我须要依据每位队员善于的技能和不同的性情调配工作并监督大家落实工作。团队的日常具体工作内容包含论文内容的翻译校对、团队风貌设计、合作思维领导、团队建设、部门间的合作、资源整顿、我的项目流程的测试复现,平台公布等。前期为放慢部门的整体的学习进度,我将团队工作次要分为三个方向,每个方向由两个队员独特负责,采纳云合作的形式实现了团队良好的沟通和单干。 增强团队沟通与团队建设因为压缩算法团队成员来自于全国各地,日常的学习沟通都是通过线上模式进行。所以维持每周群活跃度十分重要,身为组长的我必须带头促成团队文化交流、促成部门成员沟通分享,疏导大家“动起来”。另外,团队要想高效地合作,仅凭文字交换施展的效用微不足道,面对面地沟通交流才是重中之重。每周压缩算法团队都会召开一次线上视频会议同步各位队员的学习停顿、解决队员遇到的困惑、分享学习心得,并在每位成员获得提高时,其余队员都会毫不悭吝给予夸赞与激励,从而营造浓烈的学习气氛,实现团队互助、共同进步。 综述查找与索引,全场景技术地图制作压缩算法涵盖的畛域宏大,大家从网上查问到的材料大多是较为全面和系统的个别畛域的概括。为补救查阅压缩算法技术畛域覆盖面不全的状况,咱们团队制作了笼罩全畛域全场景的压缩算法技术地图模型。从目前找失去的已有的“较新”综述的根底上别离向前和向后索引,凭借着查找综述,目前咱们团队已索引并汇总了近 120 条压缩算法相干内容。综述索引是一个循序渐进的过程,随着团队一直地学习提高,素材会缓缓丰盛起来。最初,再基于时间轴或者思维导图之类的模型对其进行构建技术地图模型。 索引并汇总的压缩算法材料 制作压缩算法技术地图查找综述—开掘技术—发现技术场景——利用开源我的项目查找综述论文能够帮忙大家找到技术场景。例如,在查找压缩算法综述的过程中会遇到很多咱们不意识的业余词:如“entropy”,通过翻译咱们晓得了它是“熵”的意思。熵?什么是熵?是化学上的熵还是物理上的熵?——其实都不是,它是信息论中的专属“熵”,全名叫做“信息熵”或“香农熵”。这与压缩算法有什么关系?此刻就须要融入相应的技术场景,那技术场景从哪来?答案是:从综述论文中来。因为综述论文把整个技术畛域的衰亡、倒退与前沿钻研都进行了全方位地概括和总结,并且足够权威,所以咱们要的“熵”亦在其中: 图中红色方框圈出的别离是关键词“Entropy”和它利用的技术场景,点击左侧蓝色的文字咱们即可跳转到相应的引文:在这篇引文中,会对熵作一个具体的形容,从而技术场景的问题就迎刃而解了。在查找综述过程中,咱们同时须要对查找到的开发技术进行优劣势甄别,从而实现在不同场景的不同阶段匹配不同开发技术,通过施展各个开发技术的短处,避开它们的短处,达到内容最优化。同时,随着咱们啃的论文数量增多,开发技术的积攒和学习,咱们再从综述论文中提取到咱们想要的内容就成了一件熟能生巧、信手拈来的事件。“查找综述—开掘技术—发现技术场景——利用开源我的项目”是 OpenHarmony 啃论文俱乐部的要害学习方法。咱们团队从技术自身登程,针对技术场景和利用相干开源我的项目汇总的压缩算法畛域开发技术如图所示: 咱们对OpenHarmony啃论文俱乐部的瞻望目前咱们团队正投入压缩算法书籍撰写的工作中,同时也冀望能在更多 OpenHarmony 啃论文俱乐部的线上/线下的流动中锋芒毕露,将啃论文的先进学习办法赋能给全国高校开发者,期待在全国各地大高校掀起一波啃论文的潮流。咱们深知,集中力量办小事是亘古不变的公理,所以啃论文俱乐部须要汇聚每一位高校开发者的奇思妙想与高超开发技术,只有你对 OpenHarmony 开发技术感兴趣,啃论文俱乐部的摸索之门永远向你敞开,诚邀您的退出,与咱们共建 OpenHarmony 生态凋敝! OpenHarmony成长打算啃论文俱乐部致力于用学术研究办法摸索计算机科学,分享“啃论文(综述论文)—技术文章输入—开源代码提交—技术专家大咖”的成长门路。此为各技术部门进行技术摸索、技术输入的平台,实现常识积淀、成绩分享的阵地,已有多名学生通过此门路在各大社区平台(51CTO,CSDN等)发表文章,霸占热度榜首,多名同学收到出版社发刊邀请,名企待业橄榄枝等机会,面向对全国开发者规模性推广技术类/领导类书籍筹备中,现诚邀全国各大高校开发者一起共建OpenHarmony生态凋敝!扫码增加“OpenHarmony高校小助手”,发送“啃论文”拉您进入OpenHarmony成长打算啃论文微信群

June 21, 2022 · 1 min · jiezi

关于openharmony:本周二晚1900战码先锋第6期直播丨共建测试子系统赋能开发者提高代码质量

OpenAtom OpenHarmony(以下简称“OpenHarmony”)工作委员会首度发动「OpenHarmony开源贡献者打算」,旨在激励开发者参加OpenHarmony开源建设、奉献代码或者帮忙社区提交和修复Bug,与OpenHarmony社区独特成长。本期「OpenHarmony开源贡献者打算」以“战码先锋,PR 征集令”为主题,联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战“码”先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好地参加开源共建。第6期直播咱们邀请到了华为OpenHarmony 高级测试工程师Andy老师,给大家分享《共建测试子系统,赋能开发者进步代码品质》。 简介本次直播将分享UI和单元测试框架的架构,以及稳定性测试工具的设计。兼容性测试套的测试用例示例阐明。内容包含:● 测试子系统简介● 测试根底框架介绍● 稳定性测试工具设计● 兼容性测试套示例 工夫2022年6月21日(周二)19:00 讲师Andy,华为OpenHarmony 高级测试工程师;2009年毕业于吉林大学软件工程学院,退出华为后长期从事终端产品软件和零碎框架的测试工作。以后为OpenHarmony 零碎版本测试TSE,负责各个子系统整体测试设计工作。 参加形式长按下方海报扫码,预约直播!观看直播博得周边好礼!

June 20, 2022 · 1 min · jiezi

关于openharmony:盘点开源鸿蒙第三方组件第三方库2

OpenHarmony third_party三方库:三方库(开源库)是封装的软件性能,能够防止反复造轮子、晋升软件开发效率。OpenHarmony应用的第三方开源软件搁置gitee仓库中,并命名为third_party+第三方开源软件名称,即开源鸿蒙应用的三方库。OpenHarmony子系统会依赖一些三方库,例如:1.复用开源跨平台UI框架flutter引擎提供根底的图形渲染能力。2.libxkbcommon 键盘映射表编译器和反对库,被键盘事件依赖。(用于OpenHarmony规范系统对键盘的反对)3.应用开源quickjs引擎,提供JS语言运行时和执行上下文,提供js的解析和jsframework的加载。3.输出零碎由第三方库wayland来负责解决输出事件的。OpenHarmony仓库:https://gitee.com/organizatio... third_party_libpng libpng 是官网的 PNG 参考库。它反对简直所有PNG性能,可扩大,并且曾经过超过23年的宽泛测试。 OpenHarmony third_party_libpng 仓库:https://gitee.com/openharmony...libpng主页:http://www.libpng.org/pub/png...third_party_boost Boost是为 C++ 语言规范库提供扩大的一些 C++ 程序库的总称。Boost库是一个可移植、提供源代码的 C++ 库,作为规范库的后备,是 C++ 标准化过程的开发引擎之一,是为 C++ 语言规范库提供扩大的一些 C++ 程序库的总称。Boost库由 C++ 规范委员会库工作组成员发动,其中有些内容无望成为下一代 C++ 规范库内容。在 C++ 社区中影响甚大,是不折不扣的“准”规范库。OpenHarmony third_party_boost 仓库:https://gitee.com/openharmony...boost主页:https://www.boost.org/third_party_boringsslBoringSSL是OpenSSL的一个分支。 SSL是Secure Sockets Layer(安全套接层协定)的缩写,能够在Internet上提供秘密性传输。OpenSSL是套凋谢源代码的软件库包,实现了SSL与TLS协定。其次要库是以C语言所写成,实现了根本的加密性能。OpenSSL 是一个弱小的安全套接字层password库,囊括罕用的密钥和证书封装治理性能及SSL协定,并提供丰盛的应用程序供测试或其它目标应用。OpenSSL采纳C语言作为开发语言,这使得OpenSSL具备优良的跨平台性能,这对于宽广技术人员来说是一件十分美好的事件,能够在不同的平台应用同样相熟的货色。OpenHarmony third_party_boringssl 仓库:https://gitee.com/openharmony...github地址:https://github.com/google/bor...third_party_pcre2 PCRE (Perl Compatible Regular Expressions) 是一个用C语言编写的正则表达式函数库。OpenHarmony third_party_pcre2 仓库:https://gitee.com/openharmony...pcre主页:http://www.pcre.org/third_party_lwip lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协定栈。lwip现的重点是在放弃TCP协定次要性能的根底上缩小对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就能够运行,这使LwIP协定栈适宜在低端的嵌入式零碎中应用。lwip学术搜寻后果:https://xs.dailyheadlines.cc/...OpenHarmony third_party_lwip 仓库:https://gitee.com/openharmony...openh264主页:https://savannah.nongnu.org/p...github地址:https://github.com/lwip-tcpip...third_party_cmsis CMSIS由The Common Microcontroller Software Interface Standard(ARM Cortex™ 微控制器软件接口标准)缩写而来。应用CMSIS,能够为处理器和外设实现统一且简略的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设施的上市工夫。学术搜寻后果:https://xs.dailyheadlines.cc/...CMSIS主页:https://developer.arm.com/too...OpenHarmony third_party_cmsis 仓库:https://gitee.com/openharmony...github地址:https://github.com/ARM-softwa...third_party_glfw GLFW是一个开源的多平台库,用于桌面上的OpenGL,OpenGL ES和Vulkan开发。它提供了一个简略的 API,用于创立窗口、上下文和图面、接管输出和事件。GLFW是用C语言编写的。学术搜寻后果:https://xs.dailyheadlines.cc/...OpenHarmony third_party_glfw 仓库:https://gitee.com/openharmony...glfw主页:https://www.glfw.org/github地址:https://github.com/glfw/glfwthird_party_eudevudev 是Linux kernel 2.6系列的设施管理器。它次要的性能是治理/dev目录底下的设施节点。它同时也用来接替devfs及热插拔的性能,这意味着它要在增加/删除硬件时解决/dev目录以及所有用户空间的行为,包含加载固件及Linux 2.6.13内核。OpenHarmony third_party_eudev 仓库:https://gitee.com/openharmony...github地址:https://github.com/gentoo/eudevthird_party_bzip2 ...

June 19, 2022 · 1 min · jiezi

关于openharmony:直播回顾OpenHarmony知识赋能六期第一课OpenHarmony智能家居项目介绍

6月16日早晨19点,常识赋能第六期第一节课 《OpenHarmony智能家居我的项目介绍》 ,在OpenHarmony开发者成长打算社群内胜利举办。本次直播是“OpenHarmony开源开发者成长打算我的项目”举办的常识赋能系列直播之一,在开发者中引发了高度关注。此系列直播曾经走过了5期,共28节课,23名技术大咖倾囊相授,从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。目前已有2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。第六期直播由润和软件生态技术总监,华为HDE专家连志安老师主讲,第一节课介绍了整个智能家居我的项目,DAYU200、Hi3861智能家居套件硬件平台开发入门,包含整体的我的项目简介,相干的硬件开发平台、软件平台,大禹开发板ROM制作与更新,以及智能家居设施套件ROM制作与更新。欢送大家长按下方海报扫码,回看6月16日晚的常识赋能第六期第一节直播:OpenHarmony成长打算常识赋能系列所有直播课,以及更多OpenHarmony社群举办的直播课程,咱们都将在OpenHarmony B站官网账号“OpenHarmony开发者社区”上汇总公布。 欢送宽广开发者锁定观看、珍藏学习:space.bilibili.com/2029471800/channel/series(讲师直播课件,也可增加OpenHarmony小助手获取↓↓)

June 17, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony啃论文俱乐部盘点开源鸿蒙三方库1

OpenHarmony third_party三方库:三方开源库是封装的软件性能,能够防止反复造轮子、晋升软件开发效率。OpenHarmony应用的第三方开源软件搁置gitee仓库中,并命名为third_party+第三方开源软件名称,即开源鸿蒙应用的三方库。 OpenHarmony仓库:https://gitee.com/organizatio... 学术研究和参加开源的联合笔者开始啃论文的时候,欧sir教了一种疾速入门的办法:即在OpenHarmony官网仓库里搜寻third_part,而后用搜寻到的关键词放在学术引擎上搜寻相干论文,啃论文排汇精髓后改良这个三方库(提交代码)$$ $$笔者刚刚开始接触三方库时有一些问题:1.不分明移植具体某个开源技术到OpenHarmony中的作用。2.有一些third_party应用的开源软件波及到了笔者常识盲区,甚至没有听过。带着这些疑难笔者将学习和理解OpenHarmony 三方库third_party心得分享如下: third_party_openh264OpenH264是一个反对 H.264 编码与解码的编解码器库。 H264视频压缩算法当初无疑是所有视频压缩技术中应用最宽泛,最风行的。openh264的开源,使用者无需再对H264的细节做过多的钻研,升高了开发者应用H264的老本。open264强相干的论文:简单利用的高级综合—— H.264 视频解码器OpenHarmony third_party_openh264 仓库:https://gitee.com/openharmony...openh264主页:http://www.openh264.org/社区相干文章:OpenHarmony3.1 H264视频播放之路源代码仓库:https://github.com/cisco/open...third_party_ninjaNinja 是 Google 的一名程序员推出的重视速度的构建工具,是比Make更疾速的小型构建零碎。 Ninja绝对于Makefile这套工具更重视于编译速度。个别在 Unix/Linux 上的程序通过 make/makefile 来构建编译,而 Ninja 通过将编译工作并行组织,大大提高了构建速度。OpenHarmony third_party_ninja 仓库:https://gitee.com/openharmony...github地址为:https://ninja-build.org/社区相干文章:浅析鸿蒙中的 Gn 与 Ninjathird_party_gnGN是一种元构建零碎,生成Ninja构建文件(Ninja build files),具备如下长处: 可读性更好,更容易编写和保护。速度更快。批改GN文件后,执行ninja构建时会自动更新Ninja构建文件。更简略的模块依赖,提供了public_deps, data_deps等。提供了更好的工具查问模块依赖图谱。更好的调试反对。在GN中,只须要一条print语句就能够解决。OpenHarmony third_party_gn 仓库:https://gitee.com/openharmony...社区相干文章:鸿蒙构建零碎——gn官网FAQ翻译,以及gn官网文档分享 浅析鸿蒙中的 Gn 与 Ninjathird_party_markupsafeMarkupSafe 实现了一个对字符进行本义的文本对象,因而在 HTML 和 XML 中能够平安地应用它。具备非凡含意的字符将被替换,以便它们显示为理论字符。 OpenHarmony third_party_markupsafe 仓库:https://gitee.com/openharmony...我的项目主页:https://pypi.org/project/Mark...third_party_toybox Toybox将最常见的Linux命令行实用程序组合成一个BSD许可的可执行文件 该可执行文件简略,玲珑,疾速,符合标准,并且足够弱小,Android零碎中的很多命令,如ps,其本质都是toybox外面的性能。OpenHarmony third_party_toybox 仓库:https://gitee.com/openharmony...社区相干文章:https://ost.51cto.com/posts/9925我的项目主页 http://landley.net/toybox/ind...third_party_gstreamer GStreamer是一个十分弱小和通用的框架,用于创立流媒体应用程序。GStreamer框架的许多长处都来自它的模块化:GStreamer能够无缝地整合新的插件模块。 GStreamer最显著的用处是在构建一个播放器上。1.GStreamer曾经反对很多格局的文件了, 包含: MP3、Ogg/Vorbis、MPEG-1/2、AVI、Quicktime、 mod等等。2.从这个角度看,GStreamer更象是一个播放器。它次要的长处却是在于: 它的可插入组件可能很不便的接入到任意的管道当中。这个长处使得利用GStreamer编写一个万能的可编辑音视频应用程序成为可能。OpenHarmony third_party_gstreamer 仓库:https://gitee.com/openharmony...我的项目主页:https://gstreamer.freedesktop...强相干论文:在 GStreamer 中对多媒体应用程序进行编程third_party_ffmpeg FFmpeg是一套能够用来记录、转换数字音频、视频,并能将其转化为流的开源技术。采纳LGPL或GPL许可证。 有十分弱小的性能包含视频采集性能、视频格式转换、视频抓图、给视频加水印等.它反对最艰涩的古老格局,直到最尖端的格局。它提供了录制、转换以及流化音视频的残缺解决方案。它蕴含了 libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale 和 libswresample,能够被应用程序应用。还有 ffmpeg、ffplay 和 ffprobe,能够被终端用户用于转码和播放。OpenHarmony third_party_ffmpeg 仓库:https://gitee.com/openharmony...我的项目主页:https://ffmpeg.org/强相干论文:通用视频编码(VVC)规范的残缺的端到端开源工具链third_party_mtdev多点触控协定转换库 ...

June 17, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony开源开发者成长计划-知识赋能第六期预告OpenHarmony智能家居项目介绍

OpenAtom OpenHarmony(以下简称“OpenHarmony")开源开发者成长打算我的项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注。成长打算心愿可能更好地帮忙宽广 OpenHarmony 开发者构建零碎的常识体系,学习搭建开发环境,下载源码等常识,从而更深刻的参加OpenHarmony开源社区的我的项目开发。在将近8个月的工夫里,OpenHarmony 常识赋能直播课曾经走过了5期,共28节课,23名技术大咖倾囊相授,2000+学生开发者观看学习,受到宽广开发者的统一好评,为开发者提供了一个良好的交流学习平台。技术大咖们从开源实战我的项目总结经验,利用实在场景的利用案例分享前沿技术,疏导开发者从零参加 OpenHarmony 开源奉献,晋升代码效率,造就开发者成为开源社区的贡献者。第一期解说了 OpenHarmony 开源开发者成长打算我的项目;第二期笼罩了利用开发、设施开发、内核驱动等多个技术畛域的入门常识;第三期传授了应用 ArkUI(eTS) 做根底分布式应用;第四期分享了HDF的框架常识、基本原理;第五期涵盖了多媒体整体框架以及相干基本概念、开发流程和诸多性能的代码解说。开发者们由浅入深逐步把握技术常识,构建了零碎的学习常识体系。本次OpenHarmony第六期直播课程继续加码,重磅降级,以满满的干货助力开发者成长晋升! 直播工夫:6月16日起,每两周一次,相约周四19:00;直播讲师:连志安,润和软件生态技术总监,华为HDE专家;作为OpenHarmony龙芯架构兴趣小组Leader和OpenHarmony社区MVP,单独移植OpenHarmony到GD32、STM32、龙芯单片机,并出版书籍《物联网——嵌入式开发实战》,在过往直播中,解说的课程宽泛受到开发者喜爱与认同。课程安顿:

June 16, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-官网文档有哪些上新下篇设备开发文档上新

为了不便社区开发者更易获取 OpenAtom OpenHarmony(以下简称“OpenHarmony”)相干文档,暨上篇利用开发文档上新内容,SIG Docs 小组同步筹备了设施开发文档上新内容介绍,让您的开发工作事倍功半。 OpenHarmony设施开发新增指南文档数据管理开发指南:蕴含关系型数据库和轻量级数据存储两局部 关系型数据库(Relational Database,RDB)是一种基于关系模型来治理数据的数据库。OpenHarmony关系型数据库基于 SQLite 组件提供了一套残缺的对本地数据库进行治理的机制,对外提供了一系列的增、删、改、查等接口,也能够间接运行用户输出的 SQL 语句来满足简单的场景须要。 https://docs.openharmony.cn/p...轻量级数据存储实用于对 Key-Value 构造的数据进行存取和长久化操作。利用获取某个轻量级存储对象后,该存储对象中的数据将会被缓存在内存中,以便利用取得更快的数据存取速度。利用也能够将缓存的数据写入 XML 文件中进行长久化存储,因为文件读写将产生不可避免的系统资源开销,倡议利用缩小对长久化文件的读写频率。 https://docs.openharmony.cn/p...● USB 服务开发指南:USB 设施分为 Host 设施(主机设施)和 Device 设施(从设施)。用户可通过 Port Service 来依据理论业务把运行 OpenHarmony 的设施切换为 Host 设施或者 Device 设施。目前在 Host 模式下,反对获取 USB 设施列表,USB 设施权限治理,控制传输、批量传输的同异步数据传输等;在 Device 模式下,反对 HDC(调试)、ACM(串口)、ECM(网口)等性能的切换。 https://docs.openharmony.cn/p...● DFX 应用领导:规范零碎新增 HiDumper、HiChecker、FaultLogger、hiperf 工具应用领导- HiDumper 是 OpenHarmony 为开发、测试人员、IDE 工具提供的零碎信息获取工具,帮忙开发者剖析、定位问题。实用于规范零碎。 https://docs.openharmony.cn/p...- HiChecker 是 OpenHarmony 提供的用于检测代码谬误应用形式和运行后果的一种检测框架,可在利用和零碎开发阶段用于运行时的缺点扫描。实用于规范零碎。 https://docs.openharmony.cn/p...Faultlogger 是 OpenHarmony 为开发者提供的一个维测日志框架,可能为利用、元能力、零碎服务过程解体故障提供对立检测、日志采集、日志存储、日志上报性能,为利用解体故障提供具体的维测日志用以辅助故障定位。 https://docs.openharmony.cn/p...hiperf 是 OpenHarmony 为开发者提供的性能采样剖析工具,基于内核 perf 机制进行用户态能力的扩大,能够对指定的利用或者整个零碎进行性能采样。 https://docs.openharmony.cn/p...● 设施安全等级治理开发指南:OpenHarmony 设施安全等级治理(DSLM)模块,负责管理各种不同状态和品种的 OpenHarmony 设施的设施安全等级。在各类分布式业务中,当 OpenHarmony 对各类用户数据进行流转或解决的时候,能够调用本模块提供的接口获取相干指标设施的安全等级,并依据获取到的等级进行相应的解决。 https://docs.openharmony.cn/p...● 驱动开发指南和使用指南:包含平台驱动 DAC、I3C、MIPICSI、PIN、Regulator 的开发和使用指南,以及外设驱动 Camera、Vibrator、Light 的开发指南。对于平台驱动模块,新增章节介绍如何在 HDF 框架下开发实用的 DAC 驱动并正确应用;对于外设驱动模块,新增章节介绍如何开发合乎 HDF 架构、合乎 OpenHarmony 个性的外设驱动。 https://docs.openharmony.cn/p...● 编译构建标准及 Kconfig 领导:构建零碎编码标准与最佳实际包含代码命名、格式化和编码实际。 https://docs.openharmony.cn/p...编译构建 Kconfig 可视化配置领导。该性能基于 Kconfiglib 与 Kconfig 实现,不便用户个性化配置 OpenHarmony 产品子系统部件。 https://docs.openharmony.cn/p...● 规范零碎内核新增 Enhanced SWAP 个性介绍、关联线程组调度和 CPU 轻量级隔离,轻量和小型零碎新增 Perf 调测和 LMS 调测。ESwap(Enhanced Swap)提供了自定义新增存储分区作为内存替换分区的能力,并创立了一个内核线程为 zswapd 将 ZRAM 压缩后的匿名页加密换出到 ESwap 存储分区,从而能齐全的空出一块可用内存,以此来达到维持 Memavailable 水线的指标。 https://docs.openharmony.cn/p...关联线程组(related thread group)提供了对一组要害线程调度优化的能力,反对对要害线程组独自进行负载统计和预测,并且设置优选 CPU cluster 性能,从而达到为组内线程抉择最优 CPU 运行并且依据分组负载抉择适合的 CPU 调频点运行。 https://docs.openharmony.cn/p...CPU 轻量级隔离个性提供了依据零碎负载和用户配置来抉择适合的 CPU 进行动静隔离的能力。 https://docs.openharmony.cn/p...Perf 为性能剖析工具,依赖 PMU(Performance Monitoring Unit)对采样事件进行计数和上下文采集,统计出热点散布(hot spot)和热门路(hot path)。 https://docs.openharmony.cn/p... ...

June 16, 2022 · 2 min · jiezi

关于openharmony:直播回顾战码先锋第五期深入理解OpenHarmony系统启动轻松踏上设备软件开发之旅

6月14日早晨19点,战"码"先锋第五期直播 《深刻了解OpenHarmony系统启动,轻松踏上设施软件开发之旅》 ,在OpenHarmony社群内胜利举办。本期课程,由华为OpenHarmony部OS专家,OpenHarmony根底软件SIG/技术专家Handy老师主讲,是「OpenHarmony开源贡献者打算」"战码先锋,PR 征集令"系列流动配套直播之一。「OpenHarmony开源贡献者打算」流动自公布以来,已收到800+PR,新晋70+Contributors。为了帮忙更多老手开发者开启开源之旅,咱们联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战"码"先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好的参加开源共建。第五期《深刻了解OpenHarmony系统启动,轻松踏上设施软件开发之旅》直播中,Handy老师解说了OpenHarmony设施启动过程的设计理念、根底个性以及零碎根底软件开发模型。联合qemu虚拟机平台,分享如何为init扩大开发新的模块与性能,帮忙开发者们由浅入深逐步把握技术常识。欢送大家长按下方海报扫码,回看6月14日晚的战"码"先锋第五期直播课:

June 15, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-官网文档有哪些上新上篇应用开发文档上新

随着 OpenAtom OpenHarmony(以下简称“OpenHarmony”)零碎能力继续降级,已具备撑持简单带屏规范设施和利用开发的根底能力。相较于旧版本,OpenHarmony 不仅强化了内核,构建了业务自适应优化内核调度机制,为晦涩性能奠定根底;还加强了 HDF 驱动开发模型,凋谢丰盛 HDI 接口,为零碎提供更多硬件拜访能力。同时,图形、多媒体、分布式硬件、分布式数据管理、分布式平安等能力全面晋升。为了不便社区开发者更易获取 OpenHarmony 相干文档,SIG Docs 小组筹备了文档上新内容介绍,让您的开发工作事倍功半。本次版本更新内容概要:● 入门:利用开发疾速入门减少 eTS 低代码开发方式领导;设施开发疾速入门提供安装包形式和 IDE 形式两种不同操作方法的开发领导。● 指南:更新 Ability 开发、UI 开发、性能开发和根底能力领导等。● 工具:减少 DevEco Studio 使用指南,提供信息中心、工程治理、应用低代码开发、应用预览器预览界面 UI 等操作领导。● 参考:强化组件参考(TS)、接口参考。● 调测认证:hiperf 应用领导、Perf 应用领导、LMS 应用领导等。● 版本文档:Release Notes 版本更新内容、API 差别报告,介绍了版本配套信息、版本更新内容及相应资源。 OpenHarmony利用开发文档更新大全新增文档● UI 模块新增基于 TS 扩大的申明式开发范式(简称“申明式开发范式”)开发指南。申明式开发范式采纳 TS 语言并进行申明式 UI 语法扩大,从组件、动效和状态治理三个维度提供了 UI 绘制能力。UI 开发更靠近天然语义的编程形式,让开发者直观地形容 UI 界面,不用关怀框架如何实现 UI 绘制和渲染,实现高效开发。https://docs.openharmony.cn/p...● 新增后台任务治理开发指南。为了撑持性能、功耗诉求,零碎仅容许利用在后盾执行标准内的流动,标准外的流动默认会被挂起,当资源有余时会被回收。如果处于后盾的利用或业务,存在须要继续执行或者后续执行的业务,可基于业务类型,申请短时工作提早挂起或者长时工作防止进入挂起状态。https://docs.openharmony.cn/p...● 新增后盾代理揭示开发指南。开发者在利用开发时,能够调用后盾代理揭示类 ReminderRequest 去创立定时揭示,包含倒计时、日历、闹钟三种揭示类型。应用后盾代理揭示能力后,利用能够被解冻或退出,计时和弹出揭示的性能将被后盾零碎服务代理。https://docs.openharmony.cn/p...● 新增窗口治理开发指南,包含窗口、屏幕属性、屏幕截图。窗口治理新框架,提供更加灵便的窗口框架能力,反对全屏、分屏、窗口化状态,反对跨窗口拖拽能力。display 治理能力,反对分屏,并加强亮灭屏治理能力;反对窗口动画和成果。https://docs.openharmony.cn/p...● 新增 WebGL(Web Graphic Library,网页图形库)开发指南。WebGL 次要用于交互式渲染 2D 图形和 3D 图形。目前 OpenHarmony 中应用的 WebGL 是基于 OpenGL 裁剪的 OpenGL ES,能够在 HTML5 的 canvas 元素对象中应用,无需应用插件,反对跨不同 OS 平台。WebGL 程序是由 JavaScript 代码组成的,其中应用的 API 能够利用用户设施提供的 GPU 硬件实现图形渲染和减速。https://docs.openharmony.cn/p...● 新增 DevEco Studio(OpenHarmony)使用指南。HUAWEI DevEco Studio For OpenHarmony(以下简称 DevEco Studio)是基于 IntelliJ IDEA Community 开源版本打造,面向 OpenHarmony 全场景多设施的一站式集成开发环境(IDE),为开发者提供工程模板创立、开发、编译、调试、公布等 E2E 的 OpenHarmony 利用/服务开发。https://docs.openharmony.cn/p... ...

June 14, 2022 · 2 min · jiezi

关于openharmony:本周二晚1900战码先锋第5期直播丨深入理解OpenHarmony系统启动轻松踏上设备软件开发之旅

OpenAtom OpenHarmony(以下简称“OpenHarmony”)工作委员会首度发动「OpenHarmony开源贡献者打算」,旨在激励开发者参加OpenHarmony开源建设、奉献代码或者帮忙社区提交和修复Bug,与OpenHarmony社区独特成长。本期「OpenHarmony开源贡献者打算」以“战码先锋,PR 征集令”为主题,联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战“码”先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好地参加开源共建。本期直播咱们邀请到了华为OpenHarmony部OS专家,OpenHarmony根底软件SIG/技术专家Handy老师,给大家分享《深刻了解OpenHarmony系统启动,轻松踏上设施软件开发之旅》。 简介本次直播将分享OpenHarmony设施启动过程的设计理念、根底个性以及零碎根底软件开发模型。联合qemu虚拟机平台,分享如何为init扩大开发新的模块与性能。包含: OpenHarmony设施启动的根本过程基于qemu平台的最小零碎介绍init过程的设计理念如何基于qemu进行init的扩大模块开发" 工夫2022年6月14日(周二)19:00 讲师Handy,华为OpenHarmony部OS专家,OpenHarmony根底软件SIG/技术专家;2007毕业于华中科技大学电信系,获硕士学位。退出华为后始终从事嵌入式终端设备软件平台的开发,先后参加过路由器、挪动WiFi、手机、智慧屏等多个产品的设计和开发工作。以后为华为OpenHarmony部OS专家,负责根底软件SIG组畛域的个性设计与开发。 参加形式长按下方海报扫码,预约直播!观看直播博得周边好礼!

June 13, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony开发之系统源码编译

背景随着OpenHarmony-v3.1的公布,越来越多的开发者将眼光聚焦到OpenHarmony零碎开发上。对于首次接触OpenHarmony的开发者来说,如何进行源码编译是一个大难题,本文将具体介绍源码拉取到编译胜利的过程,心愿对开发小伙伴有所帮忙。 1 开发环境筹备咱们将应用官网举荐的Ubuntu20作为编译环境,开发板应用Hi3516DV300,因为整个编译工具链过于宏大,手动搭建编译环境非常复杂,并且容易出错,这里将应用docker搭建编译环境,能够事倍功半 2 装置Docker1.首先删除可能已有的docker$ sudo apt-get remove docker docker-engine docker.io containerd runc2.更新apt,装置根底工具$ sudo apt-get update$ sudo apt-get install ca-certificates curl gnupg lsb-release3.增加docker官网GPG key$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg4.增加稳定版docker源到apt$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null5.装置docker$ sudo apt-get update$ sudo apt-get install docker-ce docker-ce-cli containerd.io6.测试docker$ sudo docker run hello-world7.拉取docker编译环境$ sudo docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0验证docker是否装置胜利 3 拉取源码源码拉取流程如下:操作命令如下: ...

June 13, 2022 · 2 min · jiezi

关于openharmony:等个有源人|OpenHarmony-成长计划学生挑战赛报名启动

OpenAtom OpenHarmony(以下简称“OpenHarmony)开源开发者成长打算—解决方案学生挑战赛(以下简称“本大赛”或“成长打算学生挑战赛”)的使命是应用OpenHarmony技术解决联合国 17 项可继续倒退的指标中一个或多个挑战,激励学生开发者积极参与开源软件的开发与翻新,帮忙开发者在开源我的项目中成长。 什么是“联合国17项可继续倒退指标”?17项指标提出了咱们面临的寰球挑战,涵盖贫苦、不平等、气象、环境退化、凋敝以及战争与正义等方面。本大赛面向所有在校大学生,注册、认证即可报名参加成长打算学生挑战赛,若组团参赛则人数不得超过 6 人。本大赛为开发者提供 OpenHarmony 开源我的项目的实际机会及经费赞助,并有丰富奖金及荣誉激励。

June 13, 2022 · 1 min · jiezi

关于openharmony:分布式数据对象超级终端的全局变量

3月底公布的OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.1 Release版本中,新增了分布式数据对象个性。什么是分布式数据对象呢?本期就让咱们一起来理解一下~ 一、背景介绍OpenHarmony 作为分布式操作系统,反对运行在不同的终端设备上。这些终端设备通过跨端迁徙和多端协同等,能够为用户提供丰盛、晦涩的全场景体验。在这种分布式场景下,不同设施之间须要进行数据互通来实现设施间的配合。上面先看以下这个分布式场景的示例:示例:可触屏和TV的合作在 TV/PAD 上观看视频时,在可触屏设施上管制 TV/PAD 上的播放状态、进度、音量和速度等,实现多端管制。要实现下面这个示例的性能,首先必须实现设施之间的数据同步。传统形式下,设施之间的数据同步,须要开发者实现音讯解决逻辑,包含:建设通信链接、音讯收发解决、谬误重试、数据抵触解决等操作,工作量十分大。而且设施越多,调试复杂度将呈指数增长。是否有更简略的实现形式?通过剖析,咱们发现,示例中的播放状态、进度、音量和速度等其实都是变量。如果这些变量反对“全局”拜访,那么开发者跨设施拜访这些变量就能像操作本地变量一样,数据就可能主动高效、便捷地实现多端同步了。为此,本次 OpenHarmony v3.1 Release 版本新增了分布式数据对象个性。分布式数据对象为开发者在分布式应用场景下提供简略易用的 JS 接口,轻松实现多设施间同利用的数据协同,同时设施间能够监听对象的状态和数据变更。与传统形式相比,分布式数据对象大大减少了开发者的工作量。(为不便形容,后文中“分布式数据对象”也简称为“对象”。) 二、原理解析这么简略高效的分布式数据对象技术具体如何实现的呢?让咱们来一一解析~ 1.对象的数据同步分布式数据对象,最重要的性能就是对象之间的数据同步。可信组网内的设施能够在本地创立分布式数据对象,并设置 sessionID。不同设施上的分布式数据对象,通过设置雷同的 sessionID,建设对象之间的同步关系。如图 3 所示,设施 A 和设施 B 上的“分布式数据对象1”,其 sessionID 均为 session1,这两个对象建设了 session1 的同步关系。一个同步关系中,一个设施只能有一个对象退出。比方图 3 中,设施 A 的“分布式数据对象 1”曾经退出了 session1 的同步关系,所以,设施 A 的“分布式数据对象 2”就退出失败了。建设同步关系后,每个 session 有一份共享对象数据。退出了同一个 session 的对象,反对以下操作:1.读取/批改 session 中的数据。2.监听数据变更,感知其余对象对共享对象数据的批改。3.监听状态变更,感知其余对象的退出和来到。对于分布式数据对象的数据同步,值得注意的是,同步的最小单位是“属性”。比方,图 4 中对象 1 蕴含三个属性:name、age 和 parents。当其中一个属性变更时,则数据同步时只需同步此变更的属性。2.对象的生命周期接下来,咱们从生命周期的角度来全面认识一下分布式数据对象。 如图 5 所示,对象包含三种状态:未初始化、本地对象和分布式对象。这三种状态阐明如下:依据条件变动,对象在这三种状态之间会来回切换:最开始,对象处于未初始化状态。实例化之后,对象就从未初始化状态切换到本地对象状态。给对象设置 sessionID,收到对端设施对象上线告诉后,此时能够跨设施同步数据了,对象就进入了分布式对象状态。本端或远端设施下线,或者 sessionID 被革除,那么对象又切回本地对象状态。分布式对象实例和对应的内存数据库都保留在应用程序的过程空间,当应用程序退出后,分布式对象和内存数据库也随之销毁,对象间接进入未初始化状态。 三、开发束缚及案例通过下面的介绍,大家对分布式数据对象曾经有了充沛的理解了,上面就要介绍开发者们最关怀的“怎么用”的问题了。在应用分布式数据对象之前,咱们先阐明一下相干的开发束缚: 单个应用程序最多只能创立 16 个分布式数据对象实例。思考到性能和用户体验,最多不超过 3 个设施进行数据协同。思考到性能和用户体验,分布式数据对象大小限度在 500KB 以内。分布式数据对象的数据同步产生在同一个应用程序下,且同 session ID 之间。接下来,咱们通过一个简略的开发案例来解说如何应用分布式数据对象。此案例中,设施 A 和设施 B 别离创立一个蕴含 3 个属性的对象,这两个对象退出到同一个 session,建设同步关系。一个对象的属性变更会主动同步到另一个对象,从而实现“全局变量”成果。通过此案例,咱们可能把握分布式数据对象的基本操作,包含:(1). 创建对象(2). 设置 sessionID(3). 设置监听对象变更的回调(4). 监听状态变更代码示例如下: ...

June 9, 2022 · 1 min · jiezi

关于openharmony:DevEco-Studio的这些预览能力你都知道吗

在万物互联的明天,开发者在利用/服务开发过程中,须要思考利用/服务在不同设施上的运行成果。为满足这一需要,DevEco Studio 作为 HarmonyOS 和 OpenAtom OpenHarmony(简称“OpenHarmony”)利用及服务开发配套的集成开发环境(IDE),提供了弱小的预览性能,让开发者可能预览利用/服务在不同终端设备上的 UI 显示成果,不仅反对边开发边预览,还反对在预览过程中进行界面交互。上面,就带大家一起来理解 DevEco Studio 的预览性能。 一、多端设施预览OpenHarmony 作为分布式操作系统,反对运行在不同的终端设备上。为不便开发者查看利用/服务在不同终端设备上的 UI 布局和交互成果,DevEco Studio 提供多端设施预览性能。DevEco Studio 的预览器反对自定义预览设施 Profile(蕴含分辨率和语言等),通过定义不同的预览设施 Profile,让开发者能够查看利用或服务在不同终端设备上的预览成果。点击预览器右上角的按钮,能够看到所有已定义的预览设施 Profile。通过点击切换不同的预览设施 Profile,能够查看不同终端设备上的预览成果。此外,关上 Multi-profile preview 开关,还能够同时查看多个终端设备上的预览成果。 二、双向预览在利用/服务开发过程中,开发者通常须要一边开发代码,一边查看预览成果。为帮忙开发者晋升开发效率,DevEco Studio 提供双向预览性能,反对代码编辑器、预览器UI界面和组件树(Component tree)三者之间的联动。● 选中预览器UI界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示。这样,通过预览器的 UI 界面即可疾速地定位到相应代码,让代码批改更加便当。● 选中布局文件中的代码块,则在 UI 界面会高亮显示,组件树上的组件节点也会出现被选中的状态。这样,通过选中代码块就能精准地查看对应的界面组件的预览成果,让预览更加精准、高效。● 选中组件树中的组件,则对应的代码块和 UI 界面也会高亮显示。此外,如果批改了组件树中某一组件的属性,代码编辑器中对应的代码也会同步批改。三、实时预览为了让开发者能够在利用/服务开发时疾速查看预览成果,DevEco Studio 提供实时预览性能。开发者增加或删除 UI 组件、并且应用快捷键 Ctrl+S 进行保留后,预览器会立刻刷新预览后果。如果只是简略地批改了某个组件的属性,且在这个组件没有绑定变量的状况下,预览器会亚秒级同步刷新预览后果,且不会失落页面以后状态,达到极速预览的成果。(以后,临时只有 eTS 组件反对此极速预览性能。)四、动静预览动静交互也是利用/服务开发过程中十分重要的一个环节。为此,DevEco Studio 提供动静预览性能,反对开发者在预览器的 UI 界面中进行交互操作,比方点击、跳转、滑动交互等,操作体验与在真机设备上的交互体验统一。至此,DevEco Studio 的预览性能就介绍完了。须要留神的是,在应用 DevEco Studio 的预览器前,需确保 Settings > OpenHarmony SDK > Tools 中已装置 Previewer 资源,同时倡议 Settings > OpenHarmony SDK > Platforms 中的 JS SDK 更新到最新版本。 ...

June 8, 2022 · 1 min · jiezi

关于openharmony:直播回顾战码先锋第四期轻松入门成为媒体子系统贡献者

6月7日早晨19点,战"码"先锋第四期直播 《轻松入门,成为媒体子系统贡献者》 ,在OpenHarmony社群内胜利举办。本期课程,由华为终端BG软件架构设计部主任工程师Jelly老师主讲,是「OpenHarmony开源贡献者打算」"战码先锋,PR 征集令"系列流动配套直播之一。「OpenHarmony开源贡献者打算」流动自公布以来,已收到700+PR,新晋40+Contributors。为了帮忙更多老手开发者开启开源之旅,咱们联结6大OpenHarmony开源大咖,精选5大简略上手的开源代码仓(Docs、ArkUI、媒体子系统、测试子系统、启动复原),在【战"码"先锋直播间】,在线解说奉献指南,帮忙酷爱开源的你更好的参加开源共建。第四期《轻松入门,成为媒体子系统贡献者》直播中,Jelly老师解说了媒体子系统的次要性能、软件架构,以音频播放为例介绍媒体引擎的工作原理,分享开发者轻松入门参加媒体软件开发的办法,以及如何通过参加开源我的项目,晋升本人的软件设计、开发、调试等能力,由浅入深的率领大家开启乏味的媒体软件开发之旅。欢送大家长按下方海报扫码,回看6月7日晚的战"码"先锋第四期直播课:OpenHarmony战"码"先锋系列所有直播课,以及更多OpenHarmony社群举办的直播课程,咱们都将在OpenHarmony B站官网账号"OpenHarmony开发者社区"上汇总公布。 欢送宽广开发者锁定观看、珍藏学习:space.bilibili.com/2029471800/channel/series(讲师直播课件,也可增加OpenHarmony小助手获取↓↓)

June 8, 2022 · 1 min · jiezi

关于openharmony:OpenHarmony-31-Release版本关键特性解析HDI硬件设备接口介绍

HDF 驱动框架是 OpenAtom OpenHarmony(简称“OpenHarmony”)零碎硬件生态凋谢的根底,为驱动开发者提供了驱动加载、驱动服务治理和驱动音讯机制等驱动框架能力,同时还为开发者提供了标准的HDI硬件设施接口,让开发者能屏蔽南向设施差别,提供更好的硬件。本文将为大家带来 HDI 硬件设施接口的介绍。 一、HDI介绍HDI(Hardware Device Interface,硬件设施接口)是 HDF 驱动框架为开发者提供的硬件规范化描述性接口。在 OpenHarmony 分层构造中,HDI 位于 “根底零碎服务层”和“设施形象层(DAL)”之间。硬件设施通过 DAL 抽象化,并基于 IDL(Interface Description Language)接口描述语言形容后,为下层利用或服务提供了标准的硬件设施接口。HDI 反对“IPC 模式”及“直通模式”两种调用形式。其中,IPC 模式即跨过程通信模式,基于 binder 机制实现,调用端通过 Proxy 代理库调用 HDI 接口,具备良好的解耦性和安全性,是规范零碎的默认部署形式。直通模式,将 HDI 实现为共享库,调用端应用 dlopen 加载 HDI 实现库并间接调用 HDI 接口,是小型零碎的默认部署形式,同时还实用于对性能有非凡需要的规范零碎模块。HDI 硬件设施接口的长处用一句话总结就是:为硬件的接入提供了对立的实现通路。屏蔽了硬件接口的具体实现,实现系统软件与硬件的架构解耦。让开发者专一于硬件接口的应用,从而简化开发过程,晋升开发效率。 二、HDI实现通过上文的介绍,置信很多小伙伴会有疑难,HDI 接口是怎么实现的呢?上面咱们将为你介绍 IPC 模式下基于 C/S(Client-Server 客户端与服务端)构造的 HDI 接口实现。 2.1 IDL接口描述语言为不便后文的了解,咱们先简略理解一下 IDL 接口描述语言。IDL(Interface Description Language)是一类用来形容接口的语言,通过一种中立的形式来定义客户端与服务端均认可的编程接口,能够实现在二者间的跨过程通信(IPC)。跨过程通信意味着能够在一个过程拜访另一个过程的数据,或调用另一个过程的办法。通常把利用接口提供方(供调用)称为服务端,调用方称为客户端。IDL 先把须要传递的对象分解成操作系统可能了解的根本类型,而后依据接口申明编译,生成 IPC/RPC代理(Proxy)和桩(Stub)的 C/C++ 代码,从而为调用者提供统一的接口和调用形式。2.2 基于IDL语言实现HDI接口首先,应用 IDL 语法形容 HDI 接口并保留为.idl文件,而后编写 .idl 文件的编译脚本 BUILD.gn 文件,最初编译 .idl 文件即可。上面咱们将为大家演示电源子系统的 HDI 接口的实现过程。 ...

June 7, 2022 · 3 min · jiezi

关于openharmony:OpenHarmony-32-Beta1版本正式发布

5 月 31 日,凋谢原子开源基金会正式公布 OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.2 Beta1 版本。 寰球开发者可通过Gitee和镜像站点 下载残缺代码https://gitee.com/openharmony OpenHarmony 3.2 Beta1 版本新增、更新能力如下以后版本在 OpenHarmony 3.1 Release 的根底上,更新反对以下能力:轻量零碎根底能力加强● 轻量 LiteOS 零碎和 Linux 零碎 IPC 归一,构建和欠缺了过程间通信能力,包含分布式过程间通信,为分布式业务及 APP 提供本地和分布式的过程间通信能力。 规范零碎根底能力加强● 新增反对针对 Arm 64 位的零碎版本编译构建能力。● 图形反对平安截图、平安录屏;反对嵌入其余利用界面显示能力。● 窗口反对疾速切换桌面和复原利用窗口、窗口唤醒屏幕、放弃屏幕常亮/窗口调整屏幕亮度、平安图层等能力。● 方舟虚拟机反对多实例调试,以及条件断点和 watch 表达式能力。● 多模输出反对遥控器、鼠标、键盘输入设施热插拔监听能力。● 平安反对 OpenHarmony 跨设施之间的同账号互信认证能力。 规范零碎分布式能力加强● 零碎服务治理反对群组校验机制能力。 规范零碎应用程序框架能力加强● ArkUI 反对 AbilityComponent 组件将利用界面(Ability)作为控件嵌入其余利用显示;加强分栏与侧边栏组件能力,反对拖拽自动隐藏等能力。● 包治理反对沙箱利用的装置、卸载、查问,拆包工具反对 Stage 模型能力。● 元能力反对 Stage 模型反对 Worker 机制,新增 ANR、利用主线程卡死检测等 DFX 能力。 规范零碎利用能力加强● 图库反对根底动效,反对图片编辑保留能力,提供 OEM 定制开发能力。 OpenHarmony 3.2 Beta1 release notes:https://gitee.com/openharmony... ...

June 6, 2022 · 1 min · jiezi