OSDN Git Service

alert: Add support for new alert notification
authorEder Ruiz Maria <eder.ruiz@openbossa.org>
Tue, 2 Oct 2012 20:24:47 +0000 (16:24 -0400)
committerJohan Hedberg <johan.hedberg@intel.com>
Wed, 3 Oct 2012 19:29:08 +0000 (22:29 +0300)
When NewAlert D-Bus method is called for one category from Alert
Notification Profile, the new alert characteristic value is notified.

profiles/alert/server.c

index a1dda5e..af23fa6 100644 (file)
@@ -95,6 +95,7 @@ enum {
 enum notify_type {
        NOTIFY_RINGER_SETTING = 0,
        NOTIFY_ALERT_STATUS,
+       NOTIFY_NEW_ALERT,
        NOTIFY_SIZE,
 };
 
@@ -109,7 +110,6 @@ struct alert_adapter {
        struct btd_adapter *adapter;
        uint16_t supp_new_alert_cat_handle;
        uint16_t supp_unread_alert_cat_handle;
-       uint16_t new_alert_handle;
        uint16_t unread_alert_handle;
        uint16_t hnd_ccc[NOTIFY_SIZE];
        uint16_t hnd_value[NOTIFY_SIZE];
@@ -351,6 +351,10 @@ static void attio_connected_cb(GAttrib *attrib, gpointer user_data)
                                &alert_status, sizeof(alert_status),
                                pdu, sizeof(pdu));
                break;
+       case NOTIFY_NEW_ALERT:
+               len = enc_notification(al_adapter->hnd_value[type],
+                                       nd->value, nd->len, pdu, sizeof(pdu));
+               break;
        default:
                DBG("Unknown type, could not send notification");
                goto end;
@@ -483,8 +487,10 @@ static void update_new_alert(gpointer data, gpointer user_data)
        struct btd_adapter *adapter = al_adapter->adapter;
        uint8_t *value = user_data;
 
-       attrib_db_update(adapter, al_adapter->new_alert_handle, NULL, &value[1],
-                                                               value[0], NULL);
+       attrib_db_update(adapter, al_adapter->hnd_value[NOTIFY_NEW_ALERT], NULL,
+                                               &value[1], value[0], NULL);
+
+       notify_devices(al_adapter, NOTIFY_NEW_ALERT, &value[1], value[0]);
 }
 
 static void update_phone_alerts(const char *category, const char *description)
@@ -869,8 +875,10 @@ static void register_alert_notif_service(struct alert_adapter *al_adapter)
                        /* New Alert */
                        GATT_OPT_CHR_UUID, NEW_ALERT_CHR_UUID,
                        GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_NOTIFY,
+                       GATT_OPT_CCC_GET_HANDLE,
+                       &al_adapter->hnd_ccc[NOTIFY_NEW_ALERT],
                        GATT_OPT_CHR_VALUE_GET_HANDLE,
-                       &al_adapter->new_alert_handle,
+                       &al_adapter->hnd_value[NOTIFY_NEW_ALERT],
                        /* Supported Unread Alert Category */
                        GATT_OPT_CHR_UUID, SUPP_UNREAD_ALERT_CAT_CHR_UUID,
                        GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ,