LivoxProto1: port to sscl::co framework

Code now actually looks a lot cleaner, tbh.
This commit is contained in:
2026-05-28 20:13:12 -04:00
parent bbc16dc4c4
commit 25efccf6c5
20 changed files with 1275 additions and 2145 deletions
+23 -40
View File
@@ -18,7 +18,7 @@
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/posix/stream_descriptor.hpp>
#include "protocol.h"
#include <spinscale/cps/callback.h>
#include <spinscale/co/invokers.h>
#include <spinscale/spinLock.h>
// Custom hash function for std::pair<uint8_t, uint8_t>
@@ -96,16 +96,6 @@ private:
std::optional<std::string> detectSmoIp(const std::string& deviceIP);
uint32_t getSubnetMaskFor(uint8_t nbits);
class ConnectReq;
class ConnectToKnownDeviceReq;
class ConnectByDeviceIdentifierReq;
class ExecuteHandshakeReq;
class DisconnectReq;
class EnablePcloudDataReq;
class DisablePcloudDataReq;
class SetReturnModeReq;
class GetReturnModeReq;
public:
enum class ReturnMode : uint8_t
{
@@ -146,37 +136,30 @@ public:
// Utility methods
std::optional<std::string> getSmoIp(const std::string& deviceIP);
// Callback function type definitions for async methods
typedef std::function<void(bool success)> connectReqCbFn;
typedef std::function<
void(bool success, const std::string& ipAddr)>
connectToKnownDeviceReqCbFn;
typedef std::function<
void(bool success, const std::string& ipAddr)>
connectByDeviceIdentifierReqCbFn;
typedef std::function<void(bool success)> executeHandshakeReqCbFn;
typedef std::function<void(bool success)> disconnectReqCbFn;
typedef std::function<void(bool success)> enablePcloudDataReqCbFn;
typedef std::function<void(bool success)> disablePcloudDataReqCbFn;
typedef std::function<void(bool success)> setReturnModeReqCbFn;
typedef std::function<void(bool success, uint8_t returnMode)>
getReturnModeReqCbFn;
struct ConnectIpResult
{
bool success = false;
std::string ipAddr;
};
// Async connection methods
void connectReq(sscl::cps::Callback<connectReqCbFn> callback);
void connectToKnownDeviceReq(
sscl::cps::Callback<connectToKnownDeviceReqCbFn> callback);
void connectByDeviceIdentifierReq(
sscl::cps::Callback<connectByDeviceIdentifierReqCbFn> callback);
void executeHandshakeReq(
const std::string& deviceIP,
sscl::cps::Callback<executeHandshakeReqCbFn> callback);
void disconnectReq(sscl::cps::Callback<disconnectReqCbFn> callback);
void enablePcloudDataReq(sscl::cps::Callback<enablePcloudDataReqCbFn> callback);
void disablePcloudDataReq(sscl::cps::Callback<disablePcloudDataReqCbFn> callback);
void setReturnModeReq(
uint8_t returnMode, sscl::cps::Callback<setReturnModeReqCbFn> callback);
void getReturnModeReq(sscl::cps::Callback<getReturnModeReqCbFn> callback);
sscl::co::ViralNonPostingInvoker<bool> connectCReq();
sscl::co::ViralNonPostingInvoker<ConnectIpResult> connectToKnownDeviceCReq();
sscl::co::ViralNonPostingInvoker<ConnectIpResult> connectByDeviceIdentifierCReq();
sscl::co::ViralNonPostingInvoker<bool> executeHandshakeCReq(
const std::string& deviceIP);
sscl::co::ViralNonPostingInvoker<bool> disconnectCReq();
sscl::co::ViralNonPostingInvoker<bool> enablePcloudDataCReq();
sscl::co::ViralNonPostingInvoker<bool> disablePcloudDataCReq();
struct GetReturnModeResult
{
bool success = false;
uint8_t returnMode = 0;
};
sscl::co::ViralNonPostingInvoker<bool> setReturnModeCReq(uint8_t returnMode);
sscl::co::ViralNonPostingInvoker<GetReturnModeResult> getReturnModeCReq();
public:
comms::DiscoveredDevice discoveredDevice;