]> git.kernelconcepts.de Git - rdstmc.git/blob - decoder/rds_test.c
Add new rdstmc
[rdstmc.git] / decoder / rds_test.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <time.h>
5 #include <unistd.h>
6 #include <sys/stat.h>
7 #include <fcntl.h>
8 #include <limits.h>
9
10 #include <sqlite3.h>
11
12 #include "rds.h"
13 #include "tmc.h"
14
15 sqlite3 *lcl_db;
16 int OutputFlags;
17
18 void test_rds_PI_cb(unsigned short PI, unsigned char ccode, unsigned char ptype, unsigned char pref)
19 {
20                 printf("New PI=%d ccode=%X ptype=%X '%s' '%s' pref=%d\n", PI, ccode, ptype, ptype_stext[ptype], ptype_ltext[ptype], pref);
21 }
22
23 void test_rds_radiotext_cb(char *radio_text)
24 {
25         printf("New RT: '%s'\n", radio_text);
26 }
27
28 void test_rds_date_time_cb(struct tm *rds_time)
29 {
30         printf("RDS date/time: %s", asctime(rds_time));
31 }
32
33 void test_rds_sname_cb(char *sname)
34 {
35         printf("RDS sname='%s'\n", sname);
36 }
37
38 void test_tmc_msg_cb(char *msg, void *user_data)
39 {
40         printf("\nTMC msg:\n%s", msg);
41 }
42
43 int open_radio(const char *name)
44 {
45 int fd;
46
47         fd = open(name, O_RDONLY);
48         if (fd > 0)
49                 return fd;
50         else
51                 return 0;
52 }
53
54 int main(int argc, char **argv)
55 {
56 char rdevname[PATH_MAX] = "/dev/radio0";
57 unsigned short rdsgroup[4];
58 int rds_fd, i;
59
60         i = 1;
61         while (i < argc) {
62                 if (strncmp("-all", argv[i], 4) == 0)
63                         OutputFlags |= ~0;
64                 if (strncmp("-di", argv[i], 3) == 0)
65                         OutputFlags |= RDS_OUTPUT_RDSINFO;
66                 if (strncmp("-rd", argv[i], 3) == 0)
67                         if (argc > i)
68                                 strcpy(rdevname, argv[++i]);
69                 if (strncmp("-rt", argv[i], 3) == 0)
70                         OutputFlags |= RDS_OUTPUT_RADIO_TEXT;
71                 if (strncmp("-ri", argv[i], 3) == 0)
72                         OutputFlags |= RDS_OUTPUT_STATION_ID;
73                 if (strncmp("-tmc", argv[i], 4) == 0)
74                         OutputFlags |= RDS_OUTPUT_TMC;
75                 if (strncmp("-eon", argv[i], 4) == 0)
76                         OutputFlags |= RDS_OUTPUT_EON;
77                 if (strncmp("-dt", argv[i], 3) == 0)
78                         OutputFlags |= RDS_OUTPUT_DATETIME;
79                 if (strncmp("-ug", argv[i], 3) == 0)
80                         OutputFlags |= RDS_OUTPUT_UNKNGRP;
81                 if (strncmp("-pi", argv[i], 3) == 0)
82                         OutputFlags |= RDS_RECEIVE_INDICATOR;
83                 i++;
84         }
85         if (!(rds_fd = open_radio(rdevname))) {
86                 perror("open radio:");
87                 return -1;
88         }
89         if (sqlite3_open("lcl.db", &lcl_db) != SQLITE_OK) {
90                 perror("open radio:");
91                 close(rds_fd);
92                 return -1;
93         }
94
95         rds_init();
96         tmc_init();
97
98         //rds_set_PI_cb(test_rds_PI_cb);
99         //rds_set_radiotext_cb(test_rds_radiotext_cb);
100         //rds_set_date_time_cb(test_rds_date_time_cb);
101         //rds_set_sname_cb(test_rds_sname_cb);
102
103         tmc_set_msg_cb(test_tmc_msg_cb, NULL);
104
105         while (1) {
106                 if (rds_receive_group(rds_fd, rdsgroup)) {
107                         // group complete, start decode
108                         rds_decode_group(rdsgroup);
109                 }
110         }
111         
112 return 0;
113 }
114