diff --git a/src/daemon.c b/src/daemon.c index f8e804f10..679daed4d 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -216,6 +216,9 @@ static int daemon_client_handler(connection_t *connection, uint16_t packet_type, } break; } + if (err) { + printf("Daemon Handler: err %d\n", err); + } return err; } @@ -258,21 +261,16 @@ static void deamon_status_event_handler(uint8_t *packet, uint16_t size){ } static void daemon_packet_handler(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - switch (packet_type) { - case HCI_EVENT_PACKET: - deamon_status_event_handler(packet, size); - // forward event to client(s) - if (connection) { - socket_connection_send_packet(connection, packet_type, 0, packet, size); - } else { - socket_connection_send_packet_all(packet_type, 0, packet, size); - } - break; - case L2CAP_DATA_PACKET: - socket_connection_send_packet(connection, L2CAP_DATA_PACKET, channel, packet, size); - break; - default: - break; + if (packet_type == HCI_EVENT_PACKET) { + deamon_status_event_handler(packet, size); + if (packet[0] == HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS) { + socket_connection_retry_parked(); + } + } + if (connection) { + socket_connection_send_packet(connection, packet_type, channel, packet, size); + } else { + socket_connection_send_packet_all(packet_type, channel, packet, size); } } diff --git a/src/hci.c b/src/hci.c index a43f4aea2..f0361f8d4 100644 --- a/src/hci.c +++ b/src/hci.c @@ -198,7 +198,7 @@ int hci_send_acl_packet(uint8_t *packet, int size){ // count packet connection->num_acl_packets_sent++; - log_dbg("hci_send_acl_packet - handle %u, sent %u\n", connection->con_handle, connection->num_acl_packets_sent); + // log_dbg("hci_send_acl_packet - handle %u, sent %u\n", connection->con_handle, connection->num_acl_packets_sent); // send packet - ignore errors hci_stack.hci_transport->send_acl_packet(packet, size); @@ -326,7 +326,7 @@ static void event_handler(uint8_t *packet, int size){ continue; } conn->num_acl_packets_sent -= num_packets; - log_dbg("hci_number_completed_packet (hci) %u processed for handle %u, outstanding %u\n", num_packets, handle, conn->num_acl_packets_sent); + // log_dbg("hci_number_completed_packet %u processed for handle %u, outstanding %u\n", num_packets, handle, conn->num_acl_packets_sent); } break; diff --git a/src/l2cap.c b/src/l2cap.c index 356322a95..40b43e716 100644 --- a/src/l2cap.c +++ b/src/l2cap.c @@ -191,8 +191,10 @@ int l2cap_send_signaling_packet(hci_con_handle_t handle, L2CAP_SIGNALING_COMMAND int l2cap_send_internal(uint16_t local_cid, uint8_t *data, uint16_t len){ // check for free places on BT module - if (!hci_number_free_acl_slots()) return -1; - + if (!hci_number_free_acl_slots()) { + log_dbg("l2cap_send_internal cid %u, BT module full <-----\n", local_cid); + return -1; + } int err = 0; // find channel for local_cid, construct l2cap packet and send @@ -202,11 +204,11 @@ int l2cap_send_internal(uint16_t local_cid, uint8_t *data, uint16_t len){ ++channel->packets_outgoing; if (channel->packets_granted > 0){ --channel->packets_granted; + // log_dbg("l2cap_send_internal cid %u, 1 credit used, credits left %u; outgoing count %u\n", + // local_cid, channel->packets_granted, channel->packets_outgoing); } else { log_err("l2cap_send_internal cid %u, no credits!\n", local_cid); } - log_dbg("l2cap_send_internal cid %u, 1 credit used, credits left %u; outgoing count %u\n", - local_cid, channel->packets_granted, channel->packets_outgoing); // 0 - Connection handle : PB=10 : BC=00 bt_store_16(acl_buffer, 0, channel->handle | (2 << 12) | (0 << 14)); @@ -366,8 +368,8 @@ void l2cap_event_handler( uint8_t *packet, uint16_t size ){ // decrease packets if (fullest_channel) { fullest_channel->packets_outgoing--; - log_dbg("hci_number_completed_packet (l2cap) for cid %u, outgoing count %u\n", - fullest_channel->local_cid, fullest_channel->packets_outgoing); + // log_dbg("hci_number_completed_packet (l2cap) for cid %u, outgoing count %u\n", + // fullest_channel->local_cid, fullest_channel->packets_outgoing); } else { log_err("hci_number_completed_packet but no outgoing packet in records\n"); } diff --git a/src/socket_connection.c b/src/socket_connection.c index 2e93adaf0..6324ce3cd 100644 --- a/src/socket_connection.c +++ b/src/socket_connection.c @@ -221,6 +221,7 @@ int socket_connection_hci_process(struct data_source *ds) { * pre: connections get parked iff packet was dispatched but could not be sent */ void socket_connection_retry_parked(){ + // log_dbg("socket_connection_hci_process retry parked\n"); linked_item_t *next; linked_item_t *it; for (it = (linked_item_t *) parked; it ; it = next){ @@ -228,6 +229,7 @@ void socket_connection_retry_parked(){ connection_t * conn = (connection_t *) it; // dispatch packet !!! connection, type, channel, data, size + log_dbg("socket_connection_hci_process retry parked #0\n"); int dispatch_err = (*socket_connection_packet_callback)(conn, READ_BT_16( conn->buffer, 0), READ_BT_16( conn->buffer, 2), &conn->buffer[sizeof(packet_header_t)], READ_BT_16( conn->buffer, 4)); // "un-park" if successful