mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-23 19:20:51 +00:00
h5: send empty config reponse for empty config message
This commit is contained in:
parent
77b95b4145
commit
bf71c89905
@ -58,16 +58,17 @@ typedef enum {
|
|||||||
} hci_transport_link_state_t;
|
} hci_transport_link_state_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HCI_TRANSPORT_LINK_SEND_SYNC = 1 << 0,
|
HCI_TRANSPORT_LINK_SEND_SYNC = 1 << 0,
|
||||||
HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE = 1 << 1,
|
HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE = 1 << 1,
|
||||||
HCI_TRANSPORT_LINK_SEND_CONFIG = 1 << 2,
|
HCI_TRANSPORT_LINK_SEND_CONFIG = 1 << 2,
|
||||||
HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE = 1 << 3,
|
HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE_EMPTY = 1 << 3,
|
||||||
HCI_TRANSPORT_LINK_SEND_SLEEP = 1 << 4,
|
HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE = 1 << 4,
|
||||||
HCI_TRANSPORT_LINK_SEND_WOKEN = 1 << 5,
|
HCI_TRANSPORT_LINK_SEND_SLEEP = 1 << 5,
|
||||||
HCI_TRANSPORT_LINK_SEND_WAKEUP = 1 << 6,
|
HCI_TRANSPORT_LINK_SEND_WOKEN = 1 << 6,
|
||||||
HCI_TRANSPORT_LINK_SEND_QUEUED_PACKET = 1 << 7,
|
HCI_TRANSPORT_LINK_SEND_WAKEUP = 1 << 7,
|
||||||
HCI_TRANSPORT_LINK_SEND_ACK_PACKET = 1 << 8,
|
HCI_TRANSPORT_LINK_SEND_QUEUED_PACKET = 1 << 8,
|
||||||
HCI_TRANSPORT_LINK_ENTER_SLEEP = 1 << 9,
|
HCI_TRANSPORT_LINK_SEND_ACK_PACKET = 1 << 9,
|
||||||
|
HCI_TRANSPORT_LINK_ENTER_SLEEP = 1 << 10,
|
||||||
|
|
||||||
} hci_transport_link_actions_t;
|
} hci_transport_link_actions_t;
|
||||||
|
|
||||||
@ -96,6 +97,7 @@ static const uint8_t link_control_sync[] = { 0x01, 0x7e};
|
|||||||
static const uint8_t link_control_sync_response[] = { 0x02, 0x7d};
|
static const uint8_t link_control_sync_response[] = { 0x02, 0x7d};
|
||||||
static const uint8_t link_control_config[] = { 0x03, 0xfc, LINK_CONFIG_FIELD};
|
static const uint8_t link_control_config[] = { 0x03, 0xfc, LINK_CONFIG_FIELD};
|
||||||
static const uint8_t link_control_config_prefix_len = 2;
|
static const uint8_t link_control_config_prefix_len = 2;
|
||||||
|
static const uint8_t link_control_config_response_empty[] = { 0x04, 0x7b};
|
||||||
static const uint8_t link_control_config_response[] = { 0x04, 0x7b, LINK_CONFIG_FIELD};
|
static const uint8_t link_control_config_response[] = { 0x04, 0x7b, LINK_CONFIG_FIELD};
|
||||||
static const uint8_t link_control_config_response_prefix_len = 2;
|
static const uint8_t link_control_config_response_prefix_len = 2;
|
||||||
static const uint8_t link_control_wakeup[] = { 0x05, 0xfa};
|
static const uint8_t link_control_wakeup[] = { 0x05, 0xfa};
|
||||||
@ -323,6 +325,11 @@ static void hci_transport_link_send_config_response(void){
|
|||||||
hci_transport_link_send_control(link_control_config_response, sizeof(link_control_config_response));
|
hci_transport_link_send_control(link_control_config_response, sizeof(link_control_config_response));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void hci_transport_link_send_config_response_empty(void){
|
||||||
|
log_debug("link send config response empty");
|
||||||
|
hci_transport_link_send_control(link_control_config_response_empty, sizeof(link_control_config_response_empty));
|
||||||
|
}
|
||||||
|
|
||||||
static void hci_transport_link_send_woken(void){
|
static void hci_transport_link_send_woken(void){
|
||||||
log_debug("link send woken");
|
log_debug("link send woken");
|
||||||
hci_transport_link_send_control(link_control_woken, sizeof(link_control_woken));
|
hci_transport_link_send_control(link_control_woken, sizeof(link_control_woken));
|
||||||
@ -389,6 +396,11 @@ static void hci_transport_link_run(void){
|
|||||||
hci_transport_link_send_config_response();
|
hci_transport_link_send_config_response();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (hci_transport_link_actions & HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE_EMPTY){
|
||||||
|
hci_transport_link_actions &= ~HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE_EMPTY;
|
||||||
|
hci_transport_link_send_config_response_empty();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (hci_transport_link_actions & HCI_TRANSPORT_LINK_SEND_WOKEN){
|
if (hci_transport_link_actions & HCI_TRANSPORT_LINK_SEND_WOKEN){
|
||||||
hci_transport_link_actions &= ~HCI_TRANSPORT_LINK_SEND_WOKEN;
|
hci_transport_link_actions &= ~HCI_TRANSPORT_LINK_SEND_WOKEN;
|
||||||
hci_transport_link_send_woken();
|
hci_transport_link_send_woken();
|
||||||
@ -559,6 +571,7 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
|||||||
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
||||||
log_debug("link received sync");
|
log_debug("link received sync");
|
||||||
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE;
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (memcmp(slip_payload, link_control_sync_response, sizeof(link_control_sync_response)) == 0){
|
if (memcmp(slip_payload, link_control_sync_response, sizeof(link_control_sync_response)) == 0){
|
||||||
log_debug("link received sync response");
|
log_debug("link received sync response");
|
||||||
@ -568,6 +581,7 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
|||||||
//
|
//
|
||||||
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG;
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG;
|
||||||
hci_transport_link_set_timer(LINK_PERIOD_MS);
|
hci_transport_link_set_timer(LINK_PERIOD_MS);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LINK_INITIALIZED:
|
case LINK_INITIALIZED:
|
||||||
@ -575,10 +589,17 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
|||||||
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
||||||
log_debug("link received sync");
|
log_debug("link received sync");
|
||||||
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE;
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_SYNC_RESPONSE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (memcmp(slip_payload, link_control_config, link_control_config_prefix_len) == 0){
|
if (memcmp(slip_payload, link_control_config, link_control_config_prefix_len) == 0){
|
||||||
log_debug("link received config, 0x%02x", slip_payload[2]);
|
if (link_payload_len == link_control_config_prefix_len){
|
||||||
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE;
|
log_debug("link received config, no config field");
|
||||||
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE_EMPTY;
|
||||||
|
} else {
|
||||||
|
log_debug("link received config, 0x%02x", slip_payload[2]);
|
||||||
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (memcmp(slip_payload, link_control_config_response, link_control_config_response_prefix_len) == 0){
|
if (memcmp(slip_payload, link_control_config_response, link_control_config_response_prefix_len) == 0){
|
||||||
uint8_t config = slip_payload[2];
|
uint8_t config = slip_payload[2];
|
||||||
@ -593,6 +614,7 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
|||||||
// notify upper stack that it can start
|
// notify upper stack that it can start
|
||||||
uint8_t event[] = { HCI_EVENT_TRANSPORT_PACKET_SENT, 0};
|
uint8_t event[] = { HCI_EVENT_TRANSPORT_PACKET_SENT, 0};
|
||||||
packet_handler(HCI_EVENT_PACKET, &event[0], sizeof(event));
|
packet_handler(HCI_EVENT_PACKET, &event[0], sizeof(event));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LINK_ACTIVE:
|
case LINK_ACTIVE:
|
||||||
@ -627,8 +649,13 @@ static void hci_transport_h5_process_frame(uint16_t frame_size){
|
|||||||
switch (link_packet_type){
|
switch (link_packet_type){
|
||||||
case LINK_CONTROL_PACKET_TYPE:
|
case LINK_CONTROL_PACKET_TYPE:
|
||||||
if (memcmp(slip_payload, link_control_config, sizeof(link_control_config)) == 0){
|
if (memcmp(slip_payload, link_control_config, sizeof(link_control_config)) == 0){
|
||||||
log_debug("link received config");
|
if (link_payload_len == link_control_config_prefix_len){
|
||||||
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE;
|
log_debug("link received config, no config field");
|
||||||
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE_EMPTY;
|
||||||
|
} else {
|
||||||
|
log_debug("link received config, 0x%02x", slip_payload[2]);
|
||||||
|
hci_transport_link_actions |= HCI_TRANSPORT_LINK_SEND_CONFIG_RESPONSE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
if (memcmp(slip_payload, link_control_sync, sizeof(link_control_sync)) == 0){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user