热门开源项目OpenHarmony

目录

1.概述

1.1.开源项目的意义

1.2.开源项目对软件行业的促进作用

1.3.小结

2.OpenHarmony

2.1.技术架构

2.2.分布式软总线

2.2.1.架构

2.2.2.代码介绍

2.2.2.1.代码目录

2.2.2.2.说明

2.2.2.3.发现组网和传输 

2.2.2.3.1.发现

2.2.2.3.2.组网

2.2.2.3.3.传输

3.开源地址


1.概述

开源项目(Open Source Project)指的是源代码公开、用户可以自由使用、修改和分发的软件项目。开源项目通常以某种开源许可证发布,确保了源代码的自由使用和传播。常见的开源许可证包括GNU通用公共许可证(GPL)、MIT许可证、Apache许可证等。

1.1.开源项目的意义

1. 促进创新:开源项目的源代码是公开的,任何人都可以审视、理解并在其基础上进行创新和改进。鼓励了技术的快速迭代和发展。

2. 协同合作:来自世界各地的开发者可以共同协作,贡献他们的技能和知识,从而推进项目的发展。

3. 教育资源:开源代码是学习编程和软件开发的绝佳资源。学生和新手可以通过阅读和分析这些代码来提高自己的编程技巧。

4. 透明性和信任:由于源代码是公开的,用户可以检查代码中是否存在恶意行为、漏洞或其他问题,从而增加了对软件的信任度。

5. 降低成本:开源软件通常是免费的,可以显著降低企业和个人的使用成本,同时避免各种专利和版权纠纷。

1.2.开源项目对软件行业的促进作用

1. 加速技术进步:开源促进了技术的共享和交流,加速了技术进步。一些重要的技术领域,例如操作系统(如Linux)、数据库系统(如MySQL)、编程语言(如Python)、大数据平台(如Hadoop)等,都有大量成功的开源项目。

2. 增强市场竞争:开源项目降低了进入门槛,让更多的小公司和初创企业能够进入市场。推动了整体行业的进步和创新。

3. 标准化:许多开源项目成为了行业标准,帮助建立和推广了技术标准,减少了不同系统之间的兼容性问题。

4. 社区支持和生态系统:强大的开源社区提供了广泛的支持和资源,如文档、论坛和教程,为开发人员提供了丰富的学习材料和解决问题的途径。

5. 促进开发者成长:参与开源项目可以帮助开发者积累实际经验,提升技能,增加曝光和就业机会。

6. 推动开源商业模式:虽然开源软件本身是免费的,但推动了包括技术支持、咨询服务、定制开发及托管服务等在内的新商业模式。

1.3.小结

开源项目不仅贡献了大量高质量的软件资源,而且还通过打造开放、共享的生态系统,为整个软件行业带来了巨大的活力和创新动力。

2.OpenHarmony

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。

基于OpenHarmony的HarmonyOS总装机量已经超过了8亿。HarmonyOS原生应用已超过4000。预计在6月21号的华为开发者大会上,会发布HarmonyOS NEXT版,不再兼容安卓应用。

另一个具有代表性的OpenHarmony发行版KaihongOS,是面向全场景的万物智联技术底座,在OpenHarmony基础上技术创新和系统能力增强,深开鸿打造丰富KaihongOS产品矩阵,助力千行百业数智化转型,引领行业变革,构建万物智联新时代。是由原华为终端BG软件部总裁(现任深开鸿CEO)王成录牵头打造。

OpenHarmony在GitCode的地址:GitCode - 全球开发者的开源社区,开源代码托管平台

2.1.技术架构

OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示:

详细介绍可参考第2章的GitCode链接。 

2.2.分布式软总线

这里我们选择分布式软总线来进行说明。

分布式软总线在GitCode的链接:GitCode - 全球开发者的开源社区,开源代码托管平台

在现实生活中,设备之间的通信方式多种多样,比如WIFI和蓝牙等,这些不同的通信方式在使用上存在较大差异,易导致各种通信问题。此外,还面临设备间通信链路融合共享以及冲突无法解决等挑战。分布式软总线通过实现近场设备间统一的分布式通信管理能力,提供一种不区分具体链路的设备发现、连接、组网和传输的通用能力。其主要功能如下:

1. 发现连接:提供基于WIFI、蓝牙等多种通信方式的设备发现和连接能力。
2. 设备组网:提供统一的设备组网和拓扑管理能力,确保在数据传输前已经掌握设备间的连接信息。
3. 数据传输:支持消息和字节数据传输的专用通道。

