Skip to content

Commit fb3d800

Browse files
committed
学数据流处理 str2str
1 parent 40289fd commit fb3d800

12 files changed

+354
-199
lines changed

01-RTKLIB源码阅读/07-RTKLIB源码阅读(七)GNSS观测量、Rinex文件读取.md renamed to 01-RTKLIB源码阅读/07-RTKLIB源码阅读(七)GNSS数据:Rinex、NMEA、RTCM、接收机原始数据.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[TOC]
22

3-
## 一、GNSS观测量及其误差
3+
## 一、GNSS观测量
4+
45
### 1、时间、伪距
56

67
1. 伪距 $\rho \left ( t \right )$的定义:信号接收时间 $t_u\left ( t \right )$与信号的发送时间 $t^{(S)}\left ( t-\tau \right )$的差乘以光在真空中的速度c,即:

01-RTKLIB源码阅读/12-RTKLIB源码阅读(十二)实时控制台程序 rtkrcv.md renamed to 01-RTKLIB源码阅读/12-RTKLIB源码阅读(十二)控制台数据流程序 str2str.md

Lines changed: 92 additions & 198 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,96 @@
11
[TOC]
22

3-
## 一、rtkrcv 用法
3+
4+
5+
## 一、str2str 用法
46

57
### 1、简介
68

9+
从数据流中输入数据,并将其分割和输出到多个数据流中,输入流可以是串行、tcp 客户端、tcp 服务器、ntrip 客户端或文件。输出流可以是串行、tcp 客户端、tcp 服务器、ntrip 服务器或文件。str2str 是常驻应用程序。要停止它:
710

11+
* 如果运行在前台,则在控制台中键入 ctr-c;
12+
* 如果运行在后台,则向后台进程发送 SIGINT 信号。
813

14+
如果输入流和输出流都遵循 #format 输入信息的格式将被转换为输出格式。要指定输出使用 -msg 选项。如果省略选项 -in 或 -out,则输入为 stdin,"... "输出为 stdout、输入使用stdin,输出使用 stdout。如果选项 -in 或 -out 中的流为空,也会使用 stdin 或 stdout
915

1016

11-
### 2、配置文件
1217

1318

1419

20+
### 2、命令行参数
1521

22+
使用方法:`str2str [-in stream] [-out stream [-out stream...]] [options]`
1623

17-
### 3、命令行参数
1824

19-
* `-s`:start RTK server on program startup
20-
* `-p port`:port number for telnet console
21-
* `-m port`:port number for monitor stream
22-
* `-d dev`:terminal device for console
23-
* `-o file`:processing options file
24-
* `-w pwd`:login password for remote console ("": no password)
25-
* `-r level`:output solution status file (0:off,1:states,2:residuals)
26-
* `-t level`:debug trace level (0:off,1-5:on)
27-
* `-sta sta`:station name for receiver dcb
2825

26+
数据流路径 stream path:
27+
28+
```yaml
29+
serial : serial://port[:brate[:bsize[:parity[:stopb[:fctr]]]]]
30+
tcp server : tcpsvr://:port
31+
tcp client : tcpcli://addr[:port]
32+
ntrip client : ntrip://[user[:passwd]@]addr[:port][/mntpnt]
33+
ntrip server : ntrips://[:passwd@]addr[:port]/mntpnt[:str] (only out)
34+
ntrip caster : ntripc://[user:passwd@][:port]/mntpnt[:srctbl] (only out)
35+
file : [file://]path[::T][::+start][::xseppd][::S=swap]
36+
```
2937
38+
数据格式 format:
39+
40+
```yaml
41+
rtcm2 : RTCM 2 (only in)
42+
rtcm3 : RTCM 3
43+
nov : NovAtel OEMV/4/6,OEMStar (only in)
44+
oem3 : NovAtel OEM3 (only in)
45+
ubx : ublox LEA-4T/5T/6T (only in)
46+
ss2 : NovAtel Superstar II (only in)
47+
hemis : Hemisphere Eclipse/Crescent (only in)
48+
stq : SkyTraq S1315F (only in)
49+
javad : Javad (only in)
50+
nvs : NVS BINR (only in)
51+
binex : BINEX (only in)
52+
rt17 : Trimble RT17 (only in)
53+
sbf : Septentrio SBF (only in)
54+
```
55+
56+
选项 option:
57+
58+
```yaml
59+
-sta sta station id
60+
-opt opt receiver dependent options
61+
-s msec timeout time (ms) [10000]
62+
-r msec reconnect interval (ms) [10000]
63+
-n msec nmea request cycle (m) [0]
64+
-f sec file swap margin (s) [30]
65+
-c file input commands file [no]
66+
-c1 file output 1 commands file [no]
67+
-c2 file output 2 commands file [no]
68+
-c3 file output 3 commands file [no]
69+
-c4 file output 4 commands file [no]
70+
-p lat lon hgt station position (latitude/longitude/height) (deg,m)
71+
-px x y z station position (x/y/z-ecef) (m)
72+
-a antinfo antenna info (separated by ,)
73+
-i rcvinfo receiver info (separated by ,)
74+
-o e n u antenna offset (e,n,u) (m)
75+
-l local_dir ftp/http local directory []
76+
-x proxy_addr http/ntrip proxy address [no]
77+
-b str_no relay back messages from output str to input str [no]
78+
-t level trace level [0]
79+
-fl file log file [str2str.trace]
80+
-h print help
81+
```
3082

