From 622d0de9a08d2321369ef28bb9d6eca08d90d9d7 Mon Sep 17 00:00:00 2001 From: "matthias.ringwald" Date: Mon, 16 Aug 2010 17:23:22 +0000 Subject: [PATCH] streamline hci_transport interface: only have single send_packet(type,data,size) --- src/hci.c | 8 ++++---- src/hci_transport.h | 3 +-- src/hci_transport_h4.c | 28 ++-------------------------- src/hci_transport_h5.c | 28 +++------------------------- src/hci_transport_usb.c | 11 +++++++++++ 5 files changed, 21 insertions(+), 57 deletions(-) diff --git a/src/hci.c b/src/hci.c index d5e5bef77..412f242c8 100644 --- a/src/hci.c +++ b/src/hci.c @@ -185,8 +185,8 @@ int hci_send_acl_packet(uint8_t *packet, int size){ // 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); - + hci_stack.hci_transport->send_packet(HCI_ACL_DATA_PACKET, packet, size); + return 0; } @@ -517,7 +517,7 @@ void hci_run(){ uint8_t * cmd = (*hci_stack.control->next_command)(hci_stack.config); if (cmd) { int size = 3 + cmd[2]; - hci_stack.hci_transport->send_cmd_packet(cmd, size); + hci_stack.hci_transport->send_packet(HCI_COMMAND_DATA_PACKET, cmd, size); hci_stack.substate = 0; // more init commands break; } @@ -586,7 +586,7 @@ int hci_send_cmd_packet(uint8_t *packet, int size){ // set state = SENT_DISCONNECT hci_stack.num_cmd_packets--; - return hci_stack.hci_transport->send_cmd_packet(packet, size); + return hci_stack.hci_transport->send_packet(HCI_COMMAND_DATA_PACKET, packet, size); } /** diff --git a/src/hci_transport.h b/src/hci_transport.h index bd1c41f6a..9c49c8e15 100644 --- a/src/hci_transport.h +++ b/src/hci_transport.h @@ -46,8 +46,7 @@ typedef struct { int (*open)(void *transport_config); int (*close)(); - int (*send_cmd_packet)(uint8_t *packet, int size); - int (*send_acl_packet)(uint8_t *packet, int size); + int (*send_packet)(uint8_t packet_type, uint8_t *packet, int size); void (*register_packet_handler)(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)); const char * (*get_transport_name)(); } hci_transport_t; diff --git a/src/hci_transport_h4.c b/src/hci_transport_h4.c index 0600316f1..e9e8bb925 100644 --- a/src/hci_transport_h4.c +++ b/src/hci_transport_h4.c @@ -188,35 +188,12 @@ static int h4_close(){ return 0; } -static int h4_send_cmd_packet(uint8_t *packet, int size){ +static int h4_send_packet(uint8_t packet_type, uint8_t * packet, int size){ if (hci_transport_h4->ds == NULL) return -1; if (hci_transport_h4->ds->fd == 0) return -1; - char *data = (char*) packet; - char packet_type = HCI_COMMAND_DATA_PACKET; - hci_dump_packet( (uint8_t) packet_type, 0, packet, size); - write(hci_transport_h4->ds->fd, &packet_type, 1); - while (size > 0) { - int bytes_written = write(hci_transport_h4->ds->fd, data, size); - if (bytes_written < 0) { - return bytes_written; - } - data += bytes_written; - size -= bytes_written; - } - return 0; -} - -static int h4_send_acl_packet(uint8_t *packet, int size){ - if (hci_transport_h4->ds->fd == 0) return -1; - char *data = (char*) packet; - char packet_type = HCI_ACL_DATA_PACKET; - - hci_dump_packet( (uint8_t) packet_type, 0, packet, size); - - write(hci_transport_h4->ds->fd, &packet_type, 1); while (size > 0) { int bytes_written = write(hci_transport_h4->ds->fd, data, size); if (bytes_written < 0) { @@ -316,8 +293,7 @@ hci_transport_t * hci_transport_h4_instance() { hci_transport_h4->ds = NULL; hci_transport_h4->transport.open = h4_open; hci_transport_h4->transport.close = h4_close; - hci_transport_h4->transport.send_cmd_packet = h4_send_cmd_packet; - hci_transport_h4->transport.send_acl_packet = h4_send_acl_packet; + hci_transport_h4->transport.send_packet = h4_send_packet; hci_transport_h4->transport.register_packet_handler = h4_register_packet_handler; hci_transport_h4->transport.get_transport_name = h4_get_transport_name; } diff --git a/src/hci_transport_h5.c b/src/hci_transport_h5.c index ad1cd863b..209b0ce1d 100644 --- a/src/hci_transport_h5.c +++ b/src/hci_transport_h5.c @@ -168,31 +168,10 @@ static int h5_close(){ return 0; } -static int h5_send_cmd_packet(uint8_t *packet, int size){ +static int h5_send_packet(uint8_t packet_type, uint8_t *packet, int size){ if (hci_transport_h5->ds == NULL) return -1; if (hci_transport_h5->ds->fd == 0) return -1; char *data = (char*) packet; - char packet_type = HCI_COMMAND_DATA_PACKET; - - hci_dump_packet( (uint8_t) packet_type, 0, packet, size); - - write(hci_transport_h5->ds->fd, &packet_type, 1); - while (size > 0) { - int bytes_written = write(hci_transport_h5->ds->fd, data, size); - if (bytes_written < 0) { - return bytes_written; - } - data += bytes_written; - size -= bytes_written; - } - return 0; -} - -static int h5_send_acl_packet(uint8_t *packet, int size){ - if (hci_transport_h5->ds->fd == 0) return -1; - - char *data = (char*) packet; - char packet_type = HCI_ACL_DATA_PACKET; hci_dump_packet( (uint8_t) packet_type, 0, packet, size); @@ -318,9 +297,8 @@ hci_transport_t * hci_transport_h5_instance() { hci_transport_h5->ds = NULL; hci_transport_h5->transport.open = h5_open; hci_transport_h5->transport.close = h5_close; - hci_transport_h5->transport.send_cmd_packet = h5_send_cmd_packet; - hci_transport_h5->transport.send_acl_packet = h5_send_acl_packet; - hci_transport_h5->transport.register_packet_handler = h5_register_event_packet_handler; + hci_transport_h5->transport.send_packet = h5_send_packet; + hci_transport_h5->transport.register_packet_handler = h5_register_event_packet_handler; hci_transport_h5->transport.get_transport_name = h5_get_transport_name; } return (hci_transport_t *) hci_transport_h5; diff --git a/src/hci_transport_usb.c b/src/hci_transport_usb.c index 9828d26ce..7973dd02b 100644 --- a/src/hci_transport_usb.c +++ b/src/hci_transport_usb.c @@ -373,6 +373,17 @@ static int usb_send_acl_packet(uint8_t *packet, int size){ return 0; } +static int usb_send_packet(uint8_t packet_type, uint8_8 * packet, int size){ + switch (packet_type){ + case HCI_COMMAND_DATA_PACKET: + return usb_send_cmd_packet(packet, size); + case HCI_ACL_DATA_PACKET: + return usb_send_acl_packet(packet, size); + default: + return -1; + } +} + static void usb_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, int size)){ event_packet_handler = handler; }