mirror of
				https://gitee.com/jiuyilian/embedded-framework.git
				synced 2025-10-24 18:20:15 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.7 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)
 | 
						|
    {
 | 
						|
    }
 | 
						|
};
 | 
						|
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);
 | 
						|
};
 | 
						|
#endif |