Added an event log to the debugging plug-in

This commit is contained in:
Pierre Pronchery 2010-08-14 21:36:57 +00:00
parent a3ab3fd6cc
commit 22b1b90039

View File

@ -29,6 +29,8 @@ typedef struct _Debug
GtkWidget * window; GtkWidget * window;
GtkWidget * gsm; GtkWidget * gsm;
GtkWidget * queue; GtkWidget * queue;
GtkListStore * events;
GtkWidget * view;
} Debug; } Debug;
@ -64,6 +66,36 @@ static struct
{ NULL, NULL } { NULL, NULL }
}; };
static struct
{
PhoneEvent event;
char const * string;
} _debug_phone_events[] =
{
{ PHONE_EVENT_BATTERY_LEVEL, "PHONE_EVENT_BATTERY_LEVEL" },
{ PHONE_EVENT_CALL_ESTABLISHED, "PHONE_EVENT_CALL_ESTABLISHED" },
{ PHONE_EVENT_CALL_INCOMING, "PHONE_EVENT_CALL_INCOMING" },
{ PHONE_EVENT_CALL_OUTGOING, "PHONE_EVENT_CALL_OUTGOING" },
{ PHONE_EVENT_CALL_TERMINATED, "PHONE_EVENT_CALL_TERMINATED" },
{ PHONE_EVENT_CALLING, "PHONE_EVENT_CALLING" },
{ PHONE_EVENT_FUNCTIONAL, "PHONE_EVENT_FUNCTIONAL" },
{ PHONE_EVENT_KEY_TONE, "PHONE_EVENT_KEY_TONE" },
{ PHONE_EVENT_OFFLINE, "PHONE_EVENT_OFFLINE" },
{ PHONE_EVENT_ONLINE, "PHONE_EVENT_ONLINE" },
{ PHONE_EVENT_SET_OPERATOR, "PHONE_EVENT_SET_OPERATOR" },
{ PHONE_EVENT_SET_SIGNAL_LEVEL, "PHONE_EVENT_SET_SIGNAL_LEVEL" },
{ PHONE_EVENT_SIM_VALID, "PHONE_EVENT_SIM_VALID" },
{ PHONE_EVENT_SMS_RECEIVED, "PHONE_EVENT_SMS_RECEIVED" },
{ PHONE_EVENT_SMS_RECEIVING, "PHONE_EVENT_SMS_RECEIVING" },
{ PHONE_EVENT_SMS_SENDING, "PHONE_EVENT_SMS_SENDING" },
{ PHONE_EVENT_SMS_SENT, "PHONE_EVENT_SMS_SENT" },
{ PHONE_EVENT_SPEAKER_OFF, "PHONE_EVENT_SPEAKER_OFF" },
{ PHONE_EVENT_SPEAKER_ON, "PHONE_EVENT_SPEAKER_ON" },
{ PHONE_EVENT_VIBRATOR_OFF, "PHONE_EVENT_VIBRATOR_OFF" },
{ PHONE_EVENT_VIBRATOR_ON, "PHONE_EVENT_VIBRATOR_ON" },
{ 0, NULL },
};
/* prototypes */ /* prototypes */
static int _debug_init(PhonePlugin * plugin); static int _debug_init(PhonePlugin * plugin);
@ -97,6 +129,8 @@ static int _debug_init(PhonePlugin * plugin)
GtkWidget * vbox; GtkWidget * vbox;
GtkWidget * hbox; GtkWidget * hbox;
GtkWidget * widget; GtkWidget * widget;
GtkCellRenderer * renderer;
GtkTreeViewColumn * column;
size_t i; size_t i;
if((debug = object_new(sizeof(*debug))) == NULL) if((debug = object_new(sizeof(*debug))) == NULL)
@ -139,8 +173,29 @@ static int _debug_init(PhonePlugin * plugin)
G_CALLBACK(_on_debug_queue_execute), plugin); G_CALLBACK(_on_debug_queue_execute), plugin);
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
/* events */
widget = gtk_label_new("Events");
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
debug->events = gtk_list_store_new(3, G_TYPE_UINT, G_TYPE_STRING,
G_TYPE_STRING);
widget = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
debug->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(
debug->events));
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("Time", renderer,
"text", 1, NULL);
gtk_tree_view_column_set_sort_column_id(column, 0);
gtk_tree_view_append_column(GTK_TREE_VIEW(debug->view), column);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("Event", renderer,
"text", 2, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(debug->view), column);
gtk_container_add(GTK_CONTAINER(widget), debug->view);
gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
/* quit */ /* quit */
hbox = gtk_hbox_new(FALSE, 4); hbox = gtk_hbox_new(FALSE, 0);
widget = gtk_button_new_from_stock(GTK_STOCK_QUIT); widget = gtk_button_new_from_stock(GTK_STOCK_QUIT);
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
gtk_main_quit), NULL); gtk_main_quit), NULL);
@ -196,6 +251,26 @@ static int _debug_destroy(PhonePlugin * plugin)
/* debug_event */ /* debug_event */
static int _debug_event(PhonePlugin * plugin, PhoneEvent event, ...) static int _debug_event(PhonePlugin * plugin, PhoneEvent event, ...)
{ {
/* FIXME implement an event console */ Debug * debug = plugin->priv;
time_t date;
struct tm t;
char tbuf[32];
size_t i;
char ebuf[32];
GtkTreeIter iter;
date = time(NULL);
gmtime_r(&date, &t);
strftime(tbuf, sizeof(tbuf), "%d/%m/%Y %H:%M:%S", &t);
snprintf(ebuf, sizeof(ebuf), "Unknown (%u)", event);
for(i = 0; _debug_phone_events[i].string != NULL; i++)
if(_debug_phone_events[i].event == event)
{
snprintf(ebuf, sizeof(ebuf), "%s",
_debug_phone_events[i].string);
break;
}
gtk_list_store_append(debug->events, &iter);
gtk_list_store_set(debug->events, &iter, 0, date, 1, tbuf, 2, ebuf, -1);
return 0; return 0;
} }