mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-06 21:40:04 +00:00
drop connection from rfcomm_register_service_internal and rename to rfcomm_register_service
This commit is contained in:
parent
d43f0d5d08
commit
457b5cb16b
@ -260,7 +260,7 @@ int btstack_main(void)
|
||||
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(rfcomm_packet_handler);
|
||||
rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 0xffff);
|
||||
rfcomm_register_service(RFCOMM_SERVER_CHANNEL, 0xffff);
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -98,7 +98,7 @@ static void spp_service_setup(void){
|
||||
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(rfcomm_packet_handler);
|
||||
rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 0xffff); // reserved channel, mtu limited by l2cap
|
||||
rfcomm_register_service(RFCOMM_SERVER_CHANNEL, 0xffff); // reserved channel, mtu limited by l2cap
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -455,7 +455,7 @@ static void daemon_rfcomm_close_connection(client_state_t * daemon_client){
|
||||
linked_list_iterator_init(&it, rfcomm_services);
|
||||
while (linked_list_iterator_has_next(&it)){
|
||||
linked_list_uint32_t * item = (linked_list_uint32_t*) linked_list_iterator_next(&it);
|
||||
rfcomm_unregister_service_internal(item->value);
|
||||
rfcomm_unregister_service(item->value);
|
||||
linked_list_remove(rfcomm_services, (linked_item_t *) item);
|
||||
free(item);
|
||||
}
|
||||
@ -647,6 +647,17 @@ static void l2cap_emit_service_registered(void *connection, uint8_t status, uint
|
||||
socket_connection_send_packet(connection, HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
static void rfcomm_emit_service_registered(void *connection, uint8_t status, uint8_t channel){
|
||||
log_info("RFCOMM_EVENT_SERVICE_REGISTERED status 0x%x channel #%u", status, channel);
|
||||
uint8_t event[4];
|
||||
event[0] = RFCOMM_EVENT_SERVICE_REGISTERED;
|
||||
event[1] = sizeof(event) - 2;
|
||||
event[2] = status;
|
||||
event[3] = channel;
|
||||
hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
socket_connection_send_packet(connection, HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
static void send_rfcomm_create_channel_failed(void * connection, bd_addr_t addr, uint8_t server_channel, uint8_t status){
|
||||
// emit error - see rfcom.c:rfcomm_emit_channel_open_failed_outgoing_memory(..)
|
||||
uint8_t event[16];
|
||||
@ -915,18 +926,20 @@ static int btstack_command_handler(connection_t *connection, uint8_t *packet, ui
|
||||
case RFCOMM_REGISTER_SERVICE:
|
||||
rfcomm_channel = packet[3];
|
||||
mtu = READ_BT_16(packet, 4);
|
||||
rfcomm_register_service_internal(connection, rfcomm_channel, mtu);
|
||||
status = rfcomm_register_service(rfcomm_channel, mtu);
|
||||
rfcomm_emit_service_registered(connection, status, rfcomm_channel);
|
||||
break;
|
||||
case RFCOMM_REGISTER_SERVICE_WITH_CREDITS:
|
||||
rfcomm_channel = packet[3];
|
||||
mtu = READ_BT_16(packet, 4);
|
||||
rfcomm_credits = packet[6];
|
||||
rfcomm_register_service_with_initial_credits_internal(connection, rfcomm_channel, mtu, rfcomm_credits);
|
||||
status = rfcomm_register_service_with_initial_credits(rfcomm_channel, mtu, rfcomm_credits);
|
||||
rfcomm_emit_service_registered(connection, status, rfcomm_channel);
|
||||
break;
|
||||
case RFCOMM_UNREGISTER_SERVICE:
|
||||
service_channel = READ_BT_16(packet, 3);
|
||||
daemon_remove_client_rfcomm_service(connection, service_channel);
|
||||
rfcomm_unregister_service_internal(service_channel);
|
||||
rfcomm_unregister_service(service_channel);
|
||||
break;
|
||||
case RFCOMM_ACCEPT_CONNECTION:
|
||||
cid = READ_BT_16(packet, 3);
|
||||
|
@ -222,7 +222,7 @@ int btstack_main(int argc, const char * argv[]){
|
||||
// init RFCOMM
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler);
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
rfcomm_register_service(rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -212,7 +212,7 @@ int btstack_main(int argc, const char * argv[]){
|
||||
// init RFCOMM
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler);
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
rfcomm_register_service(rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -222,7 +222,7 @@ int btstack_main(int argc, const char * argv[]){
|
||||
// init RFCOMM
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler);
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
rfcomm_register_service(rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -212,7 +212,7 @@ int btstack_main(int argc, const char * argv[]){
|
||||
// init RFCOMM
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler);
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
rfcomm_register_service(rfcomm_channel_nr, 100); // reserved channel, mtu=100
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
@ -1013,7 +1013,7 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte){
|
||||
}
|
||||
|
||||
void hfp_init(uint16_t rfcomm_channel_nr){
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 0xffff);
|
||||
rfcomm_register_service(rfcomm_channel_nr, 0xffff);
|
||||
sdp_query_rfcomm_register_callback(handle_query_rfcomm_event, NULL);
|
||||
}
|
||||
|
||||
|
@ -252,7 +252,7 @@ void hsp_ag_init(uint8_t rfcomm_channel_nr){
|
||||
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler);
|
||||
rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap
|
||||
rfcomm_register_service(rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap
|
||||
|
||||
sdp_query_rfcomm_register_callback(handle_query_rfcomm_event, NULL);
|
||||
|
||||
|
@ -200,17 +200,6 @@ static void rfcomm_emit_credits(rfcomm_channel_t * channel, uint8_t credits) {
|
||||
(*app_packet_handler)(channel->connection, HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event));
|
||||
}
|
||||
|
||||
static void rfcomm_emit_service_registered(void *connection, uint8_t status, uint8_t channel){
|
||||
log_info("RFCOMM_EVENT_SERVICE_REGISTERED status 0x%x channel #%u", status, channel);
|
||||
uint8_t event[4];
|
||||
event[0] = RFCOMM_EVENT_SERVICE_REGISTERED;
|
||||
event[1] = sizeof(event) - 2;
|
||||
event[2] = status;
|
||||
event[3] = channel;
|
||||
hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
(*app_packet_handler)(connection, HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event));
|
||||
}
|
||||
|
||||
static void rfcomm_emit_remote_line_status(rfcomm_channel_t *channel, uint8_t line_status){
|
||||
log_info("RFCOMM_EVENT_REMOTE_LINE_STATUS cid 0x%02x c, line status 0x%x", channel->rfcomm_cid, line_status);
|
||||
uint8_t event[5];
|
||||
@ -1537,7 +1526,7 @@ static void rfcomm_channel_packet_handler(rfcomm_multiplexer_t * multiplexer, u
|
||||
rfcomm_run();
|
||||
}
|
||||
|
||||
void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||
static void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||
|
||||
// multiplexer handler
|
||||
int handled = 0;
|
||||
@ -2239,21 +2228,20 @@ void rfcomm_disconnect_internal(uint16_t rfcomm_cid){
|
||||
rfcomm_run();
|
||||
}
|
||||
|
||||
static void rfcomm_register_service2(void * connection, uint8_t channel, uint16_t max_frame_size, uint8_t incoming_flow_control, uint8_t initial_credits){
|
||||
static uint8_t rfcomm_register_service_internal(uint8_t channel, uint16_t max_frame_size, uint8_t incoming_flow_control, uint8_t initial_credits){
|
||||
log_info("RFCOMM_REGISTER_SERVICE channel #%u mtu %u flow_control %u credits %u",
|
||||
channel, max_frame_size, incoming_flow_control, initial_credits);
|
||||
|
||||
// check if already registered
|
||||
rfcomm_service_t * service = rfcomm_service_for_channel(channel);
|
||||
if (service){
|
||||
rfcomm_emit_service_registered(connection, RFCOMM_CHANNEL_ALREADY_REGISTERED, channel);
|
||||
return;
|
||||
return RFCOMM_CHANNEL_ALREADY_REGISTERED;
|
||||
}
|
||||
|
||||
// alloc structure
|
||||
service = btstack_memory_rfcomm_service_get();
|
||||
if (!service) {
|
||||
rfcomm_emit_service_registered(connection, BTSTACK_MEMORY_ALLOC_FAILED, channel);
|
||||
return;
|
||||
return BTSTACK_MEMORY_ALLOC_FAILED;
|
||||
}
|
||||
|
||||
// register with l2cap if not registered before, max MTU
|
||||
@ -2262,7 +2250,6 @@ static void rfcomm_register_service2(void * connection, uint8_t channel, uint16_
|
||||
}
|
||||
|
||||
// fill in
|
||||
service->connection = connection;
|
||||
service->server_channel = channel;
|
||||
service->max_frame_size = max_frame_size;
|
||||
service->incoming_flow_control = incoming_flow_control;
|
||||
@ -2271,19 +2258,18 @@ static void rfcomm_register_service2(void * connection, uint8_t channel, uint16_
|
||||
// add to services list
|
||||
linked_list_add(&rfcomm_services, (linked_item_t *) service);
|
||||
|
||||
// done
|
||||
rfcomm_emit_service_registered(connection, 0, channel);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rfcomm_register_service_with_initial_credits_internal(void * connection, uint8_t channel, uint16_t max_frame_size, uint8_t initial_credits){
|
||||
rfcomm_register_service2(connection, channel, max_frame_size, 1, initial_credits);
|
||||
uint8_t rfcomm_register_service_with_initial_credits(uint8_t channel, uint16_t max_frame_size, uint8_t initial_credits){
|
||||
return rfcomm_register_service_internal(channel, max_frame_size, 1, initial_credits);
|
||||
}
|
||||
|
||||
void rfcomm_register_service_internal(void * connection, uint8_t channel, uint16_t max_frame_size){
|
||||
rfcomm_register_service2(connection, channel, max_frame_size, 0,RFCOMM_CREDITS);
|
||||
uint8_t rfcomm_register_service(uint8_t channel, uint16_t max_frame_size){
|
||||
return rfcomm_register_service_internal(channel, max_frame_size, 0,RFCOMM_CREDITS);
|
||||
}
|
||||
|
||||
void rfcomm_unregister_service_internal(uint8_t service_channel){
|
||||
void rfcomm_unregister_service(uint8_t service_channel){
|
||||
log_info("RFCOMM_UNREGISTER_SERVICE #%u", service_channel);
|
||||
rfcomm_service_t *service = rfcomm_service_for_channel(service_channel);
|
||||
if (!service) return;
|
||||
|
@ -409,17 +409,17 @@ void rfcomm_disconnect_internal(uint16_t rfcomm_cid);
|
||||
/**
|
||||
* @brief Registers RFCOMM service for a server channel and a maximum frame size, and assigns a packet handler. On embedded systems, use NULL for connection parameter. This channel provides automatically enough credits to the remote side.
|
||||
*/
|
||||
void rfcomm_register_service_internal(void * connection, uint8_t channel, uint16_t max_frame_size);
|
||||
uint8_t rfcomm_register_service(uint8_t channel, uint16_t max_frame_size);
|
||||
|
||||
/**
|
||||
* @brief Registers RFCOMM service for a server channel and a maximum frame size, and assigns a packet handler. On embedded systems, use NULL for connection parameter. This channel will use explicit credit management. During channel establishment, an initial amount of credits is provided.
|
||||
*/
|
||||
void rfcomm_register_service_with_initial_credits_internal(void * connection, uint8_t channel, uint16_t max_frame_size, uint8_t initial_credits);
|
||||
uint8_t rfcomm_register_service_with_initial_credits(uint8_t channel, uint16_t max_frame_size, uint8_t initial_credits);
|
||||
|
||||
/**
|
||||
* @brief Unregister RFCOMM service.
|
||||
*/
|
||||
void rfcomm_unregister_service_internal(uint8_t service_channel);
|
||||
void rfcomm_unregister_service(uint8_t service_channel);
|
||||
|
||||
/**
|
||||
* @brief Accepts/Deny incoming RFCOMM connection.
|
||||
|
@ -778,7 +778,7 @@ int btstack_main(int argc, const char * argv[]){
|
||||
|
||||
rfcomm_init();
|
||||
rfcomm_register_packet_handler(packet_handler2);
|
||||
rfcomm_register_service_internal(NULL, RFCOMM_SERVER_CHANNEL, 150); // reserved channel, mtu=100
|
||||
rfcomm_register_service(RFCOMM_SERVER_CHANNEL, 150); // reserved channel, mtu=100
|
||||
|
||||
// init SDP, create record for SPP and register with SDP
|
||||
sdp_init();
|
||||
|
Loading…
x
Reference in New Issue
Block a user