#include "ClearLinkageCfg.h" #include "Runtime.h" extern "C"{ #include "user_norflash.h" #include "user_eeprom.h" #include "uart_key_drv.h" #include "task.h" #include "HW_config.h" } #define dWdClr clSkyBlue #define dWdDisabelClr clNearWhite #define dWWidth 24 #define dWHeigh 24 #define dRoundR 7 static const int xFirst = 10; class TItemList *TClearLinkageCfg::sIList; void TClearLinkageCfg::Init() { CtlIndex = 0; IsShowing = 0; PermissionCmd =0; IsPermission =0; Eraser.OnGo = 0; Eraser.Step = 0xFF; } void TClearLinkageCfg::sDelayMs(unsigned int aMs) { volatile unsigned int mTick; volatile unsigned int Tick; for(Tick=0; Tick清除联动编程"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "清除联动编程"); TRoundRect::sDrawBySize(xFirst, Lv.Grid.Top[0] + 36, 72, 30, 7, clBlue, "确定", 12, clNearWhite); }else{ TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Advanced Setup->Clear Linkage Expression"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "Linkage Expression"); TRoundRect::sDrawBySize(xFirst, Lv.Grid.Top[0] + 36, 72, 30, 7, clBlue, "Clear", 6, clNearWhite); } } void TClearLinkageCfg::DrawSelf(void) { RenderBackGround(); RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor); for(int i=0; iReadWriteData.Reset(); fAddr4K = dFlashAddrLinkageExp + ((ToWriteInx * 1024) & 0x00FF'F000); for(i=0; i<4; i++){ Crc32Reset(); fAddr4Index = fAddr4K + (i * 1024); for(ord=0; ord<4; ord++){ for(x=0; x<64; x++){ sIList->ReadWriteData.D32[x] = 0; if(ord<3 or x<63)Crc32Feed(sIList->ReadWriteData.D32[x]); } if(ord==3)sIList->ReadWriteData.D32[63]=Crc32GetResult(); do{ sDelayMs(2); aFlashState = nor_get_busy_state(dFlashLinkageExpChipX); }while(aFlashState); nor_write_page(dFlashLinkageExpChipX, fAddr4Index, sIList->ReadWriteData.D8); fAddr4Index+=256; } do{ sDelayMs(2); aFlashState = nor_get_busy_state(dFlashLinkageExpChipX); }while(aFlashState); InterLink.CheckStorageCrc(ToWriteInx+1); do{ sDelayMs(2); aFlashState = nor_get_busy_state(dFlashLinkageExpChipX); }while(aFlashState); ToWriteInx++; LoopCheck1S(); } } void TClearLinkageCfg::sDoClear() { volatile unsigned int aFlashState; unsigned int i, GroupCnt; unsigned int fAddr64K; for(i=0; i 2){ PermissionCmdGO(); }else{ IsPermission = 1; if(LanguageEnCn==0) TRoundRect::sDrawBySize(xFirst, Lv.Grid.Top[0] + 36, 72, 30, 7, clNearWhite, "确定", 12, clNearBlack); else TRoundRect::sDrawBySize(xFirst, Lv.Grid.Top[0] + 36, 72, 30, 7, clNearWhite, "Clear", 6, clNearBlack); PmsIntervene4Gui.Show4Gui(100, Lv.Grid.Bottom[0] + 40, 600 , 120, 3); } } break; case VK_RETURN: IsShowing = 0; if(Eraser.OnGo){ ForceExit(); } aMsg = guiMsgReturn; break; } } return aMsg; } void TClearLinkageCfg::Task1000Ms() { //dFlashBlock64kCount4LinkageExp = 32 volatile unsigned int uiVal; return; if(IsShowing){ if(Eraser.OnGo == 0xB6){ if(Eraser.Step < dFlashBlock64kCount4LinkageExp){ sDelayMs(2); uiVal = nor_get_busy_state(dFlashLinkageExpChipX); if(uiVal)return; uiVal = dFlashAddrLinkageExp + (Eraser.Step * 0x10000); nor_erase_sector_64k(dFlashLinkageExpChipX,uiVal); Eraser.Step++; }else if(Eraser.Step < 33){ sDelayMs(2); uiVal = nor_get_busy_state(dFlashLinkageExpChipX); if(uiVal)return; Eraser.Step++; }else{ sDelayMs(2); uiVal = nor_get_busy_state(dFlashLinkageExpChipX); if(uiVal)return; InterLink.Init(); InterLink.LoadExpression2Ram(); if(LanguageEnCn==0) TextRender_string24(400, Lv.Grid.Top[0]+ 36, clNearWhite, ItemColor, "清除完成 "); else TextRender_string24(400, Lv.Grid.Top[0]+ 36, clNearWhite, ItemColor, "Cleared "); Record.OperateAdd_CleanUp(3); Eraser.OnGo =0; } } } } void TClearLinkageCfg::ForceExit() { InterLink.Init(); InterLink.LoadExpression2Ram(); Record.OperateAdd_CleanUp(0xF3); Eraser.OnGo =0; } int TClearLinkageCfg::ExtRequst(unsigned char Prm) { IsShowing =0; if(Eraser.OnGo){ ForceExit(); } return 0; }