hunting/middleware/McuManager/include/IMcuManager.h
2024-05-14 20:01:12 +08:00

127 lines
3.8 KiB
C++

/*
* Copyright (c) 2023 Fancy Code.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef I_MCU_MANAGER_H
#define I_MCU_MANAGER_H
#include "StatusCode.h"
#include <memory>
bool CreateMcuManager(void);
bool DestroyMcuManager(void);
enum class IpcMission
{
PIR_TRIGGERED = 0,
TEST,
CONTINUOUS_SHOOTING,
PIR_TRIGGERED_DELAY,
REGULAR_START,
END
};
enum class ASK_RESULT
{
SUCCEED = 1,
FAILED,
TIMEOUT,
END
};
enum class ControlLight
{
TRUN_OFF = 0,
TRUN_ON,
END
};
typedef struct mcu_ask_date_time
{
const unsigned short mYear;
const unsigned char mMon;
const unsigned char mDay;
const unsigned char mHour;
const unsigned char mMin;
const unsigned char mSecond;
mcu_ask_date_time(const unsigned short year, const unsigned char mon, const unsigned char day,
const unsigned char hour, const unsigned char min, const unsigned char second)
: mYear(year), mMon(mon), mDay(day), mHour(hour), mMin(min), mSecond(second)
{
}
} McuAskDateTime;
class VMcuAsk
{
public:
VMcuAsk()
{
mSerialNumber = 0;
}
virtual ~VMcuAsk() = default;
virtual ASK_RESULT Blocking(void)
{
return ASK_RESULT::END;
}
virtual bool NeedReply(void)
{
return false;
}
virtual void ReplyFinished(const bool result)
{
}
virtual bool IfTimeout(const unsigned int &integrationTimeMs)
{
return false;
}
public:
/**
* @brief The serial number of a single request, assigned by the McuManager module, is used for internal management
* within the McuManager module.
*/
unsigned int mSerialNumber;
};
template <typename T>
class McuAsk : virtual public VMcuAsk
{
public:
McuAsk() = default;
virtual ~McuAsk() = default;
public:
T mDataReply;
};
class VMcuMonitor
{
public:
VMcuMonitor() = default;
virtual ~VMcuMonitor() = default;
virtual void RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission);
virtual void RecvMcuHeartBeat(std::shared_ptr<VMcuAsk> &recv);
};
class IMcuManager
{
public:
IMcuManager() = default;
virtual ~IMcuManager() = default;
static std::shared_ptr<IMcuManager> &GetInstance(std::shared_ptr<IMcuManager> *impl = nullptr);
virtual const StatusCode Init(void);
virtual const StatusCode UnInit(void);
virtual const StatusCode SetMcuMonitor(std::shared_ptr<VMcuMonitor> &monitor);
virtual const StatusCode GetIpcMission(std::shared_ptr<VMcuAsk> &ask);
virtual const StatusCode CutOffPowerSupply(std::shared_ptr<VMcuAsk> &ask);
virtual const StatusCode FeedWatchDog(std::shared_ptr<VMcuAsk> &ask);
virtual const StatusCode SetFeedingCycleForWatchDog(std::shared_ptr<VMcuAsk> &ask, const unsigned char &hour,
const unsigned char &min, const unsigned char &second);
virtual const StatusCode SetDateTime(std::shared_ptr<VMcuAsk> &ask, const McuAskDateTime &value);
virtual const StatusCode SetPirSensitivity(std::shared_ptr<VMcuAsk> &ask, const unsigned char &sensitivity);
virtual const StatusCode ContorlInfraredLight(std::shared_ptr<VMcuAsk> &ask, const ControlLight &control);
virtual const StatusCode GetPhotosensitivityValue(std::shared_ptr<VMcuAsk> &ask);
virtual const char *PrintIpcMissionString(const IpcMission &mission);
};
#endif