Yao Chunli
2022-05-28 eea0893be9d4ef175ab26e8fea51d41fa33477ce
提交 | 用户 | age
65f713 1 // DialogFactCfg.cpp: 实现文件
Q 2 //
3
4 #include "pch.h"
5 #include "MTerm2.h"
6 #include "DialogFactCfg.h"
7 #include "afxdialogex.h"
8
9 #include "MTerm2Doc.h"
10
11 // CDialogFactCfg 对话框
12
13 IMPLEMENT_DYNAMIC(CDialogFactCfg, CDialogEx)
14
15 CDialogFactCfg::CDialogFactCfg(CWnd* pParent /*=nullptr*/)
16     : CDialogEx(IDD_DIALOG_FACT_CFG, pParent)
17 {
18     InitDataItems();
19 }
20
21 CDialogFactCfg::~CDialogFactCfg()
22 {
23 }
24
25 void CDialogFactCfg::DoDataExchange(CDataExchange* pDX)
26 {
27     CDialogEx::DoDataExchange(pDX);
28 }
29
30
31 BEGIN_MESSAGE_MAP(CDialogFactCfg, CDialogEx)
32     ON_BN_CLICKED(IDC_BUTTON_CONN, &CDialogFactCfg::OnBnClickedButtonConn)
33     ON_BN_CLICKED(IDC_BUTTON_DISCONN, &CDialogFactCfg::OnBnClickedButtonDisconn)
34     ON_BN_CLICKED(IDC_BUTTON_READDATA, &CDialogFactCfg::OnBnClickedButtonReaddata)
35     ON_BN_CLICKED(IDC_BUTTON_WRITEDATA, &CDialogFactCfg::OnBnClickedButtonWritedata)
36 END_MESSAGE_MAP()
37
38 // CDialogFactCfg 消息处理程序
39 int CDialogFactCfg::AddDataItem(int nOffset, int nSize, int nType, CString sName)
40 {
41     FactoryDataItems[nFactoryDataItemsCount] = { nOffset,nSize,nType,sName };
42     nFactoryDataItemsCount++;
43     return 0;
44 }
45
46 int CDialogFactCfg::InitDataItems()
47 {
48     AddDataItem(0, 2, typeBIN, _T("开始标志"));
49     AddDataItem(2, 2, typeINT, _T("序号"));
50     AddDataItem(4, 2, typeHEX, _T("ModelNo"));
51     AddDataItem(6, 2, typeHEX, _T("ModelVer"));
52     AddDataItem(8, 4, typeUINT, _T("nLotNo"));
53     AddDataItem(12, 4, typeDATETIME, _T("nProductDate"));
54     AddDataItem(16, 4, typeHEX, _T("nSN1"));
55     AddDataItem(20, 4, typeHEX, _T("nProtocalVer"));
56     AddDataItem(24, 4, typeHEX, _T("nDefaultFuncr"));
57     AddDataItem(28, 16, typeString, _T("sModelStr"));
58     AddDataItem(44, 16, typeString, _T("sLot_No"));
59     AddDataItem(60, 16, typeString, _T("sSNStr"));
60     AddDataItem(76, 2, typeHEX, _T("CRC1"));
61     AddDataItem(78, 2, typeHEX, _T("EndSign"));
62     return 0;
63 }
64
65 int CDialogFactCfg::FindIdByName(CString sName)
66 {
67     for (int i = 0; i < nFactoryDataItemsCount; i++)    {
68         if (FactoryDataItems[i].sName == sName)    {
69             return i;
70         }
71     }
72     return -1;
73 }
74
75 int CDialogFactCfg::GetDataByOffset(void * pDataBlock, int nOffset)
76 {
77     return 0;
78 }
79 int CDialogFactCfg::GetDataByName(void * pDataBlock, CString sName)
80 {
81     return 0;
82 }
83 CString CDialogFactCfg::GetDataStrByName(void * pDataBlock, CString sName)
84 {
85     UCHAR * pBuf2 = (UCHAR *)pDataBlock;
86     CString s1;
87     UCHAR buf3[256];
88     CString s3;
89     int nIdx = FindIdByName(sName);
90     if (nIdx >= 0)
91     {
92         CTime ctime1;
93         int nType = FactoryDataItems[nIdx].nType;
94         int nSize = FactoryDataItems[nIdx].nSize;
95         int nOffset = FactoryDataItems[nIdx].nOffset;
96         int nValue;
97         UINT uValue;
98         switch (nType)
99         {
100         case typeINT:
101             if (nSize == 1) {
102                 nValue = *((char *)(pBuf2 + nOffset));
103             }
104             else if (nSize == 2) {
105                 nValue = *(short *)(pBuf2 + nOffset);
106             }
107             else if (nSize == 3) {
108
109             }
110             else if (nSize == 4) {
111                 nValue = *(int *)(pBuf2 + nOffset);
112             }
113             s1.Format(_T("%d"), nValue);
114             break;
115         case typeUINT:
116             if (nSize == 1) {
117                 uValue = *((UCHAR *)(pBuf2 + nOffset));
118             }
119             else if (nSize == 2) {
120                 uValue = *(USHORT *)(pBuf2 + nOffset);
121             }
122             else if (nSize == 3) {
123
124             }
125             else if (nSize == 4) {
126                 uValue = *(UINT *)(pBuf2 + nOffset);
127             }
128             s1.Format(_T("%u"), uValue);
129             break;
130         case typeHEX:
131             if (nSize == 1) {
132                 uValue = *((UCHAR *)(pBuf2 + nOffset));
133                 s1.Format(_T("%02X"), uValue);
134             }
135             else if (nSize == 2) {
136                 uValue = *(USHORT *)(pBuf2 + nOffset);
137                 s1.Format(_T("%04X"), uValue);
138             }
139             else if (nSize == 3) {
140
141             }
142             else if (nSize == 4) {
143                 uValue = *(UINT *)(pBuf2 + nOffset);
144                 s1.Format(_T("%08X"), uValue);
145             }
146
147             break;
148         case typeBIN:
149             if (nSize == 1) {
150                 uValue = *((UCHAR *)(pBuf2 + nOffset));
151                 s1.Format(_T("%02X"), uValue);
152             }
153             else if (nSize == 2) {
154                 uValue = *(USHORT *)(pBuf2 + nOffset);
155                 s1.Format(_T("%04X"), uValue);
156             }
157             else if (nSize == 3) {
158
159             }
160             else if (nSize == 4) {
161                 uValue = *(UINT *)(pBuf2 + nOffset);
162                 s1.Format(_T("%08X"), uValue);
163             }
164
165             break;
166         case typeFLOAT:
167             break;
168         case typeFIX:
169             break;
170         case typeBIT:
171             break;
172         case typeString:
173             for (int j = 0; j < nSize; j++)
174             {
175                 buf3[j] = pBuf2[nOffset + j];
176             }
177             buf3[nSize] = 0;
178             s3 = buf3;
179             s1.Format(_T("%s"), s3);
180             break;
181         case typeDATETIME:
182             nValue = *(UINT *)(pBuf2 + nOffset);
183             ctime1 = nValue;
184             ctime1 = CStringToCTime(_T("2000-01-01 08:00:00"));
185             ctime1 += nValue;
186             s3 = ctime1.Format(_T("%Y-%m-%d %H:%M:%S"));
187             s1.Format(_T("%s"), s3);
188             break;
189         default:
190             break;
191         }
192     }
193     return s1;
194 }
195 int CDialogFactCfg::SetDataByName(void * pDataBlock, CString sName, UINT uValue)
196 {
197     UCHAR * pBuf2 = (UCHAR *)pDataBlock;
198 //    UCHAR buf3[256];
199     int nIdx = FindIdByName(sName);
200     if (nIdx >= 0)
201     {
202         CTime ctime1;
203         CTime ctime2;
204         CTimeSpan ctime3;
205         int nType = FactoryDataItems[nIdx].nType;
206         int nSize = FactoryDataItems[nIdx].nSize;
207         int nOffset = FactoryDataItems[nIdx].nOffset;
208         int nValue;
209         switch (nType)
210         {
211         case typeINT:
212             if (nSize == 1) {
213                 *((char *)(pBuf2 + nOffset)) = uValue;
214             }
215             else if (nSize == 2) {
216                 *(short *)(pBuf2 + nOffset) = uValue;
217             }
218             else if (nSize == 3) {
219
220             }
221             else if (nSize == 4) {
222                 *(int *)(pBuf2 + nOffset) = uValue;
223             }
224             break;
225         case typeUINT:
226             if (nSize == 1) {
227                 *((UCHAR *)(pBuf2 + nOffset)) = uValue;
228             }
229             else if (nSize == 2) {
230                 *(USHORT *)(pBuf2 + nOffset) = uValue;
231             }
232             else if (nSize == 3) {
233
234             }
235             else if (nSize == 4) {
236                 *(UINT *)(pBuf2 + nOffset) = uValue;
237             }
238             break;
239         case typeBIN:
240             if (nSize == 1) {
241                 *((UCHAR *)(pBuf2 + nOffset)) = uValue;
242             }
243             else if (nSize == 2) {
244                 *(USHORT *)(pBuf2 + nOffset) = uValue;
245             }
246             else if (nSize == 3) {
247
248             }
249             else if (nSize == 4) {
250                 *(UINT *)(pBuf2 + nOffset) = uValue;
251             }
252
253             break;
254         case typeFLOAT:
255             break;
256         case typeFIX:
257             break;
258         case typeBIT:
259             break;
260         case typeString:
261             break;
262         case typeDATETIME:
263             ctime1 = CStringToCTime(_T("2000-01-01 08:00:00"));
264             ctime2 = uValue;
265             ctime3 = ctime2 - ctime1;
266             nValue = ctime3.GetTotalSeconds();
267             *(UINT *)(pBuf2 + nOffset) = uValue;
268
269             break;
270         default:
271             break;
272         }
273     }
274     return 0;
275 }
276 int CDialogFactCfg::SetDataByName(void * pDataBlock, CString sName, CString sValue)
277 {
278     UCHAR * pBuf2 = (UCHAR *)pDataBlock;
279 //    UCHAR buf3[256];
280     CStringA s3;
281     int nIdx = FindIdByName(sName);
282     if (nIdx >= 0)
283     {
284         CTime ctime1;
285         CTime ctime2;
286         CTimeSpan ctime3;
287         int nType = FactoryDataItems[nIdx].nType;
288         int nSize = FactoryDataItems[nIdx].nSize;
289         int nOffset = FactoryDataItems[nIdx].nOffset;
290         int nValue;
291         int len;
292         switch (nType)
293         {
294         case typeINT:
295             if (nSize == 1) {
296                 *((char *)(pBuf2 + nOffset)) = _tstoi(sValue);
297             }
298             else if (nSize == 2) {
299                 *(short *)(pBuf2 + nOffset) = _tstoi(sValue);
300             }
301             else if (nSize == 3) {
302
303             }
304             else if (nSize == 4) {
305                 *(int *)(pBuf2 + nOffset) = _tstoi(sValue);
306             }
307             break;
308         case typeUINT:
309             if (nSize == 1) {
310                 *((UCHAR *)(pBuf2 + nOffset)) = _tstoi(sValue);
311             }
312             else if (nSize == 2) {
313                 *(USHORT *)(pBuf2 + nOffset) = _tstoi(sValue);
314             }
315             else if (nSize == 3) {
316
317             }
318             else if (nSize == 4) {
319                 *(UINT *)(pBuf2 + nOffset) = _tstoi(sValue);
320             }
321             break;
322         case typeBIN:
323             if (nSize == 1) {
324                 *((UCHAR *)(pBuf2 + nOffset)) = _tstoi(sValue);
325             }
326             else if (nSize == 2) {
327                 *(USHORT *)(pBuf2 + nOffset) = _tstoi(sValue);
328             }
329             else if (nSize == 3) {
330
331             }
332             else if (nSize == 4) {
333                 *(UINT *)(pBuf2 + nOffset) = _tstoi(sValue);
334             }
335
336             break;
337         case typeFLOAT:
338             break;
339         case typeFIX:
340             break;
341         case typeBIT:
342             break;
343         case typeString:
344             s3 = sValue;
345             len = s3.GetLength();
346             for (int j = 0; j < nSize; j++) {
347                 if (j < len) {
348                     pBuf2[nOffset + j] = s3[j];
349                 }else {
350                     pBuf2[nOffset + j] = ' ';
351                 }
352             }
353             break;
354         case typeDATETIME:
355             ctime1 = CStringToCTime(_T("2000-01-01 08:00:00"));
356             ctime2 = CStringToCTime(sValue);;
357             ctime3 = ctime2 - ctime1;
358             nValue = ctime3.GetTotalSeconds();
359             *(UINT *)(pBuf2 + nOffset) = nValue;
360
361             break;
362         default:
363             break;
364         }
365     }
366     return 0;
367 }
368
369
370
371 CMTerm2Doc * CDialogFactCfg::GetDocument()
372 {
373     // TODO: 在此处添加实现代码.
374     CMDIFrameWnd  *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
375     CMDIChildWnd  *pChild = (CMDIChildWnd   *)pFrame->GetActiveFrame();
376     CView   *pV = (CView*)pChild->GetActiveView();
377     CMTerm2Doc* pDoc = (CMTerm2Doc *)(pV->GetDocument());
378     return pDoc;
379 }
380
381 int CDialogFactCfg::Connect()
382 {
383     // TODO: 在此处添加实现代码.
384     CString s1;
385     CMTerm2Doc* pDoc = (CMTerm2Doc *)GetDocument();
386
387
388     int r = pDoc->Connect();
389     s1.Format(_T("Open %s  = %d"), pDoc->myHvSerialPort1.m_strResult, r);
390     SysLog(s1);
391     if (r == pDoc->myHvSerialPort1.R_OK)
392     {
393         pDoc->MyKLink1.Open();
394         return false;
395     }
396     return true;
397     return 0;
398 }
399
400
401 int CDialogFactCfg::Disconnect()
402 {
403     // TODO: 在此处添加实现代码.
404     CMTerm2Doc* pDoc = (CMTerm2Doc *)GetDocument();
405     
406     pDoc->DisConnect();
407     pDoc->MyKLink1.Close();
408     return 0;
409 }
410
411 int CDialogFactCfg::ReadData()
412 {
413     CMTerm2Doc* pDoc = (CMTerm2Doc *)GetDocument();
414
415     unsigned short buf1[1024];
416     int res = pDoc->MyKLink1.GetInfo(1, 0, 0, 16, buf1);
417     SysLog(pDoc->MyKLink1.m_resultStr);
418     CString s1;
419     s1.Format(_T("GetInfo = %d "), res);
420     if (res == KLink::KL_OK)
421     {
422         s1.Append(_T("\r\n"));
423         for (int i = 0; i < 16 / 2; i++)
424         {
425             s1.AppendFormat(_T("%04X "), buf1[i]);
426         }
427     }
428     SysLog(s1);
429     
430     s1.Format(_T("%04X"), buf1[0]);
431     SetDlgItemText(IDC_EDIT_DEVICE_TYPE, s1);
432     s1.Format(_T("%04X"), buf1[1]);
433     SetDlgItemText(IDC_EDIT_FIRM_VER, s1);
434     s1.Format(_T("%04X"), buf1[2]);
435     SetDlgItemText(IDC_EDIT_KLINK_VER, s1);
436     s1.Format(_T("%04X"), buf1[3]);
437     SetDlgItemText(IDC_EDIT_CAP, s1);
438
439     CString s2;
440     CString s3;
441     unsigned char buf2[1024];
442     res = pDoc->MyKLink1.GetUID(1, 0, 0, 12, (unsigned short *)buf2);
443     SysLog(pDoc->MyKLink1.m_resultStr);
444     s1.Format(_T("GetUID = %d "), res);
445     
446     if (res == KLink::KL_OK)
447     {
448         s1.Append(_T("\r\n"));
449         for (int i = 0; i < 12; i++)
450         {
451             s1.AppendFormat(_T("%02X "), buf2[i]);
452             s2.AppendFormat(_T("%02X"), buf2[12-i-1]);
453         //    s3.AppendFormat(_T("%c"), buf2[12 - i - 1]);
454         }
455     }
456     SysLog(s1);
457     SetDlgItemText(IDC_EDIT_DEVICE_UID, s2);
458
459     
460     res = pDoc->MyKLink1.GetSN(1, 0, 0, 4, (unsigned short *)buf2);
461     SysLog(pDoc->MyKLink1.m_resultStr);
462     s1.Format(_T("GetSN = %d "), res);
463     s2.Empty();
464     if (res == KLink::KL_OK)
465     {
466         s1.Append(_T("\r\n"));
467         for (int i = 0; i < 4; i++)
468         {
469             s1.AppendFormat(_T("%02X "), buf2[i]);
470             s2.AppendFormat(_T("%02X"), buf2[4-i-1]);
471             //    s3.AppendFormat(_T("%c"), buf2[12 - i - 1]);
472         }
473     }
474     SysLog(s1);
475     SetDlgItemText(IDC_EDIT_ORG_FACT_SN, s2);
476
477     res = pDoc->MyKLink1.GetFactoryData(1, 0, 0, 80, (unsigned short *)buf2);
478     SysLog(pDoc->MyKLink1.m_resultStr);
479     s1.Format(_T("GetFactoryData = %d "), res);
480     s2.Empty();
481     if (res == KLink::KL_OK)
482     {
483         s1.Append(_T("\r\n"));
484         for (int i = 0; i < 80; i++)
485         {
486             s1.AppendFormat(_T("%02X "), buf2[i]);
487             s2.AppendFormat(_T("%02X"), buf2[4 - i - 1]);
488             //    s3.AppendFormat(_T("%c"), buf2[12 - i - 1]);
489         }
490     }
491     SysLog(s1);
492 //    SetDlgItemText(IDC_EDIT_ORG_FACT_SN, s2);
493
494 //    unsigned char buf3[1024];
495     CTime ctime1;
496     for (int i = 0; i < nFactoryDataItemsCount; i++)
497     {
498 //        int nType = FactoryDataItems[i].nType;
499 //        int nSize = FactoryDataItems[i].nSize;
500 //        int nOffset = FactoryDataItems[i].nOffset;
501         CString sName = FactoryDataItems[i].sName;
502         s3 = GetDataStrByName(buf2,sName);
503         s1.Format(_T("%d %s %s"), i, sName, s3);
504         SysLog(s1);
505     }
506
507     s3=GetDataStrByName(buf2, _T("nLotNo"));
508     SetDlgItemText(IDC_EDIT_ORG_LOT_NO, s3);
509
510     s3 = GetDataStrByName(buf2, _T("nProductDate"));
511     SetDlgItemText(IDC_EDIT_ORG_FAC_DATE, s3);
512
513
514     return 0;
515 }
516
517
518
519 int CDialogFactCfg::WriteData()
520 {
521     // TODO: 在此处添加实现代码.
522
523     CString s1;
524     CMTerm2Doc* pDoc = (CMTerm2Doc *)GetDocument();
525     unsigned short buf1[1024];
526 //    unsigned char buf2[1024];
527 //    unsigned char buf3[1024];
528 /*
529     AddDataItem(0, 2, typeBIN, _T("开始标志"));
530     AddDataItem(2, 2, typeINT, _T("序号"));
531     AddDataItem(4, 2, typeBIN, _T("ModelNo"));
532     AddDataItem(6, 2, typeBIN, _T("ModelVer"));
533     AddDataItem(8, 4, typeUINT, _T("nLotNo"));
534     AddDataItem(12, 4, typeDATETIME, _T("nProductDate"));
535     AddDataItem(16, 4, typeBIN, _T("nSN1"));
536     AddDataItem(20, 4, typeBIN, _T("nProtocalVer"));
537     AddDataItem(24, 4, typeBIN, _T("nDefaultFuncr"));
538     AddDataItem(28, 16, typeString, _T("sModelStr"));
539     AddDataItem(44, 16, typeString, _T("sLot_No"));
540     AddDataItem(60, 16, typeString, _T("sSNStr"));
541     AddDataItem(76, 2, typeBIN, _T("CRC1"));
542     AddDataItem(78, 2, typeBIN, _T("EndSign"));
543 */
544     UINT uValue;
545
546     SetDataByName(buf1, _T("开始标志"), 0x55AA);
547     SetDataByName(buf1, _T("序号"), 0x0002);
548     SetDataByName(buf1, _T("ModelNo"), 0x0008);
549     SetDataByName(buf1, _T("ModelVer"), 0x0100);
550     GetDlgItemText(IDC_EDIT_LOT_NO, s1);    uValue = _tstoi(s1);
551     SetDataByName(buf1, _T("nLotNo"), uValue);
552     SetDataByName(buf1, _T("nProductDate"), 0x2996c000);
553
554     GetDlgItemText(IDC_EDIT_FACT_SN, s1);      uValue = _tstoi(s1);
555     SetDataByName(buf1, _T("nSN1"), uValue);
556     SetDataByName(buf1, _T("nProtocalVer"), 0x01000100);
557     SetDataByName(buf1, _T("nDefaultFuncr"), 0x00000001);
558     SetDataByName(buf1, _T("sModelStr"), _T("12122121"));
559     SetDataByName(buf1, _T("sLot_No"), _T("34344343"));
560     SetDataByName(buf1, _T("sSNStr"), _T("56566565"));
561     SetDataByName(buf1, _T("CRC1"), 0xEFEF);
562     SetDataByName(buf1, _T("EndSign"), 0x55AA);
563
564
565     int res = pDoc->MyKLink1.WriteFactoryData(1, 0, 0, 80, buf1);
566     SysLog(pDoc->MyKLink1.m_resultStr);
567     s1.Format(_T("WriteFactoryData = %d "), res);
568
569     return 0;
570 }
571
572 void CDialogFactCfg::OnBnClickedButtonReaddata()
573 {
574     // TODO: 在此添加控件通知处理程序代码
575     ReadData();
576 }
577
578 void CDialogFactCfg::OnBnClickedButtonConn()
579 {
580     // TODO: 在此添加控件通知处理程序代码
581     Connect();
582
583 }
584
585
586 void CDialogFactCfg::OnBnClickedButtonDisconn()
587 {
588     // TODO: 在此添加控件通知处理程序代码
589     Disconnect();
590
591 }
592
593
594
595
596 void CDialogFactCfg::OnBnClickedButtonWritedata()
597 {
598     // TODO: 在此添加控件通知处理程序代码
599     WriteData();
600
601 }
602