247 lines
5.1 KiB
C++
247 lines
5.1 KiB
C++
#include "lightsource.h"
|
|
#include "rs_settings.h"
|
|
|
|
LightSource* LightSource::UniqueInstance = nullptr;
|
|
|
|
LightSource* LightSource::Instance()
|
|
{
|
|
if (!UniqueInstance) {
|
|
UniqueInstance = new LightSource();
|
|
}
|
|
return UniqueInstance;
|
|
}
|
|
LightSource::~LightSource()
|
|
{
|
|
|
|
}
|
|
LightSource::LightSource()
|
|
{
|
|
|
|
}
|
|
int LightSource::getCheck(char * buf, int len,char * strAscii)
|
|
{
|
|
unsigned char data = 0;
|
|
data = static_cast<unsigned char>(buf[0]);
|
|
for (int i = 1;i < len; i++)
|
|
{
|
|
data = static_cast<unsigned char>(data ^ buf[i]);
|
|
}
|
|
getValueAscii(data, strAscii);
|
|
return 0;
|
|
}
|
|
int LightSource::getValueAscii(unsigned char value,char * strAscii)
|
|
{
|
|
char ascii_buf[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',};
|
|
int high,low;
|
|
high = (value & 0xf0) >> 4;
|
|
low = value & 0x0f;
|
|
strAscii[0] = ascii_buf[high];
|
|
strAscii[1] = ascii_buf[low];
|
|
return 0;
|
|
}
|
|
int LightSource::SetBrightness(int chn)
|
|
{
|
|
int ret;
|
|
unsigned char data;
|
|
char cmd[50] = {0};
|
|
char ascii_buf[2];
|
|
|
|
if (m_hComm == nullptr)
|
|
{
|
|
bool ret = OpenComm();
|
|
if (!ret)
|
|
{
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
int brightness;
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessFind");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
data = static_cast<unsigned char>(brightness);
|
|
getValueAscii(data,ascii_buf);
|
|
|
|
cmd[0] = '#';
|
|
cmd[1] = '3';
|
|
cmd[2] = static_cast<char>(0x30 + chn);
|
|
cmd[3] = 0x30;
|
|
cmd[4] = ascii_buf[0];
|
|
cmd[5] = ascii_buf[1];
|
|
getCheck(cmd, 6, ascii_buf);
|
|
cmd[6] = ascii_buf[0];
|
|
cmd[7] = ascii_buf[1];
|
|
|
|
|
|
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 8 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
if (ret == 0)
|
|
{
|
|
if (revData[0] != '#')
|
|
return -1;
|
|
}
|
|
return ret;
|
|
}
|
|
int LightSource::LightOn(int chn)
|
|
{
|
|
int ret;
|
|
char cmd[50] = {0};
|
|
char ascii_buf[10];
|
|
char chn_char;
|
|
int chnNumber;
|
|
|
|
if (m_hComm == nullptr)
|
|
{
|
|
bool ret = OpenComm();
|
|
if (!ret)
|
|
{
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
int brightness;
|
|
if (chn == 1)
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessFind");
|
|
RS_SETTINGS->endGroup();
|
|
chnNumber = chnFind;
|
|
}
|
|
else
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessGlobal");
|
|
RS_SETTINGS->endGroup();
|
|
chnNumber = chnGlobal;
|
|
}
|
|
|
|
sprintf_s(ascii_buf,10,"%04d",brightness);
|
|
if (chnNumber == 1)
|
|
{
|
|
chn_char = 'A';
|
|
}
|
|
else if (chnNumber == 2)
|
|
{
|
|
chn_char = 'B';
|
|
}
|
|
else if (chnNumber == 3)
|
|
{
|
|
chn_char = 'C';
|
|
}
|
|
else
|
|
{
|
|
chn_char = 'D';
|
|
}
|
|
|
|
cmd[0] = 'S';
|
|
cmd[1] = chn_char;
|
|
memcpy_s(&cmd[2],4,ascii_buf,4);
|
|
cmd[6] = '#';
|
|
|
|
|
|
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 7 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
if (ret == 0)
|
|
{
|
|
if (revData[0] != chn_char)
|
|
{
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 8 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
if (revData[0] != chn_char)
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 7 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
}
|
|
return ret;
|
|
}
|
|
int LightSource::LightOff(int chn)
|
|
{
|
|
int ret;
|
|
char cmd[50] = {0};
|
|
char ascii_buf[10];
|
|
char chn_char;
|
|
int chnNumber;
|
|
|
|
if (m_hComm == nullptr)
|
|
{
|
|
bool ret = OpenComm();
|
|
if (!ret)
|
|
{
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
int brightness = 0;
|
|
if (chn == 1)
|
|
{
|
|
chnNumber = chnFind;
|
|
}
|
|
else
|
|
{
|
|
chnNumber = chnGlobal;
|
|
}
|
|
|
|
sprintf_s(ascii_buf,10,"%04d",brightness);
|
|
if (chnNumber == 1)
|
|
{
|
|
chn_char = 'A';
|
|
}
|
|
else if (chnNumber == 2)
|
|
{
|
|
chn_char = 'B';
|
|
}
|
|
else if (chnNumber == 3)
|
|
{
|
|
chn_char = 'C';
|
|
}
|
|
else
|
|
{
|
|
chn_char = 'D';
|
|
}
|
|
|
|
cmd[0] = 'S';
|
|
cmd[1] = chn_char;
|
|
memcpy_s(&cmd[2],4,ascii_buf,4);
|
|
cmd[6] = '#';
|
|
|
|
|
|
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 7 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
if (ret == 0)
|
|
{
|
|
if (revData[0] != chn_char)
|
|
{
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 8 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
if (revData[0] != chn_char)
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
ret = SendCmd(reinterpret_cast<char*>(cmd), 7 ,reinterpret_cast<unsigned char*>(revData), &revDataLen);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
int LightSource::getChnId(QString DevName)
|
|
{
|
|
QSettings *settings;//申明一个QSetting类函数
|
|
settings = new QSettings ("SerialDevSet.ini", QSettings::IniFormat);//构建函数
|
|
|
|
QString strKey;
|
|
strKey = "/"+DevName+"/chnFind";
|
|
chnFind = settings->value(strKey).toInt();
|
|
strKey = "/"+DevName+"/chnGlobal";
|
|
chnGlobal = settings->value(strKey).toInt();
|
|
|
|
return 0;
|
|
}
|