drop connection from rfcomm_register_service_internal and rename to rfcomm_register_service

This commit is contained in:
Matthias Ringwald 2015-11-13 22:36:27 +01:00
parent d43f0d5d08
commit 457b5cb16b
12 changed files with 40 additions and 41 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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);

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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);
}

View File

@ -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);

View File

@ -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;

View File

@ -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.

View File

@ -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();