1
1
[ TOC]
2
2
3
- ## 一、rtkrcv 用法
3
+
4
+
5
+ ## 一、str2str 用法
4
6
5
7
### 1、简介
6
8
9
+ 从数据流中输入数据,并将其分割和输出到多个数据流中,输入流可以是串行、tcp 客户端、tcp 服务器、ntrip 客户端或文件。输出流可以是串行、tcp 客户端、tcp 服务器、ntrip 服务器或文件。str2str 是常驻应用程序。要停止它:
7
10
11
+ * 如果运行在前台,则在控制台中键入 ctr-c;
12
+ * 如果运行在后台,则向后台进程发送 SIGINT 信号。
8
13
14
+ 如果输入流和输出流都遵循 #format 输入信息的格式将被转换为输出格式。要指定输出使用 -msg 选项。如果省略选项 -in 或 -out,则输入为 stdin,"... "输出为 stdout、输入使用stdin,输出使用 stdout。如果选项 -in 或 -out 中的流为空,也会使用 stdin 或 stdout
9
15
10
16
11
- ### 2、配置文件
12
17
13
18
14
19
20
+ ### 2、命令行参数
15
21
22
+ 使用方法:` str2str [-in stream] [-out stream [-out stream...]] [options] `
16
23
17
- ### 3、命令行参数
18
24
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
28
25
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
+ ` ` `
29
37
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
+ ```
30
82
31
- ### 4、终端命令
32
83
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...] ` :
52
84
53
85
54
86
55
87
56
88
57
- ## 二、实时 GNSS 概念
89
+ ### 3、配置文件
90
+
91
+
92
+
93
+ ## 二、GNSS 数据流概念
58
94
59
95
### 1、Linux 进程线程
60
96
@@ -248,171 +284,7 @@ NtripClient一般就是GPS流动站。登录NtripCaster后,发送自身的坐
248
284
249
285
250
286
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
416
288
417
289
418
290
@@ -426,13 +298,35 @@ cmd_help (char **args, int narg, vt_t *vt);
426
298
427
299
428
300
301
+ ## 四、streamsvr.c
429
302
303
+ ### 1、通用数据流 API
430
304
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() ` :根据接收机品牌,发送接收机指令。
431
324
432
325
433
326
434
327
435
328
329
+ ## 五、str2str.c
436
330
437
331
438
332
0 commit comments