mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-21 12:40:42 +00:00
sdp_parser: replace sdp_query_rfcomm_service_event_t with regular hci event
This commit is contained in:
parent
77f718c013
commit
7bd8e93b3a
@ -57,6 +57,7 @@
|
||||
#include "hci_dump.h"
|
||||
#include "l2cap.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "btstack_event.h"
|
||||
|
||||
// static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3};
|
||||
static bd_addr_t remote = {0x84, 0x38, 0x35, 0x65, 0xD1, 0x15};
|
||||
@ -84,7 +85,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
}
|
||||
}
|
||||
|
||||
static void store_found_service(uint8_t * name, uint8_t port){
|
||||
static void store_found_service(const char * name, uint8_t port){
|
||||
printf("APP: Service name: '%s', RFCOMM port %u\n", name, port);
|
||||
channel_nr[service_index] = port;
|
||||
service_name[service_index] = (char*) malloc(SDP_SERVICE_NAME_LEN+1);
|
||||
@ -108,12 +109,13 @@ static void report_found_services(void){
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
store_found_service(ve->service_name, ve->channel_nr);
|
||||
ve = (const uint8_t *) event;
|
||||
store_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
report_found_services();
|
||||
|
@ -58,6 +58,7 @@
|
||||
#include "l2cap.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "classic/rfcomm.h"
|
||||
#include "btstack_event.h"
|
||||
|
||||
#define NUM_ROWS 25
|
||||
#define NUM_COLS 40
|
||||
@ -150,7 +151,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_found_service(char * name, uint8_t port){
|
||||
static void handle_found_service(const char * name, uint8_t port){
|
||||
printf("APP: Service name: '%s', RFCOMM port %u\n", name, port);
|
||||
|
||||
if (strncmp(name, spp_service_name_prefix, strlen(spp_service_name_prefix)) != 0) return;
|
||||
@ -161,12 +162,13 @@ static void handle_found_service(char * name, uint8_t port){
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
handle_found_service((char*) ve->service_name, ve->channel_nr);
|
||||
ve = (const uint8_t *) event;
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
if (state != W4_SDP_COMPLETE){
|
||||
|
@ -1577,14 +1577,9 @@ static void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t
|
||||
static void handle_sdp_rfcomm_service_result(sdp_query_event_t * rfcomm_event, void * context){
|
||||
switch (rfcomm_event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE: {
|
||||
sdp_query_rfcomm_service_event_t * service_event = (sdp_query_rfcomm_service_event_t*) rfcomm_event;
|
||||
int name_len = (int)strlen((const char*)service_event->service_name);
|
||||
int event_len = 3 + name_len;
|
||||
uint8_t event[event_len];
|
||||
event[0] = rfcomm_event->type;
|
||||
event[1] = 1 + name_len;
|
||||
event[2] = service_event->channel_nr;
|
||||
memcpy(&event[3], service_event->service_name, name_len);
|
||||
// already an HCI Event
|
||||
const uint8_t * event = (const uint8_t *) event;
|
||||
int event_len = 2 + event[1];
|
||||
hci_dump_packet(HCI_EVENT_PACKET, 0, event, event_len);
|
||||
socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, event, event_len);
|
||||
break;
|
||||
|
@ -374,8 +374,6 @@
|
||||
*/
|
||||
#define RFCOMM_EVENT_PERSISTENT_CHANNEL 0x86
|
||||
|
||||
// data: event (8), len(8), rfcomm_cid (16), modem status (8)
|
||||
|
||||
/**
|
||||
* @format 21
|
||||
* @param rfcomm_cid
|
||||
@ -383,31 +381,26 @@
|
||||
*/
|
||||
#define RFCOMM_EVENT_REMOTE_MODEM_STATUS 0x87
|
||||
|
||||
// data: event (8), len(8), rfcomm_cid (16), rpn_data_t (67)
|
||||
/**
|
||||
* TODO: format for variable data
|
||||
* TODO: format for variable data 2?
|
||||
* @param rfcomm_cid
|
||||
* @param rpn_data
|
||||
*/
|
||||
#define RFCOMM_EVENT_PORT_CONFIGURATION 0x88
|
||||
|
||||
|
||||
// data: event(8), len(8), status(8), service_record_handle(32)
|
||||
/**
|
||||
/**
|
||||
* @format 14
|
||||
* @param status
|
||||
* @param service_record_handle
|
||||
*/
|
||||
#define SDP_SERVICE_REGISTERED 0x90
|
||||
|
||||
// data: event(8), len(8), status(8)
|
||||
/**
|
||||
* @format 1
|
||||
* @param status
|
||||
*/
|
||||
#define SDP_QUERY_COMPLETE 0x91
|
||||
|
||||
// data: event(8), len(8), rfcomm channel(8), name(var)
|
||||
/**
|
||||
* @format 1T
|
||||
* @param rfcomm_channel
|
||||
|
97
src/btstack_event.h
Normal file
97
src/btstack_event.h
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Copyright (C) 2016 BlueKitchen GmbH
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holders nor the names of
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* 4. Any redistribution, use, or modification is done solely for
|
||||
* personal benefit and not for any commercial purpose or for
|
||||
* monetary gain.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
|
||||
* RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* Please inquire about commercial licensing options at
|
||||
* contact@bluekitchen-gmbh.com
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* btstack_event.h
|
||||
*
|
||||
* @brief BTstack event getter/setter
|
||||
* @note Don't edit - generated by tool/btstack_event_generator.py
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __BTSTACK_EVENT_H
|
||||
#define __BTSTACK_EVENT_H
|
||||
|
||||
#if defined __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "btstack_util.h"
|
||||
#include <stdint.h>
|
||||
|
||||
/* API_START */
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get field status from event sdp_query_complete_event
|
||||
* @param Event packet
|
||||
* @return status
|
||||
* @note: btstack_type 1
|
||||
*/
|
||||
static inline uint8_t sdp_query_complete_event_get_status(const uint8_t * event){
|
||||
return event[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get field rfcomm_channel from event sdp_query_rfcomm_service_event
|
||||
* @param Event packet
|
||||
* @return rfcomm_channel
|
||||
* @note: btstack_type 1
|
||||
*/
|
||||
static inline uint8_t sdp_query_rfcomm_service_event_get_rfcomm_channel(const uint8_t * event){
|
||||
return event[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get field name from event sdp_query_rfcomm_service_event
|
||||
* @param Event packet
|
||||
* @return name
|
||||
* @note: btstack_type T
|
||||
*/
|
||||
static inline const char * sdp_query_rfcomm_service_event_get_name(const uint8_t * event){
|
||||
return (const char *) &event[3];
|
||||
}
|
||||
|
||||
|
||||
/* API_END */
|
||||
|
||||
#if defined __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __BTSTACK_EVENT_H
|
@ -59,6 +59,7 @@
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "classic/sdp.h"
|
||||
#include "btstack_debug.h"
|
||||
#include "btstack_event.h"
|
||||
|
||||
#define HFP_HF_FEATURES_SIZE 10
|
||||
#define HFP_AG_FEATURES_SIZE 12
|
||||
@ -414,7 +415,7 @@ void hfp_create_sdp_record(uint8_t * service, uint32_t service_record_handle, ui
|
||||
|
||||
static hfp_connection_t * connection_doing_sdp_query = NULL;
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
sdp_query_complete_event_t * ce;
|
||||
hfp_connection_t * connection = connection_doing_sdp_query;
|
||||
|
||||
@ -422,12 +423,12 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
ve = (const uint8_t *) event;
|
||||
if (!connection) {
|
||||
log_error("handle_query_rfcomm_event alloc connection for RFCOMM port %u failed", ve->channel_nr);
|
||||
log_error("handle_query_rfcomm_event alloc connection for RFCOMM port %u failed", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
return;
|
||||
}
|
||||
connection->rfcomm_channel_nr = ve->channel_nr;
|
||||
connection->rfcomm_channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
connection_doing_sdp_query = NULL;
|
||||
|
@ -48,17 +48,17 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "hci_cmd.h"
|
||||
#include "btstack_run_loop.h"
|
||||
|
||||
#include "hci.h"
|
||||
#include "btstack_memory.h"
|
||||
#include "hci_dump.h"
|
||||
#include "l2cap.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "classic/sdp.h"
|
||||
#include "btstack_debug.h"
|
||||
#include "btstack_event.h"
|
||||
#include "btstack_memory.h"
|
||||
#include "btstack_run_loop.h"
|
||||
#include "classic/sdp.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "hci.h"
|
||||
#include "hci_cmd.h"
|
||||
#include "hci_dump.h"
|
||||
#include "hsp_ag.h"
|
||||
#include "l2cap.h"
|
||||
|
||||
#define RFCOMM_SERVER_CHANNEL 1
|
||||
|
||||
@ -626,14 +626,14 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
sdp_query_complete_event_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
channel_nr = ve->channel_nr;
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", ve->service_name, channel_nr);
|
||||
ve = (const uint8_t *) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (sdp_query_complete_event_t*) event;
|
||||
|
@ -48,18 +48,17 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "hci_cmd.h"
|
||||
#include "btstack_run_loop.h"
|
||||
|
||||
#include "hci.h"
|
||||
#include "btstack_memory.h"
|
||||
#include "hci_dump.h"
|
||||
#include "l2cap.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "classic/sdp.h"
|
||||
#include "btstack_debug.h"
|
||||
#include "btstack_event.h"
|
||||
#include "btstack_memory.h"
|
||||
#include "btstack_run_loop.h"
|
||||
#include "classic/sdp.h"
|
||||
#include "classic/sdp_query_rfcomm.h"
|
||||
#include "hci.h"
|
||||
#include "hci_cmd.h"
|
||||
#include "hci_dump.h"
|
||||
#include "hsp_hs.h"
|
||||
|
||||
#include "l2cap.h"
|
||||
|
||||
#define HSP_AG_OK "OK"
|
||||
#define HSP_AG_ERROR "ERROR"
|
||||
@ -575,14 +574,14 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
sdp_query_complete_event_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
channel_nr = ve->channel_nr;
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", ve->service_name, channel_nr);
|
||||
ve = (const uint8_t*) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (sdp_query_complete_event_t*) event;
|
||||
|
@ -75,6 +75,7 @@ const uint8_t des_attributeIDList[] = { 0x35, 0x05, 0x0A, 0x00, 0x01, 0x01, 0
|
||||
static uint8_t des_serviceSearchPattern[5] = {0x35, 0x03, 0x19, 0x00, 0x00};
|
||||
|
||||
static uint8_t sdp_service_name[SDP_SERVICE_NAME_LEN+1];
|
||||
static uint8_t sdp_service_name_len = 0;
|
||||
static uint8_t sdp_rfcomm_channel_nr = 0;
|
||||
static uint8_t sdp_service_name_header_size;
|
||||
|
||||
@ -96,12 +97,13 @@ static void (*sdp_app_callback)(sdp_query_event_t * event, void * context) = dum
|
||||
static void dummy_notify_app(sdp_query_event_t* event, void * context){}
|
||||
|
||||
static void emit_service(void){
|
||||
sdp_query_rfcomm_service_event_t value_event = {
|
||||
SDP_QUERY_RFCOMM_SERVICE,
|
||||
sdp_rfcomm_channel_nr,
|
||||
(uint8_t *) sdp_service_name
|
||||
};
|
||||
(*sdp_app_callback)((sdp_query_event_t*)&value_event, sdp_app_context);
|
||||
uint8_t event[3+SDP_SERVICE_NAME_LEN+1];
|
||||
event[0] = SDP_QUERY_RFCOMM_SERVICE;
|
||||
event[1] = sdp_service_name_len + 1;
|
||||
event[2] = sdp_rfcomm_channel_nr;
|
||||
memcpy(&event[3], sdp_service_name, sdp_service_name_len);
|
||||
event[3+sdp_service_name_len] = 0;
|
||||
(*sdp_app_callback)((sdp_query_event_t*)event, sdp_app_context);
|
||||
sdp_rfcomm_channel_nr = 0;
|
||||
}
|
||||
|
||||
@ -237,12 +239,14 @@ static void handleServiceNameData(uint32_t attribute_value_length, uint32_t data
|
||||
|
||||
// terminate if name complete
|
||||
if (name_pos >= name_len){
|
||||
sdp_service_name[name_pos] = 0;
|
||||
sdp_service_name[name_pos] = 0;
|
||||
sdp_service_name_len = name_pos;
|
||||
}
|
||||
|
||||
// terminate if buffer full
|
||||
if (name_pos == SDP_SERVICE_NAME_LEN){
|
||||
sdp_service_name[name_pos] = 0;
|
||||
sdp_service_name_len = name_pos;
|
||||
}
|
||||
}
|
||||
|
||||
@ -296,6 +300,7 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
|
||||
}
|
||||
|
||||
void sdp_query_rfcomm_init(void){
|
||||
printf("sdp_query_rfcomm_init\n");
|
||||
// init
|
||||
de_state_init(&de_header_state);
|
||||
de_state_init(&sn_de_header_state);
|
||||
|
@ -54,15 +54,6 @@ extern "C" {
|
||||
|
||||
/* API_START */
|
||||
|
||||
/**
|
||||
* @brief SDP Query RFCOMM event to deliver channel number and service name byte by byte.
|
||||
*/
|
||||
typedef struct sdp_query_rfcomm_service_event {
|
||||
uint8_t type;
|
||||
uint8_t channel_nr;
|
||||
uint8_t * service_name;
|
||||
} sdp_query_rfcomm_service_event_t;
|
||||
|
||||
/**
|
||||
* @brief Registers a callback to receive RFCOMM service and query complete event.
|
||||
*/
|
||||
|
@ -215,12 +215,14 @@ static void sdp_query_complete_response(uint8_t status){
|
||||
}
|
||||
|
||||
static void sdp_query_rfcomm_service_response(uint8_t status){
|
||||
sdp_query_rfcomm_service_event_t service_event = {
|
||||
SDP_QUERY_RFCOMM_SERVICE,
|
||||
sdp_rfcomm_channel_nr,
|
||||
(uint8_t *)sdp_rfcomm_service_name
|
||||
};
|
||||
(*registered_sdp_app_callback)((sdp_query_event_t*)&service_event, registered_sdp_app_context);
|
||||
int sdp_service_name_len = strlen(sdp_rfcomm_service_name);
|
||||
uint8_t event[3+SDP_SERVICE_NAME_LEN+1];
|
||||
event[0] = SDP_QUERY_RFCOMM_SERVICE;
|
||||
event[1] = sdp_service_name_len + 1;
|
||||
event[2] = sdp_rfcomm_channel_nr;
|
||||
memcpy(&event[3], sdp_rfcomm_service_name, sdp_service_name_len);
|
||||
event[3+sdp_service_name_len] = 0;
|
||||
(*registered_sdp_app_callback)((sdp_query_event_t*)&event, registered_sdp_app_context);
|
||||
}
|
||||
|
||||
void sdp_query_rfcomm_channel_and_name_for_uuid(bd_addr_t remote, uint16_t uuid){
|
||||
|
@ -396,12 +396,13 @@ static void handle_found_service(char * name, uint8_t port){
|
||||
}
|
||||
|
||||
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
handle_found_service((char*) ve->service_name, ve->channel_nr);
|
||||
ve = (const uint8_t*) event;
|
||||
handle_found_service(sdp_query_rfcomm_service_event_get_name(ve),
|
||||
sdp_query_rfcomm_service_event_get_rfcomm_channel(ve));
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
printf("SDP SPP Query complete\n");
|
||||
|
@ -140,14 +140,14 @@ static void packet_handler(void * connection, uint8_t packet_type, uint16_t chan
|
||||
}
|
||||
|
||||
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
const uint8_t * ve;
|
||||
sdp_query_complete_event_t * ce;
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
channel_nr = ve->channel_nr;
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", ve->service_name, channel_nr);
|
||||
ve = (const uint8_t*) event;
|
||||
channel_nr = sdp_query_rfcomm_service_event_get_name(ve);
|
||||
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve), channel_nr);
|
||||
break;
|
||||
case SDP_QUERY_COMPLETE:
|
||||
ce = (sdp_query_complete_event_t*) event;
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "btstack_memory.h"
|
||||
#include "hci_dump.h"
|
||||
#include "l2cap.h"
|
||||
#include "btstack_event.h"
|
||||
|
||||
#include "CppUTest/TestHarness.h"
|
||||
#include "CppUTest/CommandLineTestRunner.h"
|
||||
@ -90,15 +91,16 @@ void sdp_query_rfcomm_init();
|
||||
|
||||
|
||||
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
|
||||
sdp_query_rfcomm_service_event_t * ve;
|
||||
sdp_query_complete_event_t * ce;
|
||||
uint8_t * ve = (uint8_t *) event;
|
||||
|
||||
printf("handle_query_rfcomm_event\n");
|
||||
|
||||
switch (event->type){
|
||||
case SDP_QUERY_RFCOMM_SERVICE:
|
||||
ve = (sdp_query_rfcomm_service_event_t*) event;
|
||||
channel_nr[service_index] = ve->channel_nr;
|
||||
channel_nr[service_index] = sdp_query_rfcomm_service_event_get_rfcomm_channel(ve);
|
||||
service_name[service_index] = (char*) malloc(SDP_SERVICE_NAME_LEN+1);
|
||||
strncpy(service_name[service_index], (char*) ve->service_name, SDP_SERVICE_NAME_LEN);
|
||||
strncpy(service_name[service_index], sdp_query_rfcomm_service_event_get_name(ve), SDP_SERVICE_NAME_LEN);
|
||||
service_name[service_index][SDP_SERVICE_NAME_LEN] = 0;
|
||||
// printf("CALLBACK: Service name: '%s', RFCOMM port %u, service index %d\n", service_name[service_index], channel_nr[service_index], service_index);
|
||||
service_index++;
|
||||
|
@ -136,8 +136,9 @@ param_read = {
|
||||
'3' : 'return READ_BT_24(event, {offset});',
|
||||
'4' : 'return READ_BT_32(event, {offset});',
|
||||
'H' : 'return READ_BT_16(event, {offset});',
|
||||
'B' : 'bt_flip_addr({result_name}, (uint8_t*) &event[{offset}]);',
|
||||
'R' : 'return &event[{offset}];'
|
||||
'B' : 'swap48(&event[{offset}], {result_name});',
|
||||
'R' : 'return &event[{offset}];',
|
||||
'T' : 'return (const char *) &event[{offset}];'
|
||||
}
|
||||
|
||||
def c_type_for_btstack_type(type):
|
||||
@ -146,7 +147,7 @@ def c_type_for_btstack_type(type):
|
||||
'R' : 'const uint8_t *', 'S' : 'const uint8_t *',
|
||||
'J' : 'int', 'L' : 'int', 'V' : 'const uint8_t *', 'U' : 'BT_UUID',
|
||||
'X' : 'GATTService', 'Y' : 'GATTCharacteristic', 'Z' : 'GATTCharacteristicDescriptor',
|
||||
'T' : 'String'}
|
||||
'T' : 'const char *'}
|
||||
return param_types[type]
|
||||
|
||||
def size_for_type(type):
|
||||
@ -155,7 +156,10 @@ def size_for_type(type):
|
||||
return param_sizes[type]
|
||||
|
||||
def format_function_name(event_name):
|
||||
return event_name.lower()
|
||||
event_name = event_name.lower()
|
||||
if 'event' in event_name:
|
||||
return event_name;
|
||||
return event_name+'_event'
|
||||
|
||||
def template_for_type(field_type):
|
||||
global c_prototoype_simple_return
|
||||
@ -198,6 +202,8 @@ def create_events(events):
|
||||
fout.write(copyright)
|
||||
fout.write(hfile_header_begin)
|
||||
for event_type, event_name, format, args in events:
|
||||
if not event_name in ['SDP_QUERY_COMPLETE', 'SDP_QUERY_RFCOMM_SERVICE', 'SDP_QUERY_ATTRIBUTE_VALUE', 'SDP_QUERY_SERVICE_RECORD_HANDLE']:
|
||||
continue
|
||||
event_name = format_function_name(event_name)
|
||||
offset = 2
|
||||
supported = all_fields_supported(format)
|
||||
@ -208,7 +214,7 @@ def create_events(events):
|
||||
break
|
||||
text = create_getter(event_name, field_name, field_type, offset, supported)
|
||||
fout.write(text)
|
||||
if field_type == 'R':
|
||||
if field_type in 'RT':
|
||||
break
|
||||
offset += size_for_type(field_type)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user