TCLCommand.cpp 30 KB

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