build for esp32 mask project
This commit is contained in:
86
src/platform/arduino/BluetoothSerialTelemetry.cpp
Normal file
86
src/platform/arduino/BluetoothSerialTelemetry.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "BluetoothSerialTelemetry.h"
|
||||
#include "../../Static.h"
|
||||
#include "../../Platform.h"
|
||||
#include <ArduinoLog.h>
|
||||
#include "../../inputs/Buttons.h"
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
BluetoothSerialTelemetry::BluetoothSerialTelemetry() : InputSource("Bluetooth")
|
||||
{
|
||||
//m_serial.setPin("0000");
|
||||
m_serial.enableSSP();
|
||||
}
|
||||
|
||||
InputEvent
|
||||
BluetoothSerialTelemetry::read()
|
||||
{
|
||||
bool didRead = false;
|
||||
while (m_serial.available()) {
|
||||
didRead = true;
|
||||
char charRead = m_serial.read();
|
||||
m_ringbuf.insert(charRead);
|
||||
if (charRead == '*') {
|
||||
static char commandBuf[32];
|
||||
size_t cmdSize = m_ringbuf.write(commandBuf);
|
||||
// Overwrite the '*' character, to leave us with a complete command
|
||||
commandBuf[cmdSize-1] = 0;
|
||||
|
||||
//Log.notice("Bluetooth read %s", commandBuf);
|
||||
|
||||
if (commandBuf[0] == 'R') {
|
||||
m_color = CRGB(std::atoi(&commandBuf[1]), m_color.g, m_color.b);
|
||||
return InputEvent{InputEvent::SetColor, m_color};
|
||||
} else if (commandBuf[0] == 'G') {
|
||||
m_color = CRGB(m_color.r, std::atoi(&commandBuf[1]), m_color.b);
|
||||
return InputEvent{InputEvent::SetColor, m_color};
|
||||
} else if (commandBuf[0] == 'B') {
|
||||
m_color = CRGB(m_color.r, m_color.g, std::atoi(&commandBuf[1]));
|
||||
return InputEvent{InputEvent::SetColor, m_color};
|
||||
} else if (commandBuf[0] == 'O') {
|
||||
return InputEvent{InputEvent::UserInput, Buttons::Circle};
|
||||
} else if (commandBuf[0] == 'S') {
|
||||
return InputEvent{InputEvent::UserInput, Buttons::Triangle};
|
||||
} else if (commandBuf[0] == 'X') {
|
||||
return InputEvent{InputEvent::UserInput, Buttons::Cross};
|
||||
} else if (commandBuf[0] == '+') {
|
||||
return InputEvent{InputEvent::SetPower, 1};
|
||||
} else if (commandBuf[0] == '-') {
|
||||
return InputEvent{InputEvent::SetPower, 0};
|
||||
} else if (commandBuf[0] == 'p') {
|
||||
return InputEvent{InputEvent::SetPattern, &commandBuf[1]};
|
||||
} else if (commandBuf[0] == 'A') {
|
||||
char* axisVal = strtok(&commandBuf[1], ",");
|
||||
const uint8_t accelX = std::atof(axisVal) * 10;
|
||||
axisVal = strtok(NULL, ",");
|
||||
const uint8_t accelY = std::atof(axisVal) * 10;
|
||||
axisVal = strtok(NULL, ",");
|
||||
const uint8_t accelZ = std::atof(axisVal) * 10;
|
||||
const uint16_t accelSum = abs(accelX) + abs(accelY) + abs(accelZ);
|
||||
const uint16_t delta = abs(m_value.value() - accelSum);
|
||||
m_value.add(accelSum);
|
||||
if (delta > 32) {
|
||||
return InputEvent{InputEvent::Acceleration, delta};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (didRead) {
|
||||
return InputEvent::NetworkActivity;
|
||||
} else {
|
||||
return InputEvent{};
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothSerialTelemetry::onStart()
|
||||
{
|
||||
Log.notice("Starting up Bluetooth...");
|
||||
if (m_serial.begin(Platform::deviceName())) {
|
||||
Log.notice("Bluetooth started!");
|
||||
} else {
|
||||
Log.warning("Bluetooth could not be started!");
|
||||
}
|
||||
}
|
||||
|
||||
STATIC_ALLOC(BluetoothSerialTelemetry);
|
||||
Reference in New Issue
Block a user