Commit a6b8318180277d1beb297d9e1476d70008294514

Authored by xiemeng
1 parent a01030be

检测Rom boot消息, 自动下载

根据下载进度显示不同颜色
防止下载完成之后 自动重新下载
... ... @@ -50,11 +50,11 @@ DWORD WaitForThreads( DWORD );
50 50 COMMTIMEOUTS gTimeoutsDefault = { 0x01, 0, 0, 0, 0 };
51 51
52 52 #ifdef __OPTEK_EDIT__
53   -extern char szFileName[MAX_PATH];
  53 +//extern char szFileName[MAX_PATH];
54 54
55 55 void oem_init(void)
56 56 {
57   - memset(szFileName,0,sizeof(szFileName));
  57 + memset(TTYInfo.szFileName,0,sizeof(TTYInfo.szFileName));
58 58 }
59 59 #endif
60 60
... ... @@ -198,7 +198,9 @@ void InitNewFont(LOGFONT LogFont, COLORREF rgbColor)
198 198 LFTTYFONT(TTYInfo) = LogFont;
199 199 HTTYFONT(TTYInfo) = CreateFontIndirect(&(LFTTYFONT(TTYInfo)));
200 200 FGCOLOR(TTYInfo) = rgbColor;
201   -
  201 +#ifdef __TOPWELL_EDIT__
  202 + TTYInfo.rgbBGColor = RGB(255,255,255);
  203 +#endif
202 204 hDC = GetDC( ghwndMain ) ;
203 205 SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;
204 206 GetTextMetrics( hDC, &tm ) ;
... ... @@ -317,7 +319,10 @@ BOOL InitTTYInfo()
317 319 LFTTYFONT( TTYInfo ).lfClipPrecision = CLIP_DEFAULT_PRECIS ;
318 320 LFTTYFONT( TTYInfo ).lfQuality = DEFAULT_QUALITY ;
319 321 LFTTYFONT( TTYInfo ).lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
320   - strcpy( LFTTYFONT( TTYInfo ).lfFaceName, "FixedSys" ) ;
  322 +#ifdef __TOPWELL_EDIT__
  323 + TTYInfo.DownloadReday = FALSE;
  324 +#endif
  325 + strcpy( LFTTYFONT( TTYInfo ).lfFaceName, "FixedSys" ) ;
321 326
322 327 InitNewFont( LFTTYFONT(TTYInfo), RGB(0,0,0));
323 328
... ...
... ... @@ -47,7 +47,7 @@ BOOL VersionCheck();
47 47 BOOL PaintTTY( HWND );
48 48
49 49 #ifdef __OPTEK_EDIT__
50   -char szFileName[MAX_PATH];
  50 +//char szFileName[MAX_PATH];
