static void
on_notify (GObject    *object,
           GParamSpec *pspec,
           gpointer    user_data)
{
  GDBusConnection *connection;
  const gchar *path;
  GVariant *value;
  const gchar *property_name;
  guint prop_id;

  path = g_object_get_data (object, "gdbus-codegen-path");
  connection = g_object_get_data (object, "gdbus-codegen-connection");
  if (connection == NULL || path == NULL)
    goto out;

  property_name = lookup_property_name_from_property_gname (pspec->name);
  if (property_name == NULL)
    goto out;
  prop_id = lookup_property_id_from_property_name (property_name);

  value = NULL;
  switch (prop_id)
    {
  }

  if (value != NULL && property_name != NULL)
    {
      queue_notification (object, property_name, g_variant_ref_sink (value));
    }
out:
  ;
}
Пример #2
0
static void notify_curr_time(gpointer data, gpointer user_data)
{
	struct time_adapter *ta = data;
	struct current_time *curtime = user_data;

	DBG("");

	queue_notification(ta->adapter, BDADDR_ALL,
			   ta->h_curr_time_value, ta->h_curr_time_ccc,
			   curtime, sizeof(*curtime));
}
Пример #3
0
static void __notify_unread_alert(gpointer data, gpointer user_data)
{
    struct alert_adapter *aa = data;
    uint8_t category_id = (uint32_t)user_data & 0xff;
    uint8_t category_id_bit = 1 << category_id;

    if ((aa->en_unread_alerts & category_id_bit) | override_notifications)
        queue_notification(aa->adapter, BDADDR_ALL, aa->h_unread_alerts,
                           aa->h_unread_alerts_ccc,
                           &unread_alerts[category_id],
                           sizeof(unread_alerts[0]));
}
Пример #4
0
static void __notify_alert_status(gpointer data, gpointer user_data)
{
    struct alert_adapter *aa = data;
    uint8_t status = (uint32_t)user_data & 0xff;

    if (alert_status != status) {
        alert_status = status;
        queue_notification(aa->adapter, BDADDR_ALL,
                           aa->h_alert_status, aa->h_alert_status_ccc,
                           &alert_status, sizeof(alert_status));
        attrib_db_update(aa->adapter, aa->h_alert_status, NULL,
                         &alert_status, sizeof(alert_status), NULL);
    }
}
Пример #5
0
static void __notify_ringer_setting(gpointer data, gpointer user_data)
{
    struct alert_adapter *aa = data;
    uint8_t setting = (uint32_t)user_data & 0xff;

    if (ringer_setting != setting) {
        ringer_setting = setting;
        queue_notification(aa->adapter, BDADDR_ALL,
                           aa->h_ringer_setting,
                           aa->h_ringer_setting_ccc,
                           &ringer_setting, sizeof(ringer_setting));
        attrib_db_update(aa->adapter, aa->h_ringer_setting, NULL,
                         &ringer_setting, sizeof(ringer_setting), NULL);
    }
}
Пример #6
0
static uint8_t alert_notif_cp_write(struct attribute *a, gpointer user_data,
                                    struct btd_device *device)
{
    struct alert_adapter *aa = user_data;
    bdaddr_t addr;
    int i;

    if (!initialized) {
        error("Uninitialized");
        return ATT_ECODE_IO;
    }

    device_get_address(device, &addr, NULL);

    DBG("Command = %d; Data = 0x%X", a->data[0], a->data[1]);

    switch (a->data[0]) {
    case ENABLE_NEW_INCOMING:
        aa->en_new_alerts |= a->data[1];
        register_devstate_cleanup_cb(aa, device);
        break;
    case ENABLE_UNREAD_CAT:
        aa->en_unread_alerts |= a->data[1];
        register_devstate_cleanup_cb(aa, device);
        break;
    case DISABLE_NEW_INCOMING:
        aa->en_new_alerts &= ~a->data[1];
        break;
    case DISABLE_UNREAD_CAT:
        aa->en_unread_alerts &= ~a->data[1];
        break;
    case NOTIFY_NEW_INCOMING:
        for (i = 0; i < NUM_OF_ALERT_CATEGORIES; i++) {
            if ((1 << i) & aa->en_new_alerts &&
                    new_alerts[i].num_new_alerts)
                queue_notification(aa->adapter,
                                   &addr,
                                   aa->h_new_alerts,
                                   aa->h_new_alerts_ccc,
                                   &new_alerts[i],
                                   sizeof(new_alerts[0]));
        }
        break;
    case NOTIFY_UNREAD_CAT:
        for (i = 0; i < NUM_OF_ALERT_CATEGORIES; i++) {
            if ((1 << i) & aa->en_unread_alerts &&
                    unread_alerts[i].unread_count)
                queue_notification(aa->adapter,
                                   &addr,
                                   aa->h_unread_alerts,
                                   aa->h_unread_alerts_ccc,
                                   &unread_alerts[i],
                                   sizeof(unread_alerts[0]));
        }
        break;
    default:
        DBG("Unknown command");
    }

    DBG("Enabled new alert = 0x%X", aa->en_new_alerts);
    DBG("Enabled unread alert = 0x%X", aa->en_unread_alerts);

    return 0;
}