Improve BLE serial performance + add BLE battery display
This commit is contained in:
parent
c9fd5f7d3b
commit
7f787d5910
10
Bluetooth.h
10
Bluetooth.h
@ -307,6 +307,11 @@ bool bt_passkey_callback(uint16_t conn_handle, uint8_t const passkey[6], bool ma
|
||||
void bt_connect_callback(uint16_t conn_handle) {
|
||||
bt_state = BT_STATE_CONNECTED;
|
||||
cable_state = CABLE_STATE_DISCONNECTED;
|
||||
|
||||
BLEConnection* conn = Bluefruit.Connection(conn_handle);
|
||||
conn->requestPHY(BLE_GAP_PHY_2MBPS);
|
||||
conn->requestMtuExchange(512+3);
|
||||
conn->requestDataLengthUpdate();
|
||||
}
|
||||
|
||||
void bt_disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
||||
@ -342,6 +347,8 @@ bool bt_setup_hw() {
|
||||
Bluefruit.Security.setSecuredCallback(bt_connect_callback);
|
||||
Bluefruit.Periph.setDisconnectCallback(bt_disconnect_callback);
|
||||
Bluefruit.Security.setPairCompleteCallback(bt_pairing_complete);
|
||||
Bluefruit.Periph.setConnInterval(6, 12); // 7.5 - 15 ms
|
||||
|
||||
const ble_gap_addr_t gap_addr = Bluefruit.getAddr();
|
||||
char *data = (char*)malloc(BT_DEV_ADDR_LEN+1);
|
||||
for (int i = 0; i < BT_DEV_ADDR_LEN; i++) {
|
||||
@ -372,6 +379,9 @@ void bt_start() {
|
||||
// start device information service
|
||||
bledis.begin();
|
||||
|
||||
SerialBT.bufferTXD(true); // enable buffering
|
||||
|
||||
SerialBT.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); // enable encryption for BLE serial
|
||||
SerialBT.begin();
|
||||
|
||||
blebas.begin();
|
||||
|
1
Config.h
1
Config.h
@ -90,6 +90,7 @@
|
||||
uint8_t seq = 0xFF;
|
||||
uint16_t read_len = 0;
|
||||
|
||||
bool serial_in_frame = false;
|
||||
|
||||
FIFOBuffer packet_rdy_interfaces;
|
||||
|
||||
|
10
Power.h
10
Power.h
@ -273,6 +273,16 @@ void measure_battery() {
|
||||
if (battery_percent >= 98) {
|
||||
battery_state = BATTERY_STATE_CHARGED;
|
||||
}
|
||||
|
||||
#if HAS_BLE
|
||||
if ((bt_state == BT_STATE_ON) || bt_state == BT_STATE_CONNECTED) {
|
||||
if (battery_state != BATTERY_STATE_CHARGING) {
|
||||
blebas.write(battery_percent);
|
||||
} else {
|
||||
blebas.write(100);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (battery_ready) {
|
||||
|
10
Utilities.h
10
Utilities.h
@ -578,6 +578,16 @@ void serial_write(uint8_t byte) {
|
||||
Serial.write(byte);
|
||||
} else {
|
||||
SerialBT.write(byte);
|
||||
|
||||
// This ensures that the TX buffer is flushed after a frame is queued in serial.
|
||||
// serial_in_frame is used to ensure that the flush only happens at the end of the frame
|
||||
if (serial_in_frame && byte == FEND) {
|
||||
SerialBT.flushTXD();
|
||||
serial_in_frame = false;
|
||||
}
|
||||
else if (!serial_in_frame && byte == FEND) {
|
||||
serial_in_frame = true;
|
||||
}
|
||||
}
|
||||
#else
|
||||
Serial.write(byte);
|
||||
|
Loading…
Reference in New Issue
Block a user