51 51 #endif
52 52 /*-----------------------------------------------------------------------------
53 53
... ... @@ -390,7 +390,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
390 390 ofn.lStructSize = sizeof(OPENFILENAME);
391 391 ofn.hwndOwner = hwnd;
392 392 ofn.lpstrFilter = szFilter;
393   - ofn.lpstrFile = szFileName;
  393 + ofn.lpstrFile = TTYInfo.szFileName;
394 394 ofn.nMaxFile = MAX_PATH;
395 395 #ifdef __OPTEK_EDIT__
396 396 ofn.lpstrTitle = "Select file";
... ... @@ -403,10 +403,10 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
403 403 break;
404 404
405 405 #ifdef __OPTEK_EDIT__
406   - UpdateStatus(szFileName);
  406 + UpdateStatus(TTYInfo.szFileName);
407 407 #else
408 408 if (TRUE)
409   - TransferFileTextStart(szFileName);
  409 + TransferFileTextStart(TTYInfo.szFileName);
410 410 #endif
411 411 }
412 412 break;
... ... @@ -419,7 +419,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
419 419 ofn.lStructSize = sizeof(OPENFILENAME);
420 420 ofn.hwndOwner = hwnd;
421 421 ofn.lpstrFilter = szFilter;
422   - ofn.lpstrFile = szFileName;
  422 + ofn.lpstrFile = TTYInfo.szFileName;
423 423 ofn.nMaxFile = MAX_PATH;
424 424 ofn.lpstrTitle = "Receive File";
425 425 ofn.Flags = OFN_OVERWRITEPROMPT;
... ... @@ -427,7 +427,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
427 427 if (!GetSaveFileName(&ofn))
428 428 break;
429 429
430   - ReceiveFileText(szFileName);
  430 + ReceiveFileText(TTYInfo.szFileName);
431 431 }
432 432 break;
433 433
... ... @@ -458,7 +458,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
458 458 ofn.lStructSize = sizeof(OPENFILENAME);
459 459 ofn.hwndOwner = hwnd;
460 460 ofn.lpstrFilter = szFilter;
461   - ofn.lpstrFile = szFileName;
  461 + ofn.lpstrFile = TTYInfo.szFileName;
462 462 ofn.nMaxFile = MAX_PATH;
463 463 ofn.lpstrTitle = "Send File Repeatedly";
464 464 ofn.Flags = OFN_FILEMUSTEXIST;
... ... @@ -468,7 +468,7 @@ void CmdDispatch(int iMenuChoice, HWND hwnd, LPARAM lParam)
468 468
469 469 dwFreq = GetAFrequency();
470 470
471   - TransferRepeatCreate(szFileName, dwFreq);
  471 + TransferRepeatCreate(TTYInfo.szFileName, dwFreq);
472 472 }
473 473 break;
474 474
... ... @@ -727,7 +727,11 @@ BOOL NEAR PaintTTY( HWND hWnd )
727 727 hDC = BeginPaint( hWnd, &ps ) ;
728 728 hOldFont = SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;
729 729 SetTextColor( hDC, FGCOLOR( TTYInfo ) ) ;
  730 +#ifdef __TOPWELL_EDIT__
  731 + SetBkColor( hDC, TTYInfo.rgbBGColor ) ;
  732 +#else
730 733 SetBkColor( hDC, GetSysColor( COLOR_WINDOW ) ) ;
  734 +#endif
731 735 rect = ps.rcPaint ;
732 736 nRow =
733 737 min( MAXROWS - 1,
... ...
... ... @@ -21,6 +21,7 @@
21 21 #include "resource.h"
22 22 //#include "ttyinfo.h"
23 23 #define __OPTEK_EDIT__
  24 +#define __TOPWELL_EDIT__
24 25
25 26 #ifdef __OPTEK_EDIT__
26 27 #pragma comment(lib,"comctl32.lib")
... ... @@ -93,7 +94,12 @@ struct TTYInfoStruct
93 94 COMMTIMEOUTS timeoutsnew;
94 95 int xSize, ySize, xScroll, yScroll, xOffset, yOffset,
95 96 nColumn, nRow, xChar, yChar , nCharPos;
96   -
  97 +#ifdef __TOPWELL_EDIT__
  98 + DWORD rgbBGColor ;
  99 + BOOL DownloadReday;
  100 + DWORD tickcountFinish; //Íê³ÉÏÂÔØµÄʱ¼ä
  101 + char szFileName[MAX_PATH];
  102 + #endif
97 103 } TTYInfo;
98 104
99 105 //
... ... @@ -361,7 +367,7 @@ DWORD GetAFrequency( void );
361 367 // Buffer manipulation functions
362 368 //
363 369 void OutputABufferToWindow( HWND, char *, DWORD );
364   -void OutputABuffer( HWND, char *, DWORD );
  370 +void OutputABuffer( HWND, char * );
365 371 BOOL ClearTTYContents( void );
366 372
367 373 //
... ...
... ... @@ -155,7 +155,7 @@ void OutputABufferToFile(HANDLE hFile, char * lpBuf, DWORD dwBufLen)
155 155
156 156 /*-----------------------------------------------------------------------------
157 157
158   -FUNCTION: OutputABuffer(HWND, char *, DWORD)
  158 +FUNCTION: OutputABuffer(HWND, char *)
159 159
160 160 PURPOSE: Send a rec'd buffer to the approprate location
161 161
... ... @@ -170,8 +170,9 @@ HISTORY: Date: Author: Comment:
170 170 10/27/95 AllenD Wrote it
171 171
172 172 -----------------------------------------------------------------------------*/
173   -void OutputABuffer(HWND hTTY, char * lpBuf, DWORD dwBufLen)
  173 +void OutputABuffer(HWND hTTY, char * lpBuf)
