◯由浅入深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