24 GtkWidget *RDS_TP_Label;
25 GtkWidget *RDS_TA_Label;
26 GtkWidget *RDS_M_Label;
27 GtkWidget *RDS_S_Label;
28 GtkWidget *RDS_SID_Label;
29 GtkWidget *RDS_RT_Label;
30 GtkWidget *RDS_PTY_Label;
31 GtkWidget *RDS_Date_Time_Label;
32 GtkWidget *RDS_PI_Label;
33 GtkWidget *RDS_PType_Label;
35 GtkTextBuffer *TMC_MSG_Buffer;
39 int open_radio(const char *name)
43 fd = open(name, O_RDONLY | O_NONBLOCK);
51 void handle_r_input(gpointer user_data, gint source, GdkInputCondition condition)
53 uberradio_ui *rui = (uberradio_ui *)user_data;
54 static unsigned short rdsgroup[4];
56 if (rds_receive_group(rui->radio_fd, rdsgroup)) {
57 rds_decode_group(rdsgroup);
61 void rds_sname_cb(char *sname, void *user_data)
63 uberradio_ui *rui = (uberradio_ui *)user_data;
64 static char pbuf[128];
66 snprintf(pbuf, 128, "<tt>%s</tt>", sname);
67 gtk_label_set_markup(GTK_LABEL(rui->RDS_SID_Label), pbuf);
71 void rds_radiotext_cb(char *rtext, void *user_data)
73 uberradio_ui *rui = (uberradio_ui *)user_data;
74 static char pbuf[128];
76 snprintf(pbuf, 128, "<tt>%s</tt>", rtext);
77 gtk_label_set_markup(GTK_LABEL(rui->RDS_RT_Label), pbuf);
80 void rds_sinfo_cb(unsigned char TP, unsigned char TA, unsigned char MS, unsigned char PTY, void *user_data)
82 uberradio_ui *rui = (uberradio_ui *)user_data;
85 gtk_widget_set_sensitive(rui->RDS_TP_Label, TRUE);
87 gtk_widget_set_sensitive(rui->RDS_TP_Label, FALSE);
90 gtk_widget_set_sensitive(rui->RDS_TA_Label, TRUE);
92 gtk_widget_set_sensitive(rui->RDS_TA_Label, FALSE);
95 gtk_widget_set_sensitive(rui->RDS_M_Label, TRUE);
96 gtk_widget_set_sensitive(rui->RDS_S_Label, FALSE);
98 gtk_widget_set_sensitive(rui->RDS_M_Label, FALSE);
99 gtk_widget_set_sensitive(rui->RDS_S_Label, TRUE);
101 gtk_label_set_text(GTK_LABEL(rui->RDS_PTY_Label), PTY_text[PTY]);
104 void rds_date_time_cb(struct tm *rds_time, void *user_data)
106 uberradio_ui *rui = (uberradio_ui *)user_data;
114 mgdate.day = rds_time->tm_mday;
115 mgdate.month = rds_time->tm_mon + 1;
116 mgdate.year = rds_time->tm_year + 1900;
117 g_date_strftime(pbuf, 128, "%A %d. %B %Y ", &mgdate);
118 strftime(pbuf2, 128, "%R", rds_time);
119 pstr = g_strconcat(pbuf, pbuf2, NULL);
120 gtk_label_set_markup(GTK_LABEL(rui->RDS_Date_Time_Label), pstr);
124 void rds_PI_cb(unsigned short PI, unsigned char ccode, unsigned char ptype, unsigned char pref, void *user_data)
126 uberradio_ui *rui = (uberradio_ui *)user_data;
129 // we get this callback if PI changed which also means that
130 // the station changed, which again mean that allprevious
131 // information in the display is invalid now
133 gtk_widget_set_sensitive(rui->RDS_TP_Label, FALSE);
134 gtk_widget_set_sensitive(rui->RDS_TA_Label, FALSE);
135 gtk_widget_set_sensitive(rui->RDS_M_Label, FALSE);
136 gtk_widget_set_sensitive(rui->RDS_S_Label, FALSE);
137 gtk_label_set_markup(GTK_LABEL(rui->RDS_RT_Label), "");
138 gtk_label_set_text(GTK_LABEL(rui->RDS_PTY_Label), "");
139 gtk_label_set_markup(GTK_LABEL(rui->RDS_SID_Label), "");
140 gtk_text_buffer_set_text(rui->TMC_MSG_Buffer, "", -1);
142 snprintf(pbuf, 128, "<b>PI</b> %d", PI);
143 gtk_label_set_markup(GTK_LABEL(rui->RDS_PI_Label), pbuf);
144 gtk_label_set_markup(GTK_LABEL(rui->RDS_PType_Label), ptype_ltext[ptype]);
147 void tmc_msg_cb(char *msg, void *user_data)
149 uberradio_ui *rui = (uberradio_ui *)user_data;
151 gtk_text_buffer_set_text(rui->TMC_MSG_Buffer, msg, -1);
154 int main(int argc, char **argv)
159 gtk_init (&argc, &argv);
161 rui.builder = gtk_builder_new();
162 if (!gtk_builder_add_from_file(rui.builder, "uberradio.ui", NULL)) {
163 fprintf(stderr, "Error creating GtkBuilder\n");
166 gtk_builder_connect_signals(rui.builder, NULL);
168 rui.RDS_TP_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_TP_Label"));
169 gtk_widget_set_sensitive(rui.RDS_TP_Label, FALSE);
170 rui.RDS_TA_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_TA_Label"));
171 gtk_widget_set_sensitive(rui.RDS_TA_Label, FALSE);
172 rui.RDS_M_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_M_Label"));
173 gtk_widget_set_sensitive(rui.RDS_M_Label, FALSE);
174 rui.RDS_S_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_S_Label"));
175 gtk_widget_set_sensitive(rui.RDS_S_Label, FALSE);
176 rui.RDS_SID_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_SID_Label"));
177 rui.RDS_RT_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_RT_Label"));
178 rui.RDS_PTY_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_PTY_Label"));
179 rui.RDS_Date_Time_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_Date_Time_Label"));
180 rui.RDS_PI_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_PI_Label"));
181 rui.RDS_PType_Label = GTK_WIDGET(gtk_builder_get_object(rui.builder, "RDS_PType_Label"));
183 rui.TMC_View = GTK_WIDGET(gtk_builder_get_object(rui.builder, "TMC_View"));
184 rui.TMC_MSG_Buffer = GTK_TEXT_BUFFER(gtk_builder_get_object(rui.builder, "TMC_MSG_Buffer"));
186 rui.MainWin = GTK_WIDGET(gtk_builder_get_object(rui.builder, "MainWin"));
188 gtk_widget_show_all(rui.MainWin);
190 if (!(rui.radio_fd = open_radio("/dev/radio0"))) {
191 perror("open radio:");
195 if (sqlite3_open("lcl.db", &lcl_db) != SQLITE_OK) {
196 perror("open lcl.db");
204 rui.r_input_id = gdk_input_add (rui.radio_fd, GDK_INPUT_READ, handle_r_input, &rui);
206 rds_set_sname_cb(rds_sname_cb, &rui);
207 rds_set_radiotext_cb(rds_radiotext_cb, &rui);
208 rds_set_date_time_cb(rds_date_time_cb, &rui);
209 rds_set_sinfo_cb(rds_sinfo_cb, &rui);
210 rds_set_PI_cb(rds_PI_cb, &rui);
212 tmc_set_msg_cb(tmc_msg_cb, &rui);