DevCtrl.cpp 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034
  1. #include "stdafx.h"
  2. #include "DevCtrl.h"
  3. CSerialComm g_SerialComm;
  4. LOG_EXTERN()
  5. //////////////////////////////////////////////////
  6. //Function Name: Device construct
  7. //00-01-00-01 2016-12-15 Lichun(Create)
  8. //////////////////////////////////////////////////
  9. DeviceCtrl::DeviceCtrl()
  10. {
  11. m_hComLib = NULL; //Default value
  12. m_wPaperWidth = 80;
  13. m_bOpened = false;
  14. memset( m_cDeviceID, 0x00, sizeof (m_cDeviceID));
  15. memset( m_cDevType, 0x00, sizeof(m_cDevType) );
  16. memset( m_cFWMain, 0x00, sizeof(m_cFWMain) );
  17. memset( m_cFWBoot, 0x00, sizeof(m_cFWBoot) );
  18. }
  19. //////////////////////////////////////////////////
  20. //Function Name: Device destruct
  21. //00-01-00-01 2016-12-15 Lichun(Create)
  22. //////////////////////////////////////////////////
  23. DeviceCtrl::~DeviceCtrl()
  24. {
  25. g_SerialComm.Disconnect(m_hDevHnd);
  26. }
  27. //////////////////////////////////////////////////
  28. //Function Name: Open
  29. //00-01-00-01 2016-12-15 Lichun(Create)
  30. //////////////////////////////////////////////////
  31. DWORD DeviceCtrl::Open(LPSTR cDeviceID, int dwBaudRate)
  32. {
  33. LOG_FUNCTION();
  34. memcpy(m_cDeviceID, cDeviceID, strlen(cDeviceID));
  35. // 接收串口号
  36. int ret = g_SerialComm.Connect(cDeviceID, dwBaudRate, 2, 1, &m_hDevHnd, 8);
  37. if( ret == 0) //返回0, 串口打开成功
  38. {
  39. LogM("串口打开成功: %d COM:%s\r\n", ret, m_cDeviceID);
  40. }
  41. else
  42. {
  43. m_bOpened = false;
  44. return CONNECT_ERROR;
  45. }
  46. m_bOpened = true;
  47. return ERROR_SUCCESS;
  48. }
  49. //////////////////////////////////////////////////
  50. //Function Name: Close
  51. //00-01-00-01 2016-12-15 Lichun(Create)
  52. //////////////////////////////////////////////////
  53. DWORD DeviceCtrl::Close()
  54. {
  55. m_bOpened = false;
  56. g_SerialComm.Disconnect(m_hDevHnd);
  57. return ERROR_SUCCESS;
  58. }
  59. //////////////////////////////////////////////////
  60. //Function Name: GetPrinterStatus
  61. //00-01-00-01 2016-12-15 Lichun(Create)
  62. //////////////////////////////////////////////////
  63. BOOL DeviceCtrl::GetStatus( const LPBYTE lpbyPrinterStatus )
  64. {
  65. LOG_FUNCTION();
  66. CHAR cPrinterStatus[STATUS_BUF_LEN];
  67. int ret;
  68. LogM("GetStatus is call");
  69. memset( cPrinterStatus, 0x00, sizeof(cPrinterStatus) );
  70. // 获取打印机实时状态指令
  71. BYTE sCommand[] ={0x1D, 0x61, 0x0E};
  72. COMRESULT stComResult;
  73. memset(&stComResult, 0x00, sizeof (stComResult));
  74. //Check parameter
  75. if ( lpbyPrinterStatus == NULL )
  76. {
  77. LogE("GetStatus lpbyPrinterStatus is null");
  78. return FALSE;
  79. }
  80. //Check connection
  81. if (m_bOpened == false)
  82. {
  83. ret = g_SerialComm.Connect(m_cDeviceID, 38400, 0, 2, &m_hDevHnd, 8);
  84. if (ret != 0) //Connect failed
  85. {
  86. LogE("GetStatus f_OpenDeviceByID fail.");
  87. return FALSE;
  88. }
  89. }
  90. else //Connect success
  91. { //Get current status
  92. if(g_SerialComm.SendAndReceive(m_hDevHnd, sCommand, strlen((char*)sCommand), 10, &stComResult) != 0)
  93. {
  94. sleep(1);
  95. if(g_SerialComm.SendAndReceive(m_hDevHnd, sCommand, strlen((char*)sCommand), 10, &stComResult) != 0)
  96. {
  97. LogXE(sCommand, strlen((char*)sCommand), "Send");
  98. g_SerialComm.Disconnect(m_hDevHnd); //Get status failed
  99. m_hDevHnd = NULL;
  100. return FALSE;
  101. }
  102. }
  103. }
  104. LogXM(sCommand, strlen((char*)sCommand), "Send");
  105. LogXM(stComResult.Buff, strlen((char*)stComResult.Buff), "Receive");
  106. //Copy status
  107. memcpy( lpbyPrinterStatus, stComResult.Buff, stComResult.Length );
  108. LogXM(lpbyPrinterStatus, STATUS_BUF_LEN, "status");
  109. return TRUE;
  110. }
  111. BOOL DeviceCtrl::Reset()
  112. {
  113. BOOL bRet = TRUE;
  114. if (m_hDevHnd ==NULL)
  115. {
  116. return FALSE;
  117. }
  118. if (SendCommand(INITIALIZ) != ERROR_SUCCESS)
  119. {
  120. return FALSE;
  121. }
  122. return bRet;
  123. }
  124. /////////////////////////////////////////////////////
  125. //Function Name: SendCommand
  126. //00-01-00-01 2016-12-20 Lichun(Create)
  127. /////////////////////////////////////////////////////
  128. DWORD DeviceCtrl::SendCommand( WORD wOperationID, LPBYTE lpbyOptionData, WORD wDataSize )
  129. {
  130. INT iRet = 0;
  131. WORD wCmdSize = 0;
  132. BYTE byCmdData[16];
  133. BOOL bFlag = FALSE;
  134. BYTE *byExeData = NULL;
  135. memset( byCmdData, 0x00, sizeof(byCmdData) );
  136. LOG_FUNCTION();
  137. if (wOperationID == FEEDMARKSTART) //Feed Paper to Start Position
  138. {
  139. byCmdData[0] = 0x1D; //GS
  140. byCmdData[1] = 0x0C; //FF
  141. wCmdSize = 2;
  142. }
  143. else if (wOperationID == DIRECTPRINT)
  144. {
  145. byCmdData[0] = 0x0D; //CR
  146. wCmdSize = 1;
  147. }
  148. else if (wOperationID == FEEDLINEPRINT)
  149. {
  150. byCmdData[0] = 0x0A; //LF
  151. wCmdSize = 1;
  152. }
  153. else if (wOperationID == SETFONTROTATE)
  154. {
  155. byCmdData[0] = 0x1B; //ESC V
  156. if (wDataSize == 1)
  157. {
  158. switch (lpbyOptionData[0])
  159. {
  160. case 3: //逆时针转90
  161. {
  162. byCmdData[1] = 0x12;
  163. wCmdSize = 2;
  164. }
  165. break;
  166. case 1:
  167. {
  168. byCmdData[1] = 0x56;
  169. byCmdData[2] = 0x01; //顺时钟转90
  170. wCmdSize = 3;
  171. }
  172. break;
  173. case 0:
  174. default:
  175. {
  176. byCmdData[1] = 0x56;
  177. byCmdData[2] = 0x00;
  178. wCmdSize = 3;
  179. }
  180. break;
  181. }
  182. }
  183. }
  184. else if (wOperationID == FEEDMULTPRINT)
  185. {
  186. byCmdData[0] = 0x1B; //ESC d
  187. byCmdData[1] = 0x64;
  188. byCmdData[2] = lpbyOptionData[0];
  189. wCmdSize = 3;
  190. }
  191. else if (wOperationID == PAGEMODPRINT)
  192. {
  193. byCmdData[0] = 0x1B; //ESC
  194. byCmdData[1] = 0x0C; //FF
  195. wCmdSize = 2;
  196. }
  197. else if (wOperationID == BMMODPRINT)
  198. {
  199. byCmdData[0] = 0x0C; //FF
  200. wCmdSize = 1;
  201. }
  202. else if (wOperationID == SETHRIPRINTPOS)
  203. {
  204. byCmdData[0] = 0x1D; //GS
  205. byCmdData[1] = 0x48; //H
  206. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  207. {
  208. byCmdData[2] = lpbyOptionData[0];
  209. }
  210. wCmdSize = 3;
  211. }
  212. else if (wOperationID == SETBARCODEHEIGHT)
  213. {
  214. byCmdData[0] = 0x1D; //GS
  215. byCmdData[1] = 0x68; //h
  216. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  217. {
  218. byCmdData[2] = lpbyOptionData[0];
  219. }
  220. wCmdSize = 3;
  221. }
  222. else if (wOperationID == SETQRCODEPARAM)
  223. {
  224. byCmdData[0] = 0x1D; //GS
  225. byCmdData[1] = 0x6F; //o
  226. byCmdData[2] = 0x00; //0
  227. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  228. {
  229. byCmdData[3] = lpbyOptionData[0];
  230. }
  231. byCmdData[4] = 0;
  232. byCmdData[5] = 0x02;
  233. wCmdSize = 6;
  234. }
  235. else if (wOperationID == SETBARCODEPRINT)
  236. {
  237. if ((lpbyOptionData != NULL) && (wDataSize > 2))
  238. {
  239. WORD wDataLen = lpbyOptionData[1];
  240. if (wDataLen >= (wDataSize - 2))
  241. {
  242. bFlag = TRUE;
  243. byExeData = new BYTE[wDataSize + 3];
  244. memset(byExeData, 0, wDataSize + 3);
  245. byExeData[0] = 0x1D; //GS
  246. byExeData[1] = 0x6B; //k
  247. memcpy(&byExeData[2], lpbyOptionData, wDataSize);
  248. wCmdSize = wDataSize + 3;
  249. }
  250. else
  251. {
  252. return INVALID_DATA;
  253. }
  254. }
  255. else
  256. {
  257. return INVALID_DATA;
  258. }
  259. }
  260. else if (wOperationID == SETPDF417INFO)
  261. {
  262. byCmdData[0] = 0x1D; //GS
  263. byCmdData[1] = 0x70; //p
  264. if ((lpbyOptionData != NULL) && (wDataSize == 6))
  265. {
  266. memcpy(&byCmdData[2], lpbyOptionData, wDataSize);
  267. }
  268. else
  269. {
  270. return INVALID_DATA;
  271. }
  272. wCmdSize = 8;
  273. }
  274. else if (wOperationID == SETPDF417ERRORLEVEL)
  275. {
  276. byCmdData[0] = 0x1D; //GS
  277. byCmdData[1] = 0x71; //q
  278. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  279. {
  280. byCmdData[2] = lpbyOptionData[0];
  281. }
  282. else
  283. {
  284. return INVALID_DATA;
  285. }
  286. wCmdSize = 3;
  287. }
  288. else if (wOperationID == SETRASTERBMPPRINT)
  289. {
  290. if ((wDataSize >= 4)&&
  291. (lpbyOptionData != NULL))
  292. {
  293. bFlag = TRUE;
  294. byExeData = new BYTE[wDataSize + 7];
  295. if (byExeData == NULL)
  296. {
  297. return INVALID_DATA;
  298. }
  299. memset(byExeData, 0, wDataSize + 7);
  300. byExeData[0] = 0x1D; //GS
  301. byExeData[1] = 0x76; //v
  302. byExeData[2] = 0x30;
  303. byExeData[3] = 0;
  304. memcpy(&byExeData[4], lpbyOptionData, wDataSize);
  305. byExeData[wDataSize + 5] = 0x0a;
  306. byExeData[wDataSize + 6] = 0x00;
  307. wCmdSize = wDataSize + 6;
  308. }
  309. else
  310. {
  311. return INVALID_DATA;
  312. }
  313. }
  314. else if (wOperationID == SETBARCODEWIDTH)
  315. {
  316. byCmdData[0] = 0x1D; //GS
  317. byCmdData[1] = 0x77; //w
  318. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  319. {
  320. byCmdData[2] = lpbyOptionData[0];
  321. }
  322. else
  323. {
  324. return INVALID_DATA;
  325. }
  326. wCmdSize = 3;
  327. }
  328. else if (wOperationID == PAPERDIRCETCUT)
  329. {
  330. byCmdData[0] = 0x1D; //GS
  331. byCmdData[1] = 0x56; //V
  332. byCmdData[2] = 0x01; //1
  333. wCmdSize = 3;
  334. }
  335. else if (wOperationID == PAPERDIRCETCUTEX) //全切
  336. {
  337. byCmdData[0] = 0x1D; //GS
  338. byCmdData[1] = 0x56; //V
  339. byCmdData[2] = 0x00; //0
  340. wCmdSize = 3;
  341. }
  342. else if (wOperationID == PAPERFEEDCUT) //
  343. {
  344. byCmdData[0] = 0x1D; //GS
  345. byCmdData[1] = 0x56; //V
  346. byCmdData[2] = 0x41; //66
  347. byCmdData[3] = 0x00; //0
  348. wCmdSize = 4;
  349. }
  350. else if (wOperationID == SETFONTINVERSE) //反白
  351. {
  352. byCmdData[0] = 0x1D; //GS
  353. byCmdData[1] = 0x42; //B
  354. if ((wDataSize == 1) && ((lpbyOptionData[0] & 0x01) == 0x01))
  355. {
  356. byCmdData[2] = 0x01;
  357. }
  358. else
  359. {
  360. byCmdData[2] = 0x00; //0
  361. }
  362. wCmdSize = 3;
  363. }
  364. else if (wOperationID == INITIALIZ)
  365. {
  366. byCmdData[0] = 0x1B; //ESC
  367. byCmdData[1] = 0x40; //@
  368. wCmdSize = 2;
  369. }
  370. else if (wOperationID == RESET)
  371. {
  372. if (lpbyOptionData == NULL)
  373. {
  374. return INVALID_BUFFER;
  375. }
  376. byCmdData[0] = 0x10; //DLE
  377. byCmdData[1] = 0x05; //ENQ
  378. if ((wDataSize > 0)&&
  379. (lpbyOptionData[0]>=0x01)&&
  380. (lpbyOptionData[0]<=0x02)) //1~2
  381. {
  382. byCmdData[2] = lpbyOptionData[0];
  383. wCmdSize = 3;
  384. }
  385. else //Illegal value
  386. {
  387. return INVALID_DATA;
  388. }
  389. }
  390. else if (wOperationID == SETTOPPRTPOS)
  391. {
  392. byCmdData[0] = 0x1D; //GS
  393. byCmdData[1] = 0x54; //T
  394. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  395. {
  396. byCmdData[2] = lpbyOptionData[0];
  397. }
  398. wCmdSize = 3;
  399. }
  400. else if (wOperationID == SETBLACKMARKSUPP)
  401. {
  402. byCmdData[0] = 0x1B; //ESC
  403. byCmdData[1] = 0x63; //c
  404. byCmdData[2] = 0x30; //0
  405. if ( (wDataSize==1)&&(lpbyOptionData[0]==0) )
  406. {
  407. byCmdData[3] = 0x00; //Paper without BM
  408. }
  409. else
  410. {
  411. byCmdData[3] = 0x99; //Paper with BM
  412. }
  413. wCmdSize = 4;
  414. }
  415. else if (wOperationID == SETBLACKMARKPARAM)
  416. {
  417. byCmdData[0] = 0x1D;
  418. byCmdData[1] = 0x28;
  419. byCmdData[2] = 0x46;
  420. if ( (wDataSize == 6)&&
  421. (lpbyOptionData != NULL) )
  422. {
  423. byCmdData[3] = lpbyOptionData[0];
  424. byCmdData[4] = lpbyOptionData[1];
  425. byCmdData[5] = lpbyOptionData[2];
  426. byCmdData[6] = lpbyOptionData[3];
  427. byCmdData[7] = lpbyOptionData[4];
  428. byCmdData[8] = lpbyOptionData[5];
  429. wCmdSize = 9;
  430. }
  431. else //Illegal value
  432. {
  433. return INVALID_DATA;
  434. }
  435. }
  436. else if (wOperationID == GETSTATUS_ASY)
  437. {
  438. byCmdData[0] = 0x1D; //GS
  439. byCmdData[1] = 0x72; //r
  440. wCmdSize = 2;
  441. }
  442. else if (wOperationID == SETFONT)
  443. {
  444. byCmdData[0] = 0x1B; //ESC
  445. byCmdData[1] = 0x66; //f
  446. if ( (wDataSize == 1)&&
  447. (lpbyOptionData != NULL) )
  448. {
  449. byCmdData[2] = lpbyOptionData[0];
  450. }
  451. else
  452. {
  453. byCmdData[2] = 0x01; //Default is 8*16
  454. }
  455. wCmdSize = 3;
  456. }
  457. else if (wOperationID == SETREDMODE)
  458. {
  459. byCmdData[0] = 0x1B; //ESC
  460. byCmdData[1] = 0x67; //f
  461. if ( (wDataSize == 1)&&
  462. (lpbyOptionData != NULL) )
  463. {
  464. byCmdData[2] = lpbyOptionData[0];
  465. }
  466. else
  467. {
  468. byCmdData[2] = 0x01; //Default is 8*16
  469. }
  470. wCmdSize = 3;
  471. }
  472. else if (wOperationID == SETINTERCHAR)
  473. {
  474. byCmdData[0] = 0x1B; //ESC
  475. byCmdData[1] = 0x52; //R
  476. if ( (wDataSize == 1)&&
  477. (lpbyOptionData != NULL) )
  478. {
  479. byCmdData[2] = lpbyOptionData[0];
  480. }
  481. else
  482. {
  483. byCmdData[2] = 0x00; //Default is USA
  484. }
  485. wCmdSize = 3;
  486. }
  487. else if (wOperationID == SETDSMODE)
  488. {
  489. byCmdData[0] = 0x1B; //ESC
  490. byCmdData[1] = 0x47; //R
  491. if ( (wDataSize == 1)&&
  492. (lpbyOptionData != NULL) )
  493. {
  494. byCmdData[2] = lpbyOptionData[0];
  495. }
  496. else
  497. {
  498. byCmdData[2] = 0x01; //Default is DS Mode
  499. }
  500. wCmdSize = 3;
  501. }
  502. else if (wOperationID == SETULMODE)
  503. {
  504. byCmdData[0] = 0x1B; //ESC
  505. byCmdData[1] = 0x55; //R
  506. if ( (wDataSize == 1)&&
  507. (lpbyOptionData != NULL) )
  508. {
  509. byCmdData[2] = lpbyOptionData[0];
  510. }
  511. else
  512. {
  513. byCmdData[2] = 0x01; //Default is UL Mode
  514. }
  515. wCmdSize = 3;
  516. }
  517. else if (wOperationID == SETPRINTERMOD) //字符打印模式
  518. {
  519. byCmdData[0] = 0x1B; //ESC
  520. byCmdData[1] = 0x21; //!
  521. if ( (wDataSize == 1)&&
  522. (lpbyOptionData != NULL) )
  523. {
  524. byCmdData[2] = lpbyOptionData[0];
  525. }
  526. else
  527. {
  528. byCmdData[2] = 0x00; //Default is Big Char
  529. }
  530. wCmdSize = 3;
  531. }
  532. else if (wOperationID == SETFONTCHNMOD) //汉字字符打印模式
  533. {
  534. byCmdData[0] = 0x1C; //FS
  535. byCmdData[1] = 0x21; //!
  536. if ( (wDataSize == 1)&&
  537. (lpbyOptionData != NULL) )
  538. {
  539. byCmdData[2] = lpbyOptionData[0];
  540. }
  541. else
  542. {
  543. byCmdData[2] = 0x00; //Default is Big Char
  544. }
  545. wCmdSize = 3;
  546. }
  547. else if (wOperationID == SETFONTLRSPACE) //汉字左右边距设定
  548. {
  549. byCmdData[0] = 0x1C; //FS
  550. byCmdData[1] = 0x53; //!
  551. byCmdData[2] = 0x00;
  552. byCmdData[3] = lpbyOptionData[0];
  553. /*if ( (wDataSize == 2)&&
  554. (lpbyOptionData != NULL) )
  555. {
  556. byCmdData[2] = lpbyOptionData[0];
  557. byCmdData[3] = lpbyOptionData[1];
  558. }*/
  559. wCmdSize = 4;
  560. }
  561. else if (wOperationID == SETCHARSIZE) //设置字符放大倍数
  562. {
  563. byCmdData[0] = 0x1D; //GS
  564. byCmdData[1] = 0x21; //!
  565. if ( (wDataSize == 1)&&
  566. (lpbyOptionData != NULL) )
  567. {
  568. byCmdData[2] = lpbyOptionData[0];
  569. }
  570. else
  571. {
  572. byCmdData[2] = 0x00; //Default is normal mode
  573. }
  574. wCmdSize = 3;
  575. }
  576. else if (wOperationID == SETPRINTPOS)
  577. {
  578. byCmdData[0] = 0x1B; //ESC
  579. byCmdData[1] = 0x24; //$
  580. if ( (wDataSize == 1)&&
  581. (lpbyOptionData != NULL) )
  582. {
  583. if ((lpbyOptionData[0] > m_wPaperWidth) ||
  584. (lpbyOptionData[0] > 255))
  585. {
  586. return INVALID_DATA;
  587. }
  588. byCmdData[2] = lpbyOptionData[0];
  589. }
  590. else
  591. {
  592. byCmdData[2] = 0x00; //Default is 0
  593. }
  594. byCmdData[3] = 0x00;
  595. wCmdSize = 4;
  596. }
  597. else if (wOperationID == SETFONTUNDERLINE) //设置下划线
  598. {
  599. byCmdData[0] = 0x1C; //ESC
  600. byCmdData[1] = 0x2D; //-
  601. byCmdData[3] = 0x1B;
  602. byCmdData[4] = 0x2D;
  603. if ( (wDataSize == 1)&&
  604. (lpbyOptionData != NULL) )
  605. {
  606. byCmdData[2] = lpbyOptionData[0];
  607. byCmdData[5] = lpbyOptionData[0];
  608. }
  609. wCmdSize = 6;
  610. }
  611. else if (wOperationID == SETLINESPACE)
  612. {
  613. byCmdData[0] = 0x1B; //ESC
  614. // byCmdData[1] = 0x33; //3
  615. if ( (wDataSize == 1)&&
  616. (lpbyOptionData != NULL) )
  617. {
  618. //byCmdData[2] = lpbyOptionData[0];
  619. if (lpbyOptionData[0] == 0)
  620. { //默认行高
  621. byCmdData[1] = 0x32; //2
  622. wCmdSize = 2;
  623. }
  624. else
  625. {
  626. byCmdData[1] = 0x33; //3
  627. // BYTE byDefulat = 27; //默认行高
  628. // BYTE byVmm2Inch = lpbyOptionData[0] * (203 / 25.4);
  629. // byCmdData[2] = byDefulat + lpbyOptionData[0];
  630. byCmdData[2] = lpbyOptionData[0];
  631. wCmdSize = 3;
  632. }
  633. }
  634. else
  635. {
  636. //byCmdData[2] = 0x1E; //Default is 30
  637. byCmdData[1] = 0x32;
  638. wCmdSize = 2;
  639. }
  640. // wCmdSize = 3;
  641. }
  642. else if (wOperationID == SETFONTBOLD) //设置粗体
  643. {
  644. byCmdData[0] = 0x1B; //ESC
  645. byCmdData[1] = 0x45; //E
  646. if ( (wDataSize == 1)&&
  647. (lpbyOptionData != NULL) )
  648. {
  649. byCmdData[2] = lpbyOptionData[0];
  650. }
  651. wCmdSize = 3;
  652. }
  653. else if (wOperationID == SETVERIRELATEPOS) //相对纵向位移
  654. {
  655. byCmdData[0] = 0x1B; //ESC
  656. byCmdData[1] = 0x4A; //$
  657. if ( (wDataSize == 1)&&
  658. (lpbyOptionData != NULL) )
  659. {
  660. // if (lpbyOptionData[0] > 255)
  661. // {
  662. // return INVALID_DATA;
  663. // }
  664. // BYTE byVmm2Inch = lpbyOptionData[0] * (203 / 25.4);
  665. byCmdData[2] = lpbyOptionData[0];
  666. }
  667. wCmdSize = 3;
  668. }
  669. else if (wOperationID == SETHORIRELATEPOS) //相对横向位移
  670. {
  671. byCmdData[0] = 0x1B; //ESC
  672. byCmdData[1] = 0x5C; //$
  673. if ( (wDataSize == 2)&&
  674. (lpbyOptionData != NULL) )
  675. {
  676. byCmdData[2] = lpbyOptionData[0];
  677. byCmdData[3] = lpbyOptionData[1];
  678. }
  679. else
  680. {
  681. byCmdData[2] = 0x00; //Default is 0
  682. byCmdData[3] = 0x00;
  683. }
  684. wCmdSize = 4;
  685. }
  686. else if (wOperationID == SETPRINTAREA)
  687. {
  688. byCmdData[0] = 0x1B; //ESC
  689. byCmdData[1] = 0x57; //W
  690. if ( (wDataSize == 1)&&
  691. (lpbyOptionData != NULL) )
  692. {
  693. byCmdData[2] = lpbyOptionData[0]; //xL
  694. }
  695. else
  696. {
  697. byCmdData[2] = 0x00; //xL Default is 0
  698. }
  699. byCmdData[3] = 0x00; //xH is 0
  700. byCmdData[4] = 0x00; //yL is 0
  701. byCmdData[5] = 0x00; //yH is 0
  702. byCmdData[6] = 0x00; //dxL is 0
  703. byCmdData[7] = 0x03; //dxH is 3
  704. byCmdData[8] = 0x00; //dyL is 0
  705. byCmdData[9] = 0x03; //dyH is 3
  706. wCmdSize = 10;
  707. }
  708. else if (wOperationID == SETLINEPRINTAREA)
  709. {
  710. byCmdData[0] = 0x1D; //GS
  711. byCmdData[1] = 0x57; //W
  712. if ( (wDataSize == 2)&&
  713. (lpbyOptionData != NULL) )
  714. {
  715. byCmdData[2] = lpbyOptionData[0]; //nL
  716. byCmdData[3] = lpbyOptionData[1]; //nH
  717. }
  718. else
  719. {
  720. byCmdData[2] = 0x00; //nL Default is 0
  721. byCmdData[3] = 0x00; //nH
  722. }
  723. wCmdSize = 4;
  724. }//
  725. else if (wOperationID == SETLINEREVERSEPRINT) //选择/取消倒置打印
  726. {
  727. byCmdData[0] = 0x1B; //ESC
  728. byCmdData[1] = 0x7B; //{
  729. if ( (wDataSize == 1)&&
  730. (lpbyOptionData != NULL) )
  731. {
  732. byCmdData[2] = lpbyOptionData[0]; //n
  733. }
  734. else
  735. {
  736. byCmdData[2] = 0x00; //Default is 0
  737. }
  738. wCmdSize = 3;
  739. }
  740. else if (wOperationID == SETPAGEMODE)
  741. {
  742. byCmdData[0] = 0x1B; //ESC
  743. byCmdData[1] = 0x4C; //L
  744. wCmdSize = 2;
  745. }
  746. else if (wOperationID == SETSTADMODE)
  747. {
  748. byCmdData[0] = 0x1B; //ESC
  749. byCmdData[1] = 0x53; //S
  750. wCmdSize = 2;
  751. }
  752. else if (wOperationID == SETPRESENTER)
  753. {
  754. byCmdData[0] = 0x1B; //ESC
  755. byCmdData[1] = 0x63; //c
  756. byCmdData[2] = 0x38; //8
  757. if ( (wDataSize == 1)&&
  758. (lpbyOptionData != NULL) )
  759. {
  760. byCmdData[3] = lpbyOptionData[0]; //n
  761. }
  762. else
  763. {
  764. byCmdData[3] = 0x01; //Default is 1
  765. }
  766. wCmdSize = 4;
  767. }
  768. else if (wOperationID == SETPRESENTERTIME)
  769. {
  770. byCmdData[0] = 0x1B; //ESC
  771. byCmdData[1] = 0x63; //c
  772. byCmdData[2] = 0x39; //9
  773. if ( (wDataSize == 1)&&
  774. (lpbyOptionData != NULL) )
  775. {
  776. byCmdData[3] = lpbyOptionData[0]; //t
  777. }
  778. else
  779. {
  780. byCmdData[3] = 0x1e; //Default is 30s
  781. }
  782. wCmdSize = 4;
  783. }
  784. else if (wOperationID == REALTIME_RESET) //Real time reset
  785. {
  786. byCmdData[0] = 0x10; //DLE
  787. byCmdData[1] = 0x04; //EOT
  788. byCmdData[2] = 0x0A; //10
  789. wCmdSize = 3;
  790. }
  791. else if (wOperationID == REALTIME_STATUS) //Real time get status
  792. {
  793. byCmdData[0] = 0x10; //DLE
  794. byCmdData[1] = 0x04; //EOT
  795. if ( (wDataSize == 1)&&
  796. (lpbyOptionData != NULL)&&
  797. (lpbyOptionData[0]>=5)&&
  798. (lpbyOptionData[0]<=7) )
  799. {
  800. byCmdData[2] = lpbyOptionData[0]; //n
  801. }
  802. else
  803. {
  804. return INVALID_DATA; //No default value
  805. }
  806. wCmdSize = 3;
  807. }
  808. else if (wOperationID == SETALIGN) //Set align
  809. {
  810. byCmdData[0] = 0x1B; //ESC
  811. byCmdData[1] = 0x61; //a
  812. if ( (wDataSize == 1)&&
  813. (lpbyOptionData != NULL)&&
  814. (lpbyOptionData[0]>=0)&&
  815. (lpbyOptionData[0]<=2) )
  816. {
  817. byCmdData[2] = lpbyOptionData[0]; //n
  818. }
  819. else
  820. {
  821. byCmdData[2] = 0x00; //Default left
  822. }
  823. wCmdSize = 3;
  824. }
  825. else if (wOperationID == SETFEEDLEN) //Set feed length before print
  826. {
  827. byCmdData[0] = 0x1B; //ESC
  828. byCmdData[1] = 0x63; //c
  829. byCmdData[2] = 0x31; //1
  830. //Low byte
  831. if ( (lpbyOptionData != NULL)&&
  832. (wDataSize >= 1) )
  833. {
  834. byCmdData[3] = lpbyOptionData[0]; //nL
  835. }
  836. else
  837. {
  838. byCmdData[3] = 0x00; //Default 0
  839. }
  840. //High byte
  841. if ( (lpbyOptionData != NULL)&&
  842. (wDataSize >= 2) )
  843. {
  844. byCmdData[4] = lpbyOptionData[1]; //nH
  845. }
  846. else
  847. {
  848. byCmdData[4] = 0x00; //Default 0
  849. }
  850. wCmdSize = 5;
  851. }
  852. else if (wOperationID == SETCHARSPACE) //Set char space
  853. {
  854. byCmdData[0] = 0x1B; //ESC
  855. byCmdData[1] = 0x20; //SP
  856. if ( (wDataSize == 1)&&
  857. (lpbyOptionData != NULL) )
  858. {
  859. byCmdData[2] = lpbyOptionData[0]; //nL
  860. }
  861. else
  862. {
  863. byCmdData[2] = 0x00; //Default 0
  864. }
  865. wCmdSize = 3;
  866. }
  867. else if (wOperationID == GETDEVINFO) //Get device info
  868. {
  869. byCmdData[0] = 0x1D; //GS
  870. byCmdData[1] = 0x49; //I
  871. if ( (wDataSize == 1)&&
  872. (lpbyOptionData != NULL)&&
  873. (lpbyOptionData[0]>=68)&&
  874. (lpbyOptionData[0]<=153) )
  875. {
  876. byCmdData[2] = lpbyOptionData[0]; //nL
  877. }
  878. else
  879. {
  880. byCmdData[2] = 68; //Default 68
  881. }
  882. wCmdSize = 3;
  883. }
  884. else if (wOperationID == SETLEFTMARGIN) //Set left margin
  885. {
  886. byCmdData[0] = 0x1D; //GS
  887. byCmdData[1] = 0x4C; //L
  888. if ( (lpbyOptionData != NULL)&&
  889. (wDataSize == 2))
  890. {
  891. byCmdData[2] = lpbyOptionData[0]; //nL
  892. byCmdData[3] = lpbyOptionData[1]; //nH
  893. }
  894. else
  895. {
  896. byCmdData[2] = 0; //Default 0
  897. byCmdData[3] = 0; //nH //Default 0
  898. }
  899. wCmdSize = 4;
  900. }
  901. else if ( wOperationID == SETBITMAPNUM ) //Set bitmap number
  902. {
  903. byCmdData[0] = 0x1D; //GS
  904. byCmdData[1] = 0x23; //#
  905. if ( (wDataSize == 1)&&
  906. (lpbyOptionData != NULL)&&
  907. (lpbyOptionData[0]>=0)&&
  908. (lpbyOptionData[0]<=7) )
  909. {
  910. byCmdData[2] = lpbyOptionData[0]; //Bitmap number
  911. }
  912. else
  913. {
  914. byCmdData[2] = 0; //Default 0
  915. }
  916. wCmdSize = 3;
  917. }
  918. else if ( wOperationID == SETDOWNLOADBITMAP ) //Download bitmap to RAM
  919. {
  920. if ((wDataSize >= 3)&&
  921. (lpbyOptionData != NULL))
  922. {
  923. bFlag = TRUE;
  924. byExeData = new BYTE[wDataSize + 3];
  925. if (byExeData == NULL)
  926. {
  927. return INVALID_DATA;
  928. }
  929. memset(byExeData, 0, wDataSize + 3);
  930. byExeData[0] = 0x1D; // GS
  931. byExeData[1] = 0x2A; // *
  932. memcpy(&byExeData[2], lpbyOptionData, wDataSize);
  933. wCmdSize = wDataSize + 2;
  934. }
  935. else
  936. {
  937. return INVALID_DATA;
  938. }
  939. }
  940. else if ( wOperationID == SETPRINTRAMBITMAP ) //Print RAM bitmap
  941. {
  942. byCmdData[0] = 0x1D; // GS
  943. byCmdData[1] = 0x2F; // /
  944. if ( (wDataSize == 1)&&
  945. (lpbyOptionData != NULL)&&
  946. (lpbyOptionData[0]>=0)&&
  947. (lpbyOptionData[0]<=3) )
  948. {
  949. byCmdData[2] = lpbyOptionData[0]; //Bitmap number
  950. }
  951. else
  952. {
  953. byCmdData[2] = 0; //Default 0
  954. }
  955. wCmdSize = 3;
  956. }
  957. else if ( wOperationID == SETXYMOVEUNIT ) //Set X/Y move unit to mm (GS P xL xH yL yH Real command is GS P x y)
  958. {
  959. byCmdData[0] = 0x1D; //GS
  960. byCmdData[1] = 0x50; //P
  961. byCmdData[2] = 0x19; //25 1Inch = 25.4mm
  962. byCmdData[3] = 0x19;
  963. wCmdSize = 4;
  964. }
  965. //Check command data
  966. if (wCmdSize == 0)
  967. {
  968. return INVALID_DATA;
  969. }
  970. BYTE *byData = NULL;
  971. if (!bFlag)
  972. {
  973. byData = byCmdData;
  974. }
  975. else
  976. {
  977. byData = byExeData;
  978. }
  979. //Write Command
  980. LogXM(byData, wCmdSize, "Send Before");
  981. iRet = g_SerialComm.SendData(m_hDevHnd, byData, wCmdSize );
  982. /*char* pBuf = (char*)byData;
  983. int writedCount;
  984. int nCount = wCmdSize / 1024;
  985. bool bEx = false;
  986. if(wCmdSize % 1024 != 0)
  987. {
  988. bEx = true;
  989. }
  990. for(int i = 0; i < nCount; i++)
  991. {
  992. writedCount = f_WriteData(m_hDevHnd, WRITE_PIPENUM, pBuf + i*1024, 1024);
  993. if (writedCount != 1024)
  994. {
  995. m_pLog->TraceError( __FILE__, __LINE__, "WriteUSBPort(), uWrite() fail.writedCount= %d", writedCount );
  996. return HARDWARE_ERROR;
  997. }
  998. }
  999. if(bEx)
  1000. {
  1001. writedCount = f_WriteData(m_hDevHnd, WRITE_PIPENUM, pBuf + nCount*1024, wCmdSize - nCount*1024);
  1002. if (writedCount != wCmdSize - nCount*1024)
  1003. {
  1004. m_pLog->TraceError( __FILE__, __LINE__, "WriteUSBPort(), uWrite() fail.writedCount = %d", writedCount );
  1005. return HARDWARE_ERROR;
  1006. }
  1007. }*/
  1008. LogM("f_WriteData iRet=%d, wDataSize = %d", iRet, wCmdSize);
  1009. LogXM(byData, wCmdSize, "Send");
  1010. if (bFlag)
  1011. {
  1012. bFlag = FALSE;
  1013. }
  1014. if (byExeData != NULL)
  1015. {
  1016. delete [] byExeData;
  1017. byExeData = NULL;
  1018. }
  1019. if ( iRet < 0 )
  1020. {
  1021. return HARDWARE_ERROR;
  1022. }
  1023. return ERROR_SUCCESS;
  1024. }
  1025. DWORD DeviceCtrl::SendCommandSpec(WORD wOperationID, LPBYTE lpbyOptionData, WORD wDataSize)
  1026. {
  1027. INT iRet = 0;
  1028. WORD wCmdSize = 0;
  1029. BYTE byCmdData[16];
  1030. BOOL bFlag = FALSE;
  1031. BYTE *byExeData = NULL;
  1032. memset( byCmdData, 0x00, sizeof(byCmdData) );
  1033. if (wOperationID == FEEDMARKSTART) //Feed Paper to Start Position
  1034. {
  1035. byCmdData[0] = 0x1D; //GS
  1036. byCmdData[1] = 0x0C; //FF
  1037. wCmdSize = 2;
  1038. }
  1039. else if (wOperationID == DIRECTPRINT)
  1040. {
  1041. byCmdData[0] = 0x0D; //CR
  1042. wCmdSize = 1;
  1043. }
  1044. else if (wOperationID == FEEDLINEPRINT)
  1045. {
  1046. byCmdData[0] = 0x0A; //LF
  1047. wCmdSize = 1;
  1048. }
  1049. else if (wOperationID == SETFONTROTATE)
  1050. {
  1051. byCmdData[0] = 0x1B; //ESC V
  1052. if (wDataSize == 1)
  1053. {
  1054. switch (lpbyOptionData[0])
  1055. {
  1056. case 3: //逆时针转90
  1057. {
  1058. byCmdData[1] = 0x12;
  1059. wCmdSize = 2;
  1060. }
  1061. break;
  1062. case 1:
  1063. {
  1064. byCmdData[1] = 0x56;
  1065. byCmdData[2] = 0x01; //顺时钟转90
  1066. wCmdSize = 3;
  1067. }
  1068. break;
  1069. case 0:
  1070. default:
  1071. {
  1072. byCmdData[1] = 0x56;
  1073. byCmdData[2] = 0x00;
  1074. wCmdSize = 3;
  1075. }
  1076. break;
  1077. }
  1078. }
  1079. }
  1080. else if (wOperationID == FEEDMULTPRINT)
  1081. {
  1082. byCmdData[0] = 0x1B; //ESC d
  1083. byCmdData[1] = 0x64;
  1084. byCmdData[2] = lpbyOptionData[0];
  1085. wCmdSize = 3;
  1086. }
  1087. else if (wOperationID == PAGEMODPRINT)
  1088. {
  1089. byCmdData[0] = 0x1B; //ESC
  1090. byCmdData[1] = 0x0C; //FF
  1091. wCmdSize = 2;
  1092. }
  1093. else if (wOperationID == BMMODPRINT)
  1094. {
  1095. byCmdData[0] = 0x0C; //FF
  1096. wCmdSize = 1;
  1097. }
  1098. else if (wOperationID == SETHRIPRINTPOS)
  1099. {
  1100. byCmdData[0] = 0x1D; //GS
  1101. byCmdData[1] = 0x48; //H
  1102. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1103. {
  1104. byCmdData[2] = lpbyOptionData[0];
  1105. }
  1106. wCmdSize = 3;
  1107. }
  1108. else if (wOperationID == SETBARCODEHEIGHT)
  1109. {
  1110. byCmdData[0] = 0x1D; //GS
  1111. byCmdData[1] = 0x68; //h
  1112. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1113. {
  1114. byCmdData[2] = lpbyOptionData[0];
  1115. }
  1116. wCmdSize = 3;
  1117. }
  1118. else if (wOperationID == SETQRCODEPARAM)
  1119. {
  1120. byCmdData[0] = 0x1D; //GS
  1121. byCmdData[1] = 0x6F; //o
  1122. byCmdData[2] = 0x00; //0
  1123. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1124. {
  1125. byCmdData[3] = lpbyOptionData[0];
  1126. }
  1127. byCmdData[4] = 0;
  1128. byCmdData[5] = 0x02;
  1129. wCmdSize = 6;
  1130. }
  1131. else if (wOperationID == SETBARCODEPRINT)
  1132. {
  1133. if ((lpbyOptionData != NULL) && (wDataSize > 2))
  1134. {
  1135. WORD wDataLen = lpbyOptionData[1];
  1136. if (wDataLen == (wDataSize - 2))
  1137. {
  1138. bFlag = TRUE;
  1139. byExeData = new BYTE[wDataSize + 3];
  1140. memset(byExeData, 0, wDataSize + 3);
  1141. byExeData[0] = 0x1D; //GS
  1142. byExeData[1] = 0x6B; //k
  1143. memcpy(&byExeData[2], lpbyOptionData, wDataSize);
  1144. wCmdSize = wDataSize + 3;
  1145. }
  1146. else
  1147. {
  1148. return INVALID_DATA;
  1149. }
  1150. }
  1151. else
  1152. {
  1153. return INVALID_DATA;
  1154. }
  1155. }
  1156. else if (wOperationID == SETPDF417INFO)
  1157. {
  1158. byCmdData[0] = 0x1D; //GS
  1159. byCmdData[1] = 0x70; //p
  1160. if ((lpbyOptionData != NULL) && (wDataSize == 6))
  1161. {
  1162. memcpy(&byCmdData[2], lpbyOptionData, wDataSize);
  1163. }
  1164. else
  1165. {
  1166. return INVALID_DATA;
  1167. }
  1168. wCmdSize = 8;
  1169. }
  1170. else if (wOperationID == SETPDF417ERRORLEVEL)
  1171. {
  1172. byCmdData[0] = 0x1D; //GS
  1173. byCmdData[1] = 0x71; //q
  1174. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1175. {
  1176. byCmdData[2] = lpbyOptionData[0];
  1177. }
  1178. else
  1179. {
  1180. return INVALID_DATA;
  1181. }
  1182. wCmdSize = 3;
  1183. }
  1184. else if (wOperationID == SETRASTERBMPPRINT)
  1185. {
  1186. if ((wDataSize >= 4)&&
  1187. (lpbyOptionData != NULL))
  1188. {
  1189. bFlag = TRUE;
  1190. byExeData = new BYTE[wDataSize + 7];
  1191. if (byExeData == NULL)
  1192. {
  1193. return INVALID_DATA;
  1194. }
  1195. memset(byExeData, 0, wDataSize + 7);
  1196. byExeData[0] = 0x1D; //GS
  1197. byExeData[1] = 0x76; //v
  1198. byExeData[2] = 0x30;
  1199. byExeData[3] = 0;
  1200. memcpy(&byExeData[4], lpbyOptionData, wDataSize);
  1201. byExeData[wDataSize + 5] = 0x0a;
  1202. byExeData[wDataSize + 6] = 0x00;
  1203. wCmdSize = wDataSize + 6;
  1204. }
  1205. else
  1206. {
  1207. return INVALID_DATA;
  1208. }
  1209. }
  1210. else if (wOperationID == SETBARCODEWIDTH)
  1211. {
  1212. byCmdData[0] = 0x1D; //GS
  1213. byCmdData[1] = 0x77; //w
  1214. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1215. {
  1216. byCmdData[2] = lpbyOptionData[0];
  1217. }
  1218. else
  1219. {
  1220. return INVALID_DATA;
  1221. }
  1222. wCmdSize = 3;
  1223. }
  1224. else if (wOperationID == PAPERDIRCETCUT)
  1225. {
  1226. byCmdData[0] = 0x1D; //GS
  1227. byCmdData[1] = 0x56; //V
  1228. byCmdData[2] = 0x01; //1
  1229. wCmdSize = 3;
  1230. }
  1231. else if (wOperationID == PAPERDIRCETCUTEX) //全切
  1232. {
  1233. byCmdData[0] = 0x1D; //GS
  1234. byCmdData[1] = 0x56; //V
  1235. byCmdData[2] = 0x00; //0
  1236. wCmdSize = 3;
  1237. }
  1238. else if (wOperationID == PAPERFEEDCUT) //
  1239. {
  1240. byCmdData[0] = 0x1D; //GS
  1241. byCmdData[1] = 0x56; //V
  1242. byCmdData[2] = 0x42; //66
  1243. byCmdData[3] = 0x00; //0
  1244. wCmdSize = 4;
  1245. }
  1246. else if (wOperationID == SETFONTINVERSE) //反白
  1247. {
  1248. byCmdData[0] = 0x1D; //GS
  1249. byCmdData[1] = 0x42; //B
  1250. if ((wDataSize == 1) && ((lpbyOptionData[0] & 0x01) == 0x01))
  1251. {
  1252. byCmdData[2] = 0x01;
  1253. }
  1254. else
  1255. {
  1256. byCmdData[2] = 0x00; //0
  1257. }
  1258. wCmdSize = 3;
  1259. }
  1260. else if (wOperationID == INITIALIZ)
  1261. {
  1262. byCmdData[0] = 0x1B; //ESC
  1263. byCmdData[1] = 0x40; //@
  1264. wCmdSize = 2;
  1265. }
  1266. else if (wOperationID == RESET)
  1267. {
  1268. if (lpbyOptionData == NULL)
  1269. {
  1270. return INVALID_BUFFER;
  1271. }
  1272. byCmdData[0] = 0x10; //DLE
  1273. byCmdData[1] = 0x05; //ENQ
  1274. if ((wDataSize > 0)&&
  1275. (lpbyOptionData[0]>=0x01)&&
  1276. (lpbyOptionData[0]<=0x02)) //1~2
  1277. {
  1278. byCmdData[2] = lpbyOptionData[0];
  1279. wCmdSize = 3;
  1280. }
  1281. else //Illegal value
  1282. {
  1283. return INVALID_DATA;
  1284. }
  1285. }
  1286. else if (wOperationID == SETTOPPRTPOS)
  1287. {
  1288. byCmdData[0] = 0x1D; //GS
  1289. byCmdData[1] = 0x54; //T
  1290. if ((lpbyOptionData != NULL) && (wDataSize == 1))
  1291. {
  1292. byCmdData[2] = lpbyOptionData[0];
  1293. }
  1294. wCmdSize = 3;
  1295. }
  1296. else if (wOperationID == SETBLACKMARKSUPP)
  1297. {
  1298. byCmdData[0] = 0x1B; //ESC
  1299. byCmdData[1] = 0x63; //c
  1300. byCmdData[2] = 0x30; //0
  1301. if ( (wDataSize==1)&&(lpbyOptionData[0]==0) )
  1302. {
  1303. byCmdData[3] = 0x00; //Paper without BM
  1304. }
  1305. else
  1306. {
  1307. byCmdData[3] = 0x02; //Paper with BM
  1308. }
  1309. wCmdSize = 4;
  1310. }
  1311. else if (wOperationID == SETBLACKMARKPARAM)
  1312. {
  1313. byCmdData[0] = 0x1D;
  1314. byCmdData[1] = 0x28;
  1315. byCmdData[2] = 0x46;
  1316. if ( (wDataSize == 6)&&
  1317. (lpbyOptionData != NULL) )
  1318. {
  1319. byCmdData[3] = lpbyOptionData[0];
  1320. byCmdData[4] = lpbyOptionData[1];
  1321. byCmdData[5] = lpbyOptionData[2];
  1322. byCmdData[6] = lpbyOptionData[3];
  1323. byCmdData[7] = lpbyOptionData[4];
  1324. byCmdData[8] = lpbyOptionData[5];
  1325. wCmdSize = 9;
  1326. }
  1327. else //Illegal value
  1328. {
  1329. return INVALID_DATA;
  1330. }
  1331. }
  1332. else if (wOperationID == GETSTATUS_ASY)
  1333. {
  1334. byCmdData[0] = 0x1D; //GS
  1335. byCmdData[1] = 0x72; //r
  1336. wCmdSize = 2;
  1337. }
  1338. else if (wOperationID == SETFONT)
  1339. {
  1340. byCmdData[0] = 0x1B; //ESC
  1341. byCmdData[1] = 0x66; //f
  1342. if ( (wDataSize == 1)&&
  1343. (lpbyOptionData != NULL) )
  1344. {
  1345. byCmdData[2] = lpbyOptionData[0];
  1346. }
  1347. else
  1348. {
  1349. byCmdData[2] = 0x01; //Default is 8*16
  1350. }
  1351. wCmdSize = 3;
  1352. }
  1353. else if (wOperationID == SETREDMODE)
  1354. {
  1355. byCmdData[0] = 0x1B; //ESC
  1356. byCmdData[1] = 0x67; //f
  1357. if ( (wDataSize == 1)&&
  1358. (lpbyOptionData != NULL) )
  1359. {
  1360. byCmdData[2] = lpbyOptionData[0];
  1361. }
  1362. else
  1363. {
  1364. byCmdData[2] = 0x01; //Default is 8*16
  1365. }
  1366. wCmdSize = 3;
  1367. }
  1368. else if (wOperationID == SETINTERCHAR)
  1369. {
  1370. byCmdData[0] = 0x1B; //ESC
  1371. byCmdData[1] = 0x52; //R
  1372. if ( (wDataSize == 1)&&
  1373. (lpbyOptionData != NULL) )
  1374. {
  1375. byCmdData[2] = lpbyOptionData[0];
  1376. }
  1377. else
  1378. {
  1379. byCmdData[2] = 0x00; //Default is USA
  1380. }
  1381. wCmdSize = 3;
  1382. }
  1383. else if (wOperationID == SETDSMODE)
  1384. {
  1385. byCmdData[0] = 0x1B; //ESC
  1386. byCmdData[1] = 0x47; //R
  1387. if ( (wDataSize == 1)&&
  1388. (lpbyOptionData != NULL) )
  1389. {
  1390. byCmdData[2] = lpbyOptionData[0];
  1391. }
  1392. else
  1393. {
  1394. byCmdData[2] = 0x01; //Default is DS Mode
  1395. }
  1396. wCmdSize = 3;
  1397. }
  1398. else if (wOperationID == SETULMODE)
  1399. {
  1400. byCmdData[0] = 0x1B; //ESC
  1401. byCmdData[1] = 0x55; //R
  1402. if ( (wDataSize == 1)&&
  1403. (lpbyOptionData != NULL) )
  1404. {
  1405. byCmdData[2] = lpbyOptionData[0];
  1406. }
  1407. else
  1408. {
  1409. byCmdData[2] = 0x01; //Default is UL Mode
  1410. }
  1411. wCmdSize = 3;
  1412. }
  1413. else if (wOperationID == SETPRINTERMOD) //字符打印模式
  1414. {
  1415. byCmdData[0] = 0x1B; //ESC
  1416. byCmdData[1] = 0x21; //!
  1417. if ( (wDataSize == 1)&&
  1418. (lpbyOptionData != NULL) )
  1419. {
  1420. byCmdData[2] = lpbyOptionData[0];
  1421. }
  1422. else
  1423. {
  1424. byCmdData[2] = 0x00; //Default is Big Char
  1425. }
  1426. wCmdSize = 3;
  1427. }
  1428. else if (wOperationID == SETFONTCHNMOD) //汉字字符打印模式
  1429. {
  1430. byCmdData[0] = 0x1C; //FS
  1431. byCmdData[1] = 0x21; //!
  1432. if ( (wDataSize == 1)&&
  1433. (lpbyOptionData != NULL) )
  1434. {
  1435. byCmdData[2] = lpbyOptionData[0];
  1436. }
  1437. else
  1438. {
  1439. byCmdData[2] = 0x00; //Default is Big Char
  1440. }
  1441. wCmdSize = 3;
  1442. }
  1443. else if (wOperationID == SETFONTLRSPACE) //汉字左右边距设定
  1444. {
  1445. byCmdData[0] = 0x1C; //FS
  1446. byCmdData[1] = 0x53; //!
  1447. if ( (wDataSize == 2)&&
  1448. (lpbyOptionData != NULL) )
  1449. {
  1450. byCmdData[2] = lpbyOptionData[0];
  1451. byCmdData[3] = lpbyOptionData[1];
  1452. }
  1453. wCmdSize = 4;
  1454. }
  1455. else if (wOperationID == SETCHARSIZE) //设置字符放大倍数
  1456. {
  1457. byCmdData[0] = 0x1D; //GS
  1458. byCmdData[1] = 0x21; //!
  1459. if ( (wDataSize == 1)&&
  1460. (lpbyOptionData != NULL) )
  1461. {
  1462. byCmdData[2] = lpbyOptionData[0];
  1463. }
  1464. else
  1465. {
  1466. byCmdData[2] = 0x00; //Default is normal mode
  1467. }
  1468. wCmdSize = 3;
  1469. }
  1470. else if (wOperationID == SETPRINTPOS)
  1471. {
  1472. byCmdData[0] = 0x1B; //ESC
  1473. byCmdData[1] = 0x24; //$
  1474. if ( (wDataSize == 1)&&
  1475. (lpbyOptionData != NULL) )
  1476. {
  1477. if ((lpbyOptionData[0] > m_wPaperWidth) ||
  1478. (lpbyOptionData[0] > 255))
  1479. {
  1480. return INVALID_DATA;
  1481. }
  1482. byCmdData[2] = lpbyOptionData[0];
  1483. }
  1484. else
  1485. {
  1486. byCmdData[2] = 0x00; //Default is 0
  1487. }
  1488. byCmdData[3] = 0x00;
  1489. wCmdSize = 4;
  1490. }
  1491. else if (wOperationID == SETFONTUNDERLINE) //设置下划线
  1492. {
  1493. byCmdData[0] = 0x1C; //ESC
  1494. byCmdData[1] = 0x2D; //-
  1495. byCmdData[3] = 0x1B;
  1496. byCmdData[4] = 0x2D;
  1497. if ( (wDataSize == 1)&&
  1498. (lpbyOptionData != NULL) )
  1499. {
  1500. byCmdData[2] = lpbyOptionData[0];
  1501. byCmdData[5] = lpbyOptionData[0];
  1502. }
  1503. wCmdSize = 6;
  1504. }
  1505. else if (wOperationID == SETLINESPACE)
  1506. {
  1507. byCmdData[0] = 0x1B; //ESC
  1508. // byCmdData[1] = 0x33; //3
  1509. if ( (wDataSize == 1)&&
  1510. (lpbyOptionData != NULL) )
  1511. {
  1512. //byCmdData[2] = lpbyOptionData[0];
  1513. if (lpbyOptionData[0] == 0)
  1514. { //默认行高
  1515. byCmdData[1] = 0x32; //2
  1516. wCmdSize = 2;
  1517. }
  1518. else
  1519. {
  1520. byCmdData[1] = 0x33; //3
  1521. // BYTE byDefulat = 27; //默认行高
  1522. // BYTE byVmm2Inch = lpbyOptionData[0] * (203 / 25.4);
  1523. // byCmdData[2] = byDefulat + lpbyOptionData[0];
  1524. byCmdData[2] = lpbyOptionData[0];
  1525. wCmdSize = 3;
  1526. }
  1527. }
  1528. else
  1529. {
  1530. //byCmdData[2] = 0x1E; //Default is 30
  1531. byCmdData[1] = 0x32;
  1532. wCmdSize = 2;
  1533. }
  1534. // wCmdSize = 3;
  1535. }
  1536. else if (wOperationID == SETFONTBOLD) //设置粗体
  1537. {
  1538. byCmdData[0] = 0x1B; //ESC
  1539. byCmdData[1] = 0x45; //E
  1540. if ( (wDataSize == 1)&&
  1541. (lpbyOptionData != NULL) )
  1542. {
  1543. byCmdData[2] = lpbyOptionData[0];
  1544. }
  1545. wCmdSize = 3;
  1546. }
  1547. else if (wOperationID == SETVERIRELATEPOS) //相对纵向位移
  1548. {
  1549. byCmdData[0] = 0x1B; //ESC
  1550. byCmdData[1] = 0x4A; //$
  1551. if ( (wDataSize == 1)&&
  1552. (lpbyOptionData != NULL) )
  1553. {
  1554. // if (lpbyOptionData[0] > 255)
  1555. // {
  1556. // return INVALID_DATA;
  1557. // }
  1558. // BYTE byVmm2Inch = lpbyOptionData[0] * (203 / 25.4);
  1559. byCmdData[2] = lpbyOptionData[0];
  1560. }
  1561. wCmdSize = 3;
  1562. }
  1563. else if (wOperationID == SETHORIRELATEPOS) //相对横向位移
  1564. {
  1565. byCmdData[0] = 0x1B; //ESC
  1566. byCmdData[1] = 0x5C; //$
  1567. if ( (wDataSize == 2)&&
  1568. (lpbyOptionData != NULL) )
  1569. {
  1570. byCmdData[2] = lpbyOptionData[0];
  1571. byCmdData[3] = lpbyOptionData[1];
  1572. }
  1573. else
  1574. {
  1575. byCmdData[2] = 0x00; //Default is 0
  1576. byCmdData[3] = 0x00;
  1577. }
  1578. wCmdSize = 4;
  1579. }
  1580. else if (wOperationID == SETPRINTAREA)
  1581. {
  1582. byCmdData[0] = 0x1B; //ESC
  1583. byCmdData[1] = 0x57; //W
  1584. if ( (wDataSize == 1)&&
  1585. (lpbyOptionData != NULL) )
  1586. {
  1587. byCmdData[2] = lpbyOptionData[0]; //xL
  1588. }
  1589. else
  1590. {
  1591. byCmdData[2] = 0x00; //xL Default is 0
  1592. }
  1593. byCmdData[3] = 0x00; //xH is 0
  1594. byCmdData[4] = 0x00; //yL is 0
  1595. byCmdData[5] = 0x00; //yH is 0
  1596. byCmdData[6] = 0x00; //dxL is 0
  1597. byCmdData[7] = 0x03; //dxH is 3
  1598. byCmdData[8] = 0x00; //dyL is 0
  1599. byCmdData[9] = 0x03; //dyH is 3
  1600. wCmdSize = 10;
  1601. }
  1602. else if (wOperationID == SETLINEPRINTAREA)
  1603. {
  1604. byCmdData[0] = 0x1D; //GS
  1605. byCmdData[1] = 0x57; //W
  1606. if ( (wDataSize == 2)&&
  1607. (lpbyOptionData != NULL) )
  1608. {
  1609. byCmdData[2] = lpbyOptionData[0]; //nL
  1610. byCmdData[3] = lpbyOptionData[1]; //nH
  1611. }
  1612. else
  1613. {
  1614. byCmdData[2] = 0x00; //nL Default is 0
  1615. byCmdData[3] = 0x00; //nH
  1616. }
  1617. wCmdSize = 4;
  1618. }//
  1619. else if (wOperationID == SETLINEREVERSEPRINT) //选择/取消倒置打印
  1620. {
  1621. byCmdData[0] = 0x1B; //ESC
  1622. byCmdData[1] = 0x7B; //{
  1623. if ( (wDataSize == 1)&&
  1624. (lpbyOptionData != NULL) )
  1625. {
  1626. byCmdData[2] = lpbyOptionData[0]; //n
  1627. }
  1628. else
  1629. {
  1630. byCmdData[2] = 0x00; //Default is 0
  1631. }
  1632. wCmdSize = 3;
  1633. }
  1634. else if (wOperationID == SETPAGEMODE)
  1635. {
  1636. byCmdData[0] = 0x1B; //ESC
  1637. byCmdData[1] = 0x4C; //L
  1638. wCmdSize = 2;
  1639. }
  1640. else if (wOperationID == SETSTADMODE)
  1641. {
  1642. byCmdData[0] = 0x1B; //ESC
  1643. byCmdData[1] = 0x53; //S
  1644. wCmdSize = 2;
  1645. }
  1646. else if (wOperationID == SETPRESENTER)
  1647. {
  1648. byCmdData[0] = 0x1B; //ESC
  1649. byCmdData[1] = 0x63; //c
  1650. byCmdData[2] = 0x38; //8
  1651. if ( (wDataSize == 1)&&
  1652. (lpbyOptionData != NULL) )
  1653. {
  1654. byCmdData[3] = lpbyOptionData[0]; //n
  1655. }
  1656. else
  1657. {
  1658. byCmdData[3] = 0x01; //Default is 1
  1659. }
  1660. wCmdSize = 4;
  1661. }
  1662. else if (wOperationID == SETPRESENTERTIME)
  1663. {
  1664. byCmdData[0] = 0x1B; //ESC
  1665. byCmdData[1] = 0x63; //c
  1666. byCmdData[2] = 0x39; //9
  1667. if ( (wDataSize == 1)&&
  1668. (lpbyOptionData != NULL) )
  1669. {
  1670. byCmdData[3] = lpbyOptionData[0]; //t
  1671. }
  1672. else
  1673. {
  1674. byCmdData[3] = 0x1e; //Default is 30s
  1675. }
  1676. wCmdSize = 4;
  1677. }
  1678. else if (wOperationID == REALTIME_RESET) //Real time reset
  1679. {
  1680. byCmdData[0] = 0x10; //DLE
  1681. byCmdData[1] = 0x04; //EOT
  1682. byCmdData[2] = 0x0A; //10
  1683. wCmdSize = 3;
  1684. }
  1685. else if (wOperationID == REALTIME_STATUS) //Real time get status
  1686. {
  1687. byCmdData[0] = 0x10; //DLE
  1688. byCmdData[1] = 0x04; //EOT
  1689. if ( (wDataSize == 1)&&
  1690. (lpbyOptionData != NULL)&&
  1691. (lpbyOptionData[0]>=5)&&
  1692. (lpbyOptionData[0]<=7) )
  1693. {
  1694. byCmdData[2] = lpbyOptionData[0]; //n
  1695. }
  1696. else
  1697. {
  1698. return INVALID_DATA; //No default value
  1699. }
  1700. wCmdSize = 3;
  1701. }
  1702. else if (wOperationID == SETALIGN) //Set align
  1703. {
  1704. byCmdData[0] = 0x1B; //ESC
  1705. byCmdData[1] = 0x61; //a
  1706. if ( (wDataSize == 1)&&
  1707. (lpbyOptionData != NULL)&&
  1708. (lpbyOptionData[0]>=0)&&
  1709. (lpbyOptionData[0]<=2) )
  1710. {
  1711. byCmdData[2] = lpbyOptionData[0]; //n
  1712. }
  1713. else
  1714. {
  1715. byCmdData[2] = 0x00; //Default left
  1716. }
  1717. wCmdSize = 3;
  1718. }
  1719. else if (wOperationID == SETFEEDLEN) //Set feed length before print
  1720. {
  1721. byCmdData[0] = 0x1B; //ESC
  1722. byCmdData[1] = 0x63; //c
  1723. byCmdData[2] = 0x31; //1
  1724. //Low byte
  1725. if ( (lpbyOptionData != NULL)&&
  1726. (wDataSize >= 1) )
  1727. {
  1728. byCmdData[3] = lpbyOptionData[0]; //nL
  1729. }
  1730. else
  1731. {
  1732. byCmdData[3] = 0x00; //Default 0
  1733. }
  1734. //High byte
  1735. if ( (lpbyOptionData != NULL)&&
  1736. (wDataSize >= 2) )
  1737. {
  1738. byCmdData[4] = lpbyOptionData[1]; //nH
  1739. }
  1740. else
  1741. {
  1742. byCmdData[4] = 0x00; //Default 0
  1743. }
  1744. wCmdSize = 5;
  1745. }
  1746. else if (wOperationID == SETCHARSPACE) //Set char space
  1747. {
  1748. byCmdData[0] = 0x1B; //ESC
  1749. byCmdData[1] = 0x20; //SP
  1750. if ( (wDataSize == 1)&&
  1751. (lpbyOptionData != NULL) )
  1752. {
  1753. byCmdData[2] = lpbyOptionData[0]; //nL
  1754. }
  1755. else
  1756. {
  1757. byCmdData[2] = 0x00; //Default 0
  1758. }
  1759. wCmdSize = 3;
  1760. }
  1761. else if (wOperationID == GETDEVINFO) //Get device info
  1762. {
  1763. byCmdData[0] = 0x1D; //GS
  1764. byCmdData[1] = 0x49; //I
  1765. if ( (wDataSize == 1)&&
  1766. (lpbyOptionData != NULL)&&
  1767. (lpbyOptionData[0]>=68)&&
  1768. (lpbyOptionData[0]<=153) )
  1769. {
  1770. byCmdData[2] = lpbyOptionData[0]; //nL
  1771. }
  1772. else
  1773. {
  1774. byCmdData[2] = 68; //Default 68
  1775. }
  1776. wCmdSize = 3;
  1777. }
  1778. else if (wOperationID == SETLEFTMARGIN) //Set left margin
  1779. {
  1780. byCmdData[0] = 0x1D; //GS
  1781. byCmdData[1] = 0x4C; //L
  1782. if ( (lpbyOptionData != NULL)&&
  1783. (wDataSize == 2))
  1784. {
  1785. byCmdData[2] = lpbyOptionData[0]; //nL
  1786. byCmdData[3] = lpbyOptionData[1]; //nH
  1787. }
  1788. else
  1789. {
  1790. byCmdData[2] = 0; //Default 0
  1791. byCmdData[3] = 0; //nH //Default 0
  1792. }
  1793. wCmdSize = 4;
  1794. }
  1795. else if ( wOperationID == SETBITMAPNUM ) //Set bitmap number
  1796. {
  1797. byCmdData[0] = 0x1D; //GS
  1798. byCmdData[1] = 0x23; //#
  1799. if ( (wDataSize == 1)&&
  1800. (lpbyOptionData != NULL)&&
  1801. (lpbyOptionData[0]>=0)&&
  1802. (lpbyOptionData[0]<=7) )
  1803. {
  1804. byCmdData[2] = lpbyOptionData[0]; //Bitmap number
  1805. }
  1806. else
  1807. {
  1808. byCmdData[2] = 0; //Default 0
  1809. }
  1810. wCmdSize = 3;
  1811. }
  1812. else if ( wOperationID == SETDOWNLOADBITMAP ) //Download bitmap to RAM
  1813. {
  1814. if ((wDataSize >= 3)&&
  1815. (lpbyOptionData != NULL))
  1816. {
  1817. bFlag = TRUE;
  1818. byExeData = new BYTE[wDataSize + 3];
  1819. if (byExeData == NULL)
  1820. {
  1821. return INVALID_DATA;
  1822. }
  1823. memset(byExeData, 0, wDataSize + 3);
  1824. byExeData[0] = 0x1D; // GS
  1825. byExeData[1] = 0x2A; // *
  1826. memcpy(&byExeData[2], lpbyOptionData, wDataSize);
  1827. wCmdSize = wDataSize + 2;
  1828. }
  1829. else
  1830. {
  1831. return INVALID_DATA;
  1832. }
  1833. }
  1834. else if ( wOperationID == SETPRINTRAMBITMAP ) //Print RAM bitmap
  1835. {
  1836. byCmdData[0] = 0x1D; // GS
  1837. byCmdData[1] = 0x2F; // /
  1838. if ( (wDataSize == 1)&&
  1839. (lpbyOptionData != NULL)&&
  1840. (lpbyOptionData[0]>=0)&&
  1841. (lpbyOptionData[0]<=3) )
  1842. {
  1843. byCmdData[2] = lpbyOptionData[0]; //Bitmap number
  1844. }
  1845. else
  1846. {
  1847. byCmdData[2] = 0; //Default 0
  1848. }
  1849. wCmdSize = 3;
  1850. }
  1851. else if ( wOperationID == SETXYMOVEUNIT ) //Set X/Y move unit to mm (GS P xL xH yL yH Real command is GS P x y)
  1852. {
  1853. byCmdData[0] = 0x1D; //GS
  1854. byCmdData[1] = 0x50; //P
  1855. byCmdData[2] = 0x19; //25 1Inch = 25.4mm
  1856. byCmdData[3] = 0x19;
  1857. wCmdSize = 4;
  1858. }
  1859. //Check command data
  1860. if (wCmdSize == 0)
  1861. {
  1862. return INVALID_DATA;
  1863. }
  1864. BYTE *byData = NULL;
  1865. if (!bFlag)
  1866. {
  1867. byData = byCmdData;
  1868. }
  1869. else
  1870. {
  1871. byData = byExeData;
  1872. }
  1873. //Write Command
  1874. iRet = g_SerialComm.SendData(m_hDevHnd, (LPBYTE)byData, (int)wCmdSize);
  1875. if (bFlag)
  1876. {
  1877. bFlag = FALSE;
  1878. }
  1879. if (byExeData != NULL)
  1880. {
  1881. delete [] byExeData;
  1882. byExeData = NULL;
  1883. }
  1884. LOG_FUNCTION();
  1885. if ( iRet < 0 )
  1886. {
  1887. LogXE(byData, wCmdSize, "Send");
  1888. return HARDWARE_ERROR;
  1889. }
  1890. LogXM(byData, wCmdSize, "Send");
  1891. return ERROR_SUCCESS;
  1892. }
  1893. //////////////////////////////////////////////////
  1894. //Function Name:
  1895. //History:
  1896. //RPR_EXE: 00-01-02-01 2013-02-06 Lichun(Create)
  1897. //////////////////////////////////////////////////
  1898. DWORD DeviceCtrl::SendData( LPBYTE lpbyOptionData, WORD wDataSize )
  1899. {
  1900. int iRet = 0;
  1901. LOG_FUNCTION();
  1902. LogM("SendData is called");
  1903. //Check command data
  1904. if ( (wDataSize==0)||
  1905. (lpbyOptionData==NULL) )
  1906. {
  1907. LogE("SendData INVALID_DATA.");
  1908. return INVALID_DATA;
  1909. }
  1910. LogM("f_WriteData is calling");
  1911. //Write Command
  1912. iRet = g_SerialComm.SendData( m_hDevHnd, lpbyOptionData, (int)wDataSize );
  1913. LogM("f_WriteData iRet=%d, wDataSize = %d", iRet, wDataSize);
  1914. LogXM(lpbyOptionData, wDataSize, "bmp");
  1915. if ( iRet < 0 )
  1916. {
  1917. LogXE(lpbyOptionData, wDataSize, "Send");
  1918. return HARDWARE_ERROR;
  1919. }
  1920. LogXM(lpbyOptionData, wDataSize, "Send");
  1921. return ERROR_SUCCESS;
  1922. }
  1923. //////////////////////////////////////////////////
  1924. //Function Name:
  1925. //History:
  1926. //RPR_EXE: 01-02-27-01 2016-12-26 Liuxin(Create)
  1927. //////////////////////////////////////////////////
  1928. BOOL DeviceCtrl::SetParam( WORD wWidth )
  1929. {
  1930. m_wPaperWidth = wWidth;
  1931. return TRUE;
  1932. }
  1933. BOOL DeviceCtrl::bWriteCommand( LPVOID Buffer, int iLen )
  1934. {
  1935. char* pBuf = (char*)Buffer;
  1936. int writedCount;
  1937. int nCount = iLen / 2048;
  1938. bool bEx = false;
  1939. if(iLen % 2048 != 0)
  1940. {
  1941. bEx = true;
  1942. }
  1943. for(int i = 0; i < nCount; i++)
  1944. {
  1945. writedCount = g_SerialComm.SendData(m_hDevHnd, (LPBYTE)(pBuf + i*2048), 2048);
  1946. if (writedCount != 2048)
  1947. {
  1948. LogE( __FILE__, __LINE__, "f_WriteData() fail." );
  1949. return false;
  1950. }
  1951. }
  1952. if(bEx)
  1953. {
  1954. writedCount = g_SerialComm.SendData(m_hDevHnd, (LPBYTE)(pBuf + nCount*2048), iLen - nCount*2048);
  1955. if (writedCount != iLen - nCount*2048)
  1956. {
  1957. LogE( __FILE__, __LINE__, "f_WriteData fail." );
  1958. return false;
  1959. }
  1960. }
  1961. return true;
  1962. }
  1963. BOOL DeviceCtrl::bCutPaper()
  1964. {
  1965. LOG_FUNCTION();
  1966. LogM("bCutPaper() entry.");
  1967. INT iRet = 0;
  1968. WORD wCmdSize = 0;
  1969. BYTE byCmdData[16];
  1970. memset( byCmdData, 0x00, sizeof(byCmdData) );
  1971. byCmdData[0] = 0x1D; //GS
  1972. byCmdData[1] = 0x56; //V
  1973. byCmdData[2] = 0x41; //66
  1974. byCmdData[3] = 0x00; //0
  1975. wCmdSize = 4;
  1976. iRet = g_SerialComm.SendData( m_hDevHnd, byCmdData, (int)wCmdSize );
  1977. LogM("bCutPaper f_WriteData iRet=%d, wDataSize = %d", iRet, wCmdSize);
  1978. LogXM(byCmdData, wCmdSize, "Send");
  1979. return TRUE;
  1980. }