static void register_phone_alert_service(struct alert_adapter *al_adapter) { bt_uuid_t uuid; bt_uuid16_create(&uuid, PHONE_ALERT_STATUS_SVC_UUID); /* Phone Alert Status Service */ gatt_service_add(al_adapter->adapter, GATT_PRIM_SVC_UUID, &uuid, /* Alert Status characteristic */ GATT_OPT_CHR_UUID, ALERT_STATUS_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, alert_status_read, al_adapter->adapter, GATT_OPT_CCC_GET_HANDLE, &al_adapter->hnd_ccc[NOTIFY_ALERT_STATUS], GATT_OPT_CHR_VALUE_GET_HANDLE, &al_adapter->hnd_value[NOTIFY_ALERT_STATUS], /* Ringer Control Point characteristic */ GATT_OPT_CHR_UUID, RINGER_CP_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_WRITE_WITHOUT_RESP, GATT_OPT_CHR_VALUE_CB, ATTRIB_WRITE, ringer_cp_write, NULL, /* Ringer Setting characteristic */ GATT_OPT_CHR_UUID, RINGER_SETTING_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, ringer_setting_read, al_adapter->adapter, GATT_OPT_CCC_GET_HANDLE, &al_adapter->hnd_ccc[NOTIFY_RINGER_SETTING], GATT_OPT_CHR_VALUE_GET_HANDLE, &al_adapter->hnd_value[NOTIFY_RINGER_SETTING], GATT_OPT_INVALID); }
static void register_services(struct time_adapter *ta) { bt_uuid_t curr_time_uuid; bt_uuid_t next_dst_uuid; bt_uuid16_create(&curr_time_uuid, CURRENT_TIME_SVC_UUID); /* Current Time Service */ gatt_service_add(ta->adapter, GATT_PRIM_SVC_UUID, &curr_time_uuid, /* CT Time characteristic */ GATT_OPT_CHR_UUID, CT_TIME_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, current_time_read, ta, GATT_OPT_CCC_GET_HANDLE, &ta->h_curr_time_ccc, GATT_OPT_CHR_VALUE_GET_HANDLE, &ta->h_curr_time_value, /* Local Time Information characteristic */ GATT_OPT_CHR_UUID, LOCAL_TIME_INFO_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, local_time_info_read, ta, GATT_OPT_INVALID); bt_uuid16_create(&curr_time_uuid, NEXT_DST_CHANGE_SVC_UUID); /* Next DST Change Service */ gatt_service_add(ta->adapter, GATT_PRIM_SVC_UUID, &curr_time_uuid, /* Time with DST characteristic */ GATT_OPT_CHR_UUID, TIME_WITH_DATE_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, time_with_dst_read, ta, GATT_OPT_INVALID); }
static gboolean register_battery_service(struct btd_adapter *adapter) { bt_uuid_t uuid; bt_uuid16_create(&uuid, BATTERY_STATE_SVC_UUID); return gatt_service_add(adapter, GATT_PRIM_SVC_UUID, &uuid, /* battery state characteristic */ GATT_OPT_CHR_UUID, BATTERY_STATE_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, battery_state_read, adapter, GATT_OPT_INVALID); }
static void register_alert_notif_service(struct alert_adapter *al_adapter) { bt_uuid_t uuid; bt_uuid16_create(&uuid, ALERT_NOTIF_SVC_UUID); /* Alert Notification Service */ gatt_service_add(al_adapter->adapter, GATT_PRIM_SVC_UUID, &uuid, /* Supported New Alert Category */ GATT_OPT_CHR_UUID, SUPP_NEW_ALERT_CAT_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, supp_new_alert_cat_read, al_adapter->adapter, GATT_OPT_CHR_VALUE_GET_HANDLE, &al_adapter->supp_new_alert_cat_handle, /* 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->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, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, supp_unread_alert_cat_read, al_adapter->adapter, GATT_OPT_CHR_VALUE_GET_HANDLE, &al_adapter->supp_unread_alert_cat_handle, /* Unread Alert Status */ GATT_OPT_CHR_UUID, UNREAD_ALERT_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CCC_GET_HANDLE, &al_adapter->hnd_ccc[NOTIFY_UNREAD_ALERT], GATT_OPT_CHR_VALUE_GET_HANDLE, &al_adapter->hnd_value[NOTIFY_UNREAD_ALERT], /* Alert Notification Control Point */ GATT_OPT_CHR_UUID, ALERT_NOTIF_CP_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_WRITE, GATT_OPT_CHR_VALUE_CB, ATTRIB_WRITE, alert_notif_cp_write, NULL, GATT_OPT_INVALID); }
static gboolean register_ref_time_update_service(struct btd_adapter *adapter) { bt_uuid_t uuid; bt_uuid16_create(&uuid, REF_TIME_UPDATE_SVC_UUID); /* Reference Time Update service */ return gatt_service_add(adapter, GATT_PRIM_SVC_UUID, &uuid, /* Time Update control point */ GATT_OPT_CHR_UUID, TIME_UPDATE_CTRL_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_WRITE_WITHOUT_RESP, GATT_OPT_CHR_VALUE_CB, ATTRIB_WRITE, time_update_control, adapter, /* Time Update status */ GATT_OPT_CHR_UUID, TIME_UPDATE_STAT_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, time_update_status, adapter, GATT_OPT_INVALID); }
static gboolean register_current_time_service(struct btd_adapter *adapter) { bt_uuid_t uuid; bt_uuid16_create(&uuid, CURRENT_TIME_SVC_UUID); /* Current Time service */ return gatt_service_add(adapter, GATT_PRIM_SVC_UUID, &uuid, /* CT Time characteristic */ GATT_OPT_CHR_UUID, CT_TIME_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, current_time_read, adapter, /* Local Time Information characteristic */ GATT_OPT_CHR_UUID, LOCAL_TIME_INFO_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, local_time_info_read, adapter, GATT_OPT_INVALID); }
static void register_current_time_service(void) { bt_uuid_t uuid; bt_uuid16_create(&uuid, CURRENT_TIME_SVC_UUID); /* Current Time service */ /* FIXME: Provide the adapter in next function */ gatt_service_add(NULL, GATT_PRIM_SVC_UUID, &uuid, /* CT Time characteristic */ GATT_OPT_CHR_UUID, CT_TIME_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, current_time_read, NULL, /* Local Time Information characteristic */ GATT_OPT_CHR_UUID, LOCAL_TIME_INFO_CHR_UUID, GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ, GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, local_time_info_read, NULL, GATT_OPT_INVALID); }