clean up command names and headers

This commit is contained in:
matthias.ringwald 2009-09-29 19:40:55 +00:00
parent 1c92962c87
commit 80d52d6be7
11 changed files with 78 additions and 70 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -10,18 +10,11 @@
#include <stdarg.h>
#include <string.h>
// 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

View File

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

View File

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

View File

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

View File

@ -16,6 +16,32 @@
#include <stdlib.h>
#include <stdarg.h>
// 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
*/

View File

@ -5,6 +5,7 @@
*/
#include <btstack/hci_cmds.h>
#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
};

View File

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