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