通过使用分布式软总线提供的API,业务方可以在设备间实现高速通信,无需关注通信的具体细节,从而能够更高效地进行业务平台的部署与运行。

2.2.1.架构

2.2.2.代码介绍

2.2.2.1.代码目录
/foundation/communication/dsoftbus
├── interfaces            # 接口代码
├── core                  # 核心代码
│   ├── common            # 通用代码
│   ├── adapter           # 适配层代码
│   ├── authentication    # 认证代码
│   ├── bus_center        # 组网代码
│   ├── connection        # 连接代码
│   ├── discovery         # 发现代码
│   ├── transmission      # 传输代码
│   └── frame             # 框架代码
├── sdk                   # 运行业务进程代码
│   ├── bus_center        # 组网代码
│   ├── discovery         # 发现代码
│   ├── transmission      # 传输代码
│   └── frame             # 框架代码
└── components            # 依赖组件代码
2.2.2.2.说明

约束:

组网设备需在同一局域网中。
组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。

须知:

使用跨设备通信时,必须添加权限ohos.permission.DISTRIBUTED_DATASYNC,该权限类型为 dangerous 。

设备主动发现手机时,手机需打开超级终端的允许被“附近设备”发现开关(设置-超级终端-我的设备-允许被发现-附近设备),才能被设备发现。

2.2.2.3.发现组网和传输 
2.2.2.3.1.发现
  • 发布流程

a.上层应用需要对外发布自身能力时,调用服务发布接口发布自身能力。

// 发布回调
typedef struct {void (*OnPublishSuccess)(int publishId); //发布成功时回调void (*OnPublishFail)(int publishId, PublishFailReason reason);//发布失败时回调
} IPublishCallback;// 发布服务
int PublishService(const char *pkgName, const PublishInfo *info, const IPublishCallback *cb);

b.上层应用不再需要对外发布自身能力时,调用UnpublishService接口注销服务。

// 注销服务
int UnPublishService(const char *pkgName, int publishId);
  • 发现流程

a.上层应用需要发现特定能力设备时,调用发现接口启动发现。

// 发现回调
typedef struct {void (*OnDeviceFound)(const DeviceInfo *device); //发现设备回调void (*OnDiscoverFailed)(int subscribeId, DiscoveryFailReason failReason); //启动发现失败回调void (*OnDiscoverySuccess)(int subscribeId); //启动发现成功回调
} IDiscoveryCallback;// 发现服务
int StartDiscovery(const char *pkgName, const SubscribeInfo *info, const IDiscoveryCallback *cb);

b.当软总线发现到设备时,通过回调接口通知业务所发现的设备信息。

c.上层应用不再需要发现时,调用StopDiscovery接口停止设备发现。

// 停止服务
int StopDiscovery(const char *pkgName, int subscribeId);
2.2.2.3.2.组网

a.发起组网请求,携带组网连接地址信息,并且提供组网执行结果回调函数。

// 组网连接地址
typedef struct {ConnectionAddrType type;union {struct BrAddr {char brMac[BT_MAC_LEN];} br;struct BleAddr {char bleMac[BT_MAC_LEN];} ble;struct IpAddr {char ip[IP_STR_MAX_LEN];int port;} ip;} info;
} ConnectionAddr;// 组网连接地址类型
typedef enum {CONNECTION_ADDR_WLAN = 0,CONNECTION_ADDR_BR,CONNECTION_ADDR_BLE,CONNECTION_ADDR_ETH,CONNECTION_ADDR_MAX
} ConnectionAddrType;// 组网请求执行结果回调
typedef void (*OnJoinLNNResult)(ConnectionAddr *addr, const char *networkId, int32_t retCode);// 发起组网请求
int32_t JoinLNN(ConnectionAddr *target, OnJoinLNNResult cb);

b.等待组网结果,JoinLNN()返回成功表示软总线接受了组网请求,组网结果通过回调函数通知业务;组网回调函数中addr参数内容和JoinLNN()的入参互相匹配;retCode如果为0,表示组网成功,此时networkId为有效值,后续传输、退网等接口均需使用该参数;retCode如果不为0,表示组网失败,此时networkId为无效值。

c.使用传输相关接口进行数据传输。

d.发送退网请求,携带组网成功后返回的networkId,并且提供退网执行结果回调。

// 退网执行结果回调
typedef void (*OnLeaveLNNResult)(const char *networkId, int32_t retCode);// 退网请求
int32_t LeaveLNN(const char *networkId, OnLeaveLNNResult cb);

e.等待退网完成,OnLeaveLNNResult()的networkId和退网请求接口中的networkId互相匹配;retCode为0表示退网成功,否则退网失败。退网成功后,networkId变为无效值,后续不应该被继续使用。

