#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(buf[0]); for (int i = 1;i < len; i++) { data = static_cast(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(brightness); getValueAscii(data,ascii_buf); cmd[0] = '#'; cmd[1] = '3'; cmd[2] = static_cast(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(cmd), 8 ,reinterpret_cast(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(cmd), 7 ,reinterpret_cast(revData), &revDataLen); if (ret == 0) { if (revData[0] != chn_char) { ret = SendCmd(reinterpret_cast(cmd), 8 ,reinterpret_cast(revData), &revDataLen); if (revData[0] != chn_char) return -1; } } else { ret = SendCmd(reinterpret_cast(cmd), 7 ,reinterpret_cast(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(cmd), 7 ,reinterpret_cast(revData), &revDataLen); if (ret == 0) { if (revData[0] != chn_char) { ret = SendCmd(reinterpret_cast(cmd), 8 ,reinterpret_cast(revData), &revDataLen); if (revData[0] != chn_char) return -1; } } else { ret = SendCmd(reinterpret_cast(cmd), 7 ,reinterpret_cast(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; }