31-
### 4、终端命令
3283

33-
* `start`
34-
* `stop`
35-
* `restart`
36-
* `solution [cycle]`
37-
* `status [cycle]`
38-
* `satellite [-n] [cycle]`
39-
* `observ [-n] [cycle]`
40-
* `navidata [cycle]`
41-
* `stream [cycle]`
42-
* `error`
43-
* `option [opt]`
44-
* `set opt [val]`
45-
* `load [file]`
46-
* `save [file]`
47-
* `log [file|off]`
48-
* `help|? [path]`
49-
* `exit`
50-
* `shutdown`
51-
* `!command [arg...]`
5284

5385

5486

5587

5688

57-
## 二、实时 GNSS 概念
89+
### 3、配置文件
90+
91+
92+
93+
## 二、GNSS 数据流概念
5894

5995
### 1、Linux 进程线程
6096

@@ -248,171 +284,7 @@ NtripClient一般就是GPS流动站。登录NtripCaster后,发送自身的坐
248284

249285

250286

251-
252-
253-
254-
255-
## 四、rtksvr.c 的函数
256-
257-
258-
259-
260-
261-
262-
263-
264-
265-
## 五、rtkrcv.c/vt.c/vt.h 的类型、函数
266-
267-
### 1、虚拟终端
268-
269-
#### 1. 虚拟终端结构体 vt_t
270-
271-
272-
273-
```c
274-
typedef struct vt_tag { /* virtual console type */ //
275-
int state; /* state(0:close,1:open) */ // (0:close,1:open)
276-
int type; /* type (0:dev,1:telnet) */ // (0:dev,1:telnet)
277-
int in,out; /* input/output file descriptor */ // 输入、输出文件描述符
278-
int n,nesc; /* number of line buffer/escape */ // 当前行数
279-
int cur; /* cursor position */ // 光标位置
280-
int cur_h; /* current history */ // 光标历史位置
281-
int brk; /* break status */ //
282-
int blind; /* blind inpu mode */ // 屏蔽输入模式
283-
struct termios tio; /* original terminal attribute */ //
284-
char buff[MAXBUFF]; /* line buffer */ //
285-
char esc[8]; /* escape buffer */ //
286-
char *hist[MAXHIST]; /* history buffer */ // 历史字符串
287-
FILE *logfp; /* log file pointer */ // log 文件指针
288-
} vt_t;
289-
```
290-
291-
#### 2. 操作虚拟终端的基础函数
292-
293-
294-
295-
```c
296-
extern vt_t *vt_open(int sock, const char *dev);
297-
extern void vt_close(vt_t *vt);
298-
extern int vt_getc(vt_t *vt, char *c);
299-
extern int vt_gets(vt_t *vt, char *buff, int n);
300-
extern int vt_putc(vt_t *vt, char c);
301-
extern int vt_puts(vt_t *vt, const char *buff);
302-
extern int vt_printf(vt_t *vt, const char *format, ...);
303-
extern int vt_chkbrk(vt_t *vt);
304-
extern int vt_openlog(vt_t *vt, const char *file);
305-
extern void vt_closelog(vt_t *vt);
306-
```
307-
308-
#### 6. 虚拟终端输出函数
309-
310-
311-
312-
```c
313-
static void prtime(vt_t *vt, gtime_t time); //输出时间
314-
static void prsolution(vt_t *vt, const sol_t *sol, const double *rb); //输出结果
315-
static void prstatus(vt_t *vt); // 输出状态
316-
static void prsatellite(vt_t *vt, int nf); // 输出卫星数据
317-
static void probserv(vt_t *vt, int nf); // 输出观测值数据
318-
static void prnavidata(vt_t *vt); // 输出星历数据
319-
static void prerror(vt_t *vt); // 输出错误信息
320-
static void prstream(vt_t *vt); // 输出数据流
321-
static void prssr(vt_t *vt); // 输出 SSR 改正数据
322-
```
323-
324-
#### 5. 虚拟终端控制结构体 con_t
325-
326-
327-
328-
```c
329-
typedef struct { /* console type */
330-
int state; /* 状态 (0:stop,1:run) */
331-
vt_t *vt; /* 虚拟终端结构体 */
332-
pthread_t thread; /* 线程控制 */
333-
} con_t;
334-
```
335-
336-
#### 6. 处理终端命令函数
337-
338-
339-
340-
```c
341-
cmd_start (char **args, int narg, vt_t *vt);
342-
cmd_stop (char **args, int narg, vt_t *vt);
343-
cmd_restart (char **args, int narg, vt_t *vt);
344-
cmd_solution (char **args, int narg, vt_t *vt);
345-
cmd_status (char **args, int narg, vt_t *vt);
346-
cmd_satellite(char **args, int narg, vt_t *vt);
347-
cmd_observ (char **args, int narg, vt_t *vt);
348-
cmd_navidata (char **args, int narg, vt_t *vt);
349-
cmd_stream (char **args, int narg, vt_t *vt);
350-
cmd_ssr (char **args, int narg, vt_t *vt);
351-
cmd_error (char **args, int narg, vt_t *vt);
352-
cmd_option (char **args, int narg, vt_t *vt);
353-
cmd_set (char **args, int narg, vt_t *vt);
354-
cmd_load (char **args, int narg, vt_t *vt);
355-
cmd_save (char **args, int narg, vt_t *vt);
356-
cmd_log (char **args, int narg, vt_t *vt);
357-
cmd_help (char **args, int narg, vt_t *vt);
358-
cmd_help (char **args, int narg, vt_t *vt);
359-
```
360-
361-
362-
363-
364-
365-
366-
367-
368-
369-
370-
371-
372-
373-
374-
375-
376-
377-
378-
379-
380-
381-
## 六、程序执行流程
382-
383-
### 1、线程设计
384-
385-
386-
387-
### 2、程序执行流程图
388-
389-
390-
391-
392-
393-
### 3、主要函数
394-
395-
396-
397-
398-
399-
400-
401-
402-
403-
404-
405-
406-
407-
408-
409-
410-
411-
412-
413-
414-
415-
287+
## 三、stream.c
416288

