#pragma once
#include "TcpSocketClient.h"
#include "clightdriversocket.h"

typedef struct
{
	unsigned char nCmd;
	unsigned char nCH;
	unsigned char nLightHBit;
	unsigned char nLightLBit;
	unsigned char nXORHBit;
	unsigned char nXORLBit;
	unsigned char nCheckSum;
} tagFrameInfo;


class LIGHT_DRIVER_IMPL_EXPORT CLightDriver_WL_Socket: public CLightDriverSocket
{
public:
    CLightDriver_WL_Socket(const QString& name,int32_t id);
    virtual ~CLightDriver_WL_Socket();

    virtual  int32_t setlight(int32_t iChid, int32_t ibright) override;
    virtual int32_t freshlight(int32_t iChid) override;
    virtual int32_t setmultiplier(int32_t iChid, int32_t imultiplier) override;
    virtual int32_t init_driver() override;
    int32_t exit_driver() override;

protected:
    /*!
    * \函数名称 SetIntensity
    * \函数内容 设置光源通道的亮度
    * \输入参数 nCH:通道号 取值范围[1-4]
    nIntensity:亮度 取值范围[0-255][10进制]
    * \返回值   是否设置成功 1.设置成功 -1.设置失败
    */
    int SetIntensity(int nCH, int nIntensity);

    /*!
    * \函数名称 SetNormalMode
    * \函数内容 设置成普通模式，即常亮模式
    * \输入参数 nTime:时间 取值范围:10-990[个位数无效]
    * \返回值   设置频闪时间成功 1.设置成功 -1.设置失败
    */
    int SetNormalMode(int nCH);

    /*!
    * \函数名称 ReadIntensity
    * \函数内容 获取亮度
    * \输入参数 nCH:通道号 取值范围:1-4
    nIntensity: 数据指针
    * \返回值   设置频闪时间成功 1.设置成功 -1.设置失败
    */
    int ReadIntensity(int nCH, int *nIntensity);

    /*!
    * \函数名称 TurnOnChannel
    * \函数内容 打开通道
    * \输入参数 nCH:通道号 取值范围:1-4
    * \返回值
    */
    int TurnOnChannel(int nCH);

    /*!
    * \函数名称 TurnOffChannel
    * \函数内容 打开通道
    * \输入参数 nCH:通道号 取值范围:1-4
    * \返回值
    */
    int TurnOffChannel(int nCH);
private:
    /*!
    * \函数名称 SendCmd
    * \函数内容 发送指令
    * \输入参数 无
    * \返回值   发送指令是否成功 1.发送成功 -1.发送失败
    */
    int SendCmd(int nCMD, int nCH, int nData);

    /*!
    * \函数名称 WaiteCmdFB
    * \函数内容 等待指令返回
    * \输入参数 nCmd:指令号，-1表示只等待反馈
    * \返回值
    */
    int WaiteCmdFB(int nCMD = -1);
    void DispString(const char *fmt, ...);

private:
    tagFrameInfo m_tFrameInfo;
    int m_bMutexLock;
    bool m_bConnectOK;
    /*std::string m_strIP;
    int m_nPort;*/
    
    CTcpSocketClient m_tcpSocket;
};