TCLCommand.cpp 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303
  1. // TCLCommand.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include "TCLCommand.h"
  5. #include "Command.h"
  6. #include "resource.h"
  7. #ifdef __MAKE_PYD__
  8. #include "Python.h"
  9. #endif
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #endif
  13. // 唯一的应用程序对象
  14. CWinApp theApp;
  15. TCLCommand g_TCLCommand;
  16. // 宏函数;
  17. #define OPEN_CHECK if (!g_TCLCommand.IsOpen()) return false
  18. #define GET_CMDS(cmdName) CommandParam cmdpara;\
  19. if ( !g_TCLCommand.GetCommandParams(cmdName, cmdpara) )return false;\
  20. g_TCLCommand.PackingCommand(cmdpara);
  21. #define SET_CMDS(cmdName, data, len) CommandParam cmdpara;\
  22. if ( !g_TCLCommand.GetCommandParams(cmdName, cmdpara) )return false;\
  23. g_TCLCommand.PackingCommand(cmdpara, data, len);
  24. using namespace std;
  25. #ifdef __CONSOLE__
  26. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  27. {
  28. int nRetCode = 0;
  29. // 初始化 MFC 并在失败时显示错误
  30. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  31. {
  32. // TODO: 更改错误代码以符合您的需要
  33. _tprintf(_T("错误: MFC 初始化失败\n"));
  34. nRetCode = 1;
  35. }
  36. else
  37. {
  38. // TODO: 在此处为应用程序的行为编写代码。
  39. if ( Open(5, 9600, 8, 0, 1) )
  40. {
  41. EnterFactory();
  42. int pid;
  43. GetProjectId(pid);
  44. std::string value;
  45. GetSoftVersion(value);
  46. GetDeviceId(value);
  47. GetClientType(value);
  48. GetMAC(value);
  49. GetHDCPKey(value);
  50. GetHDCPKey22(value);
  51. GetWidi(value);
  52. GetNetflixESN(value);
  53. GetWidevine(value);
  54. GetCiKey(value);
  55. GetOSDLanguage(value);
  56. GetShopLanguage(value);
  57. GetChannel(value);
  58. LeaveFactory();
  59. }
  60. }
  61. return nRetCode;
  62. }
  63. #endif
  64. #ifdef EXPORTS_CLASS
  65. CTCLCommand::CTCLCommand()
  66. {
  67. }
  68. bool CTCLCommand::Open(int nPort, DWORD dwBaudrate, BYTE ByteSize, BYTE Parity, BYTE StopBits)
  69. {
  70. TCHAR szSet[MAX_PATH] = {0};
  71. _stprintf_s(szSet, _T("baud=%ld parity=%s data=%d stop=%d"), dwBaudrate, Parity == 0 ? "N" : "O", ByteSize, StopBits);
  72. g_TCLCommand.SetInternalCMDParams(BIN_CMD);
  73. return g_TCLCommand.Open(nPort, szSet);
  74. }
  75. void CTCLCommand::Close()
  76. {
  77. g_TCLCommand.Close();
  78. }
  79. bool CTCLCommand::IsOpen()
  80. {
  81. return g_TCLCommand.IsOpen();
  82. }
  83. void CTCLCommand::SetExternalCMDParams(LPCTSTR lpFileName)
  84. {
  85. g_TCLCommand.SetExternalCMDParams(lpFileName);
  86. }
  87. bool CTCLCommand::GetCommandParams(std::string name, CommandParam& cmdPara)
  88. {
  89. return g_TCLCommand.GetCommandParams(name, cmdPara);
  90. }
  91. void CTCLCommand::PackingCommand(CommandParam& cmdPara, LPVOID data /* = NULL */, const int& dataLen /* = 0 */)
  92. {
  93. g_TCLCommand.PackingCommand(cmdPara, data, dataLen);
  94. }
  95. bool CTCLCommand::SendCommand(std::string name, CommandParam& cmdPara, LPVOID data /* = NULL */, int dataLen /* = 0 */)
  96. {
  97. OPEN_CHECK;
  98. CommandParam _cmdpara;
  99. if ( !g_TCLCommand.GetCommandParams(name, _cmdpara) )
  100. return false;
  101. g_TCLCommand.PackingCommand(_cmdpara, data, dataLen);
  102. bool bRet = g_TCLCommand.SendCommand(_cmdpara);
  103. cmdPara = _cmdpara;
  104. return bRet;
  105. }
  106. #else
  107. bool Open(int nPort, DWORD dwBaudrate, BYTE ByteSize, BYTE Parity, BYTE StopBits)
  108. {
  109. TCHAR szSet[MAX_PATH] = {0};
  110. _stprintf_s(szSet, _T("baud=%ld parity=%s data=%d stop=%d"), dwBaudrate, Parity == 0 ? "N" : "O", ByteSize, StopBits);
  111. g_TCLCommand.SetInternalCMDParams(BIN_CMD);
  112. return g_TCLCommand.Open(nPort, szSet);
  113. }
  114. void Close()
  115. {
  116. g_TCLCommand.Close();
  117. }
  118. bool IsOpen()
  119. {
  120. return g_TCLCommand.IsOpen();
  121. }
  122. void SetExternalCMDParams(LPCTSTR lpFileName)
  123. {
  124. g_TCLCommand.SetExternalCMDParams(lpFileName);
  125. }
  126. bool ExecuteCommand(LPCTSTR lpCommandName, LPCVOID lpCommandParams, const DWORD &dwCommandParams, LPBYTE lpReturnValue, const DWORD &dwReturnValue)
  127. {
  128. OPEN_CHECK;
  129. GET_CMDS(lpCommandName);
  130. if ( !g_TCLCommand.SendCommand(lpCommandName, cmdpara, lpCommandParams, dwCommandParams) ) {
  131. // 执行出错;
  132. return false;
  133. }
  134. // 返回的结果,由外部进行处理;
  135. memcpy_s(lpReturnValue, dwReturnValue, cmdpara._rtnData.c_str(), cmdpara._rtnData.size());
  136. return true;
  137. }
  138. bool EnterFactory()
  139. {
  140. OPEN_CHECK;
  141. GET_CMDS(__FUNCTION__);
  142. return g_TCLCommand.SendCommand(cmdpara);
  143. }
  144. bool LeaveFactory()
  145. {
  146. OPEN_CHECK;
  147. GET_CMDS(__FUNCTION__);
  148. return g_TCLCommand.SendCommand(cmdpara);
  149. }
  150. bool GetProjectId(int& pid)
  151. {
  152. OPEN_CHECK;
  153. GET_CMDS(__FUNCTION__);
  154. if (g_TCLCommand.SendCommand(cmdpara))
  155. {
  156. if (cmdpara._rtnData.size() == 2)
  157. pid = (byte)cmdpara._rtnData[0] << 8 | (byte)cmdpara._rtnData[1];
  158. else
  159. pid = (byte)cmdpara._rtnData[0];
  160. return true;
  161. }
  162. return false;
  163. }
  164. bool GetSoftVersion(std::string& strValue)
  165. {
  166. OPEN_CHECK;
  167. GET_CMDS(__FUNCTION__);
  168. if (g_TCLCommand.SendCommand(cmdpara))
  169. {
  170. strValue = cmdpara._rtnData;
  171. return true;
  172. }
  173. return false;
  174. }
  175. bool GetDeviceId(std::string& strValue)
  176. {
  177. OPEN_CHECK;
  178. GET_CMDS(__FUNCTION__);
  179. if (g_TCLCommand.SendCommand(cmdpara))
  180. {
  181. strValue = cmdpara._rtnData;
  182. return true;
  183. }
  184. return false;
  185. }
  186. bool GetClientType(std::string& strValue)
  187. {
  188. OPEN_CHECK;
  189. GET_CMDS(__FUNCTION__);
  190. if (g_TCLCommand.SendCommand(cmdpara))
  191. {
  192. strValue = cmdpara._rtnData;
  193. return true;
  194. }
  195. return false;
  196. }
  197. bool GetMAC(std::string& strValue)
  198. {
  199. OPEN_CHECK;
  200. GET_CMDS(__FUNCTION__);
  201. if (g_TCLCommand.SendCommand(cmdpara))
  202. {
  203. strValue = cmdpara._rtnData;
  204. return true;
  205. }
  206. return false;
  207. }
  208. bool GetHDCPKey(std::string& strValue)
  209. {
  210. OPEN_CHECK;
  211. GET_CMDS(__FUNCTION__);
  212. if (g_TCLCommand.SendCommand(cmdpara))
  213. {
  214. strValue = cmdpara._rtnData;
  215. return true;
  216. }
  217. return false;
  218. }
  219. bool GetHDCPKey22(std::string& strValue)
  220. {
  221. OPEN_CHECK;
  222. GET_CMDS(__FUNCTION__);
  223. if (g_TCLCommand.SendCommand(cmdpara))
  224. {
  225. strValue = cmdpara._rtnData;
  226. return true;
  227. }
  228. return false;
  229. }
  230. bool GetWidi(std::string& strValue)
  231. {
  232. OPEN_CHECK;
  233. GET_CMDS(__FUNCTION__);
  234. if (g_TCLCommand.SendCommand(cmdpara))
  235. {
  236. strValue = cmdpara._rtnData;
  237. return true;
  238. }
  239. return false;
  240. }
  241. bool GetNetflixESN(std::string& strValue)
  242. {
  243. OPEN_CHECK;
  244. GET_CMDS(__FUNCTION__);
  245. if (g_TCLCommand.SendCommand(cmdpara))
  246. {
  247. strValue = cmdpara._rtnData;
  248. return true;
  249. }
  250. return false;
  251. }
  252. bool GetWidevine(std::string& strValue)
  253. {
  254. OPEN_CHECK;
  255. GET_CMDS(__FUNCTION__);
  256. if (g_TCLCommand.SendCommand(cmdpara))
  257. {
  258. strValue = cmdpara._rtnData;
  259. return true;
  260. }
  261. return false;
  262. }
  263. bool GetCiKey(std::string& strValue)
  264. {
  265. OPEN_CHECK;
  266. GET_CMDS(__FUNCTION__);
  267. if (g_TCLCommand.SendCommand(cmdpara))
  268. {
  269. strValue = cmdpara._rtnData;
  270. return true;
  271. }
  272. return false;
  273. }
  274. bool GetOSDLanguage(std::string& strValue)
  275. {
  276. OPEN_CHECK;
  277. GET_CMDS(__FUNCTION__);
  278. if (g_TCLCommand.SendCommand(cmdpara))
  279. {
  280. strValue = cmdpara._rtnData;
  281. return true;
  282. }
  283. return false;
  284. }
  285. bool GetShopLanguage(std::string& strValue)
  286. {
  287. OPEN_CHECK;
  288. GET_CMDS(__FUNCTION__);
  289. if (g_TCLCommand.SendCommand(cmdpara))
  290. {
  291. strValue = cmdpara._rtnData;
  292. return true;
  293. }
  294. return false;
  295. }
  296. bool GetChannel(std::string& strValue)
  297. {
  298. OPEN_CHECK;
  299. GET_CMDS(__FUNCTION__);
  300. if (g_TCLCommand.SendCommand(cmdpara))
  301. {
  302. strValue = cmdpara._rtnData;
  303. return true;
  304. }
  305. return false;
  306. }
  307. bool SetProjectId(const byte* pBuffer, const int& nLen)
  308. {
  309. OPEN_CHECK;
  310. return false;
  311. }
  312. bool SetDeviceId(LPCTSTR lpDeviceId)
  313. {
  314. OPEN_CHECK;
  315. return false;
  316. }
  317. bool SetDeviceId(const byte* pBuffer, const int& nLen)
  318. {
  319. OPEN_CHECK;
  320. return false;
  321. }
  322. bool SetMAC(LPCTSTR lpMac)
  323. {
  324. OPEN_CHECK;
  325. return false;
  326. }
  327. bool SetMAC(const byte* pBuffer, const int& nLen)
  328. {
  329. OPEN_CHECK;
  330. return false;
  331. }
  332. bool SetHDCPKey(LPCTSTR lpHDCP, bool bHasSpace)
  333. {
  334. OPEN_CHECK;
  335. return false;
  336. }
  337. bool SetHDCPKey(const byte* pBuffer, const int& nLen)
  338. {
  339. OPEN_CHECK;
  340. return false;
  341. }
  342. bool SetHDCPKey22(LPCTSTR lpHDCP22, bool bHasSpace)
  343. {
  344. OPEN_CHECK;
  345. return false;
  346. }
  347. bool SetHDCPKey22(const byte* pBuffer, const int& nLen)
  348. {
  349. OPEN_CHECK;
  350. return false;
  351. }
  352. bool SetNetflixESN(LPCTSTR lpESN, bool bHasSpace)
  353. {
  354. OPEN_CHECK;
  355. return false;
  356. }
  357. bool SetNetflixESN(const byte* pBuffer, const int& nLen)
  358. {
  359. OPEN_CHECK;
  360. return false;
  361. }
  362. bool SetWidi(LPCTSTR lpWidi, bool bHasSpace)
  363. {
  364. OPEN_CHECK;
  365. return false;
  366. }
  367. bool SetWidi(const byte* pBuffer, const int& nLen)
  368. {
  369. OPEN_CHECK;
  370. return false;
  371. }
  372. bool SetWidevine(LPCTSTR lpWidevine, bool bHasSpace)
  373. {
  374. OPEN_CHECK;
  375. return false;
  376. }
  377. bool SetWidevine(const byte* pBuffer, const int& nLen)
  378. {
  379. OPEN_CHECK;
  380. return false;
  381. }
  382. bool SetCiKey(LPCTSTR lpCiKey, bool bHasSpace)
  383. {
  384. OPEN_CHECK;
  385. return false;
  386. }
  387. bool SetCiKey(const byte* pBuffer, const int& nLen)
  388. {
  389. OPEN_CHECK;
  390. return false;
  391. }
  392. bool SetOSDLanguage(LPCTSTR lan, bool bHasSpace)
  393. {
  394. OPEN_CHECK;
  395. return false;
  396. }
  397. bool SetOSDLanguage(const byte* pBuffer, const int& nLen)
  398. {
  399. OPEN_CHECK;
  400. return false;
  401. }
  402. bool SetShopLanguage(LPCTSTR lan, bool bHasSpace)
  403. {
  404. OPEN_CHECK;
  405. return false;
  406. }
  407. bool SetShopLanguage(const byte* pBuffer, const int& nLen)
  408. {
  409. OPEN_CHECK;
  410. return false;
  411. }
  412. bool SetChannel(LPCTSTR channel, bool bHasSpace)
  413. {
  414. OPEN_CHECK;
  415. return false;
  416. }
  417. bool SetChannel(const byte* pBuffer, const int& nLen)
  418. {
  419. OPEN_CHECK;
  420. return false;
  421. }
  422. bool SetWBNormal(LPCTSTR data)
  423. {
  424. OPEN_CHECK;
  425. return false;
  426. }
  427. bool SetWBNormal(const byte* pBuffer, const int& nLen)
  428. {
  429. OPEN_CHECK;
  430. return false;
  431. }
  432. bool SetWBCool(LPCTSTR data)
  433. {
  434. OPEN_CHECK;
  435. return false;
  436. }
  437. bool SetWBCool(const byte* pBuffer, const int& nLen)
  438. {
  439. OPEN_CHECK;
  440. return false;
  441. }
  442. bool SetWBWarm(LPCTSTR data)
  443. {
  444. OPEN_CHECK;
  445. return false;
  446. }
  447. bool SetWBWarm(const byte* pBuffer, const int& nLen)
  448. {
  449. OPEN_CHECK;
  450. return false;
  451. }
  452. bool CheckDeviceId()
  453. {
  454. OPEN_CHECK;
  455. return false;
  456. }
  457. bool CheckMAC()
  458. {
  459. OPEN_CHECK;
  460. return false;
  461. }
  462. bool CheckHDCP()
  463. {
  464. OPEN_CHECK;
  465. return false;
  466. }
  467. bool CheckHDCP22()
  468. {
  469. OPEN_CHECK;
  470. return false;
  471. }
  472. bool CheckNetflixESN()
  473. {
  474. OPEN_CHECK;
  475. return false;
  476. }
  477. bool CheckWidi()
  478. {
  479. OPEN_CHECK;
  480. return false;
  481. }
  482. bool CheckWidevine()
  483. {
  484. OPEN_CHECK;
  485. return false;
  486. }
  487. bool CheckCikey()
  488. {
  489. OPEN_CHECK;
  490. return false;
  491. }
  492. bool StarWarmUpMode()
  493. {
  494. OPEN_CHECK;
  495. return false;
  496. }
  497. bool StopWarmUpMode()
  498. {
  499. OPEN_CHECK;
  500. return false;
  501. }
  502. bool SetProjectId(int pid)
  503. {
  504. OPEN_CHECK;
  505. return false;
  506. }
  507. bool SetProjectId(LPCTSTR lpPid)
  508. {
  509. OPEN_CHECK;
  510. return false;
  511. }
  512. #endif
  513. #ifdef __MAKE_PYD__
  514. static PyObject* Open(PyObject* self, PyObject* args)
  515. {
  516. int nPort;
  517. int Baudrate;
  518. int ByteSize, Parity, StopBits;
  519. if (!PyArg_ParseTuple(args, "iiiii", &nPort, &Baudrate, &ByteSize, &Parity, &StopBits ))
  520. return NULL;
  521. return Py_BuildValue("b", (bool)g_objSiacp.OpenComm(nPort, Baudrate));
  522. }
  523. static PyObject* Close(PyObject* self, PyObject* args)
  524. {
  525. g_objSiacp.CloseComm();
  526. return Py_None;
  527. }
  528. static PyObject* IsOpen(PyObject* self, PyObject* args)
  529. {
  530. return Py_BuildValue("b", (bool)g_objSiacp.IsOpen());
  531. }
  532. static PyObject* EnterFactory(PyObject* self, PyObject* args)
  533. {
  534. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_EnterFactory());
  535. }
  536. static PyObject* LeaveFactory(PyObject* self, PyObject* args)
  537. {
  538. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_LeaveFactory());
  539. }
  540. //////////////////////////////////////////////////////////////////////////
  541. // 读取;
  542. static PyObject* GetProjectId(PyObject* self, PyObject* args)
  543. {
  544. int pid = -1;
  545. g_objSiacp.SCBC_GetProjectId(pid);
  546. // 获取失败返回-1;
  547. return Py_BuildValue("i", pid);
  548. }
  549. static PyObject* GetSoftVersion(PyObject* self, PyObject* args)
  550. {
  551. g_strData.clear();
  552. g_objSiacp.SCBC_GetSoftVersion(g_strData);
  553. // 获取失败返回"";
  554. return Py_BuildValue("s", g_strData.c_str());
  555. }
  556. static PyObject* GetDeviceId(PyObject* self, PyObject* args)
  557. {
  558. g_strData.clear();
  559. g_objSiacp.SCBC_GetDeviceId(g_strData);
  560. // 获取失败返回"";
  561. return Py_BuildValue("s", g_strData.c_str());
  562. }
  563. static PyObject* GetClientType(PyObject* self, PyObject* args)
  564. {
  565. g_strData.clear();
  566. g_objSiacp.SCBC_GetClientType(g_strData);
  567. // 获取失败返回"";
  568. return Py_BuildValue("s", g_strData.c_str());
  569. }
  570. static PyObject* GetMAC(PyObject* self, PyObject* args)
  571. {
  572. g_strData.clear();
  573. g_objSiacp.SCBC_GetMAC(g_strData);
  574. // 获取失败返回"";
  575. return Py_BuildValue("s", g_strData.c_str());
  576. }
  577. static PyObject* GetHDCPKey(PyObject* self, PyObject* args)
  578. {
  579. g_strData.clear();
  580. g_objSiacp.SCBC_GetHDCPKey(g_strData);
  581. // 获取失败返回"";
  582. return Py_BuildValue("s", g_strData.c_str());
  583. }
  584. static PyObject* GetHDCPKey22(PyObject* self, PyObject* args)
  585. {
  586. g_strData.clear();
  587. g_objSiacp.SCBC_GetHDCPKey22(g_strData);
  588. // 获取失败返回"";
  589. return Py_BuildValue("s", g_strData.c_str());
  590. }
  591. static PyObject* GetWidi(PyObject* self, PyObject* args)
  592. {
  593. g_strData.clear();
  594. g_objSiacp.SCBC_GetWidi(g_strData);
  595. // 获取失败返回"";
  596. return Py_BuildValue("s", g_strData.c_str());
  597. }
  598. static PyObject* GetNetflixESN(PyObject* self, PyObject* args)
  599. {
  600. g_strData.clear();
  601. g_objSiacp.SCBC_GetNetflixESN(g_strData);
  602. // 获取失败返回"";
  603. return Py_BuildValue("s", g_strData.c_str());
  604. }
  605. static PyObject* GetWidevine(PyObject* self, PyObject* args)
  606. {
  607. g_strData.clear();
  608. g_objSiacp.SCBC_GetWidevine(g_strData);
  609. // 获取失败返回"";
  610. return Py_BuildValue("s", g_strData.c_str());
  611. }
  612. static PyObject* GetCiKey(PyObject* self, PyObject* args)
  613. {
  614. g_strData.clear();
  615. g_objSiacp.SCBC_GetCiKey(g_strData);
  616. // 获取失败返回"";
  617. return Py_BuildValue("s", g_strData.c_str());
  618. }
  619. static PyObject* GetOSDLanguage(PyObject* self, PyObject* args)
  620. {
  621. g_strData.clear();
  622. g_objSiacp.SCBC_GetOSDLanguage(g_strData);
  623. // 获取失败返回"";
  624. return Py_BuildValue("s", g_strData.c_str());
  625. }
  626. static PyObject* GetShopLanguage(PyObject* self, PyObject* args)
  627. {
  628. g_strData.clear();
  629. g_objSiacp.SCBC_GetShopLanguage(g_strData);
  630. // 获取失败返回"";
  631. return Py_BuildValue("s", g_strData.c_str());
  632. }
  633. static PyObject* GetChannel(PyObject* self, PyObject* args)
  634. {
  635. g_strData.clear();
  636. g_objSiacp.SCBC_GetChannel(g_strData);
  637. // 获取失败返回"";
  638. return Py_BuildValue("s", g_strData.c_str());
  639. }
  640. //////////////////////////////////////////////////////////////////////////
  641. // 设置;
  642. static PyObject* SetProjectId(PyObject* self, PyObject* args)
  643. {
  644. int pid = 0;
  645. if (!PyArg_ParseTuple(args, "i", &pid))
  646. return NULL;
  647. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetProjectId(pid));
  648. }
  649. static PyObject* SetDeviceId(PyObject* self, PyObject* args)
  650. {
  651. const char* pszdata= 0;
  652. if (!PyArg_ParseTuple(args, "s", &pszdata))
  653. return NULL;
  654. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetDeviceId(pszdata));
  655. }
  656. static PyObject* SetDeviceIdBF(PyObject* self, PyObject* args)
  657. {
  658. const char* pszfile = 0;
  659. if (!PyArg_ParseTuple(args, "s", &pszfile))
  660. return NULL;
  661. // 打开文件;
  662. std::string data;
  663. if ( ReadKeyFile(pszfile, data) )
  664. {
  665. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetDeviceId((BYTE*)data.c_str(), data.size()));
  666. }
  667. return Py_BuildValue("b", false);
  668. }
  669. static PyObject* SetMAC(PyObject* self, PyObject* args)
  670. {
  671. const char* pszdata = 0;
  672. if (!PyArg_ParseTuple(args, "s", &pszdata))
  673. return NULL;
  674. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetMAC(pszdata));
  675. }
  676. static PyObject* SetMACBF(PyObject* self, PyObject* args)
  677. {
  678. const char* pszfile = 0;
  679. if (!PyArg_ParseTuple(args, "s", &pszfile))
  680. return NULL;
  681. // 打开文件;
  682. std::string data;
  683. if ( ReadKeyFile(pszfile, data) )
  684. {
  685. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetMAC((BYTE*)data.c_str(), data.size()));
  686. }
  687. return Py_BuildValue("b", false);
  688. }
  689. static PyObject* SetHDCPKey(PyObject* self, PyObject* args)
  690. {
  691. BOOL bHasSpace;
  692. const char* pszdata = 0;
  693. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  694. return NULL;
  695. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetHDCPKey(pszdata, bHasSpace));
  696. }
  697. static PyObject* SetHDCPKeyBF(PyObject* self, PyObject* args)
  698. {
  699. const char* pszfile = 0;
  700. if (!PyArg_ParseTuple(args, "s", &pszfile))
  701. return NULL;
  702. // 打开文件;
  703. std::string data;
  704. if ( ReadKeyFile(pszfile, data) )
  705. {
  706. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetHDCPKey((BYTE*)data.c_str(), data.size()));
  707. }
  708. return Py_BuildValue("b", false);
  709. }
  710. static PyObject* SetHDCPKey22(PyObject* self, PyObject* args)
  711. {
  712. BOOL bHasSpace;
  713. const char* pszdata = 0;
  714. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  715. return NULL;
  716. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetHDCPKey22(pszdata, bHasSpace));
  717. }
  718. static PyObject* SetHDCPKey22BF(PyObject* self, PyObject* args)
  719. {
  720. const char* pszfile = 0;
  721. if (!PyArg_ParseTuple(args, "s", &pszfile))
  722. return NULL;
  723. // 打开文件;
  724. std::string data;
  725. if ( ReadKeyFile(pszfile, data) )
  726. {
  727. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetHDCPKey22((BYTE*)data.c_str(), data.size()));
  728. }
  729. return Py_BuildValue("b", false);
  730. }
  731. static PyObject* SetNetflixESN(PyObject* self, PyObject* args)
  732. {
  733. BOOL bHasSpace;
  734. const char* pszdata = 0;
  735. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  736. return NULL;
  737. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetNetflixESN(pszdata, bHasSpace));
  738. }
  739. static PyObject* SetNetflixESNBF(PyObject* self, PyObject* args)
  740. {
  741. const char* pszfile = 0;
  742. if (!PyArg_ParseTuple(args, "s", &pszfile))
  743. return NULL;
  744. // 打开文件;
  745. std::string data;
  746. if ( ReadKeyFile(pszfile, data) )
  747. {
  748. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetNetflixESN((BYTE*)data.c_str(), data.size()));
  749. }
  750. return Py_BuildValue("b", false);
  751. }
  752. static PyObject* SetWidi(PyObject* self, PyObject* args)
  753. {
  754. BOOL bHasSpace;
  755. const char* pszdata = 0;
  756. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  757. return NULL;
  758. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWidi(pszdata, bHasSpace));
  759. }
  760. static PyObject* SetWidiBF(PyObject* self, PyObject* args)
  761. {
  762. const char* pszfile = 0;
  763. if (!PyArg_ParseTuple(args, "s", &pszfile))
  764. return NULL;
  765. // 打开文件;
  766. std::string data;
  767. if ( ReadKeyFile(pszfile, data) )
  768. {
  769. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWidi((BYTE*)data.c_str(), data.size()));
  770. }
  771. return Py_BuildValue("b", false);
  772. }
  773. static PyObject* SetWidevine(PyObject* self, PyObject* args)
  774. {
  775. BOOL bHasSpace;
  776. const char* pszdata = 0;
  777. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  778. return NULL;
  779. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWidevine(pszdata, bHasSpace));
  780. }
  781. static PyObject* SetWidevineBF(PyObject* self, PyObject* args)
  782. {
  783. const char* pszfile = 0;
  784. if (!PyArg_ParseTuple(args, "s", &pszfile))
  785. return NULL;
  786. // 打开文件;
  787. std::string data;
  788. if ( ReadKeyFile(pszfile, data) )
  789. {
  790. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWidevine((BYTE*)data.c_str(), data.size()));
  791. }
  792. return Py_BuildValue("b", false);
  793. }
  794. static PyObject* SetCiKey(PyObject* self, PyObject* args)
  795. {
  796. BOOL bHasSpace;
  797. const char* pszdata = 0;
  798. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  799. return NULL;
  800. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetCiKey(pszdata, bHasSpace));
  801. }
  802. static PyObject* SetCiKeyBF(PyObject* self, PyObject* args)
  803. {
  804. const char* pszfile = 0;
  805. if (!PyArg_ParseTuple(args, "s", &pszfile))
  806. return NULL;
  807. // 打开文件;
  808. std::string data;
  809. if ( ReadKeyFile(pszfile, data) )
  810. {
  811. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetCiKey((BYTE*)data.c_str(), data.size()));
  812. }
  813. return Py_BuildValue("b", false);
  814. }
  815. static PyObject* SetOSDLanguage(PyObject* self, PyObject* args)
  816. {
  817. BOOL bHasSpace;
  818. const char* pszdata = 0;
  819. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  820. return NULL;
  821. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetOSDLanguage(pszdata, bHasSpace));
  822. }
  823. static PyObject* SetShopLanguage(PyObject* self, PyObject* args)
  824. {
  825. BOOL bHasSpace;
  826. const char* pszdata = 0;
  827. if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
  828. return NULL;
  829. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetShopLanguage(pszdata, bHasSpace));
  830. }
  831. static PyObject* SetChannel(PyObject* self, PyObject* args)
  832. {
  833. int value = 0;
  834. if (!PyArg_ParseTuple(args, "i", &value))
  835. return NULL;
  836. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetChannel(value));
  837. }
  838. static PyObject* SetWBNormal(PyObject* self, PyObject* args)
  839. {
  840. const char* pszdata = 0;
  841. if (!PyArg_ParseTuple(args, "s", &pszdata))
  842. return NULL;
  843. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWBNormal(pszdata));
  844. }
  845. static PyObject* SetWBCool(PyObject* self, PyObject* args)
  846. {
  847. const char* pszdata = 0;
  848. if (!PyArg_ParseTuple(args, "s", &pszdata))
  849. return NULL;
  850. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWBCool(pszdata));
  851. }
  852. static PyObject* SetWBWarm(PyObject* self, PyObject* args)
  853. {
  854. const char* pszdata = 0;
  855. if (!PyArg_ParseTuple(args, "s", &pszdata))
  856. return NULL;
  857. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetWBWarm(pszdata));
  858. }
  859. //////////////////////////////////////////////////////////////////////////
  860. // 校验;
  861. static PyObject* CheckDeviceId(PyObject* self, PyObject* args)
  862. {
  863. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckDeviceId());
  864. }
  865. static PyObject* CheckMAC(PyObject* self, PyObject* args)
  866. {
  867. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckMAC());
  868. }
  869. static PyObject* CheckHDCP(PyObject* self, PyObject* args)
  870. {
  871. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckHDCP());
  872. }
  873. static PyObject* CheckHDCP22(PyObject* self, PyObject* args)
  874. {
  875. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckHDCP22());
  876. }
  877. static PyObject* CheckNetflixESN(PyObject* self, PyObject* args)
  878. {
  879. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckNetflixESN());
  880. }
  881. static PyObject* CheckWidi(PyObject* self, PyObject* args)
  882. {
  883. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckWidi());
  884. }
  885. static PyObject* CheckWidevine(PyObject* self, PyObject* args)
  886. {
  887. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckWidevine());
  888. }
  889. static PyObject* CheckCikey(PyObject* self, PyObject* args)
  890. {
  891. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_CheckCikey());
  892. }
  893. static PyObject* StarWarmUpMode(PyObject* self, PyObject* args)
  894. {
  895. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_StarWarmUpMode());
  896. }
  897. static PyObject* StopWarmUpMode(PyObject* self, PyObject* args)
  898. {
  899. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_StopWarmUpMode());
  900. }
  901. //
  902. static PyObject* ShowFactoryMenu(PyObject* self, PyObject* args)
  903. {
  904. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_ShowFactoryMenu());
  905. }
  906. static PyObject* HideFactoryMenu(PyObject* self, PyObject* args)
  907. {
  908. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_HideFactoryMenu());
  909. }
  910. static PyObject* ShowFactoryInformation(PyObject* self, PyObject* args)
  911. {
  912. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_ShowFactoryInformation());
  913. }
  914. static PyObject* HideFactoryInformation(PyObject* self, PyObject* args)
  915. {
  916. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_HideFactoryInformation());
  917. }
  918. static PyObject* EnterAgingModel(PyObject* self, PyObject* args)
  919. {
  920. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_EnterAgingModel());
  921. }
  922. static PyObject* LeaveAgingModel(PyObject* self, PyObject* args)
  923. {
  924. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_LeaveAgingModel());
  925. }
  926. static PyObject* ReadAgingTime(PyObject* self, PyObject* args)
  927. {
  928. int min = 0;
  929. if ( !g_objSiacp.SCBC_ReadAgingTime(min) )
  930. return Py_BuildValue("i", -1);
  931. return Py_BuildValue("i", min);
  932. }
  933. static PyObject* SetRedGainRegister(PyObject* self, PyObject* args)
  934. {
  935. int value = 0;
  936. if (!PyArg_ParseTuple(args, "i", &value))
  937. return NULL;
  938. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetRedGainRegister(value));
  939. }
  940. static PyObject* SetGreenGainRegister(PyObject* self, PyObject* args)
  941. {
  942. int value = 0;
  943. if (!PyArg_ParseTuple(args, "i", &value))
  944. return NULL;
  945. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetGreenGainRegister(value));
  946. }
  947. static PyObject* SetBlueGainRegister(PyObject* self, PyObject* args)
  948. {
  949. int value = 0;
  950. if (!PyArg_ParseTuple(args, "i", &value))
  951. return NULL;
  952. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetBlueGainRegister(value));
  953. }
  954. static PyObject* SetRedOffsetRegister(PyObject* self, PyObject* args)
  955. {
  956. int value = 0;
  957. if (!PyArg_ParseTuple(args, "i", &value))
  958. return NULL;
  959. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetRedOffsetRegister(value));
  960. }
  961. static PyObject* SetGreenOffsetRegister(PyObject* self, PyObject* args)
  962. {
  963. int value = 0;
  964. if (!PyArg_ParseTuple(args, "i", &value))
  965. return NULL;
  966. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetGreenOffsetRegister(value));
  967. }
  968. static PyObject* SetBlueOffsetRegister(PyObject* self, PyObject* args)
  969. {
  970. int value = 0;
  971. if (!PyArg_ParseTuple(args, "i", &value))
  972. return NULL;
  973. return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetBlueOffsetRegister(value));
  974. }
  975. static PyObject* HTTPLogin(PyObject* self, PyObject* args)
  976. {
  977. int rememberMe = 0;
  978. const char* pszhost = NULL;
  979. const char* pszUserName = NULL;
  980. const char* pszPassword = NULL;
  981. if (!PyArg_ParseTuple(args, "sssb", &pszhost, &pszUserName, &pszPassword, &rememberMe))
  982. return NULL;
  983. HTTP_Login(pszhost, pszUserName, pszPassword, rememberMe);
  984. return Py_BuildValue("s", g_httpData.c_str());
  985. }
  986. static PyObject* HTTPGetUserId(PyObject* self, PyObject* args)
  987. {
  988. const char* pszhost = NULL;
  989. const char* pszToken = NULL;
  990. const char* pszClientType = NULL;
  991. const char* pszDeviceId = NULL;
  992. const char* pszMAC = NULL;
  993. if (!PyArg_ParseTuple(args, "sssss", &pszhost, &pszToken, &pszClientType, &pszDeviceId, &pszMAC))
  994. return NULL;
  995. int userId = HTTP_GetUserId(pszhost, pszToken, pszClientType, pszDeviceId, pszMAC);
  996. return Py_BuildValue("i", userId);
  997. }
  998. // 描述方法,暴露给python的函数;
  999. static PyMethodDef ScbcCopyKey_Methods[] = {
  1000. {"Open",Open,METH_VARARGS,"打开串口"},
  1001. {"Close", Close, METH_VARARGS, "关闭串口"},
  1002. {"IsOpen", IsOpen, METH_VARARGS, "串口是否打开"},
  1003. {"EnterFactory", EnterFactory, METH_VARARGS, "进入工厂模式"},
  1004. {"LeaveFactory", LeaveFactory, METH_VARARGS, "离开工厂模式"},
  1005. //////////////////////////////////////////////////////////////////////////
  1006. // 读取;
  1007. {"GetProjectId", GetProjectId, METH_VARARGS, "获取pid"},
  1008. {"GetSoftVersion", GetSoftVersion, METH_VARARGS, "获取版本号"},
  1009. {"GetDeviceId", GetDeviceId, METH_VARARGS, "获取DeviceID"},
  1010. {"GetClientType", GetClientType, METH_VARARGS, "获取ClientType"},
  1011. {"GetMAC", GetMAC, METH_VARARGS, "获取MAC"},
  1012. {"GetHDCPKey", GetHDCPKey, METH_VARARGS, "获取HDCP"},
  1013. {"GetHDCPKey22", GetHDCPKey22, METH_VARARGS, "获取HDCP22"},
  1014. {"GetWidi", GetWidi, METH_VARARGS, "获取WIDI"},
  1015. {"GetNetflixESN", GetNetflixESN, METH_VARARGS, "获取ESN"},
  1016. {"GetWidevine", GetWidevine, METH_VARARGS, "获取WIDEVINE"},
  1017. {"GetCiKey", GetCiKey, METH_VARARGS, "获取CIKEY"},
  1018. {"GetOSDLanguage", GetOSDLanguage, METH_VARARGS, "获取OSDLAN"},
  1019. {"GetShopLanguage", GetShopLanguage, METH_VARARGS, "获取SHOPLAN"},
  1020. {"GetChannel", GetChannel, METH_VARARGS, "获取频道号"},
  1021. //////////////////////////////////////////////////////////////////////////
  1022. // 设置;
  1023. {"SetProjectId", SetProjectId, METH_VARARGS, "设置pid"},
  1024. {"SetDeviceId", SetDeviceId, METH_VARARGS, "设置DeviceId"},
  1025. {"SetDeviceIdBF", SetDeviceIdBF, METH_VARARGS, "设置DeviceId"},
  1026. {"SetMAC", SetMAC, METH_VARARGS, "设置MAC"},
  1027. {"SetMACBF", SetMACBF, METH_VARARGS, "设置MAC"},
  1028. {"SetHDCPKey", SetHDCPKey, METH_VARARGS, "设置HDCP"},
  1029. {"SetHDCPKeyBF", SetHDCPKeyBF, METH_VARARGS, "设置HDCP"},
  1030. {"SetHDCPKey22", SetHDCPKey22, METH_VARARGS, "设置HDCP22"},
  1031. {"SetHDCPKey22BF", SetHDCPKey22BF, METH_VARARGS, "设置HDCP22"},
  1032. {"SetWidi", SetWidi, METH_VARARGS, "设置WIDI"},
  1033. {"SetWidiBF", SetWidiBF, METH_VARARGS, "设置WIDI"},
  1034. {"SetNetflixESN", SetNetflixESN, METH_VARARGS, "设置ESN"},
  1035. {"SetNetflixESNBF", SetNetflixESNBF, METH_VARARGS, "设置ESN"},
  1036. {"SetWidevine", SetWidevine, METH_VARARGS, "设置WIDEVINE"},
  1037. {"SetWidevineBF", SetWidevineBF, METH_VARARGS, "设置WIDEVINE"},
  1038. {"SetCiKey", SetCiKey, METH_VARARGS, "设置CIKEY"},
  1039. {"SetCiKeyBF", SetCiKeyBF, METH_VARARGS, "设置CIKEY"},
  1040. {"SetOSDLanguage", SetOSDLanguage, METH_VARARGS, "设置OSDLAN"},
  1041. {"SetShopLanguage", SetShopLanguage, METH_VARARGS, "设置SHOPLAN"},
  1042. {"SetChannel", SetChannel, METH_VARARGS, "设置频道号"},
  1043. {"SetWBNormal", SetWBNormal, METH_VARARGS, "设置OSDLAN"},
  1044. {"SetWBCool", SetWBCool, METH_VARARGS, "设置SHOPLAN"},
  1045. {"SetWBWarm", SetWBWarm, METH_VARARGS, "设置频道号"},
  1046. //////////////////////////////////////////////////////////////////////////
  1047. // 校验;
  1048. {"CheckDeviceId", CheckDeviceId, METH_VARARGS, "检验pid"},
  1049. {"CheckMAC", CheckMAC, METH_VARARGS, "检验MAC"},
  1050. {"CheckHDCP", CheckHDCP, METH_VARARGS, "检验HDCP"},
  1051. {"CheckHDCP22", CheckHDCP22, METH_VARARGS, "检验HDCP22"},
  1052. {"CheckWidi", CheckWidi, METH_VARARGS, "检验WIDI"},
  1053. {"CheckNetflixESN", CheckNetflixESN, METH_VARARGS, "检验ESN"},
  1054. {"CheckWidevine", CheckWidevine, METH_VARARGS, "检验WIDEVINE"},
  1055. {"CheckCikey", CheckCikey, METH_VARARGS, "检验CIKEY"},
  1056. {"StarWarmUpMode", StarWarmUpMode, METH_VARARGS, "检验OSDLAN"},
  1057. {"StopWarmUpMode", StopWarmUpMode, METH_VARARGS, "检验SHOPLAN"},
  1058. // others;
  1059. {"ShowFactoryMenu", ShowFactoryMenu, METH_VARARGS, "显示工厂菜单"},
  1060. {"HideFactoryMenu", HideFactoryMenu, METH_VARARGS, "隐藏工厂菜单"},
  1061. {"ShowFactoryInformation", ShowFactoryInformation, METH_VARARGS, "工厂信息内容显示"},
  1062. {"HideFactoryInformation", HideFactoryInformation, METH_VARARGS, "工厂信息内容隐藏"},
  1063. {"EnterAgingModel", EnterAgingModel, METH_VARARGS, "老化模式开"},
  1064. {"LeaveAgingModel", LeaveAgingModel, METH_VARARGS, "老化模式关"},
  1065. {"ReadAgingTime", ReadAgingTime, METH_VARARGS, "老化时间读取"},
  1066. {"SetRedGainRegister", SetRedGainRegister, METH_VARARGS, "红增益"},
  1067. {"SetGreenGainRegister", SetGreenGainRegister, METH_VARARGS, "绿增益"},
  1068. {"SetBlueGainRegister", SetBlueGainRegister, METH_VARARGS, "蓝增益"},
  1069. {"SetRedOffsetRegister", SetRedOffsetRegister, METH_VARARGS, "红偏移"},
  1070. {"SetGreenOffsetRegister", SetGreenOffsetRegister, METH_VARARGS, "绿偏移"},
  1071. {"SetBlueOffsetRegister", SetBlueOffsetRegister, METH_VARARGS, "蓝偏移"},
  1072. // HTTP
  1073. {"HTTPLogin", HTTPLogin, METH_VARARGS, "登录服务器"},
  1074. {"HTTPGetUserId", HTTPGetUserId, METH_VARARGS, "获取UserId"},
  1075. {NULL,NULL}
  1076. };
  1077. // 初始模块;//格式:init<模块名称>
  1078. PyMODINIT_FUNC initScbcCopyKey()
  1079. {
  1080. // 初始化pyd函数列表;
  1081. PyObject* m, * d;
  1082. m = Py_InitModule("ScbcCopyKey", ScbcCopyKey_Methods);
  1083. d = PyModule_GetDict(m);
  1084. }
  1085. #endif