1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792 |
- #include "stdafx.h"
- #include "OTA.h"
- ThreadSection g_csTask;
- static _SIACP_ g_Siacp[CMD_SIZE] = {
- {"EnterFactory", "AA", "10", "01", false, 100, 100},
- {"LeaveFactory", "AA", "10", "00", false, 100, 100},
- {"WBInit", "AA", "16", "02", false, 100, 100},//白平衡数据初始化(适用于所有信源)
- {"GetProjectID", "AA", "84", "00", false, 100, 100},
- {"GetSoftVersion", "AA", "57", "00", false, 100, 100},
- {"GetDeviceId", "AA", "BE", "01", true, 100, 100},
- {"GetClientType", "AA", "8C", "00", false, 100, 100},
- {"GetMAC", "AA", "BE", "00", true, 100, 100},
- {"GetHDCPKey", "AA", "EE", "00", false, 100, 100},
- {"GetHDCPKey22", "AA", "E7", "00", false, 100, 100},
- {"GetWidi", "AA", "E7", "00", false, 100, 100},
- {"GetNetflixESN", "AA", "BE", "06", true, 100, 100},
- {"GetWidevine", "AA", "EC", "00", true, 500,500},
- {"GetCiKey", "AA", "EC", "01", true, 500,500},
- {"GetOSDLanguage", "AA", "97", "00", true, 100, 100},
- {"GetShopLanguage", "AA", "97", "01", true, 100, 100},
- {"GetChannel", "AA", "97", "13", true, 100, 100},
- // 设置;
- {"SetProjectId", "AA", "70", "", false, 100, 100},
- {"SetDeviceID", "AA", "B2", "", false, 100, 100},
- {"SetMAC", "AA", "B3", "", false, 100, 100},
- {"SetHDCPKey", "AA FE", "86", "", false, 100, 100},
- {"SetHDCPKey22", "AA FE", "E4", "", false, 100, 100},
- {"SetNetflixESN", "AA FE", "99 00", "", false, 100, 100},
- {"SetWidi", "AA FE", "E4", "", false, 100, 100}, //与hdcp22相同指令
- {"SetWidevine", "AA FE", "E9 00", "", false, 500,500},
- {"SetCiKey", "AA FE", "E9 01", "", false, 500,500},
- {"SetOSDLanguage", "AA", "96 00", "", true, 100, 100},
- {"SetShopLanguage", "AA", "96 01", "", true, 100, 100},
- // 设置;
- {"SetChannel", "AA", "15", "", false, 100, 100},
- {"SetWBNormal", "AA", "4D 04 01 01", "", false, 100, 100},
- {"SetWBCool", "AA", "4D 04 02 01", "", false, 100, 100},
- {"SetWBWarm", "AA", "4D 04 03 01", "", false, 100, 100},
- // 检测;
- {"CheckMAC", "AA", "B4", "00", false, 100, 100},
- {"CheckDeviceId", "AA", "B4", "00", false, 100, 100},
- {"CheckHDCP", "AA", "87", "00", false, 100, 100},
- {"CheckNetflixESN", "AA", "9A", "00", true, 100, 100},
- {"CheckWidi", "AA", "E5", "00", false, 100, 100},
- {"CheckWidevine", "AA", "EA", "00", true, 100, 100},
- {"CheckCikey", "AA", "EA", "01", true, 100, 100},
- {"CheckHDCP22", "AA", "E5", "00", false, 100, 100},
- {"StarWarmUpMode", "AA", "13", "01", false, 100, 100},
- {"StopWarmUpMode", "AA", "13", "00", false, 100, 100},
- // 工厂菜单显示;
- {"ShowFactoryMenu", "AA", "11", "01", false, 100, 100},
- // 工厂菜单隐藏;
- {"HideFactoryMenu", "AA", "11", "00", false, 100, 100},
- // 工厂信息显示内容开;
- {"ShowFactoryInformation", "AA", "11", "02", false, 100, 100},
- // 工厂信息显示内容关;
- {"HideFactoryInformation", "AA", "11", "03", false, 100, 100},
- // 老化模式开;
- {"EnterAgingModel", "AA", "13", "01", false, 100, 100},
- // 老化模式关;
- {"LeaveAgingModel", "AA", "13", "00", false, 100, 100},
- // 读取老化时间;
- {"ReadAgingTime", "AA", "7A", "00", true, 100, 100},
- // USB 功能检测查询;
- //{"StopWarmUpMode", "AA", "17", "00", false, 100, 100},
- // 红色增益;
- {"SetRedGainRegister", "AA", "40", "", false, 100, 100},
- // 绿色增益;
- {"SetGreenGainRegister", "AA", "41", "", false, 100, 100},
- // 蓝色增益;
- {"SetBlueGainRegister", "AA", "42", "", false, 100, 100},
- // 红色偏移;
- {"SetRedOffsetRegister", "AA", "43", "", false, 100, 100},
- // 绿色偏移;
- {"SetGreenOffsetRegister", "AA", "44", "", false, 100, 100},
- // 蓝色偏移;
- {"SetBlueOffsetRegister", "AA", "45", "", false, 100, 100},
- };
- std::vector<_SIACP_> g_vtSiacp;
- const unsigned short CRC16_TABLE[16] = {
- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
- 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF
- };
- unsigned short CRC16Calculate(byte *pBuffer, unsigned int wordLength)
- {
- unsigned short wordCRC;
- byte byteTemp;
- wordCRC = 0xFFFF;
- while (wordLength--)
- {
- byteTemp = (byte)(wordCRC >> 0x0C);
- wordCRC <<= 4;
- wordCRC ^= CRC16_TABLE[byteTemp ^ ((*pBuffer) >> 0x04)];
- byteTemp = (byte)(wordCRC >> 0x0C);
- wordCRC <<= 4;
- wordCRC ^= CRC16_TABLE[byteTemp ^ ((*pBuffer) & 0x0F)];
- pBuffer++;
- }
- return wordCRC;
- }
- unsigned char TwoHexChar2Char(char ch1, char ch2)
- {
- char Numb1;
- char Numb2;
- if (ch1 >= 'A')
- Numb1 = (toupper(ch1) - '0' - 7) * 16;
- else
- Numb1 = (ch1 - '0') * 16;
- if (ch2 >= 'A')
- Numb2 = (toupper(ch2) - '0' - 7);
- else
- Numb2 = (ch2 - '0');
- return (Numb1 + Numb2);
- }
- std::string HexString2Bytes(std::string strHex, const int &len /* = 3 */)
- {
- byte value = 0;
- std::string strBytes;
- int nSize = strHex.size();
- for (int i = 0; i < nSize; i += len)
- {
- strBytes.push_back(TwoHexChar2Char(strHex[i], strHex[i + 1]));
- }
- return strBytes;
- }
- std::string Bytes2HexString(const unsigned char *pbuffer, int nLen, char chSpace)
- {
- std::string hex;
- char szhex[5] = {0};
- for (int i = 0; i < nLen; i++)
- {
- memset(szhex, 0, 5);
- _stprintf_s(szhex, "%02X%c", pbuffer[i], chSpace);
- hex.append(szhex);
- }
- return hex.substr(0, hex.size() - 1);
- }
- std::string Bytes2HexString(const unsigned char *pbuffer, int nLen)
- {
- std::string hex;
- char szhex[5] = {0};
- for (int i = 0; i < nLen; i++)
- {
- memset(szhex, 0, 5);
- _stprintf_s(szhex, "%02X", pbuffer[i]);
- hex.append(szhex);
- }
- return hex;
- }
- BOOL IsValidString(LPCTSTR lpszString)
- {
- if (lpszString == NULL)
- return FALSE;
- do
- {
- // ASCII可显示的字符;
- if (*lpszString < 32 || *lpszString > 126)
- {
- return FALSE;
- }
- } while (*++lpszString);
- return TRUE;
- }
- // 去除空格;
- std::string &trim(std::string &str)
- {
- int nIndex = 0;
- while ((nIndex = str.find_first_of(' ')) != std::string::npos)
- str.erase(nIndex, 1);
- return str;
- }
- CSIACP::CSIACP(void) //:m_vtcommand(g_siacp, g_siacp+sizeof(g_siacp)/sizeof(_SIACP_))
- {
- m_pMainDlg = NULL;
- m_pSerial = NULL;
- LoadCommand();
- }
- CSIACP::~CSIACP(void)
- {
- CloseComm();
- }
- void CSIACP::SetMainDlg(void* p)
- {
- m_pMainDlg = p;
- }
- void CSIACP::ShowMessage(LPCTSTR lpMsg, LOG_ENUM logtype)
- {
- if (m_pMainDlg && lpMsg)
- {
- //CTCLCopyToolDlg* pMainDlg = (CTCLCopyToolDlg*)m_pMainDlg;
- //pMainDlg->SetOptionLog(std::string(lpMsg), logtype);
- }
- }
- void CSIACP::LoadCommand()
- {
- #if 1
- g_vtSiacp.clear();
- for ( int i = 0; i < CMD_SIZE; i++ )
- {
- g_vtSiacp.push_back(g_Siacp[i]);
- }
- #else
- // 解析xml;
- tinyxml2::XMLDocument doc;
- if (tinyxml2::XML_SUCCESS != doc.LoadFile(_T("Siacp.xml")))
- {
- SaveCommand(g_Siacp, _T("Siacp.xml"));
- g_vtSiacp.clear();
- for ( int i = 0; i < CMD_SIZE; i++ )
- {
- g_vtSiacp.push_back(g_Siacp[i]);
- }
- return;
- }
- std::string ver;
- std::string desc;
- g_vtSiacp.clear();
- tinyxml2::XMLElement *pXmlRoot = NULL;
- if ((pXmlRoot = doc.RootElement()) != NULL)
- {
- if (_tcsicmp(pXmlRoot->Value(), "CommandList") == 0)
- {
- // 属性;
- const tinyxml2::XMLAttribute *pAttr = pXmlRoot->FirstAttribute();
- while (pAttr)
- {
- if (_tcsicmp(pAttr->Name(), "ver") == 0)
- {
- ver = pAttr->Value();
- }
- if (_tcsicmp(pAttr->Name(), "desc") == 0)
- {
- desc = pAttr->Value();
- }
- pAttr = pAttr->Next();
- }
- // 子项;
- tinyxml2::XMLElement *pXmlElent = pXmlRoot->FirstChildElement();
- while (pXmlElent)
- {
- _SIACP_ siacp;
- if (_tcsicmp(pXmlElent->Value(), _T("Item")) == 0)
- {
- tinyxml2::XMLElement *pItem = pXmlElent->FirstChildElement();
- while (pItem)
- {
- if (_tcsicmp(pItem->Value(), _T("Name")) == 0)
- {
- siacp.name = pItem->GetText();
- }
- else if (_tcsicmp(pItem->Value(), _T("HeadCode")) == 0)
- {
- siacp.head = pItem->GetText();
- }
- else if (_tcsicmp(pItem->Value(), _T("ucCommand")) == 0)
- {
- siacp.code = pItem->GetText();
- }
- else if (_tcsicmp(pItem->Value(), _T("Mark")) == 0)
- {
- siacp.mark = pItem->GetText();
- }
- else if (_tcsicmp(pItem->Value(), _T("MultiParams")) == 0)
- {
- siacp.bMulticode = pItem->BoolText();
- }
- else if (_tcsicmp(pItem->Value(), _T("ReadWaitTime")) == 0)
- {
- siacp.read_wait_time = pItem->IntText();
- }
- else if (_tcsicmp(pItem->Value(), _T("CmdWaitTime")) == 0)
- {
- siacp.cmd_wait_time = pItem->IntText();
- }
- pItem = pItem->NextSiblingElement();
- }
- }
- g_vtSiacp.push_back(siacp);
- pXmlElent = pXmlElent->NextSiblingElement();
- }
- }
- }
- #endif
- }
- void CSIACP::SaveCommand(std::vector<_SIACP_> &vtSiacp, std::string path)
- {
- tinyxml2::XMLDocument doc;
- //添加申明可以使用如下两行
- tinyxml2::XMLDeclaration *declaration = doc.NewDeclaration();
- doc.InsertFirstChild(declaration);
- tinyxml2::XMLElement *root = doc.NewElement("CommandList");
- root->SetAttribute("ver", "9.5");
- root->SetAttribute("desc", "command info");
- doc.InsertEndChild(root);
- std::vector<_SIACP_>::iterator it = vtSiacp.begin();
- for (; it != vtSiacp.end(); it++)
- {
- tinyxml2::XMLElement *pItem = doc.NewElement("Item");
- tinyxml2::XMLElement *pName = doc.NewElement("Name");
- pName->SetText(it->name.c_str());
- pItem->InsertEndChild(pName);
- tinyxml2::XMLElement *pHeadCode = doc.NewElement("HeadCode");
- pHeadCode->SetText(it->head.c_str());
- pItem->InsertEndChild(pHeadCode);
- tinyxml2::XMLElement *pucCommand = doc.NewElement("ucCommand");
- pucCommand->SetText(it->code.c_str());
- pItem->InsertEndChild(pucCommand);
- tinyxml2::XMLElement *pMark = doc.NewElement("Mark");
- pMark->SetText(it->mark.c_str());
- pItem->InsertEndChild(pMark);
- tinyxml2::XMLElement *pMultiParams = doc.NewElement("MultiParams");
- pMultiParams->SetText(it->bMulticode);
- pItem->InsertEndChild(pMultiParams);
- tinyxml2::XMLElement *pReadWaitTime = doc.NewElement("ReadWaitTime");
- pReadWaitTime->SetText(it->read_wait_time);
- pItem->InsertEndChild(pReadWaitTime);
- tinyxml2::XMLElement* pCmdWaitTime = doc.NewElement("CmdWaitTime");
- pCmdWaitTime->SetText(it->cmd_wait_time);
- pItem->InsertEndChild(pCmdWaitTime);
- root->InsertEndChild(pItem);
- }
- doc.SaveFile(path.c_str());
- }
- void CSIACP::SaveCommand(_SIACP_ (&Siacp)[CMD_SIZE], std::string path)
- {
- tinyxml2::XMLDocument doc;
- //添加申明可以使用如下两行
- tinyxml2::XMLDeclaration *declaration = doc.NewDeclaration();
- doc.InsertFirstChild(declaration);
- tinyxml2::XMLElement *root = doc.NewElement("CommandList");
- root->SetAttribute("ver", "9.5");
- root->SetAttribute("desc", "command info");
- doc.InsertEndChild(root);
- for (int i = 0; i < CMD_SIZE; i++)
- {
- tinyxml2::XMLElement *pItem = doc.NewElement("Item");
- tinyxml2::XMLElement *pName = doc.NewElement("Name");
- pName->SetText(Siacp[i].name.c_str());
- pItem->InsertEndChild(pName);
- tinyxml2::XMLElement *pHeadCode = doc.NewElement("HeadCode");
- pHeadCode->SetText(Siacp[i].head.c_str());
- pItem->InsertEndChild(pHeadCode);
- tinyxml2::XMLElement *pucCommand = doc.NewElement("ucCommand");
- pucCommand->SetText(Siacp[i].code.c_str());
- pItem->InsertEndChild(pucCommand);
- tinyxml2::XMLElement *pMark = doc.NewElement("Mark");
- pMark->SetText(Siacp[i].mark.c_str());
- pItem->InsertEndChild(pMark);
- tinyxml2::XMLElement *pMultiParams = doc.NewElement("MultiParams");
- pMultiParams->SetText(Siacp[i].bMulticode);
- pItem->InsertEndChild(pMultiParams);
- tinyxml2::XMLElement *pReadWaitTime = doc.NewElement("ReadWaitTime");
- pReadWaitTime->SetText(Siacp[i].read_wait_time);
- pItem->InsertEndChild(pReadWaitTime);
- tinyxml2::XMLElement* pCmdWaitTime = doc.NewElement("CmdWaitTime");
- pCmdWaitTime->SetText(Siacp[i].cmd_wait_time);
- pItem->InsertEndChild(pCmdWaitTime);
- root->InsertEndChild(pItem);
- }
- doc.SaveFile(path.c_str());
- }
- BOOL CSIACP::OpenComm(int nSerialPort, DWORD dwBaudrate)
- {
- if ( nSerialPort <= 0 )
- {
- ////Global::WriteReportLog(1, "Parameter error", "(lpszCom) Invalid parameter!");
- return FALSE;
- }
- // 释放打开的;
- if (m_pSerial)
- delete m_pSerial;
- m_pSerial = NULL;
- m_pSerial = new CSynSerial();
- if (m_pSerial == NULL)
- {
- //Global::WriteReportLog(1, "Memory error", "(m_pSerial) Fail to create object!");
- return FALSE;
- }
- m_pSerial->OpenSerialPort(nSerialPort, dwBaudrate, 8, 0, 1, 0, 1000);
- if (m_pSerial->IsOpen() == FALSE)
- {
- delete m_pSerial;
- m_pSerial = NULL;
- //Global::WriteReportLog(1, "Serial port error", "Open Serial Port Fail !");
- return FALSE;
- }
- // 超时值设置;
- COMMTIMEOUTS comTimeOut;
- comTimeOut.ReadIntervalTimeout = 50;
- comTimeOut.ReadTotalTimeoutConstant = 8000; // 读取所有字节总超时值;
- comTimeOut.ReadTotalTimeoutMultiplier = 100; // 读取1个字节超时值;
- comTimeOut.WriteTotalTimeoutConstant = 5000; // 写所有字节的总超时值;
- comTimeOut.WriteTotalTimeoutMultiplier = 100; // 写1个字节的超时值;
- m_pSerial->SetTimeouts(comTimeOut);
- return TRUE;
- }
- void CSIACP::CloseComm()
- {
- if (m_pSerial)
- delete m_pSerial;
- m_pSerial = NULL;
- }
- BOOL CSIACP::ExecSerialCommand(const _SIACP_ &siacp, std::string command)
- {
- if (m_pSerial == NULL || !m_pSerial->IsOpen())
- {
- //Global::WriteReportLog(1, "Serial port error", "Serial Port un't Open!");
- return FALSE;
- }
- byte szRecive[BUFFER_LEN] = {0};
- DWORD dwWritten = m_pSerial->WriteComm((BYTE*)command.c_str(), command.size());
- //Global::WriteTextLog(_T("COM Write:%s"), Bytes2HexString((const byte *)command.c_str(), command.size(), ' ').c_str());
- if (dwWritten != command.size())
- {
- //Global::WriteTextLog("COM Written Error");
- //Global::WriteReportLog(1, "Serial Writing Error", "COM Written Error, Buffer=%s", Bytes2HexString((const byte*)command.c_str(), command.size(), ' ').c_str());
- return FALSE;
- }
- // 暂停时间;// 等待设备响应完成;
- Sleep(siacp.read_wait_time);
- DWORD dwBytesRead = m_pSerial->ReadComm(szRecive, BUFFER_LEN);
- if (dwBytesRead == 0)
- {
- //Global::WriteTextLog("COM Read Error");
- //Global::WriteReportLog(1, "Serial Reading Error","COM Read Error(No Data Return), Write=%s!", Bytes2HexString((const byte*)command.c_str(), command.size(), ' ').c_str());
- return FALSE;
- }
- //Global::WriteTextLog(_T("COM Read:%s\r"), Bytes2HexString(szRecive, dwBytesRead, ' ').c_str());
- // 下一条命令等待时间;
- Sleep(siacp.cmd_wait_time);
- // 解析数据;
- return ParserSerialData(m_vtdata, siacp, szRecive, dwBytesRead);
- }
- BOOL CSIACP::ParserSerialData(std::vector<RTN> &vtdata, const _SIACP_ &siacp, byte *pbuffer, DWORD dwlen)
- {
- vtdata.clear();
- if (pbuffer == NULL || dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return length less than 5! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- // 返回码;
- byte byReturn = TV_Return;
- byte byHead = (byte)HexString2Bytes(siacp.head)[0];
- byte byCode = (byte)HexString2Bytes(siacp.code)[0];
- if (byHead == TV_Debug)
- {
- byReturn = TV_Return;
- }
- else if (byHead == TV_Panel_Debug)
- {
- byReturn = TV_Panel_Return;
- }
- else if (byHead == TV_Debug_Other)
- {
- byReturn = TV_Other_Return;
- }
- else
- {
- //Global::WriteTextLog("COM Read Parser: Invalid return code!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Invalid return code! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- std::string data;
- data.append((const char *)pbuffer, dwlen);
- int nABFE = 0;
- std::string package;
- int package_len = 0;
- // 已取出的长度;
- int nTookenLen = 0;
- unsigned short usCRCValue;
- bool mark = true;
- while (true)
- {
- begin:
- if (mark)
- {
- while ((byte)data.at(0) != byReturn)
- {
- data.erase(0, 1);
- dwlen--;
- if (dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return data error! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- }
- while ((byte)data.at(1) != 0x05)
- {
- data.erase(0, 2);
- dwlen = dwlen - 2;
- if (dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return data error! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- goto begin;
- }
- while ((byte)data.at(2) != 0x0A)
- {
- data.erase(0, 3);
- dwlen = dwlen - 3;
- if (dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return data error! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- goto begin;
- }
- while ((byte)data.at(3) != 0xDF)
- {
- data.erase(0, 4);
- dwlen = dwlen - 4;
- if (dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return data error! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- goto begin;
- }
- while ((byte)data.at(4) != 0x4E)
- {
- data.erase(0, 5);
- dwlen = dwlen - 5;
- if (dwlen < 5)
- {
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Return data error! Buffer = %s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- goto begin;
- }
- }
- mark = false;
- // 是否已取完所有数据;
- if (nTookenLen >= dwlen)
- break;
- // 取出长度;
- if ((byte)data.at(nTookenLen + 1) == 0xFE)
- {
- nABFE = 2; //FE占1字节,长度多占1字节;共多占2字节;
- package_len = ((unsigned int)data[nTookenLen + 2] << 8) | (byte)data[nTookenLen + 3];
- }
- else
- {
- nABFE = 0;
- package_len = data[nTookenLen + 1];
- }
- // 包长度是否在有效长度内;
- if (package_len > (dwlen - nTookenLen))
- {
- //Global::WriteTextLog("COM Read Parser: Incorrect length of returned data!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Incorrect length of returned data! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- // 取出数据包;
- package = data.substr(nTookenLen, nTookenLen + package_len);
- // 校验包头是否正确;
- if (byte(package[0]) != byReturn)
- {
- //Global::WriteTextLog("COM Read Parser: Data Header Check Error!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Data Header Check Error! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- // 校验crc;
- usCRCValue = CRC16Calculate((unsigned char *)package.data(), package_len - 2);
- if (((usCRCValue >> 8) & 0xFF) != (unsigned char)package[package_len - 2] || (usCRCValue & 0xFF) != (unsigned char)package[package_len - 1])
- {
- //Global::WriteTextLog("COM Read Parser: Data CRC validation failure!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,Data CRC validation failure! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- // 第一组返回,检测结果码
- if (nTookenLen == 0)
- {
- if (package[2] != RC_OK)
- {
- //Global::WriteTextLog("COM Read Parser: The return code of the response data is invalid!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,The return code of the response data is invalid! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- }
- else
- {
- // 响应数据的命令码 = 发送数据的命令码 - 1;
- if (byte(package[2 + nABFE] - 1) != byCode)
- {
- //Global::WriteTextLog("COM Read Parser: The command code of response data does not match the command code of sending data!");
- //Global::WriteReportLog(1, "Serial Parsing error", "cmd=%s,The command code of response data does not match the command code of sending data! Buffer=%s", siacp.name.c_str(), Bytes2HexString(pbuffer, dwlen, ' ').c_str());
- return FALSE;
- }
- RTN rtn;
- // 获取结果值;
- if (siacp.bMulticode)
- {
- rtn.len = package_len - 6 - nABFE;
- rtn.data = package.substr(4 + nABFE, package_len - 6 - nABFE);
- }
- else
- {
- rtn.len = package_len - 5 - nABFE;
- rtn.data = package.substr(3 + nABFE, package_len - 5 - nABFE);
- }
- vtdata.push_back(rtn);
- break;//最多解析2段
- }
- nTookenLen += package_len;
- }
- return TRUE;
- }
- const _SIACP_ *CSIACP::GetSiacp(std::string name)
- {
- std::vector<_SIACP_>::iterator it = g_vtSiacp.begin();
- for (; it != g_vtSiacp.end(); it++)
- {
- if (_tcsicmp(it->name.c_str(), name.c_str()) == 0)
- {
- return &*it;
- }
- }
- return NULL;
- }
- std::string CSIACP::GetSiacpCommand(const _SIACP_ &siacp, std::string others, int othersLen)
- {
- std::string command;
- command.append(HexString2Bytes(siacp.head).c_str(), (siacp.head.size() + 1) / 3);
- command.append(HexString2Bytes(siacp.code).c_str(), (siacp.code.size() + 1) / 3);
- command.append(HexString2Bytes(siacp.mark).c_str(), (siacp.mark.size() + 1) / 3);
- command.append(others.c_str(), othersLen);
- // 长度;
- byte szlen[2] = {0};
- int len = command.size() + 3; // 3=长度本身占1位+2位crc;
- if ((byte)command[1] == 0xFE)
- {
- szlen[0] = ((len + 1) >> 8) & 0xFF;
- szlen[1] = (len + 1) & 0xFF;
- command.insert(2, (char *)szlen, 2);
- }
- else
- {
- szlen[0] = len & 0xFF;
- command.insert(1, (char *)szlen, 1);
- }
- // crc校验;
- byte szcrc[2] = {0};
- WORD usCRCValue = CRC16Calculate((byte *)command.c_str(), command.size());
- szcrc[0] = (usCRCValue >> 8) & 0xFF;
- szcrc[1] = usCRCValue & 0xFF;
- command.append((char *)szcrc, 2);
- return command;
- }
- std::string CSIACP::GetSiacpCommand(std::string name, std::string others, int othersLen)
- {
- std::string command;
- std::vector<_SIACP_>::iterator it = g_vtSiacp.begin();
- for (; it != g_vtSiacp.end(); it++)
- {
- if (_tcsicmp(name.c_str(), it->name.c_str()) == 0)
- {
- command.append(HexString2Bytes(it->head).c_str(), (it->head.size() + 1) / 3);
- command.append(HexString2Bytes(it->code).c_str(), (it->code.size() + 1) / 3);
- command.append(HexString2Bytes(it->mark).c_str(), (it->mark.size() + 1) / 3);
- command.append(others.c_str(), othersLen);
- // 长度;
- byte szlen[2] = {0};
- int len = command.size() + 3; // 长度本身占1位;
- if ((byte)command[1] == 0xFE)
- {
- szlen[0] = ((len + 1) >> 8) & 0xFF;
- szlen[1] = (len + 1) & 0xFF;
- command.insert(2, (char *)szlen, 2);
- }
- else
- {
- szlen[0] = len & 0xFF;
- command.insert(1, (char *)szlen, 1);
- }
- // crc校验;
- byte szcrc[2] = {0};
- int usCRCValue = CRC16Calculate((byte *)command.c_str(), command.size());
- szcrc[0] = (usCRCValue >> 8) & 0xFF;
- szcrc[1] = usCRCValue & 0xFF;
- command.append((char *)szcrc, 2);
- break;
- }
- }
- return command;
- }
- BOOL CSIACP::SendCommand(std::string cmd_name, const byte *pszOthers, DWORD dwOthersLen)
- {
- std::string others;
- if (pszOthers && dwOthersLen > 0)
- {
- others.append((char *)pszOthers, dwOthersLen);
- }
- // 获取命令协议;
- const _SIACP_ *pSiacp = GetSiacp(cmd_name);
- if (pSiacp == NULL)
- {
- //Global::WriteTextLog("This command is not supported!");
- //Global::WriteReportLog(1, "Invalid command", "This command(%s) is not supported!", cmd_name.c_str());
- return FALSE;
- }
- std::string command = GetSiacpCommand(*pSiacp, others, dwOthersLen);
- if (command.size() == 0)
- {
- //Global::WriteTextLog("Generation command failed!");
- //Global::WriteReportLog(1, "Generation command failed", "command=%s", cmd_name.c_str());
- return FALSE;
- }
- return ExecSerialCommand(*pSiacp, command);
- }
- BOOL CSIACP::SendCommand2(std::string cmd_name, std::string data /* = "" */, size_t nlen /* = 0 */)
- {
- // 获取命令协议;
- const _SIACP_ *pSiacp = GetSiacp(cmd_name);
- if (pSiacp == NULL)
- {
- //Global::WriteTextLog("This command is not supported!");
- //Global::WriteReportLog(1, "Invalid command", "This command(%s) is not supported!", cmd_name.c_str());
- return FALSE;
- }
- std::string command = GetSiacpCommand(*pSiacp, data, nlen);
- if (command.size() == 0)
- {
- //Global::WriteTextLog("Generation command failed!");
- //Global::WriteReportLog(1, "Generation command failed", "command=%s", cmd_name.c_str());
- return FALSE;
- }
- return ExecSerialCommand(*pSiacp, command);
- }
- BOOL CSIACP::SCBC_WaitTVBoot()
- {
- byte szRecive[BUFFER_LEN] = { 0 };
- DWORD dwBytesRead = 0;
- // 根据配置文件,是否需要读等待;
- if ( true )
- dwBytesRead = m_pSerial->ReadComm(szRecive, BUFFER_LEN);
- if (dwBytesRead == 0)
- {
- if ( SCBC_EnterFactory() )
- {
- SCBC_LeaveFactory();
- return TRUE;
- }
- }
- return FALSE;
- }
- BOOL CSIACP::SCBC_MTKInit()
- {
- if (m_pSerial == NULL)
- {
- //Global::WriteTextLog("串口对象未初始化");
- //Global::WriteReportLog(1, "MTKInit Error", "Serial port object uninitialized!");
- return FALSE;
- }
- if (!m_pSerial->IsOpen())
- {
- //Global::WriteTextLog("未打开串口");
- //Global::WriteReportLog(1, "MTKInit Error", "Unopened Serial Port!");
- return FALSE;
- }
- unsigned char ucBufInitMTK8223[16] = {0x54, 0x8A, 0x51, 0x37, 0x56, 0x92, 0x1C, 0xB2, 0x50, 0x80, 0x50, 0x02, 0x50, 0x01, 0x50, 0xE2};
- m_pSerial->WriteComm(ucBufInitMTK8223, 16);
- Sleep(50);
- return TRUE;
- }
- // 对外接口;
- BOOL CSIACP::SCBC_EnterFactory()
- {
- return SendCommand("EnterFactory");
- }
- BOOL CSIACP::SCBC_LeaveFactory()
- {
- return SendCommand("LeaveFactory");
- }
- BOOL CSIACP::SCBC_WBInit()
- {
- return SendCommand("WBInit");
- }
- BOOL CSIACP::SCBC_GetProjectId(int &pid)
- {
- BOOL bRet = SendCommand("GetProjectId");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.len == 2)
- {
- pid = (byte)rtn.data[0] << 8;
- pid += (byte)rtn.data[1];
- }
- else
- {
- pid = (byte)rtn.data[0];
- }
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetSoftVersion(std::string &strVer)
- {
- BOOL bRet = SendCommand("GetSoftVersion");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (!IsValidString(rtn.data.c_str()))
- {
- //Global::WriteTextLog("%s:%s%s!", __FUNCTION__, "tv version string is invalid=", rtn.data.c_str());
- //Global::WriteReportLog(1, "Copy Key", "%s:%s%s!", __FUNCTION__, "tv version string is invalid=", rtn.data.c_str());
- return FALSE;
- }
- strVer.append(rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetDeviceId(std::string &strDid)
- {
- BOOL bRet = SendCommand("GetDeviceId");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- strDid.append(rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetClientType(std::string &strClt)
- {
- BOOL bRet = SendCommand("GetClientType");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (!IsValidString(rtn.data.c_str()))
- {
- //Global::WriteTextLog("%s:%s%s!", __FUNCTION__, "tv client string is invalid=", rtn.data.c_str());
- //Global::WriteReportLog(1, "Copy Key", "%s:%s%s!", __FUNCTION__, "tv client string is invalid=", rtn.data.c_str());
- return FALSE;
- }
- strClt.append(rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetMAC(std::string &strMac)
- {
- BOOL bRet = SendCommand("GetMAC");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- strMac = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len, '-');
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetHDCPKey(std::string &strHDCP)
- {
- BOOL bRet = SendCommand("GetHDCPKey");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- //strHDCP.append(rtn.data.c_str(), rtn.len);
- strHDCP = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetHDCPKey22(std::string &strHDCP22)
- {
- BOOL bRet = SendCommand("GetHDCPKey22");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- //strHDCP22.append(rtn.data.c_str(), rtn.len);
- strHDCP22 = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetWidi(std::string &strWidi)
- {
- BOOL bRet = SendCommand("GetWidi");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- //strWidi.append(rtn.data.c_str(), rtn.len);
- strWidi = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetNetflixESN(std::string &strESN)
- {
- BOOL bRet = SendCommand("GetNetflixESN");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- strESN.append(rtn.data.c_str(), rtn.len);
- //strESN = Bytes2HexString((const byte*)rtn.data.c_str(), rtn.len, ' ');
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetWidevine(std::string &strWidevine)
- {
- BOOL bRet = SendCommand("GetWidevine");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- //strWidevine.append(rtn.data.c_str(), rtn.len);
- strWidevine = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetCiKey(std::string &strCikey)
- {
- BOOL bRet = SendCommand("GetCiKey");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- //strCikey.append(rtn.data.c_str(), rtn.len);
- strCikey = Bytes2HexString((const byte *)rtn.data.c_str(), rtn.len);
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetOSDLanguage(std::string &strOSDLan)
- {
- BOOL bRet = SendCommand("GetOSDLanguage");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- strOSDLan.append(rtn.data.c_str(), rtn.len);
- strOSDLan = Bytes2HexString((const byte*)rtn.data.c_str(), rtn.len, ' ');
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetShopLanguage(std::string &strShopLan)
- {
- BOOL bRet = SendCommand("GetShopLanguage");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- strShopLan.append(rtn.data.c_str(), rtn.len);
- strShopLan = Bytes2HexString((const byte*)rtn.data.c_str(), rtn.len, ' ');
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_GetChannel(std::string& channel)
- {
- BOOL bRet = SendCommand("GetChannel");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- channel.append(rtn.data.c_str(), rtn.len);
- channel = Bytes2HexString((const byte*)rtn.data.c_str(), rtn.len, ' ');
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_SetProjectId(const int &pid)
- {
- std::string data;
- if (pid > 0xFF)
- {
- data.append(1, (pid >> 8) & 0xFF);
- data.append(1, pid & 0xFF);
- }
- else
- {
- data.append(1, pid & 0xFF);
- }
- return SendCommand2("SetProjectId", data, data.size());
- }
- BOOL CSIACP::SCBC_SetProjectId(std::string pid)
- {
- return SCBC_SetProjectId(atoi(pid.c_str()));
- }
- BOOL CSIACP::SCBC_SetProjectId(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetProjectId", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetDeviceId(std::string strDeviceId)
- {
- if (strDeviceId.size() < 40)
- {
- return FALSE;
- }
- return SendCommand2("SetDeviceId", strDeviceId, strDeviceId.size());
- }
- BOOL CSIACP::SCBC_SetDeviceId(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetDeviceId", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetMAC(std::string strMac)
- {
- if (strMac.size() < 16)
- return FALSE;
- std::string data = HexString2Bytes(strMac);
- return SendCommand2("SetMAC", data, (strMac.size() + 1) / 3);
- }
- BOOL CSIACP::SCBC_SetMAC(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetMAC", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetHDCPKey(std::string strHDCP, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strHDCP, bHasSpace ? 3 : 2);
- return SendCommand2("SetHDCPKey", data, (strHDCP.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetHDCPKey(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetHDCPKey", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetHDCPKey22(std::string strHDCP22, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strHDCP22, bHasSpace ? 3 : 2);
- return SendCommand2("SetHDCPKey22", data, (strHDCP22.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetHDCPKey22(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetHDCPKey22", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetNetflixESN(std::string strESN, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strESN, bHasSpace ? 3 : 2);
- return SendCommand2("SetNetflixESN", data, (strESN.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetNetflixESN(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetNetflixESN", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetWidi(std::string strWidi, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strWidi, bHasSpace ? 3 : 2);
- return SendCommand2("SetWidi", data, (strWidi.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetWidi(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetWidi", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetWidevine(std::string strWidevine, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strWidevine, bHasSpace ? 3 : 2);
- return SendCommand2("SetWidevine", data, (strWidevine.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetWidevine(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetWidevine", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetCiKey(std::string strCiKey, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(strCiKey, bHasSpace ? 3 : 2);
- return SendCommand2("SetCiKey", data, (strCiKey.size() + 1) / (bHasSpace ? 3 : 2));
- }
- BOOL CSIACP::SCBC_SetCiKey(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetCiKey", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetOSDLanguage(std::string lan, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(lan, bHasSpace ? 3 : 2);
- return SendCommand2("SetOSDLanguage", data, data.size());
- }
- BOOL CSIACP::SCBC_SetOSDLanguage(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetOSDLanguage", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetShopLanguage(std::string lan, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(lan, bHasSpace ? 3 : 2);
- return SendCommand2("SetShopLanguage", data, data.size());
- }
- BOOL CSIACP::SCBC_SetShopLanguage(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetShopLanguage", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetChannel(std::string channel, BOOL bHasSpace /* = TRUE */)
- {
- std::string data = HexString2Bytes(channel, bHasSpace ? 3 : 2);
- return SendCommand2("SetChannel", data, data.size());
- }
- BOOL CSIACP::SCBC_SetChannel(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetChannel", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetChannel(int channel)
- {
- std::string data;
- data.append(1, channel & 0xFF);
- return SendCommand2("SetChannel", data, data.size());
- }
- BOOL CSIACP::SCBC_SetWBNormal(std::string data)
- {
- return SendCommand2("SetWBNormal", data, data.size());
- }
- BOOL CSIACP::SCBC_SetWBNormal(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetWBNormal", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetWBCool(std::string data)
- {
- return SendCommand2("SetWBCool", data, data.size());
- }
- BOOL CSIACP::SCBC_SetWBCool(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetWBCool", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_SetWBWarm(std::string data)
- {
- return SendCommand2("SetWBWarm", data, data.size());
- }
- BOOL CSIACP::SCBC_SetWBWarm(const byte *pBuffer, const int &nLen)
- {
- return SendCommand("SetWBWarm", pBuffer, nLen);
- }
- BOOL CSIACP::SCBC_CheckDeviceId()
- {
- BOOL bRet = SendCommand("CheckDeviceId");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- #if TEMP_5659
- if (bydata == 0x03 || bydata == 0x02 || bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- #else
- if (bydata == 0x02 || bydata == 0x03 || bydata == 0x07)
- return TRUE;
- else
- return FALSE;
- #endif
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckMAC()
- {
- BOOL bRet = SendCommand("CheckMAC");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01 || bydata == 0x03 || bydata == 0x07)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckHDCP()
- {
- BOOL bRet = SendCommand("CheckHDCP");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckHDCP22()
- {
- BOOL bRet = SendCommand("CheckHDCP22");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckNetflixESN()
- {
- BOOL bRet = SendCommand("CheckNetflixESN");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckWidi()
- {
- BOOL bRet = SendCommand("CheckWidi");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckWidevine()
- {
- BOOL bRet = SendCommand("CheckWidevine");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_CheckCikey()
- {
- BOOL bRet = SendCommand("CheckCikey");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bydata = (byte)rtn.data.at(0);
- if (bydata == 0x01)
- return TRUE;
- else
- return FALSE;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_StarWarmUpMode()
- {
- return SendCommand("StarWarmUpMode");
- }
- BOOL CSIACP::SCBC_StopWarmUpMode()
- {
- return SendCommand("StopWarmUpMode");
- }
- BOOL CSIACP::SCBC_ShowFactoryMenu()
- {
- return SendCommand("ShowFactoryMenu");
- }
- BOOL CSIACP::SCBC_HideFactoryMenu()
- {
- return SendCommand("HideFactoryMenu");
- }
- BOOL CSIACP::SCBC_ShowFactoryInformation()
- {
- return SendCommand("ShowFactoryInformation");
- }
- BOOL CSIACP::SCBC_HideFactoryInformation()
- {
- return SendCommand("HideFactoryInformation");
- }
- BOOL CSIACP::SCBC_EnterAgingModel()
- {
- return SendCommand("EnterAgingModel");
- }
- BOOL CSIACP::SCBC_LeaveAgingModel()
- {
- return SendCommand("LeaveAgingModel");
- }
- BOOL CSIACP::SCBC_ReadAgingTime(int &min)
- {
- BOOL bRet = SendCommand("ReadAgingTime");
- if (bRet)
- {
- if (m_vtdata.size() == 0)
- {
- //Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
- //Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
- return FALSE;
- }
- RTN rtn = m_vtdata.at(0);
- if (rtn.data.size() == 0)
- {
- return FALSE;
- }
- byte bymin = (byte)rtn.data.at(0);
- byte byhour = (byte)rtn.data.at(1);
-
- min = bymin + 60*byhour;
- }
- return bRet;
- }
- BOOL CSIACP::SCBC_SetRedGainRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetRedGainRegister", data, data.size());
- }
- BOOL CSIACP::SCBC_SetGreenGainRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetGreenGainRegister", data, data.size());
- }
- BOOL CSIACP::SCBC_SetBlueGainRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetBlueGainRegister", data, data.size());
- }
- BOOL CSIACP::SCBC_SetRedOffsetRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetRedOffsetRegister", data, data.size());
- }
- BOOL CSIACP::SCBC_SetGreenOffsetRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetGreenOffsetRegister", data, data.size());
- }
- BOOL CSIACP::SCBC_SetBlueOffsetRegister(int value)
- {
- std::string data;
- if (value > 0xFF)
- {
- data.append(1, (value >> 8) & 0xFF);
- data.append(1, value & 0xFF);
- }
- else
- {
- data.append(1, value & 0xFF);
- }
- return SendCommand2("SetBlueOffsetRegister", data, data.size());
- }
|