📄 functions.inl
字号:
while (VarsUi.GUSCursor)
{
VarsUi.UserString[VarsUi.GUSCursor] = 0;
VarsUi.GUSCursor--;
}
}
else
{
VarsUi.GUSCursor--;
}
VarsUi.UserString[VarsUi.GUSCursor] = 0;
VarsUi.GUSState -= 2;
}
else
{
VarsUi.UserString[0] = 0;
VarsUi.GUSState = 100;
}
}
break;
}
}
break;
default : // Clean up screen
{
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
pMapDisplay->UpdateMask = 0;
IOMapUi.Flags |= UI_REDRAW_STATUS;
VarsUi.GUSState = 0;
}
break;
}
}
return (VarsUi.GUSState);
}
//******* cUiDataLogging *****************************************************
void cUiDrawPortNo(UBYTE *Bitmap,UBYTE MenuIconNo,UBYTE PortNo)
{
UBYTE Tmp;
Bitmap[0] = (UBYTE)(FILEFORMAT_BITMAP >> 8);
Bitmap[1] = (UBYTE)(FILEFORMAT_BITMAP);
Bitmap[2] = (UBYTE)(SIZE_OF_PORTBITMAP >> 8);
Bitmap[3] = (UBYTE)(SIZE_OF_PORTBITMAP);
Bitmap[4] = DISPLAY_MENUICONS_X_OFFS + DISPLAY_MENUICONS_X_DIFF * MenuIconNo + 2;
Bitmap[5] = DISPLAY_MENUICONS_Y;
Bitmap[6] = Port[0].ItemPixelsX;
Bitmap[7] = Port[0].ItemPixelsY;
Tmp = 0;
while (Tmp < Bitmap[6])
{
Bitmap[Tmp + FILEHEADER_LENGTH] = Port[0].Data[Tmp + PortNo * Bitmap[6]];
Tmp++;
}
}
//******* cUiRunning **********************************************************
void cUiRunning(UBYTE Action)
{
switch (Action)
{
case MENU_INIT :
{
VarsUi.RunIconSave = pMapDisplay->pMenuIcons[MENUICON_CENTER];
VarsUi.RunBitmapPointer = 0;
VarsUi.RunTimer = 0;
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
pMapDisplay->UpdateMask |= SPECIAL_BIT(TOPLINE);
}
break;
case MENU_RUN :
{
if ((IOMapUi.Flags & UI_ENABLE_STATUS_UPDATE))
{
if (++VarsUi.RunTimer >= RUN_BITMAP_CHANGE_TIME)
{
VarsUi.RunTimer = 0;
if (++VarsUi.RunBitmapPointer >= Running->ItemsY )
{
VarsUi.RunBitmapPointer = 0;
}
pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Running->Data[VarsUi.RunBitmapPointer * Running->ItemPixelsX * (Running->ItemPixelsY / 8)];
pMapDisplay->EraseMask |= MENUICON_BIT(MENUICON_CENTER);
pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_CENTER);
}
}
}
break;
case MENU_UPDATE :
{
pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Running->Data[VarsUi.RunBitmapPointer * Running->ItemPixelsX * (Running->ItemPixelsY / 8)];
pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_CENTER);
}
break;
case MENU_EXIT :
{
pMapDisplay->pMenuIcons[MENUICON_CENTER] = VarsUi.RunIconSave;
pMapDisplay->UpdateMask = MENUICON_BITS | SPECIAL_BIT(MENUTEXT);
}
break;
}
}
//******* cUiOnBrickProgramming **********************************************
UBYTE cUiOnBrickProgramming(UBYTE Action) // On brick programming
{
switch (Action)
{
case MENU_INIT : // Show motor / sensor text
{
pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_ONBRICKPROGRAMMING_PLEASE_USE_PORT);
pMapDisplay->pTextLines[TEXTLINE_4] = cUiGetString(TXT_ONBRICKPROGRAMMING_1_TOUCH_SENSOR);
pMapDisplay->pTextLines[TEXTLINE_5] = cUiGetString(TXT_ONBRICKPROGRAMMING_2_SOUND_SENSOR);
pMapDisplay->pTextLines[TEXTLINE_6] = cUiGetString(TXT_ONBRICKPROGRAMMING_3_LIGHT_SENSOR);
pMapDisplay->pTextLines[TEXTLINE_7] = cUiGetString(TXT_ONBRICKPROGRAMMING_4_ULTRA_SONIC);
pMapDisplay->pTextLines[TEXTLINE_8] = cUiGetString(TXT_ONBRICKPROGRAMMING_BC_LR_MOTORS);
pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4) | TEXTLINE_BIT(TEXTLINE_5) | TEXTLINE_BIT(TEXTLINE_6) | TEXTLINE_BIT(TEXTLINE_7) | TEXTLINE_BIT(TEXTLINE_8));
pMapDisplay->UpdateMask &= ~SPECIAL_BIT(FRAME_SELECT);
pMapDisplay->UpdateMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4) | TEXTLINE_BIT(TEXTLINE_5) | TEXTLINE_BIT(TEXTLINE_6) | TEXTLINE_BIT(TEXTLINE_7) | TEXTLINE_BIT(TEXTLINE_8) | SPECIAL_BIT(TOPLINE));
pMapDisplay->TextLinesCenterFlags |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4) | TEXTLINE_BIT(TEXTLINE_5) | TEXTLINE_BIT(TEXTLINE_6) | TEXTLINE_BIT(TEXTLINE_7) | TEXTLINE_BIT(TEXTLINE_8));
IOMapUi.State = TEST_BUTTONS;
}
break;
case MENU_TEXT : // Show empty program steps
{
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
VarsUi.pTmp = (UBYTE*)Cursor;
for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
{
VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
VarsUi.pTmp++;
}
for (VarsUi.ProgramStepPointer = 0;VarsUi.ProgramStepPointer < ON_BRICK_PROGRAMSTEPS;VarsUi.ProgramStepPointer++)
{
VarsUi.ProgramSteps[VarsUi.ProgramStepPointer] = MENU_ACTION_EMPTY;
}
VarsUi.ProgramStepPointer = 0;
Action = MENU_DRAW;
}
break;
case MENU_EXIT : // Delete one steps and exit at the end
{
if (VarsUi.ProgramStepPointer)
{
if (VarsUi.ProgramStepPointer < ON_BRICK_PROGRAMSTEPS)
{
VarsUi.ProgramSteps[VarsUi.ProgramStepPointer] = MENU_ACTION_EMPTY;
}
VarsUi.ProgramStepPointer--;
}
else
{
IOMapUi.State = NEXT_MENU;
}
Action = MENU_DRAW;
}
break;
case MENU_RUN : // Run program steps until end or user press exit button
{
switch (VarsUi.State)
{
case 0 :
{
VarsUi.pTmp = (UBYTE*)Cursor;
for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
{
VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
VarsUi.pTmp++;
}
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
cUiRunning(MENU_INIT);
Action = MENU_DRAW;
VarsUi.State++;
}
break;
case 1 : // If sound finished -> Init text and program pointer
{
if (SOUND_IDLE == pMapSound->State)
{
VarsUi.ProgramStepPointer = ON_BRICK_PROGRAMSTEPS;
VarsUi.MenuIconTextSave = pMapDisplay->pMenuText;
pMapDisplay->EraseMask |= SPECIAL_BIT(MENUTEXT);
VarsUi.State++;
}
}
break;
case 2 : // load file to run
{
if (PROG_IDLE == pMapCmd->ProgStatus)
{
sprintf((char*)pMapCmd->FileName,"%s.%s",(char*)VM_PROGRAM_READER,(char*)TXT_SYS_EXT);
pMapCmd->ActivateFlag = TRUE;
VarsUi.State++;
}
}
break;
case 3 : // Wait for end of file
{
if (PROG_RUNNING != pMapCmd->ProgStatus)
{
pMapCmd->ProgStatus = PROG_RESET;
VarsUi.State = 99;
VarsUi.ProgramStepPointer = ON_BRICK_PROGRAMSTEPS;
}
else
{
if (VarsUi.OBPTimer >= MIN_DISPLAY_UPDATE_TIME)
{
if (IOMapUi.OBPPointer != VarsUi.ProgramStepPointer)
{
VarsUi.ProgramStepPointer = IOMapUi.OBPPointer;
Action = MENU_DRAW;
}
}
}
}
break;
default : // Program stopped
{
pMapDisplay->pMenuText = VarsUi.MenuIconTextSave;
pMapDisplay->UpdateMask |= SPECIAL_BIT(MENUTEXT);
Action = MENU_DRAW;
VarsUi.State = 0;
}
break;
}
if (VarsUi.State)
{
cUiRunning(MENU_RUN);
}
else
{
cUiRunning(MENU_EXIT);
}
}
break;
case MENU_LEFT : // NA
{
IOMapUi.State = TEST_BUTTONS;
}
break;
case MENU_RIGHT : // NA
{
IOMapUi.State = TEST_BUTTONS;
}
break;
case MENU_UPDATE : // NA
{
Action = MENU_DRAW;
}
break;
case MENU_SAVE : // Save NXT program
{
switch (VarsUi.State)
{
case 0 :
{
// Suggest default filename to user
strcpy((char*)VarsUi.UserString,(char*)DEFAULT_PROGRAM_NAME);
VarsUi.State++;
}
break;
case 1 :
{
if (!cUiGetUserString(1))
{
if (VarsUi.UserString[0])
{
sprintf((char*)VarsUi.SelectedFilename,"%s.%s",VarsUi.UserString,TXT_FILE_EXT[FILETYPE_NXT]);
// If tmp file exist -> ask for overwrite
VarsUi.TmpHandle = pMapLoader->pFunc(FINDFIRST,(UBYTE*)VarsUi.SelectedFilename,VarsUi.FilenameBuffer,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
VarsUi.State++;
}
else
{
VarsUi.State += 2;
}
}
else
{
VarsUi.State = 99;
}
}
}
break;
case 2 :
{
if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_OBP_FILE_EXIST_FAIL,TXT_FB_OBP_OVERWRITE_FAIL,0))
{
VarsUi.State = 0;
}
}
break;
case 3 :
{
// Rename TEMP_PROGRAM_FILENAME to VarsUi.SelectedFilename(user filename)
sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_PROGRAM_FILENAME,(char*)TXT_TMP_EXT);
VarsUi.TmpHandle = pMapLoader->pFunc(RENAMEFILE,VarsUi.FilenameBuffer,VarsUi.SelectedFilename,&VarsUi.TmpLength);
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
VarsUi.State++;
}
break;
case 4 : // Display saved text
{
if (!cUiFeedback((BMPMAP*)Info,TXT_FB_OBP_FILE_SAVED_INFO,0,DISPLAY_SHOW_TIME))
{
VarsUi.State++;
}
}
break;
default :
{
cUiMenuPrevFile();
IOMapUi.State = NEXT_MENU;
VarsUi.State = 0;
}
break;
}
}
break;
case MENU_OVERWRITE : // Over write existing file
{
switch (VarsUi.State)
{
case 0 :
{
// Delete VarsUi.SelectedFilename(user filename)
VarsUi.TmpHandle = pMapLoader->pFunc(FINDFIRST,(UBYTE*)VarsUi.SelectedFilename,VarsUi.FilenameBuffer,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
pMapLoader->pFunc(DELETE,VarsUi.SelectedFilename,NULL,NULL);
}
// Rename TEMP_PROGRAM_FILENAME to VarsUi.SelectedFilename(user filename)
sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_PROGRAM_FILENAME,(char*)TXT_TMP_EXT);
VarsUi.TmpHandle = pMapLoader->pFunc(RENAMEFILE,VarsUi.FilenameBuffer,VarsUi.SelectedFilename,&VarsUi.TmpLength);
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
VarsUi.State++;
}
break;
default : // Display saved text
{
if (!cUiFeedback((BMPMAP*)Info,TXT_FB_OBP_FILE_SAVED_INFO,0,DISPLAY_SHOW_TIME))
{
VarsUi.State = 0;
}
}
break;
}
}
break;
default : // Insert selected action/waitfor in program and save if finished
{
switch (VarsUi.State)
{
case 0 :
{
VarsUi.ProgramSteps[VarsUi.ProgramStepPointer] = Action;
if (VarsUi.ProgramStepPointer < ON_BRICK_PROGRAMSTEPS)
{
VarsUi.ProgramStepPointer++;
}
if (VarsUi.ProgramStepPointer == ON_BRICK_PROGRAMSTEPS)
{
// If tmp file exist -> delete it
sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_PROGRAM_FILENAME,(char*)TXT_TMP_EXT);
VarsUi.TmpHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.FilenameBuffer,VarsUi.SearchFilenameBuffer,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
pMapLoader->pFunc(DELETE,VarsUi.FilenameBuffer,NULL,NULL);
}
// Save program as tmp file
VarsUi.TmpLength = FILEHEADER_LENGTH + ON_BRICK_PROGRAMSTEPS;
VarsUi.TmpHandle = pMapLoader->pFunc(OPENWRITE,VarsUi.FilenameBuffer,NULL,&VarsUi.TmpLength);
if (!(VarsUi.TmpHandle & 0x8000))
{
VarsUi.FileHeader[0] = (UBYTE)(FILEFORMAT_PROGRAM >> 8);
VarsUi.FileHeader[1] = (UBYTE)(FILEFORMAT_PROGRAM);
VarsUi.FileHeader[2] = (UBYTE)(ON_BRICK_PROGRAMSTEPS >> 8);
VarsUi.FileHeader[3] = (UBYTE)(ON_BRICK_PROGRAMSTEPS);
VarsUi.FileHeader[4] = (UBYTE)(ON_BRICK_PROGRAMSTEPS);
VarsUi.FileHeader[5] = (UBYTE)0;
VarsUi.FileHeader[6] = (UBYTE)0;
VarsUi.FileHeader[7] = (UBYTE)0;
VarsUi.TmpLength = FILEHEADER_LENGTH;
pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)VarsUi.FileHeader,&VarsUi.TmpLength);
VarsUi.TmpLength = ON_BRICK_PROGRAMSTEPS;
pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)VarsUi.ProgramSteps,&VarsUi.TmpLength);
pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
}
else
{
VarsUi.State++;
}
}
Action = MENU_DRAW;
}
break;
default : // Display memory error text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -