From 89640f51a2db8f03a4482d01b8493dda1e4d763b Mon Sep 17 00:00:00 2001 From: wlxuz Date: Wed, 26 Jun 2024 13:04:57 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=AE=8C=E5=96=84wend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wlxuz Change-Id: Ifefd7f644777f8e2f3233d87677a52e424f28718 --- "Lora\346\212\200\346\234\257_png.md" | 364 +++++++++++++------------- README.md | 238 ++++------------- 2 files changed, 238 insertions(+), 364 deletions(-) diff --git "a/Lora\346\212\200\346\234\257_png.md" "b/Lora\346\212\200\346\234\257_png.md" index 112e397..3eaa30d 100644 --- "a/Lora\346\212\200\346\234\257_png.md" +++ "b/Lora\346\212\200\346\234\257_png.md" @@ -1,182 +1,182 @@ -# 1. 简要说明 -## 1.1 -## 1.2 专有名词 -|名称|翻译|介绍| -|---|---|---| -|ChirpStack Concentratord|集中器|ChirpStack Concentratord 是一个开源的 LoRa 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个(转发器)应用程序用来与网关硬件进行交互。| -|ChirpStack MQTT Forwarder|MQTT转发器|ChirpStack MQTT Forwarder 是一个开源的 Protobuf 或 JSON MQTT 数据包转发器,它可以使用 Semtech UDP 数据包转发器或 ChirpStack Concentratord 作为网关后端。它旨在安装在每个网关上。| -|ChirpStack Gateway Bridge|ChirpStack网关桥接器|ChirpStack Gateway Bridge 是一个开源的桥梁,它将从 Semtech UDP 数据包转发器或 Semtech Basic Station 接收到的消息转换为 MQTT。它可以安装在网关上,也可以部署在云端。| -|ChirpStack|ChirpStack|ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于设置私有或公共的 LoRaWAN 网络| -|MQTT Broker||MQTT Broker是MQTT协议中的消息代理服务器,负责接收客户端(MQTT Client)发布的消息,并根据客户端的订阅关系,将消息转发给相应的订阅者| - -## 1.3 参考 -[https://github.com/chirpstack/chirpstack-docs](https://github.com/chirpstack/chirpstack-docs) - -# 2. 技术架构 -以MQTT broker为中心, 可以以不同方式与网关建立连接。主要有一下几种情况: -![alt text](figures/struct_image.png) - -# 3. ChirpStack Concentratord(ChirpStack集中器) - -## 3.1 介绍 -ChirpStack Concentratord 是一个基于 Semtech 硬件抽象层的开源 LoRa(WAN) 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个应用程序用来与网关硬件进行交互。通过将硬件特定实现抽象到一个单独的守护进程中,并通过基于 ZeroMQ 的 API 暴露出来,数据包转发应用程序可以完全与网关硬件解耦。这也使得多个应用程序能够同时与网关硬件进行交互成为可能。例如,多个数据包转发器可以将数据转发到不同的 LoRaWAN 网络服务器。 -## 3.2 架构例子 -![alt text](figures/demo_image.png) - -# 4. 项目实施 - -## 4.1 配置步骤图 -![alt text](figures/Schematic_image.png) - -## 4.1 网关内进程 - -一般在烧写镜像完成后,上电就会自动启动,技术人员需要关注。 -```shell -ps aux|grep -E 'opt|leo|app|scada|redis' -# 没有顺序 -/etc/init.d/feed_watchdog.sh -/opt/scada/scada -# /opt/bridge/apps -/opt/webconfig/webconfig -/home/leo/leo_ns/leo-application-server -c /home/leo/leo_ns/leo-application-server.toml -/home/leo/leo_ns/leo-gateway-bridge -c /home/leo/leo_ns/leo-gateway-bridge.toml -/home/leo/leo_ns/leo-network-server -c /home/leo/leo_ns/leo-network-server.toml -/home/leo/leo_lora/lora_pkt_fwd -c /home/leo/leo_lora/global_conf.json -/usr/bin/redis-server 127.0.0.1:6379 -/usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf - -/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf -``` - -## 4.3 连接网关 -### 4.3.1 准备工作 - -必须安装packet-forwarder and the ChirpStack Gateway Bridge, 即: -```shell -/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml -/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json -``` -### 4.3.2 配置网关 - -1. 配置平台地址,服务IP必须指向服务器 - -1) 配置方法一 -/opt/leo_lora/global_conf.json -```toml -# Generic MQTT authentication. -[integration.mqtt.auth.generic] -# MQTT servers. -# -# Configure one or multiple MQTT server to connect to. Each item must be in -# the following format: scheme://host:port where scheme is tcp, ssl or ws. -servers=[ - "tcp://121.40.51.33:1883", -] -``` - 2) 配置方法二 -通过网页配置: https://网关IP:8080 -![https://网关IP:8080](figures/image.png) - -上下行端口默认为1700。 - -记住网关UUID,第二步使用。 - -2. 添加网关UUID -http://121.40.51.33:7777/#/organizations/1/gateways - -在页面添加网关,将网关UUID填入,服务器模板、网关模板。 -服务器模板应该确认服务器地址正确。 -网关模板确认通道匹配。 -![alt text](figures/gateway_image.png) - -### 4.3.3 验证 -尽量选择方法二,方法一由技术人员特殊情况使用。 - -1) 验证方法一: -```bash -mosquitto_sub -v -t "+/gateway/#" -``` - -2) 验证方法二: -打开 -http://121.40.51.33:7777/#/organizations/1/gateways -查看,Last seen, 如果是Never表示还未连接上,如果是 a few seconds ago表示已经连接上了。 -![Alt text](figures/image-1.png) - -## 4.4 连接Lora设备 - -### 4.4.1 准备工作 -需要知道Lora设备以下信息,一般在设备标签上有: -- DevEUI, Lora模块二维码上有 -- LoRaWAN MAC版本,1.0.2 -- 区域参数修订版本, B - -两种激活方式,二选一(目前只支持OTAA方式): - -|激活方式 |描述 |所需参数| -|---|---|---| -|OTAA|模块通过加入网络(JOIN)操作,来获得网络安全密钥| DevEUI、AppEUI、AppKey,同时设置为OTAA激活方式。| -|ABP|模块本地已经保存网络会话密钥、应用加密密钥等,可以加入指定的 LoRaWAN 服务器 |DevAddr 、 NwkSkey 、 AppSkey,同时设置为 ABP激活| - -表格中参数不需要用户填写,由服务器分配,并由网关发命令设置到Lora设备。 - -**获取相关参数, DEVEUI,APPEUI,APPKEY, 激活设备时需要。** - -通过串口工具发送命令获取: -串口配置: 19200 N 8 1 -```shell -# OTAA 所需的参数 -[15:16:44.732]发→◇AT+DEVEUI? -[15:16:44.766]收←◆+DEVEUI:a514160b00000432 - -[15:25:45.748]发→◇AT+APPEUI? -[15:25:45.782]收←◆+APPEUI:0000000000000000 - -[15:26:03.033]发→◇AT+APPKEY? -[15:26:03.069]收←◆+APPKEY:01020304050607080102030405060708 - -# 下面是ABP方式所需的参数 -[15:28:51.587]发→◇AT+DEVADDR? -[15:28:51.617]收←◆+DEVADDR:00000000 - -[15:29:34.019]发→◇AT+NWKSKEY? -[15:29:34.055]收←◆+NWKSKEY:00000000000000000000000000000000 - -[15:29:45.500]发→◇AT+APPSKEY? -[15:29:45.536]收←◆+APPSKEY:00000000000000000000000000000000 -``` - -### 4.4.1 配置设备 - -**下面按一下步骤获取相关参数:** - - - -查询是否是OTAA方式: -```bash -[15:35:23.943]发→◇AT+OTAA? -□ -[15:35:23.965]收←◆+OTAA:1 -``` -返回1表明是OTAA方式, 0表示ABP方式。 - -**OTAA方式激活**(必须执行,否则无法入网): -```shell -AT+OTAA=1 # 激活方式 -AT+JOIN=OTAA,a514160b00000432,0000000000000007,01020304050607080102030405060708 #激活命令,会触发JOIN 入网操作, 后面的值依次是DEVEUI, APPEUI,APPKEY -``` -激活之后,进入applications->Devices->选择你添加的设备->激活: -![Alt text](figures/image-2.png) - -查询并设置参数,主要关注DEVEUI,APPKEY: -```bash -# 一般参数 -[16:10:41.256]发→◇AT+CLASS? -[16:10:41.280]收←◆+CLASS:0 # 表示CLASS A - -[16:11:31.641]发→◇AT+ADR? -[16:11:31.663]收←◆+ADR:0 # ADR不使能,需要使能 - -[16:15:45.310]发→◇AT+ADR=1 -[16:15:45.519]收←◆OK -``` +# 1. 简要说明 +## 1.1 架构 +## 1.2 专有名词 +|名称|翻译|介绍| +|---|---|---| +|ChirpStack Concentratord|集中器|ChirpStack Concentratord 是一个开源的 LoRa 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个(转发器)应用程序用来与网关硬件进行交互。| +|ChirpStack MQTT Forwarder|MQTT转发器|ChirpStack MQTT Forwarder 是一个开源的 Protobuf 或 JSON MQTT 数据包转发器,它可以使用 Semtech UDP 数据包转发器或 ChirpStack Concentratord 作为网关后端。它旨在安装在每个网关上。| +|ChirpStack Gateway Bridge|ChirpStack网关桥接器|ChirpStack Gateway Bridge 是一个开源的桥梁,它将从 Semtech UDP 数据包转发器或 Semtech Basic Station 接收到的消息转换为 MQTT。它可以安装在网关上,也可以部署在云端。| +|ChirpStack|ChirpStack|ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于设置私有或公共的 LoRaWAN 网络| +|MQTT Broker|消息中转|MQTT Broker是MQTT协议中的消息代理服务器,负责接收客户端(MQTT Client)发布的消息,并根据客户端的订阅关系,将消息转发给相应的订阅者| + +## 1.3 参考 +[https://github.com/chirpstack/chirpstack-docs](https://github.com/chirpstack/chirpstack-docs) + +# 2. 技术架构 +以MQTT broker为中心, 可以以不同方式与网关建立连接。主要有一下几种情况: +![alt text](figures/struct_image.png) + +# 3. ChirpStack Concentratord(ChirpStack集中器) + +## 3.1 介绍 +ChirpStack Concentratord 是一个基于 Semtech 硬件抽象层的开源 LoRa(WAN) 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个应用程序用来与网关硬件进行交互。通过将硬件特定实现抽象到一个单独的守护进程中,并通过基于 ZeroMQ 的 API 暴露出来,数据包转发应用程序可以完全与网关硬件解耦。这也使得多个应用程序能够同时与网关硬件进行交互成为可能。例如,多个数据包转发器可以将数据转发到不同的 LoRaWAN 网络服务器。 +## 3.2 架构例子 +![alt text](figures/demo_image.png) + +# 4. 项目实施 + +## 4.1 配置步骤图 +![alt text](figures/Schematic_image.png) + +## 4.1 网关内进程 + +一般在烧写镜像完成后,上电就会自动启动,技术人员需要关注。 +```shell +ps aux|grep -E 'opt|leo|app|scada|redis' +# 没有顺序 +/etc/init.d/feed_watchdog.sh +/opt/scada/scada +# /opt/bridge/apps +/opt/webconfig/webconfig +/opt/leo_ns/leo-application-server -c /opt/leo_ns/leo-application-server.toml +/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml +/opt/leo_ns/leo-network-server -c /opt/leo_ns/leo-network-server.toml +/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json +/usr/bin/redis-server 127.0.0.1:6379 +/usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf + +/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf +``` + +## 4.3 连接网关 +### 4.3.1 准备工作 + +必须安装packet-forwarder and the ChirpStack Gateway Bridge, 即: +```shell +/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml +/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json +``` +### 4.3.2 配置网关 + +1. 配置平台地址,服务IP必须指向服务器 + +1) 配置方法一 +/opt/leo_lora/global_conf.json +```toml +# Generic MQTT authentication. +[integration.mqtt.auth.generic] +# MQTT servers. +# +# Configure one or multiple MQTT server to connect to. Each item must be in +# the following format: scheme://host:port where scheme is tcp, ssl or ws. +servers=[ + "tcp://121.40.51.33:1883", +] +``` + 2) 配置方法二 +通过网页配置: https://网关IP:8080 +![https://网关IP:8080](figures/image.png) + +上下行端口默认为1700。 + +记住网关UUID,第二步使用。 + +2. 添加网关UUID +http://121.40.51.33:7777/#/organizations/1/gateways + +在页面添加网关,将网关UUID填入,服务器模板、网关模板。 +服务器模板应该确认服务器地址正确。 +网关模板确认通道匹配。 +![alt text](figures/gateway_image.png) + +### 4.3.3 验证 +尽量选择方法二,方法一由技术人员特殊情况使用。 + +1) 验证方法一: +```bash +mosquitto_sub -v -t "+/gateway/#" +``` + +2) 验证方法二: +打开 +http://121.40.51.33:7777/#/organizations/1/gateways +查看,Last seen, 如果是Never表示还未连接上,如果是 a few seconds ago表示已经连接上了。 +![Alt text](figures/image-1.png) + +## 4.4 连接Lora设备 + +### 4.4.1 准备工作 +需要知道Lora设备以下信息,一般在设备标签上有: +- DevEUI, Lora模块二维码上有 +- LoRaWAN MAC版本,1.0.2 +- 区域参数修订版本, B + +两种激活方式,二选一(目前只支持OTAA方式): + +|激活方式 |描述 |所需参数| +|---|---|---| +|OTAA|模块通过加入网络(JOIN)操作,来获得网络安全密钥| DevEUI、AppEUI、AppKey,同时设置为OTAA激活方式。| +|ABP|模块本地已经保存网络会话密钥、应用加密密钥等,可以加入指定的 LoRaWAN 服务器 |DevAddr 、 NwkSkey 、 AppSkey,同时设置为 ABP激活| + +表格中参数不需要用户填写,由服务器分配,并由网关发命令设置到Lora设备。 + +**获取相关参数, DEVEUI,APPEUI,APPKEY, 激活设备时需要。** + +通过串口工具发送命令获取: +串口配置: 19200 N 8 1 +```shell +# OTAA 所需的参数 +[15:16:44.732]发→◇AT+DEVEUI? +[15:16:44.766]收←◆+DEVEUI:a514160b00000432 + +[15:25:45.748]发→◇AT+APPEUI? +[15:25:45.782]收←◆+APPEUI:0000000000000000 + +[15:26:03.033]发→◇AT+APPKEY? +[15:26:03.069]收←◆+APPKEY:01020304050607080102030405060708 + +# 下面是ABP方式所需的参数 +[15:28:51.587]发→◇AT+DEVADDR? +[15:28:51.617]收←◆+DEVADDR:00000000 + +[15:29:34.019]发→◇AT+NWKSKEY? +[15:29:34.055]收←◆+NWKSKEY:00000000000000000000000000000000 + +[15:29:45.500]发→◇AT+APPSKEY? +[15:29:45.536]收←◆+APPSKEY:00000000000000000000000000000000 +``` + +### 4.4.1 配置设备 + +**下面按一下步骤获取相关参数:** + + + +查询是否是OTAA方式: +```bash +[15:35:23.943]发→◇AT+OTAA? +□ +[15:35:23.965]收←◆+OTAA:1 +``` +返回1表明是OTAA方式, 0表示ABP方式。 + +**OTAA方式激活**(必须执行,否则无法入网): +```shell +AT+OTAA=1 # 激活方式 +AT+JOIN=OTAA,a514160b00000432,0000000000000007,01020304050607080102030405060708 #激活命令,会触发JOIN 入网操作, 后面的值依次是DEVEUI, APPEUI,APPKEY +``` +激活之后,进入applications->Devices->选择你添加的设备->激活: +![Alt text](figures/image-2.png) + +查询并设置参数,主要关注DEVEUI,APPKEY: +```bash +# 一般参数 +[16:10:41.256]发→◇AT+CLASS? +[16:10:41.280]收←◆+CLASS:0 # 表示CLASS A + +[16:11:31.641]发→◇AT+ADR? +[16:11:31.663]收←◆+ADR:0 # ADR不使能,需要使能 + +[16:15:45.310]发→◇AT+ADR=1 +[16:15:45.519]收←◆OK +``` diff --git a/README.md b/README.md index 3eaa30d..116d1e5 100644 --- a/README.md +++ b/README.md @@ -1,182 +1,56 @@ -# 1. 简要说明 -## 1.1 架构 -## 1.2 专有名词 -|名称|翻译|介绍| -|---|---|---| -|ChirpStack Concentratord|集中器|ChirpStack Concentratord 是一个开源的 LoRa 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个(转发器)应用程序用来与网关硬件进行交互。| -|ChirpStack MQTT Forwarder|MQTT转发器|ChirpStack MQTT Forwarder 是一个开源的 Protobuf 或 JSON MQTT 数据包转发器,它可以使用 Semtech UDP 数据包转发器或 ChirpStack Concentratord 作为网关后端。它旨在安装在每个网关上。| -|ChirpStack Gateway Bridge|ChirpStack网关桥接器|ChirpStack Gateway Bridge 是一个开源的桥梁,它将从 Semtech UDP 数据包转发器或 Semtech Basic Station 接收到的消息转换为 MQTT。它可以安装在网关上,也可以部署在云端。| -|ChirpStack|ChirpStack|ChirpStack 是一个开源的 LoRaWAN 网络服务器,可用于设置私有或公共的 LoRaWAN 网络| -|MQTT Broker|消息中转|MQTT Broker是MQTT协议中的消息代理服务器,负责接收客户端(MQTT Client)发布的消息,并根据客户端的订阅关系,将消息转发给相应的订阅者| - -## 1.3 参考 -[https://github.com/chirpstack/chirpstack-docs](https://github.com/chirpstack/chirpstack-docs) - -# 2. 技术架构 -以MQTT broker为中心, 可以以不同方式与网关建立连接。主要有一下几种情况: -![alt text](figures/struct_image.png) - -# 3. ChirpStack Concentratord(ChirpStack集中器) - -## 3.1 介绍 -ChirpStack Concentratord 是一个基于 Semtech 硬件抽象层的开源 LoRa(WAN) 集中器守护进程。它提供了一个基于 ZeroMQ 的 API,该 API 可以被一个或多个应用程序用来与网关硬件进行交互。通过将硬件特定实现抽象到一个单独的守护进程中,并通过基于 ZeroMQ 的 API 暴露出来,数据包转发应用程序可以完全与网关硬件解耦。这也使得多个应用程序能够同时与网关硬件进行交互成为可能。例如,多个数据包转发器可以将数据转发到不同的 LoRaWAN 网络服务器。 -## 3.2 架构例子 -![alt text](figures/demo_image.png) - -# 4. 项目实施 - -## 4.1 配置步骤图 -![alt text](figures/Schematic_image.png) - -## 4.1 网关内进程 - -一般在烧写镜像完成后,上电就会自动启动,技术人员需要关注。 -```shell -ps aux|grep -E 'opt|leo|app|scada|redis' -# 没有顺序 -/etc/init.d/feed_watchdog.sh -/opt/scada/scada -# /opt/bridge/apps -/opt/webconfig/webconfig -/opt/leo_ns/leo-application-server -c /opt/leo_ns/leo-application-server.toml -/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml -/opt/leo_ns/leo-network-server -c /opt/leo_ns/leo-network-server.toml -/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json -/usr/bin/redis-server 127.0.0.1:6379 -/usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf - -/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf -``` - -## 4.3 连接网关 -### 4.3.1 准备工作 - -必须安装packet-forwarder and the ChirpStack Gateway Bridge, 即: -```shell -/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml -/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json -``` -### 4.3.2 配置网关 - -1. 配置平台地址,服务IP必须指向服务器 - -1) 配置方法一 -/opt/leo_lora/global_conf.json -```toml -# Generic MQTT authentication. -[integration.mqtt.auth.generic] -# MQTT servers. -# -# Configure one or multiple MQTT server to connect to. Each item must be in -# the following format: scheme://host:port where scheme is tcp, ssl or ws. -servers=[ - "tcp://121.40.51.33:1883", -] -``` - 2) 配置方法二 -通过网页配置: https://网关IP:8080 -![https://网关IP:8080](figures/image.png) - -上下行端口默认为1700。 - -记住网关UUID,第二步使用。 - -2. 添加网关UUID -http://121.40.51.33:7777/#/organizations/1/gateways - -在页面添加网关,将网关UUID填入,服务器模板、网关模板。 -服务器模板应该确认服务器地址正确。 -网关模板确认通道匹配。 -![alt text](figures/gateway_image.png) - -### 4.3.3 验证 -尽量选择方法二,方法一由技术人员特殊情况使用。 - -1) 验证方法一: -```bash -mosquitto_sub -v -t "+/gateway/#" -``` - -2) 验证方法二: -打开 -http://121.40.51.33:7777/#/organizations/1/gateways -查看,Last seen, 如果是Never表示还未连接上,如果是 a few seconds ago表示已经连接上了。 -![Alt text](figures/image-1.png) - -## 4.4 连接Lora设备 - -### 4.4.1 准备工作 -需要知道Lora设备以下信息,一般在设备标签上有: -- DevEUI, Lora模块二维码上有 -- LoRaWAN MAC版本,1.0.2 -- 区域参数修订版本, B - -两种激活方式,二选一(目前只支持OTAA方式): - -|激活方式 |描述 |所需参数| -|---|---|---| -|OTAA|模块通过加入网络(JOIN)操作,来获得网络安全密钥| DevEUI、AppEUI、AppKey,同时设置为OTAA激活方式。| -|ABP|模块本地已经保存网络会话密钥、应用加密密钥等,可以加入指定的 LoRaWAN 服务器 |DevAddr 、 NwkSkey 、 AppSkey,同时设置为 ABP激活| - -表格中参数不需要用户填写,由服务器分配,并由网关发命令设置到Lora设备。 - -**获取相关参数, DEVEUI,APPEUI,APPKEY, 激活设备时需要。** - -通过串口工具发送命令获取: -串口配置: 19200 N 8 1 -```shell -# OTAA 所需的参数 -[15:16:44.732]发→◇AT+DEVEUI? -[15:16:44.766]收←◆+DEVEUI:a514160b00000432 - -[15:25:45.748]发→◇AT+APPEUI? -[15:25:45.782]收←◆+APPEUI:0000000000000000 - -[15:26:03.033]发→◇AT+APPKEY? -[15:26:03.069]收←◆+APPKEY:01020304050607080102030405060708 - -# 下面是ABP方式所需的参数 -[15:28:51.587]发→◇AT+DEVADDR? -[15:28:51.617]收←◆+DEVADDR:00000000 - -[15:29:34.019]发→◇AT+NWKSKEY? -[15:29:34.055]收←◆+NWKSKEY:00000000000000000000000000000000 - -[15:29:45.500]发→◇AT+APPSKEY? -[15:29:45.536]收←◆+APPSKEY:00000000000000000000000000000000 -``` - -### 4.4.1 配置设备 - -**下面按一下步骤获取相关参数:** - - - -查询是否是OTAA方式: -```bash -[15:35:23.943]发→◇AT+OTAA? -□ -[15:35:23.965]收←◆+OTAA:1 -``` -返回1表明是OTAA方式, 0表示ABP方式。 - -**OTAA方式激活**(必须执行,否则无法入网): -```shell -AT+OTAA=1 # 激活方式 -AT+JOIN=OTAA,a514160b00000432,0000000000000007,01020304050607080102030405060708 #激活命令,会触发JOIN 入网操作, 后面的值依次是DEVEUI, APPEUI,APPKEY -``` -激活之后,进入applications->Devices->选择你添加的设备->激活: -![Alt text](figures/image-2.png) - -查询并设置参数,主要关注DEVEUI,APPKEY: -```bash -# 一般参数 -[16:10:41.256]发→◇AT+CLASS? -[16:10:41.280]收←◆+CLASS:0 # 表示CLASS A - -[16:11:31.641]发→◇AT+ADR? -[16:11:31.663]收←◆+ADR:0 # ADR不使能,需要使能 - -[16:15:45.310]发→◇AT+ADR=1 -[16:15:45.519]收←◆OK -``` +# 代码下载 + +1. 第一次需要下载repo工具 + +```shell +curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o /usr/bin/repo +chmod a+x /usr/bin/repo +``` + +2. 下载代码, master表示分支 + +```shell +repo init -u https://git.leotechnology.cn/myxuan475/manifest.git -b master --no-repo-verify +repo sync -c +repo forall -c 'git lfs pull' +``` + +# 代码编译 +./build.sh --product-name=C4 + +编译结果在out/C4/product/下面。 + +# Lora技术 + +参考 [Lora架构与实施方案](Lora技术_png.md) + +# 老版本记录 +sudo ./build.sh + +sudo ./build.sh -m pack_rootfs + +sudo ./build.sh pack + +# 进入 + +sudo ./mount.sh -m ubuntu/ + +sudo make PRODUCT=G4 + +# Lora烧录 +使用Tero programer +烧写波特率: 921600 +调试波特率: 115200 + +COM通信: +波特率:19200 + +# 烧录开发板 + +GW_M1000_D00FF +密码: 20232023 + +ssh root@192.168.201.1 leo2023 + +http://192.168.110.14:8080/#/home +用户名:admin, 密码:leo2023 -- Gitee From 99e8a6baa69869ffb8011dff3be725d6512bc45b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9F=8Emeto?= Date: Wed, 10 Jul 2024 07:32:43 +0000 Subject: [PATCH 2/7] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 城meto --- "Lora\346\212\200\346\234\257_png.md" | 203 +++++++++++++++++++++----- 1 file changed, 165 insertions(+), 38 deletions(-) diff --git "a/Lora\346\212\200\346\234\257_png.md" "b/Lora\346\212\200\346\234\257_png.md" index 3eaa30d..e4d5adb 100644 --- "a/Lora\346\212\200\346\234\257_png.md" +++ "b/Lora\346\212\200\346\234\257_png.md" @@ -28,8 +28,6 @@ ChirpStack Concentratord 是一个基于 Semtech 硬件抽象层的开源 LoRa(W ## 4.1 配置步骤图 ![alt text](figures/Schematic_image.png) -## 4.1 网关内进程 - 一般在烧写镜像完成后,上电就会自动启动,技术人员需要关注。 ```shell ps aux|grep -E 'opt|leo|app|scada|redis' @@ -48,17 +46,9 @@ ps aux|grep -E 'opt|leo|app|scada|redis' /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf ``` -## 4.3 连接网关 -### 4.3.1 准备工作 - -必须安装packet-forwarder and the ChirpStack Gateway Bridge, 即: -```shell -/opt/leo_ns/leo-gateway-bridge -c /opt/leo_ns/leo-gateway-bridge.toml -/opt/leo_lora/lora_pkt_fwd -c /opt/leo_lora/global_conf.json -``` -### 4.3.2 配置网关 +## 步骤1. 配置Lora网关 -1. 配置平台地址,服务IP必须指向服务器 +主要目的是配置平台地址,服务IP必须指向服务器 1) 配置方法一 /opt/leo_lora/global_conf.json @@ -81,7 +71,9 @@ servers=[ 记住网关UUID,第二步使用。 -2. 添加网关UUID +## 步骤2. 配置NS平台,添加网关和设备、协议 +添加网关: + http://121.40.51.33:7777/#/organizations/1/gateways 在页面添加网关,将网关UUID填入,服务器模板、网关模板。 @@ -89,7 +81,9 @@ http://121.40.51.33:7777/#/organizations/1/gateways 网关模板确认通道匹配。 ![alt text](figures/gateway_image.png) -### 4.3.3 验证 +添加设备: + +### 验证 尽量选择方法二,方法一由技术人员特殊情况使用。 1) 验证方法一: @@ -103,11 +97,13 @@ http://121.40.51.33:7777/#/organizations/1/gateways 查看,Last seen, 如果是Never表示还未连接上,如果是 a few seconds ago表示已经连接上了。 ![Alt text](figures/image-1.png) -## 4.4 连接Lora设备 +## 步骤3. 调试Lora设备并添加设备 -### 4.4.1 准备工作 +### 准备工作 需要知道Lora设备以下信息,一般在设备标签上有: - DevEUI, Lora模块二维码上有 +- APPKEY, 用AT命令设置,NS平台要保持一致 +- APPEUI, 用AT命令设置 - LoRaWAN MAC版本,1.0.2 - 区域参数修订版本, B @@ -146,37 +142,168 @@ http://121.40.51.33:7777/#/organizations/1/gateways [15:29:45.536]收←◆+APPSKEY:00000000000000000000000000000000 ``` -### 4.4.1 配置设备 +### Lora设备调试 -**下面按一下步骤获取相关参数:** +要保证仪表正确连接到Lora模块 +#### 1) Lora模块入网调试 +系统一上电就会自动进行入网和时间同步, 如果没有入网成功,按下面的步骤调试。 +首先是要保证APPKEY, DEVEUI两个参数正确。 -查询是否是OTAA方式: -```bash -[15:35:23.943]发→◇AT+OTAA? -□ -[15:35:23.965]收←◆+OTAA:1 +可以使用AT+APPKEY?, AT+DEVEUI? 命令查看。也可以使用AT+SYSINFO? 查看整体信息。 + +AT+SYSINFO? +```shell +/****************************************************************************************************** +softwareVersion = DTU_LORAWAN1.1_CN470_V1.0.0 +DevEui:A5 14 17 05 00 00 00 04 +AppEui:00 00 00 00 00 00 00 07 +AppKey:01 02 03 04 05 06 07 08 01 02 03 04 05 06 07 08 +channel:0x0000 0xff00 0x0000 0x0000 0x0000 0x0000 +COM:9600, E, 8, 1 + + + +-----------Device Attributes---------- +9: attrId = 1, attrCmd = [ADDR 03 REG 00 02 CRC] + + +[14:10:05.165]收←◆ + +-----------Device Model---------- +0: modelId = 3, attrId = 1, models[<8]:--------------------- + 0: acqType = 3, regAddr = [00 00], dataOffset = 3, dataLength = 4 + + + +-----------Devices---------- +0: modelId = 3, devAddr = 61 +/****************************************************************************************************** +OK ``` -返回1表明是OTAA方式, 0表示ABP方式。 +上面的设备协议等信息初始时是没有的。 -**OTAA方式激活**(必须执行,否则无法入网): + +如果确认DEVEUI,APPKEY都是正确的,那么可以查看系统状态。 +AT+STATUS? ```shell -AT+OTAA=1 # 激活方式 -AT+JOIN=OTAA,a514160b00000432,0000000000000007,01020304050607080102030405060708 #激活命令,会触发JOIN 入网操作, 后面的值依次是DEVEUI, APPEUI,APPKEY +[14:59:45.841]发→◇AT+STATUS? +[14:59:45.862]收←◆Status = 146 +txRuning = 0, txSuccess = 1, txFailed = 0, Joining = 0, JoinSucess = 1, JoinFailed = 0,linkCheck = 0, deviceTiming = 0, deviceTime = 1, mutexState = 0, rs485SampleFirst = 0 +OK ``` -激活之后,进入applications->Devices->选择你添加的设备->激活: -![Alt text](figures/image-2.png) +可以看到当前的状态,再做进一步调试。主要查看JoinSucess, deviceTime, 这两个值应该都为1, 才算是完全正常的。 -查询并设置参数,主要关注DEVEUI,APPKEY: -```bash -# 一般参数 -[16:10:41.256]发→◇AT+CLASS? -[16:10:41.280]收←◆+CLASS:0 # 表示CLASS A +#### 2) 设置485串口参数 + +```shell +# 先查看串口参数 +[08:53:09.861]发→◇AT+COM? +[08:53:10.107]收←◆COM: 9600,E,8,1 + +# 设置 +[08:53:09.861]发→◇AT+COM=9600,E,8,1 +[08:53:10.107]收←◆COM: 9600,E,8,1 +[08:53:10.107]收←◆OK +``` + +**串口设置要重启才能生效。** + +#### 3) 调试采集命令 + +```shell +[08:53:09.861]发→◇AT+DEBUG=61,03,00,00,00,02,CRC +Serial Send:61 03 00 00 00 02 CD AB +[14:33:11.830]收←◆Serial Receive:61 03 04 3F 61 47 AE 75 B3 +[08:53:10.107]收←◆OK +``` +CRC 为CRC16校验方式, 还支持CHK。 暂时不支持其他校验方式。 + +#### 4) 测试采集数据上传 -[16:11:31.641]发→◇AT+ADR? -[16:11:31.663]收←◆+ADR:0 # ADR不使能,需要使能 +```shell +[14:11:05.832]发→◇AT+ACQ=61,03,00,00,00,02,CRC +[14:11:05.857]收←◆Serial Send:61 03 00 00 00 02 CD AB +[14:11:07.465]收←◆Serial Receive:61 03 04 3F 61 47 AE 75 B3 +App_LoRa_Proto_SendNomalData:00 01 9d f7 c9 e5 9a 00 00 00 02 09 61 03 04 3f 61 47 ae 75 b3 f7 c6 +UpLoad frame 4 being processed +Tx, Power: 17, Freq: 476300000, DR: 4, len: 36, duration 144 +MacHdr major:0 rfu:0 mtype:4 +fCtrl rfu:0 Adr:1 AdrAckReq:0 fCtrl.Bits.Ack:0 +Send Success +OK +``` +看到Send Success 表面发送成功。也可以去NS页面确认。 + +这个功能也适合给NS平台主动采集使用,命令透传。 也就是NS平台下发AT+ACQ=61,03,00,00,00,02,CRC, 需要将其做字符串转换成 `[BASE64编码https://base64.us/#](https://base64.us/#)`。通过平台下发。 + +上传的指令格式: |设备类型(2B)|时间(8B)|长度(1B)|透传指令|CRC(2B) + + +**透传方式到此为止, 下面的可以不管。如果是主动上传,需要按下面配置协议和设备** + +#### 5) 添加协议 + +基本格式: AT+ATTR=attrID,CMD[<16,[ADDR],[REG],[CRC]] -[16:15:45.310]发→◇AT+ADR=1 -[16:15:45.519]收←◆OK +attrID 自已定义,最好所有设备保持一致。方便平台区分。CMD 为协议的命令格式,地址、寄存器(或点位)、校验方式可以ADDR,REG,CRC等代替。 + +比如,配置MODBUS协议,attrId为3. +```shell +[14:11:05.832]发→◇AT+ATTR=3,ADDR,03,REG,00,02,CRC +[14:11:07.465]收←◆OK +``` + +可以,使用AT+ATTR? 或AT+SYSINFO?查看已配置的协议 +```shell +[15:16:44.361]发→◇AT+ATTR? +[15:16:44.369]收←◆Attribute: + +-----------Device Attributes---------- +9: attrId = 3, attrCmd = [ADDR 03 REG 00 02 CRC] +OK ``` +可以看到,目前总共配置了一条协议,attrId 为3, 用于协议模版关联。 + +#### 6) 添加协议模版,定义采集数据 + +基本格式: AT+MODEL=[ADD|DEL|UPDATE] modelID,attrId,{acqType,regLen,regAddr,dataOffset,dataLen} +支持增加(ADD)、更新(UPDATE)、删除模版(DEL). +modelID: 模版的ID +attrId: 关联协议ID +{}: 大括号内定义采集类型、寄存器地址、和采集完的指令中数据的偏移和长度。 +acqType 应保证所有平台统一,方便线上统一处理。 + +```shell +[15:18:38.625]发→◇AT+MODEL=ADD,3,3,{3,2,00,00,3,4} +[15:18:38.637]收←◆OK +``` +上面表示添加一个modelID 为3, attrID 为3, 采集类型为3, 寄存器地址长度为2, 寄存器地址为00 00, 数据在采集完的指令中的偏移为3, 长度为4. + +大括号可以支持多个,但不超过8个。 + + +可以查看当前有没有已添加的采集模版。 + +```shell +[15:18:38.625]发→◇AT+MODEL? +[15:18:38.637]收←◆ + +-----------Device Model---------- +0: modelId = 3, attrId = 3, models[<8]:--------------------- + 0: acqType = 3, regAddr = [00 00], dataOffset = 3, dataLength = 4 +OK +``` + +#### 7) 添加设备 + +基本格式: AT+DEVICE=devIndex,modelId,devAddr[<8] + +devIndex: 设备索引,0~31, 因此最多支持32个设备。如果索引所在的设备已经存在,就替换原来的。 +modelID: 协议模板的ID, 关联具体的协议。 +devAddr 设备地址, 输16进制值。比如电表设备地址97, 因输入61 十六进制,地址长度不超过8字节。 + +#### 8) 设置采集周期,也是上传周期 + +AT+DUTY=300 单位秒。 \ No newline at end of file -- Gitee From 822cdeceac8d7ac921ce1f887fe558ab51db3377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9F=8Emeto?= Date: Wed, 10 Jul 2024 07:59:12 +0000 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=B8=AD?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 城meto --- "Lora\346\212\200\346\234\257_png.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Lora\346\212\200\346\234\257_png.md" "b/Lora\346\212\200\346\234\257_png.md" index e4d5adb..eeff11c 100644 --- "a/Lora\346\212\200\346\234\257_png.md" +++ "b/Lora\346\212\200\346\234\257_png.md" @@ -236,7 +236,7 @@ OK ``` 看到Send Success 表面发送成功。也可以去NS页面确认。 -这个功能也适合给NS平台主动采集使用,命令透传。 也就是NS平台下发AT+ACQ=61,03,00,00,00,02,CRC, 需要将其做字符串转换成 `[BASE64编码https://base64.us/#](https://base64.us/#)`。通过平台下发。 +这个功能也适合给NS平台主动采集使用,命令透传。 也就是NS平台下发AT+ACQ=61,03,00,00,00,02,CRC, 需要将其做字符串转换成 [BASE64编码https://base64.us/#](https://base64.us/#)。通过平台下发。 上传的指令格式: |设备类型(2B)|时间(8B)|长度(1B)|透传指令|CRC(2B) -- Gitee From 79b7c08f53ef478efb6ef25e7faf9dba1d05db7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9F=8Emeto?= Date: Thu, 11 Jul 2024 02:03:00 +0000 Subject: [PATCH 4/7] =?UTF-8?q?=E8=B4=A6=E6=88=B7=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 城meto --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 116d1e5..dddd933 100644 --- a/README.md +++ b/README.md @@ -54,3 +54,5 @@ ssh root@192.168.201.1 leo2023 http://192.168.110.14:8080/#/home 用户名:admin, 密码:leo2023 + +雷优物联网平台:https://app.leotechnology.cn, leiyou leiyou2024 -- Gitee From d15cf77af2b4d653cf7c7b21d83b52f1909d3062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9F=8Emeto?= Date: Thu, 25 Jul 2024 08:35:56 +0000 Subject: [PATCH 5/7] update README.md. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 城meto --- README.md | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dddd933..ee68a75 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,13 @@ # 代码下载 +1. 准备工作 +- 需要Ubuntu 18.0以上的系统。 +- 安装了Python3.8.0以上的版本 -1. 第一次需要下载repo工具 +2. 第一次下载代码需要下载repo工具 ```shell -curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o /usr/bin/repo -chmod a+x /usr/bin/repo +sudo curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o /usr/bin/repo +sudo chmod a+x /usr/bin/repo ``` 2. 下载代码, master表示分支 @@ -15,10 +18,36 @@ repo sync -c repo forall -c 'git lfs pull' ``` +3. 编译环境 +```shell +buildtools/env_setup.py +``` + # 代码编译 -./build.sh --product-name=C4 -编译结果在out/C4/product/下面。 +```shell +./build.sh --product-name=DTU +# 如果没有修改CMakeLists.txt 可以加上 --skip-cmake +``` +整个编译过程包括cmake, make + +参数: +--product-name: 产品名称,即vendor下面的目录 +--jobs: 多少线程同时编译,默认4 +--skip-cmake: 跳过cmake过程 + +编译结果在out/DTU/ 下面。 + +# 提交代码 +单个仓用git提交即可。每次修改应该对应一个issue, 在gitee仓库创建issue,会有一个issue编号, +提交代码时关联issue即可。 + +例如,创建了issue https://gitee.com/leo-iot/DTU/issues/IAEUJN +```shell +git commit -a -s -m "#IAEUJN 移植CMake编译" +git push origin_iot develop +``` +在解决问题过程中,可以把过程写到issue评论区,方便大家共同参考。 # Lora技术 @@ -55,4 +84,5 @@ ssh root@192.168.201.1 leo2023 http://192.168.110.14:8080/#/home 用户名:admin, 密码:leo2023 + 雷优物联网平台:https://app.leotechnology.cn, leiyou leiyou2024 -- Gitee From 7d5074073c0e95ddbb344a1cf7408c63c2b2e52d Mon Sep 17 00:00:00 2001 From: wlxuz Date: Fri, 9 Aug 2024 11:42:51 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wlxuz Change-Id: I98ce3fdc132d484a89b12b5390a7928e7520dbea --- .clang-format | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.clang-format b/.clang-format index aed95cb..0b1cf18 100644 --- a/.clang-format +++ b/.clang-format @@ -5,20 +5,20 @@ BasedOnStyle: LLVM # 访问说明符(public、private等)的偏移 AccessModifierOffset: -2 # 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行) -AlignAfterOpenBracket: Align +AlignAfterOpenBracket: DontAlign # 连续赋值时,对齐所有等号 AlignConsecutiveAssignments: false # 连续声明时,对齐所有声明的变量名 AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right +AlignEscapedNewlines: Left # 左对齐逃脱换行(使用反斜杠换行)的反斜杠 -#AlignEscapedNewlinesLeft: true +AlignEscapedNewlinesLeft: true # 水平对齐二元和三元表达式的操作数 AlignOperands: true # 对齐连续的尾随的注释 -AlignTrailingComments: true +AlignTrailingComments: false # 允许函数声明的所有参数在放在下一行 AllowAllParametersOfDeclarationOnNextLine: false @@ -45,7 +45,7 @@ AlwaysBreakTemplateDeclarations: false # false表示函数实参要么都在同一行,要么都各自一行 BinPackArguments: true # false表示所有形参要么都在同一行,要么都各自一行 -BinPackParameters: false +BinPackParameters: true # 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效 BraceWrapping: # class定义后面 @@ -71,7 +71,7 @@ BraceWrapping: # else之前 BeforeElse: false # 缩进大括号 - IndentBraces: false + IndentBraces: true SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true @@ -122,7 +122,7 @@ IncludeCategories: # 缩进case标签 IndentCaseLabels: true -IndentPPDirectives: AfterHash +#IndentPPDirectives: AfterHash # 缩进宽度 IndentWidth: 4 # 函数返回类型换行时,缩进函数声明或函数定义的函数名 @@ -163,7 +163,7 @@ PointerAlignment: Left # 允许重新排版注释 ReflowComments: true # 允许排序#include -SortIncludes: true +SortIncludes: false # 在C风格类型转换后添加空格 SpaceAfterCStyleCast: false -- Gitee From 9530a2777c101775ad3228c1df586de169b1e3fd Mon Sep 17 00:00:00 2001 From: wlxuz Date: Fri, 9 Aug 2024 13:00:10 +0800 Subject: [PATCH 7/7] =?UTF-8?q?#IAFVRP=20clang-format=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wlxuz Change-Id: I092c038e9715dfd0123a28a13168d28169bff730 --- .clang-format | 259 ++++++++++++-------------------------------------- 1 file changed, 63 insertions(+), 196 deletions(-) diff --git a/.clang-format b/.clang-format index 0b1cf18..dc61d49 100644 --- a/.clang-format +++ b/.clang-format @@ -1,196 +1,63 @@ - -# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto -Language: Cpp -BasedOnStyle: LLVM -# 访问说明符(public、private等)的偏移 -AccessModifierOffset: -2 -# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行) -AlignAfterOpenBracket: DontAlign -# 连续赋值时,对齐所有等号 -AlignConsecutiveAssignments: false -# 连续声明时,对齐所有声明的变量名 -AlignConsecutiveDeclarations: false - -AlignEscapedNewlines: Left - -# 左对齐逃脱换行(使用反斜杠换行)的反斜杠 -AlignEscapedNewlinesLeft: true -# 水平对齐二元和三元表达式的操作数 -AlignOperands: true -# 对齐连续的尾随的注释 -AlignTrailingComments: false - -# 允许函数声明的所有参数在放在下一行 -AllowAllParametersOfDeclarationOnNextLine: false -# 允许短的块放在同一行 -AllowShortBlocksOnASingleLine: true -# 允许短的case标签放在同一行 -AllowShortCaseLabelsOnASingleLine: false -# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All -AllowShortFunctionsOnASingleLine: Empty -# 允许短的if语句保持在同一行 -AllowShortIfStatementsOnASingleLine: false -# 允许短的循环保持在同一行 -AllowShortLoopsOnASingleLine: false - -# 总是在定义返回类型后换行(deprecated) -AlwaysBreakAfterDefinitionReturnType: None -# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), -# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义) -AlwaysBreakAfterReturnType: None -# 总是在多行string字面量前换行 -AlwaysBreakBeforeMultilineStrings: false -# 总是在template声明后换行 -AlwaysBreakTemplateDeclarations: false -# false表示函数实参要么都在同一行,要么都各自一行 -BinPackArguments: true -# false表示所有形参要么都在同一行,要么都各自一行 -BinPackParameters: true -# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效 -BraceWrapping: - # class定义后面 - AfterClass: false - # 控制语句后面 - AfterControlStatement: false - # enum定义后面 - AfterEnum: false - # 函数定义后面 - AfterFunction: true - # 命名空间定义后面 - AfterNamespace: false - # ObjC定义后面 - AfterObjCDeclaration: false - # struct定义后面 - AfterStruct: false - # union定义后面 - AfterUnion: false - - AfterExternBlock: false - # catch之前 - BeforeCatch: false - # else之前 - BeforeElse: false - # 缩进大括号 - IndentBraces: true - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true - -# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行) -BreakBeforeBinaryOperators: None -# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似), -# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似), -# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom -# 注:这里认为语句块也属于函数 -BreakBeforeBraces: Custom -# 在三元运算符前换行 -BreakBeforeTernaryOperators: false - -# 在构造函数的初始化列表的逗号前换行 -BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon -# 每行字符的限制,0表示没有限制 -ColumnLimit: 120 -# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -# 构造函数的初始化列表要么都在同一行,要么都各自一行 -ConstructorInitializerAllOnOneLineOrOnePerLine: false -# 构造函数的初始化列表的缩进宽度 -ConstructorInitializerIndentWidth: 4 -# 延续的行的缩进宽度 -ContinuationIndentWidth: 4 -# 去除C++11的列表初始化的大括号{后和}前的空格 -Cpp11BracedListStyle: true -# 继承最常用的指针和引用的对齐方式 -DerivePointerAlignment: false -# 关闭格式化 -DisableFormat: false -# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental) -ExperimentalAutoDetectBinPacking: false -# 需要被解读为foreach循环而不是函数调用的宏 -ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] -# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前), -# 可以定义负数优先级从而保证某些#include永远在最前面 -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -# 缩进case标签 -IndentCaseLabels: true - -#IndentPPDirectives: AfterHash -# 缩进宽度 -IndentWidth: 4 -# 函数返回类型换行时,缩进函数声明或函数定义的函数名 -IndentWrappedFunctionNames: false -# 保留在块开始处的空行 -KeepEmptyLinesAtTheStartOfBlocks: false -# 开始一个块的宏的正则表达式 -MacroBlockBegin: '' -# 结束一个块的宏的正则表达式 -MacroBlockEnd: '' -# 连续空行的最大数量 -MaxEmptyLinesToKeep: 1 -# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All -NamespaceIndentation: Inner -# 使用ObjC块时缩进宽度 -ObjCBlockIndentWidth: 4 -# 在ObjC的@property后添加一个空格 -ObjCSpaceAfterProperty: false -# 在ObjC的protocol列表前添加一个空格 -ObjCSpaceBeforeProtocolList: true - - -# 在call(后对函数调用换行的penalty -PenaltyBreakBeforeFirstCallParameter: 19 -# 在一个注释中引入换行的penalty -PenaltyBreakComment: 300 -# 第一次在<<前换行的penalty -PenaltyBreakFirstLessLess: 120 -# 在一个字符串字面量中引入换行的penalty -PenaltyBreakString: 1000 -# 对于每个在行字符数限制之外的字符的penalty -PenaltyExcessCharacter: 1000000 -# 将函数的返回类型放到它自己的行的penalty -PenaltyReturnTypeOnItsOwnLine: 60 - -# 指针和引用的对齐: Left, Right, Middle -PointerAlignment: Left -# 允许重新排版注释 -ReflowComments: true -# 允许排序#include -SortIncludes: false - -# 在C风格类型转换后添加空格 -SpaceAfterCStyleCast: false - -SpaceAfterTemplateKeyword: true - -# 在赋值运算符之前添加空格 -SpaceBeforeAssignmentOperators: true -# 开圆括号之前添加一个空格: Never, ControlStatements, Always -SpaceBeforeParens: ControlStatements -# 在空的圆括号中添加空格 -SpaceInEmptyParentheses: false -# 在尾随的评论前添加的空格数(只适用于//) -SpacesBeforeTrailingComments: 2 -# 在尖括号的<后和>前添加空格 -SpacesInAngles: false -# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格 -SpacesInContainerLiterals: false -# 在C风格类型转换的括号中添加空格 -SpacesInCStyleCastParentheses: false -# 在圆括号的(后和)前添加空格 -SpacesInParentheses: false -# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响 -SpacesInSquareBrackets: false -# 标准: Cpp03, Cpp11, Auto -Standard: Auto -# tab宽度 -TabWidth: 4 -# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always -UseTab: Never \ No newline at end of file +--- +Language: Cpp +BasedOnStyle: LLVM + +AccessModifierOffset: -4 + +AlignAfterOpenBracket: DontAlign +AlignEscapedNewlinesLeft: true +# AlignOperands: true +AlignTrailingComments: true + +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false + +AlwaysBreakAfterDefinitionReturnType: false +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false + +# BinPackArguments: false +# BinPackParameters: true + +BreakBeforeBinaryOperators: false +BreakBeforeBraces: Custom +BraceWrapping: { AfterFunction: true } +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: true + +ColumnLimit: 80 + +ContinuationIndentWidth: 4 + +DerivePointerAlignment: false #XXX +DisableFormat: false +ExperimentalAutoDetectBinPacking: false #XXX +ForEachMacros: [ LIST_FOREACH, SIMPLEQ_FOREACH, CIRCLEQ_FOREACH, TAILQ_FOREACH, TAILQ_FOREACH_REVERSE, HT_FOREACH ] + +IndentCaseLabels: false +IndentFunctionDeclarationAfterType: false +IndentWidth: 4 +IndentWrappedFunctionNames: false + +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 2 + +PointerAlignment: Right #XXX + +# SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +Standard: Cpp03 +TabWidth: 4 +UseTab: Always +SortIncludes: false +... -- Gitee