From d383f2bcdb6ff13cc562fce1ff55d826035debad Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 6 Mar 2023 17:36:31 +0100 Subject: Simplify source tree Now just use make in the root directory to build. --- AT91SAM7S256/Source/c_ui.c | 1944 -------------------------------------------- 1 file changed, 1944 deletions(-) delete mode 100644 AT91SAM7S256/Source/c_ui.c (limited to 'AT91SAM7S256/Source/c_ui.c') diff --git a/AT91SAM7S256/Source/c_ui.c b/AT91SAM7S256/Source/c_ui.c deleted file mode 100644 index 7e39d6f..0000000 --- a/AT91SAM7S256/Source/c_ui.c +++ /dev/null @@ -1,1944 +0,0 @@ -// -// Programmer -// -// Date init 14.12.2004 -// -// Reviser $Author:: Dkandlun $ -// -// Revision date $Date:: 10-06-08 9:26 $ -// -// Filename $Workfile:: c_ui.c $ -// -// Version $Revision:: 7 $ -// -// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ui.c $ -// -// Platform C -// - -#include "stdio.h" -#include "string.h" -#include "ctype.h" -#include "stdconst.h" -#include "modules.h" -#include "c_ui.iom" -#include "c_ui.h" -#include "m_sched.h" -#include "c_display.iom" -#include "c_loader.iom" -#include "c_button.iom" -#include "c_sound.iom" -#include "c_input.iom" -#include "c_output.iom" -#include "c_ioctrl.iom" -#include "c_cmd.iom" -#include "c_comm.iom" -#include "c_lowspeed.iom" - -static IOMAPUI IOMapUi; -static VARSUI VarsUi; -static HEADER **pHeaders; - -const HEADER cUi = -{ - 0x000C0001L, - "Ui", - cUiInit, - cUiCtrl, - cUiExit, - (void *)&IOMapUi, - (void *)&VarsUi, - (UWORD)sizeof(IOMapUi), - (UWORD)sizeof(VarsUi), - 0x0000 // Code size - not used so far -}; - - -// ****** GENERAL GRAPHIC RESOURCES ****************************************** - -#include "Display.txt" // Bitmap for frame used in view and datalog -#include "LowBattery.txt" // Bitmap showed when low battery occures -#include "Font.txt" // Font used for all text -#include "Step.txt" // Bitmap used in On Brick Programming -#include "Cursor.txt" // Bitmap for cursor -#include "Running.txt" // Icon collection used for "running" symbol -#include "Port.txt" // Font used for naming sensor ports in datalog/bluetooth -#include "Ok.txt" // Bitmap for OK buttom in get user string -#include "Wait.txt" // Bitmap for feedback -#include "Fail.txt" // Bitmap for feedback -#include "Info.txt" // Bitmap for feedback -#include "Icons.txt" // Icon collection used for menues - -// ****** INTRO ANIMATION RESOURCES ****************************************** - -#include "RCXintro_1.txt" // Bitmap for picture 1 in the intro animation -#include "RCXintro_2.txt" // Bitmap for picture 2 in the intro animation -#include "RCXintro_3.txt" // Bitmap for picture 3 in the intro animation -#include "RCXintro_4.txt" // Bitmap for picture 4 in the intro animation -#include "RCXintro_5.txt" // Bitmap for picture 5 in the intro animation -#include "RCXintro_6.txt" // Bitmap for picture 6 in the intro animation -#include "RCXintro_7.txt" // Bitmap for picture 7 in the intro animation -#include "RCXintro_8.txt" // Bitmap for picture 8 in the intro animation -#include "RCXintro_9.txt" // Bitmap for picture 9 in the intro animation -#include "RCXintro_10.txt" // Bitmap for picture 10 in the intro animation -#include "RCXintro_11.txt" // Bitmap for picture 11 in the intro animation -#include "RCXintro_12.txt" // Bitmap for picture 12 in the intro animation -#include "RCXintro_13.txt" // Bitmap for picture 13 in the intro animation -#include "RCXintro_14.txt" // Bitmap for picture 14 in the intro animation -#include "RCXintro_15.txt" // Bitmap for picture 15 in the intro animation -#include "RCXintro_16.txt" // Bitmap for picture 16 in the intro animation - -const BMPMAP *Intro[NO_OF_INTROBITMAPS] = // Picture sequence for the intro animation -{ - (BMPMAP*) POINTER_TO_DATA (RCXintro_1), - (BMPMAP*) POINTER_TO_DATA (RCXintro_2), - (BMPMAP*) POINTER_TO_DATA (RCXintro_3), - (BMPMAP*) POINTER_TO_DATA (RCXintro_4), - (BMPMAP*) POINTER_TO_DATA (RCXintro_5), - (BMPMAP*) POINTER_TO_DATA (RCXintro_6), - (BMPMAP*) POINTER_TO_DATA (RCXintro_7), - (BMPMAP*) POINTER_TO_DATA (RCXintro_8), - (BMPMAP*) POINTER_TO_DATA (RCXintro_9), - (BMPMAP*) POINTER_TO_DATA (RCXintro_10), - (BMPMAP*) POINTER_TO_DATA (RCXintro_11), - (BMPMAP*) POINTER_TO_DATA (RCXintro_12), - (BMPMAP*) POINTER_TO_DATA (RCXintro_13), - (BMPMAP*) POINTER_TO_DATA (RCXintro_14), - (BMPMAP*) POINTER_TO_DATA (RCXintro_15), - (BMPMAP*) POINTER_TO_DATA (RCXintro_16) -}; - -// ****** STATUS LINE GRAPHIC RESOURCES ************************************** - -#include "Status.txt" // Status icon collection file - -enum STATUS_NO // Index in status icon collection file -{ - STATUS_NO_NOT_USED, - STATUS_NO_RUNNING_0, - STATUS_NO_RUNNING_1, - STATUS_NO_RUNNING_2, - STATUS_NO_RUNNING_3, - STATUS_NO_RUNNING_4, - STATUS_NO_RUNNING_5, - STATUS_NO_RUNNING_6, - STATUS_NO_RUNNING_7, - STATUS_NO_RUNNING_8, - STATUS_NO_RUNNING_9, - STATUS_NO_RUNNING_10, - STATUS_NO_RUNNING_11, - STATUS_NO_BATTERY_0, - STATUS_NO_BATTERY_1, - STATUS_NO_BATTERY_2, - STATUS_NO_BATTERY_3, - STATUS_NO_BATTERY_4, - STATUS_NO_BATTERY_5, - STATUS_NO_RECHARGEABLE_0, - STATUS_NO_RECHARGEABLE_1, - STATUS_NO_RECHARGEABLE_2, - STATUS_NO_RECHARGEABLE_3, - STATUS_NO_RECHARGEABLE_4, - STATUS_NO_RECHARGEABLE_5, - STATUS_NO_BLUETOOTH_0, - STATUS_NO_BLUETOOTH_1, - STATUS_NO_BLUETOOTH_2, - STATUS_NO_BLUETOOTH_3, - STATUS_NO_BLUETOOTH_4, - STATUS_NO_BLUETOOTH_5, - STATUS_NO_USB_0, - STATUS_NO_USB_1, - STATUS_NO_USB_2, - STATUS_NO_USB_3, - STATUS_NO_USB_4, - STATUS_NO_USB_5 -}; - -// ****** BT DEVICE GRAPHIC RESOURCES **************************************** - -#include "Devices.txt" // Icon collection used for Blue tooth devices - -// ****** BT CONNECTIONS GRAPHIC RESOURCES *********************************** - -#include "Connections.txt" // Icon collection used for Blue tooth connections - -// ****** FREE TEXT GRAPHIC RESOURCES **************************************** - -#include "Ui.txt" // Text strings that is'nt defined in menu files - -enum // String index in text string file -{ - TXT_GENERAL_EMPTY, - // BlueTooth connect - TXT_FB_BT_CONNECTING_WAIT, // "Connecting" - TXT_FB_BT_CONNECT_BUSY_FAIL, // "Line is busy" - TXT_FB_BT_CONNECTING_FAIL, // "Failed!" - - // BlueTooth send file - TXT_FB_BT_SENDING_NO_CONN_FAIL, // "Connection?" - TXT_FB_BT_SENDING_WAIT, // "Sending file" - TXT_FB_BT_SENDING_FAIL, // "Failed!" - - // BlueTooth on/off - TXT_FB_BT_TURNING_ON_WAIT, // "Turning on" - TXT_FB_BT_TURNING_ON_FAIL, // "Failed!" - TXT_FB_BT_TURNING_OFF_WAIT, // "Turning off" - TXT_FB_BT_TURNING_OFF_FAIL, // "Failed!" - - // BlueTooth seach - TXT_FB_BT_SEARCHING_WAIT, // "Searching" - TXT_FB_BT_SEARCH_ABORTED_INFO, // "Aborted!" - TXT_FB_BT_SEARCHING_FAIL, // "Failed!" - - // BlueTooth device list - TXT_FB_BT_REMOVE_FAIL, // "Failed!" - - // BlueTooth connection list - TXT_FB_BT_DISCONNECT_FAIL, // "Failed!" - - // On Brick Programming - TXT_FB_OBP_MEMORY_FULL_FAIL, // "Memory full!" - TXT_FB_OBP_FILE_SAVED_INFO, // "File saved" - TXT_FB_OBP_FILE_EXIST_FAIL, // "File exist" - TXT_FB_OBP_OVERWRITE_FAIL, // "overwrite!" - - // Datalogging - TXT_FB_DL_FILE_SAVED_INFO, // "File saved" - TXT_FB_DL_FILE_EXIST_FAIL, // "File exist" - TXT_FB_DL_OVERWRITE_FAIL, // "overwrite!" - - // File delete - TXT_FB_FD_FILE_DELETED_INFO, // "File deleted" - - // Files delete - TXT_FB_FD_FILES_INFO, // "Files" - TXT_FB_FD_DELETED_INFO, // "deleted" - - // File run - TXT_FILERUN_RUNNING, // "Running" - TXT_FILERUN_ABORTED, // "Aborted!" - TXT_FILERUN_ENDED, // "Ended" - TXT_FILERUN_FILE_ERROR, // "File error!" - - // Files delete - TXT_FILESDELETE_DELETING_ALL, // "Deleting all" - TXT_FILESDELETE_S_FILES, // "%s files!" - - // Datalogging - TXT_DATALOGGING_PRESS_EXIT_TO, // "Press exit to" - TXT_DATALOGGING_STOP_DATALOGGING, // "stop datalogging" - TXT_DATALOGGING_PORT_OCCUPIED, // "Port occupied!" - TXT_DATALOGGING_RATE, // "H:MM:SS:00 - TXT_DATALOGGING_TIME, // "HH:MM:SS" - - // File types - TXT_FILETYPE_SOUND, // "Sound" - TXT_FILETYPE_LMS, // "Software" - TXT_FILETYPE_NXT, // "NXT" - TXT_FILETYPE_TRY_ME, // "Try me" - TXT_FILETYPE_DATA, // "Datalog" - - // Get user string - TXT_GETUSERSTRING_PIN, // "Pin:" - TXT_GETUSERSTRING_FILENAME, // "Filename:" - - // On Brick Programming - TXT_ONBRICKPROGRAMMING_PLEASE_USE_PORT, // "Please use port:" - TXT_ONBRICKPROGRAMMING_1_TOUCH_SENSOR, // "1 - Touch sensor" - TXT_ONBRICKPROGRAMMING_2_SOUND_SENSOR, // "2 - Sound sensor" - TXT_ONBRICKPROGRAMMING_3_LIGHT_SENSOR, // "3 - Light sensor" - TXT_ONBRICKPROGRAMMING_4_ULTRA_SONIC, // "4 - Ultra sonic" - TXT_ONBRICKPROGRAMMING_BC_LR_MOTORS, // "B/C - L/R motors" - - // View - TXT_VIEW_SELECT, // "Select" - - // BlueTooth device list - TXT_BTDEVICELIST_SELECT, // "Select" - - // BlueTooth connection list - TXT_BTCONNECTLIST_SELECT, // "Select" - - // Bluetooth list errors - TXT_FB_BT_ERROR_LR_COULD_NOT_SAVE_1, // BT save data error! - TXT_FB_BT_ERROR_LR_COULD_NOT_SAVE_2, // - TXT_FB_BT_ERROR_LR_STORE_IS_FULL_1, // BT store is full error! - TXT_FB_BT_ERROR_LR_STORE_IS_FULL_2, // - TXT_FB_BT_ERROR_LR_UNKOWN_ADDR_1, // BT unknown addr. error! - TXT_FB_BT_ERROR_LR_UNKOWN_ADDR_2, // - - // Datalog errors - TXT_FB_DL_ERROR_MEMORY_FULL_1, // Memory is full! - TXT_FB_DL_ERROR_MEMORY_FULL_2, // - - // Power of time - TXT_POWEROFFTIME_NEVER // "Never" - -}; - -// ****** FILE TYPE GRAPHIC RESOURCES **************************************** - -#define ALLFILES 0x1A // Icon collection offset - -enum // File type id's -{ - FILETYPE_ALL, // 0 = All - FILETYPE_SOUND, // 1 = Sound - FILETYPE_LMS, // 2 = LMS - FILETYPE_NXT, // 3 = NXT - FILETYPE_TRYME, // 4 = Try me - FILETYPE_DATALOG, // 5 = Datalog - FILETYPES -}; - -const UBYTE TXT_FILE_EXT[FILETYPES][4] = -{ - "*", // 0 = All - TXT_SOUND_EXT, // 1 = Sound - TXT_LMS_EXT, // 2 = LMS - TXT_NXT_EXT, // 3 = NXT - TXT_TRYME_EXT, // 4 = Try me - TXT_DATA_EXT // 5 = Datalog -}; - -const UBYTE TXT_FILETYPE[FILETYPES] = -{ - 0, // NA - TXT_FILETYPE_SOUND, // 1 = Sound - TXT_FILETYPE_LMS, // 2 = LMS - TXT_FILETYPE_NXT, // 3 = NXT - TXT_FILETYPE_TRY_ME,// 4 = Try me - TXT_FILETYPE_DATA // 5 = Datalog -}; - -// ****** POWER OFF DEFINITIONS ********************************************** - -#define POWER_OFF_TIME_STEPS 6 -#define POWER_OFF_TIME_DEFAULT 3 - -const UBYTE PowerOffTimeSteps[POWER_OFF_TIME_STEPS] = { 0,2,5,10,30,60 }; // [min] - -// ****** BATTERY DEFINITIONS ************************************************ - -#define BATTERYLIMITS 4 // [Cnt] -#define BATTERYLIMITHYST 100 // [mV] -#define RECHARGEABLELIMITHYST 50 // [mV] - -const UWORD BatteryLimits[BATTERYLIMITS] = -{ - 6100,6500,7000,7500 // [mV] -}; - -const UWORD RechargeableLimits[BATTERYLIMITS] = -{ - 7100,7200,7300,7500 // [mV] -}; - -//******* UI MENU FILE HANDLER ************************************************************************* - -#include "Mainmenu.rms" -#include "Submenu01.rms" -#include "Submenu02.rms" -#include "Submenu03.rms" -#include "Submenu04.rms" -#include "Submenu05.rms" -#include "Submenu06.rms" -#include "Submenu07.rms" - -const UBYTE *MenuPointers[] = -{ - (UBYTE*)MAINMENU, - (UBYTE*)SUBMENU01, - (UBYTE*)SUBMENU02, - (UBYTE*)SUBMENU03, - (UBYTE*)SUBMENU04, - (UBYTE*)SUBMENU05, - (UBYTE*)SUBMENU06, - (UBYTE*)SUBMENU07 -}; - - -UBYTE* cUiGetMenuPointer(UBYTE FileNo) -{ - return ((UBYTE*)MenuPointers[FileNo]); -} - - -//****************************************************************************************************** - -UBYTE* cUiGetString(UBYTE No) // Get string in text string file -{ - UBYTE *Result = NULL; - TXT *pUi; - UWORD Tmp; - - pUi = (TXT*)Ui; - if (No) - { - if (No <= pUi->ItemsY) - { - Tmp = No - 1; - Tmp *= pUi->ItemCharsX; - Result = &(pUi->Data[Tmp]); - } - } - - return (Result); -} - - -UBYTE cUiReadButtons(void) // Read buttons -{ - UBYTE Result = BUTTON_NONE; - - if (!(IOMapUi.Flags & UI_DISABLE_LEFT_RIGHT_ENTER)) - { - if ((pMapButton->State[BTN3] & PRESSED_STATE)) - { - Result = BUTTON_LEFT; - } - if ((pMapButton->State[BTN2] & PRESSED_STATE)) - { - Result = BUTTON_RIGHT; - } - if ((pMapButton->State[BTN4] & PRESSED_STATE)) - { - Result = BUTTON_ENTER; - } - } - if (!(IOMapUi.Flags & UI_DISABLE_EXIT)) - { - if ((pMapButton->State[BTN1] & PRESSED_STATE)) - { - Result = BUTTON_EXIT; - } - } - if (Result == BUTTON_NONE) - { - // All buttons released - VarsUi.ButtonOld = BUTTON_NONE; - VarsUi.ButtonTime = BUTTON_DELAY_TIME; - } - else - { - // Some button pressed - if (VarsUi.ButtonOld == BUTTON_NONE) - { - // Just pressed - VarsUi.ButtonOld = Result; - VarsUi.ButtonTimer = 0; - } - else - { - // Still pressed - Result = BUTTON_NONE; - - if (VarsUi.ButtonTimer >= VarsUi.ButtonTime) - { - VarsUi.ButtonTimer = 0; - VarsUi.ButtonTime = BUTTON_REPEAT_TIME; - if ((VarsUi.ButtonOld == BUTTON_LEFT) || (VarsUi.ButtonOld == BUTTON_RIGHT)) - { - // If arrow repeat - Result = VarsUi.ButtonOld; - } - } - } - } - if (VarsUi.ButtonOld == BUTTON_NONE) - { - // If no key - check interface - Result = IOMapUi.Button; - IOMapUi.Button = BUTTON_NONE; - } - if (Result != BUTTON_NONE) - { - // If key - play key sound file - sprintf((char*)pMapSound->SoundFilename,"%s.%s",(char*)UI_KEYCLICK_SOUND,(char*)TXT_FILE_EXT[FILETYPE_SOUND]); - pMapSound->Volume = IOMapUi.Volume; - pMapSound->Mode = SOUND_ONCE; - pMapSound->Flags |= SOUND_UPDATE; - - // Reset power down timer - IOMapUi.Flags |= UI_RESET_SLEEP_TIMER; - } - - return (Result); -} - - -void cUiListLeft(UBYTE Limit,UBYTE *Center) -{ - UBYTE Tmp; - - Tmp = *Center; - if (Tmp > 1) - { - Tmp--; - } - else - { - if (Limit > 2) - { - Tmp = Limit; - } - } - *Center = Tmp; -} - - -void cUiListRight(UBYTE Limit,UBYTE *Center) -{ - UBYTE Tmp; - - Tmp = *Center; - if (Tmp < Limit) - { - Tmp++; - } - else - { - if (Limit > 2) - { - Tmp = 1; - } - } - *Center = Tmp; -} - - -void cUiListCalc(UBYTE Limit,UBYTE *Center,UBYTE *Left,UBYTE *Right) -{ - switch (Limit) - { - case 1 : - { - *Left = 0; - *Right = 0; - } - break; - - case 2 : - { - if ((*Center) == 1) - { - *Left = 0; - *Right = 2; - } - else - { - *Left = 1; - *Right = 0; - } - } - break; - - default : - { - *Left = *Center - 1; - if ((*Left) < 1) - { - *Left = Limit; - } - *Right = *Center + 1; - if ((*Right) > Limit) - { - *Right = 1; - } - } - break; - - } -} - - -UBYTE cUiMenuSearchSensorIcon(UBYTE Sensor) -{ - UBYTE Result = 0; - MENUITEM *MenuItem; - UBYTE Index; - - for (Index = 0;(Index < IOMapUi.pMenu->Items) && (Result == NULL);Index++) - { - MenuItem = &IOMapUi.pMenu->Data[Index]; - if (MenuItem->FunctionParameter == Sensor) - { - Result = MenuItem->IconImageNo; - } - } - - return (Result); -} - - -ULONG cUiMenuGetId(MENUITEM *pMenuItem) -{ - ULONG MenuId; - - MenuId = (ULONG)pMenuItem->ItemId01; - MenuId |= (ULONG)pMenuItem->ItemId23 << 8; - MenuId |= (ULONG)pMenuItem->ItemId45 << 16; - MenuId |= (ULONG)pMenuItem->ItemId67 << 24; - - return (MenuId); -} - - -ULONG cUiMenuGetSpecialMask(MENUITEM *pMenuItem) -{ - ULONG Mask; - - Mask = 0; - if (pMenuItem != NULL) - { - Mask = (ULONG)pMenuItem->SpecialMask0; - Mask |= (ULONG)pMenuItem->SpecialMask1 << 8; - Mask |= (ULONG)pMenuItem->SpecialMask2 << 16; - Mask |= (ULONG)pMenuItem->SpecialMask3 << 24; - } - - return (Mask); -} - - -UBYTE* cUiMenuGetIconImage(UBYTE No) -{ - UBYTE *Image; - - Image = NULL; - if (No < (Icons->ItemsX * Icons->ItemsY)) - { - Image = (UBYTE*)&Icons->Data[No * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)]; - } - - return (Image); -} - - -ULONG cUiMenuMotherId(ULONG Id,UBYTE Level) -{ - ULONG MotherIdMask; - - MotherIdMask = 0xFFFFFFFFL >> ((8 - Level) * 4); - MotherIdMask |= 0xFFFFFFFFL << ((Level + 1) * 4); - - return (Id & MotherIdMask); -} - - -UBYTE cUiMenuIdValid(MENUFILE *pMenuFile,ULONG Id) -{ - ULONG SpecialMask; - ULONG MotherId; - UBYTE Level; - UBYTE Result; - - Result = FALSE; - Level = pMenuFile->MenuLevel; - - if (Level) - { - SpecialMask = pMenuFile->MenuLevels[Level - 1].SpecialFlags; - MotherId = pMenuFile->MenuLevels[Level - 1].Id; - if ((SpecialMask & MENU_SKIP_THIS_MOTHER_ID)) - { - MotherId &= ~(0x0000000F << ((Level - 1) * 4)); - SpecialMask >>= 28; - MotherId |= (SpecialMask << ((Level - 1) * 4)); - } - if (MotherId == cUiMenuMotherId(Id,Level)) - { - Id >>= (Level * 4); - if ((Id & 0x0000000F) && (!(Id & 0xFFFFFFF0))) - { - Result = TRUE; - } - } - } - else - { - if ((Id & 0x0000000F) && (!(Id & 0xFFFFFFF0))) - { - Result = TRUE; - } - } - - return (Result); -} - - -UBYTE cUiMenuGetNoOfMenus(MENU *pMenu,MENUFILE *pMenuFile) -{ - ULONG MenuId; - UBYTE NoOfMenus; - UBYTE Index; - - NoOfMenus = 0; - for (Index = 0;Index < pMenu->Items;Index++) - { - MenuId = cUiMenuGetId(&pMenu->Data[Index]); - - if (cUiMenuIdValid(pMenuFile,MenuId) == TRUE) - { - if ((cUiMenuGetSpecialMask(&pMenu->Data[Index]) & MENU_ONLY_BT_ON)) - { - // BT module must be on - if (!(IOMapUi.BluetoothState & BT_STATE_OFF)) - { - // Yes - NoOfMenus++; - } - } - else - { - if ((cUiMenuGetSpecialMask(&pMenu->Data[Index]) & MENU_ONLY_DATALOG_ENABLED)) - { - // Datalog menu must be enabled - if (VarsUi.NVData.DatalogEnabled) - { - // Yes - NoOfMenus++; - } - } - else - { - // No restrictions - NoOfMenus++; - } - } - } - } - - return (NoOfMenus); -} - - -UBYTE cUiGetMenuItemIndex(MENU *pMenu,MENUFILE *pMenuFile,UBYTE No) -{ - ULONG MenuId; - UBYTE NoOfMenus; - UBYTE Index; - UBYTE TmpIndex = 0; - - NoOfMenus = 0; - for (Index = 0;(Index < pMenu->Items) && (No != NoOfMenus);Index++) - { - MenuId = cUiMenuGetId(&pMenu->Data[Index]); - - if (cUiMenuIdValid(pMenuFile,MenuId) == TRUE) - { - if ((cUiMenuGetSpecialMask(&pMenu->Data[Index]) & MENU_ONLY_BT_ON)) - { - // BT module must be on - if (!(IOMapUi.BluetoothState & BT_STATE_OFF)) - { - // Yes - TmpIndex = Index; - NoOfMenus++; - } - } - else - { - if ((cUiMenuGetSpecialMask(&pMenu->Data[Index]) & MENU_ONLY_DATALOG_ENABLED)) - { - // Datalog menu must be enabled - if (VarsUi.NVData.DatalogEnabled) - { - // Yes - TmpIndex = Index; - NoOfMenus++; - } - } - else - { - // No restrictions - TmpIndex = Index; - NoOfMenus++; - } - } - } - } - if (No != NoOfMenus) - { - Index = TmpIndex + 1; - } - - return (Index); -} - - - -UBYTE cUiMenuGetNo(MENU *pMenu,ULONG Id,UBYTE Level) -{ - ULONG MenuId; - ULONG MotherId; - UBYTE Index; - UBYTE No; - UBYTE NoOfItems; - - No = 0; - NoOfItems = 0; - - MotherId = cUiMenuMotherId(Id,Level); - - for (Index = 0;(Index < pMenu->Items) && (No == 0);Index++) - { - MenuId = cUiMenuGetId(&pMenu->Data[Index]); - - // Scanning all id's until No is found - if (!(MenuId >> ((Level + 1) * 4))) - { - // MenuId is above or on actual level - if (((MenuId >> (Level * 4)) & 0x0000000F)) - { - // MenuId is on actual level - if (MotherId == cUiMenuMotherId(MenuId,Level)) - { - // Same mother id - NoOfItems++; - if (MenuId == Id) - { - No = NoOfItems; - } - } - } - } - } - - return (No); -} - -void cUiUpdateStatus(void) -{ - UWORD Tmp; - UWORD Hyst; - UWORD *pTmp; - UBYTE Pointer; - - if (++VarsUi.UpdateCounter >= RUN_STATUS_CHANGE_TIME) - { - VarsUi.UpdateCounter = 0; - - // Update running status icon pointer - if (++VarsUi.Running >= 12) - { - VarsUi.Running = 0; - } - - // Get battery voltage limits - if ((IoFromAvr.Battery & 0x8000)) - { - IOMapUi.Rechargeable = 1; - pTmp = (UWORD*)RechargeableLimits; - Hyst = RECHARGEABLELIMITHYST; - } - else - { - IOMapUi.Rechargeable = 0; - pTmp = (UWORD*)BatteryLimits; - Hyst = BATTERYLIMITHYST; - } - - // Calculate battery voltage - Tmp = IoFromAvr.Battery & 0x03FF; - Tmp = (UWORD)((float)Tmp * BATTERY_COUNT_TO_MV); - - IOMapUi.BatteryVoltage = Tmp; - - // Find new battery state - Pointer = 0; - while ((Tmp > pTmp[Pointer]) && (Pointer < BATTERYLIMITS)) - { - Pointer++; - } - - // Change battery state - if (Pointer != IOMapUi.BatteryState) - { - if (Pointer > IOMapUi.BatteryState) - { - if (Tmp > (pTmp[IOMapUi.BatteryState] + Hyst)) - { - IOMapUi.BatteryState = Pointer; - } - } - else - { - IOMapUi.BatteryState = Pointer; - } - } - - // Control toggle and bitmap - if (IOMapUi.BatteryState) - { - VarsUi.BatteryToggle = 0; - VarsUi.LowBatt = 0; - } - else - { - if (VarsUi.LowBatt < 255) - { - VarsUi.LowBatt++; - } - - if (VarsUi.BatteryToggle) - { - VarsUi.BatteryToggle = 0; - } - else - { - VarsUi.BatteryToggle = 1; - } - } - - // Ensure frequently status updates - IOMapUi.Flags |= UI_UPDATE; - } - - if ((IOMapUi.Flags & UI_ENABLE_STATUS_UPDATE)) - { - if ((IOMapUi.Flags & UI_UPDATE) || (IOMapUi.Flags & UI_REDRAW_STATUS)) - { - VarsUi.ErrorTimer = 0; - pMapDisplay->pStatusText = (UBYTE*)VarsUi.StatusText; - - // Status line update nessesary - if (IOMapUi.BatteryState < Status->ItemsX) - { - // Update battery status icons - if (IoFromAvr.Battery & 0x8000) - { - VarsUi.NewStatusIcons[STATUSICON_BATTERY] = STATUS_NO_RECHARGEABLE_0 + IOMapUi.BatteryState + VarsUi.BatteryToggle; - } - else - { - VarsUi.NewStatusIcons[STATUSICON_BATTERY] = STATUS_NO_BATTERY_0 + IOMapUi.BatteryState + VarsUi.BatteryToggle; - } - } - - // Update bluetooth status icons - if ((IOMapUi.BluetoothState & (BT_STATE_VISIBLE | BT_STATE_CONNECTED | BT_STATE_OFF)) < Status->ItemsX) - { - VarsUi.NewStatusIcons[STATUSICON_BLUETOOTH] = STATUS_NO_BLUETOOTH_0 + (IOMapUi.BluetoothState & (BT_STATE_VISIBLE | BT_STATE_CONNECTED | BT_STATE_OFF)); - } - - // Update usb status icons - if (IOMapUi.UsbState < 6) - { - VarsUi.NewStatusIcons[STATUSICON_USB] = STATUS_NO_USB_0 + IOMapUi.UsbState; - } - - // Update running status icons - if (IOMapUi.RunState == FALSE) - { - VarsUi.Running = 0; - } - VarsUi.NewStatusIcons[STATUSICON_VM] = STATUS_NO_RUNNING_0 + VarsUi.Running; - - // Update only changed status icons - for (Pointer = 0;Pointer < STATUSICONS;Pointer++) - { - if ((pMapDisplay->StatusIcons[Pointer] != VarsUi.NewStatusIcons[Pointer])) - { - pMapDisplay->StatusIcons[Pointer] = VarsUi.NewStatusIcons[Pointer]; - pMapDisplay->UpdateMask |= STATUSICON_BIT(Pointer); - } - } - - if ((IOMapUi.Flags & UI_REDRAW_STATUS)) - { - // Entire status line needs to be redrawed - if (pMapComm->BrickData.Name[0]) - { - for (Pointer = 0;Pointer < STATUSTEXT_SIZE;Pointer++) - { - VarsUi.StatusText[Pointer] = pMapComm->BrickData.Name[Pointer]; - } - VarsUi.StatusText[Pointer] = 0; - } - pMapDisplay->EraseMask |= SPECIAL_BIT(STATUSTEXT); - pMapDisplay->UpdateMask |= SPECIAL_BIT(STATUSTEXT); - pMapDisplay->UpdateMask |= (SPECIAL_BIT(TOPLINE) | STATUSICON_BITS); - } - - // Clear update flag - IOMapUi.Flags &= ~UI_REDRAW_STATUS; - IOMapUi.Flags &= ~UI_UPDATE; - } - } - else - { - pMapDisplay->UpdateMask &= ~(STATUSICON_BITS | SPECIAL_BIT(TOPLINE) | SPECIAL_BIT(STATUSTEXT)); - } -} - - - - -void cUiMenuCallFunction(UBYTE Function,UBYTE Parameter) -{ - if (Function) - { - VarsUi.Function = Function; - VarsUi.Parameter = Parameter; - } -} - - -void cUiMenuNextFile(void) -{ - MENU *pTmpMenu; - - pTmpMenu = (MENU*)cUiGetMenuPointer(VarsUi.pMenuLevel->NextFileNo); - if (pTmpMenu != NULL) - { - if (VarsUi.MenuFileLevel < (MENUFILELEVELS - 1)) - { - VarsUi.MenuFileLevel++; - VarsUi.MenuFiles[VarsUi.MenuFileLevel].FileId = VarsUi.pMenuLevel->NextFileNo; - VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel = 0; - VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel].ItemIndex = VarsUi.pMenuLevel->NextMenuNo; - IOMapUi.pMenu = pTmpMenu; - } - } -} - - -void cUiMenuPrevFile(void) -{ - if (VarsUi.MenuFileLevel) - { - VarsUi.MenuFileLevel--; - IOMapUi.pMenu = (MENU*)cUiGetMenuPointer(VarsUi.MenuFiles[VarsUi.MenuFileLevel].FileId); - } -} - - -void cUiMenuNext(void) -{ - if (VarsUi.pMenuFile->MenuLevel < (MENULEVELS - 1)) - { - VarsUi.pMenuFile->MenuLevel++; - VarsUi.pMenuFile->MenuLevels[VarsUi.pMenuFile->MenuLevel].ItemIndex = VarsUi.pMenuLevel->NextMenuNo; - } -} - - -void cUiMenuPrev(void) -{ - if (VarsUi.pMenuFile->MenuLevel) - { - VarsUi.pMenuFile->MenuLevel--; - } -} - - -void cUiMenuEnter(void) -{ - // Call function with parameter (if pressent) - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_INIT_CALLS)) - { - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,VarsUi.pMenuLevel->Parameter); - } - - if (VarsUi.EnterOnlyCalls != TRUE) - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_ENTER_LEAVES_MENUFILE)) - { - cUiMenuPrevFile(); - } - else - { - // Load new menu file (if pressent) - if (VarsUi.pMenuLevel->NextFileNo) - { - cUiMenuNextFile(); - } - else - { - // Activate next menu level (if pressent) - if (VarsUi.pMenuLevel->NextMenuNo) - { - cUiMenuNext(); - } - } - } - IOMapUi.State = NEXT_MENU; - } - else - { - VarsUi.EnterOnlyCalls = FALSE; - IOMapUi.State = DRAW_MENU; - } -} - - -void cUiMenuExit(void) -{ - - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_CALLS)) - { - // Call function with parameter (if pressent) - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_INIT_CALLS)) - { - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,VarsUi.pMenuLevel->Parameter); - } - } - - // Call function with 0xFF (if ordered) - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_CALLS_WITH_FF)) - { - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,MENU_EXIT); - } - - if (VarsUi.ExitOnlyCalls != TRUE) - { - if ((VarsUi.pMenuFile->MenuLevel) && (!(VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_LEAVES_MENUFILE))) - { - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_LOAD_MENU)) - { - cUiMenuPrev(); - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_BACK_TWICE)) - { - if (VarsUi.pMenuFile->MenuLevel) - { - cUiMenuPrev(); - } - VarsUi.SecondTime = FALSE; - } - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_BACK_THREE_TIMES)) - { - if (VarsUi.pMenuFile->MenuLevel) - { - cUiMenuPrev(); - } - if (VarsUi.pMenuFile->MenuLevel) - { - cUiMenuPrev(); - } - VarsUi.SecondTime = FALSE; - } - } - else - { - VarsUi.EnterOnlyCalls = FALSE; - VarsUi.ExitOnlyCalls = FALSE; - if (VarsUi.pMenuLevel->NextFileNo) - { - cUiMenuNextFile(); - } - else - { - // Activate next menu level (if pressent) - if (VarsUi.pMenuLevel->NextMenuNo) - { - cUiMenuNext(); - } - } - } - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_LOAD_POINTER)) - { - VarsUi.pMenuFile->MenuLevels[VarsUi.pMenuFile->MenuLevel].ItemIndex = (UBYTE)((VarsUi.pMenuLevel->SpecialFlags) >> 24) & 0x0F; - } - } - else - { - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_LOAD_MENU)) - { - cUiMenuPrevFile(); - } - else - { - VarsUi.EnterOnlyCalls = FALSE; - VarsUi.ExitOnlyCalls = FALSE; - if (VarsUi.pMenuLevel->NextFileNo) - { - cUiMenuNextFile(); - } - else - { - // Activate next menu level (if pressent) - if (VarsUi.pMenuLevel->NextMenuNo) - { - cUiMenuNext(); - } - } - } - } - IOMapUi.State = NEXT_MENU; - } - else - { - VarsUi.ExitOnlyCalls = FALSE; - IOMapUi.State = DRAW_MENU; - } -} - - -void cUiLoadLevel(UBYTE FileLevel,UBYTE MenuLevel,UBYTE MenuIndex) -{ - UBYTE Tmp; - - VarsUi.MenuFileLevel = FileLevel; - VarsUi.MenuFiles[FileLevel].MenuLevel = MenuLevel; - VarsUi.MenuFiles[FileLevel].MenuLevels[MenuLevel].ItemIndex = MenuIndex; - IOMapUi.pMenu = (MENU*)cUiGetMenuPointer(VarsUi.MenuFiles[VarsUi.MenuFileLevel].FileId); - - VarsUi.pMenuFile = &VarsUi.MenuFiles[VarsUi.MenuFileLevel]; - VarsUi.pMenuLevel = &VarsUi.pMenuFile->MenuLevels[VarsUi.pMenuFile->MenuLevel]; - - // Count no of menues on current level - VarsUi.pMenuLevel->Items = cUiMenuGetNoOfMenus(IOMapUi.pMenu,VarsUi.pMenuFile); - - if (VarsUi.pMenuLevel->Items) - { - // if items > 0 -> prepare allways center icon - Tmp = cUiGetMenuItemIndex(IOMapUi.pMenu,VarsUi.pMenuFile,VarsUi.pMenuLevel->ItemIndex); - - if (VarsUi.pMenuItem != &IOMapUi.pMenu->Data[Tmp - 1]) - { - VarsUi.pMenuItem = &IOMapUi.pMenu->Data[Tmp - 1]; - VarsUi.SecondTime = FALSE; - } - - // Save center menu item parameters - VarsUi.pMenuLevel->Id = cUiMenuGetId(VarsUi.pMenuItem); - VarsUi.pMenuLevel->IconImageNo = VarsUi.pMenuItem->IconImageNo; - VarsUi.pMenuLevel->IconText = VarsUi.pMenuItem->IconText; - VarsUi.pMenuLevel->SpecialFlags = cUiMenuGetSpecialMask(VarsUi.pMenuItem); - VarsUi.pMenuLevel->FunctionNo = VarsUi.pMenuItem->FunctionIndex; - VarsUi.pMenuLevel->Parameter = VarsUi.pMenuItem->FunctionParameter; - VarsUi.pMenuLevel->NextFileNo = VarsUi.pMenuItem->FileLoadNo; - VarsUi.pMenuLevel->NextMenuNo = VarsUi.pMenuItem->NextMenu; - } -} - -#include "Functions.inl" - - -void cUiInit(void* pHeader) -{ - pHeaders = pHeader; - VarsUi.Initialized = FALSE; - IOMapUi.BluetoothState = BT_STATE_OFF; - IOMapUi.UsbState = 0; - IOMapUi.State = INIT_DISPLAY; -} - - -void cUiCtrl(void) -{ - UBYTE Tmp; - -// Testcode for low battery voltage -/* - if ((pMapInput->Inputs[0].InvalidData != INVALID_DATA) && (pMapInput->Inputs[0].ADRaw < 500)) - { - if (VarsUi.LowBatt < 255) - { - VarsUi.LowBatt++; - } - } - else - { - VarsUi.LowBatt = 0; - } -*/ -// - -// Testcode for BT connect request -/* - if ((pMapInput->Inputs[0].InvalidData != INVALID_DATA) && (pMapInput->Inputs[0].ADRaw < 500)) - { - IOMapUi.BluetoothState |= BT_CONNECT_REQUEST | BT_PIN_REQUEST; - } -*/ -// - -// Testcode for BT error attention -/* - if ((pMapInput->Inputs[0].InvalidData != INVALID_DATA) && (pMapInput->Inputs[0].ADRaw < 500)) - { - IOMapUi.Error = LR_UNKOWN_ADDR; - IOMapUi.BluetoothState |= BT_ERROR_ATTENTION; - } -*/ -// - -// Testcode for execute program -/* - if ((pMapInput->Inputs[0].InvalidData != INVALID_DATA) && (pMapInput->Inputs[0].ADRaw < 500)) - { - if ((!(IOMapUi.Flags & UI_EXECUTE_LMS_FILE)) && (IOMapUi.State > INIT_MENU)) - { - strcpy((char*)IOMapUi.LMSfilename,"Untitled-1.rxe"); - IOMapUi.Flags |= UI_EXECUTE_LMS_FILE; - } - } -*/ -// - -// Testcode for force off -/* - if ((pMapInput->Inputs[0].InvalidData != INVALID_DATA) && (pMapInput->Inputs[0].ADRaw < 500) && (VarsUi.Initialized == TRUE)) - { - IOMapUi.ForceOff = TRUE; - } -*/ -// - - - VarsUi.CRPasskey++; - VarsUi.ButtonTimer++; - VarsUi.OBPTimer++; - switch (IOMapUi.State) - { - case INIT_DISPLAY : // Load font and icons - { -// pMapLoader->pFunc(DELETEUSERFLASH,NULL,NULL,NULL); - - VarsUi.Initialized = FALSE; - - IOMapUi.Flags = UI_BUSY; - IOMapUi.RunState = 1; - IOMapUi.BatteryState = 0; - IOMapUi.Error = 0; - IOMapUi.ForceOff = FALSE; - VarsUi.LowBatt = 0; - VarsUi.LowBattHasOccured = 0; - - pMapDisplay->pFont = (FONT*)Font; - pMapDisplay->pStatusIcons = (ICON*)Status; - pMapDisplay->pStatusText = (UBYTE*)VarsUi.StatusText; - pMapDisplay->pStepIcons = (ICON*)Step; - - VarsUi.State = 0; - VarsUi.Pointer = 0; - VarsUi.Timer = CONFIG_INTRO ? -INTRO_START_TIME : 0; - - VarsUi.FNOFState = 0; - VarsUi.FBState = 0; - - VarsUi.UpdateCounter = 0; - VarsUi.Running = 0; - VarsUi.BatteryToggle = 0; - - VarsUi.GUSState = 0; - - IOMapUi.pMenu = (MENU*)cUiGetMenuPointer(0); - IOMapUi.State = CONFIG_INTRO ? INIT_INTRO : INIT_WAIT; - - pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_BACKGROUND); - pMapDisplay->pBitmaps[BITMAP_1] = CONFIG_INTRO ? (BMPMAP*)Intro[VarsUi.Pointer] : RCXintro_16; - pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1); - pMapDisplay->Flags |= DISPLAY_ON; - - cUiNVRead(); - IOMapUi.Volume = VarsUi.NVData.VolumeStep; - IOMapUi.SleepTimeout = PowerOffTimeSteps[VarsUi.NVData.PowerdownCode]; - } - break; - -#if CONFIG_INTRO - case INIT_LOW_BATTERY : - { - if (++VarsUi.Timer >= (INTRO_LOWBATT_TIME)) - { - VarsUi.LowBattHasOccured = 2; - pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_BACKGROUND); - pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Intro[VarsUi.Pointer]; - pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1); - IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE; - VarsUi.State = 0; - VarsUi.Pointer = 0; - VarsUi.Timer = -INTRO_START_TIME; - IOMapUi.State = INIT_INTRO; - } - } - break; - - case INIT_INTRO : - { - if (VarsUi.LowBattHasOccured == 1) - { - IOMapUi.Flags |= UI_ENABLE_STATUS_UPDATE; - IOMapUi.Flags |= UI_UPDATE; - IOMapUi.Flags |= UI_REDRAW_STATUS; - VarsUi.Timer = 0; - IOMapUi.State = INIT_LOW_BATTERY; - } - else - { - if (VarsUi.LowBattHasOccured == 0) - { - if (VarsUi.LowBatt) - { - pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)LowBattery; - pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1); - VarsUi.LowBattHasOccured = 1; - } - } - if (++VarsUi.Timer >= (INTRO_SHIFT_TIME)) - { - switch (VarsUi.State) - { - case 0 : - { - pMapDisplay->Flags &= ~DISPLAY_REFRESH; - VarsUi.State++; - } - break; - - case 1 : - { - if ((pMapDisplay->Flags & DISPLAY_REFRESH_DISABLED)) - { - if (VarsUi.Pointer < NO_OF_INTROBITMAPS) - { - pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1); - pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Intro[VarsUi.Pointer]; - pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1); - if (VarsUi.Pointer == 11) - { - sprintf((char*)pMapSound->SoundFilename,"%s.%s",(char*)UI_STARTUP_SOUND,(char*)TXT_FILE_EXT[FILETYPE_SOUND]); - pMapSound->Volume = IOMapUi.Volume; - pMapSound->Mode = SOUND_ONCE; - pMapSound->Flags |= SOUND_UPDATE; - } - VarsUi.Pointer++; - } - else - { - pMapDisplay->Flags |= DISPLAY_REFRESH; - IOMapUi.State = INIT_WAIT; - } - VarsUi.State++; - } - } - break; - - default : - { - if (!(pMapDisplay->UpdateMask & BITMAP_BIT(BITMAP_1))) - { - pMapDisplay->Flags |= DISPLAY_REFRESH; - VarsUi.Timer = 0; - VarsUi.State = 0; - } - } - break; - - } - } - } - } - break; -#endif /* CONFIG_INTRO */ - - case INIT_WAIT : - { - if (++VarsUi.Timer >= INTRO_STOP_TIME) - { - pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND); - IOMapUi.State = INIT_MENU; - } - } - break; - - case INIT_MENU : - { - // Restart menu system - VarsUi.Function = 0; - VarsUi.MenuFileLevel = 0; - - cUiLoadLevel(0,0,1); - cUiLoadLevel(0,1,1); - - VarsUi.EnterOnlyCalls = FALSE; - VarsUi.ExitOnlyCalls = FALSE; - - IOMapUi.State = NEXT_MENU; - } - break; - - case NEXT_MENU : // prepare icons - { - // Init various variables - VarsUi.State = 0; - - // Init icon pointers - pMapDisplay->pMenuIcons[MENUICON_LEFT] = NULL; - pMapDisplay->pMenuIcons[MENUICON_CENTER] = NULL; - pMapDisplay->pMenuIcons[MENUICON_RIGHT] = NULL; - - cUiLoadLevel(VarsUi.MenuFileLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel].ItemIndex); - - // Find menu icons - if (VarsUi.pMenuLevel->Items) - { - // Prepare center icon - pMapDisplay->pMenuIcons[MENUICON_CENTER] = cUiMenuGetIconImage(VarsUi.pMenuLevel->IconImageNo); - pMapDisplay->pMenuText = VarsUi.pMenuLevel->IconText; - - if (VarsUi.pMenuLevel->Items == 2) - { - // if 2 menues -> prepare left or right icon - if (VarsUi.pMenuLevel->ItemIndex == 1) - { - Tmp = cUiGetMenuItemIndex(IOMapUi.pMenu,VarsUi.pMenuFile,2); - if (Tmp) - { - Tmp--; - pMapDisplay->pMenuIcons[MENUICON_RIGHT] = cUiMenuGetIconImage(IOMapUi.pMenu->Data[Tmp].IconImageNo); - } - } - else - { - Tmp = cUiGetMenuItemIndex(IOMapUi.pMenu,VarsUi.pMenuFile,1); - if (Tmp) - { - Tmp--; - pMapDisplay->pMenuIcons[MENUICON_LEFT] = cUiMenuGetIconImage(IOMapUi.pMenu->Data[Tmp].IconImageNo); - } - } - } - - if (VarsUi.pMenuLevel->Items > 2) - { - // if more menues -> prepare left and right icon - if (VarsUi.pMenuLevel->ItemIndex > 1) - { - Tmp = VarsUi.pMenuLevel->ItemIndex -1; - } - else - { - Tmp = VarsUi.pMenuLevel->Items; - } - Tmp = cUiGetMenuItemIndex(IOMapUi.pMenu,VarsUi.pMenuFile,Tmp); - if (Tmp) - { - Tmp--; - pMapDisplay->pMenuIcons[MENUICON_LEFT] = cUiMenuGetIconImage(IOMapUi.pMenu->Data[Tmp].IconImageNo); - - } - if (VarsUi.pMenuLevel->ItemIndex < VarsUi.pMenuLevel->Items) - { - Tmp = VarsUi.pMenuLevel->ItemIndex + 1; - } - else - { - Tmp = 1; - } - Tmp = cUiGetMenuItemIndex(IOMapUi.pMenu,VarsUi.pMenuFile,Tmp); - if (Tmp) - { - Tmp--; - pMapDisplay->pMenuIcons[MENUICON_RIGHT] = cUiMenuGetIconImage(IOMapUi.pMenu->Data[Tmp].IconImageNo); - } - } - } - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_ENTER_ONLY_CALLS)) - { - VarsUi.EnterOnlyCalls = TRUE; - } - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_ONLY_CALLS)) - { - VarsUi.ExitOnlyCalls = TRUE; - } - - IOMapUi.State = DRAW_MENU; - } - break; - - case DRAW_MENU : // If no function active -> erase screen, draw statusline and menu icons - { - if (VarsUi.Function) - { - // Function active - if (VarsUi.Function < FUNC_NO_MAX) - { - if (Functions[VarsUi.Function](VarsUi.Parameter) == 0) - { - VarsUi.Function = 0; - } - } - else - { - VarsUi.Function = 0; - } - } - else - { - // function inactive - erase screen - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_LEAVE_BACKGROUND)) - { - pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE); - - // Draw only icons, frame and icon text - pMapDisplay->UpdateMask = (MENUICON_BITS | SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT)); - pMapDisplay->TextLinesCenterFlags = 0; - } - else - { - pMapDisplay->EraseMask |= (SPECIAL_BIT(MENUTEXT) | MENUICON_BITS); - - // Draw icons, frame and icon text - pMapDisplay->UpdateMask |= (MENUICON_BITS | SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT)); - } - - // Draw status - IOMapUi.Flags |= (UI_ENABLE_STATUS_UPDATE | UI_UPDATE | UI_REDRAW_STATUS); - - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_INIT_CALLS_WITH_0) && (VarsUi.SecondTime == FALSE)) - { - VarsUi.SecondTime = TRUE; - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,MENU_INIT); - } - else - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_INIT_CALLS_WITH_1) && (VarsUi.SecondTime == FALSE)) - { - VarsUi.SecondTime = TRUE; - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,MENU_INIT_ALTERNATIVE); - } - else - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_INIT_CALLS) && (VarsUi.SecondTime == FALSE)) - { - VarsUi.SecondTime = TRUE; - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,VarsUi.pMenuLevel->Parameter); - } - else - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_AUTO_PRESS_ENTER)) - { - IOMapUi.State = ENTER_PRESSED; - } - else - { - IOMapUi.State = TEST_BUTTONS; - } - } - } - } - } - } - break; - - case TEST_BUTTONS : // Test buttons to execute new functions and new menus - { - if (VarsUi.Initialized == FALSE) - { - VarsUi.Initialized = TRUE; - IOMapUi.Flags &= ~UI_BUSY; - } - - switch (cUiReadButtons()) - { - case BUTTON_LEFT : - { - IOMapUi.State = LEFT_PRESSED; - } - break; - - case BUTTON_RIGHT : - { - IOMapUi.State = RIGHT_PRESSED; - } - break; - - case BUTTON_ENTER : - { - IOMapUi.State = ENTER_PRESSED; - } - break; - - case BUTTON_EXIT : - { - if (!(VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_DISABLE)) - { - IOMapUi.State = EXIT_PRESSED; - } - } - break; - - } - - } - break; - - case LEFT_PRESSED : - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_LEFT_RIGHT_AS_CALL)) - { - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,MENU_LEFT); - } - else - { - VarsUi.SecondTime = FALSE; - VarsUi.EnterOnlyCalls = FALSE; - VarsUi.ExitOnlyCalls = FALSE; - - if (VarsUi.pMenuLevel->ItemIndex > 1) - { - VarsUi.pMenuLevel->ItemIndex--; - } - else - { - if (VarsUi.pMenuLevel->Items > 2) - { - VarsUi.pMenuLevel->ItemIndex = VarsUi.pMenuLevel->Items; - } - } - } - IOMapUi.State = NEXT_MENU; - } - break; - - case RIGHT_PRESSED : - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_LEFT_RIGHT_AS_CALL)) - { - cUiMenuCallFunction(VarsUi.pMenuLevel->FunctionNo,MENU_RIGHT); - } - else - { - VarsUi.SecondTime = FALSE; - VarsUi.EnterOnlyCalls = FALSE; - VarsUi.ExitOnlyCalls = FALSE; - - if (VarsUi.pMenuLevel->ItemIndex < VarsUi.pMenuLevel->Items) - { - VarsUi.pMenuLevel->ItemIndex++; - } - else - { - if (VarsUi.pMenuLevel->Items > 2) - { - VarsUi.pMenuLevel->ItemIndex = 1; - } - } - } - IOMapUi.State = NEXT_MENU; - } - break; - - case ENTER_PRESSED : - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_ENTER_ACT_AS_EXIT)) - { - cUiMenuExit(); - } - else - { - cUiMenuEnter(); - } - } - break; - - case EXIT_PRESSED : - { - if ((VarsUi.pMenuLevel->SpecialFlags & MENU_EXIT_ACT_AS_ENTER)) - { - cUiMenuEnter(); - } - else - { - cUiMenuExit(); - } - } - break; - - case CONNECT_REQUEST : - { - if (cUiBTConnectRequest(MENU_INIT) == 0) - { - IOMapUi.BluetoothState &= ~BT_CONNECT_REQUEST; - cUiLoadLevel(0,1,1); - IOMapUi.State = NEXT_MENU; - IOMapUi.Flags &= ~UI_BUSY; - } - } - break; - - case EXECUTE_FILE : - { - cUiLoadLevel(0,1,1); - cUiMenuEnter(); - cUiLoadLevel(VarsUi.MenuFileLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel].ItemIndex); - cUiMenuEnter(); - cUiLoadLevel(VarsUi.MenuFileLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel].ItemIndex); - cUiMenuEnter(); - cUiLoadLevel(VarsUi.MenuFileLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel,VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel].ItemIndex); - - VarsUi.Function = 0; - VarsUi.State = 0; - VarsUi.Pointer = 0; - VarsUi.FNOFState = 0; - VarsUi.FBState = 0; - VarsUi.GUSState = 0; - - strcpy((char*)VarsUi.SelectedFilename,(char*)IOMapUi.LMSfilename); - IOMapUi.State = EXECUTING_FILE; - VarsUi.FileType = FILETYPE_LMS; - cUiFileRun(MENU_INIT); - } - break; - - case EXECUTING_FILE : - { - if (cUiFileRun(MENU_RUN) == 0) - { - IOMapUi.Flags &= ~UI_EXECUTE_LMS_FILE; - IOMapUi.State = NEXT_MENU; - } - } - break; - - case LOW_BATTERY : - { - if (DISPLAY_IDLE) - { - if (cUiReadButtons() != BUTTON_NONE) - { - pMapDisplay->Flags &= ~DISPLAY_POPUP; - pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.LowBattSavedBitmap; - IOMapUi.State = VarsUi.LowBattSavedState; - IOMapUi.Flags &= ~UI_BUSY; - } - } - } - break; - - case BT_ERROR : - { - switch (IOMapUi.Error) - { - case LR_COULD_NOT_SAVE : - { - Tmp = TXT_FB_BT_ERROR_LR_COULD_NOT_SAVE_1; - } - break; - - case LR_STORE_IS_FULL : - { - Tmp = TXT_FB_BT_ERROR_LR_STORE_IS_FULL_1; - } - break; - - default : - { - Tmp = TXT_FB_BT_ERROR_LR_UNKOWN_ADDR_1; - } - break; - - } - - if (!cUiFeedback((BMPMAP*)Fail,Tmp,Tmp + 1,DISPLAY_SHOW_ERROR_TIME)) - { - IOMapUi.BluetoothState &= ~BT_ERROR_ATTENTION; - cUiLoadLevel(0,1,1); - IOMapUi.State = NEXT_MENU; - IOMapUi.Flags &= ~UI_BUSY; - } - } - break; - - } - - // Check for low battery voltage - if (VarsUi.LowBatt >= LOW_BATT_THRESHOLD) - { - if (!VarsUi.LowBattHasOccured) - { - if (DISPLAY_IDLE) - { - if (!(IOMapUi.Flags & UI_BUSY)) - { - pMapDisplay->Flags |= DISPLAY_POPUP; - VarsUi.LowBattHasOccured = 1; - VarsUi.LowBattSavedState = IOMapUi.State; - VarsUi.LowBattSavedBitmap = (UBYTE*)pMapDisplay->pBitmaps[BITMAP_1]; - pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)LowBattery; - pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1); - IOMapUi.Flags |= UI_REDRAW_STATUS; - IOMapUi.Flags |= UI_BUSY; - IOMapUi.State = LOW_BATTERY; - } - } - } - } - - // Check for incomming BT connection requests - if ((IOMapUi.BluetoothState & BT_CONNECT_REQUEST) && (!(IOMapUi.Flags & UI_BUSY))) - { - IOMapUi.Flags |= UI_BUSY; - IOMapUi.State = CONNECT_REQUEST; - } - - // Check for BT errors - if ((IOMapUi.BluetoothState & BT_ERROR_ATTENTION) && (!(IOMapUi.Flags & UI_BUSY))) - { - IOMapUi.Flags |= UI_BUSY; - IOMapUi.State = BT_ERROR; - } - - // Check for incomming execute program - if ((IOMapUi.Flags & UI_EXECUTE_LMS_FILE) && (!(IOMapUi.Flags & UI_BUSY))) - { - // Reset power down timer - IOMapUi.Flags |= UI_RESET_SLEEP_TIMER; - - // Set state and busy - IOMapUi.Flags |= UI_BUSY; - IOMapUi.State = EXECUTE_FILE; - } - - // Check for power timeout - if ((IOMapUi.Flags & UI_RESET_SLEEP_TIMER)) - { - IOMapUi.Flags &= ~UI_RESET_SLEEP_TIMER; - IOMapUi.SleepTimer = 0; - VarsUi.SleepTimer = 0; - } - if (IOMapUi.SleepTimeout) - { - if (++VarsUi.SleepTimer >= 60000) - { - VarsUi.SleepTimer = 0; - if (++IOMapUi.SleepTimer >= IOMapUi.SleepTimeout) - { - IOMapUi.ForceOff = TRUE; - } - } - } - else - { - IOMapUi.Flags |= UI_RESET_SLEEP_TIMER; - } - - // Check for "long prees on exit" power off - if ((pMapButton->State[BTN1] & LONG_PRESSED_EV) && (pMapCmd->ProgStatus != PROG_RUNNING) && (VarsUi.Initialized == TRUE) && (VarsUi.State == 0)) - { - IOMapUi.ForceOff = TRUE; - } - - // Check for "force" off - if (IOMapUi.ForceOff != FALSE) - { - IOMapUi.ForceOff = FALSE; - VarsUi.Function = FUNC_NO_OFF; - VarsUi.Parameter = MENU_INIT; - VarsUi.State = 0; - IOMapUi.State = DRAW_MENU; - } - - // Update status line - cUiUpdateStatus(); -} - - -void cUiExit(void) -{ - VarsUi.Initialized = FALSE; - IOMapUi.State = INIT_DISPLAY; -} -- cgit v1.2.3