#include "ServiceBluetooth.hpp" #include "Service/Service.hpp" #include "Service/Message.hpp" #include "MessageType.hpp" #include "messages/BluetoothMessage.hpp" #include #include const char *ServiceBluetooth::serviceName = "ServiceBluetooth"; ServiceBluetooth::ServiceBluetooth() : sys::Service(serviceName) { LOG_INFO("[ServiceBluetooth] Initializing"); testTimerID = CreateTimer(3000, true); ReloadTimer(testTimerID); } ServiceBluetooth::~ServiceBluetooth() { LOG_INFO("[ServiceBluetooth] Cleaning resources"); } // Invoked when timer ticked void ServiceBluetooth::TickHandler(uint32_t id) {} // This code is experimental: // this means it is an init point of bluetooth feature handling sys::ReturnCodes ServiceBluetooth::InitHandler() { LOG_ERROR("Bluetooth experimental!"); worker = std::make_unique(this); return sys::ReturnCodes::Success; } sys::ReturnCodes ServiceBluetooth::DeinitHandler() { return sys::ReturnCodes::Success; } sys::Message_t ServiceBluetooth::DataReceivedHandler(sys::DataMessage *msg, sys::ResponseMessage *resp) { try { switch (static_cast(msg->messageType)) { case MessageType::BluetoothRequest: { BluetoothMessage *lmsg = dynamic_cast(msg); LOG_INFO("Bluetooth request!"); switch (lmsg->req) { case BluetoothMessage::Start: worker->run(); break; case BluetoothMessage::Scan: if (worker->scan()) { return std::make_shared(sys::ReturnCodes::Success); } else { return std::make_shared(sys::ReturnCodes::Failure); } break; case BluetoothMessage::PAN: { /// TODO request lwip first... /// because TODO blocking message - wrecks system LOG_INFO("Request LwIP running!"); // auto ret = message_lwip(this, LwIP_message::Request::Start); // if (ret != sys::ReturnCodes::Success) { // LOG_ERROR("Request for LwIP start failed"); // } // else { /// TODO request PPP LOG_INFO("Start PAN"); worker->start_pan(); // } } break; case BluetoothMessage::Visible: worker->set_visible(); break; default: break; } break; } default: LOG_INFO("BT not handled!"); break; } } catch (std::exception &ex) { LOG_ERROR("Exception on BtService!: %s", ex.what()); } return std::make_shared(); } sys::ReturnCodes ServiceBluetooth::SwitchPowerModeHandler(const sys::ServicePowerMode mode) { LOG_ERROR("TODO"); return sys::ReturnCodes::Success; }