174 174 {
  175 + DWORD dwBufLen =strlen(lpBuf);
175 176 if (dwBufLen == 0) {
176 177 OutputDebugString("NULL Buffer in OutputABuffer\n\r");
177 178 return;
... ...
... ... @@ -58,6 +58,10 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
58 58 BOOL fWaitingOnStat = FALSE;
59 59 BOOL fThreadDone = FALSE;
60 60 char lpBuf[AMOUNT_TO_READ];
  61 +#ifdef __TOPWELL_EDIT__
  62 + char lpBuf_first[AMOUNT_TO_READ];
  63 + char Flashed_percent;
  64 +#endif
61 65 HWND hTTY;
62 66
63 67 hTTY = (HANDLE) lpV;
... ... @@ -105,7 +109,12 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
105 109 // if no read is outstanding, then issue another one
106 110 //
107 111 if (!fWaitingOnRead) {
108   - if (!ReadFile(COMDEV(TTYInfo), lpBuf, AMOUNT_TO_READ, &dwRead, &osReader)) {
  112 +#ifdef __TOPWELL_EDIT__
  113 + if (!ReadFile(COMDEV(TTYInfo), lpBuf_first, AMOUNT_TO_READ, &dwRead, &osReader))
  114 +#else
  115 + if (!ReadFile(COMDEV(TTYInfo), lpBuf, AMOUNT_TO_READ, &dwRead, &osReader))
  116 +#endif
  117 + {
109 118 if (GetLastError() != ERROR_IO_PENDING) // read not delayed?
110 119 ErrorInComm("ReadFile in ReaderAndStatusProc");
111 120
... ... @@ -116,7 +125,7 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
116 125 UpdateStatus("Read timed out immediately.\r\n");
117 126
118 127 if (dwRead)
119   - OutputABuffer(hTTY, lpBuf, dwRead);
  128 + OutputABuffer(hTTY, lpBuf);
120 129 }
121 130 }
122 131
... ... @@ -167,7 +176,8 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
167 176 // read completed
168 177 //
169 178 case WAIT_OBJECT_0:
170   - if (!GetOverlappedResult(COMDEV(TTYInfo), &osReader, &dwRead, FALSE)) {
  179 + if (!GetOverlappedResult(COMDEV(TTYInfo), &osReader, &dwRead, FALSE))
  180 + {
171 181 if (GetLastError() == ERROR_OPERATION_ABORTED)
172 182 UpdateStatus("Read aborted\r\n");
173 183 else
... ... @@ -177,8 +187,80 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
177 187 if ((dwRead != MAX_READ_BUFFER) && SHOWTIMEOUTS(TTYInfo))
178 188 UpdateStatus("Read timed out overlapped.\r\n");
179 189
  190 +#ifdef __TOPWELL_EDIT__
180 191 if (dwRead)
181   - OutputABuffer(hTTY, lpBuf, dwRead);
  192 + {
  193 + int loop1, loop2;
  194 + loop2 = 0;
  195 + for (loop1 = 0; loop1 < AMOUNT_TO_READ; loop1++)
  196 + {
  197 + if (lpBuf_first[loop1] < 0x0A || lpBuf_first[loop1] >= 0x7f)
  198 + continue;
  199 + else
  200 + lpBuf[loop2++] = lpBuf_first[loop1];
  201 + }
  202 + lpBuf[loop2++] = '\r';
  203 + lpBuf[loop2++] = '\n';
  204 + lpBuf[loop2] = 0;
  205 + if (strstr(lpBuf, "ROM boot"))
  206 + {
  207 + if (GetTickCount() -TTYInfo.tickcountFinish < 2000)
  208 + { // 在很短的时间内收到PCB板的下载信号, 视为PCB板自动复位, 而不是合上夹具
  209 + return 0;
  210 + }
  211 + TTYInfo.rgbBGColor = RGB(255, 255, 255);
  212 + OutputABuffer(hTTY, "进入下载模式\r\n");
  213 + TTYInfo.DownloadReday = TRUE;
  214 + if (strlen(TTYInfo.szFileName) != 0)
  215 + TransferFileTextStart(TTYInfo.szFileName);
  216 + else
  217 + {
  218 + TTYInfo.rgbBGColor = RGB(255, 201, 14);
  219 + OutputABuffer(hTTY, "还未选择软件\r\n");
  220 + return 0;
  221 + }
  222 + }
  223 + else if (strstr(lpBuf, "Verify successful"))
  224 + {
  225 + TTYInfo.tickcountFinish = GetTickCount();
  226 + TTYInfo.rgbBGColor = RGB(50, 255, 50);
  227 + OutputABuffer(hTTY, "下载完成\r\n");
  228 + TTYInfo.DownloadReday = FALSE;
  229 + }
  230 + else if (strstr(lpBuf, "Programming:"))
  231 + {
  232 + char * pchar_percent = strstr(lpBuf, "Programming:");
  233 + char ascbufpercent[64];
  234 + if (pchar_percent != NULL)
  235 + {
  236 + TTYInfo.tickcountFinish = GetTickCount();
  237 + TTYInfo.rgbBGColor = RGB(255, 255, 255);
  238 + memset(ascbufpercent, 0, 64);
  239 + strncpy(ascbufpercent, pchar_percent + 12, 2);
  240 + Flashed_percent = atoi(ascbufpercent);
  241 + sprintf(ascbufpercent, "下载已完成%d\r\n", Flashed_percent);
  242 + OutputABuffer(hTTY, ascbufpercent);
  243 + TTYInfo.DownloadReday = FALSE;
  244 + }
  245 + }
  246 + else if (strstr(lpBuf, "Verify fail"))
  247 + {
  248 + //TTYInfo.tickcountFinish = GetTickCount();
  249 + TTYInfo.rgbBGColor = RGB(255, 50, 50);
  250 + OutputABuffer(hTTY, "下载失败\r\n");
  251 + TTYInfo.DownloadReday = FALSE;
  252 + }
  253 + else
  254 + {
  255 + TTYInfo.rgbBGColor = RGB(255, 255, 255);
  256 + OutputABuffer(hTTY, lpBuf);
  257 + TTYInfo.DownloadReday = FALSE;
  258 + }
  259 + }
  260 +#else
  261 + if (dwRead)
  262 + OutputABuffer(hTTY, lpBuf);
  263 +#endif
182 264 }
183 265
184 266 fWaitingOnRead = FALSE;
... ... @@ -188,7 +270,8 @@ DWORD WINAPI ReaderAndStatusProc(LPVOID lpV)
188 270 // status completed
189 271 //
190 272 case WAIT_OBJECT_0 + 1:
191   - if (!GetOverlappedResult(COMDEV(TTYInfo), &osStatus, &dwOvRes, FALSE)) {
  273 + if (!GetOverlappedResult(COMDEV(TTYInfo), &osStatus, &dwOvRes, FALSE))
  274 + {
192 275 if (GetLastError() == ERROR_OPERATION_ABORTED)
193 276 UpdateStatus("WaitCommEvent aborted\r\n");
194 277 else
... ...
... ... @@ -722,7 +722,7 @@ BYTE GetbTTYItem(HWND hDlg, int idControl, char ** szString, DWORD * pTable, int
722 722 }
723 723
724 724 #ifdef __OPTEK_EDIT__
725   -extern char szFileName[MAX_PATH];
  725 +//extern char szFileName[MAX_PATH];
726 726
727 727 int szFileName_check(char* fileName)
728 728 {
... ... @@ -825,10 +825,10 @@ BOOL CALLBACK ToolbarProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
825 825 fRet = FALSE;
826 826 break;
827 827 }
828   - if (szFileName_check(szFileName))
  828 + if (szFileName_check(TTYInfo.szFileName))
829 829 {
830 830 EnableWindow( GetDlgItem(ghWndToolbarDlg, IDC_SENDBTN), FALSE);
831   - TransferFileTextStart(szFileName);
  831 + TransferFileTextStart(TTYInfo.szFileName);
832 832 }
833 833 else
834 834 {
... ...
Please register or login to post a comment