daemon: prefix l2cap/rfcomm/sdp events only used by daemon

This commit is contained in:
Matthias Ringwald 2016-04-01 15:37:36 +02:00
parent a232af0476
commit 62c64df103
8 changed files with 83 additions and 177 deletions

View File

@ -19,13 +19,13 @@ L2CAP_DATA_PACKET packet type. L2CAP provides the following events:
with *l2cap_accept_connection* and
*l2cap_decline_connecti-on* respectively.
- L2CAP_EVENT_CREDITS - emitted when there is a chance to send a new
- DAEMON_EVENT_L2CAP_CREDITS - emitted when there is a chance to send a new
L2CAP packet. BTstack does not buffer packets. Instead, it requires
the application to retry sending if BTstack cannot deliver a packet
to the Bluetooth module. In this case, the l2cap_send
will return an error.
- L2CAP_EVENT_SERVICE_REGISTERED - Status not equal zero indicates
- DAEMON_EVENT_L2CAP_SERVICE_REGISTERED - Status not equal zero indicates
an error. Possible errors: service is already registered;
MAX_NO_L2CAP_SERVICES (defined in config.h) already registered.
@ -36,8 +36,8 @@ Event | Event Code
L2CAP_EVENT_CHANNEL_OPENED | 0x70
L2CAP_EVENT_CHANNEL_CLOSED | 0x71
L2CAP_EVENT_INCOMING_CONNECTION | 0x72
L2CAP_EVENT_CREDITS | 0x74
L2CAP_EVENT_SERVICE_REGISTERED | 0x75
DAEMON_EVENT_L2CAP_CREDITS | 0x74
DAEMON_EVENT_L2CAP_SERVICE_REGISTERED | 0x75
Table: L2CAP Events. {#tbl:l2capEvents}
@ -50,9 +50,9 @@ L2CAP event paramaters, with size in bits:
- *event (8), len(8), channel(16)*
- L2CAP_EVENT_INCOMING_CONNECTION:
- *event(8), len(8), address(48), handle(16), psm (16), local_cid(16), remote_cid (16)*
- L2CAP_EVENT_CREDITS:
- DAEMON_EVENT_L2CAP_CREDITS:
- *event(8), len(8), local_cid(16), credits(8)*
- L2CAP_EVENT_SERVICE_REGISTERED:
- DAEMON_EVENT_L2CAP_SERVICE_REGISTERED:
- *event(8), len(8), status(8), psm(16)*
## RFCOMM Events
@ -74,11 +74,11 @@ by RFCOMM:
establishment is done. Status not equal zero indicates an error.
Possible errors: an L2CAP error, out of memory.
- RFCOMM_EVENT_CREDITS - The application can resume sending when
- DAEMON_EVENT_RFCOMM_CREDITS - The application can resume sending when
this even is received. See Section on [RFCOMM credit-based flow-control](../protocols/#sec:flowControlProtocols)
for more.
- RFCOMM_EVENT_SERVICE_REGISTERED - Status not equal zero indicates
- DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED - Status not equal zero indicates
an error. Possible errors:
- service is already registered;
@ -90,8 +90,8 @@ Event | Event Code
RFCOMM_EVENT_CHANNEL_OPENED | 0x80
RFCOMM_EVENT_CHANNEL_CLOSED | 0x81
RFCOMM_EVENT_INCOMING_CONNECTION | 0x82
RFCOMM_EVENT_CREDITS | 0x84
RFCOMM_EVENT_SERVICE_REGISTERED | 0x85
DAEMON_EVENT_RFCOMM_CREDITS | 0x84
DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED | 0x85
Table: RFCOMM Events. {#tbl:rfcommEvents}
@ -104,9 +104,9 @@ RFCOMM event paramaters, with size in bits:
- *event(8), len(8), rfcomm_cid(16)*
- RFCOMM_EVENT_INCOMING_CONNECTION:
- *event(8), len(8), address(48), channel (8), rfcomm_cid(16)*
- RFCOMM_EVENT_CREDITS:
- DAEMON_EVENT_RFCOMM_CREDITS:
- *event(8), len(8), rfcomm_cid(16), credits(8)*
- RFCOMM_EVENT_SERVICE_REGISTERED:
- DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
- *event(8), len(8), status(8), rfcomm server channel_id(8)*
## Errors {#sec:errorsAppendix}

View File

@ -93,10 +93,10 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
}
break;
case L2CAP_EVENT_SERVICE_REGISTERED:
case DAEMON_EVENT_L2CAP_SERVICE_REGISTERED:
status = packet[2];
psm = little_endian_read_16(packet, 3);
printf("L2CAP_EVENT_SERVICE_REGISTERED psm: 0x%02x, status: 0x%02x\n", psm, status);
printf("DAEMON_EVENT_L2CAP_SERVICE_REGISTERED psm: 0x%02x, status: 0x%02x\n", psm, status);
if (status) {
l2cap_reg_fail = 1;
} else {

View File

@ -174,7 +174,7 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
printf("Basebank connection closed\n");
break;
case L2CAP_EVENT_CREDITS:
case DAEMON_EVENT_L2CAP_CREDITS:
if (!serverMode) {
// can send! (assuming single credits are handet out)
update_packet();

View File

@ -93,14 +93,14 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
}
break;
case RFCOMM_EVENT_PERSISTENT_CHANNEL:
case DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
rfcomm_channel_nr = packet[3];
printf("RFCOMM channel %u was assigned by BTdaemon\n", rfcomm_channel_nr);
bt_send_cmd(&rfcomm_register_service_cmd, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap
break;
case RFCOMM_EVENT_SERVICE_REGISTERED:
printf("RFCOMM_EVENT_SERVICE_REGISTERED channel: %u, status: 0x%02x\n", packet[3], packet[2]);
case DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
printf("DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED channel: %u, status: 0x%02x\n", packet[3], packet[2]);
// register SDP for our SPP
spp_create_sdp_record((uint8_t*)service_buffer, 0x10001, rfcomm_channel_nr, "SPP ECHO");
bt_send_cmd(&sdp_register_service_record_cmd, service_buffer);

View File

@ -108,14 +108,14 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
}
break;
case RFCOMM_EVENT_PERSISTENT_CHANNEL:
case DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
rfcomm_channel_nr = packet[3];
printf("RFCOMM channel %u was assigned by BTdaemon\n", rfcomm_channel_nr);
bt_send_cmd(&rfcomm_register_service_cmd, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap
break;
case RFCOMM_EVENT_SERVICE_REGISTERED:
printf("RFCOMM_EVENT_SERVICE_REGISTERED\n");
case DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
printf("DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED\n");
rfcomm_channel_nr = packet[3];
// register SDP for our SPP
spp_create_sdp_record((uint8_t*) spp_service_buffer, 0x10001, rfcomm_channel_nr, "RFCOMM Test");
@ -123,7 +123,7 @@ void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint
bt_send_cmd(&btstack_set_discoverable, 1);
break;
case RFCOMM_EVENT_CREDITS:
case DAEMON_EVENT_RFCOMM_CREDITS:
sprintf((char*)test_data, "\n\r\n\r-> %09u <- ", counter++);
bt_send_rfcomm(rfcomm_channel_id, test_data, mtu);
break;

View File

@ -218,10 +218,10 @@ static int loggingEnabled;
#if 0
static void l2cap_emit_credits(l2cap_channel_t *channel, uint8_t credits) {
log_info("L2CAP_EVENT_CREDITS local_cid 0x%x credits %u", channel->local_cid, credits);
log_info("DAEMON_EVENT_L2CAP_CREDITS local_cid 0x%x credits %u", channel->local_cid, credits);
uint8_t event[5];
event[0] = L2CAP_EVENT_CREDITS;
event[0] = DAEMON_EVENT_L2CAP_CREDITS;
event[1] = sizeof(event) - 2;
little_endian_store_16(event, 2, channel->local_cid);
event[4] = credits;
@ -240,9 +240,9 @@ static void l2cap_hand_out_credits(void){
}
}
static void rfcomm_emit_credits(rfcomm_channel_t * channel, uint8_t credits) {
log_info("RFCOMM_EVENT_CREDITS cid 0x%02x credits %u", channel->rfcomm_cid, credits);
log_info("DAEMON_EVENT_RFCOMM_CREDITS cid 0x%02x credits %u", channel->rfcomm_cid, credits);
uint8_t event[5];
event[0] = RFCOMM_EVENT_CREDITS;
event[0] = DAEMON_EVENT_RFCOMM_CREDITS;
event[1] = sizeof(event) - 2;
little_endian_store_16(event, 2, channel->rfcomm_cid);
event[4] = credits;
@ -254,15 +254,15 @@ static void rfcomm_hand_out_credits(void){
for (it = (btstack_linked_item_t *) rfcomm_channels; it ; it = it->next){
rfcomm_channel_t * channel = (rfcomm_channel_t *) it;
if (channel->state != RFCOMM_CHANNEL_OPEN) {
// log_info("RFCOMM_EVENT_CREDITS: multiplexer not open");
// log_info("DAEMON_EVENT_RFCOMM_CREDITS: multiplexer not open");
continue;
}
if (!channel->credits_outgoing) {
// log_info("RFCOMM_EVENT_CREDITS: no outgoing credits");
// log_info("DAEMON_EVENT_RFCOMM_CREDITS: no outgoing credits");
continue;
}
// channel open, multiplexer has l2cap credits and we didn't hand out credit before -> go!
// log_info("RFCOMM_EVENT_CREDITS: 1");
// log_info("DAEMON_EVENT_RFCOMM_CREDITS: 1");
rfcomm_emit_credits(channel, 1);
}
}
@ -724,7 +724,7 @@ static void send_l2cap_connection_open_failed(connection_t * connection, bd_addr
static void l2cap_emit_service_registered(void *connection, uint8_t status, uint16_t psm){
uint8_t event[5];
event[0] = L2CAP_EVENT_SERVICE_REGISTERED;
event[0] = DAEMON_EVENT_L2CAP_SERVICE_REGISTERED;
event[1] = sizeof(event) - 2;
event[2] = status;
little_endian_store_16(event, 3, psm);
@ -734,7 +734,7 @@ static void l2cap_emit_service_registered(void *connection, uint8_t status, uint
static void rfcomm_emit_service_registered(void *connection, uint8_t status, uint8_t channel){
uint8_t event[4];
event[0] = RFCOMM_EVENT_SERVICE_REGISTERED;
event[0] = DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED;
event[1] = sizeof(event) - 2;
event[2] = status;
event[3] = channel;
@ -762,7 +762,7 @@ static void send_rfcomm_create_channel_failed(void * connection, bd_addr_t addr,
// data: event(8), len(8), status(8), service_record_handle(32)
static void sdp_emit_service_registered(void *connection, uint32_t handle, uint8_t status) {
uint8_t event[7];
event[0] = SDP_EVENT_SERVICE_REGISTERED;
event[0] = DAEMON_EVENT_SDP_SERVICE_REGISTERED;
event[1] = sizeof(event) - 2;
event[2] = status;
little_endian_store_32(event, 3, handle);
@ -1076,9 +1076,9 @@ static int btstack_command_handler(connection_t *connection, uint8_t *packet, ui
// enforce \0
packet[3+248] = 0;
rfcomm_channel = rfcomm_service_db_channel_for_service((char*)&packet[3]);
log_info("RFCOMM_EVENT_PERSISTENT_CHANNEL %u", rfcomm_channel);
log_info("DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED %u", rfcomm_channel);
uint8_t event[4];
event[0] = RFCOMM_EVENT_PERSISTENT_CHANNEL;
event[0] = DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED;
event[1] = sizeof(event) - 2;
event[2] = 0;
event[3] = rfcomm_channel;
@ -1549,7 +1549,7 @@ static void daemon_packet_handler(void * connection, uint8_t packet_type, uint16
return;
}
case RFCOMM_EVENT_CREDITS:
case DAEMON_EVENT_RFCOMM_CREDITS:
// RFCOMM CREDITS received...
daemon_retry_parked();
break;
@ -1570,7 +1570,7 @@ static void daemon_packet_handler(void * connection, uint8_t packet_type, uint16
if (!connection) break;
daemon_remove_client_rfcomm_channel(connection, cid);
break;
case RFCOMM_EVENT_SERVICE_REGISTERED:
case DAEMON_EVENT_RFCOMM_SERVICE_REGISTERED:
if (packet[2]) break;
daemon_add_client_rfcomm_service(connection, packet[3]);
break;

View File

@ -146,7 +146,9 @@ typedef uint8_t sm_key_t[16];
#define BNEP_CHANNEL_NOT_CONNECTED 0xA1
#define BNEP_DATA_LEN_EXCEEDS_MTU 0xA2
// COMMANDS
// DAEMON COMMANDS
#define OGF_BTSTACK 0x3d
@ -252,6 +254,7 @@ typedef uint8_t sm_key_t[16];
#define GATT_GET_MTU 0x82
// EVENTS
/**
@ -301,14 +304,50 @@ typedef uint8_t sm_key_t[16];
*/
#define DAEMON_EVENT_REMOTE_NAME_CACHED 0x65
// internal daemon events
// data: event(8)
// internal - data: event(8)
#define DAEMON_EVENT_CONNECTION_OPENED 0x67
// data: event(8)
// internal - data: event(8)
#define DAEMON_EVENT_CONNECTION_CLOSED 0x68
// data: event(8), len(8), local_cid(16), credits(8)
#define DAEMON_EVENT_L2CAP_CREDITS 0x74
/**
* @format 12
* @param status
* @param psm
*/
#define DAEMON_EVENT_L2CAP_SERVICE_REGISTERED 0x75
/**
* @format 21
* @param rfcomm_cid
* @param credits
*/
#define DAEMON_EVENT_RFCOMM_CREDITS 0x84
/**
* @format 11
* @param status
* @param channel_id
*/
#define DEAMON_EVENT_RFCOMM_SERVICE_REGISTERED 0x85
/**
* @format 11
* @param status
* @param server_channel_id
*/
#define DAEMON_EVENT_RFCOMM_PERSISTENT_CHANNEL 0x86
/**
* @format 14
* @param status
* @param service_record_handle
*/
#define DAEMON_EVENT_SDP_SERVICE_REGISTERED 0x90
// additional HCI events
@ -323,6 +362,7 @@ typedef uint8_t sm_key_t[16];
*/
#define HCI_EVENT_SCO_CAN_SEND_NOW 0x6F
// L2CAP EVENTS
/**
@ -360,17 +400,6 @@ typedef uint8_t sm_key_t[16];
// data: event(8), len(8), handle(16)
#define L2CAP_EVENT_TIMEOUT_CHECK 0x73
// ??
// data: event(8), len(8), local_cid(16), credits(8)
#define L2CAP_EVENT_CREDITS 0x74
/**
* @format 12
* @param status
* @param psm
*/
#define L2CAP_EVENT_SERVICE_REGISTERED 0x75
/**
* @format H2222
* @param handle
@ -406,7 +435,7 @@ typedef uint8_t sm_key_t[16];
* @param rfcomm_cid
* @param max_frame_size
*/
#define RFCOMM_EVENT_CHANNEL_OPENED 0x80
#define RFCOMM_EVENT_CHANNEL_OPENED 0x80
/**
* @format 2
@ -428,28 +457,7 @@ typedef uint8_t sm_key_t[16];
* @param line_status
*/
#define RFCOMM_EVENT_REMOTE_LINE_STATUS 0x83
/**
* @format 21
* @param rfcomm_cid
* @param credits
*/
#define RFCOMM_EVENT_CREDITS 0x84
/**
* @format 11
* @param status
* @param channel_id
*/
#define RFCOMM_EVENT_SERVICE_REGISTERED 0x85
/**
* @format 11
* @param status
* @param server_channel_id
*/
#define RFCOMM_EVENT_PERSISTENT_CHANNEL 0x86
/**
* @format 21
* @param rfcomm_cid
@ -471,13 +479,6 @@ typedef uint8_t sm_key_t[16];
#define RFCOMM_EVENT_CAN_SEND_NOW 0x89
/**
* @format 14
* @param status
* @param service_record_handle
*/
#define SDP_EVENT_SERVICE_REGISTERED 0x90
/**
* @format 1
* @param status

View File

@ -1034,25 +1034,6 @@ static inline uint16_t l2cap_event_incoming_connection_get_remote_cid(const uint
return little_endian_read_16(event, 15);
}
/**
* @brief Get field status from event l2cap_event_service_registered
* @param event packet
* @return status
* @note: btstack_type 1
*/
static inline uint8_t l2cap_event_service_registered_get_status(const uint8_t * event){
return event[2];
}
/**
* @brief Get field psm from event l2cap_event_service_registered
* @param event packet
* @return psm
* @note: btstack_type 2
*/
static inline uint16_t l2cap_event_service_registered_get_psm(const uint8_t * event){
return little_endian_read_16(event, 3);
}
/**
* @brief Get field handle from event l2cap_event_connection_parameter_update_request
* @param event packet
@ -1231,63 +1212,6 @@ static inline uint8_t rfcomm_event_remote_line_status_get_line_status(const uint
return event[4];
}
/**
* @brief Get field rfcomm_cid from event rfcomm_event_credits
* @param event packet
* @return rfcomm_cid
* @note: btstack_type 2
*/
static inline uint16_t rfcomm_event_credits_get_rfcomm_cid(const uint8_t * event){
return little_endian_read_16(event, 2);
}
/**
* @brief Get field credits from event rfcomm_event_credits
* @param event packet
* @return credits
* @note: btstack_type 1
*/
static inline uint8_t rfcomm_event_credits_get_credits(const uint8_t * event){
return event[4];
}
/**
* @brief Get field status from event rfcomm_event_service_registered
* @param event packet
* @return status
* @note: btstack_type 1
*/
static inline uint8_t rfcomm_event_service_registered_get_status(const uint8_t * event){
return event[2];
}
/**
* @brief Get field channel_id from event rfcomm_event_service_registered
* @param event packet
* @return channel_id
* @note: btstack_type 1
*/
static inline uint8_t rfcomm_event_service_registered_get_channel_id(const uint8_t * event){
return event[3];
}
/**
* @brief Get field status from event rfcomm_event_persistent_channel
* @param event packet
* @return status
* @note: btstack_type 1
*/
static inline uint8_t rfcomm_event_persistent_channel_get_status(const uint8_t * event){
return event[2];
}
/**
* @brief Get field server_channel_id from event rfcomm_event_persistent_channel
* @param event packet
* @return server_channel_id
* @note: btstack_type 1
*/
static inline uint8_t rfcomm_event_persistent_channel_get_server_channel_id(const uint8_t * event){
return event[3];
}
/**
* @brief Get field rfcomm_cid from event rfcomm_event_remote_modem_status
* @param event packet
@ -1317,25 +1241,6 @@ static inline uint16_t rfcomm_event_can_send_now_get_rfcomm_cid(const uint8_t *
return little_endian_read_16(event, 2);
}
/**
* @brief Get field status from event sdp_event_service_registered
* @param event packet
* @return status
* @note: btstack_type 1
*/
static inline uint8_t sdp_event_service_registered_get_status(const uint8_t * event){
return event[2];
}
/**
* @brief Get field service_record_handle from event sdp_event_service_registered
* @param event packet
* @return service_record_handle
* @note: btstack_type 4
*/
static inline uint32_t sdp_event_service_registered_get_service_record_handle(const uint8_t * event){
return little_endian_read_32(event, 3);
}
/**
* @brief Get field status from event sdp_event_query_complete
* @param event packet