lora_pkt_fwd.c代码解读

本文详细解读了 lora_pkt_fwd.c 的源码,包括主要的全局变量定义、网络配置、线程功能、GPS 配置、统计信息收集以及主循环任务。代码涉及线程创建、互斥锁、信号处理等多线程编程概念,以及 LoRa 网关与服务器之间的数据包转发机制。
摘要由CSDN通过智能技术生成

◯由浅入深Linux下pthread线程库介绍.pdf

◯lora_pkt_fwd.c

前1000+主体

1160 MAIN FUNCTION

1173-1178 5个线程

1180-1185 network socket creation

1187-1211 可以去改,都是全局变量

1223-1230 timestamp:时间

1232-1251 用getopt这个函数去取hc命令行,进行解析,不同的后缀有不同的处理方法。(什么意思?编译怎么编译的来着?makefile决定我们怎么)

后面开始就是线程,协议的细节,利用不同的线程实现,看一下线程的功能。

    THREAD1

2187 THREAD2

2926 THREAD3

3015 THREAD4

     THREAD5

Packet forwarder 是运行在 LoRa 网关上的一个程序,用来将集中器收到的 RF 数据包 通过 IP/UDP 链路转发给服务器,以及将 服务器发出的数据包通过 RF 发出来。它也可以发射 GPS 同步信标帧,用于协调网络内的所有节点。

Packet forwarder 顾名思义,就是一个网关与Server间的包转发器。

c++的基础数据类型如下:

名称

字节长度

取值范围

常用定义

Boolean

1

False,true

bool

char

1

-128~127

char

Signed char

1

-128~127

int8

unsigned char

1

0~255

uint8

Short(signed short)

2

-215~215-1

int16

Unsigned short

2

0~216-1

uint16

Int(signed int)

4

-231~231-1

int32

Unsigned int

4

0~232-1

uint32

Long(signed long)

4

-231~231-1

int64

Long long

8

-263~263-1

int64

Unsigned long

4

0~232-1

uint64

float

4

-3.4*10-38~3.4*1038

float

double

8

-1.7*10308~1.7*10308

double

61-67:私有宏

63:定义了一个名叫ARRAY_SIZE(a)的宏,代表(sizeof(a) / sizeof((a)[0])),其中sizeof是求字节数的,sizeof数组名是数组占用的字节数,sizeof(a[0])是第一个元素的字节数,总数除以一个的大小,就是个数。

64:定义了一个名叫STRINGIFY(x)的宏,代表#x,(用于调试程序使用的,#运算符把跟在后面的参数转化成一个字符串)具体用法及如何转换,不是很明白

65:定义了一个名叫STR(x)的宏,代表宏STRINGIFY(x)

68-118:私有常数

#ifndef 版本字符串/#define版本字符串 "不明确的"/#endif 防止该头文件被重复引用

74:定义了一个宏DEFAULT_SERVER(默认服务器),代表127.0.0.1(主机名也受支持)

75:定义了一个宏DEFAULT_PORT_UP(默认端口向上),代表1780

76:定义了一个宏DEFAULT_PORT_DW(默认端口关闭),代表1782

77:定义了一个宏DEFAULT_KEEPALIVE(默认值保持不变),代表5(下游保活分组默认时间间隔)不是很懂

78:定义了一个宏DEFAULT_STAT,代表30(统计数据的默认时间间隔)

79:定义了一个宏PUSH_TIMEOUT_MS(推送超时毫秒),代表100

80:定义了一个宏PULL_TIMEOUT_MS(拉超时毫秒),代表200

81:定义了一个宏GPS_REF_MAX_AGE(全球定位系统参考最大年龄),代表30(在认为最新全球定位系统同步不可用之前,全球定位系统丢失的最大允许延迟时间(秒))

82:定义了一个宏FETCH_SLEEP_MS(获取睡眠时间,以毫秒),代表10(当提取没有返回分组时,ms的nb等待)

83:定义了一个宏BEACON_POLL_MS(信标轮询时间,以毫秒),代表50(信标发射状态轮询之间的时间(毫秒))

85:定义了一个宏PROTOCOL_VERSION(协议版本号),代表2(v1.3)

87:定义了一个宏XERR_INIT_AVG(初始平均值),代表128(测量值的nb XTAL校正值作为初始值进行平均)

88:定义了一个宏XERR_FILT_COEF (不清楚),代表256(低通XTAL误差跟踪系数)

90:定义了一个宏PKT_PUSH_DATA (数据包推送数据),代表0

91:定义了一个宏PKT_PUSH_ACK (数据包推送确认),代表1

92:定义了一个宏PKT_PULL_DATA (分组拉数据),代表2

93:定义了一个宏PKT_PULL_RESP (不清楚),代表3

94:定义了一个宏PKT_PULL_ACK (分组拉确认),代表4

95:定义了一个宏PKT_TX_ACK (数据包发送确认),代表5

97:定义了一个宏NB_PKT_MAX ,代表8(每个提取/发送周期的最大数据包数)

99:定义了一个宏MIN_LORA_PREAMB (最小LORA前置放大器),代表6(本应用的最小Lora前导码长度)

100:定义了一个宏STD_LORA_PREAMB (标准LORA序言),代表8

101:定义了一个宏MIN_FSK_PREAMB (最小FSK前置放大器),代表3(该应用的最小FSK前导长度)

102:定义了一个宏STD_FSK_PREAMB (标准FSK前置放大器),代表5

104:定义了一个宏STATUS_SIZE (状态大小),代表200

105:定义了一个宏TX_BUFF_SIZE (发送缓冲大小),代表((540 * NB_PKT_MAX) + 30 + STATUS_SIZE)((540×每个提取/发送周期的最大数据包数)+30+状态大小)

107:定义了一个宏UNIX_GPS_EPOCH_OFFSET (UNIX和LINUX时间的弥补),代表315964800(Unix时间起始于:1970年1月01日,GPS时间起始于:1980年1月06日。如果不考虑GPS跳秒的影响,两个时间系统的差值为315964800。从1970年1月1日00:00:00到1980年1月6日00:00:00经过的秒数)

110:定义了一个宏DEFAULT_BEACON_FREQ_HZ(默认信标频率,赫兹),代表869525000

111:定义了一个宏DEFAULT_BEACON_FREQ_NB(默认信标频率),代表1

112:定义了一个宏DEFAULT_BEACON_FREQ_STEP(默认信标频率步骤),代表0

113:定义了一个宏DEFAULT_BEACON_DATARATE(默认信标数据速率),代表9

114:定义了一个宏DEFAULT_BEACON_BW_HZ(默认信标带宽赫兹),代表125000

115:定义了一个宏DEFAULT_BEACON_POWER(默认信标功率),代表14

116

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值