mirror of
https://github.com/felis/USB_Host_Shield_2.0.git
synced 2024-03-22 11:31:26 +01:00
Removed another unneeded case in the state machine
This commit is contained in:
parent
1ef78c3674
commit
184770489f
2 changed files with 25 additions and 39 deletions
8
BTD.h
8
BTD.h
|
@ -118,14 +118,12 @@
|
||||||
/* Used for SDP channel */
|
/* Used for SDP channel */
|
||||||
#define L2CAP_SDP_WAIT 10
|
#define L2CAP_SDP_WAIT 10
|
||||||
#define L2CAP_SDP_SUCCESS 11
|
#define L2CAP_SDP_SUCCESS 11
|
||||||
#define L2CAP_SDP_DONE 12
|
|
||||||
|
|
||||||
/* Used for RFCOMM channel */
|
/* Used for RFCOMM channel */
|
||||||
#define L2CAP_RFCOMM_WAIT 13
|
#define L2CAP_RFCOMM_WAIT 12
|
||||||
#define L2CAP_RFCOMM_SUCCESS 14
|
#define L2CAP_RFCOMM_SUCCESS 13
|
||||||
#define L2CAP_RFCOMM_DONE 15
|
|
||||||
|
|
||||||
#define L2CAP_DISCONNECT_RESPONSE 16 // Used for both SDP and RFCOMM channel
|
#define L2CAP_DISCONNECT_RESPONSE 14 // Used for both SDP and RFCOMM channel
|
||||||
|
|
||||||
/* Bluetooth states used by some drivers */
|
/* Bluetooth states used by some drivers */
|
||||||
#define TURN_ON_LED 17
|
#define TURN_ON_LED 17
|
||||||
|
|
56
SPP.cpp
56
SPP.cpp
|
@ -452,6 +452,13 @@ void SPP::SDP_task() {
|
||||||
delay(1);
|
delay(1);
|
||||||
pBtd->l2cap_config_request(hci_handle, identifier, sdp_scid);
|
pBtd->l2cap_config_request(hci_handle, identifier, sdp_scid);
|
||||||
l2cap_sdp_state = L2CAP_SDP_SUCCESS;
|
l2cap_sdp_state = L2CAP_SDP_SUCCESS;
|
||||||
|
} else if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_SDP_REQUEST)) {
|
||||||
|
l2cap_clear_flag(L2CAP_FLAG_DISCONNECT_SDP_REQUEST); // Clear flag
|
||||||
|
SDPConnected = false;
|
||||||
|
#ifdef DEBUG_USB_HOST
|
||||||
|
Notify(PSTR("\r\nDisconnected SDP Channel"), 0x80);
|
||||||
|
#endif
|
||||||
|
pBtd->l2cap_disconnection_response(hci_handle, identifier, sdp_dcid, sdp_scid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_SDP_SUCCESS:
|
case L2CAP_SDP_SUCCESS:
|
||||||
|
@ -462,33 +469,18 @@ void SPP::SDP_task() {
|
||||||
#endif
|
#endif
|
||||||
firstMessage = true; // Reset bool
|
firstMessage = true; // Reset bool
|
||||||
SDPConnected = true;
|
SDPConnected = true;
|
||||||
l2cap_sdp_state = L2CAP_SDP_DONE;
|
l2cap_sdp_state = L2CAP_SDP_WAIT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_SDP_DONE:
|
|
||||||
if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_SDP_REQUEST)) {
|
|
||||||
l2cap_clear_flag(L2CAP_FLAG_DISCONNECT_SDP_REQUEST); // Clear flag
|
|
||||||
SDPConnected = false;
|
|
||||||
#ifdef DEBUG_USB_HOST
|
|
||||||
Notify(PSTR("\r\nDisconnected SDP Channel"), 0x80);
|
|
||||||
#endif
|
|
||||||
pBtd->l2cap_disconnection_response(hci_handle, identifier, sdp_dcid, sdp_scid);
|
|
||||||
l2cap_sdp_state = L2CAP_SDP_WAIT;
|
|
||||||
} else if (l2cap_check_flag(L2CAP_FLAG_CONNECTION_SDP_REQUEST))
|
|
||||||
l2cap_rfcomm_state = L2CAP_SDP_WAIT;
|
|
||||||
break;
|
|
||||||
case L2CAP_DISCONNECT_RESPONSE: // This is for both disconnection response from the RFCOMM and SDP channel if they were connected
|
case L2CAP_DISCONNECT_RESPONSE: // This is for both disconnection response from the RFCOMM and SDP channel if they were connected
|
||||||
if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_RESPONSE)) {
|
if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_RESPONSE)) {
|
||||||
#ifdef DEBUG_USB_HOST
|
#ifdef DEBUG_USB_HOST
|
||||||
Notify(PSTR("\r\nDisconnected L2CAP Connection"), 0x80);
|
Notify(PSTR("\r\nDisconnected L2CAP Connection"), 0x80);
|
||||||
#endif
|
#endif
|
||||||
RFCOMMConnected = false;
|
|
||||||
SDPConnected = false;
|
|
||||||
pBtd->hci_disconnect(hci_handle);
|
pBtd->hci_disconnect(hci_handle);
|
||||||
hci_handle = -1; // Reset handle
|
hci_handle = -1; // Reset handle
|
||||||
l2cap_event_flag = 0; // Reset flags
|
Reset();
|
||||||
l2cap_sdp_state = L2CAP_SDP_WAIT;
|
|
||||||
l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -509,6 +501,14 @@ void SPP::RFCOMM_task() {
|
||||||
delay(1);
|
delay(1);
|
||||||
pBtd->l2cap_config_request(hci_handle, identifier, rfcomm_scid);
|
pBtd->l2cap_config_request(hci_handle, identifier, rfcomm_scid);
|
||||||
l2cap_rfcomm_state = L2CAP_RFCOMM_SUCCESS;
|
l2cap_rfcomm_state = L2CAP_RFCOMM_SUCCESS;
|
||||||
|
} else if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST)) {
|
||||||
|
l2cap_clear_flag(L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST); // Clear flag
|
||||||
|
RFCOMMConnected = false;
|
||||||
|
connected = false;
|
||||||
|
#ifdef DEBUG_USB_HOST
|
||||||
|
Notify(PSTR("\r\nDisconnected RFCOMM Channel"), 0x80);
|
||||||
|
#endif
|
||||||
|
pBtd->l2cap_disconnection_response(hci_handle, identifier, rfcomm_dcid, rfcomm_scid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_RFCOMM_SUCCESS:
|
case L2CAP_RFCOMM_SUCCESS:
|
||||||
|
@ -520,22 +520,9 @@ void SPP::RFCOMM_task() {
|
||||||
rfcommAvailable = 0; // Reset number of bytes available
|
rfcommAvailable = 0; // Reset number of bytes available
|
||||||
bytesRead = 0; // Reset number of bytes received
|
bytesRead = 0; // Reset number of bytes received
|
||||||
RFCOMMConnected = true;
|
RFCOMMConnected = true;
|
||||||
l2cap_rfcomm_state = L2CAP_RFCOMM_DONE;
|
l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case L2CAP_RFCOMM_DONE:
|
|
||||||
if (l2cap_check_flag(L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST)) {
|
|
||||||
l2cap_clear_flag(L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST); // Clear flag
|
|
||||||
RFCOMMConnected = false;
|
|
||||||
connected = false;
|
|
||||||
#ifdef DEBUG_USB_HOST
|
|
||||||
Notify(PSTR("\r\nDisconnected RFCOMM Channel"), 0x80);
|
|
||||||
#endif
|
|
||||||
pBtd->l2cap_disconnection_response(hci_handle, identifier, rfcomm_dcid, rfcomm_scid);
|
|
||||||
l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
|
|
||||||
} else if (l2cap_check_flag(L2CAP_FLAG_CONNECTION_RFCOMM_REQUEST))
|
|
||||||
l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/************************************************************/
|
/************************************************************/
|
||||||
|
@ -719,10 +706,11 @@ uint8_t SPP::crc(uint8_t *data) {
|
||||||
|
|
||||||
/* Calculate FCS */
|
/* Calculate FCS */
|
||||||
uint8_t SPP::calcFcs(uint8_t *data) {
|
uint8_t SPP::calcFcs(uint8_t *data) {
|
||||||
|
uint8_t temp = crc(data);
|
||||||
if ((data[1] & 0xEF) == RFCOMM_UIH)
|
if ((data[1] & 0xEF) == RFCOMM_UIH)
|
||||||
return (0xFF - crc(data)); // FCS on 2 bytes
|
return (0xFF - temp); // FCS on 2 bytes
|
||||||
else
|
else
|
||||||
return (0xFF - pgm_read_byte(&rfcomm_crc_table[crc(data) ^ data[2]])); // FCS on 3 bytes
|
return (0xFF - pgm_read_byte(&rfcomm_crc_table[temp ^ data[2]])); // FCS on 3 bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check FCS */
|
/* Check FCS */
|
||||||
|
|
Loading…
Reference in a new issue