~ubuntu-branches/ubuntu/oneiric/bluez/oneiric-201105191013

« back to all changes in this revision

Viewing changes to attrib/example.c

  • Committer: Bazaar Package Importer
  • Author(s): Robert Ancell
  • Date: 2010-12-20 16:08:47 UTC
  • mfrom: (1.1.24 upstream)
  • Revision ID: james.westby@ubuntu.com-20101220160847-wc1907sgz6x3vjz7
Tags: 4.82-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
#define FMT_KILOGRAM_UUID               0xA010
60
60
#define FMT_HANGING_UUID                0xA011
61
61
 
62
 
static guint timeout_id = 0;
63
 
 
64
 
static gboolean change_battery_state(gpointer user_data)
65
 
{
66
 
        static uint8_t state =  0x05;
67
 
        uuid_t uuid;
68
 
        uint8_t atval[1];
69
 
 
70
 
        /* Battery state is being increased every 10 seconds. */
71
 
        atval[0] = state++;
72
 
        sdp_uuid16_create(&uuid, BATTERY_STATE_UUID);
73
 
        attrib_db_update(0x0110, &uuid, atval, 1);
74
 
 
75
 
        return TRUE;
76
 
}
77
 
 
78
62
static int register_attributes(void)
79
63
{
80
64
        const char *devname = "Example Device";
101
85
        u16 = htons(GENERIC_ACCESS_PROFILE_ID);
102
86
        atval[0] = u16 >> 8;
103
87
        atval[1] = u16;
104
 
        attrib_db_add(0x0001, &uuid, atval, 2);
 
88
        attrib_db_add(0x0001, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
105
89
 
106
90
        /* GAP service: device name characteristic */
107
91
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
111
95
        atval[2] = 0x00;
112
96
        atval[3] = u16 >> 8;
113
97
        atval[4] = u16;
114
 
        attrib_db_add(0x0004, &uuid, atval, 5);
 
98
        attrib_db_add(0x0004, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
115
99
 
116
100
        /* GAP service: device name attribute */
117
101
        sdp_uuid16_create(&uuid, GATT_CHARAC_DEVICE_NAME);
118
102
        len = strlen(devname);
119
103
        strncpy((char *) atval, devname, len);
120
 
        attrib_db_add(0x0006, &uuid, atval, len);
 
104
        attrib_db_add(0x0006, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
121
105
 
122
106
        /* GATT service: primary service definition */
123
107
        sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
124
108
        u16 = htons(GENERIC_ATTRIB_PROFILE_ID);
125
109
        atval[0] = u16 >> 8;
126
110
        atval[1] = u16;
127
 
        attrib_db_add(0x0010, &uuid, atval, 2);
 
111
        attrib_db_add(0x0010, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
128
112
 
129
113
        /* GATT service: attributes opcodes characteristic */
130
114
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
134
118
        atval[2] = 0x00;
135
119
        atval[3] = u16 >> 8;
136
120
        atval[4] = u16;
137
 
        attrib_db_add(0x0011, &uuid, atval, 5);
 
121
        attrib_db_add(0x0011, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
138
122
 
139
123
        /* GATT service: attribute opcodes supported */
140
124
        sdp_uuid16_create(&uuid, OPCODES_SUPPORTED_UUID);
141
125
        atval[0] = 0xFF;
142
126
        atval[1] = 0x01;
143
 
        attrib_db_add(0x0012, &uuid, atval, 2);
 
127
        attrib_db_add(0x0012, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
144
128
 
145
129
        /* Battery state service: primary service definition */
146
130
        sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
147
131
        u16 = htons(BATTERY_STATE_SVC_UUID);
148
132
        atval[0] = u16 >> 8;
149
133
        atval[1] = u16;
150
 
        attrib_db_add(0x0100, &uuid, atval, 2);
 
134
        attrib_db_add(0x0100, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
151
135
 
152
136
        /* Battery: battery state characteristic */
153
137
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
157
141
        atval[2] = 0x01;
158
142
        atval[3] = u16 >> 8;
159
143
        atval[4] = u16;
160
 
        attrib_db_add(0x0106, &uuid, atval, 5);
 
144
        attrib_db_add(0x0106, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
161
145
 
162
146
        /* Battery: battery state attribute */
163
147
        sdp_uuid16_create(&uuid, BATTERY_STATE_UUID);
164
148
        atval[0] = 0x04;
165
 
        attrib_db_add(0x0110, &uuid, atval, 1);
 
149
        attrib_db_add(0x0110, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 1);
166
150
 
167
151
        /* Battery: Client Characteristic Configuration */
168
152
        sdp_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
169
153
        atval[0] = 0x00;
170
154
        atval[1] = 0x00;
171
 
        attrib_db_add(0x0111, &uuid, atval, 2);
172
 
 
173
 
        timeout_id = g_timeout_add_seconds(10, change_battery_state, NULL);
 
155
        attrib_db_add(0x0111, &uuid, ATT_NONE, ATT_AUTHENTICATION, atval, 2);
174
156
 
175
157
        /* Thermometer: primary service definition */
176
158
        sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
177
159
        u16 = htons(THERM_HUMIDITY_SVC_UUID);
178
160
        atval[0] = u16 >> 8;
179
161
        atval[1] = u16;
180
 
        attrib_db_add(0x0200, &uuid, atval, 2);
 
162
        attrib_db_add(0x0200, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
181
163
 
182
164
        /* Thermometer: Include */
183
165
        sdp_uuid16_create(&uuid, GATT_INCLUDE_UUID);
188
170
        atval[3] = 0x05;
189
171
        atval[4] = u16 >> 8;
190
172
        atval[5] = u16;
191
 
        attrib_db_add(0x0201, &uuid, atval, 6);
 
173
        attrib_db_add(0x0201, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 6);
192
174
 
193
175
        /* Thermometer: Include */
194
176
        atval[0] = 0x50;
195
177
        atval[1] = 0x05;
196
178
        atval[2] = 0x68;
197
179
        atval[3] = 0x05;
198
 
        attrib_db_add(0x0202, &uuid, atval, 4);
 
180
        attrib_db_add(0x0202, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 4);
199
181
 
200
182
        /* Thermometer: temperature characteristic */
201
183
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
205
187
        atval[2] = 0x02;
206
188
        atval[3] = u16 >> 8;
207
189
        atval[4] = u16;
208
 
        attrib_db_add(0x0203, &uuid, atval, 5);
 
190
        attrib_db_add(0x0203, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
209
191
 
210
192
        /* Thermometer: temperature characteristic value */
211
193
        sdp_uuid16_create(&uuid, TEMPERATURE_UUID);
212
194
        atval[0] = 0x8A;
213
195
        atval[1] = 0x02;
214
 
        attrib_db_add(0x0204, &uuid, atval, 2);
 
196
        attrib_db_add(0x0204, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
215
197
 
216
198
        /* Thermometer: temperature characteristic format */
217
199
        sdp_uuid16_create(&uuid, GATT_CHARAC_FMT_UUID);
224
206
        u16 = htons(FMT_OUTSIDE_UUID);
225
207
        atval[5] = u16 >> 8;
226
208
        atval[6] = u16;
227
 
        attrib_db_add(0x0205, &uuid, atval, 7);
 
209
        attrib_db_add(0x0205, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 7);
228
210
 
229
211
        /* Thermometer: characteristic user description */
230
212
        sdp_uuid16_create(&uuid, GATT_CHARAC_USER_DESC_UUID);
231
213
        len = strlen(desc_out_temp);
232
214
        strncpy((char *) atval, desc_out_temp, len);
233
 
        attrib_db_add(0x0206, &uuid, atval, len);
 
215
        attrib_db_add(0x0206, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
234
216
 
235
217
        /* Thermometer: relative humidity characteristic */
236
218
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
240
222
        atval[2] = 0x02;
241
223
        atval[3] = u16 >> 8;
242
224
        atval[4] = u16;
243
 
        attrib_db_add(0x0210, &uuid, atval, 5);
 
225
        attrib_db_add(0x0210, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
244
226
 
245
227
        /* Thermometer: relative humidity value */
246
228
        sdp_uuid16_create(&uuid, RELATIVE_HUMIDITY_UUID);
247
229
        atval[0] = 0x27;
248
 
        attrib_db_add(0x0212, &uuid, atval, 1);
 
230
        attrib_db_add(0x0212, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 1);
249
231
 
250
232
        /* Thermometer: relative humidity characteristic format */
251
233
        sdp_uuid16_create(&uuid, GATT_CHARAC_FMT_UUID);
260
242
        u16 = htons(FMT_OUTSIDE_UUID);
261
243
        atval[6] = u16 >> 8;
262
244
        atval[7] = u16;
263
 
        attrib_db_add(0x0213, &uuid, atval, 8);
 
245
        attrib_db_add(0x0213, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 8);
264
246
 
265
247
        /* Thermometer: characteristic user description */
266
248
        sdp_uuid16_create(&uuid, GATT_CHARAC_USER_DESC_UUID);
267
249
        len = strlen(desc_out_hum);
268
250
        strncpy((char *) atval, desc_out_hum, len);
269
 
        attrib_db_add(0x0214, &uuid, atval, len);
 
251
        attrib_db_add(0x0214, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
270
252
 
271
253
        /* Secondary Service: Manufacturer Service */
272
254
        sdp_uuid16_create(&uuid, GATT_SND_SVC_UUID);
273
255
        u16 = htons(MANUFACTURER_SVC_UUID);
274
256
        atval[0] = u16 >> 8;
275
257
        atval[1] = u16;
276
 
        attrib_db_add(0x0500, &uuid, atval, 2);
 
258
        attrib_db_add(0x0500, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
277
259
 
278
260
        /* Manufacturer name characteristic definition */
279
261
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
283
265
        atval[2] = 0x05;
284
266
        atval[3] = u16 >> 8;
285
267
        atval[4] = u16;
286
 
        attrib_db_add(0x0501, &uuid, atval, 5);
 
268
        attrib_db_add(0x0501, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
287
269
 
288
270
        /* Manufacturer name characteristic value */
289
271
        sdp_uuid16_create(&uuid, MANUFACTURER_NAME_UUID);
290
272
        len = strlen(manufacturer_name1);
291
273
        strncpy((char *) atval, manufacturer_name1, len);
292
 
        attrib_db_add(0x0502, &uuid, atval, len);
 
274
        attrib_db_add(0x0502, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
293
275
 
294
276
        /* Manufacturer serial number characteristic */
295
277
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
299
281
        atval[2] = 0x05;
300
282
        atval[3] = u16 >> 8;
301
283
        atval[4] = u16;
302
 
        attrib_db_add(0x0503, &uuid, atval, 5);
 
284
        attrib_db_add(0x0503, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
303
285
 
304
286
        /* Manufacturer serial number characteristic value */
305
287
        sdp_uuid16_create(&uuid, MANUFACTURER_SERIAL_UUID);
306
288
        len = strlen(serial1);
307
289
        strncpy((char *) atval, serial1, len);
308
 
        attrib_db_add(0x0504, &uuid, atval, len);
 
290
        attrib_db_add(0x0504, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
309
291
 
310
292
        /* Secondary Service: Manufacturer Service */
311
293
        sdp_uuid16_create(&uuid, GATT_SND_SVC_UUID);
312
294
        u16 = htons(MANUFACTURER_SVC_UUID);
313
295
        atval[0] = u16 >> 8;
314
296
        atval[1] = u16;
315
 
        attrib_db_add(0x0505, &uuid, atval, 2);
 
297
        attrib_db_add(0x0505, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
316
298
 
317
299
        /* Manufacturer name characteristic definition */
318
300
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
322
304
        atval[2] = 0x05;
323
305
        atval[3] = u16 >> 8;
324
306
        atval[4] = u16;
325
 
        attrib_db_add(0x0506, &uuid, atval, 5);
 
307
        attrib_db_add(0x0506, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
326
308
 
327
309
        /* Secondary Service: Vendor Specific Service */
328
310
        sdp_uuid16_create(&uuid, GATT_SND_SVC_UUID);
329
311
        u16 = htons(VENDOR_SPECIFIC_SVC_UUID);
330
312
        atval[0] = u16 >> 8;
331
313
        atval[1] = u16;
332
 
        attrib_db_add(0x0550, &uuid, atval, 2);
 
314
        attrib_db_add(0x0550, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 2);
333
315
 
334
316
        /* Vendor Specific Type characteristic definition */
335
317
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
339
321
        atval[2] = 0x05;
340
322
        atval[3] = u16 >> 8;
341
323
        atval[4] = u16;
342
 
        attrib_db_add(0x0560, &uuid, atval, 5);
 
324
        attrib_db_add(0x0560, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
343
325
 
344
326
        /* Vendor Specific Type characteristic value */
345
327
        sdp_uuid16_create(&uuid, VENDOR_SPECIFIC_TYPE_UUID);
349
331
        atval[3] = 0x64;
350
332
        atval[4] = 0x6F;
351
333
        atval[5] = 0x72;
352
 
        attrib_db_add(0x0568, &uuid, atval, 6);
 
334
        attrib_db_add(0x0568, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 6);
353
335
 
354
336
        /* Manufacturer name attribute */
355
337
        sdp_uuid16_create(&uuid, MANUFACTURER_NAME_UUID);
356
338
        len = strlen(manufacturer_name2);
357
339
        strncpy((char *) atval, manufacturer_name2, len);
358
 
        attrib_db_add(0x0507, &uuid, atval, len);
 
340
        attrib_db_add(0x0507, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
359
341
 
360
342
        /* Characteristic: serial number */
361
343
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
365
347
        atval[2] = 0x05;
366
348
        atval[3] = u16 >> 8;
367
349
        atval[4] = u16;
368
 
        attrib_db_add(0x0508, &uuid, atval, 5);
 
350
        attrib_db_add(0x0508, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 5);
369
351
 
370
352
        /* Serial number characteristic value */
371
353
        sdp_uuid16_create(&uuid, MANUFACTURER_SERIAL_UUID);
372
354
        len = strlen(serial2);
373
355
        strncpy((char *) atval, serial2, len);
374
 
        attrib_db_add(0x0509, &uuid, atval, len);
 
356
        attrib_db_add(0x0509, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
375
357
 
376
358
        /* Weight service: primary service definition */
377
359
        sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID);
378
360
        memcpy(atval, prim_weight_uuid, 16);
379
 
        attrib_db_add(0x0680, &uuid, atval, 16);
 
361
        attrib_db_add(0x0680, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 16);
380
362
 
381
363
        /* Weight: include */
382
364
        sdp_uuid16_create(&uuid, GATT_INCLUDE_UUID);
387
369
        atval[3] = 0x05;
388
370
        atval[4] = u16 >> 8;
389
371
        atval[5] = u16;
390
 
        attrib_db_add(0x0681, &uuid, atval, 6);
 
372
        attrib_db_add(0x0681, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 6);
391
373
 
392
374
        /* Weight: characteristic */
393
375
        sdp_uuid16_create(&uuid, GATT_CHARAC_UUID);
395
377
        atval[1] = 0x83;
396
378
        atval[2] = 0x06;
397
379
        memcpy(atval + 3, char_weight_uuid, 16);
398
 
        attrib_db_add(0x0682, &uuid, atval, 19);
 
380
        attrib_db_add(0x0682, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 19);
399
381
 
400
382
        /* Weight: characteristic value */
401
383
        sdp_uuid128_create(&uuid, char_weight_uuid);
403
385
        atval[1] = 0x55;
404
386
        atval[2] = 0x00;
405
387
        atval[3] = 0x00;
406
 
        attrib_db_add(0x0683, &uuid, atval, 4);
 
388
        attrib_db_add(0x0683, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 4);
407
389
 
408
390
        /* Weight: characteristic format */
409
391
        sdp_uuid16_create(&uuid, GATT_CHARAC_FMT_UUID);
418
400
        u16 = htons(FMT_HANGING_UUID);
419
401
        atval[6] = u16 >> 8;
420
402
        atval[7] = u16;
421
 
        attrib_db_add(0x0684, &uuid, atval, 8);
 
403
        attrib_db_add(0x0684, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, 8);
422
404
 
423
405
        /* Weight: characteristic user description */
424
406
        sdp_uuid16_create(&uuid, GATT_CHARAC_USER_DESC_UUID);
425
407
        len = strlen(desc_weight);
426
408
        strncpy((char *) atval, desc_weight, len);
427
 
        attrib_db_add(0x0685, &uuid, atval, len);
 
409
        attrib_db_add(0x0685, &uuid, ATT_NONE, ATT_NOT_PERMITTED, atval, len);
428
410
 
429
411
        return 0;
430
412
}
436
418
 
437
419
void server_example_exit(void)
438
420
{
439
 
        g_source_remove(timeout_id);
440
421
}