f.使用节点(即设备)注册和注销接口,监听网络中节点状态变化等事件。

// 事件掩码
#define EVENT_NODE_STATE_ONLINE 0x1
#define EVENT_NODE_STATE_OFFLINE 0x02
#define EVENT_NODE_STATE_INFO_CHANGED 0x04
#define EVENT_NODE_STATE_MASK 0x07// 节点信息
typedef struct {char networkId[NETWORK_ID_BUF_LEN];char deviceName[DEVICE_NAME_BUF_LEN];uint16_t deviceTypeId;
} NodeBasicInfo;// 节点状态事件回调
typedef struct {uint32_t events; // 组网事件掩码void (*onNodeOnline)(NodeBasicInfo *info);   // 节点上线事件回调void (*onNodeOffline)(NodeBasicInfo *info);  // 节点下线事件回调void (*onNodeBasicInfoChanged)(NodeBasicInfoType type, NodeBasicInfo *info); // 节点信息变化事件回调
} INodeStateCb;//  注册节点状态事件回调
int32_t RegNodeDeviceStateCb(INodeStateCb *callback);// 注销节点状态事件回调
int32_t UnregNodeDeviceStateCb(INodeStateCb *callback);
2.2.2.3.3.传输

a.创建会话服务,并设置会话相关回调,用户可在回调中处理打开/关闭和消息接收事件。

// 会话管理回调
typedef struct {int (*OnSessionOpened)(int sessionId, int result);void (*OnSessionClosed)(int sessionId);void (*OnBytesReceived)(int sessionId, const void *data, unsigned int dataLen);void (*OnMessageReceived)(int sessionId, const void *data, unsigned int dataLen);
} ISessionListener;// 创建会话服务
int CreateSessionServer(const char *pkgName, const char *sessionName, const ISessionListener* listener);

b.创建会话 ,用于收发数据。

// 创建会话
int OpenSession(const char *mySessionName, const char *peerSessionName, const char *peerDeviceId, const char *groupId, const SessionAttribute* attr);

 c.通过sessionId向对端设备发送数据。

// 发送字节数据
int SendBytes(int sessionId, const void *data, unsigned int len);
// 发送消息数据
int SendMessage(int sessionId, const void *data, unsigned int len);

 d.通过sessionId关闭会话。

// 关闭会话
void CloseSession(int sessionId);

 e.删除会话服务。

// 删除会话服务
int RemoveSessionServer(const char *pkgName, const char *sessionName);

3.开源地址

OpenHarmony-GitCode:GitCode - 全球开发者的开源社区,开源代码托管平台

OpenHarmony-OpenAtom Foundation:OpenAtom OpenHarmony

分布式软总线-GitCode:GitCode - 全球开发者的开源社区,开源代码托管平台 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1451421.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1:手动测试迈向自动化——手机web应用的自动化测试工具

引言: 在当今移动互联网时代,手机web应用已经成为人们生活中不可或缺的一部分。为了保证手机web应用的质量和稳定性,自动化测试工具变得十分重要。本文将介绍手机web应用自动化测试工具的选择和使用,提供一份超详细且规范的指南&a…

160. 相交链表 (Swift版本)

