From 03cd2c324472088e5dbd2d7e7998cefabe15335a Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 26 Jan 2010 08:16:47 +0100 Subject: Add available RFKILL switches to list of technologies --- src/rfkill.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) (limited to 'src/rfkill.c') diff --git a/src/rfkill.c b/src/rfkill.c index f68ee0eb..37923054 100644 --- a/src/rfkill.c +++ b/src/rfkill.c @@ -39,6 +39,8 @@ enum rfkill_type { RFKILL_TYPE_UWB, RFKILL_TYPE_WIMAX, RFKILL_TYPE_WWAN, + RFKILL_TYPE_GPS, + RFKILL_TYPE_FM, }; enum rfkill_operation { @@ -56,12 +58,29 @@ struct rfkill_event { uint8_t hard; }; +static enum connman_service_type convert_type(uint8_t type) +{ + switch (type) { + case RFKILL_TYPE_WLAN: + return CONNMAN_SERVICE_TYPE_WIFI; + case RFKILL_TYPE_BLUETOOTH: + return CONNMAN_SERVICE_TYPE_BLUETOOTH; + case RFKILL_TYPE_WIMAX: + return CONNMAN_SERVICE_TYPE_WIMAX; + case RFKILL_TYPE_WWAN: + return CONNMAN_SERVICE_TYPE_CELLULAR; + } + + return CONNMAN_SERVICE_TYPE_UNKNOWN; +} + static GIOStatus rfkill_process(GIOChannel *chan) { GIOStatus status = G_IO_STATUS_NORMAL; unsigned char buf[32]; struct rfkill_event *event = (void *) buf; char sysname[32]; + enum connman_service_type type; connman_bool_t blocked; gsize len; @@ -78,9 +97,26 @@ static GIOStatus rfkill_process(GIOChannel *chan) if (len != sizeof(struct rfkill_event)) return status; - DBG("idx %u type %u op %u soft %u hard %u", - event->idx, event->type, event->op, - event->soft, event->hard); + DBG("idx %u type %u op %u soft %u hard %u", event->idx, + event->type, event->op, + event->soft, event->hard); + + switch (event->op) { + case RFKILL_OP_ADD: + type = convert_type(event->type); + __connman_technology_add_rfkill(event->idx, type, + event->soft, event->hard); + break; + case RFKILL_OP_DEL: + __connman_technology_remove_rfkill(event->idx); + break; + case RFKILL_OP_CHANGE: + __connman_technology_update_rfkill(event->idx, event->soft, + event->hard); + break; + default: + break; + } snprintf(sysname, sizeof(sysname) - 1, "rfkill%d", event->idx); -- cgit v1.2.3