21 #ifdef ARDUINO_ARCH_ESP32
23 #include "../../include/esp3d_config.h"
25 #ifdef BLUETOOTH_FEATURE
26 #include "BluetoothSerial.h"
27 #include "../../core/esp3doutput.h"
28 #include "../../core/settings_esp3d.h"
29 #include "../../core/commands.h"
30 #include "../network/netconfig.h"
32 BluetoothSerial SerialBT;
36 const uint8_t *esp_bt_dev_get_address(
void);
41 #define TIMEOUT_BT_FLUSH 1500
45 String BTService::_btname =
"";
46 String BTService::_btclient =
"";
60 return ((_btclient.length() > 0)?
true:
false);
68 static void my_spp_cb(esp_spp_cb_event_t event, esp_spp_cb_param_t *param)
72 case ESP_SPP_SRV_OPEN_EVT: {
76 uint8_t * addr = param->srv_open.rem_bda;
77 sprintf(str,
"%02X:%02X:%02X:%02X:%02X:%02X", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
79 String stmp =
"BT Connected with ";
81 output.printMSG(stmp.c_str());
82 #if defined (DISPLAY_DEVICE)
84 outputscr.printMSG(stmp.c_str());
85 #endif //DISPLAY_DEVICE
89 case ESP_SPP_CLOSE_EVT: {
91 output.printMSG(
"BT Disconnected");
92 #if defined (DISPLAY_DEVICE)
94 outputscr.printMSG(
"BT Disconnected");
95 #endif //DISPLAY_DEVICE
106 const uint8_t* point = esp_bt_dev_get_address();
109 sprintf(str,
"%02X:%02X:%02X:%02X:%02X:%02X", (
int)point[0], (
int)point[1], (
int)point[2], (
int)point[3], (
int)point[4], (
int)point[5]);
115 return _btclient.c_str();
126 _lastflush = millis();
133 if (!SerialBT.begin(_btname)) {
134 output.printERROR(
"BT failed start");
137 SerialBT.register_callback(&my_spp_cb);
138 String stmp =
"BT Started with: '" + _btname +
"'";
139 output.printMSG(stmp.c_str());
153 output.printMSG(
"Bluetooth Off");
180 size_t len = SerialBT.available();
183 uint8_t * sbuf = (uint8_t *)malloc(len);
188 push2buffer(sbuf, count);
196 if (((millis() - _lastflush) > TIMEOUT_BT_FLUSH) && (_buffer_size > 0)) {
201 void BTService::flushbuffer()
204 _buffer[_buffer_size] = 0x0;
207 _lastflush = millis();
212 void BTService::push2buffer(uint8_t * sbuf,
size_t len)
214 for (
size_t i = 0; i < len; i++) {
215 _lastflush = millis();
217 if (
char(sbuf[i]) ==
'\n') {
219 _buffer[_buffer_size] = sbuf[i];
223 }
else if (isPrintable (
char(sbuf[i]) ) ||
char(sbuf[i]) ==
'\r') {
225 _buffer[_buffer_size] = sbuf[i];
229 _buffer[_buffer_size] = sbuf[i];
234 if (_buffer_size > 0) {
238 _buffer[_buffer_size] = sbuf[i];
247 return SerialBT.write(c);
253 return SerialBT.write(buffer, size);
255 size_t sizetosend = size;
257 uint8_t *buffertmp=(uint8_t *)buffer;
258 uint32_t starttime = millis();
260 while (sizetosend>0 && ((millis() - starttime) < 100)) {
283 return SerialBT.available();
288 return SerialBT.read();
293 return SerialBT.readBytes(sbuf, len);
303 return _btname.c_str();
306 #endif // BLUETOOTH_FEATURE
308 #endif // ARDUINO_ARCH_ESP32