From 80d52d6be7321bc40d8ef8c4ea2a1afbfbed435b Mon Sep 17 00:00:00 2001 From: "matthias.ringwald" Date: Tue, 29 Sep 2009 19:40:55 +0000 Subject: [PATCH] clean up command names and headers --- TODO.txt | 2 ++ example/mitm.c | 4 +-- example/rfcomm.c | 8 ++--- example/test.c | 8 ++--- include/btstack/hci_cmds.h | 61 +++++++++++--------------------------- include/btstack/utils.h | 4 +++ src/daemon.c | 12 ++++---- src/hci.c | 10 +++---- src/hci.h | 26 ++++++++++++++++ src/hci_cmds.c | 7 +++-- src/l2cap.c | 6 ++-- 11 files changed, 78 insertions(+), 70 deletions(-) diff --git a/TODO.txt b/TODO.txt index 1a0a2638a..d464ab232 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1,6 +1,7 @@ /* new todo file for BTstack */ Last milestone reached: create script to build APT package for BTdeamon, Resources, and BTstack client library +Last change: clean up names and headers NEXT: @@ -10,6 +11,7 @@ NEXT: - btstack error - bug: Status bar icon in wrong state (on instead of connected) with WiiMoteDemo - bug: debug BlueTool's "I'm not a Bluetooth stack" error message +- check that iPhone sleep mode is handled somehow - provide test version by setting up APT repository within BTstack SVN - instructions: http://www.saurik.com/id/7 diff --git a/example/mitm.c b/example/mitm.c index 9a486a6ab..b39db27e4 100644 --- a/example/mitm.c +++ b/example/mitm.c @@ -53,8 +53,8 @@ void data_handler(uint8_t *packet, uint16_t size){ void event_handler(uint8_t *packet, uint16_t size){ // bt stack activated, get started - set local name - if (packet[0] == HCI_EVENT_BTSTACK_WORKING || - (packet[0] == HCI_EVENT_BTSTACK_STATE && packet[2] == HCI_STATE_WORKING)) { + if (packet[0] == BTSTACK_EVENT_WORKING || + (packet[0] == BTSTACK_EVENT_STATE && packet[2] == HCI_STATE_WORKING)) { bt_send_cmd(&hci_write_local_name, NAME); } if ( COMMAND_COMPLETE_EVENT(packet, hci_write_local_name) ) { diff --git a/example/rfcomm.c b/example/rfcomm.c index 13f29102a..b4236ebfe 100644 --- a/example/rfcomm.c +++ b/example/rfcomm.c @@ -53,14 +53,14 @@ void _bt_rfcomm_send_sabm(uint16_t source_cid, uint8_t initiator, uint8_t dlci) void event_handler(uint8_t *packet, uint16_t size){ // handle HCI init failure - if (packet[0] == HCI_EVENT_POWERON_FAILED){ + if (packet[0] == BTSTACK_EVENT_POWERON_FAILED){ printf("HCI Init failed - make sure you have turned off Bluetooth in the System Settings\n"); exit(1); } // bt stack activated, get started - set local name - if (packet[0] == HCI_EVENT_BTSTACK_WORKING || - (packet[0] == HCI_EVENT_BTSTACK_STATE && packet[2] == HCI_STATE_WORKING)) { + if (packet[0] == BTSTACK_EVENT_WORKING || + (packet[0] == BTSTACK_EVENT_STATE && packet[2] == HCI_STATE_WORKING)) { bt_send_cmd(&hci_write_local_name, "BTstack-Test"); } @@ -84,7 +84,7 @@ void event_handler(uint8_t *packet, uint16_t size){ } // inform about new l2cap connection - if (packet[0] == HCI_EVENT_L2CAP_CHANNEL_OPENED){ + if (packet[0] == L2CAP_EVENT_CHANNEL_OPENED){ bd_addr_t addr; bt_flip_addr(addr, &packet[2]); uint16_t psm = READ_BT_16(packet, 10); diff --git a/example/test.c b/example/test.c index dca24b226..510900236 100644 --- a/example/test.c +++ b/example/test.c @@ -35,14 +35,14 @@ void data_handler(uint8_t *packet, uint16_t size){ void event_handler(uint8_t *packet, uint16_t size){ // handle HCI init failure - if (packet[0] == HCI_EVENT_POWERON_FAILED){ + if (packet[0] == BTSTACK_EVENT_POWERON_FAILED){ printf("HCI Init failed - make sure you have turned off Bluetooth in the System Settings\n"); exit(1); } // bt stack activated, get started - set local name - if (packet[0] == HCI_EVENT_BTSTACK_WORKING || - (packet[0] == HCI_EVENT_BTSTACK_STATE && packet[2] == HCI_STATE_WORKING)) { + if (packet[0] == BTSTACK_EVENT_WORKING || + (packet[0] == BTSTACK_EVENT_STATE && packet[2] == HCI_STATE_WORKING)) { bt_send_cmd(&hci_write_local_name, "BTstack-Test"); } @@ -64,7 +64,7 @@ void event_handler(uint8_t *packet, uint16_t size){ } // inform about new l2cap connection - if (packet[0] == HCI_EVENT_L2CAP_CHANNEL_OPENED){ + if (packet[0] == L2CAP_EVENT_CHANNEL_OPENED){ bd_addr_t addr; bt_flip_addr(addr, &packet[2]); uint16_t psm = READ_BT_16(packet, 10); diff --git a/include/btstack/hci_cmds.h b/include/btstack/hci_cmds.h index e3f6aab46..4431398de 100644 --- a/include/btstack/hci_cmds.h +++ b/include/btstack/hci_cmds.h @@ -10,18 +10,11 @@ #include #include -// packet header lenghts -#define HCI_CMD_DATA_PKT_HDR 0x03 -#define HCI_ACL_DATA_PKT_HDR 0x04 -#define HCI_SCO_DATA_PKT_HDR 0x03 -#define HCI_EVENT_PKT_HDR 0x02 - // calculate combined ogf/ocf value #define OPCODE(ogf, ocf) (ocf | ogf << 10) -// get HCI CMD OGF -#define READ_CMD_OGF(buffer) (buffer[1] >> 2) -#define READ_CMD_OCF(buffer) ((buffer[1] & 0x03) << 8 | buffer[0]) +// check if command complete event for given command +#define COMMAND_COMPLETE_EVENT(event,cmd) ( event[0] == HCI_EVENT_COMMAND_COMPLETE && READ_BT_16(event,3) == cmd.opcode) // OGFs #define OGF_LINK_CONTROL 0x01 @@ -30,23 +23,6 @@ #define OGF_BTSTACK 0x3d #define OGF_VENDOR 0x3f -// cmds for BTstack - -// get state: @returns HCI_STATE -#define HCI_BTSTACK_GET_STATE 0x01 - -// set power mode: @param HCI_POWER_MODE -#define HCI_BTSTACK_SET_POWER_MODE 0x02 - -// set capture mode: @param on -#define HCI_BTSTACK_SET_ACL_CAPTURE_MODE 0x03 - -// create l2cap channel: @param bd_addr(48), psm (16) -#define L2CAP_CREATE_CHANNEL 0x20 - -// disconnect l2cap disconnect, @param channel(16), reason(8) -#define L2CAP_DISCONNECT 0x21 - // Events from host controller to host #define HCI_EVENT_INQUIRY_COMPLETE 0x01 #define HCI_EVENT_INQUIRY_RESULT 0x02 @@ -80,34 +56,33 @@ #define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F #define HCI_EVENT_VENDOR_SPECIFIC 0xFF +// last used HCI_EVENT in 2.1 is 0x3d + // events from BTstack for application/client lib -#define HCI_EVENT_BTSTACK_WORKING 0x80 -#define HCI_EVENT_BTSTACK_STATE 0x81 - -// data: event (8), len(8), address(48), handle (16), psm (16), source_cid(16), dest_cid (16) -#define HCI_EVENT_L2CAP_CHANNEL_OPENED 0x82 - -// data: event (8), len(8), channel (16) -#define HCI_EVENT_L2CAP_CHANNEL_CLOSED 0x83 - -// data: event(8), len(8), handle(16) -#define HCI_EVENT_L2CAP_TIMEOUT_CHECK 0x84 +#define BTSTACK_EVENT_WORKING 0x60 +#define BTSTACK_EVENT_STATE 0x61 // data: event(8), len(8), nr hci connections -#define HCI_EVENT_NR_CONNECTIONS_CHANGED 0x85 +#define BTSTACK_EVENT_NR_CONNECTIONS_CHANGED 0x62 // data: none -#define HCI_EVENT_POWERON_FAILED 0x86 +#define BTSTACK_EVENT_POWERON_FAILED 0x63 // data: event(8) -#define DAEMON_CONNECTION_CLOSED 0xc0 +#define DAEMON_CONNECTION_CLOSED 0x70 // data: event(8), nr_connections(8) -#define DAEMON_NR_CONNECTIONS_CHANGED 0xc1 +#define DAEMON_NR_CONNECTIONS_CHANGED 0x71 -#define COMMAND_COMPLETE_EVENT(event,cmd) ( event[0] == HCI_EVENT_COMMAND_COMPLETE && READ_BT_16(event,3) == cmd.opcode) -#define IS_COMMAND(packet, command) (READ_BT_16(packet,0) == command.opcode) +// data: event (8), len(8), address(48), handle (16), psm (16), source_cid(16), dest_cid (16) +#define L2CAP_EVENT_CHANNEL_OPENED 0x80 + +// data: event (8), len(8), channel (16) +#define L2CAP_EVENT_CHANNEL_CLOSED 0x81 + +// data: event(8), len(8), handle(16) +#define L2CAP_EVENT_TIMEOUT_CHECK 0x82 /** * Default INQ Mode diff --git a/include/btstack/utils.h b/include/btstack/utils.h index 8677d1b50..b05696378 100644 --- a/include/btstack/utils.h +++ b/include/btstack/utils.h @@ -32,6 +32,10 @@ typedef uint8_t link_key_t[LINK_KEY_LEN]; #define READ_BT_24( buffer, pos) ( ((uint32_t) buffer[pos]) | (((uint32_t)buffer[pos+1]) << 8) | (((uint32_t)buffer[pos+2]) << 16)) #define READ_BT_32( buffer, pos) ( ((uint32_t) buffer[pos]) | (((uint32_t)buffer[pos+1]) << 8) | (((uint32_t)buffer[pos+2]) << 16) | (((uint32_t) buffer[pos+3])) << 24) +// HCI CMD OGF/OCF +#define READ_CMD_OGF(buffer) (buffer[1] >> 2) +#define READ_CMD_OCF(buffer) ((buffer[1] & 0x03) << 8 | buffer[0]) + // ACL Packet #define READ_ACL_CONNECTION_HANDLE( buffer ) ( READ_BT_16(buffer,0) & 0x0fff) #define READ_ACL_FLAGS( buffer ) ( buffer[1] >> 4 ) diff --git a/src/daemon.c b/src/daemon.c index 494deca41..99dad1f67 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -71,13 +71,13 @@ static int btstack_command_handler(connection_t *connection, uint8_t *packet, ui uint8_t reason; // BTstack internal commands - 16 Bit OpCode, 8 Bit ParamLen, Params... switch (READ_CMD_OCF(packet)){ - case HCI_BTSTACK_GET_STATE: + case BTSTACK_GET_STATE: hci_emit_state(); break; - case HCI_BTSTACK_SET_POWER_MODE: + case BTSTACK_SET_POWER_MODE: hci_power_control(packet[3]); break; - case HCI_BTSTACK_SET_ACL_CAPTURE_MODE: + case BTSTACK_SET_ACL_CAPTURE_MODE: if (packet[3]) { l2cap_set_capture_connection(connection); } else { @@ -143,10 +143,10 @@ static int daemon_client_handler(connection_t *connection, uint16_t packet_type, static void daemon_event_handler(uint8_t *packet, uint16_t size){ // handle state event - if (packet[0] == HCI_EVENT_BTSTACK_WORKING){ + if (packet[0] == BTSTACK_EVENT_WORKING){ bluetooth_status_handler(BLUETOOTH_ON); } - if (packet[0] == HCI_EVENT_BTSTACK_STATE){ + if (packet[0] == BTSTACK_EVENT_STATE){ if (packet[2] == HCI_STATE_WORKING) { bluetooth_status_handler(BLUETOOTH_ON); } @@ -154,7 +154,7 @@ static void daemon_event_handler(uint8_t *packet, uint16_t size){ bluetooth_status_handler(BLUETOOTH_OFF); } } - if (packet[0] == HCI_EVENT_NR_CONNECTIONS_CHANGED){ + if (packet[0] == BTSTACK_EVENT_NR_CONNECTIONS_CHANGED){ if (packet[2]) { bluetooth_status_handler(BLUETOOTH_ACTIVE); } else { diff --git a/src/hci.c b/src/hci.c index 9af931b8e..775381056 100644 --- a/src/hci.c +++ b/src/hci.c @@ -331,7 +331,7 @@ void hci_run(){ case 4: // done. hci_stack.state = HCI_STATE_WORKING; - micro_packet = HCI_EVENT_BTSTACK_WORKING; + micro_packet = BTSTACK_EVENT_WORKING; hci_stack.event_packet_handler(µ_packet, 1); break; default: @@ -401,7 +401,7 @@ int hci_send_cmd(hci_cmd_t *cmd, ...){ void hci_emit_state(){ uint8_t len = 3; uint8_t event[len]; - event[0] = HCI_EVENT_BTSTACK_STATE; + event[0] = BTSTACK_EVENT_STATE; event[1] = 1; event[2] = hci_stack.state; hci_dump_packet( HCI_EVENT_PACKET, 0, event, len); @@ -424,7 +424,7 @@ void hci_emit_connection_complete(hci_connection_t *conn){ void hci_emit_l2cap_check_timeout(hci_connection_t *conn){ uint8_t len = 4; uint8_t event[len]; - event[0] = HCI_EVENT_L2CAP_TIMEOUT_CHECK; + event[0] = L2CAP_EVENT_TIMEOUT_CHECK; event[1] = 2; bt_store_16(event, 2, conn->con_handle); hci_dump_packet( HCI_EVENT_PACKET, 0, event, len); @@ -434,7 +434,7 @@ void hci_emit_l2cap_check_timeout(hci_connection_t *conn){ void hci_emit_nr_connections_changed(){ uint8_t len = 3; uint8_t event[len]; - event[0] = HCI_EVENT_NR_CONNECTIONS_CHANGED; + event[0] = BTSTACK_EVENT_NR_CONNECTIONS_CHANGED; event[1] = 1; event[2] = nr_hci_connections(); hci_dump_packet( HCI_EVENT_PACKET, 0, event, len); @@ -444,7 +444,7 @@ void hci_emit_nr_connections_changed(){ void hci_emit_hci_open_failed(){ uint8_t len = 1; uint8_t event[len]; - event[0] = HCI_EVENT_POWERON_FAILED; + event[0] = BTSTACK_EVENT_POWERON_FAILED; hci_dump_packet( HCI_EVENT_PACKET, 0, event, len); hci_stack.event_packet_handler(event, len); } diff --git a/src/hci.h b/src/hci.h index 25e413c98..23f417b7d 100644 --- a/src/hci.h +++ b/src/hci.h @@ -16,6 +16,32 @@ #include #include +// packet header lenghts +#define HCI_CMD_DATA_PKT_HDR 0x03 +#define HCI_ACL_DATA_PKT_HDR 0x04 +#define HCI_SCO_DATA_PKT_HDR 0x03 +#define HCI_EVENT_PKT_HDR 0x02 + + +// cmds for BTstack +// get state: @returns HCI_STATE +#define BTSTACK_GET_STATE 0x01 + +// set power mode: @param HCI_POWER_MODE +#define BTSTACK_SET_POWER_MODE 0x02 + +// set capture mode: @param on +#define BTSTACK_SET_ACL_CAPTURE_MODE 0x03 + +// create l2cap channel: @param bd_addr(48), psm (16) +#define L2CAP_CREATE_CHANNEL 0x20 + +// disconnect l2cap disconnect, @param channel(16), reason(8) +#define L2CAP_DISCONNECT 0x21 + +// +#define IS_COMMAND(packet, command) (READ_BT_16(packet,0) == command.opcode) + /** * Connection State */ diff --git a/src/hci_cmds.c b/src/hci_cmds.c index fb8c37356..e7d6d446c 100644 --- a/src/hci_cmds.c +++ b/src/hci_cmds.c @@ -5,6 +5,7 @@ */ #include +#include "hci.h" /** * construct HCI Command based on template @@ -206,17 +207,17 @@ OPCODE(OGF_INFORMATIONAL_PARAMETERS, 0x09), "" // BTstack commands hci_cmd_t btstack_get_state = { -OPCODE(OGF_BTSTACK, HCI_BTSTACK_GET_STATE), "" +OPCODE(OGF_BTSTACK, BTSTACK_GET_STATE), "" // no params -> }; hci_cmd_t btstack_set_power_mode = { -OPCODE(OGF_BTSTACK, HCI_BTSTACK_SET_POWER_MODE), "1" +OPCODE(OGF_BTSTACK, BTSTACK_SET_POWER_MODE), "1" // mode: 0 = off, 1 = on }; hci_cmd_t btstack_set_acl_capture_mode = { -OPCODE(OGF_BTSTACK, HCI_BTSTACK_SET_ACL_CAPTURE_MODE), "1" +OPCODE(OGF_BTSTACK, BTSTACK_SET_ACL_CAPTURE_MODE), "1" // mode: 0 = off, 1 = on }; diff --git a/src/l2cap.c b/src/l2cap.c index 643e2f03a..792aed95d 100644 --- a/src/l2cap.c +++ b/src/l2cap.c @@ -141,7 +141,7 @@ void l2cap_event_handler( uint8_t *packet, uint16_t size ){ } // HCI Connection Timeouts - if (packet[0] == HCI_EVENT_L2CAP_TIMEOUT_CHECK){ + if (packet[0] == L2CAP_EVENT_TIMEOUT_CHECK){ hci_con_handle_t handle = READ_BT_16(packet, 2); linked_item_t *it; l2cap_channel_t * channel; @@ -244,7 +244,7 @@ void l2cap_close_channels_for_connection(connection_t *connection){ // notify client void l2cap_emit_channel_opened(l2cap_channel_t *channel) { uint8_t event[16]; - event[0] = HCI_EVENT_L2CAP_CHANNEL_OPENED; + event[0] = L2CAP_EVENT_CHANNEL_OPENED; event[1] = sizeof(event) - 2; bt_flip_addr(&event[2], channel->address); bt_store_16(event, 8, channel->handle); @@ -256,7 +256,7 @@ void l2cap_emit_channel_opened(l2cap_channel_t *channel) { void l2cap_emit_channel_closed(l2cap_channel_t *channel) { uint8_t event[4]; - event[0] = HCI_EVENT_L2CAP_CHANNEL_CLOSED; + event[0] = L2CAP_EVENT_CHANNEL_CLOSED; event[1] = sizeof(event) - 2; bt_store_16(event, 2, channel->source_cid); socket_connection_send_packet(channel->connection, HCI_EVENT_PACKET, 0, event, sizeof(event));