mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-30 16:20:24 +00:00
implement GAP Name query
This commit is contained in:
parent
894362001f
commit
c1157b3839
@ -67,6 +67,12 @@
|
|||||||
// test profile
|
// test profile
|
||||||
#include "profile.h"
|
#include "profile.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CENTRAL_IDLE,
|
||||||
|
CENTRAL_W4_NAME_QUERY_COMPLETE,
|
||||||
|
CENTRAL_W4_NAME_VALUE,
|
||||||
|
} central_state_t;
|
||||||
|
|
||||||
typedef struct advertising_report {
|
typedef struct advertising_report {
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint8_t event_type;
|
uint8_t event_type;
|
||||||
@ -77,7 +83,6 @@ typedef struct advertising_report {
|
|||||||
uint8_t * data;
|
uint8_t * data;
|
||||||
} advertising_report_t;
|
} advertising_report_t;
|
||||||
|
|
||||||
|
|
||||||
static uint8_t test_irk[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static uint8_t test_irk[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
static int gap_privacy = 0;
|
static int gap_privacy = 0;
|
||||||
@ -100,6 +105,8 @@ static bd_addr_t tester_address = {0x00, 0x1B, 0xDC, 0x07, 0x32, 0xef};
|
|||||||
static int tester_address_type = 0;
|
static int tester_address_type = 0;
|
||||||
uint16_t gc_id;
|
uint16_t gc_id;
|
||||||
|
|
||||||
|
static central_state_t central_state = CENTRAL_IDLE;
|
||||||
|
static le_characteristic_t gap_name_characteristic;
|
||||||
|
|
||||||
static void show_usage();
|
static void show_usage();
|
||||||
static void fill_advertising_report_from_packet(advertising_report_t * report, uint8_t *packet);
|
static void fill_advertising_report_from_packet(advertising_report_t * report, uint8_t *packet);
|
||||||
@ -260,19 +267,44 @@ void app_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet,
|
|||||||
|
|
||||||
void handle_gatt_client_event(le_event_t * event){
|
void handle_gatt_client_event(le_event_t * event){
|
||||||
le_service_t service;
|
le_service_t service;
|
||||||
le_characteristic_t characteristic;
|
le_characteristic_value_event_t * value;
|
||||||
switch(event->type){
|
switch(event->type){
|
||||||
case GATT_SERVICE_QUERY_RESULT:
|
case GATT_SERVICE_QUERY_RESULT:
|
||||||
service = ((le_service_event_t *) event)->service;
|
// service = ((le_service_event_t *) event)->service;
|
||||||
dump_service(&service);
|
// dump_service(&service);
|
||||||
|
break;
|
||||||
|
case GATT_CHARACTERISTIC_VALUE_QUERY_RESULT:
|
||||||
|
value = (le_characteristic_value_event_t *) event;
|
||||||
|
switch (central_state){
|
||||||
|
case CENTRAL_W4_NAME_VALUE:
|
||||||
|
central_state = CENTRAL_IDLE;
|
||||||
|
value->blob[value->blob_length] = 0;
|
||||||
|
printf("GAP Service: Device Name: %s\n", value->blob);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// printf("\ntest client - CHARACTERISTIC for SERVICE ");
|
||||||
|
// printUUID128(service.uuid128); printf("\n");
|
||||||
break;
|
break;
|
||||||
case GATT_QUERY_COMPLETE:
|
case GATT_QUERY_COMPLETE:
|
||||||
printf("\ntest client - CHARACTERISTIC for SERVICE ");
|
switch (central_state){
|
||||||
printUUID128(service.uuid128); printf("\n");
|
case CENTRAL_W4_NAME_QUERY_COMPLETE:
|
||||||
|
central_state = CENTRAL_W4_NAME_VALUE;
|
||||||
|
gatt_client_read_value_of_characteristic(gc_id, handle, &gap_name_characteristic);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GATT_CHARACTERISTIC_QUERY_RESULT:
|
case GATT_CHARACTERISTIC_QUERY_RESULT:
|
||||||
characteristic = ((le_characteristic_event_t *) event)->characteristic;
|
switch (central_state) {
|
||||||
dump_characteristic(&characteristic);
|
case CENTRAL_W4_NAME_QUERY_COMPLETE:
|
||||||
|
gap_name_characteristic = ((le_characteristic_event_t *) event)->characteristic;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -296,10 +328,10 @@ void show_usage(void){
|
|||||||
printf("s/S - passive/active scanning\n");
|
printf("s/S - passive/active scanning\n");
|
||||||
printf("a - enable Advertisements\n");
|
printf("a - enable Advertisements\n");
|
||||||
printf("n - query GATT Device Name\n");
|
printf("n - query GATT Device Name\n");
|
||||||
|
printf("t - terminate connection\n");
|
||||||
#if 0
|
#if 0
|
||||||
printf("p/P - privacy flag off\n");
|
printf("p/P - privacy flag off\n");
|
||||||
printf("z - send Connection Parameter Update Request\n");
|
printf("z - send Connection Parameter Update Request\n");
|
||||||
printf("t - terminate connection\n");
|
|
||||||
printf("j - create L2CAP LE connection to %s\n", bd_addr_to_str(tester_address));
|
printf("j - create L2CAP LE connection to %s\n", bd_addr_to_str(tester_address));
|
||||||
printf("---\n");
|
printf("---\n");
|
||||||
printf("d - discover all services\n");
|
printf("d - discover all services\n");
|
||||||
@ -414,10 +446,6 @@ int stdin_process(struct data_source *ds){
|
|||||||
1000 // max ce length
|
1000 // max ce length
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 't':
|
|
||||||
printf("Terminating connection\n");
|
|
||||||
hci_send_cmd(&hci_disconnect, handle, 0x13);
|
|
||||||
break;
|
|
||||||
case 'd':
|
case 'd':
|
||||||
printf("Discover all primary services\n");
|
printf("Discover all primary services\n");
|
||||||
gatt_client_discover_primary_services(gc_id, handle);
|
gatt_client_discover_primary_services(gc_id, handle);
|
||||||
@ -435,6 +463,11 @@ int stdin_process(struct data_source *ds){
|
|||||||
hci_send_cmd(&hci_le_set_advertise_enable, 1);
|
hci_send_cmd(&hci_le_set_advertise_enable, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
central_state = CENTRAL_W4_NAME_QUERY_COMPLETE;
|
||||||
|
gatt_client_discover_characteristics_for_handle_range_by_uuid16(gc_id, handle, 1, 0xffff, 0x2a00);
|
||||||
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
if (scanning_active){
|
if (scanning_active){
|
||||||
le_central_stop_scan();
|
le_central_stop_scan();
|
||||||
@ -458,6 +491,10 @@ int stdin_process(struct data_source *ds){
|
|||||||
le_central_start_scan();
|
le_central_start_scan();
|
||||||
scanning_active = 1;
|
scanning_active = 1;
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
printf("Terminating connection\n");
|
||||||
|
hci_send_cmd(&hci_disconnect, handle, 0x13);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
show_usage();
|
show_usage();
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user