mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 22:20:37 +00:00
pbap_client: emit PBAP_SUBEVENT_CARD_RESULT, show in demo app
This commit is contained in:
parent
ad51486062
commit
83f1bca067
@ -140,6 +140,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
UNUSED(size);
|
||||
int i;
|
||||
uint8_t status;
|
||||
char buffer[32];
|
||||
switch (packet_type){
|
||||
case HCI_EVENT_PACKET:
|
||||
switch (hci_event_packet_get_type(packet)) {
|
||||
@ -152,7 +153,12 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
case HCI_EVENT_PBAP_META:
|
||||
switch (hci_event_pbap_meta_get_subevent_code(packet)){
|
||||
case PBAP_SUBEVENT_CONNECTION_OPENED:
|
||||
printf("[+] Connected\n");
|
||||
status = pbap_subevent_connection_opened_get_status(packet);
|
||||
if (status){
|
||||
printf("[!] Connection failed, status 0x%02x\n", status);
|
||||
} else {
|
||||
printf("[+] Connected\n");
|
||||
}
|
||||
break;
|
||||
case PBAP_SUBEVENT_CONNECTION_CLOSED:
|
||||
printf("[+] Connection closed\n");
|
||||
@ -166,11 +172,19 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe
|
||||
case PBAP_SUBEVENT_PHONEBOOK_SIZE:
|
||||
status = pbap_subevent_phonebook_size_get_status(packet);
|
||||
if (status){
|
||||
printf("[+] Get Phonebook size error: 0x%x\n", status);
|
||||
printf("[!] Get Phonebook size error: 0x%x\n", status);
|
||||
} else {
|
||||
printf("[+] Phonebook size: %u\n", pbap_subevent_phonebook_size_get_phoneboook_size(packet));
|
||||
}
|
||||
break;
|
||||
case PBAP_SUBEVENT_CARD_RESULT:
|
||||
memcpy(buffer, pbap_subevent_card_result_get_name(packet), pbap_subevent_card_result_get_name_len(packet));
|
||||
buffer[pbap_subevent_card_result_get_name_len(packet)] = 0;
|
||||
printf("[-] Name: '%s'\n", buffer);
|
||||
memcpy(buffer, pbap_subevent_card_result_get_handle(packet), pbap_subevent_card_result_get_handle_len(packet));
|
||||
buffer[pbap_subevent_card_result_get_handle_len(packet)] = 0;
|
||||
printf("[-] Handle: '%s'\n", buffer);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -82,8 +82,6 @@
|
||||
#include "classic/goep_client.h"
|
||||
#include "classic/pbap_client.h"
|
||||
|
||||
#define PBAP_MAX_PHONE_NUMBER_LEN 30
|
||||
|
||||
// 796135f0-f0c5-11d8-0966- 0800200c9a66
|
||||
uint8_t pbap_uuid[] = { 0x79, 0x61, 0x35, 0xf0, 0xf0, 0xc5, 0x11, 0xd8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66};
|
||||
|
||||
@ -221,6 +219,26 @@ static void pbap_client_emit_authentication_event(pbap_client_t * context, uint8
|
||||
context->client_handler(HCI_EVENT_PACKET, context->cid, &event[0], pos);
|
||||
}
|
||||
|
||||
static void pbap_client_emit_card_result_event(pbap_client_t * context, const char * name, const char * handle){
|
||||
uint8_t event[5 + PBAP_MAX_NAME_LEN + PBAP_MAX_HANDLE_LEN];
|
||||
int pos = 0;
|
||||
event[pos++] = HCI_EVENT_PBAP_META;
|
||||
pos++; // skip len
|
||||
event[pos++] = PBAP_SUBEVENT_CARD_RESULT;
|
||||
little_endian_store_16(event,pos,context->cid);
|
||||
pos+=2;
|
||||
int name_len = btstack_min(PBAP_MAX_NAME_LEN, strlen(name));
|
||||
event[pos++] = name_len;
|
||||
memcpy(&event[pos], name, name_len);
|
||||
pos += name_len;
|
||||
int handle_len = btstack_min(PBAP_MAX_HANDLE_LEN, strlen(handle));
|
||||
event[pos++] = handle_len;
|
||||
memcpy(&event[pos], handle, handle_len);
|
||||
pos += handle_len;
|
||||
event[1] = pos - 2;
|
||||
context->client_handler(HCI_EVENT_PACKET, context->cid, &event[0], pos);
|
||||
}
|
||||
|
||||
static const uint8_t collon = (uint8_t) ':';
|
||||
|
||||
static void pbap_handle_can_send_now(void){
|
||||
@ -528,7 +546,6 @@ static void pbap_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *
|
||||
pbap_client_emit_phonebook_size_event(pbap_client, OBEX_UNKNOWN_ERROR, 0);
|
||||
break;
|
||||
case PBAP_W4_GET_CARD_LIST_COMPLETE:
|
||||
printf("PBAP_W4_GET_CARD_LIST_COMPLETE\n");
|
||||
if (packet[0] == OBEX_RESP_CONTINUE){
|
||||
pbap_client->state = PBAP_W2_GET_CARD_LIST;
|
||||
goep_client_request_can_send_now(pbap_client->goep_cid);
|
||||
@ -543,8 +560,8 @@ static void pbap_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *
|
||||
int card_found = 0;
|
||||
int name_found = 0;
|
||||
int handle_found = 0;
|
||||
char name[32];
|
||||
char handle[16];
|
||||
char name[PBAP_MAX_NAME_LEN];
|
||||
char handle[PBAP_MAX_HANDLE_LEN];
|
||||
name[0] = 0;
|
||||
handle[0] = 0;
|
||||
while (data_len--){
|
||||
@ -555,8 +572,7 @@ static void pbap_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *
|
||||
break;
|
||||
case YXML_ELEMEND:
|
||||
if (card_found){
|
||||
printf("Name: '%s'\n", name);
|
||||
printf("Handle: '%s'\n", handle);
|
||||
pbap_client_emit_card_result_event(pbap_client, name, handle);
|
||||
}
|
||||
card_found = 0;
|
||||
break;
|
||||
@ -595,6 +611,7 @@ static void pbap_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *
|
||||
}
|
||||
//
|
||||
pbap_client->state = PBAP_CONNECTED;
|
||||
pbap_client_emit_operation_complete_event(pbap_client, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,14 @@ extern "C" {
|
||||
#include "btstack_config.h"
|
||||
#include <stdint.h>
|
||||
|
||||
// max len of phone number used for lookup in pbap_lookup_by_number
|
||||
#define PBAP_MAX_PHONE_NUMBER_LEN 32
|
||||
|
||||
// max len of name reported in PBAP_SUBEVENT_CARD_RESULT
|
||||
#define PBAP_MAX_NAME_LEN 32
|
||||
// max len of vcard handle reported in PBAP_SUBEVENT_CARD_RESULT
|
||||
#define PBAP_MAX_HANDLE_LEN 16
|
||||
|
||||
/* API_START */
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user