417289

418290

@@ -426,13 +298,35 @@ cmd_help (char **args, int narg, vt_t *vt);
426298

427299

428300

301+
## 四、streamsvr.c
429302

303+
### 1、通用数据流 API
430304

305+
* `stropen()`:先根据选项赋值 stream 结构体,然后根据数据流类型调用对应的函数(openXXX),打开数据流。
306+
* `strclose()`:调用对应的函数(closeXXX),关闭数据流。
307+
* `strsync()`:用于带时间标签的重放文件,调用 syncfile() 根据时间标签同步时间。
308+
* `strlock()``strunlock()`:读写数据流之前上锁,之后解锁。
309+
* `strread()`:调用对应的函数(readXXX),读取数据流中高端数据到 buffer。
310+
* `strwrite()`:调用对应的函数(writeXXX),写 buffer 数据到数据流。
311+
* `strstat()`:调用对应的函数(stateXXX),获取数据流状态。
312+
* `strstatx()`:调用对应的函数(statexXXX),获取扩展数据流状态。
313+
* `strsum()`:获取数据流状态概要。
314+
* `strsetopt()`:获取全局数据流选项,包括:非活动超时、重新连接的时间间隔、平均数据速率、接收/发送缓冲区大小、文件交换边缘时间。
315+
* `strsettimeout()`:设置超时时间。
316+
* `strsetdir()`:设置 ftp/http 下载到的本地目录路径。
317+
* `strsetproxy()`:设置 http/ntrip 代理地址。
318+
* `strgettime()`:获取数据流播放文件的当前时间或重放时间。
319+
* `strsendnmea()`:调用 `outnmea_gga()``strwrite()`,向数据流发送 NMEA GPGGA 信息。
320+
* `gen_hex()`:生成普通十六进制信息。
321+
* `set_brate()`:生成十六进制信息。
322+
* `set_brate()`:设置比特率。
323+
* `strsendcmd()`:根据接收机品牌,发送接收机指令。
431324

432325

433326

434327

435328

329+
## 五、str2str.c
436330

437331

438332

0 commit comments

Comments
 (0)