mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-10 19:13:23 +00:00
clean up command names and headers
This commit is contained in:
parent
1c92962c87
commit
80d52d6be7
2
TODO.txt
2
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
|
||||
|
||||
|
@ -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) ) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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 )
|
||||
|
12
src/daemon.c
12
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 {
|
||||
|
10
src/hci.c
10
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);
|
||||
}
|
||||
|
26
src/hci.h
26
src/hci.h
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user