#pragma once
//#pragma warning(disable:4251)

#include <vector>
#include <mutex>
#include"CRS485.h"

#ifdef TEMPERATURE_EXPORTS
#define Temperature_DLL_API __declspec(dllexport)
#else
#define Temperature_DLL_API //__declspec(dllimport)
#endif

//�豸����
enum Temperature_Ctltype { GLTC = 1, Temperature_Other};

#define TEMPER_BASE_ERROR (MODBUS_BASE_ERROR+10000)

class Temperature_DLL_API CTemperature
{
public:
	typedef struct
	{
		string addrs;
		CTemperature* pTemperature;
	}TEMPERATURE_LST;

public:
	// ��ȡ��ʵ������
	static long GetInstance(string strPort, Temperature_Ctltype iCtlType, CTemperature **temperature);
	static string GetErrText(long errid);

	//long SetRunStatus(unsigned char rtuAddr, unsigned char iMaxSendNum = 3);
	
	/// <summary>
	/// �����¿����¶�
	/// </summary>
	/// <param name="rtuAddr">վ���ַ</param>
	/// <param name="dTemperature">�����¶�ֵ����λ���ȣ�</param>
	/// <param name="iMaxSendNum">�������ʧ�ܣ�����ظ�����</param>
	/// <returns></returns>
	long SetTemperature(unsigned char rtuAddr, double dTemperature, unsigned char iMaxSendNum = 3);

	/// <summary>
	/// ��ȡ�¿�����ǰ�¶�
	/// </summary>
	/// <param name="rtuAddr">վ���ַ</param>
	/// <param name="pTemperature">��ȡ�����¶�ֵ����λ���ȣ�</param>
	/// <param name="iMaxSendNum">�������ʧ�ܣ�����ظ�����</param>
	/// <returns></returns>
	long GetTemperature(unsigned char rtuAddr, double &pTemperature, unsigned char iMaxSendNum = 3);

private:
	Temperature_Ctltype m_iTemperType; //�豸����
	CRS485 *m_ComPort;
	bool m_bIsInitSuccess;
	//static CTemperature *m_Temperature;
	static std::vector<TEMPERATURE_LST> m_vecTemperature;
	static std::mutex m_Mutex;
	std::mutex m_mutexReadWrite;  //���ڶ�д��

	CTemperature();
	~CTemperature();

	long Init(string  port, Temperature_Ctltype iTemperType); //��ʼ��
	void UnInit();//�ر�

	static CTemperature* GetTemperature(string addrs);

	CTemperature(const CTemperature &temperature);
	const CTemperature &operator=(const CTemperature &temperature);
};