blob: bb025a2ba251d23b3922859534508a550a38b574 [file] [log] [blame]
Sylvain Munaut341542b2009-12-22 21:53:22 +01001
2#include <stdio.h>
3#include <stdlib.h>
4#include <unistd.h>
5#include <string.h>
6#include <sys/types.h>
7#include <sys/stat.h>
8#include <fcntl.h>
9
10#include "gps.h"
11#include "ubx.h"
12#include "ubx-parse.h"
13#include "rrlp.h"
14
15static int
16do_ubx_read(struct gps_assist_data *gps, const char *filename)
17{
18 int rv, fd, i;
19 struct stat st;
20 void *buf;
21
22 /* Load file */
23 fd = open(filename, O_RDONLY);
24 if (fd < 0)
25 return -1;
26
27 rv = fstat(fd, &st);
28 if (rv < 0) {
29 close(fd);
30 return -1;
31 }
32
33 buf = malloc(st.st_size);
34 if (!buf) {
35 close(fd);
36 return -1;
37 }
38
39 rv = read(fd, buf, st.st_size);
40 if (rv != st.st_size) {
41 free(buf);
42 close(fd);
43 return -1;
44 }
45
46 /* Parse each message */
47 for (i=0; i<st.st_size;) {
48 int rv;
49 rv = ubx_msg_dispatch(ubx_parse_dt, buf + i, st.st_size - i, gps);
50 if (rv < 0)
51 i++; /* Invalid message: try one byte later */
52 else
53 i += rv;
54 }
55
56 /* Done */
57 free(buf);
58 close(fd);
59
60 return 0;
61}
62
63static int
64do_rrlp(struct gps_assist_data *gps)
65{
66 struct rrlp_assist_req ar;
67 void *pdus[64];
68 int len[64];
69 int i, rv;
70
71 char *test = "\x28\x00\x80\x10\x01\x32\x00\x19\x4F\x07\x15\x04";
72
73 rrlp_decode_assistance_request(&ar, test, 12);
74 printf("%08x %016llx\n", ar.req_elems, (long long unsigned) ar.eph_svs);
75
76 ar.req_elems = -1;
77 ar.eph_svs = -1LL;
78 rv = rrlp_gps_assist_pdus(gps, &ar, pdus, len, 64);
79 printf("%d\n", rv);
80 for (i=0; i<rv; i++) {
81 printf("%p %d\n", pdus[i], len[i]);
82 }
83 return 0;
84}
85
86int main(int argc, char *argv[])
87{
88 struct gps_assist_data gps;
89 int rv;
90
91 memset(&gps, 0x00, sizeof(gps));
92
93 rv = do_ubx_read(&gps, "data.ubx");
94
95 rv = do_rrlp(&gps);
96
97 return 0;
98}
99