Files
newspark110/device/SerialPort/lightsource.cpp
Chenwenxuan edac2715f0 init
2024-03-06 14:54:30 +08:00

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;
}