QuakeGod
2024-12-24 61deef5cdf96cbfdd6ad45be49e80d597c00ca65
提交 | 用户 | age
61deef 1 
Q 2 // ConfigToolView.cpp: CConfigToolView 类的实现
3 //
4
5 #include "pch.h"
6 #include "framework.h"
7 // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
8 // ATL 项目中进行定义,并允许与该项目共享文档代码。
9 #ifndef SHARED_HANDLERS
10 //#include "ConfigTool.h"
11 #include "MTerm1.h"
12 #endif
13
14 //#include "ConfigToolDoc.h"
15 #include "ConfigToolView.h"
16 #include "../MyLib/Functions.hpp"
17
18 extern MHash DeviceList;
19
20 #ifdef _DEBUG
21 #define new DEBUG_NEW
22 #endif
23 /*
24 CConfigToolDoc::stCtrls myCtrls[] =
25 {
26     25001,CConfigToolDoc::typeText,_T("文本输入框1"),_T("默认文本1"),_T("DT200"),
27     25002,CConfigToolDoc::typeText,_T("文本输入框2"),_T("默认文本2"),_T("DT202"),
28     25003,CConfigToolDoc::typeInt,_T("整数输入框1"),_T("123"),_T("默认地址"),
29     25004,CConfigToolDoc::typeInt,_T("整数输入框2"),_T("4562"),_T("默认地址"),
30     25005,CConfigToolDoc::typeFloat,_T("浮点输入框1"),_T("123.6"),_T("默认地址"),
31     25006,CConfigToolDoc::typeFloat,_T("浮点输入框2"),_T("234.5"),_T("默认地址"),
32     25007,CConfigToolDoc::typeSelect,_T("选择框1"),_T("选择1|选项2|选项3|选项4|选项5"),_T("默认地址"),
33     25008,CConfigToolDoc::typeSelect,_T("选择甜点"),_T("苹果|西瓜|香蕉|沙拉|火龙果"),_T("默认地址"),
34     25009,CConfigToolDoc::typeCheck,_T("复选框1"),_T("默认选择1"),_T("默认地址"),
35     25010,CConfigToolDoc::typeCheck,_T("复选框2"),_T("默认选择2"),_T("默认地址"),
36     25011,CConfigToolDoc::typeButton,_T("按钮1"),_T("默认1"),_T("默认地址"),
37     25012,CConfigToolDoc::typeButton,_T("按钮2"),_T("默认2"),_T("默认地址"),
38     25013,CConfigToolDoc::typeButton,_T("按钮3"),_T("默认3"),_T("默认地址"),
39     25014,CConfigToolDoc::typeButton,_T("按钮4"),_T("默认4"),_T("默认地址"),
40     25015,CConfigToolDoc::typeButton,_T("按钮5"),_T("默认5"),_T("默认地址"),
41     25016,CConfigToolDoc::typeButton,_T("按钮6"),_T("默认6"),_T("默认地址"),
42     25017,CConfigToolDoc::typeButton,_T("按钮7"),_T("默认7"),_T("默认地址"),
43
44 };
45 */
46 CStatic * pCStatics[100] = { 0 };
47 CWnd * pCWnds[100] = { 0 };
48 /*
49 int nCtrls = sizeof(myCtrls) / sizeof(CConfigToolDoc::stCtrls);
50 */
51
52 CString& FormatHex(void* databuf, int nSize)
53 {
54     static CString str1;
55     unsigned char* ptr1 = (unsigned char*)databuf;
56     str1.Empty();
57
58     for (int i = 0; i < nSize && i < 256; i++)
59     {
60         //        if ((i & 0xf) == 0) str1.AppendFormat(_T("%02X  "), i);
61         str1.AppendFormat(_T("%02X "), ptr1[i]);
62         if (((i + 1) & 0xf) == 0) str1.Append(_T("\r\n"));
63     }
64     return str1;
65 }
66
67 // CConfigToolView
68
69 IMPLEMENT_DYNCREATE(CConfigToolView, CFormView)
70
71 BEGIN_MESSAGE_MAP(CConfigToolView, CFormView)
72     // 标准打印命令
73     ON_COMMAND(ID_FILE_PRINT, &CFormView::OnFilePrint)
74     ON_COMMAND(ID_FILE_PRINT_DIRECT, &CFormView::OnFilePrint)
75     ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CFormView::OnFilePrintPreview)
76     ON_WM_CLOSE()
77     ON_WM_DESTROY()
78     ON_BN_CLICKED(IDC_BUTTON_COMM_SET, &CConfigToolView::OnBnClickedButtonCommSet)
79     ON_BN_CLICKED(IDC_BUTTON_CONNECT, &CConfigToolView::OnBnClickedButtonConnect)
80     ON_BN_CLICKED(IDC_BUTTON_DISCONNECT, &CConfigToolView::OnBnClickedButtonDisconnect)
81     ON_BN_CLICKED(IDC_BUTTON_UPLOAD, &CConfigToolView::OnBnClickedButtonUpload)
82     ON_BN_CLICKED(IDC_BUTTON_DOWNLOAD, &CConfigToolView::OnBnClickedButtonDownload)
83     ON_BN_CLICKED(IDC_BUTTON_EVENTLOG, &CConfigToolView::OnBnClickedButtonEventlog)
84     ON_WM_MOUSEWHEEL()
85     ON_WM_TIMER()
86     ON_BN_CLICKED(IDC_BUTTON_WRITEDATA, &CConfigToolView::OnBnClickedButtonWritedata)
87     ON_BN_CLICKED(IDC_BUTTON_TIME_NOW, &CConfigToolView::OnBnClickedButtonTimeNow)
88     ON_BN_CLICKED(IDC_BUTTON_LOAD_SYSCFG_FILE, &CConfigToolView::OnBnClickedButtonLoadSyscfgFile)
89     ON_BN_CLICKED(IDC_BUTTON_SAVE_SYSCFG_FILE, &CConfigToolView::OnBnClickedButtonSaveSyscfgFile)
90 END_MESSAGE_MAP()
91
92 // CConfigToolView 构造/析构
93
94 CConfigToolView::CConfigToolView() noexcept
95     : CFormView(IDD_CONFIGTOOL_FORM)
96 {
97     // TODO: 在此处添加构造代码
98     psyscfg = (pstKMSysCfg)m_cfgdatabuf;
99
100 }
101
102 CConfigToolView::~CConfigToolView()
103 {
104 }
105
106 void CConfigToolView::DoDataExchange(CDataExchange* pDX)
107 {
108     CFormView::DoDataExchange(pDX);
109     DDX_Control(pDX, IDC_EDIT_LOG1, m_edit_log1);
110 }
111
112 BOOL CConfigToolView::PreCreateWindow(CREATESTRUCT& cs)
113 {
114     // TODO: 在此处通过修改
115     //  CREATESTRUCT cs 来修改窗口类或样式
116
117     return CFormView::PreCreateWindow(cs);
118 }
119 /*
120 int CConfigToolView::AddDlgItems()
121 {
122     for (int i = 0; i < nCtrls; i++)
123     {
124         if (pCStatics[i] != NULL) { delete pCStatics[i]; pCStatics[i] = NULL; }
125         if (pCWnds[i] != NULL) { delete pCWnds[i]; pCWnds[i] = NULL; }
126
127     }
128
129     int x0 = 20;
130     int y0 = 48;
131
132     int x1 = 220, x2 = 240, x3 = 480;
133
134     int height = 16;
135     int SpaceY = 24;
136     CString s1;
137     CRect rect1, rect2;
138     for (int i = 0; i < nCtrls; i++)
139     {
140         CString strs[100];
141         CStatic * p1;
142         CEdit * p2;
143         CComboBox * p3;
144         CButton * p5;
145         int n = 0;
146         rect1.left = x0, rect1.right = x1;
147         rect1.top = y0 + i * SpaceY;
148         rect1.bottom = rect1.top + height;
149
150         rect2.left = x2, rect2.right = x3;
151         rect2.top = y0 + i * SpaceY;
152         rect2.bottom = rect1.top + height;
153
154         int k = myCtrls[i].nType;
155         int j;
156         float f;
157         switch (k)
158         {
159         case CConfigToolDoc::typeNone:
160             break;
161         case CConfigToolDoc::typeText:
162             p1 = new CStatic();
163             //            p1->SetWindowText(myCtrls[i].sName);
164             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
165             p1->ShowWindow(SW_SHOW);
166             pCStatics[i] = p1;
167
168             p2 = new CEdit;
169             p2->Create(ES_LEFT, rect2, this, myCtrls[i].nUID);
170             p2->ShowWindow(SW_SHOW);
171             p2->SetWindowText(myCtrls[i].Value);
172
173             pCWnds[i] = p2;
174
175             break;
176         case CConfigToolDoc::typeInt:
177             p1 = new CStatic();
178             //            p1->SetWindowText(myCtrls[i].sName);
179             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
180             p1->ShowWindow(SW_SHOW);
181             pCStatics[i] = p1;
182
183             p2 = new CEdit;
184             p2->Create(ES_LEFT, rect2, this, myCtrls[i].nUID);
185             p2->ShowWindow(SW_SHOW);
186             j = _tstoi(myCtrls[i].Value);
187             s1.Format(_T("%d"), j);
188             p2->SetWindowText(s1);
189
190             pCWnds[i] = p2;
191             break;
192         case CConfigToolDoc::typeFloat:
193             p1 = new CStatic();
194             //            p1->SetWindowText(myCtrls[i].sName);
195             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
196             p1->ShowWindow(SW_SHOW);
197             pCStatics[i] = p1;
198
199             p2 = new CEdit;
200             p2->Create(ES_LEFT, rect2, this, myCtrls[i].nUID);
201             p2->ShowWindow(SW_SHOW);
202             f = float(_tstof(myCtrls[i].Value));
203             s1.Format(_T("%.3f"), f);
204             p2->SetWindowText(s1);
205             pCWnds[i] = p2;
206             break;
207         case CConfigToolDoc::typeSelect:
208             p1 = new CStatic();
209             //            p1->SetWindowText(myCtrls[i].sName);
210             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
211             p1->ShowWindow(SW_SHOW);
212             pCStatics[i] = p1;
213
214             p3 = new CComboBox;
215             p3->Create(CBS_DROPDOWN, rect2, this, myCtrls[i].nUID);
216             p3->ShowWindow(SW_SHOW);
217             s1 = myCtrls[i].Value;
218             n = Split(s1, _T("|"), strs);
219             for (int m = 0; m < n; m++)
220             {
221                 p3->AddString(strs[m]);
222             }
223             p3->SetCurSel(0);
224             //            p3->SetWindowText(myCtrls[i].Value);
225             pCWnds[i] = p3;
226             break;
227         case CConfigToolDoc::typeCheck:
228             p1 = new CStatic();
229             //            p1->SetWindowText(myCtrls[i].sName);
230             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
231             p1->ShowWindow(SW_SHOW);
232             pCStatics[i] = p1;
233
234             p5 = new CButton;
235             p5->Create(myCtrls[i].sName, BS_CHECKBOX | BS_AUTOCHECKBOX, rect2, this, myCtrls[i].nUID);
236             p5->ShowWindow(SW_SHOW);
237             pCWnds[i] = p5;
238             break;
239         case CConfigToolDoc::typeButton:
240             p1 = new CStatic();
241             //            p1->SetWindowText(myCtrls[i].sName);
242             p1->Create(myCtrls[i].sName, SS_LEFT, rect1, this);
243             p1->ShowWindow(SW_SHOW);
244             pCStatics[i] = p1;
245
246             p5 = new CButton;
247             p5->Create(myCtrls[i].sName, BS_PUSHBUTTON, rect2, this, myCtrls[i].nUID);
248             p5->ShowWindow(SW_SHOW);
249             pCWnds[i] = p5;
250             break;
251
252         default:
253             break;
254         }
255     }
256     return 0;
257 }
258 */
259 void CConfigToolView::OnInitialUpdate()
260 {
261     CFormView::OnInitialUpdate();
262     GetParentFrame()->RecalcLayout();
263     ResizeParentToFit();
264
265     CString VersionStr = _T("V1.02");
266     CString BuildStr = _T("20210728");
267
268     // TODO: 在此添加专用代码和/或调用基类
269 /*
270     myLogger1.SetLogPathName(_T("D:\\Logs\\ConfigTool"), _T("ConfigTool"));
271     myLogger1.AttachWnd(m_edit_log1.m_hWnd);
272     myLogger1.bShowLog[0] = 1;
273     myLogger1.bShowThreadId = 0;
274     myLogger1.bShowChannel = 0;
275     myLogger1.bSaveLog[0] = 1;
276     myLogger1.bShowDate = 1;
277     SysLog(_T(" Start ") + VersionStr + _T(" ") + BuildStr + _T("\r\n"));
278     myLogger1.bShowDate = 0;
279     //    myLogger1.bShowLineCount=0;
280     //    myLogger1.bShowTime=0;
281     myLogger1.UpdateLogDisplay();
282 */
283
284
285 //    AddDlgItems();
286
287     GetDlgItem(IDC_STATIC_PROP)->GetClientRect(&rect1);
288     m_nFrameheight = rect1.bottom - rect1.top;
289     GetDlgItem(IDC_STATIC_PROP)->ClientToScreen(&rect1);
290     this->ScreenToClient(&rect1);
291
292
293     m_propsyscfg1.Create( IDD_PROP_SYSREG2, this);
294     m_propsyscfg1.EnableWindow(true);
295     m_propsyscfg1.GetClientRect(&rect0);
296     m_nPropHeight = rect0.bottom - rect0.top;
297     m_propsyscfg1.ShowWindow(SW_SHOW);
298     m_propsyscfg1.MoveWindow(&rect1, true);
299
300     int nNewPos = m_nScrollPos;
301     int Scrolldel = nNewPos - m_nScrollPos;
302     m_propsyscfg1.ScrollWindow(0, Scrolldel);
303     m_nScrollPos += Scrolldel;
304
305     m_propsyscfg1.psyscfg = (pstKMSysCfg)m_cfgdatabuf;
306
307     m_propsyscfg1.m_nFrameheight = m_nFrameheight;
308     m_propsyscfg1.UpdateScrollInfo();
309
310     SCROLLINFO si;
311     si.cbSize = sizeof(SCROLLINFO);
312     si.fMask = SIF_ALL;
313     si.nMin = 0;
314     si.nMax = m_nPropHeight;//你滑动画面的高度
315     si.nPage = m_nFrameheight;  //这个是你显示画面的高度
316     si.nPos = 0;//这个是滑块的位置  初始化的时候是0 以后会根据你的操作变动
317 //    GetDlgItem(IDC_STATIC_PROP)->SetScrollInfo(SB_VERT, &si);
318 //    m_propsyscfg1.SetScrollInfo(SB_VERT, &si);
319
320 //    m_prop_scrollbar1.SetScrollInfo(&si, true);
321
322     SetTimer(0, 10, NULL);
323     SetTimer(1, 100, NULL);
324     SetTimer(2, 500, NULL);
325
326 }
327
328
329 // CConfigToolView 打印
330
331 BOOL CConfigToolView::OnPreparePrinting(CPrintInfo* pInfo)
332 {
333     // 默认准备
334     return DoPreparePrinting(pInfo);
335 }
336
337 void CConfigToolView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
338 {
339     // TODO: 添加额外的打印前进行的初始化过程
340 }
341
342 void CConfigToolView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
343 {
344     // TODO: 添加打印后进行的清理过程
345 }
346
347 void CConfigToolView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
348 {
349     // TODO: 在此处添加自定义打印代码
350 }
351
352
353 // CConfigToolView 诊断
354
355 #ifdef _DEBUG
356 void CConfigToolView::AssertValid() const
357 {
358     CFormView::AssertValid();
359 }
360
361 void CConfigToolView::Dump(CDumpContext& dc) const
362 {
363     CFormView::Dump(dc);
364 }
365
366 CConfigToolDoc* CConfigToolView::GetDocument() const // 非调试版本是内联的
367 {
368     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CConfigToolDoc)));
369     return (CConfigToolDoc*)m_pDocument;
370 }
371 #endif //_DEBUG
372
373
374 // CConfigToolView 消息处理程序
375
376 void CConfigToolView::OnClose()
377 {
378     // TODO: 在此添加消息处理程序代码和/或调用默认值
379     CFormView::OnClose();
380 }
381
382 void CConfigToolView::OnDestroy()
383 {
384     CFormView::OnDestroy();
385 /*
386     for (int i = 0; i < nCtrls; i++)
387     {
388         if (pCStatics[i] != NULL) { delete pCStatics[i]; pCStatics[i] = NULL; }
389         if (pCWnds[i] != NULL) { delete pCWnds[i]; pCWnds[i] = NULL; }
390
391     }
392 */ 
393     // TODO: 在此处添加消息处理程序代码
394 }
395
396 BOOL CConfigToolView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
397 {
398     // TODO: 在此添加消息处理程序代码和/或调用默认值
399     CPoint pt1 = pt;
400     ScreenToClient(&pt1);
401     if (PtInRect(rect1, pt1))
402     {
403         int nNewPos = m_nScrollPos;
404         m_propsyscfg1.VScrollBy(-zDelta);
405         if (zDelta < 0)
406         {
407             if (-m_nScrollPos < m_nPropHeight - m_nFrameheight - 30)
408                 nNewPos = m_nScrollPos - 30;
409             else
410                 nNewPos = -(m_nPropHeight - m_nFrameheight);
411         }
412         else if (zDelta > 0)
413         {
414             if (-m_nScrollPos > 30)
415                 nNewPos = m_nScrollPos + 30;
416             else
417                 nNewPos = 0;
418         }
419         else
420         {
421         }
422         int Scrolldel = nNewPos - m_nScrollPos;
423         //m_propsyscfg1.ScrollWindow(0, Scrolldel);
424         m_nScrollPos += Scrolldel;
425         return true;
426     }
427     //    m_prop_scrollbar1.SetScrollPos(-m_nScrollPos);
428     return CFormView::OnMouseWheel(nFlags, zDelta, pt);
429 }
430
431 void CConfigToolView::OnTimer(UINT_PTR nIDEvent)
432 {
433     // TODO: 在此添加消息处理程序代码和/或调用默认值
434     if (nIDEvent == 0)
435     {
436         KillTimer(0);
437         DelayInit();
438     }
439     else if (nIDEvent == 1)
440     {
441 //        myLogger1.UpdateLogDisplay();
442     }
443     else if (nIDEvent == 2)
444     {
445         TestAutoConnect();
446     }
447
448     CFormView::OnTimer(nIDEvent);
449 }
450
451 int CConfigToolView::DelayInit()
452 {
453     // TODO: 在此处添加实现代码.
454     return 0;
455 }
456
457 int CConfigToolView::TestAutoConnect()
458 {
459     // TODO: 在此处添加实现代码.
460     int res;
461     unsigned short nCount;
462     bool bNewConnected = false;
463     if (m_bOpened)
464     {
465         res = theApp.MyKLink1.GetInfo(1, &nCount, m_InfoBlockbuf);
466         if (res == KLink1::KL_OK)
467         {
468             bNewConnected = true;
469             if (m_bConnected == false)
470             {
471                 // new connected one.
472                 ShowInfoBlockParams();
473                 m_bConnected = true;
474             }
475         }
476         else
477         {
478             m_bConnected = false;
479             ClearInfoBlockParams();
480         }
481     }
482     return 0;
483 }
484
485
486 int CConfigToolView::ClearInfoBlockParams()
487 {
488     // TODO: 在此处添加实现代码.
489     CString s1;
490     s1.Empty();
491     SetDlgItemText(IDC_EDIT_DEVICE_TYPE, s1);
492     SetDlgItemText(IDC_EDIT_DEVICE_NAME, s1);
493     SetDlgItemText(IDC_EDIT_FIRM_VER, s1);
494     SetDlgItemText(IDC_EDIT_KLINK_VER, s1);
495     SetDlgItemText(IDC_EDIT_KBUS_VER, s1);
496     SetDlgItemText(IDC_EDIT_KNET_VER, s1);
497     SetDlgItemText(IDC_EDIT_KWL_VER, s1);
498     SetDlgItemText(IDC_EDIT_FUNCTIONS, s1);
499
500     SetDlgItemText(IDC_EDIT_CAP_PROG, s1);
501     SetDlgItemText(IDC_EDIT_CAP_DT, s1);
502
503     SetDlgItemText(IDC_EDIT_CAP_WR, s1);
504     SetDlgItemText(IDC_EDIT_CAP_TM, s1);
505     SetDlgItemText(IDC_EDIT_CAP_SW, s1);
506     SetDlgItemText(IDC_EDIT_CAP_COM, s1);
507     SetDlgItemText(IDC_EDIT_CAP_CFG, s1);
508     SetDlgItemText(IDC_EDIT_CAP_EVENT, s1);
509
510     SetDlgItemText(IDC_EDIT_CAP_DIN, s1);
511     SetDlgItemText(IDC_EDIT_CAP_DOUT, s1);
512     SetDlgItemText(IDC_EDIT_CAP_AIN_I, s1);
513     SetDlgItemText(IDC_EDIT_CAP_AOUT_I, s1);
514     SetDlgItemText(IDC_EDIT_CAP_AIN_E, s1);
515     SetDlgItemText(IDC_EDIT_CAP_AOUT_E, s1);
516     SetDlgItemText(IDC_EDIT_CAP_HIN, s1);
517     SetDlgItemText(IDC_EDIT_CAP_HOUT, s1);
518     SetDlgItemText(IDC_EDIT_CAP_IRQ_I, s1);
519     SetDlgItemText(IDC_EDIT_CAP_IRQ_O, s1);
520     SetDlgItemText(IDC_EDIT_CAP_EXT_I, s1);
521     SetDlgItemText(IDC_EDIT_CAP_EXT_O, s1);
522
523     SetDlgItemText(IDC_EDIT_DEVICE_UID, s1);
524
525     return 0;
526 }
527
528
529 CString CConfigToolView::GetDeviceNameStr(int DeviceTypeVer)
530 {
531     // TODO: 在此处添加实现代码.
532     static CString DeviceName;
533     DeviceName.Empty();
534     CString s1,s2;
535     UCHAR DeviceType, DeviceVer;
536     DeviceType = (DeviceTypeVer>>8)&0xff;
537     DeviceVer = DeviceTypeVer & 0xff;
538     s1.Format(_T("%02X"), DeviceType);
539
540     if (DeviceList["FAMILY"].Exist(s1))
541     {
542         DeviceName = DeviceList["FAMiLY"][s1];
543         s2.Format(_T("%02X"), DeviceVer);
544         Hash h1 = DeviceList[s1];
545         if (DeviceList[s1].Exist(s2))
546         {
547             DeviceName.Append(_T(", "));
548             DeviceName.Append (DeviceList[s1][s2]);
549         }
550         else
551         {
552             DeviceName.Append(_T(", "));
553             DeviceName.AppendFormat(_T("Version %02X"),DeviceVer);
554         }
555     }
556     else { DeviceName.Format(_T("Device %02X, Version %02X"),DeviceType,DeviceVer); }
557
558     return DeviceName;
559 }
560
561 int CConfigToolView::ShowInfoBlockParams()
562 {
563     // TODO: 在此处添加实现代码.
564     CString s1;
565
566     pInfoBlock = (pKMInfoBlock)m_InfoBlockbuf;
567     s1.Format(_T("%04X"), pInfoBlock->nDeviceTypeVer);
568     SetDlgItemText(IDC_EDIT_DEVICE_TYPE, s1);
569
570     s1 = GetDeviceNameStr(pInfoBlock->nDeviceTypeVer);
571     SetDlgItemText(IDC_EDIT_DEVICE_NAME, s1);
572
573     s1.Format(_T("%04X"), pInfoBlock->nProgVer);
574     SetDlgItemText(IDC_EDIT_FIRM_VER, s1);
575     s1.Format(_T("%04X"), pInfoBlock->nKLinkVer);
576     SetDlgItemText(IDC_EDIT_KLINK_VER, s1);
577     s1.Format(_T("%04X"), pInfoBlock->nKBusVer);
578     SetDlgItemText(IDC_EDIT_KBUS_VER, s1);
579     s1.Format(_T("%04X"), 0);
580     s1.Empty();
581     SetDlgItemText(IDC_EDIT_KNET_VER, s1);
582     //s1.Format(_T("%04X"), 0);
583     SetDlgItemText(IDC_EDIT_KWL_VER, s1);
584     s1.Format(_T("%04X"), pInfoBlock->nAbility);
585     SetDlgItemText(IDC_EDIT_FUNCTIONS, s1);
586
587     s1.Format(_T("%d"), pInfoBlock->nCapacity1);
588     SetDlgItemText(IDC_EDIT_CAP_PROG, s1);
589     s1.Format(_T("%d"), pInfoBlock->nCapacity2);
590     SetDlgItemText(IDC_EDIT_CAP_DT, s1);
591
592     SetDlgItemText(IDC_EDIT_CAP_WR, s1);
593     SetDlgItemText(IDC_EDIT_CAP_TM, s1);
594     s1.Format(_T("%d"), pInfoBlock->nSwitchBits);
595     SetDlgItemText(IDC_EDIT_CAP_SW, s1);
596     s1.Format(_T("%d"), pInfoBlock->nPorts);
597     SetDlgItemText(IDC_EDIT_CAP_COM, s1);
598     s1.Format(_T("%d"), pInfoBlock->nManSize);
599     SetDlgItemText(IDC_EDIT_CAP_CFG, s1);
600     s1.Format(_T("%d"), pInfoBlock->nLogSize);
601     SetDlgItemText(IDC_EDIT_CAP_EVENT, s1);
602
603     s1.Format(_T("%d"), pInfoBlock->nDInput);
604     SetDlgItemText(IDC_EDIT_CAP_DIN, s1);
605     s1.Format(_T("%d"), pInfoBlock->nDInput);
606     SetDlgItemText(IDC_EDIT_CAP_DOUT, s1);
607     s1.Format(_T("%d"), pInfoBlock->nAInput);
608     SetDlgItemText(IDC_EDIT_CAP_AIN_I, s1);
609     s1.Format(_T("%d"), pInfoBlock->nAOutput);
610     SetDlgItemText(IDC_EDIT_CAP_AOUT_I, s1);
611     s1.Format(_T("%d"), pInfoBlock->nAInput);
612     SetDlgItemText(IDC_EDIT_CAP_AIN_E, s1);
613     s1.Format(_T("%d"), pInfoBlock->nAOutput);
614     SetDlgItemText(IDC_EDIT_CAP_AOUT_E, s1);
615     s1.Format(_T("%d"), pInfoBlock->nHInput);
616     SetDlgItemText(IDC_EDIT_CAP_HIN, s1);
617     s1.Format(_T("%d"), pInfoBlock->nHOutput);
618     SetDlgItemText(IDC_EDIT_CAP_HOUT, s1);
619     s1.Empty();
620     SetDlgItemText(IDC_EDIT_CAP_IRQ_I, s1);
621     SetDlgItemText(IDC_EDIT_CAP_IRQ_O, s1);
622     SetDlgItemText(IDC_EDIT_CAP_EXT_I, s1);
623     SetDlgItemText(IDC_EDIT_CAP_EXT_O, s1);
624
625     unsigned short len1;
626     int res = theApp.MyKLink1.GetUID(1, &len1, (unsigned short *)uuidbuf);
627 //    SysLog(GetDocument()->MyKlink.m_resultStr);
628     s1.Format(_T("GetUID = %d %d bytes"), res, len1);
629     //    SysLog(s1);
630     CString s2;
631     if (res == KLink1::KL_OK)
632     {
633         s1.Append(_T("\r\n"));
634         for (int i = 0; i < 12; i++)
635         {
636             s1.AppendFormat(_T("%02X "), uuidbuf[i]);
637             s2.AppendFormat(_T("%02X"), uuidbuf[12 - i - 1]);
638             //    s3.AppendFormat(_T("%c"), buf2[12 - i - 1]);
639         }
640     }
641 //    SysLog(s1);
642     struuid = s2;
643     SetDlgItemText(IDC_EDIT_DEVICE_UID, struuid);
644
645     return 0;
646 }
647
648
649 int CConfigToolView::ShowFactoryDataParams()
650 {
651     // TODO: 在此处添加实现代码.
652     pfactorydata = (stFactoryData *)m_factorydataBuf;
653
654     return 0;
655 }
656
657
658 int CConfigToolView::ShowParams()
659 {
660     // TODO: 在此处添加实现代码.
661     ShowInfoBlockParams();
662     ShowFactoryDataParams();
663     m_propsyscfg1.ShowParams();
664     return 0;
665 }
666
667 int CConfigToolView::GetFactoryDataParams()
668 {
669     // TODO: 在此处添加实现代码.
670     m_propsyscfg1.GetParams();
671
672     return 0;
673 }
674
675 int CConfigToolView::GetParams()
676 {
677     // TODO: 在此处添加实现代码.
678
679     return 0;
680 }
681
682 void CConfigToolView::OnBnClickedButtonCommSet()
683 {
684     // TODO: 在此添加控件通知处理程序代码
685     CString s1;
686     
687     int res = theApp.MyKLink1.SetCommParam();
688     s1.Format(_T("Com Set = %d  COM%d %d %s"),res, theApp.MyKLink1.m_nPort, theApp.MyKLink1.m_nBaudRate, theApp.MyKLink1.m_Settings);
689     SysLog(s1);
690 }
691
692 void CConfigToolView::OnBnClickedButtonConnect()
693 {
694     // TODO: 在此添加控件通知处理程序代码
695     int res = theApp.MyKLink1.Connect();
696     CString s1;
697     s1.Format(_T("connect = %d %s"), res, theApp.MyKLink1.m_resultStr);
698     SysLog(s1);
699     if (res == KLink1::KL_OK) m_bOpened = true;
700     else { return; }
701
702     unsigned short nCount;
703     res = theApp.MyKLink1.GetInfo(1, &nCount, m_InfoBlockbuf);
704     pInfoBlock = (pKMInfoBlock)m_InfoBlockbuf;
705     s1.Format(_T("read InfoBlock = %d  %d bytes \r\n"), res, nCount);
706 //    s1 += FormatHex(m_InfoBlockbuf, nCount);
707     SysLog(s1);
708     if (res == KLink1::KL_OK)
709     {
710         ShowInfoBlockParams();
711     }
712     unsigned char DCount = 120;
713     res = theApp.MyKLink1.ReadFactoryData(1, 0, DCount, &nCount, m_factorydataBuf);
714     pfactorydata = (stFactoryData *)m_factorydataBuf;
715     s1.Format(_T("read FactoryData = %d  %d bytes \r\n"), res, nCount);
716 //    s1 += FormatHex(m_factorydataBuf, nCount);
717     SysLog(s1);
718
719     res = theApp.MyKLink1.ReadSysCfgData(1, 0, 0, DCount, &nCount, m_cfgdatabuf);
720     psyscfg = (pstKMSysCfg)m_cfgdatabuf;
721     s1.Format(_T("read SysCfgData = %d  %d bytes \r\n"), res, nCount);
722 //    s1 += FormatHex(m_cfgdatabuf, nCount);
723     SysLog(s1);
724
725 }
726
727 void CConfigToolView::OnBnClickedButtonDisconnect()
728 {
729     // TODO: 在此添加控件通知处理程序代码
730     CString s1;
731     int res = theApp.MyKLink1.Close();
732     m_bOpened = false;
733     s1.Format(_T("Close = %d "), res);
734     SysLog(s1);
735 }
736
737 void CConfigToolView::OnBnClickedButtonUpload()
738 {
739     // TODO: 在此添加控件通知处理程序代码
740 //    unsigned short values[100];
741     int res;
742     CString s1;
743     unsigned short nCount;
744     
745     res = theApp.MyKLink1.GetInfo(1, &nCount, m_InfoBlockbuf);
746     pInfoBlock = (pKMInfoBlock)m_InfoBlockbuf;
747     s1.Format(_T("read InfoBlock = %d  %d bytes \r\n"), res, nCount);
748     s1 += FormatHex(m_InfoBlockbuf, nCount);
749     SysLog(s1);
750     unsigned char DCount = 120;
751     res = theApp.MyKLink1.ReadFactoryData(1, 0, DCount, &nCount, m_factorydataBuf);
752     pfactorydata = (stFactoryData *)m_factorydataBuf;
753     s1.Format(_T("read FactoryData = %d  %d bytes \r\n"), res, nCount);
754     s1 += FormatHex(m_factorydataBuf, nCount);
755     SysLog(s1);
756
757     res = theApp.MyKLink1.ReadSysCfgData(1, 0,0, DCount, &nCount, m_cfgdatabuf);
758     psyscfg = (pstKMSysCfg)m_cfgdatabuf;
759     s1.Format(_T("read SysCfgData = %d  %d bytes \r\n"), res, nCount);
760     s1 += FormatHex(m_cfgdatabuf, nCount);
761     SysLog(s1);
762
763     if (res == KLink1::KL_OK)
764     {
765         ShowParams();
766     }
767
768 //    m_propsyscfg1.ShowParams();
769 }
770
771 void CConfigToolView::OnBnClickedButtonDownload()
772 {
773     int res;
774     CString s1;
775     unsigned char DCount = 120;
776     unsigned short nCount=0;
777     m_propsyscfg1.GetParams();
778
779     res = theApp.MyKLink1.WriteSysCfgData(1, 0, 0, DCount, m_cfgdatabuf);
780 //    m_propsyscfg1.psyscfg = (pKMSysCfg)m_cfgdatabuf;
781     s1.Format(_T("Download = %d  %d bytes"), res, DCount);
782     SysLog(s1);
783     if (res != KLink1::KL_OK)
784     {
785         s1.Format(_T("下载失败 "));
786         s1 += theApp.MyKLink1.m_resultStr;
787         s1 += theApp.MyKLink1.GetErrDescStr(res);
788         SysLog(s1);
789     }
790
791     // TODO: 在此添加控件通知处理程序代码
792 }
793
794 void CConfigToolView::OnBnClickedButtonEventlog()
795 {
796     // TODO: 在此添加控件通知处理程序代码
797 }
798
799
800 void CConfigToolView::OnBnClickedButtonWritedata()
801 {
802     // TODO: 在此添加控件通知处理程序代码
803 }
804
805
806
807
808 void CConfigToolView::OnBnClickedButtonTimeNow()
809 {
810     // TODO: 在此添加控件通知处理程序代码
811 }
812
813
814 void CConfigToolView::OnBnClickedButtonLoadSyscfgFile()
815 {
816     // TODO: 在此添加控件通知处理程序代码
817     CString s1;
818     CString strFilePath1;
819     MHash syscfg1;
820     CFileDialog dlg1(true,_T("*.cfg"),NULL,NULL,_T("配置文件(*.cfg)|*.cfg|所有文件 (*.*)|*.*||"),this);
821     INT_PTR r= dlg1.DoModal();
822     if (r == IDOK)
823     {
824         strFilePath1 = dlg1.GetPathName();
825         int res = syscfg1.LoadFromFile(strFilePath1);
826         s1.Format(_T("Load from file %s = %d "), strFilePath1, res);
827         SysLog(s1);
828         psyscfg->Version = int(syscfg1["SYSTEM"]["Version"]);
829         psyscfg->workmode = int(syscfg1["SYSTEM"]["WorkMode"]);
830         psyscfg->SwitchFunc = _tstoi(syscfg1["SYSTEM"]["SwitchFunc"]);
831         psyscfg->nCfgBlockCount = 0;
832
833         psyscfg->PortParams[0].WorkMode = int(syscfg1["Port_1"]["WorkMode"]);
834         psyscfg->PortParams[0].Station = int(syscfg1["Port_1"]["Station"]);
835         psyscfg->PortParams[0].BaudRate = int(syscfg1["Port_1"]["BaudRate"]);
836         psyscfg->PortParams[0].ByteSize = int(syscfg1["Port_1"]["ByteSize"]);
837         psyscfg->PortParams[0].Parity = int(syscfg1["Port_1"]["Parity"]);
838         psyscfg->PortParams[0].StopBits = int(syscfg1["Port_1"]["StopBits"]);
839         psyscfg->PortParams[0].EndType = int(syscfg1["Port_1"]["EndType"]);
840         psyscfg->PortParams[0].EofChar = int(syscfg1["Port_1"]["EofChar"]);
841         psyscfg->PortParams[0].SofChar = int(syscfg1["Port_1"]["SofChar"]);
842         psyscfg->PortParams[0].EndTime = int(syscfg1["Port_1"]["EndTime"]);
843         psyscfg->PortParams[0].RecvAddr = int(syscfg1["Port_1"]["RecvAddr"]);
844         psyscfg->PortParams[0].RecvSize = int(syscfg1["Port_1"]["RecvSize"]);
845
846         psyscfg->PortParams[1].WorkMode = int(syscfg1["Port_2"]["WorkMode"]);
847         psyscfg->PortParams[1].Station = int(syscfg1["Port_2"]["Station"]);
848         psyscfg->PortParams[1].BaudRate = int(syscfg1["Port_2"]["BaudRate"]);
849         psyscfg->PortParams[1].ByteSize = int(syscfg1["Port_2"]["ByteSize"]);
850         psyscfg->PortParams[1].Parity = int(syscfg1["Port_2"]["Parity"]);
851         psyscfg->PortParams[1].StopBits = int(syscfg1["Port_2"]["StopBits"]);
852         psyscfg->PortParams[1].EndType = int(syscfg1["Port_2"]["EndType"]);
853         psyscfg->PortParams[1].EofChar = int(syscfg1["Port_2"]["EofChar"]);
854         psyscfg->PortParams[1].SofChar = int(syscfg1["Port_2"]["SofChar"]);
855         psyscfg->PortParams[1].EndTime = int(syscfg1["Port_2"]["EndTime"]);
856         psyscfg->PortParams[1].RecvAddr = int(syscfg1["Port_2"]["RecvAddr"]);
857         psyscfg->PortParams[1].RecvSize = int(syscfg1["Port_2"]["RecvSize"]);
858
859         psyscfg->OutMappings[0].value = int(syscfg1["OutMapping"]["Output_0"]);
860         psyscfg->OutMappings[1].value = int(syscfg1["OutMapping"]["Output_1"]);
861         psyscfg->OutMappings[2].value = int(syscfg1["OutMapping"]["Output_2"]);
862         psyscfg->OutMappings[3].value = int(syscfg1["OutMapping"]["Output_3"]);
863         psyscfg->OutMappings[4].value = int(syscfg1["OutMapping"]["Output_4"]);
864         psyscfg->OutMappings[5].value = int(syscfg1["OutMapping"]["Output_5"]);
865
866         m_propsyscfg1.ShowParams();
867
868     }
869
870
871 }
872
873
874 void CConfigToolView::OnBnClickedButtonSaveSyscfgFile()
875 {
876     // TODO: 在此添加控件通知处理程序代码
877     CString s1;
878     CString sFilePathName1;
879     MHash syscfg1;
880
881     m_propsyscfg1.GetParams();
882
883     syscfg1["SYSTEM"]["Version"] = psyscfg->Version;
884     syscfg1["SYSTEM"]["WorkMode"] = psyscfg->workmode;
885     syscfg1["SYSTEM"]["SwitchFunc"] = psyscfg->SwitchFunc;
886
887     syscfg1["Port_1"]["WorkMode"] = psyscfg->PortParams[0].WorkMode;
888     syscfg1["Port_1"]["Station"] = psyscfg->PortParams[0].Station;
889     syscfg1["Port_1"]["BaudRate"] = psyscfg->PortParams[0].BaudRate;
890     syscfg1["Port_1"]["ByteSize"] = psyscfg->PortParams[0].ByteSize;
891     syscfg1["Port_1"]["Parity"] = psyscfg->PortParams[0].Parity;
892     syscfg1["Port_1"]["StopBits"] = psyscfg->PortParams[0].StopBits;
893     syscfg1["Port_1"]["EndType"] = psyscfg->PortParams[0].EndType;
894     syscfg1["Port_1"]["EofChar"] = psyscfg->PortParams[0].EofChar;
895     syscfg1["Port_1"]["SofChar"] = psyscfg->PortParams[0].SofChar;
896     syscfg1["Port_1"]["EndTime"] = psyscfg->PortParams[0].EndTime;
897     syscfg1["Port_1"]["RecvAddr"] = psyscfg->PortParams[0].RecvAddr;
898     syscfg1["Port_1"]["RecvSize"] = psyscfg->PortParams[0].RecvSize;
899
900     syscfg1["Port_2"]["WorkMode"] = psyscfg->PortParams[1].WorkMode;
901     syscfg1["Port_2"]["Station"] = psyscfg->PortParams[1].Station;
902     syscfg1["Port_2"]["BaudRate"] = psyscfg->PortParams[1].BaudRate;
903     syscfg1["Port_2"]["ByteSize"] = psyscfg->PortParams[1].ByteSize;
904     syscfg1["Port_2"]["Parity"] = psyscfg->PortParams[1].Parity;
905     syscfg1["Port_2"]["StopBits"] = psyscfg->PortParams[1].StopBits;
906     syscfg1["Port_2"]["EndType"] = psyscfg->PortParams[1].EndType;
907     syscfg1["Port_2"]["EofChar"] = psyscfg->PortParams[1].EofChar;
908     syscfg1["Port_2"]["SofChar"] = psyscfg->PortParams[1].SofChar;
909     syscfg1["Port_2"]["EndTime"] = psyscfg->PortParams[1].EndTime;
910     syscfg1["Port_2"]["RecvAddr"] = psyscfg->PortParams[1].RecvAddr;
911     syscfg1["Port_2"]["RecvSize"] = psyscfg->PortParams[1].RecvSize;
912
913     syscfg1["SYSTEM"]["Version"] = psyscfg->Version;
914
915     syscfg1["OutMapping"]["Output_0"] = psyscfg->OutMappings[0].value;
916     syscfg1["OutMapping"]["Output_1"] = psyscfg->OutMappings[1].value;
917     syscfg1["OutMapping"]["Output_2"] = psyscfg->OutMappings[2].value;
918     syscfg1["OutMapping"]["Output_3"] = psyscfg->OutMappings[3].value;
919     syscfg1["OutMapping"]["Output_4"] = psyscfg->OutMappings[4].value;
920     syscfg1["OutMapping"]["Output_5"] = psyscfg->OutMappings[5].value;
921
922     CFileDialog dlg1(false, _T("*.cfg"),NULL, OFN_OVERWRITEPROMPT, _T("配置文件(*.cfg)|*.cfg|所有文件 (*.*)|*.*||"),this);
923     INT_PTR r = dlg1.DoModal();
924     if (r == IDOK)
925     {
926         int res = 0;
927         sFilePathName1 = dlg1.GetPathName();
928         s1.Format(_T("Save to File %s = %d "), sFilePathName1, res);
929         SysLog(s1);
930         syscfg1.SaveToFile(sFilePathName1);
931     }
932
933 }
934