8个版本 (5个重大变更)
0.6.1 | 2024年6月17日 |
---|---|
0.6.0 | 2021年5月19日 |
0.5.0 | 2020年5月19日 |
0.4.0 | 2019年11月15日 |
0.1.0 | 2019年9月29日 |
在网络编程类别中排名第236
每月下载量23次
用于nrf-modem-nal
96KB
1.5K SLoC
nrfxlib
Rust nrfxlib包装器,用于nRF9160
此crate由42 Technology Ltd发布。
简介
此crate为在Nordic nRF9160上运行的嵌入式应用程序提供Socket API。
nRF9160上的LTE基带目前只能通过Nordic的闭源二进制blob访问 - 一个名为 libbsd.a
的静态库,该库位于一个名为 nrfxlib
的公共Nordic git仓库中,其中还包括一些其他组件(见https://github.com/NordicPlayground/nrfxlib)。
该库提供类似于Berkeley的socket API,对常用的socket类型进行了一些扩展,以便您可以打开AT socket与基带通信AT命令,以及GNSS socket以读取GPS数据。
获取静态库
我们使用名为 nrfxlib-sys
的crate将其链接到库。此crate包括Nordic的头文件和静态库作为git子模块(来自其Github页面),并运行 bindgen
生成与相关头文件中的函数和常量相对应的Rust '头文件'。您不再需要安装 bindgen
- 它作为一个crate被拉取 - 但您需要使用Rust 1.51或更高版本。
使用此包装器
基本前提是,这个crate调用Nordic的库来完成所有工作,并向用户提供一些简单的类型(希望这能降低用户出错的可能性)。
例如,Nordic的库使用标准的C整型作为它们的套接字文件描述符。我们把这些封装在Socket
结构体中,确保当Socket
对象被丢弃时,会调用nrf_socket_close
。您也不再能将任意整数传递给read
和write
函数,而是调用Socket
类型的方法。
我们将Socket
进一步特殊化为TlsSocket
、AtSocket
、GnssSocket和
TcpSocket
,每个都有自己的工厂函数和特殊方法。对UDP数据报和其他类型套接字的支持待定——欢迎提交pull请求!
如果您想建立TLS连接,您需要首先将证书和密钥推送到由Nordic库控制的特殊闪存区域。您可以使用provision_certificates
函数来做这件事。每个证书或密钥都由您提供一个唯一的整数标签,当您创建TlsSocket
时,传递这些标签,以便堆栈知道您想使用哪些证书。您至少需要提供一个用于验证服务器端证书的根证书。您还可以选择提供客户端证书和私钥,以执行客户端认证。
当前工作情况
- 打开普通的TCP连接,包括对主机名的DNS查找
- 打开TLS连接,有或没有客户端证书
- 打开AT套接字,发送AT命令并接收响应
- 打开GNSS套接字并获取GNSS定位
- 轮询套接字
- 配置芯片以支持LTE-M、NB-IoT和/或GNSS模式。
示例
请参阅nrf9160-demo,这是一个使用该库的演示应用程序。
变更日志
未发布更改(源 | 更改)
- 无
v0.6.1(源 | 更改)
- 在
nrf_modem_init
中修复了内存所有权问题。传递给init的nrf_modem_init_params
指针必须具有静态生命周期。这始终是一个栈变量。
最初这似乎不是必需的,但大约4年前,Nordic没有更新文档,就进行了更改。
v0.6.0(源 | 更改)
- 更新到nrfxlib-sys v1.5.1。
- 需要Rust v1.51,因为我们使用新的解析器来允许bindgen作为构建依赖项
- 将FFI导出从
bsd_X
重命名为nrf_modem_X
- 实现IPC功能
- 实现库和传输堆栈
- 默认提供硬浮点库。nRF9160具有FPU,所以我们不妨使用VFP寄存器。
- 更新到最新的heapless - 不再需要
heapless::consts::Uxx
v0.5.0(源 | 更改)
- 更新到nrfxlib版本1.2.0
- 现在通过AT命令处理证书。
v0.4.0(源 | 更改)
- 添加TLS v1.3和DTLS v1.2支持
v0.3.0 (源码 | 变更)
- 为
Error
衍生clone
。 - 更新到最新的
nrxflib-sys
包。 - 更新 GPS API 的包装器。
v0.2.2 (源码 | 变更)
- 修复了 README 中的变更日志。
v0.2.1 (源码 | 变更)
- 将 PollEntry 改为持有对 socket 的 const 引用而不是可变引用。
- 使用最新的 nrfxlib-sys 包。
v0.2.0 (源码 | 变更)
- 将
modem::start()
更改为modem::on()
并删除了 AT+COPS=0 的调用。 - 添加了对
nrf_poll
的包装器,以便一次挂起多个套接字。 - 添加了
GnssSocket::get_blocking_fix()
- 添加了获取/设置系统模式的 API。
- 为 GPS 添加了 'use_case' 套接字选项。
- 使用具有 cargo-5730 工作的 git 版本的
nrfxlib-sys
。
v0.1.0 (源码)
首次发布。
许可证
根据您的选择,许可如下
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~10MB
~198K SLoC