题目描述 最简单直接的解法 遍历 headA 的所有节点, 看 headB 中是否有相交的节点 /*** Definition for singly-linked list.* public class ListNode {* public var val: Int* public var next: ListNode?* public init(_ val: Int) {* self.val val*…

(三十)Flask之wtforms库【剖析源码上篇】

每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入…

Nacos启动报错

报错日志: Caused by: java.lang.NullPointerException at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2983) at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1873) at com.mysql.jdbc.Mysql…

为Windows鼠标增加个性功能的软件

一、简介 1、是一款专为Windows操作系统设计的桌面增强工具,它允许用户通过简单的鼠标操作来管理和控制窗口,从而提高工作效率。根据搜索结果,for Windows提供了多种功能,如在屏幕的四个角落添加快捷键、窗口置顶、窗口最小化、快…

python中的turtle

turtle个别指令 初始箭头默认指向为东(右) 往前(右)三个格:turtle.forward(3) 往后(左)三个格:turtle.backward(3) 往左转90度:turtle.left(90) 往右转90度&#xf…

干G货,性能测试基本方法和原则,

一、性能测试关键点 评估性能指标——线程tps(可架构给) 吞吐量qps(可架构给) 错误率(可架构给) 平均响应时间(可架构给)模拟线上数据量了解接口有没有缓存,有缓存的需要…

人工智能内容标签和披露:指南、样本和最佳实践

AI Content Labeling and Disclosure: Guidelines, Samples & Best Practices 【前言】当我们谈论人工智能生成的内容时,话题很快转向了透明度和信任的重要性。随着人工智能继续塑造数字景观,对内容标签和披露的明确指导方针的需求变得至关重要。无…

【数据质量人人有责】数据质量是什么?

引言:数据是当代企业的核心资源之一,对于支持业务决策、优化运营和增强竞争力至关重要。然而,仅仅拥有数据并不意味着能够充分发挥其潜在价值。只有先确保数据质量,才能保证后续数据分析和挖掘的正确的结果对管理和业务有价值&…

C++ 06 之 c++增强

c06c增强.cpp #include <iostream>using namespace std; // 1、全局变量检测增强&#xff1a;可以检测出重定义 (c语言不会报错&#xff0c;但是C会报错) //int a; //int a 10;// 2、函数检测增强: 函数返回值类型、形参类型、实参个数 int sum(int a, int b) {return …

MBTI:探索你的性格类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

vmmare虚拟机没有被分配ip地址问题;NAT模式下一直变化问题

打开任务管理器–>服务–>找到与VM和server相关的服务 发现NAT和DHCP服务被关闭了 尝试启动&#xff0c;报错 尝试一 虚拟网络编辑器点击还原默认设置 尝试二 可以了 ip变化 更改租用时长

短视频矩阵系统/源码搭建---拆解热门视频功能开发上线

短视频矩阵系统/源码搭建 一、短视频矩阵系统源码开发需要用到以下技术&#xff1a; 1.前端技术&#xff1a;HTML、CSS、JavaScript、Vue.js等前端框架。 2.后端技术&#xff1a;Java、Python、PHP等后端语言及相关框架&#xff0c;如Spring Boot、Django、Laravel等。 3.移…

macOS Sequoia 将 Mac 生产力与智能化提升至全新高度

本文转载自 官方新闻&#xff1a;https://www.apple.com.cn/newsroom/2024/06/macos-sequoia-takes-productivity-and-intelligence-on-mac-to-new-heights/ 文章目录 1、借助 iPhone 镜像 直接在 Mac 上无线使用 iPhone2、Safari 浏览器迎来重大更新3、升级的游戏体验与备受瞩…

Eclipse 单步调试的时候报错,通过一些设置处理下。

先帖张图&#xff1a; 勾选不提醒。 1、通过Java Compiler&#xff0c;进行设置: 然后设置以后&#xff0c;进入调试&#xff0c;还是 报上面的错&#xff0c;有的小伙伴说是先去勾选&#xff0c;然后确认。 然后再选择&#xff0c;确认。 2、设置Jdk为自己安装的。 设置成功后…

爆肝三天,制作属于自己的地图——DAY3(地图数据发布详细教程)

4&#xff0c;重建顶层。 倾斜摄影数据的组织方式&#xff0c;一个 Data 目录下的 Tile 可能会成千上万&#xff0c;如果不使用重建顶层&#xff0c;那么输出的3DTiles的包围盒会非常非常多&#xff0c;增加加载时长。重建顶层&#xff0c;程序会根据瓦片的空间结构关系采用八…

PyQt5学习系列之新项目创建并使用widget

PyQt5学习系列之新项目创建并使用widget 前言报错新建项目程序完整程序总结 前言 新建项目&#xff0c;再使用ui转py&#xff0c;无论怎么样都打不开py文件&#xff0c;直接报错。 报错 Connected to pydev debugger (build 233.11799.298)新建项目程序 # Press ShiftF10 to…

javaWeb项目-ssm+vue中国风音乐推介网站功能介绍

本项目源码&#xff1a;java-ssmvue中国风音乐推介网站源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、…

仰望U8三大黑科技,重新定义智能汽车

文 | 智能相对论 作者 | 雷歌 是时候重新定义中国的“智能汽车”了。 在仰望U8出来以前&#xff0c;普通人对知道的智能汽车的配置认识&#xff0c;智能汽车是智能驾驶智能座舱&#xff0c;硬件上大概是这几样&#xff1a;毫米波雷达激光雷达智驾芯片。 仰望U8出来以后&…

NetSuite ERP项目中非批次物料—批次物料数据转换流程

最近在刚结束的项目上也再次碰到了非批次物料转换为批次物料的操作&#xff0c;因此也想把我们在处理数据流程中的心得写出来&#xff0c;以便复盘与总结&#xff0c;也分享给各位。 整体的步骤我们可分为准备工作&#xff0c;调整工作以及检查工作&#xff1a; 准备工作 主…