Anderson, > -----Original Message----- > From: linux-bluetooth-owner@xxxxxxxxxxxxxxx [mailto:linux-bluetooth- > owner@xxxxxxxxxxxxxxx] On Behalf Of Anderson Lizardo > Sent: Friday, November 04, 2011 4:30 PM > To: linux-bluetooth@xxxxxxxxxxxxxxx > Cc: Anderson Lizardo > Subject: [PATCH BlueZ 4/4] Migrate example service to high level GATT > API > > This commit migrates the dummy "Battery Service" from example GATT > plugin to demonstrate how the new API is used. > --- > plugins/gatt-example.c | 61 +++++++++++++--------------------------- > ------- > 1 files changed, 17 insertions(+), 44 deletions(-) > > diff --git a/plugins/gatt-example.c b/plugins/gatt-example.c > index 955d9fa..1456284 100644 > --- a/plugins/gatt-example.c > +++ b/plugins/gatt-example.c > @@ -33,6 +33,7 @@ > #include "hcid.h" > #include "log.h" > #include "gattrib.h" > +#include "gatt-service.h" > #include "att.h" > #include "attrib-server.h" > > @@ -57,54 +58,26 @@ > > static GSList *sdp_handles = NULL; > > -static void register_battery_service(void) > +static uint8_t battery_state_read(struct attribute *a, gpointer > user_data) > { > - uint16_t start_handle, h; > - const int svc_size = 4; > - uint32_t sdp_handle; > - uint8_t atval[256]; > - bt_uuid_t uuid; > - > - start_handle = attrib_db_find_avail(svc_size); > - if (start_handle == 0) { > - error("Not enough free handles to register service"); > - return; > - } > + uint8_t value; > > - DBG("start_handle=0x%04x", start_handle); > - > - h = start_handle; > + value = 0x04; > + attrib_db_update(a->handle, NULL, &value, sizeof(value), NULL); > Why do we need to update the db here ? will the server hold the value until we return from this callback, and only then send the saved value to the client? Do we have a timeout for user reply? > - /* Battery state service: primary service definition */ > - bt_uuid16_create(&uuid, GATT_PRIM_SVC_UUID); > - att_put_u16(BATTERY_STATE_SVC_UUID, &atval[0]); > - attrib_db_add(h++, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2); > - > - /* Battery: battery state characteristic */ > - bt_uuid16_create(&uuid, GATT_CHARAC_UUID); > - atval[0] = ATT_CHAR_PROPER_READ | ATT_CHAR_PROPER_NOTIFY; > - att_put_u16(h + 1, &atval[1]); > - att_put_u16(BATTERY_STATE_UUID, &atval[3]); > - attrib_db_add(h++, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5); > - > - /* Battery: battery state attribute */ > - bt_uuid16_create(&uuid, BATTERY_STATE_UUID); > - atval[0] = 0x04; > - attrib_db_add(h++, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 1); > - > - /* Battery: Client Characteristic Configuration */ > - bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID); > - atval[0] = 0x00; > - atval[1] = 0x00; > - attrib_db_add(h++, &uuid, ATT_NONE, ATT_AUTHENTICATION, atval, > 2); > - > - g_assert(h - start_handle == svc_size); > + return 0; What do the return code from the callback mean ? 0 = Read success/allow, other return value = read disallowed? > +} > > - /* Add an SDP record for the above service */ > - sdp_handle = attrib_create_sdp(start_handle, "Battery State > Service"); > - if (sdp_handle) > - sdp_handles = g_slist_prepend(sdp_handles, > - GUINT_TO_POINTER(sdp_handle)); > +static void register_battery_service(void) > +{ > + gatt_service_add(GATT_PRIM_SVC_UUID, BATTERY_STATE_SVC_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, > + > + GATT_OPT_INVALID); > } > > static void register_termometer_service(const uint16_t manuf1[2], > -- > 1.7.0.4 > > -- Thanks, Chen Ganir -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html