aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source
diff options
context:
space:
mode:
Diffstat (limited to 'AT91SAM7S256/Source')
-rw-r--r--AT91SAM7S256/Source/BtTest.inc1613
-rw-r--r--AT91SAM7S256/Source/Connections.txt23
-rw-r--r--AT91SAM7S256/Source/Cursor.txt13
-rw-r--r--AT91SAM7S256/Source/Devices.txt23
-rw-r--r--AT91SAM7S256/Source/Display.txt14
-rw-r--r--AT91SAM7S256/Source/Fail.txt14
-rw-r--r--AT91SAM7S256/Source/Font.txt17
-rw-r--r--AT91SAM7S256/Source/Functions.inl4331
-rw-r--r--AT91SAM7S256/Source/Icons.txt293
-rw-r--r--AT91SAM7S256/Source/Info.txt14
-rw-r--r--AT91SAM7S256/Source/LowBattery.txt18
-rw-r--r--AT91SAM7S256/Source/Mainmenu.rms72
-rw-r--r--AT91SAM7S256/Source/Ok.txt13
-rw-r--r--AT91SAM7S256/Source/Port.txt12
-rw-r--r--AT91SAM7S256/Source/RCXintro_1.txt19
-rw-r--r--AT91SAM7S256/Source/RCXintro_10.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_11.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_12.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_13.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_14.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_15.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_16.txt13
-rw-r--r--AT91SAM7S256/Source/RCXintro_2.txt19
-rw-r--r--AT91SAM7S256/Source/RCXintro_3.txt19
-rw-r--r--AT91SAM7S256/Source/RCXintro_4.txt19
-rw-r--r--AT91SAM7S256/Source/RCXintro_5.txt19
-rw-r--r--AT91SAM7S256/Source/RCXintro_6.txt17
-rw-r--r--AT91SAM7S256/Source/RCXintro_7.txt16
-rw-r--r--AT91SAM7S256/Source/RCXintro_8.txt14
-rw-r--r--AT91SAM7S256/Source/RCXintro_9.txt14
-rw-r--r--AT91SAM7S256/Source/Running.txt59
-rw-r--r--AT91SAM7S256/Source/Status.txt17
-rw-r--r--AT91SAM7S256/Source/Step.txt19
-rw-r--r--AT91SAM7S256/Source/Submenu01.rms128
-rw-r--r--AT91SAM7S256/Source/Submenu02.rms401
-rw-r--r--AT91SAM7S256/Source/Submenu03.rms233
-rw-r--r--AT91SAM7S256/Source/Submenu04.rms163
-rw-r--r--AT91SAM7S256/Source/Submenu05.rms128
-rw-r--r--AT91SAM7S256/Source/Submenu06.rms51
-rw-r--r--AT91SAM7S256/Source/Submenu07.rms142
-rw-r--r--AT91SAM7S256/Source/Test1.txt19
-rw-r--r--AT91SAM7S256/Source/Test2.txt19
-rw-r--r--AT91SAM7S256/Source/Ui.txt72
-rw-r--r--AT91SAM7S256/Source/Wait.txt14
-rw-r--r--AT91SAM7S256/Source/c_button.c134
-rw-r--r--AT91SAM7S256/Source/c_button.h37
-rw-r--r--AT91SAM7S256/Source/c_button.iom61
-rw-r--r--AT91SAM7S256/Source/c_cmd.c8020
-rw-r--r--AT91SAM7S256/Source/c_cmd.h885
-rw-r--r--AT91SAM7S256/Source/c_cmd.iom202
-rw-r--r--AT91SAM7S256/Source/c_cmd_bytecodes.h119
-rw-r--r--AT91SAM7S256/Source/c_cmd_drawing.inc894
-rw-r--r--AT91SAM7S256/Source/c_comm.c3714
-rw-r--r--AT91SAM7S256/Source/c_comm.h154
-rw-r--r--AT91SAM7S256/Source/c_comm.iom223
-rw-r--r--AT91SAM7S256/Source/c_display.c849
-rw-r--r--AT91SAM7S256/Source/c_display.h43
-rw-r--r--AT91SAM7S256/Source/c_display.iom177
-rw-r--r--AT91SAM7S256/Source/c_input.c1335
-rw-r--r--AT91SAM7S256/Source/c_input.h67
-rw-r--r--AT91SAM7S256/Source/c_input.iom175
-rw-r--r--AT91SAM7S256/Source/c_ioctrl.c78
-rw-r--r--AT91SAM7S256/Source/c_ioctrl.h28
-rw-r--r--AT91SAM7S256/Source/c_ioctrl.iom35
-rw-r--r--AT91SAM7S256/Source/c_loader.c464
-rw-r--r--AT91SAM7S256/Source/c_loader.h44
-rw-r--r--AT91SAM7S256/Source/c_loader.iom85
-rw-r--r--AT91SAM7S256/Source/c_lowspeed.c236
-rw-r--r--AT91SAM7S256/Source/c_lowspeed.h61
-rw-r--r--AT91SAM7S256/Source/c_lowspeed.iom95
-rw-r--r--AT91SAM7S256/Source/c_output.c180
-rw-r--r--AT91SAM7S256/Source/c_output.h31
-rw-r--r--AT91SAM7S256/Source/c_output.iom94
-rw-r--r--AT91SAM7S256/Source/c_sound.c309
-rw-r--r--AT91SAM7S256/Source/c_sound.h44
-rw-r--r--AT91SAM7S256/Source/c_sound.iom109
-rw-r--r--AT91SAM7S256/Source/c_ui.c1944
-rw-r--r--AT91SAM7S256/Source/c_ui.h387
-rw-r--r--AT91SAM7S256/Source/c_ui.iom127
-rw-r--r--AT91SAM7S256/Source/config.h10
-rw-r--r--AT91SAM7S256/Source/d_bt.c452
-rw-r--r--AT91SAM7S256/Source/d_bt.h39
-rw-r--r--AT91SAM7S256/Source/d_bt.r347
-rw-r--r--AT91SAM7S256/Source/d_button.c36
-rw-r--r--AT91SAM7S256/Source/d_button.h24
-rw-r--r--AT91SAM7S256/Source/d_button.r189
-rw-r--r--AT91SAM7S256/Source/d_display.c53
-rw-r--r--AT91SAM7S256/Source/d_display.h39
-rw-r--r--AT91SAM7S256/Source/d_display.r374
-rw-r--r--AT91SAM7S256/Source/d_hispeed.c48
-rw-r--r--AT91SAM7S256/Source/d_hispeed.h25
-rw-r--r--AT91SAM7S256/Source/d_hispeed.r190
-rw-r--r--AT91SAM7S256/Source/d_input.c152
-rw-r--r--AT91SAM7S256/Source/d_input.h48
-rw-r--r--AT91SAM7S256/Source/d_input.r312
-rw-r--r--AT91SAM7S256/Source/d_ioctrl.c47
-rw-r--r--AT91SAM7S256/Source/d_ioctrl.h25
-rw-r--r--AT91SAM7S256/Source/d_ioctrl.r237
-rw-r--r--AT91SAM7S256/Source/d_loader.c1480
-rw-r--r--AT91SAM7S256/Source/d_loader.h109
-rw-r--r--AT91SAM7S256/Source/d_loader.r117
-rw-r--r--AT91SAM7S256/Source/d_lowspeed.c77
-rw-r--r--AT91SAM7S256/Source/d_lowspeed.h28
-rw-r--r--AT91SAM7S256/Source/d_lowspeed.r612
-rw-r--r--AT91SAM7S256/Source/d_output.c1415
-rw-r--r--AT91SAM7S256/Source/d_output.h103
-rw-r--r--AT91SAM7S256/Source/d_output.r306
-rw-r--r--AT91SAM7S256/Source/d_sound.c70
-rw-r--r--AT91SAM7S256/Source/d_sound.h42
-rw-r--r--AT91SAM7S256/Source/d_sound.r515
-rw-r--r--AT91SAM7S256/Source/d_sound_adpcm.r158
-rw-r--r--AT91SAM7S256/Source/d_timer.c62
-rw-r--r--AT91SAM7S256/Source/d_timer.h32
-rw-r--r--AT91SAM7S256/Source/d_timer.r76
-rw-r--r--AT91SAM7S256/Source/d_usb.c946
-rw-r--r--AT91SAM7S256/Source/d_usb.h51
-rw-r--r--AT91SAM7S256/Source/d_usb.r65
-rw-r--r--AT91SAM7S256/Source/m_sched.c94
-rw-r--r--AT91SAM7S256/Source/m_sched.h135
-rw-r--r--AT91SAM7S256/Source/modules.h338
-rw-r--r--AT91SAM7S256/Source/stdconst.h74
121 files changed, 0 insertions, 39174 deletions
diff --git a/AT91SAM7S256/Source/BtTest.inc b/AT91SAM7S256/Source/BtTest.inc
deleted file mode 100644
index 65575af..0000000
--- a/AT91SAM7S256/Source/BtTest.inc
+++ /dev/null
@@ -1,1613 +0,0 @@
-//******* TestPrg ************************************************************
-
-//#define TESTPRG // If defined the test program will be included
-
-#ifndef BUILD_DATE
-# define BUILD_DATE ""
-#endif
-
-#ifdef TESTPRG
-#include "Test1.txt"
-#include "Test2.txt"
-#endif
-
-extern void BtIo(void);
-
-void GetProtocolVersion(UBYTE *String)
-{
- char Tmp[DISPLAYLINE_LENGTH + 1];
- snprintf(Tmp, sizeof(Tmp), "%d.%d.%d", (FIRMWAREVERSION >> 8) & 0xFF, FIRMWAREVERSION & 0xFF, FIRMWAREPATCH);
- snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "FWi %*s", DISPLAYLINE_LENGTH - 4, Tmp);
-}
-
-
-void GetARMBuild(UBYTE *String)
-{
- snprintf((char*)String, DISPLAYLINE_LENGTH + 1, "%s", BUILD_DATE);
-}
-
-
-void GetBC4Build(UBYTE *String)
-{
- sprintf((char*)String,"BC4 %2X.%02X",pMapComm->BrickData.BluecoreVersion[1],pMapComm->BrickData.BluecoreVersion[0]);
-}
-
-
-void GetAVRBuild(UBYTE *String)
-{
- sprintf((char*)String,"AVR %1u.%02u",((IoFromAvr.Battery >> 13) & 3),((IoFromAvr.Battery >> 10) & 7));
-}
-
-
-void GetBC4Address(UBYTE *String)
-{
- UWORD Count;
- UBYTE Tmp;
-
- Count = (UWORD)sprintf((char*)String,"ID ");
- for (Tmp = 0;(Tmp < (SIZE_OF_BDADDR - 1)) && (Count <= (DISPLAYLINE_LENGTH - 2));Tmp++)
- {
- Count += (UWORD)sprintf((char*)&String[Count],"%02X",(UWORD)(pMapComm->BrickData.BdAddr[Tmp]) & 0xFF);
- }
-}
-
-
-enum TSTPRG
-{
- SYSTEM_INIT = 1,
- SYSTEM_UNLOCK_INIT,
- SYSTEM_UNLOCK,
- SYSTEM_PAGE,
- TIMER_INIT,
- TIMER_SHOW,
- TIMER_HOLD,
- BT_PAGE,
- BT_RESET,
- BT_RESETTING,
- BT_LIST_INIT,
- BT_LIST,
- BT_CONN_INIT,
- BT_CONN,
- BT_UPDATE_FW,
- TSTPRG_INIT,
- TSTPRG_SELECT_SUBTEST,
-
- TSTPRG_SENSOR_INIT,
- TSTPRG_SELECT_SENSOR,
- TSTPRG_TOUCH_SENSOR_INIT,
- TSTPRG_TOUCH_SENSOR,
- TSTPRG_SOUND_SENSOR_SELECT,
- TSTPRG_SOUND_SENSOR_INIT,
- TSTPRG_SOUND_SENSOR,
- TSTPRG_LIGHT_SENSOR_SELECT,
- TSTPRG_LIGHT_SENSOR_INIT,
- TSTPRG_LIGHT_SENSOR,
- TSTPRG_SKIP_SENSOR,
-
- TSTPRG_RCX_INIT,
- TSTPRG_RCX_SELECT,
- TSTPRG_RCX_DISPLAY_INIT,
- TSTPRG_RCX_DISPLAY,
- TSTPRG_RCX_INPUT_SELECT,
- TSTPRG_RCX_INPUT_INIT,
- TSTPRG_RCX_INPUT,
- TSTPRG_RCX_DIGITAL_INIT,
- TSTPRG_RCX_DIGITAL_OK,
- TSTPRG_RCX_DIGITAL_FAIL,
- TSTPRG_RCX_DIGITAL,
- TSTPRG_RCX_MOTOR_INIT,
- TSTPRG_RCX_MOTOR,
- TSTPRG_SKIP_RCX_MOTOR,
- TSTPRG_SKIP_RCX,
-
- TSTPRG_MOTOR_INIT,
- TSTPRG_MOTOR,
- TSTPRG_SKIP_MOTOR,
-
- TSTPRG_SKIP,
- TSTPRG_WAIT
-};
-
-const UBYTE TXT_EMPTY[] = " ";
-const UBYTE TXT_LINE[] = "----------------";
-
-#ifdef TESTPRG
-
-const UBYTE TXT_TEST[] = "Timer Test Bt ";
-
-const UBYTE TXT_TIMER[] = "Reset Hold ";
-const UBYTE TXT_TIMER_HOLD[] = " Continue ";
-
-const UBYTE TXT_LAST[] = "Last UI->BT Cmd.";
-const UBYTE TXT_BT_PAGE[] = "Reset List BtIo";
-
-const UBYTE TXT_RESETTING[] = " Resetting! ";
-
-const UBYTE TXT_BT_LIST[] = "Down ConTab Up ";
-const UBYTE TXT_BT_CONN[] = "Down Update Up ";
-
-const UBYTE TXT_BTUPDATE[] = "BT update mode !";
-const UBYTE TXT_DONE[] = " When done ";
-const UBYTE TXT_RESET[] = " activate reset ";
-const UBYTE TXT_REBOOT[] = "button to reboot";
-
-const UBYTE TXT_TESTPRG[] = " TestPrg V0.08 ";
-const UBYTE TXT_SELECT[] = "Select sub test ";
-const UBYTE TXT_SUBTEST[] = "Sens. RCX Motor";
-
-const UBYTE TXT_SELECT_SENSOR[] = " Select sensor ";
-const UBYTE TXT_SENSORS[] = "Touch Snd. Light";
-
-const UBYTE TXT_SELECT_TYPE[] = " Select type ";
-const UBYTE TXT_SOUND_SENSORS[] = " DB DBA ";
-const UBYTE TXT_LIGHT_SENSORS[] = "Pasive Active";
-
-const UBYTE TXT_SENSOR_TOUCH[] = "Touch Sensor Tst";
-const UBYTE TXT_SENSOR_SOUND_DB[] = "DB Sound Sens.";
-const UBYTE TXT_SENSOR_SOUND_DBA[] = "DBA Sound Sens.";
-const UBYTE TXT_SOUND_STOP[] = "440Hz Stop 4KHz";
-const UBYTE TXT_SENSOR_LIGHT_PASIVE[] = "Pas. Light Sens.";
-const UBYTE TXT_SENSOR_LIGHT_ACTIVE[] = "Act. Light Sens.";
-
-const UBYTE TXT_SUBTEST_STOP[] = " Stop ";
-
-const UBYTE TXT_MOTOR[] = " Motor test ";
-const UBYTE TXT_MOTOR_HEADER[] = "Outp Set Cnt";
-const UBYTE TXT_MOTOR_STOP[] = "Bwd Stop Fwd";
-
-const UBYTE TXT_RCX[] = " RCX test ";
-const UBYTE TXT_RCX_STOP[] = "Inp Disp Outp";
-const UBYTE TXT_RCX_INPUT_PASIVE[] = "Input pasive Tst";
-const UBYTE TXT_RCX_INPUT_ACTIVE[] = "Input active Tst";
-const UBYTE TXT_RCX_INPUT_SELECT[] = "Pas. Act. Dig.";
-const UBYTE TXT_RCX_INPUT_DIGITAL[] = "Digital I/O Tst";
-const UBYTE TXT_RCX_DIGITAL_OK[] = " OK ";
-const UBYTE TXT_RCX_DIGITAL_FAIL[] = " FAIL ";
-const UBYTE TXT_MOTOR_NEXT[] = "Bwd Next Fwd";
-
-
-void TestPrgRunMotor(UBYTE No,SBYTE Speed)
-{
- pMapOutPut->Outputs[No].Mode = MOTORON | BRAKE;
- pMapOutPut->Outputs[No].Speed = Speed;
- pMapOutPut->Outputs[No].TachoLimit = 0;
- pMapOutPut->Outputs[No].RunState = MOTOR_RUN_STATE_RUNNING;
- pMapOutPut->Outputs[No].Flags = UPDATE_MODE | UPDATE_SPEED | UPDATE_TACHO_LIMIT;
-}
-
-void TestPrgFloatMotor(UBYTE No)
-{
- pMapOutPut->Outputs[No].Mode = 0;
- pMapOutPut->Outputs[No].Speed = 0;
- pMapOutPut->Outputs[No].TachoLimit = 0;
- pMapOutPut->Outputs[No].RunState = MOTOR_RUN_STATE_RUNNING;
- pMapOutPut->Outputs[No].Flags = UPDATE_MODE | UPDATE_SPEED | UPDATE_TACHO_LIMIT;
-}
-
-SBYTE TestPrgReadMotor(UBYTE No)
-{
- return ((SBYTE)(pMapOutPut->Outputs[No].TachoCnt / 360));
-}
-
-#endif
-
-
-UBYTE TestPrg(UBYTE Dummy)
-{
- static UWORD Count;
- static UBYTE TxtBuffer[TEXTLINES][DISPLAYLINE_LENGTH + 1];
- static UBYTE State = SYSTEM_INIT;
-#ifdef TESTPRG
- static UWORD Pointer;
- static UWORD InputValues[NO_OF_INPUTS];
- static SWORD OutputValues[NO_OF_OUTPUTS];
- static UBYTE VolumeSave;
- static UBYTE Timer;
- static UBYTE SubState = 0;
- UBYTE Tmp;
-#endif
-
- Dummy = Dummy;
- switch (State)
- {
- case SYSTEM_INIT :
- {
- GetProtocolVersion(TxtBuffer[0]);
- GetARMBuild(TxtBuffer[1]);
- GetAVRBuild(TxtBuffer[2]);
- GetBC4Build(TxtBuffer[3]);
- GetBC4Address(TxtBuffer[4]);
-
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TxtBuffer[0];
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TxtBuffer[1];
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TxtBuffer[2];
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TxtBuffer[3];
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TxtBuffer[4];
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_EMPTY;
- 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));
-
-#ifdef TESTPRG
- SubState = 0;
-#endif
- State = SYSTEM_UNLOCK_INIT;
- }
- break;
-
-#ifndef TESTPRG
-
- case SYSTEM_UNLOCK_INIT : // ENTER * 1 + LEFT * 3 + RIGHT * 2 + ENTER * 1 = TEST MENU
- {
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP;
- }
- }
- break;
-
-#else
-
- case SYSTEM_UNLOCK_INIT : // ENTER * 1 + LEFT * 3 + RIGHT * 2 + ENTER * 1 = TEST MENU
- {
- Tmp = cUiReadButtons();
- switch (Tmp)
- {
- case BUTTON_ENTER :
- {
- switch (SubState)
- {
- case 0 :
- {
- SubState = 1;
- Pointer = 0;
- Count = 0;
- }
- break;
-
- case 3 :
- {
- State = SYSTEM_UNLOCK;
- }
- break;
-
- default :
- {
- Tmp = BUTTON_EXIT;
- }
- break;
-
- }
- }
- break;
-
- case BUTTON_NONE :
- {
- }
- break;
-
- default :
- {
- switch (SubState)
- {
- case 0 :
- {
- Tmp = BUTTON_EXIT;
- }
- break;
-
- case 1 :
- {
- if (Tmp == BUTTON_LEFT)
- {
- if (++Count >= 3)
- {
- Count = 0;
- SubState = 2;
- }
- Pointer = 0;
- }
- else
- {
- Tmp = BUTTON_EXIT;
- }
- }
- break;
-
- case 2 :
- {
- if (Tmp == BUTTON_RIGHT)
- {
- if (++Count >= 2)
- {
- SubState = 3;
- }
- Pointer = 0;
- }
- else
- {
- Tmp = BUTTON_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
- Pointer++;
- if (((SubState) && (Pointer > 500)) || (Tmp == BUTTON_EXIT))
- {
- State = TSTPRG_SKIP;
- }
- }
- break;
-
- case SYSTEM_UNLOCK :
- {
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_TEST;
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_8);
- State = SYSTEM_PAGE;
- }
- break;
-
- case SYSTEM_PAGE :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE;
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- State = TSTPRG_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- Count = 0;
- State = TSTPRG_SKIP;
- }
- break;
-
- case BUTTON_LEFT :
- {
- IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE;
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_TIMER;
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TIMER_INIT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE;
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_BT_PAGE;
- if (DISPLAYLINE_LENGTH >= 16)
- {
- sprintf((char*)TxtBuffer[2],"Command %02X",(UWORD)VarsUi.BTCommand & 0xFF);
- sprintf((char*)TxtBuffer[3],"Parameter 1 %02X",(UWORD)VarsUi.BTPar1 & 0xFF);
- sprintf((char*)TxtBuffer[4],"Parameter 2 %02X",(UWORD)VarsUi.BTPar2 & 0xFF);
- sprintf((char*)TxtBuffer[5],"Result %04X",(UWORD)VarsUi.BTResult);
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_LAST;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = TxtBuffer[2];
- pMapDisplay->pTextLines[TEXTLINE_4] = TxtBuffer[3];
- pMapDisplay->pTextLines[TEXTLINE_5] = TxtBuffer[4];
- pMapDisplay->pTextLines[TEXTLINE_6] = TxtBuffer[5];
- }
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = BT_PAGE;
- }
- break;
-
- }
- }
- break;
-
- case TIMER_INIT :
- {
- State = TIMER_SHOW;
- }
- break;
-
- case TIMER_SHOW :
- {
- sprintf((char*)TxtBuffer[2]," %10lu mS ",VarsUi.CRPasskey);
- pMapDisplay->pTextLines[TEXTLINE_3] = TxtBuffer[2];
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
-
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_TIMER_HOLD;
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_8);
- State = TIMER_HOLD;
- }
- break;
-
- case BUTTON_LEFT :
- {
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_3);
- VarsUi.CRPasskey = 0L;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP;
- }
- break;
-
- }
- }
- break;
-
- case TIMER_HOLD :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_TIMER;
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_8);
- State = TIMER_SHOW;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP;
- }
- break;
-
- }
- }
- break;
-
- case BT_PAGE :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- for (Count = 0;Count < TEXTLINES;Count++)
- {
- strcpy((char*)TxtBuffer[Count],(char*)TXT_EMPTY);
- pMapDisplay->pTextLines[TEXTLINE_1 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_BT_LIST;
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- Pointer = 0;
- State = BT_LIST_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- Count = 0;
- State = TSTPRG_SKIP;
- }
- break;
-
- case BUTTON_LEFT :
- {
- State = BT_RESET;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_BTUPDATE;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_DONE;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_RESET;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_REBOOT;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- Timer = 0;
- State = BT_UPDATE_FW;
- }
- break;
-
- }
- }
- break;
-
- case BT_RESET :
- {
- VarsUi.BTCommand = (UBYTE)FACTORYRESET;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_RESETTING;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = BT_RESETTING;
- }
- else
- {
- State = TSTPRG_SKIP;
- }
- }
- break;
-
- case BT_RESETTING :
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- State = TSTPRG_SKIP;
- }
- }
- break;
-
- case BT_UPDATE_FW :
- {
- if (++Timer >= 100)
- {
- BtIo();
- }
- }
- break;
-
- case BT_LIST_INIT :
- {
- sprintf((char*)TxtBuffer[0],"DeviceTable No%2u",Pointer);
- sprintf((char*)TxtBuffer[2],"%-*.*s",DISPLAYLINE_LENGTH,DISPLAYLINE_LENGTH,(char*)pMapComm->BtDeviceTable[Pointer].Name);
- Count = (UWORD)sprintf((char*)TxtBuffer[3],"COD=");
- for (Tmp = 0;(Tmp < SIZE_OF_CLASS_OF_DEVICE) && (Count < (DISPLAYLINE_LENGTH - 2));Tmp++)
- {
- Count += (UWORD)sprintf((char*)&TxtBuffer[3][Count],"%02X",(UWORD)(pMapComm->BtDeviceTable[Pointer].ClassOfDevice[Tmp]) & 0xFF);
- }
- Count = (UWORD)sprintf((char*)TxtBuffer[4],"A=");
- for (Tmp = 0;(Tmp < SIZE_OF_BDADDR) && (Count <= (DISPLAYLINE_LENGTH - 2));Tmp++)
- {
- Count += (UWORD)sprintf((char*)&TxtBuffer[4][Count],"%02X",(UWORD)(pMapComm->BtDeviceTable[Pointer].BdAddr[Tmp]) & 0xFF);
- }
- sprintf((char*)TxtBuffer[5],"Status=%02X",(UWORD)(pMapComm->BtDeviceTable[Pointer].DeviceStatus) & 0xFF);
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = BT_LIST;
- }
- break;
-
- case BT_LIST :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- for (Count = 0;Count < TEXTLINES;Count++)
- {
- strcpy((char*)TxtBuffer[Count],(char*)TXT_EMPTY);
- pMapDisplay->pTextLines[TEXTLINE_1 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_BT_CONN;
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- Pointer = 0;
- State = BT_CONN_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = SYSTEM_INIT;
- }
- break;
-
- case BUTTON_LEFT :
- {
- if (Pointer)
- {
- Pointer--;
- }
- else
- {
- Pointer = (SIZE_OF_BT_DEVICE_TABLE - 1);
- }
- State = BT_LIST_INIT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- if (Pointer < (SIZE_OF_BT_DEVICE_TABLE - 1))
- {
- Pointer++;
- }
- else
- {
- Pointer = 0;
- }
- State = BT_LIST_INIT;
- }
- break;
-
- }
- }
- break;
-
- case BT_CONN_INIT :
- {
- sprintf((char*)TxtBuffer[0],"Conn. Table No%2u",Pointer);
- sprintf((char*)TxtBuffer[2],"%-*.*s",DISPLAYLINE_LENGTH,DISPLAYLINE_LENGTH,(char*)pMapComm->BtConnectTable[Pointer].Name);
- Count = (UWORD)sprintf((char*)TxtBuffer[3],"COD=");
- for (Tmp = 0;(Tmp < SIZE_OF_CLASS_OF_DEVICE) && (Count < (DISPLAYLINE_LENGTH - 2));Tmp++)
- {
- Count += (UWORD)sprintf((char*)&TxtBuffer[3][Count],"%02X",(UWORD)(pMapComm->BtConnectTable[Pointer].ClassOfDevice[Tmp]) & 0xFF);
- }
- Count = (UWORD)sprintf((char*)TxtBuffer[4],"A=");
- for (Tmp = 0;(Tmp < SIZE_OF_BDADDR) && (Count <= (DISPLAYLINE_LENGTH - 2));Tmp++)
- {
- Count += (UWORD)sprintf((char*)&TxtBuffer[4][Count],"%02X",(UWORD)(pMapComm->BtConnectTable[Pointer].BdAddr[Tmp]) & 0xFF);
- }
- sprintf((char*)TxtBuffer[5],"%-*.*s",DISPLAYLINE_LENGTH,DISPLAYLINE_LENGTH,(char*)pMapComm->BtConnectTable[Pointer].PinCode);
- if (DISPLAYLINE_LENGTH >= 16)
- {
- sprintf((char*)TxtBuffer[6],"H=%02X S=%02X Q=%02X",(UWORD)(pMapComm->BtConnectTable[Pointer].HandleNr) & 0xFF,(UWORD)(pMapComm->BtConnectTable[Pointer].StreamStatus) & 0xFF,(UWORD)(pMapComm->BtConnectTable[Pointer].LinkQuality) & 0xFF);
- }
- pMapDisplay->EraseMask |= TEXTLINE_BITS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = BT_CONN;
- }
- break;
-
- case BT_CONN :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_ENTER :
- {
- State = BT_CONN_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = SYSTEM_INIT;
- }
- break;
-
- case BUTTON_LEFT :
- {
- if (Pointer)
- {
- Pointer--;
- }
- else
- {
- Pointer = (SIZE_OF_BT_CONNECT_TABLE - 1);
- }
- State = BT_CONN_INIT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- if (Pointer < (SIZE_OF_BT_CONNECT_TABLE - 1))
- {
- Pointer++;
- }
- else
- {
- Pointer = 0;
- }
- State = BT_CONN_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_INIT :
- {
- IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE;
-
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_TESTPRG;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
-
- State = TSTPRG_SELECT_SUBTEST;
- }
- break;
-
- case TSTPRG_SELECT_SUBTEST :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- State = TSTPRG_SENSOR_INIT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- State = TSTPRG_MOTOR_INIT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- State = TSTPRG_RCX_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- Count = 0;
- State = TSTPRG_SKIP;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_SENSOR_INIT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_TESTPRG;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT_SENSOR;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SENSORS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
-
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- InputValues[Count] = 0x7FFF;
- strcpy((char*)TxtBuffer[Count]," ");
- }
-
- State = TSTPRG_SELECT_SENSOR;
- }
- break;
-
- case TSTPRG_SELECT_SENSOR :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- State = TSTPRG_TOUCH_SENSOR_INIT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT_TYPE;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SOUND_SENSORS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_SOUND_SENSOR_SELECT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT_TYPE;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_LIGHT_SENSORS;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_LIGHT_SENSOR_SELECT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_TOUCH_SENSOR_INIT :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapDisplay->pTextLines[TEXTLINE_3 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_SENSOR_TOUCH;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = SWITCH;
- }
- State = TSTPRG_TOUCH_SENSOR;
- }
- break;
-
- case TSTPRG_TOUCH_SENSOR :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- if (InputValues[Count] != pMapInput->Inputs[Count].ADRaw)
- {
- InputValues[Count] = pMapInput->Inputs[Count].ADRaw;
- sprintf((char*)TxtBuffer[Count]," Input %u = %4u ",(UWORD)Count + 1,(UWORD)InputValues[Count]);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3 + Count);
- }
- }
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- }
- break;
-
- case TSTPRG_SOUND_SENSOR_SELECT :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_SENSOR_SOUND_DB;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = SOUND_DB;
- }
- State = TSTPRG_SOUND_SENSOR_INIT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_SENSOR_SOUND_DBA;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = SOUND_DBA;
- }
- State = TSTPRG_SOUND_SENSOR_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_SOUND_SENSOR_INIT :
- {
- VolumeSave = pMapSound->Volume;
- pMapSound->Volume = MAX_VOLUME;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapDisplay->pTextLines[TEXTLINE_3 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SOUND_STOP;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_SOUND_SENSOR;
- }
- break;
-
- case TSTPRG_SOUND_SENSOR :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- if (InputValues[Count] != pMapInput->Inputs[Count].ADRaw)
- {
- InputValues[Count] = pMapInput->Inputs[Count].ADRaw;
- sprintf((char*)TxtBuffer[Count]," Input %u = %4u ",(UWORD)Count + 1,(UWORD)InputValues[Count]);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3 + Count);
- }
- }
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- pMapSound->Freq = 440;
- pMapSound->Duration = 2000;
- pMapSound->Mode = SOUND_TONE;
- pMapSound->Flags |= SOUND_UPDATE;
- }
- break;
-
- case BUTTON_ENTER :
- {
- pMapSound->State = SOUND_STOP;
- pMapSound->Volume = VolumeSave;
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_EXIT :
- {
- pMapSound->State = SOUND_STOP;
- pMapSound->Volume = VolumeSave;
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapSound->Freq = 4000;
- pMapSound->Duration = 2000;
- pMapSound->Mode = SOUND_TONE;
- pMapSound->Flags |= SOUND_UPDATE;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_LIGHT_SENSOR_SELECT :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_SENSOR_LIGHT_PASIVE;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = LIGHT_INACTIVE;
- }
- State = TSTPRG_LIGHT_SENSOR_INIT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_SENSOR_LIGHT_ACTIVE;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = LIGHT_ACTIVE;
- }
- State = TSTPRG_LIGHT_SENSOR_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_LIGHT_SENSOR_INIT :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapDisplay->pTextLines[TEXTLINE_3 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_LIGHT_SENSOR;
- }
- break;
-
- case TSTPRG_LIGHT_SENSOR :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- if (InputValues[Count] != pMapInput->Inputs[Count].ADRaw)
- {
- InputValues[Count] = pMapInput->Inputs[Count].ADRaw;
- sprintf((char*)TxtBuffer[Count]," Input %u = %4u ",(UWORD)Count + 1,(UWORD)InputValues[Count]);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3 + Count);
- }
- }
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP_SENSOR;
- }
- }
- break;
-
- case TSTPRG_SKIP_SENSOR :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = NO_SENSOR;
- }
- State = TSTPRG_SENSOR_INIT;
- }
- break;
-
- case TSTPRG_MOTOR_INIT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_MOTOR;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_MOTOR_HEADER;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_MOTOR_STOP;
-
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,0);
- strcpy((char*)TxtBuffer[Count]," ");
- pMapDisplay->pTextLines[TEXTLINE_4 + Count] = TxtBuffer[Count];
- }
-
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_MOTOR;
- }
- break;
-
- case TSTPRG_MOTOR :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- if (OutputValues[Count] != (SWORD)TestPrgReadMotor(Count))
- {
- OutputValues[Count] = (SWORD)TestPrgReadMotor(Count);
- sprintf((char*)TxtBuffer[Count]," %c %-4d %4d",(char)Count + 'A',(SWORD)pMapOutPut->Outputs[Count].Speed,OutputValues[Count]);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4 + Count);
- }
- }
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,-50);
- }
- }
- break;
-
- case BUTTON_ENTER :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,0);
- }
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP_MOTOR;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,50);
- }
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_SKIP_MOTOR :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- TestPrgFloatMotor(Count);
- }
- State = TSTPRG_INIT;
- }
- break;
-
- case TSTPRG_RCX_INIT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_RCX_STOP;
-
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_RCX_SELECT;
- }
- break;
-
- case TSTPRG_RCX_SELECT :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_SELECT_TYPE;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_RCX_INPUT_SELECT;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- InputValues[Count] = 0x7FFF;
- strcpy((char*)TxtBuffer[Count]," ");
- }
- State = TSTPRG_RCX_INPUT_SELECT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- State = TSTPRG_RCX_DISPLAY_INIT;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- State = TSTPRG_RCX_MOTOR_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_RCX_DISPLAY_INIT :
- {
- Count = 0;
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- State = TSTPRG_RCX_DISPLAY;
- }
- break;
-
- case TSTPRG_RCX_DISPLAY :
- {
- if ((Count & 0x7FF) == 0x000)
- {
- pMapDisplay->pScreens[SCREEN_BACKGROUND] = (BMPMAP*)Test1;
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- }
- if ((Count & 0x7FF) == 0x3FF)
- {
- pMapDisplay->pScreens[SCREEN_BACKGROUND] = (BMPMAP*)Test2;
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- }
- Count++;
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP_RCX;
- }
- }
- break;
-
- case TSTPRG_RCX_INPUT_SELECT :
- {
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_PASIVE;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = SWITCH;
- }
- State = TSTPRG_RCX_INPUT_INIT;
- }
- break;
-
- case BUTTON_ENTER :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_ACTIVE;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = REFLECTION;
- }
- State = TSTPRG_RCX_INPUT_INIT;
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP_RCX;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_DIGITAL;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = CUSTOM;
- }
- SubState = 0;
- Timer = 0;
- State = TSTPRG_RCX_DIGITAL_INIT;
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_RCX_INPUT_INIT :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapDisplay->pTextLines[TEXTLINE_3 + Count] = TxtBuffer[Count];
- }
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_RCX_INPUT;
- Timer = 0;
- }
- break;
-
- case TSTPRG_RCX_INPUT :
- {
- if (++Timer >= 250)
- {
- Timer = 0;
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- if (InputValues[Count] != pMapInput->Inputs[Count].ADRaw)
- {
- InputValues[Count] = pMapInput->Inputs[Count].ADRaw;
- sprintf((char*)TxtBuffer[Count]," Input %u = %4u ",(UWORD)Count + 1,(UWORD)InputValues[Count]);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3 + Count);
- }
- }
- }
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP_RCX;
- }
- }
- break;
-
- case TSTPRG_RCX_DIGITAL_INIT :
- {
- if (++Timer >= 20)
- {
- Timer = 0;
- switch (SubState)
- {
- case 0 :
- {
- pMapInput->Inputs[0].DigiPinsDir |= DIGI0; // Digi 1-0 output -,
- pMapInput->Inputs[0].DigiPinsDir &= ~DIGI1; // Digi 1-1 input -, |
- pMapInput->Inputs[2].DigiPinsDir &= ~DIGI0; // Digi 3-0 input | -'
- pMapInput->Inputs[2].DigiPinsDir |= DIGI1; // Digi 3-1 output -'
-
- pMapInput->Inputs[0].DigiPinsOut |= DIGI0; // Digi 1-0 output high
- pMapInput->Inputs[2].DigiPinsOut &= ~DIGI1; // Digi 3-1 output low
-
- SubState++;
- }
- break;
-
- case 1 :
- {
- if ((pMapInput->Inputs[2].DigiPinsIn & DIGI0) && !(pMapInput->Inputs[0].DigiPinsIn & DIGI1))
- {
- pMapInput->Inputs[0].DigiPinsOut &= ~DIGI0; // Digi 1-0 output low
- pMapInput->Inputs[2].DigiPinsOut |= DIGI1; // Digi 3-1 output high
-
- SubState++;
- }
- else
- {
- State = TSTPRG_RCX_DIGITAL_FAIL;
- }
- }
- break;
-
- case 2 :
- {
- if (!(pMapInput->Inputs[2].DigiPinsIn & DIGI0) && (pMapInput->Inputs[0].DigiPinsIn & DIGI1))
- {
- pMapInput->Inputs[0].DigiPinsDir &= ~DIGI0; // Digi 1-0 input
- pMapInput->Inputs[0].DigiPinsDir &= ~DIGI1; // Digi 1-1 input
- pMapInput->Inputs[2].DigiPinsDir &= ~DIGI0; // Digi 3-0 input
- pMapInput->Inputs[2].DigiPinsDir &= ~DIGI1; // Digi 3-1 input
-
- pMapInput->Inputs[1].DigiPinsDir |= DIGI0; // Digi 2-0 output -,
- pMapInput->Inputs[1].DigiPinsDir &= ~DIGI1; // Digi 2-1 input -, |
- pMapInput->Inputs[3].DigiPinsDir &= ~DIGI0; // Digi 4-0 input | -'
- pMapInput->Inputs[3].DigiPinsDir |= DIGI1; // Digi 4-1 output -'
-
- pMapInput->Inputs[1].DigiPinsOut |= DIGI0; // Digi 2-0 output high
- pMapInput->Inputs[3].DigiPinsOut &= ~DIGI1; // Digi 4-1 output low
-
- SubState++;
- }
- else
- {
- State = TSTPRG_RCX_DIGITAL_FAIL;
- }
- }
- break;
-
- case 3 :
- {
- if ((pMapInput->Inputs[3].DigiPinsIn & DIGI0) && !(pMapInput->Inputs[1].DigiPinsIn & DIGI1))
- {
- pMapInput->Inputs[1].DigiPinsOut &= ~DIGI0; // Digi 2-0 output low
- pMapInput->Inputs[3].DigiPinsOut |= DIGI1; // Digi 4-1 output high
-
- SubState++;
- }
- else
- {
- State = TSTPRG_RCX_DIGITAL_FAIL;
- }
- }
- break;
-
- case 4 :
- {
- if (!(pMapInput->Inputs[3].DigiPinsIn & DIGI0) && (pMapInput->Inputs[1].DigiPinsIn & DIGI1))
- {
- pMapInput->Inputs[1].DigiPinsDir &= ~DIGI0; // Digi 2-0 input
- pMapInput->Inputs[1].DigiPinsDir &= ~DIGI1; // Digi 2-1 input
- pMapInput->Inputs[3].DigiPinsDir &= ~DIGI0; // Digi 4-0 input
- pMapInput->Inputs[3].DigiPinsDir &= ~DIGI1; // Digi 4-1 input
-
- State = TSTPRG_RCX_DIGITAL_OK;
- }
- else
- {
- State = TSTPRG_RCX_DIGITAL_FAIL;
- }
- }
- break;
-
- }
- }
- }
- break;
-
- case TSTPRG_RCX_DIGITAL_OK :
- {
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_RCX_DIGITAL_OK;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_RCX_DIGITAL;
- }
- break;
-
- case TSTPRG_RCX_DIGITAL_FAIL :
- {
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_RCX_DIGITAL_FAIL;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_RCX_DIGITAL;
- }
- break;
-
- case TSTPRG_RCX_DIGITAL :
- {
- if (cUiReadButtons() != BUTTON_NONE)
- {
- State = TSTPRG_SKIP_RCX;
- }
- }
- break;
-
- case TSTPRG_RCX_MOTOR_INIT :
- {
- pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_MOTOR;
- pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
- pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_MOTOR_HEADER;
- pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
- pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_MOTOR_NEXT;
-
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,0);
- strcpy((char*)TxtBuffer[Count]," ");
- pMapDisplay->pTextLines[TEXTLINE_4 + Count] = TxtBuffer[Count];
- }
-
- Pointer = 0;
- pMapDisplay->UpdateMask |= TEXTLINE_BITS;
- State = TSTPRG_RCX_MOTOR;
- }
- break;
-
- case TSTPRG_RCX_MOTOR :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- if (OutputValues[Count] != (SWORD)TestPrgReadMotor(Count))
- {
- OutputValues[Count] = (SWORD)TestPrgReadMotor(Count);
- if (Pointer == Count)
- {
- sprintf((char*)TxtBuffer[Count],"> %c %-4d %4d",(char)Count + 'A',(SWORD)pMapOutPut->Outputs[Count].Speed,OutputValues[Count]);
- }
- else
- {
- sprintf((char*)TxtBuffer[Count]," %c %-4d %4d",(char)Count + 'A',(SWORD)pMapOutPut->Outputs[Count].Speed,OutputValues[Count]);
- }
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4 + Count);
- }
- }
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- if (Pointer == Count)
- {
- TestPrgRunMotor(Count,-50);
- }
- else
- {
- TestPrgRunMotor(Count,0);
- }
- }
- }
- break;
-
- case BUTTON_ENTER :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- TestPrgRunMotor(Count,0);
- }
- if (++Pointer >= NO_OF_OUTPUTS)
- {
- State = TSTPRG_SKIP_RCX_MOTOR;
- }
- }
- break;
-
- case BUTTON_EXIT :
- {
- State = TSTPRG_SKIP_RCX_MOTOR;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- OutputValues[Count] = 0x7FFF;
- if (Pointer == Count)
- {
- TestPrgRunMotor(Count,50);
- }
- else
- {
- TestPrgRunMotor(Count,0);
- }
- }
- }
- break;
-
- }
- }
- break;
-
- case TSTPRG_SKIP_RCX_MOTOR :
- {
- for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
- {
- TestPrgFloatMotor(Count);
- }
- State = TSTPRG_RCX_INIT;
- }
- break;
-
- case TSTPRG_SKIP_RCX :
- {
- for (Count = 0;Count < NO_OF_INPUTS;Count++)
- {
- pMapInput->Inputs[Count].SensorType = NO_SENSOR;
- }
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- State = TSTPRG_RCX_INIT;
- }
- break;
-
-#endif
-
- case TSTPRG_SKIP :
- {
- Count++;
- if (Count == 100)
- {
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- }
- if (Count >= 200)
- {
- IOMapUi.Flags |= UI_REDRAW_STATUS;
- State = 0;
- }
- }
- break;
-
- default :
- {
- State = SYSTEM_INIT;
- }
- break;
-
- }
-
- return (State);
-}
diff --git a/AT91SAM7S256/Source/Connections.txt b/AT91SAM7S256/Source/Connections.txt
deleted file mode 100644
index 3c20ed0..0000000
--- a/AT91SAM7S256/Source/Connections.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-DEFINE_DATA(ICON, Connections) =
-{
- 0x04,0x00, // Graphics Format
- 0x01,0x20, // Graphics DataSize
- 0x01, // Graphics Count X
- 0x04, // Graphics Count Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0x00,0x7E,0x81,0x81,0x7E,0x00,0x00,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0x00,0x00,0x82,0xFF,0x80,0x00,0x00,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0x00,0xE2,0x91,0x89,0x86,0x00,0x00,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x00,0x00,0x42,0x81,0x89,0x76,0x00,0x00,0xDB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Cursor.txt b/AT91SAM7S256/Source/Cursor.txt
deleted file mode 100644
index 69037cd..0000000
--- a/AT91SAM7S256/Source/Cursor.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-#define sizeof_Cursor 15
-DEFINE_DATA(BMPMAP, Cursor) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x08, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x07, // Graphics Width
- 0x08, // Graphics Height
-BEGIN_DATA
- 0x21,0x31,0x39,0x3D,0x39,0x31,0x21
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Devices.txt b/AT91SAM7S256/Source/Devices.txt
deleted file mode 100644
index cbfd564..0000000
--- a/AT91SAM7S256/Source/Devices.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-DEFINE_DATA(ICON, Devices) =
-{
- 0x04,0x00, // Graphics Format
- 0x01,0x20, // Graphics DataSize
- 0x01, // Graphics Count X
- 0x04, // Graphics Count Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x82,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x06,0x01,0x00,0x40,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x24,0x3C,0x25,0x25,0x25,0x3C,0x24,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x70,0x08,0x30,0x40,0x40,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x4E,0x91,0x51,0x91,0x51,0x8E,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x11,0x12,0x11,0x12,0x11,0x12,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x05,0x06,0x05,0x06,0x05,0x06,0x05,0x06,0x05,0x06,0x05,0x07,0x06,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Display.txt b/AT91SAM7S256/Source/Display.txt
deleted file mode 100644
index d1c2136..0000000
--- a/AT91SAM7S256/Source/Display.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, Display) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xD8, // Graphics DataSize
- 0x0E, // Graphics Start X
- 0x10, // Graphics Start Y
- 0x48, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0xF8,0xFC,0x0E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0xFC,0xF8,0xC0,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
- 0x0F,0x1F,0x38,0x30,0x30,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x78,0x7F,0x3F,0x1F
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Fail.txt b/AT91SAM7S256/Source/Fail.txt
deleted file mode 100644
index a213ec5..0000000
--- a/AT91SAM7S256/Source/Fail.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, Fail) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x48, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x08, // Graphics Start Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x0C,0x03,0x00,0x7C,0x00,0x03,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Font.txt b/AT91SAM7S256/Source/Font.txt
deleted file mode 100644
index 0aa4303..0000000
--- a/AT91SAM7S256/Source/Font.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFINE_DATA(ICON, Font) =
-{
- 0x04,0x00, // Graphics Format
- 0x02,0x40, // Graphics DataSize
- 0x10, // Graphics Count X
- 0x06, // Graphics Count Y
- 0x06, // Graphics Width
- 0x08, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x5F,0x06,0x00,0x00,0x07,0x03,0x00,0x07,0x03,0x00,0x24,0x7E,0x24,0x7E,0x24,0x00,0x24,0x2B,0x6A,0x12,0x00,0x00,0x63,0x13,0x08,0x64,0x63,0x00,0x30,0x4C,0x52,0x22,0x50,0x00,0x00,0x07,0x03,0x00,0x00,0x00,0x00,0x3E,0x41,0x00,0x00,0x00,0x00,0x41,0x3E,0x00,0x00,0x00,0x08,0x3E,0x1C,0x3E,0x08,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x80,0x60,0x60,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x00,
- 0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x2F,0x49,0x49,0x49,0x31,0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00,0xEC,0x6C,0x00,0x00,0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x24,0x24,0x24,0x24,0x24,0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x02,0x01,0x59,0x09,0x06,0x00,
- 0x3E,0x41,0x5D,0x55,0x1E,0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x7F,0x41,0x41,0x41,0x3E,0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x3E,0x41,0x49,0x49,0x7A,0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x30,0x40,0x40,0x40,0x3F,0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x7F,0x02,0x04,0x02,0x7F,0x00,0x7F,0x02,0x04,0x08,0x7F,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,
- 0x7F,0x09,0x09,0x09,0x06,0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x7F,0x09,0x09,0x19,0x66,0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x3F,0x40,0x3C,0x40,0x3F,0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x71,0x49,0x45,0x43,0x00,0x00,0x00,0x7F,0x41,0x41,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x41,0x41,0x7F,0x00,0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x02,0x05,0x02,0x00,0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x7F,0x44,0x44,0x44,0x38,0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x38,0x44,0x44,0x44,0x7F,0x00,0x38,0x54,0x54,0x54,0x08,0x00,0x08,0x7E,0x09,0x09,0x00,0x00,0x18,0x24,0xA4,0xA4,0xFC,0x00,0x7F,0x04,0x04,0x78,0x00,0x00,0x00,0x00,0x7D,0x40,0x00,0x00,0x40,0x80,0x84,0x7D,0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x7F,0x40,0x00,0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x7C,0x04,0x04,0x78,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,
- 0xFC,0x44,0x44,0x44,0x38,0x00,0x38,0x44,0x44,0x44,0xFC,0x00,0x44,0x78,0x44,0x04,0x08,0x00,0x08,0x54,0x54,0x54,0x20,0x00,0x04,0x3E,0x44,0x24,0x00,0x00,0x3C,0x40,0x20,0x7C,0x00,0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x3C,0x60,0x30,0x60,0x3C,0x00,0x6C,0x10,0x10,0x6C,0x00,0x00,0x9C,0xA0,0x60,0x3C,0x00,0x00,0x64,0x54,0x54,0x4C,0x00,0x00,0x08,0x3E,0x41,0x41,0x00,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,0x41,0x41,0x3E,0x08,0x00,0x02,0x01,0x02,0x01,0x00,0x00,0x10,0x20,0x40,0x38,0x07,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Functions.inl b/AT91SAM7S256/Source/Functions.inl
deleted file mode 100644
index 1424721..0000000
--- a/AT91SAM7S256/Source/Functions.inl
+++ /dev/null
@@ -1,4331 +0,0 @@
-//
-// Programmer
-//
-// Date init 26.04.2005
-//
-// Reviser $Author:: Dktochpe $
-//
-// Revision date $Date:: $
-//
-// Filename $Workfile:: $
-//
-// Version $Revision:: $
-//
-// Archive $Archive:: $
-//
-// Platform C
-//
-
-//******* cUiBtTest **********************************************************
-
-const UBYTE NONVOLATILE_NAME[] = UI_NONVOLATILE; // Non volatile filename without extention
-const UBYTE DEFAULT_PROGRAM_NAME[] = UI_PROGRAM_DEFAULT; // On brick programming filename without extention
-const UBYTE TEMP_PROGRAM_FILENAME[] = UI_PROGRAM_TEMP; // On brick programming tmp filename without extention
-const UBYTE VM_PROGRAM_READER[] = UI_PROGRAM_READER; // On brick programming script reader filename without extention
-const UBYTE TEMP_DATALOG_FILENAME[] = UI_DATALOG_TEMP; // On brick datalog tmp filename without extention
-const UBYTE DEFAULT_DATALOG_NAME[] = UI_DATALOG_DEFAULT; // On brick datalog filename without extention
-const UBYTE DEFAULT_PIN_CODE[] = UI_PINCODE_DEFAULT; // Default blue tooth pin code
-const UBYTE TXT_INVALID_SENSOR[] = "??????????????"; // Display invalid sensor data
-
-
-#define SENSORS (MENU_SENSOR_INVALID - MENU_SENSOR_EMPTY)
-
-const UBYTE SENSORTYPE[SENSORS] = // for view and datalog
-{
- 0, // MENU_SENSOR_EMPTY
- SOUND_DB, // MENU_SENSOR_SOUND_DB
- SOUND_DBA, // MENU_SENSOR_SOUND_DBA
- LIGHT_ACTIVE, // MENU_SENSOR_LIGHT
- LIGHT_INACTIVE, // MENU_SENSOR_LIGHT_AMB
- SWITCH, // MENU_SENSOR_TOUCH
- 0, // MENU_SENSOR_MOTOR_DEG
- 0, // MENU_SENSOR_MOTOR_ROT
- LOWSPEED_9V, // MENU_SENSOR_ULTRASONIC_IN
- LOWSPEED_9V, // MENU_SENSOR_ULTRASONIC_CM
- LOWSPEED_9V, // MENU_SENSOR_IIC_TEMP_C
- LOWSPEED_9V, // MENU_SENSOR_IIC_TEMP_F
- COLORFULL // MENU_SENSOR_COLOR
-};
-
-const UBYTE SENSORMODE[SENSORS] = // for view and datalog
-{
- 0, // MENU_SENSOR_EMPTY
- PCTFULLSCALEMODE, // MENU_SENSOR_SOUND_DB
- PCTFULLSCALEMODE, // MENU_SENSOR_SOUND_DBA
- PCTFULLSCALEMODE, // MENU_SENSOR_LIGHT
- PCTFULLSCALEMODE, // MENU_SENSOR_LIGHT_AMB
- BOOLEANMODE, // MENU_SENSOR_TOUCH
- 0, // MENU_SENSOR_MOTOR_DEG
- 0, // MENU_SENSOR_MOTOR_ROT
- 0, // MENU_SENSOR_ULTRASONIC_IN
- 0, // MENU_SENSOR_ULTRASONIC_CM
- 0, // MENU_SENSOR_IIC_TEMP_C
- 0, // MENU_SENSOR_IIC_TEMP_F
- 0 // MENU_SENSOR_COLOR
-};
-
-const UBYTE SENSORFORMAT[SENSORS][9] =
-{
- "", // MENU_SENSOR_EMPTY
- "%3.0f %%", // MENU_SENSOR_SOUND_DB
- "%3.0f %%", // MENU_SENSOR_SOUND_DBA
- "%3.0f %%", // MENU_SENSOR_LIGHT
- "%3.0f %%", // MENU_SENSOR_LIGHT_AMB
- "%1.0f", // MENU_SENSOR_TOUCH
- "%8.0f `", // MENU_SENSOR_MOTOR_DEG
- "%8.0f R", // MENU_SENSOR_MOTOR_ROT
- "%3.0f In", // MENU_SENSOR_ULTRASONIC_IN
- "%3.0f cm", // MENU_SENSOR_ULTRASONIC_CM
- "%5.1f `C", // MENU_SENSOR_IIC_TEMP_C
- "%5.1f `F", // MENU_SENSOR_IIC_TEMP_F
- "%9.0f" // MENU_SENSOR_COLOR (no of characters)
-};
-
-const float SENSORDIVIDER[SENSORS] =
-{
- 1.0f, // MENU_SENSOR_EMPTY
- 1.0f, // MENU_SENSOR_SOUND_DB
- 1.0f, // MENU_SENSOR_SOUND_DBA
- 1.0f, // MENU_SENSOR_LIGHT
- 1.0f, // MENU_SENSOR_LIGHT_AMB
- 1.0f, // MENU_SENSOR_TOUCH
- 1.0f, // MENU_SENSOR_MOTOR_DEG
- 360.0f, // MENU_SENSOR_MOTOR_ROT
- 2.54f, // MENU_SENSOR_ULTRASONIC_IN
- 1.0f, // MENU_SENSOR_ULTRASONIC_CM
- 10.0f, // MENU_SENSOR_IIC_TEMP_C
- 10.0f, // MENU_SENSOR_IIC_TEMP_F
- 1.0f // MENU_SENSOR_COLOR
-};
-
-
-#define SENSORSYNCDATA "Sync data"
-#define SENSORSDATA "Sdata"
-#define SENSORTIME "Time"
-
-
-const UBYTE SENSORDIRNAME[SENSORS - 1][19] =
-{
- "Sound Sensor", // MENU_SENSOR_SOUND_DB
- "Sound Sensor", // MENU_SENSOR_SOUND_DBA
- "Light Sensor", // MENU_SENSOR_LIGHT
- "Light Sensor", // MENU_SENSOR_LIGHT_AMB
- "Bumper", // MENU_SENSOR_TOUCH
- "FP Rotation Sensor", // MENU_SENSOR_MOTOR_DEG
- "FP Rotation Sensor", // MENU_SENSOR_MOTOR_ROT
- "Distance Sensor", // MENU_SENSOR_ULTRASONIC_IN
- "Distance Sensor", // MENU_SENSOR_ULTRASONIC_CM
- "NXT Temp Sensor", // MENU_SENSOR_IIC_TEMP_C
- "NXT Temp Sensor", // MENU_SENSOR_IIC_TEMP_F
- "Color Detector" // MENU_SENSOR_COLOR
-};
-
-const UBYTE SENSORUNITNAME[SENSORS - 1][5] =
-{
- "_dB", // MENU_SENSOR_SOUND_DB
- "_dBa", // MENU_SENSOR_SOUND_DBA
- "_on", // MENU_SENSOR_LIGHT
- "_off", // MENU_SENSOR_LIGHT_AMB
- "", // MENU_SENSOR_TOUCH
- "_deg", // MENU_SENSOR_MOTOR_DEG
- "_rot", // MENU_SENSOR_MOTOR_ROT
- "_in", // MENU_SENSOR_ULTRASONIC_IN
- "_cm", // MENU_SENSOR_ULTRASONIC_CM
- "_C", // MENU_SENSOR_IIC_TEMP_C
- "_F", // MENU_SENSOR_IIC_TEMP_F
- "_0", // MENU_SENSOR_COLOR
-};
-
-const UBYTE SENSORFORMAT2[SENSORS - 1][6] =
-{
- "\t%.0f", // MENU_SENSOR_SOUND_DB
- "\t%.0f", // MENU_SENSOR_SOUND_DBA
- "\t%.0f", // MENU_SENSOR_LIGHT
- "\t%.0f", // MENU_SENSOR_LIGHT_AMB
- "\t%.0f", // MENU_SENSOR_TOUCH
- "\t%.0f", // MENU_SENSOR_MOTOR_DEG
- "\t%.0f", // MENU_SENSOR_MOTOR_ROT
- "\t%.0f", // MENU_SENSOR_ULTRASONIC_IN
- "\t%.0f", // MENU_SENSOR_ULTRASONIC_CM
- "\t%.1f", // MENU_SENSOR_IIC_TEMP_C
- "\t%.1f", // MENU_SENSOR_IIC_TEMP_F
- "\t%.0f" // MENU_SENSOR_COLOR
-};
-
-
-//******* cUiWriteLowspeed ***************************************************
-
-void cUiWriteLowspeed(UBYTE Port,UBYTE TxBytes,UBYTE *TxBuf,UBYTE RxBytes)
-{
- Port -= MENU_PORT_1;
- pMapLowSpeed->OutBuf[Port].InPtr = 0;
- pMapLowSpeed->OutBuf[Port].OutPtr = 0;
-
- while (TxBytes)
- {
- pMapLowSpeed->OutBuf[Port].Buf[pMapLowSpeed->OutBuf[Port].InPtr] = *TxBuf;
- pMapLowSpeed->OutBuf[Port].InPtr++;
- TxBuf++;
- TxBytes--;
- }
- pMapLowSpeed->InBuf[Port].BytesToRx = RxBytes;
- pMapLowSpeed->ChannelState[Port] = LOWSPEED_INIT;
- pMapLowSpeed->State |= (COM_CHANNEL_ONE_ACTIVE << Port);
-}
-
-
-//******* cUiReadLowspeed ****************************************************
-
-#define IIC_READY 0
-#define IIC_BUSY 1
-#define IIC_ERROR 2
-
-UBYTE cUiReadLowspeed(UBYTE Port,UBYTE RxBytes,UWORD *Value)
-{
- UBYTE Result;
-
- *Value = 0;
- Port -= MENU_PORT_1;
- if ((pMapLowSpeed->ChannelState[Port] == LOWSPEED_IDLE) || (pMapLowSpeed->ChannelState[Port] == LOWSPEED_DONE))
- {
- while (RxBytes)
- {
- (*Value) <<= 8;
- (*Value) |= (UWORD)(pMapLowSpeed->InBuf[Port].Buf[pMapLowSpeed->InBuf[Port].OutPtr]);
- pMapLowSpeed->InBuf[Port].OutPtr++;
- if (pMapLowSpeed->InBuf[Port].OutPtr >= SIZE_OF_LSBUF)
- {
- pMapLowSpeed->InBuf[Port].OutPtr = 0;
- }
- RxBytes--;
- }
- Result = IIC_READY;
- }
- else
- {
- if (pMapLowSpeed->ErrorType[Port] == LOWSPEED_CH_NOT_READY)
- {
- Result = IIC_ERROR;
- }
- else
- {
- Result = IIC_BUSY;
- }
- }
-
- return (Result);
-}
-
-
-//******* cUiUpdateSensor ****************************************************
-
-#define SENSOR_SETUP 0
-#define SENSOR_ACQUIRE 3
-#define SENSOR_READ 8
-#define SENSOR_STATES 10
-
-void cUiUpdateSensor(SWORD Time)
-{
- UBYTE Port;
- UBYTE Sensor;
- UBYTE Result;
- SWORD Tmp;
-
- if (VarsUi.SensorReset == TRUE)
- {
- for (Port = MENU_PORT_1;Port < MENU_PORT_INVALID;Port++)
- {
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = FALSE;
- }
- VarsUi.SensorTimer = (MIN_SENSOR_READ_TIME / SENSOR_STATES);
- VarsUi.SensorState = SENSOR_SETUP;
- }
-
- VarsUi.SensorTimer += Time;
- if (VarsUi.SensorTimer >= (MIN_SENSOR_READ_TIME / SENSOR_STATES))
- {
- VarsUi.SensorTimer -= (MIN_SENSOR_READ_TIME / SENSOR_STATES);
-
- for (Port = MENU_PORT_1;Port < MENU_PORT_INVALID;Port++)
- {
- Sensor = VarsUi.DatalogPort[Port - MENU_PORT_1];
-
- if (Sensor != MENU_SENSOR_EMPTY)
- {
- if ((Sensor == MENU_SENSOR_MOTOR_DEG) || (Sensor == MENU_SENSOR_MOTOR_ROT))
- {
- if (VarsUi.SensorReset == TRUE)
- {
- pMapOutPut->Outputs[Port - MENU_PORT_A].Mode &= ~(BRAKE | MOTORON);
- pMapOutPut->Outputs[Port - MENU_PORT_A].Flags |= UPDATE_MODE | UPDATE_SPEED | UPDATE_RESET_COUNT;
- pMapOutPut->Outputs[Port - MENU_PORT_A].TachoCnt = 0;
- }
- if (VarsUi.SensorState == SENSOR_READ)
- {
- VarsUi.DatalogSampleValue[Port - MENU_PORT_1] = pMapOutPut->Outputs[Port - MENU_PORT_A].TachoCnt;
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = TRUE;
- }
- }
- else
- {
- pMapInput->Inputs[Port - MENU_PORT_1].SensorType = SENSORTYPE[Sensor - MENU_SENSOR_EMPTY];
- pMapInput->Inputs[Port - MENU_PORT_1].SensorMode = SENSORMODE[Sensor - MENU_SENSOR_EMPTY];
- if ((Sensor == MENU_SENSOR_ULTRASONIC_IN) || (Sensor == MENU_SENSOR_ULTRASONIC_CM))
- {
- if (VarsUi.SensorReset == TRUE)
- {
- cUiWriteLowspeed(Port,3,"\x02\x41\x02",0);
- }
- if (VarsUi.SensorState == SENSOR_ACQUIRE)
- {
- cUiWriteLowspeed(Port,2,"\x02\x42",1);
- }
- if (VarsUi.SensorState == SENSOR_READ)
- {
- Result = cUiReadLowspeed(Port,1,(UWORD*)&Tmp);
- if (Result == IIC_READY)
- {
- if ((UBYTE)Tmp != 0xFF)
- {
- VarsUi.DatalogSampleValue[Port - MENU_PORT_1] = (SLONG)Tmp;
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = TRUE;
- }
- else
- {
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = FALSE;
- }
- }
- else
- {
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = FALSE;
- }
- }
- }
- else
- {
- if ((Sensor == MENU_SENSOR_IIC_TEMP_C) || (Sensor == MENU_SENSOR_IIC_TEMP_F))
- {
- if (VarsUi.SensorState == SENSOR_SETUP)
- {
- cUiWriteLowspeed(Port,3,"\x98\x01\x60",0);
- }
- if (VarsUi.SensorState == SENSOR_ACQUIRE)
- {
- cUiWriteLowspeed(Port,2,"\x98\x00",2);
- }
- if (VarsUi.SensorState == SENSOR_READ)
- {
- Result = cUiReadLowspeed(Port,2,(UWORD*)&Tmp);
- if (Result == IIC_READY)
- {
-// if (Tmp >= -14080)
- {
- if (Sensor == MENU_SENSOR_IIC_TEMP_F)
- {
- VarsUi.DatalogSampleValue[Port - MENU_PORT_1] = (SLONG)((float)(Tmp + 4544) / 14.2f);
- }
- else
- {
- VarsUi.DatalogSampleValue[Port - MENU_PORT_1] = (SLONG)((float)Tmp / 25.6f);
- }
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = TRUE;
- }
- }
- else
- {
- if (Result == IIC_ERROR)
- {
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = FALSE;
- }
- }
- }
- }
- else
- {
- if (VarsUi.SensorState == SENSOR_READ)
- {
- if (pMapInput->Inputs[Port - MENU_PORT_1].InvalidData != INVALID_DATA)
- {
- VarsUi.DatalogSampleValue[Port - MENU_PORT_1] = pMapInput->Inputs[Port - MENU_PORT_1].SensorValue;
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = TRUE;
- }
- else
- {
- VarsUi.DatalogSampleValid[Port - MENU_PORT_1] = FALSE;
- }
- }
- }
- }
- }
- }
- }
-
- VarsUi.SensorState++;
- if (VarsUi.SensorState >= SENSOR_STATES)
- {
- VarsUi.SensorState = SENSOR_SETUP;
- }
-
- VarsUi.SensorReset = FALSE;
- }
-}
-
-
-//******* cUiGetCustomPctFullScale *******************************************
-
-
-UBYTE cUiGetCustomPctFullScale(UBYTE Port,UBYTE Sensor)
-{
- UBYTE Result = 0;
-
- if ((Sensor != MENU_SENSOR_MOTOR_DEG) && (Sensor != MENU_SENSOR_MOTOR_ROT))
- {
- Result = (UBYTE)pMapInput->Inputs[Port - MENU_PORT_1].CustomPctFullScale;
- }
-
- return (Result);
-}
-
-
-
-//******* cUiGetCustomActiveStatus *******************************************
-
-
-UBYTE cUiGetCustomActiveStatus(UBYTE Port,UBYTE Sensor)
-{
- UBYTE Result = 0;
-
- if ((Sensor != MENU_SENSOR_MOTOR_DEG) && (Sensor != MENU_SENSOR_MOTOR_ROT))
- {
- Result = (UBYTE)pMapInput->Inputs[Port - MENU_PORT_1].CustomActiveStatus;
- }
-
- return (Result);
-}
-
-
-
-//******* cUiPrintSensorInDisplayBuffer **************************************
-
-#define COLORNAMES 6
-
-const UBYTE COLORNAME[COLORNAMES][10] =
-{
- "1. Black ",
- "2. Blue ",
- "3. Green ",
- "4. Yellow",
- "5. Red ",
- "6. White "
-};
-
-
-void cUiPrintSensorInDisplayBuffer(UBYTE Port)
-{
- UBYTE Sensor;
- float Value;
- SWORD Size;
- SWORD Index;
-
- Port -= MENU_PORT_1;
- Sensor = VarsUi.DatalogPort[Port] - MENU_SENSOR_EMPTY;
- Value = (float)VarsUi.DatalogSampleValue[Port] / (float)SENSORDIVIDER[Sensor];
- Size = sprintf((char*)VarsUi.DisplayBuffer,(char*)SENSORFORMAT[Sensor],(float)0);
- sprintf((char*)VarsUi.DisplayBuffer,"%*.*s",Size,Size,(char*)TXT_INVALID_SENSOR);
-
- if (VarsUi.DatalogSampleValid[Port] == TRUE)
- {
- if (Sensor == (MENU_SENSOR_COLOR - MENU_SENSOR_EMPTY))
- {
- Index = (SWORD)Value - 1;
- if ((Index >= 0) && (Index < COLORNAMES))
- {
- sprintf((char*)VarsUi.DisplayBuffer,(char*)COLORNAME[Index]);
- }
- }
- else
- {
- if (Size < sprintf((char*)VarsUi.DisplayBuffer,(char*)SENSORFORMAT[Sensor],Value))
- {
- sprintf((char*)VarsUi.DisplayBuffer,"%*.*s",Size,Size,(char*)TXT_INVALID_SENSOR);
- }
- }
- }
-}
-
-
-//******* cUiReleaseSensors **************************************************
-
-void cUiReleaseSensors(void)
-{
- UBYTE Tmp;
-
- for (Tmp = 0;Tmp < NO_OF_INPUTS;Tmp++)
- {
- pMapInput->Inputs[Tmp].SensorType = NO_SENSOR;
- }
-}
-
-
-
-//******* cUiBtCommand *******************************************************
-
-enum
-{
- UI_BT_CTRL,
-
- UI_BT_GET_DEVICES, // (UI_BT_GET_DEVICES,Known,*pDevices,NULL) [Known = 0,1]
- UI_BT_GET_DEVICE_NAME, // (UI_BT_GET_DEVICE_NAME,Known,*pIndex,*pDeviceName) [Known = 0,1]
- UI_BT_GET_DEVICE_TYPE, // (UI_BT_GET_DEVICE_TYPE,Known,*pIndex,*pDeviceType) [Known = 0,1]
-
- UI_BT_GET_CONNECTION_NAME, // (UI_BT_GET_CONNECTION_NAME,NULL,*pConnection,*pConnectionName)
- UI_BT_GET_CONNECTION_TYPE, // (UI_BT_GET_CONNECTION_TYPE,NULL,*pConnection,*pConnectionType)
- UI_BT_GET_CONNECTION_VALID, // (UI_BT_GET_CONNECTION_NAME,NULL,*pConnection,NULL)
-
- UI_BT_DUMMY
-};
-
-
-#define UI_BT_FAILED 0x8200 // General command failed
-#define UI_BT_SUCCES 0x0000 // Command executed succesfully
-
-
-UBYTE cUiBTGetDeviceType(UBYTE *pCOD)
-{
- ULONG COD;
- UBYTE Result;
- UBYTE Tmp;
-
- COD = 0;
- for (Tmp = 0;Tmp < SIZE_OF_CLASS_OF_DEVICE;Tmp++)
- {
- COD <<= 8;
- COD |= (ULONG)*pCOD;
- pCOD++;
- }
-
- Result = DEVICETYPE_UNKNOWN;
- if ((COD & 0x00001FFF) == 0x00000804)
- {
- Result = DEVICETYPE_NXT;
- }
- if ((COD & 0x00001F00) == 0x00000200)
- {
- Result = DEVICETYPE_PHONE;
- }
- if ((COD & 0x00001F00) == 0x00000100)
- {
- Result = DEVICETYPE_PC;
- }
-
- return (Result);
-}
-
-
-UBYTE cUiBTGetDeviceIndex(UBYTE Known,UBYTE No,UBYTE *pIndex)
-{
- UBYTE Result = 0;
- UBYTE Tmp;
-
- *pIndex = 0;
- if (Known)
- {
- for (Tmp = 0;(Tmp < SIZE_OF_BT_DEVICE_TABLE) && (Result == 0);Tmp++)
- {
- if ((pMapComm->BtDeviceTable[Tmp].DeviceStatus & BT_DEVICE_KNOWN))
- {
- if (No == *pIndex)
- {
- *pIndex = Tmp;
- Result = ~0;
- }
- else
- {
- (*pIndex)++;
- }
- }
- }
- }
- else
- {
- for (Tmp = 0;(Tmp < SIZE_OF_BT_DEVICE_TABLE) && (Result == 0);Tmp++)
- {
- if ((pMapComm->BtDeviceTable[Tmp].DeviceStatus & BT_DEVICE_UNKNOWN) || (pMapComm->BtDeviceTable[Tmp].DeviceStatus & BT_DEVICE_KNOWN))
- {
- if (No == *pIndex)
- {
- *pIndex = Tmp;
- Result = ~0;
- }
- else
- {
- (*pIndex)++;
- }
- }
- }
- }
-
- return (Result);
-}
-
-
-UWORD cUiBTCommand(UBYTE Cmd,UBYTE Flag,UBYTE *pParam1,UBYTE *pParam2)
-{
- UWORD Result = UI_BT_FAILED;
-
- switch(Cmd)
- {
- case UI_BT_GET_DEVICES :
- {
- cUiBTGetDeviceIndex(Flag,SIZE_OF_BT_DEVICE_TABLE,pParam1);
- Result = UI_BT_SUCCES;
- }
- break;
-
- case UI_BT_GET_DEVICE_NAME :
- {
- if ((*pParam1 < SIZE_OF_BT_DEVICE_TABLE) && (pParam2 != NULL))
- {
- pParam2[0] = 0;
- if (cUiBTGetDeviceIndex(Flag,*pParam1,&VarsUi.BTTmpIndex))
- {
- sprintf((char*)pParam2,"%.*s",DISPLAYLINE_LENGTH,(char*)pMapComm->BtDeviceTable[VarsUi.BTTmpIndex].Name);
- Result = UI_BT_SUCCES;
- }
- }
- }
- break;
-
- case UI_BT_GET_DEVICE_TYPE :
- {
- if ((*pParam1 < SIZE_OF_BT_DEVICE_TABLE) && (pParam2 != NULL))
- {
- pParam2[0] = 0;
- if (cUiBTGetDeviceIndex(Flag,*pParam1,&VarsUi.BTTmpIndex))
- {
- pParam2[0] = cUiBTGetDeviceType(pMapComm->BtDeviceTable[VarsUi.BTTmpIndex].ClassOfDevice);
- Result = UI_BT_SUCCES;
- }
- }
- }
- break;
-
- case UI_BT_GET_CONNECTION_NAME :
- {
- if (*pParam1 < SIZE_OF_BT_CONNECT_TABLE)
- {
- if (pMapComm->BtConnectTable[*pParam1].Name[0])
- {
- if (pParam2 != NULL)
- {
- sprintf((char*)pParam2,"%.*s",DISPLAYLINE_LENGTH,(char*)pMapComm->BtConnectTable[*pParam1].Name);
- }
- Result = UI_BT_SUCCES;
- }
- else
- {
- if (pParam2 != NULL)
- {
- pParam2[0] = 0;
- }
- }
- }
- }
- break;
-
- case UI_BT_GET_CONNECTION_TYPE :
- {
- if ((*pParam1 < SIZE_OF_BT_CONNECT_TABLE) && (pParam2 != NULL))
- {
- pParam2[0] = 0;
- if (pMapComm->BtConnectTable[*pParam1].Name[0])
- {
- pParam2[0] = cUiBTGetDeviceType(pMapComm->BtConnectTable[*pParam1].ClassOfDevice);
- Result = UI_BT_SUCCES;
- }
- }
- }
- break;
-
- case UI_BT_GET_CONNECTION_VALID :
- {
- if (*pParam1 < SIZE_OF_BT_CONNECT_TABLE)
- {
- if (pMapComm->BtConnectTable[*pParam1].Name[0])
- {
- Result = UI_BT_SUCCES;
- }
- }
- }
- break;
-
- }
-
- return (Result);
-}
-
-
-
-#include "BtTest.inc"
-
-//******* cUiNVxxxxx *********************************************************
-
-void cUiNVWrite(void)
-{
- sprintf((char*)VarsUi.NVFilename,"%s.%s",(char*)NONVOLATILE_NAME,(char*)TXT_SYS_EXT);
- VarsUi.NVTmpHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.NVFilename,VarsUi.SearchFilenameBuffer,&VarsUi.NVTmpLength);
- if (!(VarsUi.NVTmpHandle & 0x8000))
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.NVTmpHandle,NULL,NULL);
- pMapLoader->pFunc(DELETE,VarsUi.NVFilename,NULL,NULL);
- }
- VarsUi.NVTmpLength = sizeof(NVDATA);
- VarsUi.NVTmpHandle = pMapLoader->pFunc(OPENWRITE,VarsUi.NVFilename,NULL,&VarsUi.NVTmpLength);
- pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.NVTmpHandle,(UBYTE*)&VarsUi.NVData,&VarsUi.NVTmpLength);
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.NVTmpHandle,NULL,NULL);
-}
-
-
-void cUiNVRead(void)
-{
- VarsUi.NVData.CheckByte = 0;
- sprintf((char*)VarsUi.NVFilename,"%s.%s",(char*)NONVOLATILE_NAME,(char*)TXT_SYS_EXT);
- VarsUi.NVTmpHandle = pMapLoader->pFunc(OPENREAD,VarsUi.NVFilename,NULL,&VarsUi.NVTmpLength);
- if (!(VarsUi.NVTmpHandle & 0x8000))
- {
- VarsUi.NVTmpLength = sizeof(NVDATA);
- pMapLoader->pFunc(READ,(UBYTE*)&VarsUi.NVTmpHandle,(UBYTE*)&VarsUi.NVData,&VarsUi.NVTmpLength);
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.NVTmpHandle,NULL,NULL);
- }
- if (VarsUi.NVData.CheckByte != CHECKBYTE)
- {
- VarsUi.NVData.DatalogEnabled = DATALOGENABLED;
- VarsUi.NVData.VolumeStep = MAX_VOLUME;
- VarsUi.NVData.PowerdownCode = POWER_OFF_TIME_DEFAULT;
- VarsUi.NVData.DatalogNumber = 0;
- VarsUi.NVData.CheckByte = CHECKBYTE;
- cUiNVWrite();
- }
-}
-
-
-//******* cUiFeedback ********************************************************
-
-UBYTE cUiFeedback(BMPMAP *Bitmap,UBYTE TextNo1,UBYTE TextNo2,UWORD Time) // Show bimap and text
-{
-// if ((VarsUi.FBState == 0) || ((pMapDisplay->Flags & DISPLAY_POPUP) == 0))
- {
- switch (VarsUi.FBState)
- {
- case 0 : // Set busy
- {
- VarsUi.FBState++;
- }
- break;
-
- case 1 : // Clear line 2,3,4
- {
- if (DISPLAY_IDLE)
- {
- pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_2) | TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
- VarsUi.FBState++;
- }
- }
- break;
-
- case 2 : // Show bitmap if pressent
- {
- if (DISPLAY_IDLE)
- {
- if (Bitmap != NULL)
- {
- pMapDisplay->pBitmaps[BITMAP_1] = Bitmap;
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
- }
- VarsUi.FBState++;
- }
- }
- break;
-
- case 3 : // Get text string
- {
- if (DISPLAY_IDLE)
- {
- pMapDisplay->UpdateMask |= SPECIAL_BIT(TOPLINE);
- VarsUi.FBText = cUiGetString(TextNo1);
- VarsUi.FBPointer = 0;
- if (TextNo2)
- {
- VarsUi.FBState = 5;
- }
- else
- {
- VarsUi.FBState++;
- }
- }
- }
- break;
-
- case 4 : // Show text string
- {
- if ((VarsUi.FBText[VarsUi.FBPointer]) && (VarsUi.FBPointer < NO_OF_FEEDBACK_CHARS))
- {
- pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,24 + VarsUi.FBPointer * 6,16,VarsUi.FBText[VarsUi.FBPointer],0);
- VarsUi.FBPointer++;
- }
- else
- {
- VarsUi.FBTimer = 0;
- VarsUi.FBState = 7;
- }
- }
- break;
-
- case 5 : // Show text string
- {
- if ((VarsUi.FBText[VarsUi.FBPointer]) && (VarsUi.FBPointer < NO_OF_FEEDBACK_CHARS))
- {
- pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,24 + VarsUi.FBPointer * 6,12,VarsUi.FBText[VarsUi.FBPointer],0);
- VarsUi.FBPointer++;
- }
- else
- {
- if (TextNo2 == 0xFF)
- {
- VarsUi.FBText = VarsUi.SelectedFilename;
- }
- else
- {
- VarsUi.FBText = cUiGetString(TextNo2);
- }
- VarsUi.FBPointer = 0;
- VarsUi.FBState++;
- }
- }
- break;
-
- case 6 : // Show text string
- {
- if ((VarsUi.FBText[VarsUi.FBPointer]) && (VarsUi.FBPointer < NO_OF_FEEDBACK_CHARS))
- {
- pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,24 + VarsUi.FBPointer * 6,20,VarsUi.FBText[VarsUi.FBPointer],0);
- VarsUi.FBPointer++;
- }
- else
- {
- VarsUi.FBTimer = 0;
- VarsUi.FBState++;
- }
- }
- break;
-
- case 7 : // Wait if time provided
- {
- if (++VarsUi.FBTimer >= (Time + 100))
- {
- VarsUi.FBState++;
- }
- }
- break;
-
- default : // Exit
- {
- VarsUi.FBState = 0;
- }
- break;
-
- }
- }
-
- return (VarsUi.FBState);
-}
-
-
-
-//******* cUiFileList ********************************************************
-
-UBYTE cUiFindNoOfFiles(UBYTE FileType,UBYTE *NoOfFiles)
-{
- switch (VarsUi.FNOFState)
- {
- case 0 :
- {
- *NoOfFiles = 0;
-
- if (FileType >= FILETYPES)
- {
- FileType = FILETYPE_ALL;
- }
- sprintf((char*)VarsUi.FNOFSearchBuffer,"*.%s",TXT_FILE_EXT[FileType]);
-
- VarsUi.FNOFHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.FNOFSearchBuffer,VarsUi.FNOFNameBuffer,&VarsUi.FNOFLength);
- if (!(VarsUi.FNOFHandle & 0x8000))
- {
- *NoOfFiles = 1;
- VarsUi.FNOFState++;
- }
- }
- break;
-
- case 1 :
- {
- VarsUi.FNOFHandle = pMapLoader->pFunc(FINDNEXT,(UBYTE*)&VarsUi.FNOFHandle,VarsUi.FNOFNameBuffer,&VarsUi.FNOFLength);
- if (!(VarsUi.FNOFHandle & 0x8000))
- {
- *NoOfFiles += 1;
- }
- else
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.FNOFHandle,NULL,NULL);
- VarsUi.FNOFState = 0;
- }
- }
- break;
-
- }
-
- return (VarsUi.FNOFState);
-}
-
-
-UBYTE cUiFindNameForFileNo(UBYTE FileType,UBYTE FileNo,UBYTE *Name)
-{
- switch (VarsUi.FNOFState)
- {
- case 0 :
- {
- Name[0] = 0;
-
- if (FileNo)
- {
- if (FileType >= FILETYPES)
- {
- FileType = FILETYPE_ALL;
- }
- sprintf((char*)VarsUi.FNOFSearchBuffer,"*.%s",TXT_FILE_EXT[FileType]);
-
- VarsUi.FNOFHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.FNOFSearchBuffer,Name,&VarsUi.FNOFLength);
- if (!(VarsUi.FNOFHandle & 0x8000))
- {
- if (FileNo != 1)
- {
- VarsUi.FNOFFileNo = 1;
- VarsUi.FNOFState++;
- }
- else
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.FNOFHandle,NULL,NULL);
- }
- }
- }
- }
- break;
-
- case 1 :
- {
- VarsUi.FNOFHandle = pMapLoader->pFunc(FINDNEXT,(UBYTE*)&VarsUi.FNOFHandle,Name,&VarsUi.FNOFLength);
- if (!(VarsUi.FNOFHandle & 0x8000))
- {
- VarsUi.FNOFFileNo++;
- if (FileNo == VarsUi.FNOFFileNo)
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.FNOFHandle,NULL,NULL);
- VarsUi.FNOFState = 0;
- }
- }
- else
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.FNOFHandle,NULL,NULL);
- VarsUi.FNOFState = 0;
- }
- }
- break;
-
- }
-
- return (VarsUi.FNOFState);
-}
-
-
-UBYTE cUiFileList(UBYTE Action) // Show files and select
-{
- switch (Action)
- {
- case MENU_INIT :
- {
- if (!VarsUi.State)
- {
- VarsUi.FileCenter = 1;
- VarsUi.NextState = IOMapUi.State;
- }
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_LEFT :
- {
- if (!VarsUi.State)
- {
- cUiListLeft(VarsUi.NoOfFiles,&VarsUi.FileCenter);
- VarsUi.NextState = TEST_BUTTONS;
- }
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_RIGHT :
- {
- if (!VarsUi.State)
- {
- cUiListRight(VarsUi.NoOfFiles,&VarsUi.FileCenter);
- VarsUi.NextState = TEST_BUTTONS;
- }
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_SELECT :
- {
- }
- break;
-
- default :
- {
- if (Action < FILETYPES)
- {
- if (!VarsUi.State)
- {
- VarsUi.FileType = Action;
- VarsUi.FileCenter = 1;
- VarsUi.NextState = IOMapUi.State;
- }
- Action = MENU_DRAW;
- }
- else
- {
- IOMapUi.State = EXIT_PRESSED;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
-
- if (Action == MENU_DRAW)
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.FNOFState = 0;
- VarsUi.State++;
- }
- break;
-
- case 1 :
- {
- if (cUiFindNoOfFiles(VarsUi.FileType,&VarsUi.NoOfFiles) == 0)
- {
- if (VarsUi.NoOfFiles)
- {
- cUiListCalc(VarsUi.NoOfFiles,&VarsUi.FileCenter,&VarsUi.FileLeft,&VarsUi.FileRight);
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
- }
- }
- break;
-
- case 2 :
- {
- if (cUiFindNameForFileNo(VarsUi.FileType,VarsUi.FileCenter,VarsUi.SelectedFilename) == 0)
- {
- VarsUi.State++;
- }
- }
- break;
-
- default :
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = NULL;
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = NULL;
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = NULL;
-
- if (VarsUi.FileLeft)
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_LEFT);
- }
- if (VarsUi.FileCenter)
- {
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_CENTER);
- }
- if (VarsUi.FileRight)
- {
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_RIGHT);
- }
-
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_5);
-
- // Search forward for termination
- VarsUi.Tmp = 0;
- while ((VarsUi.SelectedFilename[VarsUi.Tmp]) && (VarsUi.Tmp < FILENAME_LENGTH))
- {
- VarsUi.Tmp++;
- }
-
- // Search backward for "."
- while ((VarsUi.Tmp) && (VarsUi.SelectedFilename[VarsUi.Tmp] != '.'))
- {
- VarsUi.Tmp--;
- }
-
- if (VarsUi.Tmp > DISPLAYLINE_LENGTH)
- {
- VarsUi.Tmp = DISPLAYLINE_LENGTH;
- }
-
- VarsUi.DisplayBuffer[VarsUi.Tmp] = 0;
-
- // Copy only name not ext
- while (VarsUi.Tmp)
- {
- VarsUi.Tmp--;
- VarsUi.DisplayBuffer[VarsUi.Tmp] = VarsUi.SelectedFilename[VarsUi.Tmp];
- }
-
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
- pMapDisplay->EraseMask |= MENUICON_BITS;
- pMapDisplay->UpdateMask |= (SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));
-
- IOMapUi.State = VarsUi.NextState;
- VarsUi.State = 0;
- }
- break;
-
- }
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiVolume **********************************************************
-
-UBYTE cUiVolume(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
-{
- switch (Action)
- {
- case MENU_INIT : // Init time counter and cursor bitmap
- {
- VarsUi.Counter = VarsUi.NVData.VolumeStep + 1;
-
- VarsUi.pTmp = (UBYTE*)Cursor;
- for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)SIZEOF_DATA(Cursor));VarsUi.Tmp++)
- {
- VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
- VarsUi.pTmp++;
- }
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_LEFT : // Dec
- {
- cUiListLeft(MAX_VOLUME + 1,&VarsUi.Counter);
- IOMapUi.Volume = VarsUi.Counter - 1;
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_RIGHT : // Inc
- {
- cUiListRight(MAX_VOLUME + 1,&VarsUi.Counter);
- IOMapUi.Volume = VarsUi.Counter - 1;
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_ENTER : // Enter
- {
- VarsUi.NVData.VolumeStep = VarsUi.Counter - 1;
- cUiNVWrite();
- IOMapUi.Volume = VarsUi.NVData.VolumeStep;
- pMapSound->Volume = IOMapUi.Volume;
- Action = MENU_EXIT;
- }
- break;
-
- case MENU_EXIT : // Leave
- {
- IOMapUi.Volume = VarsUi.NVData.VolumeStep;
- }
- break;
-
- }
- if (Action == MENU_DRAW)
- {
- sprintf((char*)VarsUi.DisplayBuffer,"%u",(UWORD)VarsUi.Counter - 1);
- pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;
-
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
- VarsUi.CursorTmp[4] = 46;
- VarsUi.CursorTmp[5] = 24;
- pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= (TEXTLINE_BIT(TEXTLINE_3) | BITMAP_BIT(BITMAP_1));
- }
- if (Action == MENU_EXIT)
- {
- IOMapUi.State = EXIT_PRESSED;
- }
-
- return (0);
-}
-
-
-
-//******* cUiGetUserString ***************************************************
-
-#define STRINGTYPES 2
-
-#define TOPTEXT_LINE TEXTLINE_3
-#define STRING_LINE TEXTLINE_5
-
-typedef struct
-{
- const UBYTE Text;
- const UBYTE *Figures;
- const UBYTE NoOfFigures;
- const UBYTE MaxStringLength;
- const UBYTE WindowSize;
- const SBYTE DefaultPointer;
-}
-STRSETS;
-
-const UBYTE Figures[] = { "0987654321" "\x7F" "abcdefghijklmnopqrstuvwxyz " };
-
-const STRSETS StrSets[STRINGTYPES] =
-{
- { TXT_GETUSERSTRING_PIN, Figures, 37, SIZE_OF_BT_PINCODE - 1, 15, 10 },
- { TXT_GETUSERSTRING_FILENAME, Figures, 37, FILENAME_LENGTH - 4 , 15, 10 }
-};
-
-
-UBYTE cUiGetUserString(UBYTE Type) // 0=Pincode, 1=filename
-{
- UBYTE Tmp1;
- SBYTE Tmp2;
-
- if (Type < STRINGTYPES)
- {
- switch (VarsUi.GUSState)
- {
- case 0 : // Init screen
- {
- // Disable update and prepare screen
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Ok;
-
- // Set figure pointer to default
- VarsUi.FigurePointer = (SBYTE)StrSets[Type].DefaultPointer;
-
- // Calculate cursor from default string
- VarsUi.GUSCursor = 0;
- while ((VarsUi.GUSCursor < DISPLAYLINE_LENGTH) && VarsUi.UserString[VarsUi.GUSCursor])
- {
- VarsUi.GUSCursor++;
- }
- VarsUi.GUSNoname = TRUE;
-
- VarsUi.GUSState++;
- }
- break;
-
- case 1 : // Update user string
- {
- if (!(pMapDisplay->EraseMask & SCREEN_BIT(SCREEN_LARGE)))
- {
- // Display top text
- pMapDisplay->pTextLines[TOPTEXT_LINE] = cUiGetString(StrSets[Type].Text);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TOPTEXT_LINE);
-
- Tmp1 = 0;
- while (VarsUi.UserString[Tmp1] && (Tmp1 < StrSets[Type].MaxStringLength))
- {
- VarsUi.DisplayText[Tmp1] = VarsUi.UserString[Tmp1];
- Tmp1++;
- }
- if (Tmp1 < StrSets[Type].MaxStringLength)
- {
- VarsUi.DisplayText[Tmp1] = '_';
- Tmp1++;
- }
- while (Tmp1 < StrSets[Type].MaxStringLength)
- {
- VarsUi.DisplayText[Tmp1] = ' ';
- Tmp1++;
- }
- VarsUi.DisplayText[Tmp1] = 0;
-
- pMapDisplay->pTextLines[STRING_LINE] = VarsUi.DisplayText;
- pMapDisplay->UpdateMask |= (TEXTLINE_BIT(STRING_LINE) | SPECIAL_BIT(TOPLINE));
- pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
- VarsUi.GUSState++;
- }
- }
- break;
-
- case 2 : // Update figure string
- {
- if (!(pMapDisplay->EraseMask & BITMAP_BIT(BITMAP_1)))
- {
- Tmp2 = VarsUi.FigurePointer;
-
- for (Tmp1 = 0;Tmp1 < 3;Tmp1++)
- {
- if (Tmp2)
- {
- Tmp2--;
- }
- else
- {
- Tmp2 = StrSets[Type].NoOfFigures - 1;
- }
- }
- for (Tmp1 = 0;Tmp1 < 7;Tmp1++)
- {
- if ((Tmp1 == 3) && (StrSets[Type].Figures[Tmp2] == 0x7F))
- {
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
- }
- else
- {
- pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,5 + Tmp1 * 14,52,StrSets[Type].Figures[Tmp2],0);
- }
- if (Tmp2 < (StrSets[Type].NoOfFigures - 1))
- {
- Tmp2++;
- }
- else
- {
- Tmp2 = 0;
- }
- }
- pMapDisplay->pFunc(DISPLAY_HORISONTAL_LINE,TRUE,42,47,57,0);
- pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,42,47,0,63);
- pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,57,47,0,63);
-
- VarsUi.GUSState++;
- }
- }
- break;
-
- case 3 : // Get user input
- {
- if ((pMapButton->State[BTN4] & LONG_PRESSED_EV))
- {
- if (VarsUi.GUSCursor)
- {
- if ((VarsUi.UserString[VarsUi.GUSCursor - 1] >= 'a') && (VarsUi.UserString[VarsUi.GUSCursor - 1] <= 'z'))
- {
- VarsUi.UserString[VarsUi.GUSCursor - 1] -= ' ';
- VarsUi.GUSState -= 2;
- }
- }
- }
-
- switch (cUiReadButtons())
- {
- case BUTTON_LEFT :
- {
- if (VarsUi.FigurePointer)
- {
- VarsUi.FigurePointer--;
- }
- else
- {
- VarsUi.FigurePointer = StrSets[Type].NoOfFigures - 1;
- }
- pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
- VarsUi.GUSState -= 2;
- }
- break;
-
- case BUTTON_ENTER :
- {
- switch (StrSets[Type].Figures[VarsUi.FigurePointer])
- {
- case 0x7F :
- {
- VarsUi.GUSState = 100;
- }
- break;
-
- default :
- {
- VarsUi.GUSNoname = FALSE;
- if (VarsUi.GUSCursor < StrSets[Type].MaxStringLength)
- {
- VarsUi.UserString[VarsUi.GUSCursor] = StrSets[Type].Figures[VarsUi.FigurePointer];
- VarsUi.GUSCursor++;
- VarsUi.UserString[VarsUi.GUSCursor] = 0;
- VarsUi.GUSState -= 2;
- }
- }
- break;
-
- }
- }
- break;
-
- case BUTTON_RIGHT :
- {
- if (VarsUi.FigurePointer < (StrSets[Type].NoOfFigures - 1))
- {
- VarsUi.FigurePointer++;
- }
- else
- {
- VarsUi.FigurePointer = 0;
- }
- pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
- VarsUi.GUSState -= 2;
- }
- break;
-
- case BUTTON_EXIT :
- {
- if (VarsUi.GUSCursor)
- {
- if (VarsUi.GUSNoname == TRUE)
- {
- VarsUi.GUSNoname = FALSE;
- 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++;
- }
-
-}
-
-UBYTE cUiDataLogging(UBYTE Action)
-{
- SBYTE TmpBuffer[DATALOGBUFFERSIZE + 1];
-
- switch (Action)
- {
- case MENU_INIT : // Initialize all ports to empty
- {
-// Show select
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_VIEW_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
-
-// Init ports
- for (VarsUi.Tmp = 0;VarsUi.Tmp < DATALOGPORTS;VarsUi.Tmp++)
- {
- VarsUi.DatalogPort[VarsUi.Tmp] = MENU_SENSOR_EMPTY;
- }
- }
- break;
-
- case MENU_EXIT : // Initialize all ports to empty
- {
-// Show select
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_VIEW_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
- }
- break;
-
- case MENU_TEXT : // Write text
- {
-// Init selected sensor and port to none
- VarsUi.SelectedSensor = MENU_SENSOR_EMPTY;
- VarsUi.SelectedPort = MENU_PORT_EMPTY;
-// Count ports
- VarsUi.Counter = 0;
- for (VarsUi.Tmp = 0;VarsUi.Tmp < DATALOGPORTS;VarsUi.Tmp++)
- {
- if (MENU_SENSOR_EMPTY != VarsUi.DatalogPort[VarsUi.Tmp])
- {
-// Find default port to view
- if (VarsUi.SelectedPort == MENU_PORT_EMPTY)
- {
- VarsUi.SelectedPort = VarsUi.Tmp + MENU_PORT_1;
- }
- VarsUi.Counter++;
- }
- }
- if (VarsUi.Counter)
- {
-// Display text
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_DATALOGGING_PRESS_EXIT_TO);
- pMapDisplay->pTextLines[TEXTLINE_4] = cUiGetString(TXT_DATALOGGING_STOP_DATALOGGING);
-
- pMapDisplay->TextLinesCenterFlags |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
- pMapDisplay->UpdateMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
- }
- else
- {
- cUiMenuPrevFile();
- IOMapUi.State = NEXT_MENU;
- VarsUi.State = 0;
- }
- }
- break;
-
- case MENU_RUN : // Run data logging
- {
- switch (VarsUi.State)
- {
- case 0 : // Init log
- {
-// Save menu text
- VarsUi.MenuIconTextSave = pMapDisplay->pMenuText;
-
-// Delete file if exist
- sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_DATALOG_FILENAME,(char*)TXT_FILE_EXT[FILETYPE_DATALOG]);
- 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);
- }
-
-// Open file
- VarsUi.TmpLength = pMapLoader->FreeUserFlash;
- sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_DATALOG_FILENAME,(char*)TXT_FILE_EXT[FILETYPE_DATALOG]);
- VarsUi.TmpHandle = pMapLoader->pFunc(OPENWRITEDATA,VarsUi.FilenameBuffer,NULL,&VarsUi.TmpLength);
- VarsUi.DatalogError = VarsUi.TmpHandle;
- if (!(VarsUi.DatalogError & 0x8000))
- {
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"%s\t%lu",SENSORSYNCDATA,pMapCmd->SyncTime);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
-
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t%lu",pMapCmd->SyncTick);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
-
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t%lu",pMapCmd->Tick);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
-
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t%lu\t-1\r\n",DATALOG_DEFAULT_SAMPLE_TIME);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
-
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"%s",SENSORSDATA);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- for (VarsUi.Tmp = 0;(VarsUi.Tmp < DATALOGPORTS) && (!(VarsUi.DatalogError & 0x8000));VarsUi.Tmp++)
- {
- if (MENU_SENSOR_EMPTY != VarsUi.DatalogPort[VarsUi.Tmp])
- {
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t%u_%s%s",(UWORD)(VarsUi.Tmp + 1),(char*)SENSORDIRNAME[(VarsUi.DatalogPort[VarsUi.Tmp] - MENU_SENSOR_EMPTY) - 1],(char*)SENSORUNITNAME[(VarsUi.DatalogPort[VarsUi.Tmp] - MENU_SENSOR_EMPTY) - 1]);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- }
- }
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\r\n");
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"%s",SENSORTIME);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- for (VarsUi.Tmp = 0;(VarsUi.Tmp < DATALOGPORTS) && (!(VarsUi.DatalogError & 0x8000));VarsUi.Tmp++)
- {
- if (MENU_SENSOR_EMPTY != VarsUi.DatalogPort[VarsUi.Tmp])
- {
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t%s",(char*)SENSORDIRNAME[(VarsUi.DatalogPort[VarsUi.Tmp] - MENU_SENSOR_EMPTY) - 1]);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- }
- }
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\r\n");
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- if (!(VarsUi.DatalogError & 0x8000))
- {
- VarsUi.DatalogTimer = 0;
- VarsUi.DatalogSampleTime = DATALOG_DEFAULT_SAMPLE_TIME;
- VarsUi.DatalogSampleTimer = 0;
- VarsUi.Timer = 0;
- VarsUi.Update = TRUE;
- IOMapUi.Flags |= UI_BUSY;
- VarsUi.DatalogOldTick = pMapCmd->Tick;
- VarsUi.SensorReset = TRUE;
- VarsUi.State++;
- }
- else
- {
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
- pMapDisplay->pBitmaps[BITMAP_1] = NULL;
- VarsUi.State = 4;
- }
- }
- else
- {
-// File error
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
- pMapDisplay->pBitmaps[BITMAP_1] = NULL;
- VarsUi.State = 3;
- }
- }
- break;
-
- case 1 :
- {
-// Get real time since last
- VarsUi.DatalogRTC = (pMapCmd->Tick - VarsUi.DatalogOldTick);
- VarsUi.DatalogOldTick = pMapCmd->Tick;
-// Update all timers
- VarsUi.DatalogTimer += VarsUi.DatalogRTC;
- VarsUi.DatalogSampleTimer += VarsUi.DatalogRTC;
- VarsUi.ReadoutTimer += VarsUi.DatalogRTC;
-// Update sensor values
- cUiUpdateSensor((SWORD)VarsUi.DatalogRTC);
-// Check for select change
- if (VarsUi.Update == TRUE)
- {
- VarsUi.Update = FALSE;
- VarsUi.SelectedSensor = VarsUi.DatalogPort[VarsUi.SelectedPort - MENU_PORT_1];
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = cUiMenuGetIconImage(cUiMenuSearchSensorIcon(VarsUi.SelectedSensor));
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = NULL;
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = NULL;
-
- pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Display;
- pMapDisplay->UpdateMask = (BITMAP_BIT(BITMAP_1) | MENUICON_BITS | SPECIAL_BIT(TOPLINE) | SPECIAL_BIT(FRAME_SELECT));
-
- pMapDisplay->pBitmaps[BITMAP_2] = (BMPMAP*)VarsUi.PortBitmapLeft;
- pMapDisplay->pBitmaps[BITMAP_3] = (BMPMAP*)VarsUi.PortBitmapCenter;
- pMapDisplay->pBitmaps[BITMAP_4] = (BMPMAP*)VarsUi.PortBitmapRight;
-
- cUiDrawPortNo(VarsUi.PortBitmapCenter,MENUICON_CENTER,VarsUi.SelectedPort - MENU_PORT_EMPTY);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_3);
-
-
-
- if (VarsUi.Counter == 2)
- {
- VarsUi.Tmp = VarsUi.SelectedPort;
- do
- {
- VarsUi.Tmp++;
- if (VarsUi.Tmp >= MENU_PORT_INVALID)
- {
- VarsUi.Tmp = MENU_PORT_1;
- }
- }
- while (VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1] == MENU_SENSOR_EMPTY);
- if (VarsUi.Tmp > VarsUi.SelectedPort)
- {
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = cUiMenuGetIconImage(cUiMenuSearchSensorIcon(VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1]));
- cUiDrawPortNo(VarsUi.PortBitmapRight,MENUICON_RIGHT,VarsUi.Tmp - MENU_PORT_EMPTY);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_4);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = cUiMenuGetIconImage(cUiMenuSearchSensorIcon(VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1]));
- cUiDrawPortNo(VarsUi.PortBitmapLeft,MENUICON_LEFT,VarsUi.Tmp - MENU_PORT_EMPTY);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_2);
- }
- }
- if (VarsUi.Counter > 2)
- {
- VarsUi.Tmp = VarsUi.SelectedPort;
- do
- {
- VarsUi.Tmp++;
- if (VarsUi.Tmp >= MENU_PORT_INVALID)
- {
- VarsUi.Tmp = MENU_PORT_1;
- }
- }
- while (VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1] == MENU_SENSOR_EMPTY);
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = cUiMenuGetIconImage(cUiMenuSearchSensorIcon(VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1]));
- cUiDrawPortNo(VarsUi.PortBitmapRight,MENUICON_RIGHT,VarsUi.Tmp - MENU_PORT_EMPTY);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_4);
-
- VarsUi.Tmp = VarsUi.SelectedPort;
- do
- {
- VarsUi.Tmp--;
- if (VarsUi.Tmp <= MENU_PORT_EMPTY)
- {
- VarsUi.Tmp = MENU_PORT_INVALID - 1;
- }
- }
- while (VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1] == MENU_SENSOR_EMPTY);
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = cUiMenuGetIconImage(cUiMenuSearchSensorIcon(VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1]));
- cUiDrawPortNo(VarsUi.PortBitmapLeft,MENUICON_LEFT,VarsUi.Tmp - MENU_PORT_EMPTY);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_2);
-
-
- }
- VarsUi.ReadoutTimer = DISPLAY_VIEW_UPDATE;
- }
-// Write sample if timeout
- if (VarsUi.DatalogSampleTimer >= VarsUi.DatalogSampleTime)
- {
- VarsUi.DatalogSampleTimer -= VarsUi.DatalogSampleTime;
-
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"%lu",VarsUi.DatalogTimer - VarsUi.DatalogSampleTime);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- for (VarsUi.Tmp = 0;(VarsUi.Tmp < DATALOGPORTS) && (!(VarsUi.DatalogError & 0x8000));VarsUi.Tmp++)
- {
- if (MENU_SENSOR_EMPTY != VarsUi.DatalogPort[VarsUi.Tmp])
- {
- if (VarsUi.DatalogSampleValid[VarsUi.Tmp] == TRUE)
- {
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,(char*)SENSORFORMAT2[(VarsUi.DatalogPort[VarsUi.Tmp] - MENU_SENSOR_EMPTY) - 1],(float)VarsUi.DatalogSampleValue[VarsUi.Tmp] / SENSORDIVIDER[VarsUi.DatalogPort[VarsUi.Tmp] - MENU_SENSOR_EMPTY]);
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- }
- else
- {
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\t-");
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- }
- }
- }
- VarsUi.TmpLength = (ULONG)sprintf((char*)TmpBuffer,"\r\n");
- VarsUi.DatalogError |= pMapLoader->pFunc(WRITE,(UBYTE*)&VarsUi.TmpHandle,(UBYTE*)TmpBuffer,&VarsUi.TmpLength);
- }
-// Refresh display
- if (++VarsUi.ReadoutTimer >= DISPLAY_VIEW_UPDATE)
- {
- VarsUi.ReadoutTimer = 0;
-
-// Display sensor value
- cUiPrintSensorInDisplayBuffer(VarsUi.SelectedPort);
- pMapDisplay->pTextLines[TEXTLINE_4] = VarsUi.DisplayBuffer;
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4);
- }
-
-// Test for file error
- if ((VarsUi.DatalogError & 0x8000))
- {
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
- pMapDisplay->pBitmaps[BITMAP_1] = NULL;
- VarsUi.State = 4;
- }
-
-// Test for break;
- switch (cUiReadButtons())
- {
- case BUTTON_EXIT :
- {
- VarsUi.State++;
- }
- break;
-
- case BUTTON_LEFT :
- {
- VarsUi.Tmp = VarsUi.SelectedPort;
- do
- {
- VarsUi.Tmp--;
- if (VarsUi.Tmp <= MENU_PORT_EMPTY)
- {
- VarsUi.Tmp = MENU_PORT_INVALID - 1;
- }
- }
- while (VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1] == MENU_SENSOR_EMPTY);
- if ((VarsUi.Counter > 2) || (VarsUi.Tmp < VarsUi.SelectedPort))
- {
- VarsUi.SelectedPort = VarsUi.Tmp;
- }
- VarsUi.Update = TRUE;
- }
- break;
-
- case BUTTON_RIGHT :
- {
- VarsUi.Tmp = VarsUi.SelectedPort;
- do
- {
- VarsUi.Tmp++;
- if (VarsUi.Tmp >= MENU_PORT_INVALID)
- {
- VarsUi.Tmp = MENU_PORT_1;
- }
- }
- while (VarsUi.DatalogPort[VarsUi.Tmp - MENU_PORT_1] == MENU_SENSOR_EMPTY);
- if ((VarsUi.Counter > 2) || (VarsUi.Tmp > VarsUi.SelectedPort))
- {
- VarsUi.SelectedPort = VarsUi.Tmp;
- }
- VarsUi.Update = TRUE;
- }
- break;
-
- }
- IOMapUi.Flags |= UI_RESET_SLEEP_TIMER;
- }
- break;
-
- case 2 :
- {
-// Close file
- pMapLoader->pFunc(CROPDATAFILE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
-
-// Clean up
- pMapDisplay->pMenuText = VarsUi.MenuIconTextSave;
- cUiReleaseSensors();
-
- IOMapUi.Flags &= ~UI_BUSY;
- IOMapUi.State = RIGHT_PRESSED;
- VarsUi.State = 0;
- }
- break;
-
- case 3 : // Display memory full text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_DL_ERROR_MEMORY_FULL_1,TXT_FB_DL_ERROR_MEMORY_FULL_2,DISPLAY_SHOW_ERROR_TIME))
- {
- cUiMenuPrevFile();
- IOMapUi.State = NEXT_MENU;
- VarsUi.State = 0;
- }
- }
- break;
-
- case 4 : // Display memory full text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_DL_ERROR_MEMORY_FULL_1,TXT_FB_DL_ERROR_MEMORY_FULL_2,DISPLAY_SHOW_ERROR_TIME))
- {
- VarsUi.State = 2;
- }
- }
- break;
-
- }
- }
- break;
-
- case MENU_SAVE : // Save datalog file
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.NVData.DatalogNumber++;
- if (VarsUi.NVData.DatalogNumber > MAX_DATALOGS)
- {
- VarsUi.NVData.DatalogNumber = 1;
- }
- cUiNVWrite();
- sprintf((char*)VarsUi.SelectedFilename,"%s%u.%s",(char*)UI_DATALOG_FILENAME,VarsUi.NVData.DatalogNumber,TXT_FILE_EXT[FILETYPE_DATALOG]);
- VarsUi.State++;
- }
- break;
-
- case 1 :
- {
-// Rename TEMP_DATALOG_FILENAME to VarsUi.SelectedFilename(user filename)
- sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_DATALOG_FILENAME,(char*)TXT_FILE_EXT[FILETYPE_DATALOG]);
- VarsUi.TmpHandle = pMapLoader->pFunc(RENAMEFILE,VarsUi.FilenameBuffer,VarsUi.SelectedFilename,&VarsUi.TmpLength);
- VarsUi.State++;
- }
- break;
-
- case 2 : // Display saved text
- {
- if (!cUiFeedback((BMPMAP*)Info,TXT_FB_DL_FILE_SAVED_INFO,0xFF,DISPLAY_SHOW_FILENAME_TIME))
- {
- VarsUi.State++;
- }
- }
- break;
-
- default :
- {
- cUiMenuPrevFile();
- IOMapUi.State = NEXT_MENU;
- VarsUi.State = 0;
- }
- break;
-
- }
- }
- break;
-
- case MENU_DELETE : // Delete datalog file
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
-// Delete file if exist
- sprintf((char*)VarsUi.FilenameBuffer,"%s.%s",(char*)TEMP_DATALOG_FILENAME,(char*)TXT_FILE_EXT[FILETYPE_DATALOG]);
- pMapLoader->pFunc(DELETE,VarsUi.FilenameBuffer,NULL,NULL);
- VarsUi.State++;
- }
- break;
-
- case 1 :
- {
- pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4) | TEXTLINE_BIT(TEXTLINE_5) | MENUICON_BITS | SPECIAL_BIT(MENUTEXT));
- VarsUi.Timer = DISPLAY_SHOW_TIME;
- VarsUi.State++;
- }
- break;
-
- case 2 :
- {
- if (++VarsUi.Timer >= DISPLAY_SHOW_TIME)
- {
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_3);
- VarsUi.State++;
- }
- }
- break;
-
- default :
- {
- VarsUi.State = 0;
- }
- break;
-
- }
- }
- break;
-
- case MENU_SELECT : // Save sensor
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_VIEW_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
-
- VarsUi.DatalogPort[VarsUi.SelectedPort - MENU_PORT_1] = VarsUi.SelectedSensor;
- IOMapUi.State = EXIT_PRESSED;
- }
- break;
-
- default :
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- if ((Action > MENU_SENSOR_EMPTY) && (Action < MENU_SENSOR_INVALID))
- {
- VarsUi.SelectedSensor = Action;
- }
- if ((Action > MENU_PORT_EMPTY) && (Action < MENU_PORT_INVALID))
- {
- VarsUi.SelectedPort = Action;
- if (VarsUi.DatalogPort[VarsUi.SelectedPort - MENU_PORT_1] != MENU_SENSOR_EMPTY)
- {
-
- // Port occupied
- pMapDisplay->pTextLines[TEXTLINE_4] = cUiGetString(TXT_DATALOGGING_PORT_OCCUPIED);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4);
- VarsUi.Timer = 0;
- VarsUi.State++;
- }
- }
- }
- break;
-
- default :
- {
- if ((++VarsUi.Timer >= DISPLAY_SHOW_TIME) || (BUTTON_NONE != cUiReadButtons()))
- {
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_4);
- cUiMenuPrev();
- IOMapUi.State = NEXT_MENU;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
- }
- break;
-
- }
-
- return (VarsUi.State);
-}
-
-
-//******* 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_DATA(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_DATA(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
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_OBP_MEMORY_FULL_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- cUiMenuPrevFile();
- IOMapUi.State = NEXT_MENU;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
- }
- break;
-
- }
-
- // Update display screen
- if (Action == MENU_DRAW)
- {
- VarsUi.OBPTimer = 0;
-
- for (VarsUi.Pointer = 0;VarsUi.Pointer < ON_BRICK_PROGRAMSTEPS;VarsUi.Pointer++)
- {
- VarsUi.Tmp = VarsUi.ProgramSteps[VarsUi.Pointer];
- if ((VarsUi.Tmp >= MENU_ACTION_EMPTY) && (VarsUi.Tmp < MENU_ACTION_INVALID))
- {
- VarsUi.Tmp -= MENU_ACTION_EMPTY;
- pMapDisplay->StepIcons[VarsUi.Pointer] = VarsUi.Tmp + 1;
- }
- if ((VarsUi.Tmp >= MENU_WAIT_EMPTY) && (VarsUi.Tmp < MENU_WAIT_INVALID))
- {
- VarsUi.Tmp -= MENU_WAIT_EMPTY;
- pMapDisplay->StepIcons[VarsUi.Pointer] = VarsUi.Tmp + 1 + 16;
- }
- if (VarsUi.Tmp == MENU_LOOP)
- {
- pMapDisplay->StepIcons[VarsUi.Pointer] = 31;
- }
- if (VarsUi.Tmp == MENU_STOP)
- {
- pMapDisplay->StepIcons[VarsUi.Pointer] = 32;
- }
- pMapDisplay->UpdateMask |= STEPICON_BIT(STEPICON_1 + VarsUi.Pointer);
- }
-
- // and cursor
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
- if (VarsUi.ProgramStepPointer < ON_BRICK_PROGRAMSTEPS)
- {
- VarsUi.CursorTmp[4] = 13 + (VarsUi.ProgramStepPointer * 17);
- VarsUi.CursorTmp[5] = 24;
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
- }
- if (PROG_RUNNING != pMapCmd->ProgStatus)
- {
- pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_2));
- }
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->UpdateMask |= (SPECIAL_BIT(STEPLINE) | SPECIAL_BIT(TOPLINE));
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiFileRun **********************************************************
-
-UBYTE cUiFindFileType(UBYTE *Filename) // Find file type number
-{
- UBYTE Ext[FILENAME_LENGTH + 1];
- UBYTE Result;
- UBYTE Tmp1;
- UBYTE Tmp2;
-
- Result = FILETYPE_ALL;
-
- Tmp1 = 0;
- while ((Filename[Tmp1]) && (Tmp1 < FILENAME_LENGTH)) // Search forward for termination
- {
- Tmp1++;
- }
-
- while ((Tmp1) && (Filename[Tmp1] != '.')) // Search backward for "."
- {
- Tmp1--;
- }
-
- if (Filename[Tmp1] == '.') // If "."
- {
- Tmp1++;
- Tmp2 = 0;
-
- while ((Filename[Tmp1]) && (Tmp1 < FILENAME_LENGTH)) // Convert to upper to Ext
- {
- Ext[Tmp2] = tolower(Filename[Tmp1]);
- Tmp1++;
- Tmp2++;
- }
- Ext[Tmp2] = 0; // Inser termination
-
- // Calculate type
- for (Tmp1 = FILETYPE_ALL;(Tmp1 < FILETYPES) && (Result == FILETYPE_ALL);Tmp1++)
- {
- if (strcmp((char*)TXT_FILE_EXT[Tmp1],(char*)Ext) == 0)
- {
- Result = Tmp1;
- }
- }
- }
-
- return (Result);
-}
-
-
-#define FILERUN_FILENAMELINE TEXTLINE_4
-#define FILERUN_TEXTLINE TEXTLINE_5
-
-UBYTE cUiFileRun(UBYTE Action) // Run selected file
-{
- switch (Action)
- {
-
- case MENU_INIT :
- {
- VarsUi.Tmp = 0;
- while ((VarsUi.SelectedFilename[VarsUi.Tmp]) && (VarsUi.Tmp < FILENAME_LENGTH)) // Search forward for termination
- {
- VarsUi.Tmp++;
- }
-
- while ((VarsUi.Tmp) && (VarsUi.SelectedFilename[VarsUi.Tmp] != '.')) // Search backward for "."
- {
- VarsUi.Tmp--;
- }
-
- if (VarsUi.Tmp > DISPLAYLINE_LENGTH)
- {
- VarsUi.Tmp = DISPLAYLINE_LENGTH;
- }
-
- VarsUi.DisplayBuffer[VarsUi.Tmp] = 0;
-
- while (VarsUi.Tmp) // Copy only name not ext
- {
- VarsUi.Tmp--;
- VarsUi.DisplayBuffer[VarsUi.Tmp] = VarsUi.SelectedFilename[VarsUi.Tmp];
- }
-
- pMapDisplay->pTextLines[FILERUN_FILENAMELINE] = (UBYTE*)VarsUi.DisplayBuffer;
- pMapDisplay->TextLinesCenterFlags = TEXTLINE_BIT(FILERUN_FILENAMELINE);
- pMapDisplay->UpdateMask = TEXTLINE_BIT(FILERUN_FILENAMELINE);
- }
- break;
-
- case MENU_RUN :
- {
- if (VarsUi.Timer < DISPLAY_SHOW_TIME)
- {
- VarsUi.Timer++;
- }
-
- switch (VarsUi.State)
- {
- case 0 :
- {
- IOMapUi.Flags |= UI_BUSY;
- VarsUi.State++;
- }
- break;
-
- case 1 : // Set state from extention when sound is ready
- {
- if (SOUND_IDLE == pMapSound->State)
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_RUNNING);
- pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- cUiRunning(MENU_INIT);
- VarsUi.State++;
- }
- }
- break;
-
- case 2 :
- {
- if ((!pMapDisplay->EraseMask) && (!pMapDisplay->UpdateMask))
- {
- VarsUi.State = 10 * cUiFindFileType(VarsUi.SelectedFilename);
- if (VarsUi.State == (FILETYPE_TRYME * 10))
- {
- VarsUi.State = FILETYPE_LMS * 10;
- }
- }
- }
- break;
-
- case (FILETYPE_SOUND * 10 + 0) : // Start sound file (*.snd, *.rso) Wait for sound idle
- {
- strcpy((char*)pMapSound->SoundFilename,(char*)VarsUi.SelectedFilename);
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_ONCE;
- pMapSound->Flags |= SOUND_UPDATE;
- VarsUi.State++;
- }
- break;
-
- case (FILETYPE_SOUND * 10 + 1) : // Wait for stop or user break
- {
- cUiRunning(MENU_RUN);
-
- if (SOUND_IDLE == pMapSound->State)
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
- VarsUi.State = 99;
- }
- if (BUTTON_EXIT == cUiReadButtons())
- {
- pMapSound->Flags &= ~SOUND_UPDATE;
- pMapSound->State = SOUND_STOP;
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ABORTED);
- VarsUi.State = 99;
- }
- }
- break;
-
- case (FILETYPE_LMS * 10 + 0) : // Start LMS file (*.rxe)
- {
- if ((!pMapDisplay->EraseMask) && (pMapCmd->ProgStatus == PROG_IDLE) && (!pMapButton->State[BTN4]))
- {
- strcpy((char*)pMapCmd->FileName,(char*)VarsUi.SelectedFilename);
- pMapCmd->ActivateFlag = TRUE;
- VarsUi.State++;
- }
- }
- break;
-
- case (FILETYPE_LMS * 10 + 1) : // Wait for program stop or user break
- {
- cUiRunning(MENU_RUN);
-
- if ((IOMapUi.Flags & UI_REDRAW_STATUS) && (IOMapUi.Flags & UI_ENABLE_STATUS_UPDATE))
- {
- pMapDisplay->pTextLines[FILERUN_FILENAMELINE] = (UBYTE*)VarsUi.DisplayBuffer;
- pMapDisplay->TextLinesCenterFlags = TEXTLINE_BIT(FILERUN_FILENAMELINE);
- pMapDisplay->UpdateMask = TEXTLINE_BIT(FILERUN_FILENAMELINE);
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_RUNNING);
- pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- }
-
- switch (pMapCmd->ProgStatus)
- {
- case PROG_RUNNING :
- {
- }
- break;
-
- case PROG_OK :
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
- VarsUi.State = 99;
- }
- break;
-
- case PROG_ABORT :
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ABORTED);
- VarsUi.State = 99;
- }
- break;
-
- default :
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_FILE_ERROR);
- VarsUi.State = 99;
- }
- break;
-
- }
- }
- break;
-
- case (FILETYPE_NXT * 10 + 0) :// Start Program file (*.prg)
- {
- VarsUi.TmpHandle = pMapLoader->pFunc(OPENREAD,VarsUi.SelectedFilename,NULL,&VarsUi.TmpLength);
- if (!(VarsUi.TmpHandle & 0x8000))
- {
- VarsUi.TmpLength = FILEHEADER_LENGTH;
- pMapLoader->pFunc(READ,(UBYTE*)&VarsUi.TmpHandle,VarsUi.FileHeader,&VarsUi.TmpLength);
- VarsUi.TmpLength = ON_BRICK_PROGRAMSTEPS;
- pMapLoader->pFunc(READ,(UBYTE*)&VarsUi.TmpHandle,VarsUi.ProgramSteps,&VarsUi.TmpLength);
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
- }
- if ((ON_BRICK_PROGRAMSTEPS == VarsUi.TmpLength) && (VarsUi.FileHeader[0] == (UBYTE)(FILEFORMAT_PROGRAM >> 8)) && (VarsUi.FileHeader[1] == (UBYTE)(FILEFORMAT_PROGRAM)))
- {
- // 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.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);
- }
-
- pMapDisplay->UpdateMask &= ~TEXTLINE_BIT(FILERUN_FILENAMELINE);
- pMapDisplay->EraseMask |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
- VarsUi.State++;
- }
- else
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_FILE_ERROR);
- VarsUi.State = 99;
- }
- VarsUi.GUSState = 0;
- }
- break;
-
- case (FILETYPE_NXT * 10 + 1) : // Wait for program stop or user break
- {
- VarsUi.State = VarsUi.GUSState;
- cUiOnBrickProgramming(MENU_RUN);
- VarsUi.GUSState = VarsUi.State;
- if (VarsUi.State)
- {
- VarsUi.State = (FILETYPE_NXT * 10 + 1);
- }
- else
- {
- pMapDisplay->pTextLines[FILERUN_TEXTLINE] = cUiGetString(TXT_FILERUN_ENDED);
- VarsUi.State = 99;
- }
- }
- break;
-
- case 99 : // Wait for display show time or user action
- {
- pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->UpdateMask = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- pMapDisplay->TextLinesCenterFlags = (TEXTLINE_BIT(FILERUN_TEXTLINE) | TEXTLINE_BIT(FILERUN_FILENAMELINE));
- IOMapUi.Flags |= UI_REDRAW_STATUS | UI_ENABLE_STATUS_UPDATE;
- cUiRunning(MENU_UPDATE);
- VarsUi.Timer = 0;
- VarsUi.State++;
- }
- break;
-
- default :
- {
- if ((++VarsUi.Timer >= DISPLAY_SHOW_TIME) || (BUTTON_NONE != cUiReadButtons()))
- {
- if (pMapCmd->ProgStatus != PROG_IDLE)
- pMapCmd->ProgStatus = PROG_RESET;
- pMapDisplay->UpdateMask = 0;
- pMapDisplay->TextLinesCenterFlags = 0;
- cUiRunning(MENU_EXIT);
- pMapDisplay->EraseMask = TEXTLINE_BIT(FILERUN_TEXTLINE);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(FILERUN_FILENAMELINE);
- IOMapUi.Flags &= ~UI_BUSY;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
- }
- break;
-
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiFileDelete *******************************************************
-
-UBYTE cUiFileDelete(UBYTE Action)
-{
- if (MENU_INIT == Action)
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.State++;
- }
- break;
-
- case 1 :
- {
- if (SOUND_IDLE == pMapSound->State)
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 2 :
- {
- pMapLoader->pFunc(DELETE,VarsUi.SelectedFilename,NULL,NULL);
- VarsUi.State++;
- }
- break;
-
- default : // Display deleted text
- {
- if (!cUiFeedback((BMPMAP*)Info,TXT_FB_FD_FILE_DELETED_INFO,0,DISPLAY_SHOW_TIME))
- {
- IOMapUi.State = EXIT_PRESSED;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
- }
-
- return (VarsUi.State);
-}
-
-
-//******* cUiView ************************************************************
-
-UBYTE cUiView(UBYTE Action) // MENU_INIT
-{
- switch (VarsUi.State)
- {
- case 0 :
- {
- switch (Action)
- {
- case MENU_INIT : // Init
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_VIEW_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
-// Init ports
- for (VarsUi.Tmp = 0;VarsUi.Tmp < DATALOGPORTS;VarsUi.Tmp++)
- {
- VarsUi.DatalogPort[VarsUi.Tmp] = MENU_SENSOR_EMPTY;
- }
- }
- break;
-
- default :
- {
- if ((Action > MENU_SENSOR_EMPTY) && (Action < MENU_SENSOR_INVALID))
- {
- VarsUi.SelectedSensor = Action;
- }
- if ((Action >= MENU_PORT_1) && (Action <= MENU_PORT_C))
- {
- VarsUi.SelectedPort = Action;
-
- VarsUi.DatalogPort[VarsUi.SelectedPort - MENU_PORT_1] = VarsUi.SelectedSensor;
-
- IOMapUi.Flags |= UI_BUSY;
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Display;
- pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1);
- IOMapUi.Flags |= UI_REDRAW_STATUS;
- VarsUi.ReadoutTimer = 0;;
- VarsUi.State++;
-
- VarsUi.SensorReset = TRUE;
- }
- }
- break;
-
- }
- }
- break;
-
- case 1 :
- {
- VarsUi.ReadoutTimer++;
- cUiUpdateSensor(1);
- if (VarsUi.ReadoutTimer >= DISPLAY_VIEW_UPDATE)
- {
- VarsUi.ReadoutTimer = 0;
- cUiPrintSensorInDisplayBuffer(VarsUi.SelectedPort);
- pMapDisplay->pTextLines[TEXTLINE_4] = VarsUi.DisplayBuffer;
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4);
- }
-
- VarsUi.Tmp = cUiReadButtons();
- if (VarsUi.Tmp == BUTTON_EXIT)
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_VIEW_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask &= ~TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
- VarsUi.State++;
- }
- if (VarsUi.Tmp == BUTTON_ENTER)
- {
- VarsUi.SensorReset = TRUE;
- }
- }
- break;
-
- default :
- {
- cUiReleaseSensors();
- IOMapUi.Flags &= ~UI_BUSY;
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
- break;
-
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiBtOn ************************************************************
-
-UBYTE cUiBtOn(UBYTE Action)
-{
- switch (Action)
- {
- case MENU_ON :
- {
- switch (VarsUi.State)
- {
- case 0 : // Turn BT on
- {
- VarsUi.BTCommand = (UBYTE)BTON;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- break;
-
- case 1 : // Display turning on text
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_TURNING_ON_WAIT,0,0))
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 2 : // Check result
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State++;
- }
- }
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_TURNING_ON_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- case MENU_OFF :
- {
- switch (VarsUi.State)
- {
- case 0 : // Turn BT off
- {
- VarsUi.BTCommand = (UBYTE)BTOFF;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- break;
-
- case 1 : // Display turning off text
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_TURNING_OFF_WAIT,0,0))
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 2 : // Check result
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State++;
- }
- }
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_TURNING_OFF_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
- if (Action == MENU_EXIT)
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiBtVisiability ***************************************************
-
-UBYTE cUiBtVisiability(UBYTE Action) // Visibility on/off
-{
- switch (Action)
- {
- case MENU_ON : // Set visible
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.BTCommand = (UBYTE)VISIBILITY;
- VarsUi.BTPar1 = (UBYTE)1;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- default :
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- case MENU_OFF : // Set invisible
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.BTCommand = (UBYTE)VISIBILITY;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- default :
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
- if (Action == MENU_EXIT)
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiBtSearch ********************************************************
-
-UBYTE cUiBtSearch(UBYTE Action) // Search for devices
-{
- if (Action == MENU_INIT) // Init
- {
- switch (VarsUi.State)
- {
- case 0 : // Show three menu icons
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = pMapDisplay->pMenuIcons[MENUICON_CENTER];
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = pMapDisplay->pMenuIcons[MENUICON_CENTER];
- pMapDisplay->UpdateMask |= MENUICON_BITS;
- VarsUi.State++;
- }
- break;
-
- case 1 : // Display wait text and start search
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_SEARCHING_WAIT,0,0))
- {
- VarsUi.BTCommand = (UBYTE)SEARCH;
- VarsUi.BTPar1 = (UBYTE)1;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.DisplayBuffer[0] = 0;
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
- pMapDisplay->UpdateMask |= SPECIAL_BIT(MENUTEXT);
- VarsUi.NoOfNames = 0;
- VarsUi.NoOfDevices = 0;
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- }
- break;
-
- case 2 : // Wait for search finished
- {
- if (VarsUi.NoOfNames != pMapComm->BtDeviceNameCnt)
- {
- VarsUi.NoOfNames = pMapComm->BtDeviceNameCnt;
-
- if ((VarsUi.NoOfNames) && (VarsUi.NoOfNames <= DISPLAYLINE_LENGTH))
- {
- sprintf((char*)VarsUi.DisplayBuffer,"%.*s",VarsUi.NoOfNames,"****************");
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
- pMapDisplay->UpdateMask |= SPECIAL_BIT(MENUTEXT);
- }
- }
- if (VarsUi.NoOfDevices != pMapComm->BtDeviceCnt)
- {
- VarsUi.NoOfDevices = pMapComm->BtDeviceCnt;
-
- if ((VarsUi.NoOfDevices) && (VarsUi.NoOfDevices <= DISPLAYLINE_LENGTH))
- {
- sprintf((char*)VarsUi.DisplayBuffer,"%.*s",VarsUi.NoOfDevices,"????????????????");
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
- pMapDisplay->UpdateMask |= SPECIAL_BIT(MENUTEXT);
- }
- }
-
- if (VarsUi.BTResult != INPROGRESS)
- {
- cUiBTCommand(UI_BT_GET_DEVICES,0,&VarsUi.Devices,NULL);
- if (VarsUi.Devices)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
-
- if (cUiReadButtons() == BUTTON_EXIT)
- {
- VarsUi.BTCommand = (UBYTE)STOPSEARCH;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult));
- VarsUi.State = 4;
- }
- }
- break;
-
- case 3 : // Auto enter to next menu
- {
- IOMapUi.State = ENTER_PRESSED;
- VarsUi.State = 0;
- }
- break;
-
- case 4 : // Display info text
- {
- if (!cUiFeedback((BMPMAP*)Info,TXT_FB_BT_SEARCH_ABORTED_INFO,0,DISPLAY_SHOW_TIME))
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 5 : // Wait for abort
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- cUiBTCommand(UI_BT_GET_DEVICES,0,&VarsUi.Devices,NULL);
- if (VarsUi.Devices)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- }
- break;
-
- case 6 : // Auto enter to next menu
- {
- IOMapUi.State = ENTER_PRESSED;
- VarsUi.State = 0;
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_SEARCHING_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
- }
- break;
-
- }
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiBtDeviceList ****************************************************
-
-UBYTE cUiBtDeviceList(UBYTE Action) // Show devices
-{
- switch (Action)
- {
- case MENU_INIT : // Init "Search" list
- {
- VarsUi.SelectedDevice = 0;
- VarsUi.DevicesKnown = 0;
- cUiBTCommand(UI_BT_GET_DEVICES,VarsUi.DevicesKnown,&VarsUi.Devices,NULL);
- if (VarsUi.Devices)
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_BTDEVICELIST_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- VarsUi.MenuIconTextSave = pMapDisplay->pMenuText;
- VarsUi.DeviceCenter = 1;
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case MENU_INIT_ALTERNATIVE : // Init only "My contacts"
- {
- VarsUi.SelectedDevice = 0;
- VarsUi.DevicesKnown = 1;
- cUiBTCommand(UI_BT_GET_DEVICES,VarsUi.DevicesKnown,&VarsUi.Devices,NULL);
- if (VarsUi.Devices)
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_BTDEVICELIST_SELECT);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- VarsUi.MenuIconTextSave = pMapDisplay->pMenuText;
- VarsUi.DeviceCenter = 1;
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case MENU_LEFT : // Left button
- {
- cUiListLeft(VarsUi.Devices,&VarsUi.DeviceCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_RIGHT : // Right button
- {
- cUiListRight(VarsUi.Devices,&VarsUi.DeviceCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_SELECT : // Select for connection
- {
- VarsUi.SelectedDevice = VarsUi.DeviceCenter;
- pMapDisplay->pMenuText = VarsUi.MenuIconTextSave;
- IOMapUi.State = NEXT_MENU;
- }
- break;
-
- case MENU_DELETE : // Remove device from "My contacts"
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- if (VarsUi.SelectedDevice)
- {
- if (cUiBTGetDeviceIndex(VarsUi.DevicesKnown,VarsUi.SelectedDevice - 1,&VarsUi.BTIndex))
- {
- VarsUi.BTCommand = (UBYTE)REMOVEDEVICE;
- VarsUi.BTPar1 = (UBYTE)VarsUi.BTIndex;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- else
- {
- Action = MENU_EXIT;
- }
- VarsUi.SelectedDevice = 0;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case 1 :
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_REMOVE_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
-
- if (Action == MENU_DRAW)
- {
- cUiListCalc(VarsUi.Devices,&VarsUi.DeviceCenter,&VarsUi.DeviceLeft,&VarsUi.DeviceRight);
-
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = NULL;
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = NULL;
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = NULL;
-
- if (VarsUi.DeviceLeft)
- {
- VarsUi.Tmp = VarsUi.DeviceLeft - 1;
- cUiBTCommand(UI_BT_GET_DEVICE_TYPE,VarsUi.DevicesKnown,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_LEFT);
- }
- if (VarsUi.DeviceCenter)
- {
- VarsUi.Tmp = VarsUi.DeviceCenter - 1;
- cUiBTCommand(UI_BT_GET_DEVICE_TYPE,VarsUi.DevicesKnown,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_CENTER);
- }
- if (VarsUi.DeviceRight)
- {
- VarsUi.Tmp = VarsUi.DeviceRight - 1;
- cUiBTCommand(UI_BT_GET_DEVICE_TYPE,VarsUi.DevicesKnown,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- pMapDisplay->UpdateMask |= MENUICON_BIT(MENUICON_RIGHT);
- }
-
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_5);
-
- VarsUi.Tmp = VarsUi.DeviceCenter - 1;
- cUiBTCommand(UI_BT_GET_DEVICE_NAME,VarsUi.DevicesKnown,&VarsUi.Tmp,VarsUi.DisplayBuffer);
-
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
- pMapDisplay->EraseMask |= MENUICON_BITS;
- pMapDisplay->UpdateMask |= (SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));
- }
- if (Action == MENU_EXIT)
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
-
- return (VarsUi.State);
-}
-
-
-//******* cUiBtConnectList ***************************************************
-
-UBYTE cUiBtConnectList(UBYTE Action) // Show connections and maybe disconnect
-{
- switch (Action)
- {
- case MENU_INIT : // Init
- {
- VarsUi.Slots = SIZE_OF_BT_CONNECT_TABLE;
- VarsUi.SlotCenter = 2;
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_LEFT : // Left button
- {
- cUiListLeft(VarsUi.Slots,&VarsUi.SlotCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_RIGHT : // Right button
- {
- cUiListRight(VarsUi.Slots,&VarsUi.SlotCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_UPDATE : // Check connection valid
- {
- VarsUi.Tmp = VarsUi.SlotCenter - 1;
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) != UI_BT_SUCCES)
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case MENU_DISCONNECT : // Disconnect
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- VarsUi.SelectedSlot = VarsUi.SlotCenter - 1;
- VarsUi.BTCommand = (UBYTE)DISCONNECT;
- VarsUi.BTPar1 = (UBYTE)VarsUi.SelectedSlot;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- break;
-
- case 1 :
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_DISCONNECT_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
- if (Action == MENU_DRAW)
- {
- cUiListCalc(VarsUi.Slots,&VarsUi.SlotCenter,&VarsUi.SlotLeft,&VarsUi.SlotRight);
-
- pMapDisplay->pBitmaps[BITMAP_2] = (BMPMAP*)VarsUi.PortBitmapLeft;
- pMapDisplay->pBitmaps[BITMAP_3] = (BMPMAP*)VarsUi.PortBitmapCenter;
- pMapDisplay->pBitmaps[BITMAP_4] = (BMPMAP*)VarsUi.PortBitmapRight;
-
- VarsUi.Tmp = VarsUi.SlotLeft - 1;
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapLeft,MENUICON_LEFT,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_2);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
-
- VarsUi.Tmp = VarsUi.SlotCenter - 1;
- cUiBTCommand(UI_BT_GET_CONNECTION_NAME,NULL,&VarsUi.Tmp,VarsUi.DisplayBuffer);
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_5);
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
-
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapCenter,MENUICON_CENTER,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_3);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
- VarsUi.Tmp = VarsUi.SlotRight - 1;
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapRight,MENUICON_RIGHT,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_4);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
- pMapDisplay->EraseMask &= ~SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->EraseMask |= MENUICON_BITS;
- pMapDisplay->UpdateMask |= (MENUICON_BITS | SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));
- }
- if (Action == MENU_EXIT)
- {
- VarsUi.State = 0;
- IOMapUi.State = EXIT_PRESSED;
- }
-
-
- return (VarsUi.State);
-}
-
-
-UBYTE cUiBtConnect(UBYTE Action) // Select connection no and insert device
-{
- switch (Action)
- {
- case MENU_INIT : // Init
- {
- VarsUi.Slots = SIZE_OF_BT_CONNECT_TABLE - 1;
- VarsUi.SlotCenter = 1;
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_LEFT : // Left button
- {
- cUiListLeft(VarsUi.Slots,&VarsUi.SlotCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_RIGHT : // Right button
- {
- cUiListRight(VarsUi.Slots,&VarsUi.SlotCenter);
- Action = MENU_DRAW;
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_CONNECT : // Insert device
- {
- switch (VarsUi.State)
- {
- case 0 : // Check selected device
- {
- VarsUi.SelectedSlot = (UBYTE)VarsUi.SlotCenter;
- if (VarsUi.SelectedDevice)
- {
- VarsUi.State++;
- }
- else
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case 1 : // Display wait text
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_CONNECTING_WAIT,0,0))
- {
- if (cUiBTGetDeviceIndex(VarsUi.DevicesKnown,VarsUi.SelectedDevice - 1,&VarsUi.BTIndex))
- {
- VarsUi.BTCommand = (UBYTE)CONNECT;
- VarsUi.BTPar1 = (UBYTE)VarsUi.BTIndex;
- VarsUi.BTPar2 = (UBYTE)VarsUi.SelectedSlot;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- else
- {
- VarsUi.State = 99;
- }
- }
- }
- break;
-
- case 2 : // Wait for result
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- if (VarsUi.BTResult == REQPIN)
- {
- sprintf((char*)pMapSound->SoundFilename,"%s.%s",(char*)UI_ATTENTION_SOUND,(char*)TXT_FILE_EXT[FILETYPE_SOUND]);
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_ONCE;
- pMapSound->Flags |= SOUND_UPDATE;
- strcpy((char*)VarsUi.UserString,(char*)DEFAULT_PIN_CODE);
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 6;
- }
- }
- }
- }
- break;
-
- case 3 : // Get pincode and send
- {
- if (!cUiGetUserString(0))
- {
- if (VarsUi.UserString[0] == 0)
- {
- sprintf((char*)VarsUi.UserString,"%08lX",VarsUi.CRPasskey);
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State++;
- }
- pMapComm->pFunc2(VarsUi.UserString);
- }
- }
- break;
-
- case 4 : // Display wait text
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_CONNECTING_WAIT,0,0))
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 5 : // Wait for result
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- Action = MENU_EXIT;
- }
- else
- {
- VarsUi.State = 6;
- }
- }
- }
- break;
-
- case 6 : // Display busy text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_CONNECT_BUSY_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- default : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_CONNECTING_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- case MENU_SEND :
- {
- switch (VarsUi.State)
- {
- case 0 : // Check connection
- {
- VarsUi.SelectedSlot = (UBYTE)VarsUi.SlotCenter;
- if (VarsUi.SelectedFilename[0] && (cUiBTCommand(UI_BT_GET_CONNECTION_NAME,NULL,&VarsUi.SelectedSlot,NULL) == UI_BT_SUCCES))
- {
- VarsUi.State += 2;
- }
- else
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 1 : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_SENDING_NO_CONN_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case 2 : // Display wait text and send file
- {
- if (!cUiFeedback((BMPMAP*)Wait,TXT_FB_BT_SENDING_WAIT,0,0))
- {
- VarsUi.BTCommand = (UBYTE)SENDFILE;
- VarsUi.BTPar1 = (UBYTE)VarsUi.SelectedSlot;
- VarsUi.BTPar2 = (UBYTE)0;
- if (pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,VarsUi.SelectedFilename,&(VarsUi.BTResult)) == SUCCESS)
- {
- VarsUi.Timer = 0;
- VarsUi.State++;
- }
- else
- {
- VarsUi.State = 4;
- }
- }
- }
- break;
-
- case 3 : // Wait for result
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- if (VarsUi.BTResult == SUCCESS)
- {
- VarsUi.State += 2;
- }
- else
- {
- VarsUi.State++;
- }
- }
- VarsUi.Timer++;
- }
- break;
-
- case 4 : // Display fail text
- {
- if (!cUiFeedback((BMPMAP*)Fail,TXT_FB_BT_SENDING_FAIL,0,DISPLAY_SHOW_ERROR_TIME))
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- case 5 : // Wait min. "DISPLAY_SHOW_TIME" to show "TXT_FB_BT_SENDING_WAIT"
- {
- if (++VarsUi.Timer >= DISPLAY_SHOW_TIME)
- {
- Action = MENU_EXIT;
- }
- }
- break;
-
- }
- }
- break;
-
- }
- if (Action == MENU_DRAW) // Update display
- {
- cUiListCalc(VarsUi.Slots,&VarsUi.SlotCenter,&VarsUi.SlotLeft,&VarsUi.SlotRight);
-
- pMapDisplay->pBitmaps[BITMAP_2] = (BMPMAP*)VarsUi.PortBitmapLeft;
- pMapDisplay->pBitmaps[BITMAP_3] = (BMPMAP*)VarsUi.PortBitmapCenter;
- pMapDisplay->pBitmaps[BITMAP_4] = (BMPMAP*)VarsUi.PortBitmapRight;
-
- VarsUi.Tmp = VarsUi.SlotLeft;
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapLeft,MENUICON_LEFT,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_2);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_LEFT] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
-
- VarsUi.Tmp = VarsUi.SlotCenter;
- cUiBTCommand(UI_BT_GET_CONNECTION_NAME,NULL,&VarsUi.Tmp,VarsUi.DisplayBuffer);
- pMapDisplay->EraseMask |= TEXTLINE_BIT(TEXTLINE_5);
- pMapDisplay->pMenuText = VarsUi.DisplayBuffer;
-
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapCenter,MENUICON_CENTER,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_3);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_CENTER] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
- VarsUi.Tmp = VarsUi.SlotRight;
- if (cUiBTCommand(UI_BT_GET_CONNECTION_VALID,NULL,&VarsUi.Tmp,NULL) == UI_BT_SUCCES)
- {
- cUiBTCommand(UI_BT_GET_CONNECTION_TYPE,NULL,&VarsUi.Tmp,&VarsUi.DeviceType);
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Devices->Data[VarsUi.DeviceType * Devices->ItemPixelsX * (Devices->ItemPixelsY / 8)];
- cUiDrawPortNo(VarsUi.PortBitmapRight,MENUICON_RIGHT,VarsUi.Tmp);
- pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_4);
- }
- else
- {
- pMapDisplay->pMenuIcons[MENUICON_RIGHT] = (UBYTE*)&Connections->Data[VarsUi.Tmp * Connections->ItemPixelsX * (Connections->ItemPixelsY / 8)];
- }
- pMapDisplay->EraseMask &= ~SCREEN_BIT(SCREEN_LARGE);
- pMapDisplay->EraseMask |= MENUICON_BITS;
- pMapDisplay->UpdateMask |= (MENUICON_BITS | SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));
- }
- if (Action == MENU_EXIT)
- {
- IOMapUi.State = EXIT_PRESSED;
- VarsUi.State = 0;
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* cUiPowerOffTime ****************************************************
-
-UBYTE cUiPowerOffTime(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
-{
- switch (Action)
- {
- case MENU_INIT : // Init time counter and cursor bitmap
- {
- VarsUi.Counter = VarsUi.NVData.PowerdownCode + 1;
-
- VarsUi.pTmp = (UBYTE*)Cursor;
- for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)SIZEOF_DATA(Cursor));VarsUi.Tmp++)
- {
- VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
- VarsUi.pTmp++;
- }
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_LEFT : // Dec
- {
- cUiListLeft(POWER_OFF_TIME_STEPS,&VarsUi.Counter);
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_RIGHT : // Inc
- {
- cUiListRight(POWER_OFF_TIME_STEPS,&VarsUi.Counter);
- Action = MENU_DRAW;
- }
- break;
-
- case MENU_ENTER : // Enter
- {
- VarsUi.NVData.PowerdownCode = VarsUi.Counter - 1;
- cUiNVWrite();
- IOMapUi.SleepTimeout = PowerOffTimeSteps[VarsUi.NVData.PowerdownCode];
- Action = MENU_EXIT;
- }
- break;
-
- }
-
- if (Action == MENU_DRAW)
- {
- if (VarsUi.Counter > 1)
- {
- sprintf((char*)VarsUi.DisplayBuffer,"%u",(UWORD)PowerOffTimeSteps[VarsUi.Counter - 1]);
- }
- else
- {
- sprintf((char*)VarsUi.DisplayBuffer,(char*)cUiGetString(TXT_POWEROFFTIME_NEVER));
- }
- pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;
-
- pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
- VarsUi.CursorTmp[4] = 46;
- VarsUi.CursorTmp[5] = 24;
- pMapDisplay->EraseMask |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= (TEXTLINE_BIT(TEXTLINE_3) | BITMAP_BIT(BITMAP_1));
- }
- if (Action == MENU_EXIT)
- {
- IOMapUi.State = EXIT_PRESSED;
- }
-
- return (0);
-}
-
-
-
-//******* cUiBTConnectRequest ************************************************
-
-UBYTE cUiBTConnectRequest(UBYTE Action)
-{
- switch (Action)
- {
- case MENU_INIT :
- {
- switch (VarsUi.CRState)
- {
- case 0 :
- {
- sprintf((char*)pMapSound->SoundFilename,"%s.%s",(char*)UI_ATTENTION_SOUND,(char*)TXT_FILE_EXT[FILETYPE_SOUND]);
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_ONCE;
- pMapSound->Flags |= SOUND_UPDATE;
- VarsUi.CRState++;
- }
- break;
-
- case 1 :
- {
- if (DISPLAY_IDLE)
- {
- pMapDisplay->Flags |= DISPLAY_POPUP;
- VarsUi.CRState++;
- }
- }
- break;
-
- case 2 :
- {
- strcpy((char*)VarsUi.UserString,(char*)DEFAULT_PIN_CODE);
- IOMapUi.Flags |= UI_REDRAW_STATUS;
- VarsUi.CRState++;
- }
- break;
-
- case 3 : // Get pincode and send
- {
- if (!cUiGetUserString(0))
- {
- if (VarsUi.UserString[0] == 0)
- {
- sprintf((char*)VarsUi.UserString,"%08lX",VarsUi.CRPasskey);
- }
- pMapComm->pFunc2(VarsUi.UserString);
- VarsUi.CRState++;
- }
- }
- break;
-
- case 4 :
- {
- if (DISPLAY_IDLE)
- {
- pMapDisplay->Flags &= ~DISPLAY_POPUP;
- VarsUi.CRState = 0;
- }
- }
- break;
-
- }
- }
- break;
-
- }
-
- return (VarsUi.CRState);
-}
-
-
-
-//******* cUiFilesDelete *****************************************************
-
-UBYTE cUiFilesDelete(UBYTE Action)
-{
- switch (Action)
- {
- case MENU_INIT :
- {
- pMapDisplay->pTextLines[TEXTLINE_3] = cUiGetString(TXT_FILESDELETE_DELETING_ALL);
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
- sprintf((char*)VarsUi.DisplayBuffer,(char*)cUiGetString(TXT_FILESDELETE_S_FILES),(char*)cUiGetString(TXT_FILETYPE[VarsUi.SelectedType]));
- pMapDisplay->pTextLines[TEXTLINE_4] = VarsUi.DisplayBuffer;
- pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_4);
- pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4);
- IOMapUi.State = TEST_BUTTONS;
- }
- break;
-
- case MENU_DELETE :
- {
- switch (VarsUi.State)
- {
- case 0 :
- {
- if (VarsUi.SelectedType < FILETYPES)
- {
- sprintf((char*)VarsUi.FilenameBuffer,"*.%s",TXT_FILE_EXT[VarsUi.SelectedType]);
- }
- else
- {
- sprintf((char*)VarsUi.FilenameBuffer,"*.*");
- }
- VarsUi.State++;
- }
- break;
-
- case 1 :
- {
- if (SOUND_IDLE == pMapSound->State)
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 2 : // Delete files
- {
- VarsUi.TmpHandle = pMapLoader->pFunc(FINDFIRST,VarsUi.FilenameBuffer,VarsUi.SelectedFilename,&VarsUi.TmpLength);
- if (!(VarsUi.TmpHandle & 0x8000))
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsUi.TmpHandle,NULL,NULL);
- pMapLoader->pFunc(DELETE,VarsUi.SelectedFilename,NULL,NULL);
- }
- else
- {
- pMapDisplay->EraseMask |= MENUICON_BITS;
- pMapDisplay->EraseMask |= SPECIAL_BIT(MENUTEXT);
- VarsUi.State++;
- }
- }
- break;
-
- default : // Display Files deleted text
- {
- if (!cUiFeedback((BMPMAP*)Info,TXT_FB_FD_FILES_INFO,TXT_FB_FD_DELETED_INFO,DISPLAY_SHOW_TIME))
- {
- IOMapUi.State = EXIT_PRESSED;
- VarsUi.State = 0;
- }
- }
- break;
-
- }
- }
- break;
-
- default :
- {
- if (Action < FILETYPES)
- {
- VarsUi.SelectedType = Action;
- }
- else
- {
- VarsUi.SelectedType = FILETYPE_ALL;
- }
- }
- break;
-
- }
-
- return (VarsUi.State);
-}
-
-
-//******* cUiOff *************************************************************
-
-UBYTE cUiOff(UBYTE Action) // Tell AVR to turn off ARM
-{
- if (Action == MENU_INIT)
- {
- switch (VarsUi.State)
- {
- case 0 : // Stop VM if running
- {
- if (pMapCmd->ProgStatus == PROG_RUNNING)
- {
- pMapCmd->DeactivateFlag = TRUE;
- }
- VarsUi.State++;
- }
- break;
-
- case 1 : // When VM is stopped -> Display off and close all connections
- {
- if (pMapCmd->ProgStatus != PROG_RUNNING)
- {
- pMapDisplay->Flags &= ~DISPLAY_ON;
- VarsUi.BTCommand = (UBYTE)DISCONNECTALL;
- VarsUi.BTPar1 = (UBYTE)0;
- VarsUi.BTPar2 = (UBYTE)0;
- pMapComm->pFunc(VarsUi.BTCommand,VarsUi.BTPar1,VarsUi.BTPar2,0,NULL,&(VarsUi.BTResult));
- VarsUi.State++;
- }
- }
- break;
-
- case 2 : // Send off command to AVR
- {
- if (VarsUi.BTResult != INPROGRESS)
- {
- pMapIoCtrl->PowerOn = POWERDOWN;
- VarsUi.Timer = 0;
- VarsUi.State++;
- }
- }
- break;
-
- case 3 : // Wait for power off
- {
- if (++VarsUi.Timer >= ARM_WAIT_FOR_POWER_OFF)
- {
- VarsUi.State++;
- }
- }
- break;
-
- case 4 : // Vitual off state (if still power) wait for on button
- {
- pMapIoCtrl->PowerOn = 0;
- if (BUTTON_ENTER == cUiReadButtons())
- {
- VarsUi.State++;
- }
- }
- break;
-
- default : // Turn on again
- {
- IOMapUi.State = INIT_DISPLAY;
- VarsUi.State = 0;
- }
- break;
-
- }
- }
-
- return (VarsUi.State);
-}
-
-
-
-//******* FUNCTIONS **********************************************************
-
-enum FUNC_NO // Must reffer to entry in Functions
-{ // used in Menus to repressent function
- FUNC_NO_NOT_USED = 0x00,
- FUNC_NO_TEST_PROGRAM = 0x01,
- FUNC_NO_OFF = 0x02,
- FUNC_NO_BT_ON = 0x03,
- FUNC_NO_POWER_OFF_TIME = 0x04,
- FUNC_NO_FILES_DELETE = 0x05,
- FUNC_NO_FILE_LIST = 0x06,
- FUNC_NO_VOLUME = 0x07,
- FUNC_NO_FILE_RUN = 0x08,
- FUNC_NO_FILE_DELETE = 0x09,
- FUNC_NO_FREE1 = 0x0A,
- FUNC_NO_ON_BRICK_PROGRAMMING = 0x0B,
- FUNC_NO_FREE2 = 0x0C,
- FUNC_NO_BT_CONNECT_REQUEST = 0x0D,
- FUNC_NO_VIEW = 0x0E,
- FUNC_NO_GET_USER_STRING = 0x0F,
- FUNC_NO_BT_CONNECT = 0x10,
- FUNC_NO_BT_VISIABILITY = 0x11,
- FUNC_NO_BT_SEARCH = 0x12,
- FUNC_NO_BT_DEVICE_LIST = 0x13,
- FUNC_NO_BT_CONNECT_LIST = 0x14,
- FUNC_NO_MAX
-};
-
-FUNCTION Functions[] = // Use same index as FUNC_NO
-{
- 0,
- TestPrg,
- cUiOff,
- cUiBtOn,
- cUiPowerOffTime,
- cUiFilesDelete,
- cUiFileList,
- cUiVolume,
- cUiFileRun,
- cUiFileDelete,
- cUiDataLogging,
- cUiOnBrickProgramming,
- 0,
- cUiBTConnectRequest,
- cUiView,
- cUiGetUserString,
- cUiBtConnect,
- cUiBtVisiability,
- cUiBtSearch,
- cUiBtDeviceList,
- cUiBtConnectList
-};
-
-
diff --git a/AT91SAM7S256/Source/Icons.txt b/AT91SAM7S256/Source/Icons.txt
deleted file mode 100644
index 459b078..0000000
--- a/AT91SAM7S256/Source/Icons.txt
+++ /dev/null
@@ -1,293 +0,0 @@
-DEFINE_DATA(ICON, Icons) =
-{
- 0x04,0x00, // Graphics Format
- 0x1A,0x70, // Graphics DataSize
- 0x01, // Graphics Count X
- 0x5E, // Graphics Count Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xA0,0x50,0xB0,0x50,0xB0,0x50,0xA0,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x88,0x47,0x2F,0x1F,0x1E,0x1F,0x1E,0x1D,0x0E,0x07,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x06,0x09,0x08,0x04,0x02,0x01,0x08,0x14,0x1F,0x00,0x1F,0x15,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xA0,0x50,0xB0,0x50,0xB0,0x50,0xA0,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x88,0x47,0x2F,0x1F,0x1E,0x1F,0x1E,0x1D,0x0E,0x07,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x06,0x09,0x08,0x04,0x02,0x01,0x08,0x14,0x1F,0x00,0x1F,0x15,0x0A,0x00,0x1E,0x09,0x1E,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x40,0x40,0x20,0x20,0x20,0x40,0x40,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x02,0x42,0x20,0x07,0x18,0x60,0x80,0x00,0x00,0x00,0x80,0x60,0x18,0x07,0x00,0x10,0x22,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x15,0x35,0x25,0x35,0x15,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0xC0,0x60,0xA0,0x60,0xC0,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1A,0x75,0xAA,0x55,0xAA,0x55,0xAA,0x75,0x1A,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x15,0x35,0x25,0x35,0x15,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xFE,0x02,0xC3,0xC2,0xC2,0x02,0xC3,0x42,0xC2,0x03,0x02,0x02,0x02,0x03,0x02,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x1C,0x1D,0x1D,0x1D,0x1C,0x1D,0x1D,0x1D,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x08,0x04,0x04,0x02,0x09,0x09,0x4C,0x4E,0xCB,0xC8,0xC8,0xC8,0xC8,0x70,0x00,0x00,0xF8,0x04,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x18,0x18,0x30,0x30,0x30,0x34,0x35,0x1D,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0xC0,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xBA,0xC6,0x01,0x11,0x38,0x6C,0x38,0x11,0x01,0xC6,0xBA,0x10,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x02,0x06,0x02,0x01,0x03,0x00,0x00,0x1E,0x12,0x0C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0xC0,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xBA,0xC6,0x01,0x11,0x38,0x6C,0x38,0x11,0x01,0xC6,0xBA,0x10,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x02,0x06,0x02,0x01,0x03,0x00,0x00,0x1E,0x0A,0x14,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xF8,0x06,0x01,0x01,0x00,0x03,0x01,0x00,0x00,0x01,0x01,0x06,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xE0,0x3C,0xC3,0x00,0x00,0x00,0xFF,0x10,0x10,0x82,0x6C,0x10,0x01,0xC6,0x38,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x01,0x02,0x04,0x07,0x00,0x00,0x1C,0x00,0x1C,0x05,0x08,0x1C,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xE0,0x3C,0xC3,0x00,0x00,0x00,0xFF,0x10,0x10,0x82,0x6C,0x10,0x01,0xC6,0x38,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x01,0x02,0x04,0x07,0x00,0x1C,0x14,0x00,0x1C,0x05,0x08,0x04,0x1C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xC0,0x40,0x40,0x40,0x4F,0xD0,0x50,0x50,0x49,0x40,0xFC,0x04,0x07,0x05,0x05,0x05,0x07,0x04,0x04,0x07,0x00,0x00,
- 0x00,0x00,0x07,0x06,0x06,0x06,0x06,0x07,0x04,0x04,0x04,0x04,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xC0,0x40,0x40,0x40,0x5F,0xC4,0x44,0x40,0x40,0x40,0xFC,0x04,0x07,0x05,0x05,0x05,0x07,0x04,0x04,0x07,0x00,0x00,
- 0x00,0x00,0x07,0x06,0x06,0x06,0x06,0x07,0x04,0x04,0x04,0x04,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0xF0,0x00,0x00,0x00,0x00,0x60,0x90,0x90,0x60,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x04,0x7F,0x80,0x00,0x00,0x00,0xC0,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0x00,0x03,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0xF0,0x00,0x00,0x00,0x00,0x60,0x90,0x90,0x60,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7F,0x04,0x7F,0x80,0x00,0x00,0x00,0xE0,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0xA0,0x60,0xA0,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xC0,0x30,0x18,0x0F,0x0A,0x0D,0x1A,0x35,0xEA,0xF5,0xFA,0xFF,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0x06,0x04,0x08,0x08,0x08,0x04,0x06,0x01,0x03,0x07,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3C,0x3C,0x3C,0x24,0x25,0x3D,0x25,0x24,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x3C,0x3D,0x3D,0x25,0x24,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x24,0x25,0x3D,0x3D,0x3C,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x24,0x25,0x3D,0x25,0x24,0x3C,0x3C,0x3C,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x78,0x78,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x24,0x25,0x3D,0x25,0x24,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x78,0x78,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x24,0x25,0x3D,0x25,0x24,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x78,0x78,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x3C,0x24,0x25,0x3D,0x25,0x24,0x3C,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x1F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x10,0x10,0x10,0x10,0x90,0x90,0x50,0x50,0xD0,0x10,0x10,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x1F,0x20,0x20,0x20,0x2C,0x2F,0x20,0x20,0x26,0x27,0x20,0x20,0x20,0x1F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x10,0x10,0x10,0xD0,0x50,0x50,0x50,0x50,0xD0,0x10,0x10,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x1F,0x20,0x20,0x20,0x2F,0x28,0x23,0x23,0x28,0x2F,0x20,0x20,0x20,0x1F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x10,0xD0,0x50,0xD0,0x90,0x50,0x50,0x90,0xD0,0x50,0xD0,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x3F,0x40,0x41,0x41,0x41,0x40,0x41,0x41,0x40,0x41,0x41,0x41,0x40,0x3F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x10,0x10,0x10,0x90,0x50,0x70,0x50,0x70,0x50,0x90,0x10,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x1F,0x20,0x20,0x20,0x2F,0x30,0x25,0x28,0x25,0x30,0x2F,0x20,0x20,0x1F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF0,0x10,0xF0,0x90,0xD0,0x90,0x10,0x10,0x10,0x10,0x10,0x50,0x10,0x10,0x10,0xF0,0x10,0xF0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x3F,0x40,0x5F,0x50,0x54,0x50,0x52,0x50,0x51,0x50,0x78,0x50,0x40,0x3F,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x10,0x1F,0x11,0x1D,0x1D,0x11,0x11,0x11,0x1F,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x06,0xFD,0x00,0x00,0x00,0x00,0xFD,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x00,0x58,0x68,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x06,0xFD,0x00,0x00,0x00,0x00,0xFD,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0xE0,0x00,0x68,0x58,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x60,0x90,0x08,0x04,0x0E,0x08,0x08,0x0F,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x07,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x06,0x09,0x10,0x20,0x70,0x10,0x10,0xF0,0x00,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x68,0x58,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x06,0x09,0x10,0x20,0x70,0x10,0x10,0xF0,0x00,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x0F,0x08,0x08,0x0E,0x04,0x08,0x90,0x60,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x07,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xE0,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0xF0,0x10,0x10,0x70,0x20,0x10,0x09,0x06,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x68,0x58,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xE0,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0xF0,0x10,0x10,0x70,0x20,0x10,0x09,0x06,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x60,0x90,0x08,0x04,0x0E,0x08,0x08,0x0F,0x00,0x00,0x00,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x07,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x40,0x00,0x00,0x00,0xC0,0x60,0x20,0x20,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x7F,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x08,0x10,0x10,0x08,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0xC0,0x00,0x00,0x58,0x68,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x08,0x10,0x10,0x08,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x68,0x58,0x00,0xE0,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x0F,0x08,0x08,0x0E,0x04,0x08,0x90,0x60,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x07,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x40,0xA0,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0xA0,0x40,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x11,0x82,0x44,0x82,0x11,0x28,0x44,0x82,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x04,0x0A,0x11,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x11,0x0A,0x04,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x90,0x60,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x60,0x18,0x86,0x61,0x18,0x06,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x18,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xA8,0xA8,0x54,0x54,0x2A,0x2A,0x00,0x3F,0x21,0x32,0x2C,0x24,0x24,0x24,0x2C,0x32,0x21,0x3F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x40,0x60,0x60,0x60,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x88,0x88,0x50,0x50,0x20,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x08,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x20,0x50,0x50,0x88,0x88,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,0x01,0x7F,0x40,0x48,0x4C,0x7A,0x01,0x00,0x00,0x01,0xFA,0x0C,0x08,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x04,0x03,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xF8,0xFE,0x07,0x21,0x21,0x20,0x20,0xE0,0x00,0x00,0x01,0x01,0x07,0xFE,0xF9,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x0C,0x18,0x18,0x1B,0x18,0x18,0x0C,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x78,0x48,0x48,0x84,0x02,0x01,0xFF,0x00,0x00,0x86,0x78,0x01,0x86,0x78,0x01,0x86,0x78,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x07,0x00,0x00,0x01,0x00,0x06,0x01,0x10,0x0E,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0xE0,0xE0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x78,0xFE,0x87,0x01,0x01,0x00,0x07,0x07,0x00,0x01,0x01,0x87,0xFE,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x06,0x06,0x0C,0x0C,0x0C,0x0C,0x06,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xF8,0x08,0xF8,0x48,0xC8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0xF8,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0xFF,0x02,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x07,0x08,0x3F,0x40,0x80,0x81,0xF9,0x89,0xE9,0x89,0x89,0x89,0xF9,0x81,0x80,0x80,0x7F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0xE0,0x80,0x80,0xE0,0x20,0x20,0x20,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x03,0x00,0x00,0x03,0x02,0x82,0xCA,0xFB,0x78,0x78,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0x44,0x44,0x7C,0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x08,0xFC,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x1F,0x10,0x10,0x13,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x10,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x30,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x80,0xC0,0xA0,0x90,0x08,0x08,0x90,0xA0,0xC0,0x80,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x1F,0x10,0x10,0x1F,0x02,0x02,0x02,0x02,0x02,0x03,0x01,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xFE,0xFF,0xFF,0xE3,0xE1,0xE0,0xF0,0x78,0x38,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1C,0x1E,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xE0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x22,0x24,0x24,0x24,0x24,0x22,0x20,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xF8,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xE0,0x3C,0xC3,0x00,0x00,0x00,0xFF,0x10,0x10,0x82,0x6C,0x10,0x01,0xC6,0x38,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x02,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xA0,0x50,0xB0,0x50,0xB0,0x50,0xA0,0xC0,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x88,0x47,0x2F,0x1F,0x1F,0x1F,0x1E,0x1F,0x0E,0x07,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x06,0x09,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x08,0x04,0x04,0x02,0x09,0x09,0x4C,0x4E,0xCB,0xC8,0xC8,0xC8,0xC8,0x70,0x00,0x00,0xF8,0x04,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x18,0x18,0x30,0x30,0x30,0x34,0x35,0x1D,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x38,0xC8,0x08,0x08,0x08,0x08,0xA8,0x68,0x08,0x08,0x08,0x08,0xC8,0x38,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x42,0x24,0x98,0x85,0x85,0x98,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1C,0x13,0x14,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x13,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x38,0xC8,0x08,0x08,0x08,0x08,0x68,0xA8,0x08,0x08,0x08,0x08,0xC8,0x38,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x42,0x24,0x18,0x05,0x05,0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1C,0x13,0x14,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x14,0x13,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x38,0xC8,0x08,0x08,0x48,0xE8,0x08,0xC8,0x28,0xC8,0x08,0x08,0xC8,0x38,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x42,0x24,0x19,0x04,0x04,0x19,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x1C,0x13,0x18,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x18,0x13,0x1C,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xF8,0x06,0xF9,0x56,0xAA,0x55,0xAB,0x55,0xAB,0x55,0xAA,0x56,0xF9,0x06,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x0B,0x0A,0x15,0x16,0x15,0x16,0x15,0x0A,0x0B,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x5C,0x74,0x00,0x04,0x7C,0x04,0x00,0x38,0x44,0x38,0x00,0x7C,0x14,0x08,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x60,0xFC,0xF8,0xF0,0x60,0x00,0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x81,0x7E,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x0C,0x1E,0x3F,0x7F,0x04,0x04,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x9E,0x91,0x51,0x51,0x51,0x91,0x9E,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x24,0x24,0x24,0x3C,0x25,0x25,0x25,0x3C,0x24,0x24,0x24,0x3F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x10,0x10,0x90,0x10,0x10,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x82,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x0C,0x18,0x10,0x10,0x13,0x11,0x10,0x18,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0xC0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x00,0x55,0x00,0x55,0x55,0x55,0x00,0x55,0xFF,0x00,0x01,0x00,0x01,0x01,0x01,0x00,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x0F,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x12,0x15,0x17,0x12,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0F,0x00,0x00,0x00,
- 0x00,0x00,0x80,0x80,0x80,0x80,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x02,0x42,0xC6,0x88,0x10,0x60,0xC0,0x01,0x81,0x81,0x81,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x08,0x0A,0x0C,0x09,0x0B,0x0E,0x0C,0x05,0x07,0x02,0x03,0x01,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0xE2,0xB2,0xF6,0xF6,0x76,0x2C,0x6C,0xDC,0x9C,0x38,0x30,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x05,0x04,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0xE0,0xE0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x78,0x86,0x01,0x00,0x88,0x50,0xFD,0xA9,0x50,0x00,0x00,0x01,0x86,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x08,0x09,0x08,0x08,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xC0,0xE0,0x70,0x38,0x98,0x18,0xD8,0x98,0x18,0x38,0x70,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x1F,0x3F,0x70,0xE0,0xC8,0xC5,0xDF,0xCA,0xC5,0x60,0x70,0xFF,0xCF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x82,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x06,0x01,0x00,0x40,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x82,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0xC6,0x6C,0xFF,0x39,0xBA,0x6C,0xC6,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0xE2,0xB2,0xF6,0xF6,0x76,0x2C,0x6C,0xDC,0x9C,0x38,0x30,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x05,0x04,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xC0,0xE0,0x80,0x00,0x02,0x02,0x06,0x06,0x06,0x0C,0x0C,0x9C,0xDC,0xB8,0x30,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0xE0,0xE0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x78,0x86,0x01,0x00,0x88,0x50,0xFD,0xA9,0x50,0x00,0x00,0x01,0x86,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x08,0x09,0x08,0x08,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0xE0,0xE0,0x00,0x80,0x40,0x20,0x10,0x20,0x40,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x79,0x86,0x44,0x28,0x10,0x00,0x01,0x83,0x01,0x00,0x10,0x28,0x44,0xFA,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x02,0x05,0x08,0x10,0x08,0x04,0x0A,0x09,0x08,0x09,0x06,0x04,0x08,0x10,0x08,0x05,0x02,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Info.txt b/AT91SAM7S256/Source/Info.txt
deleted file mode 100644
index 7e2b639..0000000
--- a/AT91SAM7S256/Source/Info.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, Info) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x48, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x08, // Graphics Start Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xA0,0x90,0x20,0x20,0x40,0x40,0x30,0x8C,0x73,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/LowBattery.txt b/AT91SAM7S256/Source/LowBattery.txt
deleted file mode 100644
index 51b8ddb..0000000
--- a/AT91SAM7S256/Source/LowBattery.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-DEFINE_DATA(BMPMAP, LowBattery) =
-{
- 0x02,0x00, // Graphics Format
- 0x02,0xA0, // Graphics DataSize
- 0x02, // Graphics Start X
- 0x08, // Graphics Start Y
- 0x60, // Graphics Width
- 0x38, // Graphics Height
-BEGIN_DATA
- 0x02,0xF2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xF2,0x82,0x02,
- 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x18,0x04,0x02,0x02,0x01,0x01,0x01,0x00,0xF0,0xF8,0xFC,0xFC,0xF8,0xF0,0x00,0x01,0x01,0x01,0x02,0x02,0x04,0x18,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
- 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xFF,0xFF,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
- 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xF0,0xF0,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x0E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
- 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x10,0x10,0xE0,0x00,0xF0,0x00,0xC0,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xF2,0x92,0x92,0x94,0x64,0x04,0xE4,0x14,0x14,0x14,0xE4,0x02,0x12,0x12,0xF1,0x11,0x10,0x00,0x10,0x10,0xF0,0x10,0x10,0x00,0xF0,0x90,0x90,0x90,0x10,0x00,0xF0,0x90,0x90,0x90,0x60,0x00,0x70,0x80,0x00,0x80,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
- 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x00,0x03,0x04,0x04,0x04,0x03,0x00,0x03,0x04,0x03,0x04,0x03,0x00,0x00,0x00,0x00,0xC0,0x40,0xF0,0x17,0x14,0x14,0x14,0x13,0x10,0x17,0x11,0x11,0x11,0x17,0x10,0x10,0xD0,0xD7,0x10,0xF0,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x00,0x07,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
- 0x00,0x3F,0x20,0x20,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x63,0x62,0x6F,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x6B,0x6B,0x68,0x6F,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7F,0x7F,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Mainmenu.rms b/AT91SAM7S256/Source/Mainmenu.rms
deleted file mode 100644
index 2e014fb..0000000
--- a/AT91SAM7S256/Source/Mainmenu.rms
+++ /dev/null
@@ -1,72 +0,0 @@
-const UBYTE MAINMENU[] =
-{
- 0x07,0x00, // Menu Format
- 0x01,0x05, // Menu DataSize
- 0x1D, // Menu item size
- 0x09, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Turn_off?
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x10,0x20,0x04,0x01, // 0x10200401
- 0x02,0x00,0x00,0x01, // 2 ,0 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6F,0x66,0x66,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x31, // 31
-
- // Turn_off?
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x10,0x20,0x00,0x01, // 0x10200001
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6F,0x66,0x66,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x30, // 30
-
- // My_Files
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x00,0x00,0x01,0x01, // 0 ,0 ,1 ,1
- 0x4D,0x79,0x20,0x46,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3B, // 3B
-
- // NXT_Program
- 0x00,0x00,0x00,0x21, // 0x00000021
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x00,0x00,0x02,0x01, // 0 ,0 ,2 ,1
- 0x4E,0x58,0x54,0x20,0x50,0x72,0x6F,0x67,0x72,0x61,0x6D,0x00,0x00,0x00,0x00,0x00,
- 0x3C, // 3C
-
- // NXT_Datalog
- 0x00,0x00,0x00,0x31, // 0x00000031
- 0x01,0x84,0x00,0x00, // 0x01840000
- 0x0A,0x00,0x03,0x01, // 10 ,0 ,3 ,1
- 0x4E,0x58,0x54,0x20,0x44,0x61,0x74,0x61,0x6C,0x6F,0x67,0x00,0x00,0x00,0x00,0x00,
- 0x3D, // 3D
-
- // View
- 0x00,0x00,0x00,0x41, // 0x00000041
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x0E,0x00,0x04,0x01, // 14 ,0 ,4 ,1
- 0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3E, // 3E
-
- // Bluetooth
- 0x00,0x00,0x00,0x51, // 0x00000051
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x00,0x00,0x07,0x02, // 0 ,0 ,7 ,2
- 0x42,0x6C,0x75,0x65,0x74,0x6F,0x6F,0x74,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x51, // 51
-
- // Settings
- 0x00,0x00,0x00,0x61, // 0x00000061
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x00,0x00,0x05,0x01, // 0 ,0 ,5 ,1
- 0x53,0x65,0x74,0x74,0x69,0x6E,0x67,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3F, // 3F
-
- // Try_Me
- 0x00,0x00,0x00,0x71, // 0x00000071
- 0x01,0x04,0x00,0x00, // 0x01040000
- 0x00,0x00,0x06,0x01, // 0 ,0 ,6 ,1
- 0x54,0x72,0x79,0x20,0x4D,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x40, // 40
-};
diff --git a/AT91SAM7S256/Source/Ok.txt b/AT91SAM7S256/Source/Ok.txt
deleted file mode 100644
index 32bad41..0000000
--- a/AT91SAM7S256/Source/Ok.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, Ok) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x20, // Graphics DataSize
- 0x2A, // Graphics Start X
- 0x30, // Graphics Start Y
- 0x10, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x38,0xC4,0x34,0x08,0x00,0xFF,
- 0xFF,0x04,0x0A,0x19,0x12,0x22,0x24,0x24,0x23,0x18,0x07,0x00,0x00,0x00,0x00,0xFF
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Port.txt b/AT91SAM7S256/Source/Port.txt
deleted file mode 100644
index 292fccc..0000000
--- a/AT91SAM7S256/Source/Port.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-DEFINE_DATA(ICON, Port) =
-{
- 0x04,0x00, // Graphics Format
- 0x00,0x18, // Graphics DataSize
- 0x08, // Graphics Count X
- 0x01, // Graphics Count Y
- 0x03, // Graphics Width
- 0x08, // Graphics Height
-BEGIN_DATA
- 0x70,0x88,0x70,0x90,0xF8,0x80,0xC8,0xA8,0x90,0x88,0xA8,0x50,0x38,0x20,0xF8,0xF0,0x28,0xF0,0xF8,0xA8,0x50,0x70,0x88,0x50
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_1.txt b/AT91SAM7S256/Source/RCXintro_1.txt
deleted file mode 100644
index 456a63d..0000000
--- a/AT91SAM7S256/Source/RCXintro_1.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_1) =
-{
- 0x02,0x00, // Graphics Format
- 0x02,0x00, // Graphics DataSize
- 0x10, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x40, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0xFF,0x01,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0x01,0xFF,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x8F,0xC7,0xE7,0x67,0x33,0x33,0x33,0x67,0xE7,0x8F,0xCF,0xE7,0x67,0x63,0x33,0x33,0x33,0x33,0x33,0x27,0x67,0xCF,0xCF,0xE7,0x67,0x63,0x33,0x33,0x33,0x33,0x33,0x63,0x67,0xC7,0x8F,0x8F,0xCF,0x67,0x67,0x23,0x33,0x33,0x33,0x33,0x63,0x67,0xC7,0x8F,0x1F,0x33,0xF3,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0x7F,0x0F,0x83,0xE0,0x78,0x1E,0x07,0x01,0x00,0x00,0x80,0xE0,0xF8,0x7E,0x1F,0x07,0x01,0x00,0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x1C,0x06,0x03,0x00,0x00,0xC0,0x70,0x3C,0x3C,0x30,0x20,0x20,0xE0,0xF0,0x3D,0x0F,0x03,0x00,0x00,0xC0,0xF0,0xFC,0x3C,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1E,0x00,0xC0,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0x01,0x00,0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x0E,0x0F,0xFF,0xC7,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0xFE,0xC7,0x80,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0E,0x00,0x00,0x80,0xC0,0xF0,0xFF,0x83,0x00,0x00,0x00,0x1C,0x1F,0x0F,0x03,0x00,0x80,0xC0,0xE0,0x78,0x1E,0x87,0xC1,0xF0,0xFE,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFE,0xFC,0xF8,0xF3,0xF3,0xE6,0xE6,0xE6,0xE6,0xE6,0xF2,0xF3,0xF9,0xF9,0xF3,0xF6,0xE6,0xE6,0xE6,0xE6,0xE6,0xF3,0xF3,0xF9,0xF9,0xF3,0xF3,0xE6,0xE6,0xE6,0xE6,0xE6,0xE6,0xF3,0xF3,0xF9,0xFC,0xFC,0xF9,0xF3,0xF3,0xE6,0xE6,0xE6,0xE6,0xE6,0xE6,0xF3,0xF3,0xF9,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x80,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x80,0xFF
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_10.txt b/AT91SAM7S256/Source/RCXintro_10.txt
deleted file mode 100644
index 5f98538..0000000
--- a/AT91SAM7S256/Source/RCXintro_10.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_10) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x20, // Graphics DataSize
- 0x38, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x0A, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xFE,0xFE,0x06,0x06,0x66,0x66,0x06,0x06,0xFE,0xFE,
- 0x07,0x07,0x06,0x06,0x00,0x00,0x06,0x06,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_11.txt b/AT91SAM7S256/Source/RCXintro_11.txt
deleted file mode 100644
index 6afaabd..0000000
--- a/AT91SAM7S256/Source/RCXintro_11.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_11) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x10, // Graphics DataSize
- 0x3A, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x08, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,
- 0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_12.txt b/AT91SAM7S256/Source/RCXintro_12.txt
deleted file mode 100644
index b89f65c..0000000
--- a/AT91SAM7S256/Source/RCXintro_12.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_12) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC0, // Graphics DataSize
- 0x03, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x5E, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_13.txt b/AT91SAM7S256/Source/RCXintro_13.txt
deleted file mode 100644
index ee512ea..0000000
--- a/AT91SAM7S256/Source/RCXintro_13.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_13) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC0, // Graphics DataSize
- 0x03, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x5E, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0xC0,0xC0,
- 0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_14.txt b/AT91SAM7S256/Source/RCXintro_14.txt
deleted file mode 100644
index feb4cd7..0000000
--- a/AT91SAM7S256/Source/RCXintro_14.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_14) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC0, // Graphics DataSize
- 0x03, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x5E, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0xD8,0xD8,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0xD8,0xD8,
- 0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_15.txt b/AT91SAM7S256/Source/RCXintro_15.txt
deleted file mode 100644
index 71f51e0..0000000
--- a/AT91SAM7S256/Source/RCXintro_15.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_15) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC0, // Graphics DataSize
- 0x03, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x5E, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xF8,0xF8,0x18,0x00,0xF8,0xF8,0x18,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x18,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x18,0x00,0x00,0xFE,0xFE,0x00,0x00,0xF8,0xF8,0x18,0x00,0xC0,0xD8,0xD8,0x00,0x00,0x18,0x18,0x00,0xF8,0xF8,0x18,0x00,0x00,0x00,0x00,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x00,0x00,0x18,0x38,0x38,0x00,0x00,0xF8,0xF8,0x18,0x00,0xF8,0xF8,0x18,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x00,0xC0,0xD8,0xD8,
- 0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x07,0x07,0x00,0x00,0x06,0x06,0x06,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x06,0x00,0x00,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_16.txt b/AT91SAM7S256/Source/RCXintro_16.txt
deleted file mode 100644
index 9cf470c..0000000
--- a/AT91SAM7S256/Source/RCXintro_16.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_16) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC0, // Graphics DataSize
- 0x03, // Graphics Start X
- 0x20, // Graphics Start Y
- 0x5E, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x18,0xFE,0xFE,0x00,0x00,0xF8,0xF8,0xD8,0xD8,0xD8,0xD8,0xD8,0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18,0x00,0x00,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x18,0x38,0x38,0x00,0x00,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x18,0x18,0xF8,0xF8,0x00,0x00,0xF8,0xF8,0xD8,0xD8,0xD8,0xD8,0xD8,
- 0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x06,0x06,0x06,0x06,0x07,0x07,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_2.txt b/AT91SAM7S256/Source/RCXintro_2.txt
deleted file mode 100644
index addecb2..0000000
--- a/AT91SAM7S256/Source/RCXintro_2.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_2) =
-{
- 0x02,0x00, // Graphics Format
- 0x02,0x00, // Graphics DataSize
- 0x10, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x40, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0xFC,0x02,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0x02,0xFC,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x8F,0xC7,0xE7,0x67,0x30,0x30,0x30,0x60,0xE0,0x80,0xC0,0xE0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x20,0x60,0xC0,0xC0,0xE0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0xC0,0x80,0x80,0xC0,0x60,0x60,0x20,0x33,0x33,0x33,0x33,0x63,0x67,0xC7,0x8F,0x1F,0x33,0xF3,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0x7F,0x0F,0x83,0xE0,0x78,0x1E,0x07,0x01,0x00,0x00,0x80,0xE0,0xF8,0x7E,0x1F,0x07,0x01,0x00,0x00,0x00,0x18,0x18,0x18,0xF8,0xF8,0x1C,0x06,0x03,0x00,0x00,0xC0,0x70,0x3C,0x3C,0x30,0x20,0x20,0xE0,0xF0,0x3D,0x0F,0x03,0x00,0x00,0xC0,0xF0,0xFC,0x3C,0x00,0x00,0x00,0x00,0xC0,0xFF,0x1E,0x00,0xC0,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0x01,0x00,0xFC,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x0E,0x0F,0xFF,0xC7,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0xFE,0xC7,0x80,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0E,0x00,0x00,0x80,0xC0,0xF0,0xFF,0x83,0x00,0x00,0x00,0x1C,0x1F,0x0F,0x03,0x00,0x80,0xC0,0xE0,0x78,0x1E,0xC7,0xE1,0xF8,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFE,0xFE,0xFC,0xF3,0xF3,0xE6,0xE6,0xE6,0xE6,0xE6,0xF2,0x83,0x01,0x01,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x00,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x86,0xF3,0xFB,0xF9,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
- 0x3F,0x40,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x40,0x3F
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_3.txt b/AT91SAM7S256/Source/RCXintro_3.txt
deleted file mode 100644
index eba6710..0000000
--- a/AT91SAM7S256/Source/RCXintro_3.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_3) =
-{
- 0x02,0x00, // Graphics Format
- 0x02,0x00, // Graphics DataSize
- 0x10, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x40, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x07,0x07,0xC3,0xF1,0x79,0x1F,0x00,0x00,0x00,0x00,0xF8,0x7E,0x07,0x03,0x19,0x18,0xF8,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xFC,0xF8,0x31,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x0C,0x07,0x81,0xE0,0x3C,0x01,0x01,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x80,0x80,0x80,0x80,0x8F,0xDF,0x70,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x80,0x80,0xCE,0xCE,0x5F,0x7F,0xFF,0xFF,0xBF,0xBF,0x3F,0x3F,0x3F,0x3F,0xBF,0xDF,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x63,0xC0,0x80,0xC6,0xE3,0xC0,0xE0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_4.txt b/AT91SAM7S256/Source/RCXintro_4.txt
deleted file mode 100644
index dc15847..0000000
--- a/AT91SAM7S256/Source/RCXintro_4.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_4) =
-{
- 0x02,0x00, // Graphics Format
- 0x02,0x00, // Graphics DataSize
- 0x10, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x40, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_5.txt b/AT91SAM7S256/Source/RCXintro_5.txt
deleted file mode 100644
index efd3cb9..0000000
--- a/AT91SAM7S256/Source/RCXintro_5.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_5) =
-{
- 0x02,0x00, // Graphics Format
- 0x01,0xC0, // Graphics DataSize
- 0x17, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x34, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
- 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_6.txt b/AT91SAM7S256/Source/RCXintro_6.txt
deleted file mode 100644
index 4ab152a..0000000
--- a/AT91SAM7S256/Source/RCXintro_6.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_6) =
-{
- 0x02,0x00, // Graphics Format
- 0x01,0x20, // Graphics DataSize
- 0x1C, // Graphics Start X
- 0x08, // Graphics Start Y
- 0x2C, // Graphics Width
- 0x30, // Graphics Height
-BEGIN_DATA
- 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_7.txt b/AT91SAM7S256/Source/RCXintro_7.txt
deleted file mode 100644
index cabcc7b..0000000
--- a/AT91SAM7S256/Source/RCXintro_7.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_7) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0xC8, // Graphics DataSize
- 0x23, // Graphics Start X
- 0x10, // Graphics Start Y
- 0x22, // Graphics Width
- 0x28, // Graphics Height
-BEGIN_DATA
- 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_8.txt b/AT91SAM7S256/Source/RCXintro_8.txt
deleted file mode 100644
index d062714..0000000
--- a/AT91SAM7S256/Source/RCXintro_8.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_8) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x48, // Graphics DataSize
- 0x2C, // Graphics Start X
- 0x18, // Graphics Start Y
- 0x16, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0xFE,0xFF,0xFF,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFF,0xFE,
- 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
- 0x1F,0x3F,0x3F,0x3F,0x3E,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x3E,0x3F,0x3F,0x3F,0x1F
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/RCXintro_9.txt b/AT91SAM7S256/Source/RCXintro_9.txt
deleted file mode 100644
index 3952437..0000000
--- a/AT91SAM7S256/Source/RCXintro_9.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, RCXintro_9) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x30, // Graphics DataSize
- 0x34, // Graphics Start X
- 0x18, // Graphics Start Y
- 0x0E, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
- 0xFF,0xFF,0xFF,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0xFF,0xFF,0xFF,
- 0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Running.txt b/AT91SAM7S256/Source/Running.txt
deleted file mode 100644
index 6bea492..0000000
--- a/AT91SAM7S256/Source/Running.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-DEFINE_DATA(ICON, Running) =
-{
- 0x04,0x00, // Graphics Format
- 0x04,0x80, // Graphics DataSize
- 0x01, // Graphics Count X
- 0x10, // Graphics Count Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x06,0x0E,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x60,0x70,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x80,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x70,0x60,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x0E,0x06,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xE0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0xE0,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x1C,0x0F,0x07,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Status.txt b/AT91SAM7S256/Source/Status.txt
deleted file mode 100644
index 6d1d5bd..0000000
--- a/AT91SAM7S256/Source/Status.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFINE_DATA(ICON, Status) =
-{
- 0x04,0x00, // Graphics Format
- 0x01,0xB0, // Graphics DataSize
- 0x06, // Graphics Count X
- 0x06, // Graphics Count Y
- 0x0C, // Graphics Width
- 0x08, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x7E,0x81,0x81,0x19,0x19,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x7E,0x01,0x01,0x99,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x1E,0x81,0x81,0x99,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x66,0x81,0x81,0x99,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x78,0x81,0x81,0x99,0x99,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x7E,0x80,0x80,0x99,0x99,0x81,0x81,0x7E,0x00,0x00,
- 0x00,0x00,0x7E,0x81,0x81,0x98,0x98,0x81,0x81,0x7E,0x00,0x00,0x00,0x00,0x7E,0x81,0x81,0x99,0x99,0x80,0x80,0x7E,0x00,0x00,0x00,0x00,0x7E,0x81,0x81,0x99,0x99,0x81,0x81,0x78,0x00,0x00,0x00,0x00,0x7E,0x81,0x81,0x99,0x99,0x81,0x81,0x66,0x00,0x00,0x00,0x00,0x7E,0x81,0x81,0x99,0x99,0x81,0x81,0x1E,0x00,0x00,0x00,0x00,0x7E,0x81,0x81,0x99,0x99,0x01,0x01,0x7E,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x3C,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x24,0x24,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x3C,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x22,0x14,0x7F,0x2A,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x14,0x7F,0x2A,0x14,0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x22,0x14,0x7F,0x2A,0x14,0x00,0x00,0x00,0x22,0x14,0x08,0x00,0x22,0x14,0x7F,0x2A,0x14,0x00,0x08,0x14,0x22,0x14,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x22,0x1C,0x00,0x3E,0x0A,0x02,0x00,0x3E,0x20,0x3E,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x14,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C,0x14,0x14,0x00,0x3E,0x20,0x3E,0x00,0x2E,0x2A,0x3A,0x00,0x3E,0x2A,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Step.txt b/AT91SAM7S256/Source/Step.txt
deleted file mode 100644
index cba0c0d..0000000
--- a/AT91SAM7S256/Source/Step.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(ICON, Step) =
-{
- 0x04,0x00, // Graphics Format
- 0x02,0xC0, // Graphics DataSize
- 0x08, // Graphics Count X
- 0x04, // Graphics Count Y
- 0x0B, // Graphics Width
- 0x10, // Graphics Height
-BEGIN_DATA
- 0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x11,0x19,0x7D,0x19,0x11,0x01,0x01,0xFF,0xFF,0x01,0x01,0x11,0x19,0x7D,0x19,0x11,0x05,0x01,0xFF,0xFF,0x01,0x11,0x39,0x7D,0x11,0x1D,0x01,0x05,0x01,0xFF,0xFF,0x01,0x11,0x39,0x7D,0x11,0x71,0x01,0x01,0x01,0xFF,0xFF,0x01,0x11,0x39,0x7D,0x11,0x71,0x01,0x05,0x01,0xFF,0xFF,0x01,0x01,0x01,0x1D,0x11,0x7D,0x39,0x11,0x01,0xFF,0xFF,0x01,0x01,0x01,0x71,0x11,0x7D,0x39,0x11,0x01,0xFF,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0xFF,0x01,0x05,0x01,0x71,0x11,0x7D,0x39,0x11,0x01,0xFF,0xFF,0x01,0x11,0x39,0x7D,0x11,0x1D,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x21,0x71,0x71,0x3D,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x21,0x71,0x71,0x3D,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x11,0x31,0x7D,0x31,0x11,0x01,0x01,0xFF,0xFF,0x01,0x01,0x11,0x31,0x7D,0x31,0x11,0x05,0x01,0xFF,0xFF,0x01,0x05,0x01,0x1D,0x11,0x7D,0x39,0x11,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x39,0x45,0x45,0x45,0x39,0x01,0x01,0xFF,0xFF,0x01,0xF1,0x39,0x45,0xFF,0x11,0x45,0x39,0x01,0xFF,0xFF,0x01,0x39,0x29,0x29,0x39,0x45,0x45,0x39,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x39,0x45,0xFF,0x01,0xFF,0xFF,0x01,0x01,0xC7,0xAB,0x93,0xAB,0xC7,0x01,0x01,0xFF,0xFF,0x01,0x01,0xC7,0xAB,0x93,0xAB,0xC7,0x01,0x01,0xFF,0xFF,0x01,0x01,0xC7,0xAB,0x93,0xAB,0xC7,0x01,0x01,0xFF,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
- 0xFF,0x01,0x01,0x39,0x7D,0x7D,0x7D,0x39,0x01,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x39,0x41,0x45,0x4F,0x45,0x39,0x01,0x01,0xFF,0xFF,0x01,0x49,0x55,0x25,0x01,0x05,0x7D,0x05,0x01,0xFF,
- 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Submenu01.rms b/AT91SAM7S256/Source/Submenu01.rms
deleted file mode 100644
index aadf93d..0000000
--- a/AT91SAM7S256/Source/Submenu01.rms
+++ /dev/null
@@ -1,128 +0,0 @@
-const UBYTE SUBMENU01[] =
-{
- 0x07,0x00, // Menu Format
- 0x01,0xED, // Menu DataSize
- 0x1D, // Menu item size
- 0x11, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Software_files
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x10,0x00,0x80,0x01, // 0x10008001
- 0x06,0x02,0x00,0x01, // 6 ,2 ,0 ,1
- 0x53,0x6F,0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,
- 0x1C, // 1C
-
- // NXT_files
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x10,0x00,0x80,0x01, // 0x10008001
- 0x06,0x03,0x00,0x01, // 6 ,3 ,0 ,1
- 0x4E,0x58,0x54,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1D, // 1D
-
- // Sound_files
- 0x00,0x00,0x00,0x03, // 0x00000003
- 0x10,0x00,0x80,0x01, // 0x10008001
- 0x06,0x01,0x00,0x01, // 6 ,1 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,0x00,
- 0x1B, // 1B
-
- // Datalog_files
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x80,0x80,0x00, // 0x00808000
- 0x06,0x05,0x00,0x02, // 6 ,5 ,0 ,2
- 0x44,0x61,0x74,0x61,0x6C,0x6F,0x67,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,
- 0x1F, // 1F
-
- // _
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x06,0xF2,0x00,0x01, // 6 ,242,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // _
- 0x00,0x00,0x00,0x14, // 0x00000014
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x06,0xF2,0x00,0x01, // 6 ,242,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // Run
- 0x00,0x00,0x01,0x11, // 0x00000111
- 0x00,0x00,0x01,0x20, // 0x00000120
- 0x08,0xF8,0x00,0x00, // 8 ,248,0 ,0
- 0x52,0x75,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x32, // 32
-
- // Send
- 0x00,0x00,0x02,0x11, // 0x00000211
- 0x00,0x40,0x00,0x00, // 0x00400000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x53,0x65,0x6E,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x33, // 33
-
- // Delete
- 0x00,0x00,0x03,0x11, // 0x00000311
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x02, // 0 ,0 ,0 ,2
- 0x44,0x65,0x6C,0x65,0x74,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x34, // 34
-
- // Delete
- 0x00,0x00,0x01,0x14, // 0x00000114
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x02, // 0 ,0 ,0 ,2
- 0x44,0x65,0x6C,0x65,0x74,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x34, // 34
-
- // Send
- 0x00,0x00,0x02,0x14, // 0x00000214
- 0x00,0x40,0x00,0x00, // 0x00400000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x53,0x65,0x6E,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x33, // 33
-
- // _
- 0x00,0x00,0x12,0x11, // 0x00001211
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x10,0xF9,0x00,0x00, // 16 ,249,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // Are_you_sure?
- 0x00,0x00,0x13,0x11, // 0x00001311
- 0x00,0x00,0x00,0x08, // 0x00000008
- 0x09,0x00,0x00,0x00, // 9 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x31, // 31
-
- // Are_you_sure?
- 0x00,0x00,0x23,0x11, // 0x00002311
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x30, // 30
-
- // Are_you_sure?
- 0x00,0x00,0x11,0x14, // 0x00001114
- 0x00,0x00,0x00,0x08, // 0x00000008
- 0x09,0x00,0x00,0x00, // 9 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x31, // 31
-
- // Are_you_sure?
- 0x00,0x00,0x21,0x14, // 0x00002114
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x30, // 30
-
- // _
- 0x00,0x00,0x12,0x14, // 0x00001214
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x10,0xF9,0x00,0x00, // 16 ,249,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-};
diff --git a/AT91SAM7S256/Source/Submenu02.rms b/AT91SAM7S256/Source/Submenu02.rms
deleted file mode 100644
index a30478f..0000000
--- a/AT91SAM7S256/Source/Submenu02.rms
+++ /dev/null
@@ -1,401 +0,0 @@
-const UBYTE SUBMENU02[] =
-{
- 0x07,0x00, // Menu Format
- 0x06,0x58, // Menu DataSize
- 0x1D, // Menu item size
- 0x38, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // _
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x0B,0xF7,0x00,0x01, // 11 ,247,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // Forward_5
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x23,0x00,0x01, // 11 ,35 ,0 ,1
- 0x46,0x6F,0x72,0x77,0x61,0x72,0x64,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x23, // 23
-
- // Forward
- 0x00,0x00,0x00,0x21, // 0x00000021
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x22,0x00,0x01, // 11 ,34 ,0 ,1
- 0x46,0x6F,0x72,0x77,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x22, // 22
-
- // Turn_right_2
- 0x00,0x00,0x00,0x31, // 0x00000031
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x29,0x00,0x01, // 11 ,41 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x00,0x00,0x00,0x00,
- 0x29, // 29
-
- // Turn_right
- 0x00,0x00,0x00,0x41, // 0x00000041
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x28,0x00,0x01, // 11 ,40 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x72,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x28, // 28
-
- // Back_right_2
- 0x00,0x00,0x00,0x51, // 0x00000051
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2F,0x00,0x01, // 11 ,47 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x00,0x00,0x00,0x00,
- 0x2F, // 2F
-
- // Back_right
- 0x00,0x00,0x00,0x61, // 0x00000061
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x27,0x00,0x01, // 11 ,39 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x72,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x27, // 27
-
- // Tone_1
- 0x00,0x00,0x00,0x71, // 0x00000071
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2B,0x00,0x01, // 11 ,43 ,0 ,1
- 0x54,0x6F,0x6E,0x65,0x20,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2B, // 2B
-
- // Tone_2
- 0x00,0x00,0x00,0x81, // 0x00000081
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2C,0x00,0x01, // 11 ,44 ,0 ,1
- 0x54,0x6F,0x6E,0x65,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2C, // 2C
-
- // Back_left_2
- 0x00,0x00,0x00,0x91, // 0x00000091
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x24,0x00,0x01, // 11 ,36 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x6C,0x65,0x66,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,
- 0x24, // 24
-
- // Back_left
- 0x00,0x00,0x00,0xA1, // 0x000000A1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2A,0x00,0x01, // 11 ,42 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x6C,0x65,0x66,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2A, // 2A
-
- // Turn_left
- 0x00,0x00,0x00,0xB1, // 0x000000B1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x25,0x00,0x01, // 11 ,37 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6C,0x65,0x66,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x25, // 25
-
- // Turn_left_2
- 0x00,0x00,0x00,0xC1, // 0x000000C1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x26,0x00,0x01, // 11 ,38 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6C,0x65,0x66,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,
- 0x26, // 26
-
- // Empty
- 0x00,0x00,0x00,0xD1, // 0x000000D1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x21,0x00,0x01, // 11 ,33 ,0 ,1
- 0x45,0x6D,0x70,0x74,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x21, // 21
-
- // Backward
- 0x00,0x00,0x00,0xE1, // 0x000000E1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2D,0x00,0x01, // 11 ,45 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x77,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2D, // 2D
-
- // Backward_5
- 0x00,0x00,0x00,0xF1, // 0x000000F1
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2E,0x00,0x01, // 11 ,46 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x77,0x61,0x72,0x64,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2E, // 2E
-
- // Empty
- 0x00,0x00,0x01,0x11, // 0x00000111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x41,0x00,0x01, // 11 ,65 ,0 ,1
- 0x45,0x6D,0x70,0x74,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x21, // 21
-
- // Wait_2
- 0x00,0x00,0x02,0x11, // 0x00000211
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x46,0x00,0x01, // 11 ,70 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x46, // 46
-
- // Wait_5
- 0x00,0x00,0x03,0x11, // 0x00000311
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x47,0x00,0x01, // 11 ,71 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x47, // 47
-
- // Wait_10
- 0x00,0x00,0x04,0x11, // 0x00000411
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x48,0x00,0x01, // 11 ,72 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x31,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x48, // 48
-
- // Object
- 0x00,0x00,0x05,0x11, // 0x00000511
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x43,0x00,0x01, // 11 ,67 ,0 ,1
- 0x4F,0x62,0x6A,0x65,0x63,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x43, // 43
-
- // Sound
- 0x00,0x00,0x06,0x11, // 0x00000611
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x44,0x00,0x01, // 11 ,68 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x44, // 44
-
- // Light
- 0x00,0x00,0x07,0x11, // 0x00000711
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x42,0x00,0x01, // 11 ,66 ,0 ,1
- 0x4C,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x42, // 42
-
- // Dark
- 0x00,0x00,0x08,0x11, // 0x00000811
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x49,0x00,0x01, // 11 ,73 ,0 ,1
- 0x44,0x61,0x72,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x49, // 49
-
- // Touch
- 0x00,0x00,0x09,0x11, // 0x00000911
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x45,0x00,0x01, // 11 ,69 ,0 ,1
- 0x54,0x6F,0x75,0x63,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x45, // 45
-
- // Forward_5
- 0x00,0x00,0x11,0x11, // 0x00001111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x23,0x00,0x01, // 11 ,35 ,0 ,1
- 0x46,0x6F,0x72,0x77,0x61,0x72,0x64,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x23, // 23
-
- // Forward
- 0x00,0x00,0x21,0x11, // 0x00002111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x22,0x00,0x01, // 11 ,34 ,0 ,1
- 0x46,0x6F,0x72,0x77,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x22, // 22
-
- // Turn_right_2
- 0x00,0x00,0x31,0x11, // 0x00003111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x29,0x00,0x01, // 11 ,41 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x00,0x00,0x00,0x00,
- 0x29, // 29
-
- // Turn_right
- 0x00,0x00,0x41,0x11, // 0x00004111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x28,0x00,0x01, // 11 ,40 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x72,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x28, // 28
-
- // Back_right_2
- 0x00,0x00,0x51,0x11, // 0x00005111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2F,0x00,0x01, // 11 ,47 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x00,0x00,0x00,0x00,
- 0x2F, // 2F
-
- // Back_right
- 0x00,0x00,0x61,0x11, // 0x00006111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x27,0x00,0x01, // 11 ,39 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x72,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x27, // 27
-
- // Tone_1
- 0x00,0x00,0x71,0x11, // 0x00007111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2B,0x00,0x01, // 11 ,43 ,0 ,1
- 0x54,0x6F,0x6E,0x65,0x20,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2B, // 2B
-
- // Tone_2
- 0x00,0x00,0x81,0x11, // 0x00008111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2C,0x00,0x01, // 11 ,44 ,0 ,1
- 0x54,0x6F,0x6E,0x65,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2C, // 2C
-
- // Back_left_2
- 0x00,0x00,0x91,0x11, // 0x00009111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x24,0x00,0x01, // 11 ,36 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x6C,0x65,0x66,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,
- 0x24, // 24
-
- // Back_left
- 0x00,0x00,0xA1,0x11, // 0x0000A111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2A,0x00,0x01, // 11 ,42 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x20,0x6C,0x65,0x66,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2A, // 2A
-
- // Turn_left
- 0x00,0x00,0xB1,0x11, // 0x0000B111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x25,0x00,0x01, // 11 ,37 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6C,0x65,0x66,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x25, // 25
-
- // Turn_left_2
- 0x00,0x00,0xC1,0x11, // 0x0000C111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x26,0x00,0x01, // 11 ,38 ,0 ,1
- 0x54,0x75,0x72,0x6E,0x20,0x6C,0x65,0x66,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,
- 0x26, // 26
-
- // Empty
- 0x00,0x00,0xD1,0x11, // 0x0000D111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x21,0x00,0x01, // 11 ,33 ,0 ,1
- 0x45,0x6D,0x70,0x74,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x21, // 21
-
- // Backward
- 0x00,0x00,0xE1,0x11, // 0x0000E111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2D,0x00,0x01, // 11 ,45 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x77,0x61,0x72,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2D, // 2D
-
- // Backward_5
- 0x00,0x00,0xF1,0x11, // 0x0000F111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x2E,0x00,0x01, // 11 ,46 ,0 ,1
- 0x42,0x61,0x63,0x6B,0x77,0x61,0x72,0x64,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x2E, // 2E
-
- // Empty
- 0x00,0x01,0x11,0x11, // 0x00011111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x41,0x00,0x01, // 11 ,65 ,0 ,1
- 0x45,0x6D,0x70,0x74,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x21, // 21
-
- // Wait_2
- 0x00,0x02,0x11,0x11, // 0x00021111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x46,0x00,0x01, // 11 ,70 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x46, // 46
-
- // Wait_5
- 0x00,0x03,0x11,0x11, // 0x00031111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x47,0x00,0x01, // 11 ,71 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x47, // 47
-
- // Wait_10
- 0x00,0x04,0x11,0x11, // 0x00041111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x48,0x00,0x01, // 11 ,72 ,0 ,1
- 0x57,0x61,0x69,0x74,0x20,0x31,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x48, // 48
-
- // Object
- 0x00,0x05,0x11,0x11, // 0x00051111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x43,0x00,0x01, // 11 ,67 ,0 ,1
- 0x4F,0x62,0x6A,0x65,0x63,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x43, // 43
-
- // Sound
- 0x00,0x06,0x11,0x11, // 0x00061111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x44,0x00,0x01, // 11 ,68 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x44, // 44
-
- // Light
- 0x00,0x07,0x11,0x11, // 0x00071111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x42,0x00,0x01, // 11 ,66 ,0 ,1
- 0x4C,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x42, // 42
-
- // Dark
- 0x00,0x08,0x11,0x11, // 0x00081111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x49,0x00,0x01, // 11 ,73 ,0 ,1
- 0x44,0x61,0x72,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x49, // 49
-
- // Touch
- 0x00,0x09,0x11,0x11, // 0x00091111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0x45,0x00,0x01, // 11 ,69 ,0 ,1
- 0x54,0x6F,0x75,0x63,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x45, // 45
-
- // Stop
- 0x00,0x11,0x11,0x11, // 0x00111111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0xFB,0x00,0x01, // 11 ,251,0 ,1
- 0x53,0x74,0x6F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x4D, // 4D
-
- // Loop
- 0x00,0x21,0x11,0x11, // 0x00211111
- 0x10,0x00,0x00,0x61, // 0x10000061
- 0x0B,0xFC,0x00,0x01, // 11 ,252,0 ,1
- 0x4C,0x6F,0x6F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x4E, // 4E
-
- // Run
- 0x01,0x11,0x11,0x11, // 0x01111111
- 0x00,0x00,0x00,0x60, // 0x00000060
- 0x0B,0xF8,0x00,0x00, // 11 ,248,0 ,0
- 0x52,0x75,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x32, // 32
-
- // Main_menu
- 0x02,0x11,0x11,0x11, // 0x02111111
- 0x00,0x00,0x20,0x60, // 0x00002060
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x4D,0x61,0x69,0x6E,0x20,0x6D,0x65,0x6E,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x37, // 37
-
- // Save
- 0x04,0x11,0x11,0x11, // 0x04111111
- 0x00,0x00,0x00,0x60, // 0x00000060
- 0x0B,0xFA,0x00,0x02, // 11 ,250,0 ,2
- 0x53,0x61,0x76,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1D, // 1D
-
- // Yes
- 0x14,0x11,0x11,0x11, // 0x14111111
- 0x00,0x00,0x20,0x20, // 0x00002020
- 0x0B,0xED,0x00,0x00, // 11 ,237,0 ,0
- 0x59,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x31, // 31
-
- // No
- 0x24,0x11,0x11,0x11, // 0x24111111
- 0x00,0x08,0x00,0x24, // 0x00080024
- 0x0B,0xF6,0x00,0x00, // 11 ,246,0 ,0
- 0x4E,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x30, // 30
-};
diff --git a/AT91SAM7S256/Source/Submenu03.rms b/AT91SAM7S256/Source/Submenu03.rms
deleted file mode 100644
index cb7830b..0000000
--- a/AT91SAM7S256/Source/Submenu03.rms
+++ /dev/null
@@ -1,233 +0,0 @@
-const UBYTE SUBMENU03[] =
-{
- 0x07,0x00, // Menu Format
- 0x03,0xA0, // Menu DataSize
- 0x1D, // Menu item size
- 0x20, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Temperature_`C
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x0B,0x00,0x01, // 10 ,11 ,0 ,1
- 0x54,0x65,0x6D,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x60,0x43,0x00,0x00,
- 0x0F, // 0F
-
- // Temperature_`F
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x0C,0x00,0x01, // 10 ,12 ,0 ,1
- 0x54,0x65,0x6D,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x60,0x46,0x00,0x00,
- 0x10, // 10
-
- // Sound_dB
- 0x00,0x00,0x00,0x03, // 0x00000003
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x02,0x00,0x01, // 10 ,2 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x64,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x02, // 02
-
- // Sound_dBA
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x03,0x00,0x01, // 10 ,3 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x64,0x42,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03, // 03
-
- // Reflected_light
- 0x00,0x00,0x00,0x05, // 0x00000005
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x04,0x00,0x01, // 10 ,4 ,0 ,1
- 0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6C,0x69,0x67,0x68,0x74,0x00,
- 0x04, // 04
-
- // Ambient_light
- 0x00,0x00,0x00,0x06, // 0x00000006
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x05,0x00,0x01, // 10 ,5 ,0 ,1
- 0x41,0x6D,0x62,0x69,0x65,0x6E,0x74,0x20,0x6C,0x69,0x67,0x68,0x74,0x00,0x00,0x00,
- 0x05, // 05
-
- // Motor_Rotations
- 0x00,0x00,0x00,0x07, // 0x00000007
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0A,0x08,0x00,0x01, // 10 ,8 ,0 ,1
- 0x4D,0x6F,0x74,0x6F,0x72,0x20,0x52,0x6F,0x74,0x61,0x74,0x69,0x6F,0x6E,0x73,0x00,
- 0x09, // 09
-
- // Motor_Degrees
- 0x00,0x00,0x00,0x08, // 0x00000008
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0A,0x07,0x00,0x01, // 10 ,7 ,0 ,1
- 0x4D,0x6F,0x74,0x6F,0x72,0x20,0x44,0x65,0x67,0x72,0x65,0x65,0x73,0x00,0x00,0x00,
- 0x08, // 08
-
- // Touch
- 0x00,0x00,0x00,0x09, // 0x00000009
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x06,0x00,0x01, // 10 ,6 ,0 ,1
- 0x54,0x6F,0x75,0x63,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x07, // 07
-
- // UltraSonic_inch
- 0x00,0x00,0x00,0x0A, // 0x0000000A
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x09,0x00,0x01, // 10 ,9 ,0 ,1
- 0x55,0x6C,0x74,0x72,0x61,0x53,0x6F,0x6E,0x69,0x63,0x20,0x69,0x6E,0x63,0x68,0x00,
- 0x0B, // 0B
-
- // UltraSonic_cm
- 0x00,0x00,0x00,0x0B, // 0x0000000B
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x0A,0x00,0x01, // 10 ,10 ,0 ,1
- 0x55,0x6C,0x74,0x72,0x61,0x53,0x6F,0x6E,0x69,0x63,0x20,0x63,0x6D,0x00,0x00,0x00,
- 0x0C, // 0C
-
- // Color
- 0x00,0x00,0x00,0x0C, // 0x0000000C
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x0D,0x00,0x01, // 10 ,13 ,0 ,1
- 0x43,0x6F,0x6C,0x6F,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x11, // 11
-
- // Done
- 0x00,0x00,0x00,0x0D, // 0x0000000D
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0A,0xEE,0x00,0x01, // 10 ,238,0 ,1
- 0x44,0x6F,0x6E,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x31, // 31
-
- // Port_1
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x12,0x00,0x01, // 10 ,18 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x12, // 12
-
- // Port_2
- 0x00,0x00,0x00,0x21, // 0x00000021
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x13,0x00,0x01, // 10 ,19 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x13, // 13
-
- // Port_3
- 0x00,0x00,0x00,0x31, // 0x00000031
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x14,0x00,0x01, // 10 ,20 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x14, // 14
-
- // Port_4
- 0x00,0x00,0x00,0x41, // 0x00000041
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x15,0x00,0x01, // 10 ,21 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x15, // 15
-
- // Port_A
- 0x00,0x00,0x00,0x17, // 0x00000017
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x16,0x00,0x01, // 10 ,22 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x16, // 16
-
- // Port_B
- 0x00,0x00,0x00,0x27, // 0x00000027
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x17,0x00,0x01, // 10 ,23 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x17, // 17
-
- // Port_C
- 0x00,0x00,0x00,0x37, // 0x00000037
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x18,0x00,0x01, // 10 ,24 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x18, // 18
-
- // Port_A
- 0x00,0x00,0x00,0x18, // 0x00000018
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x16,0x00,0x01, // 10 ,22 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x16, // 16
-
- // Port_B
- 0x00,0x00,0x00,0x28, // 0x00000028
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x17,0x00,0x01, // 10 ,23 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x17, // 17
-
- // Port_C
- 0x00,0x00,0x00,0x38, // 0x00000038
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0A,0x18,0x00,0x01, // 10 ,24 ,0 ,1
- 0x50,0x6F,0x72,0x74,0x20,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x17, // 17
-
- // _
- 0x00,0x00,0x00,0x1D, // 0x0000001D
- 0x00,0x00,0x10,0x00, // 0x00001000
- 0x0A,0xF7,0x00,0x01, // 10 ,247,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // _
- 0x00,0x00,0x01,0x11, // 0x00000111
- 0x0D,0x05,0x10,0x00, // 0x0D051000
- 0x0A,0xF2,0x00,0x00, // 10 ,242,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // _
- 0x00,0x00,0x01,0x17, // 0x00000117
- 0x0D,0x05,0x10,0x00, // 0x0D051000
- 0x0A,0xF2,0x00,0x00, // 10 ,242,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // _
- 0x00,0x00,0x01,0x18, // 0x00000118
- 0x0D,0x05,0x10,0x00, // 0x0D051000
- 0x0A,0xF2,0x00,0x00, // 10 ,242,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00, // 00
-
- // Run
- 0x00,0x00,0x01,0x1D, // 0x0000011D
- 0x00,0x00,0x00,0x68, // 0x00000068
- 0x0A,0xF8,0x00,0x02, // 10 ,248,0 ,2
- 0x52,0x75,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x32, // 32
-
- // Main_menu
- 0x00,0x00,0x11,0x1D, // 0x0000111D
- 0x00,0x02,0x20,0x00, // 0x00022000
- 0x0A,0xF1,0x00,0x00, // 10 ,241,0 ,0
- 0x4D,0x61,0x69,0x6E,0x20,0x6D,0x65,0x6E,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x37, // 37
-
- // Save
- 0x00,0x00,0x21,0x1D, // 0x0000211D
- 0x00,0x02,0x00,0x00, // 0x00020000
- 0x0A,0xFA,0x00,0x02, // 10 ,250,0 ,2
- 0x53,0x61,0x76,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1F, // 1F
-
- // Yes
- 0x00,0x01,0x21,0x1D, // 0x0001211D
- 0x00,0x00,0x20,0x20, // 0x00002020
- 0x0A,0xED,0x00,0x00, // 10 ,237,0 ,0
- 0x59,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x31, // 31
-
- // No
- 0x00,0x02,0x21,0x1D, // 0x0002211D
- 0x00,0x08,0x00,0x24, // 0x00080024
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x4E,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x30, // 30
-};
diff --git a/AT91SAM7S256/Source/Submenu04.rms b/AT91SAM7S256/Source/Submenu04.rms
deleted file mode 100644
index 273e456..0000000
--- a/AT91SAM7S256/Source/Submenu04.rms
+++ /dev/null
@@ -1,163 +0,0 @@
-const UBYTE SUBMENU04[] =
-{
- 0x07,0x00, // Menu Format
- 0x02,0x7E, // Menu DataSize
- 0x1D, // Menu item size
- 0x16, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Sound_dB
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x02,0x00,0x01, // 14 ,2 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x64,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x02, // 02
-
- // Sound_dBA
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x03,0x00,0x01, // 14 ,3 ,0 ,1
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x64,0x42,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03, // 03
-
- // Reflected_light
- 0x00,0x00,0x00,0x03, // 0x00000003
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x04,0x00,0x01, // 14 ,4 ,0 ,1
- 0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x65,0x64,0x20,0x6C,0x69,0x67,0x68,0x74,0x00,
- 0x04, // 04
-
- // Ambient_light
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x05,0x00,0x01, // 14 ,5 ,0 ,1
- 0x41,0x6D,0x62,0x69,0x65,0x6E,0x74,0x20,0x6C,0x69,0x67,0x68,0x74,0x00,0x00,0x00,
- 0x05, // 05
-
- // Temperature_`C
- 0x00,0x00,0x00,0x05, // 0x00000005
- 0x10,0x00,0x01,0x21, // 0x10000121
- 0x0E,0x0B,0x00,0x01, // 14 ,11 ,0 ,1
- 0x54,0x65,0x6D,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x60,0x43,0x00,0x00,
- 0x0F, // 0F
-
- // Temperature_`F
- 0x00,0x00,0x00,0x06, // 0x00000006
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x0C,0x00,0x01, // 14 ,12 ,0 ,1
- 0x54,0x65,0x6D,0x70,0x65,0x72,0x61,0x74,0x75,0x72,0x65,0x20,0x60,0x46,0x00,0x00,
- 0x10, // 10
-
- // Motor_rotations
- 0x00,0x00,0x00,0x07, // 0x00000007
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x08,0x00,0x01, // 14 ,8 ,0 ,1
- 0x4D,0x6F,0x74,0x6F,0x72,0x20,0x72,0x6F,0x74,0x61,0x74,0x69,0x6F,0x6E,0x73,0x00,
- 0x09, // 09
-
- // Motor_degrees
- 0x00,0x00,0x00,0x08, // 0x00000008
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x07,0x00,0x01, // 14 ,7 ,0 ,1
- 0x4D,0x6F,0x74,0x6F,0x72,0x20,0x64,0x65,0x67,0x72,0x65,0x65,0x73,0x00,0x00,0x00,
- 0x08, // 08
-
- // Touch
- 0x00,0x00,0x00,0x09, // 0x00000009
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x06,0x00,0x01, // 14 ,6 ,0 ,1
- 0x54,0x6F,0x75,0x63,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x07, // 07
-
- // Ultrasonic_inch
- 0x00,0x00,0x00,0x0A, // 0x0000000A
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x09,0x00,0x01, // 14 ,9 ,0 ,1
- 0x55,0x6C,0x74,0x72,0x61,0x73,0x6F,0x6E,0x69,0x63,0x20,0x69,0x6E,0x63,0x68,0x00,
- 0x0B, // 0B
-
- // Ultrasonic_cm
- 0x00,0x00,0x00,0x0B, // 0x0000000B
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x0A,0x00,0x01, // 14 ,10 ,0 ,1
- 0x55,0x6C,0x74,0x72,0x61,0x73,0x6F,0x6E,0x69,0x63,0x20,0x63,0x6D,0x00,0x00,0x00,
- 0x0C, // 0C
-
- // Color
- 0x00,0x00,0x00,0x0C, // 0x0000000C
- 0x10,0x00,0x00,0x21, // 0x10000021
- 0x0E,0x0D,0x00,0x01, // 14 ,13 ,0 ,1
- 0x43,0x6F,0x6C,0x6F,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x11, // 11
-
- // Port_1
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x12,0x00,0x00, // 14 ,18 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x12, // 12
-
- // Port_2
- 0x00,0x00,0x00,0x21, // 0x00000021
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x13,0x00,0x00, // 14 ,19 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x13, // 13
-
- // Port_3
- 0x00,0x00,0x00,0x31, // 0x00000031
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x14,0x00,0x00, // 14 ,20 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x14, // 14
-
- // Port_4
- 0x00,0x00,0x00,0x41, // 0x00000041
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x15,0x00,0x00, // 14 ,21 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x15, // 15
-
- // Port_A
- 0x00,0x00,0x00,0x17, // 0x00000017
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x16,0x00,0x00, // 14 ,22 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x16, // 16
-
- // Port_B
- 0x00,0x00,0x00,0x27, // 0x00000027
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x17,0x00,0x00, // 14 ,23 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x17, // 17
-
- // Port_C
- 0x00,0x00,0x00,0x37, // 0x00000037
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x18,0x00,0x00, // 14 ,24 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x18, // 18
-
- // Port_A
- 0x00,0x00,0x00,0x18, // 0x00000018
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x16,0x00,0x00, // 14 ,22 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x16, // 16
-
- // Port_B
- 0x00,0x00,0x00,0x28, // 0x00000028
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x17,0x00,0x00, // 14 ,23 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x17, // 17
-
- // Port_C
- 0x00,0x00,0x00,0x38, // 0x00000038
- 0x00,0x00,0x00,0x20, // 0x00000020
- 0x0E,0x18,0x00,0x00, // 14 ,24 ,0 ,0
- 0x50,0x6F,0x72,0x74,0x20,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x18, // 18
-};
diff --git a/AT91SAM7S256/Source/Submenu05.rms b/AT91SAM7S256/Source/Submenu05.rms
deleted file mode 100644
index 5e03396..0000000
--- a/AT91SAM7S256/Source/Submenu05.rms
+++ /dev/null
@@ -1,128 +0,0 @@
-const UBYTE SUBMENU05[] =
-{
- 0x07,0x00, // Menu Format
- 0x01,0xED, // Menu DataSize
- 0x1D, // Menu item size
- 0x11, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Volume
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x00,0x00,0x80,0x00, // 0x00008000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x56,0x6F,0x6C,0x75,0x6D,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x39, // 39
-
- // Sleep
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x00,0x00,0x80,0x00, // 0x00008000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x53,0x6C,0x65,0x65,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3A, // 3A
-
- // NXT_Version
- 0x00,0x00,0x00,0x03, // 0x00000003
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x01,0x00,0x00,0x00, // 1 ,0 ,0 ,0
- 0x4E,0x58,0x54,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x00,0x00,0x00,0x00,0x00,
- 0x4F, // 4F
-
- // Delete_files
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x00,0x80,0x00, // 0x00008000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x44,0x65,0x6C,0x65,0x74,0x65,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,
- 0x34, // 34
-
- // _
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x00,0x00,0x03,0x60, // 0x00000360
- 0x07,0xEF,0x00,0x00, // 7 ,239,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x39, // 39
-
- // _
- 0x00,0x00,0x00,0x21, // 0x00000021
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x35, // 35
-
- // _
- 0x00,0x00,0x00,0x31, // 0x00000031
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x36, // 36
-
- // _
- 0x00,0x00,0x00,0x12, // 0x00000012
- 0x00,0x00,0x03,0x20, // 0x00000320
- 0x04,0xEF,0x00,0x00, // 4 ,239,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x3A, // 3A
-
- // _
- 0x00,0x00,0x00,0x22, // 0x00000022
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x35, // 35
-
- // _
- 0x00,0x00,0x00,0x32, // 0x00000032
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x36, // 36
-
- // Software_files
- 0x00,0x00,0x00,0x14, // 0x00000014
- 0x10,0x00,0x00,0x01, // 0x10000001
- 0x05,0x02,0x00,0x02, // 5 ,2 ,0 ,2
- 0x53,0x6F,0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,
- 0x1C, // 1C
-
- // NXT_files
- 0x00,0x00,0x00,0x24, // 0x00000024
- 0x10,0x00,0x00,0x01, // 0x10000001
- 0x05,0x03,0x00,0x02, // 5 ,3 ,0 ,2
- 0x4E,0x58,0x54,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1D, // 1D
-
- // Sound_files
- 0x00,0x00,0x00,0x34, // 0x00000034
- 0x10,0x00,0x00,0x01, // 0x10000001
- 0x05,0x01,0x00,0x02, // 5 ,1 ,0 ,2
- 0x53,0x6F,0x75,0x6E,0x64,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,0x00,
- 0x1B, // 1B
-
- // Datalog_files
- 0x00,0x00,0x00,0x44, // 0x00000044
- 0x10,0x80,0x00,0x01, // 0x10800001
- 0x05,0x05,0x00,0x02, // 5 ,5 ,0 ,2
- 0x44,0x61,0x74,0x61,0x6C,0x6F,0x67,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,
- 0x1F, // 1F
-
- // Try_me_files
- 0x00,0x00,0x00,0x54, // 0x00000054
- 0x10,0x00,0x00,0x01, // 0x10000001
- 0x05,0x04,0x00,0x02, // 5 ,4 ,0 ,2
- 0x54,0x72,0x79,0x20,0x6D,0x65,0x20,0x66,0x69,0x6C,0x65,0x73,0x00,0x00,0x00,0x00,
- 0x1E, // 1E
-
- // Are_you_sure?
- 0x00,0x00,0x01,0x14, // 0x00000114
- 0x00,0x00,0x01,0x08, // 0x00000108
- 0x05,0xF1,0x00,0x00, // 5 ,241,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x31, // 31
-
- // Are_you_sure?
- 0x00,0x00,0x02,0x14, // 0x00000214
- 0x00,0x00,0x01,0x04, // 0x00000104
- 0x05,0x00,0x00,0x00, // 5 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x30, // 30
-};
diff --git a/AT91SAM7S256/Source/Submenu06.rms b/AT91SAM7S256/Source/Submenu06.rms
deleted file mode 100644
index 5cd1b06..0000000
--- a/AT91SAM7S256/Source/Submenu06.rms
+++ /dev/null
@@ -1,51 +0,0 @@
-const UBYTE SUBMENU06[] =
-{
- 0x07,0x00, // Menu Format
- 0x00,0xAE, // Menu DataSize
- 0x1D, // Menu item size
- 0x06, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // _
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x00,0x00,0x10,0x00, // 0x00001000
- 0x06,0x04,0x00,0x01, // 6 ,4 ,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1E, // 1E
-
- // _
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x00,0x00,0x03,0x80, // 0x00000380
- 0x06,0xF2,0x00,0x02, // 6 ,242,0 ,2
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x1E, // 1E
-
- // Delete
- 0x00,0x00,0x01,0x11, // 0x00000111
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x02, // 0 ,0 ,0 ,2
- 0x44,0x65,0x6C,0x65,0x74,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x34, // 34
-
- // Run
- 0x00,0x00,0x02,0x11, // 0x00000211
- 0x00,0x00,0x01,0x20, // 0x00000120
- 0x08,0xF8,0x00,0x00, // 8 ,248,0 ,0
- 0x52,0x75,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x32, // 32
-
- // Are_you_sure?
- 0x00,0x00,0x11,0x11, // 0x00001111
- 0x00,0x00,0x00,0x08, // 0x00000008
- 0x09,0x00,0x00,0x00, // 9 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x31, // 31
-
- // Are_you_sure?
- 0x00,0x00,0x21,0x11, // 0x00002111
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x00,0x00,0x00, // 0 ,0 ,0 ,0
- 0x41,0x72,0x65,0x20,0x79,0x6F,0x75,0x20,0x73,0x75,0x72,0x65,0x3F,0x00,0x00,0x00,
- 0x30, // 30
-};
diff --git a/AT91SAM7S256/Source/Submenu07.rms b/AT91SAM7S256/Source/Submenu07.rms
deleted file mode 100644
index 43c292e..0000000
--- a/AT91SAM7S256/Source/Submenu07.rms
+++ /dev/null
@@ -1,142 +0,0 @@
-const UBYTE SUBMENU07[] =
-{
- 0x07,0x00, // Menu Format
- 0x02,0x27, // Menu DataSize
- 0x1D, // Menu item size
- 0x13, // Menu items
- 0x18, // Menu icon Width
- 0x18, // Menu icon Height
-
- // Search
- 0x00,0x00,0x00,0x01, // 0x00000001
- 0x00,0x40,0x80,0x00, // 0x00408000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x53,0x65,0x61,0x72,0x63,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x56, // 56
-
- // My_contacts
- 0x00,0x00,0x00,0x02, // 0x00000002
- 0x00,0x40,0x80,0x00, // 0x00408000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x4D,0x79,0x20,0x63,0x6F,0x6E,0x74,0x61,0x63,0x74,0x73,0x00,0x00,0x00,0x00,0x00,
- 0x52, // 52
-
- // Connections
- 0x00,0x00,0x00,0x03, // 0x00000003
- 0x00,0x40,0x80,0x00, // 0x00408000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x43,0x6F,0x6E,0x6E,0x65,0x63,0x74,0x69,0x6F,0x6E,0x73,0x00,0x00,0x00,0x00,0x00,
- 0x53, // 53
-
- // Visibility
- 0x00,0x00,0x00,0x04, // 0x00000004
- 0x00,0x40,0x80,0x00, // 0x00408000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x56,0x69,0x73,0x69,0x62,0x69,0x6C,0x69,0x74,0x79,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x54, // 54
-
- // On/Off
- 0x00,0x00,0x00,0x05, // 0x00000005
- 0x00,0x00,0x80,0x00, // 0x00008000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x4F,0x6E,0x2F,0x4F,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x55, // 55
-
- // _
- 0x00,0x00,0x00,0x11, // 0x00000011
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x12,0xFF,0x00,0x01, // 18 ,255,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // _
- 0x00,0x00,0x00,0x12, // 0x00000012
- 0x00,0x00,0x10,0x00, // 0x00001000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // _
- 0x00,0x00,0x00,0x13, // 0x00000013
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x14,0xF6,0x00,0x01, // 20 ,246,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // Visible
- 0x00,0x00,0x00,0x14, // 0x00000014
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x11,0xEB,0x00,0x00, // 17 ,235,0 ,0
- 0x56,0x69,0x73,0x69,0x62,0x6C,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x5A, // 5A
-
- // Invisible
- 0x00,0x00,0x00,0x24, // 0x00000024
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x11,0xEA,0x00,0x00, // 17 ,234,0 ,0
- 0x49,0x6E,0x76,0x69,0x73,0x69,0x62,0x6C,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x5B, // 5B
-
- // On
- 0x00,0x00,0x00,0x15, // 0x00000015
- 0x00,0x00,0x00,0x80, // 0x00000080
- 0x03,0xEB,0x00,0x00, // 3 ,235,0 ,0
- 0x4F,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x5C, // 5C
-
- // Off
- 0x00,0x00,0x00,0x25, // 0x00000025
- 0x00,0x40,0x00,0x80, // 0x00400080
- 0x03,0xEA,0x00,0x00, // 3 ,234,0 ,0
- 0x4F,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x5D, // 5D
-
- // _
- 0x00,0x00,0x01,0x11, // 0x00000111
- 0x00,0x00,0x03,0x08, // 0x00000308
- 0x13,0xF2,0x00,0x01, // 19 ,242,0 ,1
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // _
- 0x00,0x00,0x01,0x12, // 0x00000112
- 0x00,0x10,0x02,0x08, // 0x00100208
- 0x13,0xF2,0x00,0x02, // 19 ,242,0 ,2
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // Disconnect
- 0x00,0x00,0x01,0x13, // 0x00000113
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x14,0xF0,0x00,0x00, // 20 ,240,0 ,0
- 0x44,0x69,0x73,0x63,0x6F,0x6E,0x6E,0x65,0x63,0x74,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x59, // 59
-
- // _
- 0x00,0x00,0x11,0x11, // 0x00001111
- 0x00,0x00,0x03,0x00, // 0x00000300
- 0x10,0xF5,0x00,0x00, // 16 ,245,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-
- // Delete
- 0x00,0x00,0x11,0x12, // 0x00001112
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x13,0xF1,0x00,0x00, // 19 ,241,0 ,0
- 0x44,0x65,0x6C,0x65,0x74,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x34, // 34
-
- // Connect
- 0x00,0x00,0x21,0x12, // 0x00002112
- 0x00,0x00,0x00,0x00, // 0x00000000
- 0x00,0x00,0x00,0x01, // 0 ,0 ,0 ,1
- 0x43,0x6F,0x6E,0x6E,0x65,0x63,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x58, // 58
-
- // _
- 0x00,0x01,0x21,0x12, // 0x00012112
- 0x00,0x00,0x03,0x08, // 0x00000308
- 0x10,0xF5,0x00,0x00, // 16 ,245,0 ,0
- 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x57, // 57
-};
diff --git a/AT91SAM7S256/Source/Test1.txt b/AT91SAM7S256/Source/Test1.txt
deleted file mode 100644
index 018d27d..0000000
--- a/AT91SAM7S256/Source/Test1.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, Test1) =
-{
- 0x02,0x00, // Graphics Format
- 0x04,0x00, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x80, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Test2.txt b/AT91SAM7S256/Source/Test2.txt
deleted file mode 100644
index 2553335..0000000
--- a/AT91SAM7S256/Source/Test2.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-DEFINE_DATA(BMPMAP, Test2) =
-{
- 0x02,0x00, // Graphics Format
- 0x04,0x00, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x00, // Graphics Start Y
- 0x80, // Graphics Width
- 0x40, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Ui.txt b/AT91SAM7S256/Source/Ui.txt
deleted file mode 100644
index 2cf47aa..0000000
--- a/AT91SAM7S256/Source/Ui.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-DEFINE_DATA(TXT, Ui) =
-{
- 0x05,0x00, // Text Format
- 0x04,0x0D, // Text DataSize
- 0x01, // ItemsX
- 0x3D, // ItemsY
- 0x11, // ItemCharsX
- 0x01, // ItemCharsY
-BEGIN_DATA
- 'C','o','n','n','e','c','t','i','n','g', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'L','i','n','e',' ','i','s',' ','b','u','s','y', 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'C','o','n','n','e','c','t','i','o','n','?', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','e','n','d','i','n','g',' ','f','i','l','e', 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'T','u','r','n','i','n','g',' ','o','n', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'T','u','r','n','i','n','g',' ','o','f','f', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','e','a','r','c','h','i','n','g', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'A','b','o','r','t','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','a','i','l','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'M','e','m','o','r','y',' ','f','u','l','l','!', 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','s','a','v','e','d', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','e','x','i','s','t','s', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'o','v','e','r','w','r','i','t','e','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','a','v','e','d',' ','a','s', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','e','x','i','s','t', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'o','v','e','r','w','r','i','t','e','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','d','e','l','e','t','e','d', 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e','s', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'd','e','l','e','t','e','d', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'R','u','n','n','i','n','g', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'A','b','o','r','t','e','d','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'D','o','n','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','e','r','r','o','r','!', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'D','e','l','e','t','i','n','g',' ','a','l','l', 0 , 0 , 0 , 0 , 0 ,
- '%','s',' ','f','i','l','e','s','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'P','r','e','s','s',' ','C','l','e','a','r',' ','t','o', 0 , 0 , 0 ,
- 's','t','o','p',' ','D','a','t','a','L','o','g','g','i','n','g', 0 ,
- 'P','o','r','t',' ','o','c','c','u','p','i','e','d','!', 0 , 0 , 0 ,
- 'H',':','M','M',':','S','S',':','0','0', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'H','H',':','M','M',':','S','S', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','o','u','n','d', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','o','f','t','w','a','r','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'N','X','T', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'T','r','y',' ','M','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'D','a','t','a','l','o','g', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'P','a','s','s','k','e','y',':', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'F','i','l','e',' ','n','a','m','e',':', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'P','l','e','a','s','e',' ','u','s','e',' ','p','o','r','t',':', 0 ,
- '1',' ','-',' ','T','o','u','c','h',' ','S','e','n','s','o','r', 0 ,
- '2',' ','-',' ','S','o','u','n','d',' ','S','e','n','s','o','r', 0 ,
- '3',' ','-',' ','L','i','g','h','t',' ','S','e','n','s','o','r', 0 ,
- '4',' ','-',' ','U','l','t','r','a','s','o','n','i','c',' ',' ', 0 ,
- 'B','/','C',' ','-',' ','L','/','R',' ','m','o','t','o','r','s', 0 ,
- 'S','e','l','e','c','t', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','e','l','e','c','t', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'S','e','l','e','c','t', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'B','T',' ','s','a','v','e',' ','d','a','t','a', 0 , 0 , 0 , 0 , 0 ,
- 'e','r','r','o','r','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'B','T',' ','s','t','o','r','e',' ','i','s', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'f','u','l','l',' ','e','r','r','o','r','!', 0 , 0 , 0 , 0 , 0 , 0 ,
- 'B','T',' ','u','n','k','n','o','w','n', 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'a','d','d','r','.',' ','e','r','r','o','r','!', 0 , 0 , 0 , 0 , 0 ,
- 'M','e','m','o','r','y',' ','i','s', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'f','u','l','l','!', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 'N','e','v','e','r', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/Wait.txt b/AT91SAM7S256/Source/Wait.txt
deleted file mode 100644
index abdbd43..0000000
--- a/AT91SAM7S256/Source/Wait.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DEFINE_DATA(BMPMAP, Wait) =
-{
- 0x02,0x00, // Graphics Format
- 0x00,0x48, // Graphics DataSize
- 0x00, // Graphics Start X
- 0x08, // Graphics Start Y
- 0x18, // Graphics Width
- 0x18, // Graphics Height
-BEGIN_DATA
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x24,0x98,0xC2,0x98,0x24,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-END_DATA
-};
diff --git a/AT91SAM7S256/Source/c_button.c b/AT91SAM7S256/Source/c_button.c
deleted file mode 100644
index 3145d8f..0000000
--- a/AT91SAM7S256/Source/c_button.c
+++ /dev/null
@@ -1,134 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_button.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_butt $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_button.h"
-#include "c_button.iom"
-#include "c_button.h"
-#include "d_button.h"
-
-#define BTN_PRESCALER 2
-
-enum
-{
- LONG_TIME = (2000/BTN_PRESCALER)
-};
-
-static IOMAPBUTTON IOMapButton;
-static VARSBUTTON VarsButton;
-static UBYTE BtnCnt;
-
-const HEADER cButton =
-{
- 0x00040001L,
- "Button",
- cButtonInit,
- cButtonCtrl,
- cButtonExit,
- (void *)&IOMapButton,
- (void *)&VarsButton,
- (UWORD)sizeof(IOMapButton),
- (UWORD)sizeof(VarsButton),
- 0x0000 //Code size - not used so far
-};
-
-
-void cButtonInit(void* pHeader)
-{
- UBYTE Tmp;
-
- for (Tmp = 0; Tmp < NO_OF_BTNS; Tmp++)
- {
- IOMapButton.State[Tmp] = 0;
- IOMapButton.BtnCnt[Tmp].PressedCnt = 0;
- IOMapButton.BtnCnt[Tmp].LongPressCnt = 0;
- IOMapButton.BtnCnt[Tmp].ShortRelCnt = 0;
- IOMapButton.BtnCnt[Tmp].LongRelCnt = 0;
- VarsButton.Cnt[Tmp] = 0;
- }
- VarsButton.OldState = 0;
- BtnCnt = 0;
- dButtonInit(BTN_PRESCALER);
-}
-
-void cButtonCtrl(void)
-{
- UBYTE ButtonState, Tmp, ButtonNo;
-
- for (Tmp = 0; Tmp < NO_OF_BTNS; Tmp++)
- {
- IOMapButton.State[Tmp] &= ~PRESSED_EV;
- }
- if (++BtnCnt >= BTN_PRESCALER)
- {
- BtnCnt = 0;
- dButtonRead(&ButtonState);
-
- ButtonNo = 0x01;
- for (Tmp = 0; Tmp < NO_OF_BTNS; Tmp++)
- {
- if (ButtonState & ButtonNo)
- {
- if (LONG_TIME >= (VarsButton.Cnt[Tmp]))
- {
- (VarsButton.Cnt[Tmp])++;
- }
- IOMapButton.State[Tmp] = PRESSED_STATE;
- if (!((VarsButton.OldState) & ButtonNo))
- {
-
- /* Button just pressed */
- (IOMapButton.State[Tmp]) |= PRESSED_EV;
- (IOMapButton.BtnCnt[Tmp].PressedCnt)++;
- VarsButton.Cnt[Tmp] = 0;
- }
- else
- {
- if (LONG_TIME == VarsButton.Cnt[Tmp])
- {
- IOMapButton.State[Tmp] |= LONG_PRESSED_EV;
- (IOMapButton.BtnCnt[Tmp].LongPressCnt)++;
- }
- }
- }
- else
- {
- IOMapButton.State[Tmp] = 0x00;
- if ((VarsButton.OldState) & ButtonNo)
- {
- if (VarsButton.Cnt[Tmp] > LONG_TIME)
- {
- IOMapButton.State[Tmp] = LONG_RELEASED_EV;
- (IOMapButton.BtnCnt[Tmp].LongRelCnt)++;
-
- }
- else
- {
- IOMapButton.State[Tmp] = SHORT_RELEASED_EV;
- (IOMapButton.BtnCnt[Tmp].ShortRelCnt)++;
- }
- }
- }
- ButtonNo <<= 1;
- IOMapButton.BtnCnt[Tmp].RelCnt = ((IOMapButton.BtnCnt[Tmp].ShortRelCnt) + (IOMapButton.BtnCnt[Tmp].LongRelCnt));
- }
- VarsButton.OldState = ButtonState;
- }
-}
-
-void cButtonExit(void)
-{
- dButtonExit();
-}
diff --git a/AT91SAM7S256/Source/c_button.h b/AT91SAM7S256/Source/c_button.h
deleted file mode 100644
index c33b24d..0000000
--- a/AT91SAM7S256/Source/c_button.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_button.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_butt $
-//
-// Platform C
-//
-
-#ifndef C_BUTTON
-#define C_BUTTON
-
-#ifdef INCLUDE_OS
-extern const HEADER cButton;
-#endif
-
-#include "c_button.iom"
-
-
-typedef struct
-{
- UWORD Cnt[NO_OF_BTNS];
- UBYTE OldState;
-}VARSBUTTON;
-
-void cButtonInit(void* pHeader);
-void cButtonCtrl(void);
-void cButtonExit(void);
-
-extern const HEADER cButton;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_button.iom b/AT91SAM7S256/Source/c_button.iom
deleted file mode 100644
index 640a7cd..0000000
--- a/AT91SAM7S256/Source/c_button.iom
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_button.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_butt $
-//
-// Platform C
-//
-
-#ifndef CBUTTON_IOM
-#define CBUTTON_IOM
-
-#define pMapButton ((IOMAPBUTTON*)(pHeaders[ENTRY_BUTTON]->pIOMap))
-
-enum
-{
- BTN1,
- BTN2,
- BTN3,
- BTN4,
- NO_OF_BTNS
-};
-
-/* Costants related to State */
-enum
-{
- PRESSED_EV = 0x01,
- SHORT_RELEASED_EV = 0x02,
- LONG_PRESSED_EV = 0x04,
- LONG_RELEASED_EV = 0x08,
- PRESSED_STATE = 0x80
-};
-
-typedef struct
-{
- UBYTE PressedCnt;
- UBYTE LongPressCnt;
- UBYTE ShortRelCnt;
- UBYTE LongRelCnt;
- UBYTE RelCnt;
- UBYTE SpareOne;
- UBYTE SpareTwo;
- UBYTE SpareThree;
-}BTNCNT;
-
-typedef struct
-{
- BTNCNT BtnCnt[NO_OF_BTNS];
- UBYTE State[NO_OF_BTNS];
-}IOMAPBUTTON;
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_cmd.c b/AT91SAM7S256/Source/c_cmd.c
deleted file mode 100644
index 87b3e24..0000000
--- a/AT91SAM7S256/Source/c_cmd.c
+++ /dev/null
@@ -1,8020 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 24-06-09 8:53 $
-//
-// Filename $Workfile:: c_cmd.c $
-//
-// Version $Revision: 14 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_cmd. $
-//
-// Platform C
-//
-
-//
-// File Description:
-// This file contains the virtual machine implementation to run bytecode
-// programs compatible with LEGO MINDSTORMS NXT Software 2.0.
-//
-// This module (c_cmd) is also responsible for reading the system timer
-// (d_timer) and returning on 1 ms timer boundaries.
-//
-
-#include "stdconst.h"
-#include "modules.h"
-
-#include "c_cmd.iom"
-#include "c_output.iom"
-#include "c_input.iom"
-#include "c_loader.iom"
-#include "c_ui.iom"
-#include "c_sound.iom"
-#include "c_button.iom"
-#include "c_display.iom"
-#include "c_comm.iom"
-#include "c_lowspeed.iom"
-#include "m_sched.h"
-
-#include "c_cmd.h"
-#include "c_cmd_bytecodes.h"
-#include "d_timer.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h> // for sqrt, abs, and trig stuff
-
-#define VMProfilingCode 0
-
-static IOMAPCMD IOMapCmd;
-static VARSCMD VarsCmd;
-static HEADER **pHeaders;
-static ULONG gInstrsToExecute;
-static SLONG gPCDelta;
-#define NUM_INTERP_FUNCS 16
-#define NUM_SHORT_INTERP_FUNCS 8
-#define VAR_INSTR_SIZE 0xE
-// important to cast since most args are assigned from signed value, and locals may be ULONG
-#define GetDataArg(arg) ((UWORD)(arg))
-#if VMProfilingCode
-static ULONG ExecutedInstrs= 0, CmdCtrlTime= 0, OverheadTime= 0, CmdCtrlCalls= 0, LeaveTime= 0, NotFirstCall= 0, LastAvgCount= 0;
-static ULONG CmdCtrlClumpTime[256];
-typedef struct {
- ULONG Time;
- ULONG Count;
- ULONG Avg;
- ULONG Max;
-} VMInstrProfileInfo;
-static VMInstrProfileInfo InstrProfile[OPCODE_COUNT];
-static VMInstrProfileInfo SysCallProfile[SYSCALL_COUNT];
-static VMInstrProfileInfo InterpFuncProfile[NUM_INTERP_FUNCS];
-static VMInstrProfileInfo ShortInstrProfile[NUM_SHORT_OPCODE_COUNT];
-#endif
-
-#define cCmdDSType(Arg) (VarsCmd.pDataspaceTOC[(Arg)].TypeCode)
-#define cCmdDSScalarPtr(DSElementID, Offset) (VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[DSElementID].DSOffset + Offset)
-#define cCmdSizeOf(TC) (TC_Size_Table[(TC)])
-
-#define scalarBinopDispatchMask 0x1
-#define scalarUnop2DispatchMask 0x2
-
-const HEADER cCmd =
-{
- 0x00010001L,
- "Command",
- cCmdInit,
- cCmdCtrl,
- cCmdExit,
- (void *)&IOMapCmd,
- (void *)&VarsCmd,
- (UWORD)sizeof(IOMapCmd),
- (UWORD)sizeof(VarsCmd),
- 0x0000 //Code size - not used so far
-};
-
-#if ENABLE_VM
-
-// c_cmd_drawing.inc is just another C source file
-// (the graphics implementation was split off for practical file management reasons)
-#include "c_cmd_drawing.inc"
-
-//
-//Function pointers to sub-interpreters
-//This table is indexed by instr size
-//Unary operations can have arity of 1 or 2 (some need a destination)
-//All instructions taking 4 or more operands are handled as "Other"
-// Table uses NoArg for illegal instr sizes such as zero and odd sizes
-//
-static pInterp InterpFuncs[NUM_INTERP_FUNCS] =
-{
- cCmdInterpNoArg,
- cCmdInterpNoArg,
- cCmdInterpNoArg, // size 2
- cCmdInterpNoArg,
- cCmdInterpUnop1, // size 4
- cCmdInterpNoArg,
- cCmdInterpUnop2, // size 6 general poly is cCmdInterpUnop2, scalar is cCmdInterpScalarUnop2
- cCmdInterpNoArg,
- cCmdInterpBinop, // size 8, general poly is cCmdInterpBinop, scalar is cCmdInterpScalarBinop
- cCmdInterpNoArg,
- cCmdInterpOther, // size 10
- cCmdInterpNoArg,
- cCmdInterpOther, // size 12
- cCmdInterpNoArg,
- cCmdInterpOther, // size 14
- cCmdInterpNoArg
-};
-
-static pInterpShort ShortInterpFuncs[NUM_SHORT_INTERP_FUNCS] =
-{
- cCmdInterpShortMove,
- cCmdInterpShortAcquire,
- cCmdInterpShortRelease,
- cCmdInterpShortSubCall,
- cCmdInterpShortError,
- cCmdInterpShortError,
- cCmdInterpShortError,
- cCmdInterpShortError
-};
-
-ULONG TC_Size_Table[]= {
- 0, // void
- SIZE_UBYTE,
- SIZE_SBYTE,
- SIZE_UWORD,
- SIZE_SWORD,
- SIZE_ULONG,
- SIZE_SLONG,
- SIZE_UWORD, // array
- 0, // cluster
- SIZE_MUTEX,
- SIZE_FLOAT
-};
-
-
-//
-//Function pointers to SysCall implementations
-//See interpreter for OP_SYSCALL
-//
-static pSysCall SysCallFuncs[SYSCALL_COUNT] =
-{
- cCmdWrapFileOpenRead,
- cCmdWrapFileOpenWrite,
- cCmdWrapFileOpenAppend,
- cCmdWrapFileRead,
- cCmdWrapFileWrite,
- cCmdWrapFileClose, // 5
- cCmdWrapFileResolveHandle,
- cCmdWrapFileRename,
- cCmdWrapFileDelete,
- cCmdWrapSoundPlayFile,
- cCmdWrapSoundPlayTone, // 10
- cCmdWrapSoundGetState,
- cCmdWrapSoundSetState,
- cCmdWrapDrawText,
- cCmdWrapDrawPoint,
- cCmdWrapDrawLine, // 15
- cCmdWrapDrawCircle,
- cCmdWrapDrawRect,
- cCmdWrapDrawPicture,
- cCmdWrapSetScreenMode,
- cCmdWrapReadButton, // 20
- cCmdWrapCommLSWrite,
- cCmdWrapCommLSRead,
- cCmdWrapCommLSCheckStatus,
- cCmdWrapRandomNumber,
- cCmdWrapGetStartTick, // 25
- cCmdWrapMessageWrite,
- cCmdWrapMessageRead,
- cCmdWrapCommBTCheckStatus,
- cCmdWrapCommBTWrite,
- cCmdWrapCommBTRead, // 30
- cCmdWrapKeepAlive,
- cCmdWrapIOMapRead,
- cCmdWrapIOMapWrite,
- cCmdWrapColorSensorRead,
- cCmdWrapCommBTOnOff, // 35
- cCmdWrapCommBTConnection,
- cCmdWrapCommHSWrite,
- cCmdWrapCommHSRead,
- cCmdWrapCommHSCheckStatus,
- cCmdWrapReadSemData, //40
- cCmdWrapWriteSemData,
- cCmdWrapComputeCalibValue,
- cCmdWrapUpdateCalibCacheInfo,
- cCmdWrapDatalogWrite,
- cCmdWrapDatalogGetTimes, //45
- cCmdWrapSetSleepTimeout,
- cCmdWrapListFiles //47
-
- // don't forget to update SYSCALL_COUNT in c_cmd.h
-};
-
-//
-//Next set of arrays are lookup tables for IOM access bytecodes
-//
-TYPE_CODE IO_TYPES_IN[IO_IN_FIELD_COUNT] =
-{
- //IO_IN0
- TC_UBYTE, //IO_IN_TYPE
- TC_UBYTE, //IO_IN_MODE
- TC_UWORD, //IO_IN_ADRAW
- TC_UWORD, //IO_IN_NORMRAW
- TC_SWORD, //IO_IN_SCALED_VAL
- TC_UBYTE, //IO_IN_INVALID_DATA
-
- //IO_IN1
- TC_UBYTE, //IO_IN_TYPE
- TC_UBYTE, //IO_IN_MODE
- TC_UWORD, //IO_IN_ADRAW
- TC_UWORD, //IO_IN_NORMRAW
- TC_SWORD, //IO_IN_SCALED_VAL
- TC_UBYTE, //IO_IN_INVALID_DATA
-
- //IO_IN2
- TC_UBYTE, //IO_IN_TYPE
- TC_UBYTE, //IO_IN_MODE
- TC_UWORD, //IO_IN_ADRAW
- TC_UWORD, //IO_IN_NORMRAW
- TC_SWORD, //IO_IN_SCALED_VAL
- TC_UBYTE, //IO_IN_INVALID_DATA
-
- //IO_IN3
- TC_UBYTE, //IO_IN_TYPE
- TC_UBYTE, //IO_IN_MODE
- TC_UWORD, //IO_IN_ADRAW
- TC_UWORD, //IO_IN_NORMRAW
- TC_SWORD, //IO_IN_SCALED_VAL
- TC_UBYTE, //IO_IN_INVALID_DATA
-};
-
-TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] =
-{
- //IO_OUT0
- TC_UBYTE, //IO_OUT_FLAGS
- TC_UBYTE, //IO_OUT_MODE
- TC_SBYTE, //IO_OUT_SPEED
- TC_SBYTE, //IO_OUT_ACTUAL_SPEED
- TC_SLONG, //IO_OUT_TACH_COUNT
- TC_ULONG, //IO_OUT_TACH_LIMIT
- TC_UBYTE, //IO_OUT_RUN_STATE
- TC_SBYTE, //IO_OUT_TURN_RATIO
- TC_UBYTE, //IO_OUT_REG_MODE
- TC_UBYTE, //IO_OUT_OVERLOAD
- TC_UBYTE, //IO_OUT_REG_P_VAL
- TC_UBYTE, //IO_OUT_REG_I_VAL
- TC_UBYTE, //IO_OUT_REG_D_VAL
- TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT
- TC_SLONG, //IO_OUT_ROTATION_COUNT
- TC_UBYTE, //IO_OUT_OPTIONS
- TC_SBYTE, //IO_OUT_MAX_SPEED
- TC_SBYTE, //IO_OUT_MAX_ACCELERATION
-
- //IO_OUT1
- TC_UBYTE, //IO_OUT_FLAGS
- TC_UBYTE, //IO_OUT_MODE
- TC_SBYTE, //IO_OUT_SPEED
- TC_SBYTE, //IO_OUT_ACTUAL_SPEED
- TC_SLONG, //IO_OUT_TACH_COUNT
- TC_ULONG, //IO_OUT_TACH_LIMIT
- TC_UBYTE, //IO_OUT_RUN_STATE
- TC_SBYTE, //IO_OUT_TURN_RATIO
- TC_UBYTE, //IO_OUT_REG_MODE
- TC_UBYTE, //IO_OUT_OVERLOAD
- TC_UBYTE, //IO_OUT_REG_P_VAL
- TC_UBYTE, //IO_OUT_REG_I_VAL
- TC_UBYTE, //IO_OUT_REG_D_VAL
- TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT
- TC_SLONG, //IO_OUT_ROTATION_COUNT
- TC_UBYTE, //IO_OUT_OPTIONS
- TC_SBYTE, //IO_OUT_MAX_SPEED
- TC_SBYTE, //IO_OUT_MAX_ACCELERATION
-
- //IO_OUT2
- TC_UBYTE, //IO_OUT_FLAGS
- TC_UBYTE, //IO_OUT_MODE
- TC_SBYTE, //IO_OUT_SPEED
- TC_SBYTE, //IO_OUT_ACTUAL_SPEED
- TC_SLONG, //IO_OUT_TACH_COUNT
- TC_ULONG, //IO_OUT_TACH_LIMIT
- TC_UBYTE, //IO_OUT_RUN_STATE
- TC_SBYTE, //IO_OUT_TURN_RATIO
- TC_UBYTE, //IO_OUT_REG_MODE
- TC_UBYTE, //IO_OUT_OVERLOAD
- TC_UBYTE, //IO_OUT_REG_P_VAL
- TC_UBYTE, //IO_OUT_REG_I_VAL
- TC_UBYTE, //IO_OUT_REG_D_VAL
- TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT
- TC_SLONG, //IO_OUT_ROTATION_COUNT
- TC_UBYTE, //IO_OUT_OPTIONS
- TC_SBYTE, //IO_OUT_MAX_SPEED
- TC_SBYTE, //IO_OUT_MAX_ACCELERATION
-};
-
-
-TYPE_CODE * IO_TYPES[2] =
-{
- IO_TYPES_IN,
- IO_TYPES_OUT
-};
-
-//Actual pointers filled in during cCmdInit()
-void * IO_PTRS_IN[IO_IN_FIELD_COUNT];
-void * IO_PTRS_OUT[IO_OUT_FIELD_COUNT];
-
-void ** IO_PTRS[2] =
-{
- IO_PTRS_IN,
- IO_PTRS_OUT
-};
-
-// Data used to indicate usage of motor ports, or usage requests
-UBYTE gUsageSemData, gRequestSemData;
-
-UBYTE cCmdBTGetDeviceType(UBYTE *pCOD)
-{
- ULONG COD;
- UBYTE Result;
- UBYTE Tmp;
-
- COD = 0;
- for (Tmp = 0;Tmp < SIZE_OF_CLASS_OF_DEVICE;Tmp++)
- {
- COD <<= 8;
- COD |= (ULONG)*pCOD;
- pCOD++;
- }
-
- Result = DEVICETYPE_UNKNOWN;
- if ((COD & 0x00001FFF) == 0x00000804)
- {
- Result = DEVICETYPE_NXT;
- }
- if ((COD & 0x00001F00) == 0x00000200)
- {
- Result = DEVICETYPE_PHONE;
- }
- if ((COD & 0x00001F00) == 0x00000100)
- {
- Result = DEVICETYPE_PC;
- }
-
- return (Result);
-}
-
-//cCmdHandleRemoteCommands is the registered handler for "direct" command protocol packets
-//It is only intended to be called via c_comm's main protocol handler
-UWORD cCmdHandleRemoteCommands(UBYTE * pInBuf, UBYTE * pOutBuf, UBYTE * pLen)
-{
- NXT_STATUS RCStatus = NO_ERR;
- //Response packet length. Always includes RCStatus byte.
- ULONG ResponseLen = 1;
- //Boolean flag to send a response. TRUE unless overridden below.
- ULONG SendResponse = TRUE;
- //Boolean flag if we are handling a reply telegram. FALSE unless overridden.
- ULONG IncomingReply = FALSE;
- ULONG i, FirstPort, LastPort;
- UWORD LStatus;
- UWORD Count, QueueID;
- UBYTE * pData;
-
- //Illegal call, give up
- if (pInBuf == NULL || pLen == NULL)
- {
- NXT_BREAK;
- return (0xFFFF);
- }
-
- //No output buffer provided, so skip any work related to returning a response
- if (pOutBuf == NULL)
- SendResponse = FALSE;
-
- //If first byte identifies this as a reply telegram, we have different work to do.
- if (pInBuf[0] == 0x02)
- {
- IncomingReply = TRUE;
- //Reply telegrams never get responses, even if caller provided a buffer.
- SendResponse = FALSE;
- }
-
- //Advance pInBuf past command type byte
- pInBuf++;
-
- if (!IncomingReply)
- {
- switch(pInBuf[0])
- {
- case RC_START_PROGRAM:
- {
- //Check that file exists. If not, return error
- //!!! Should return standard loader file error in cases like this??
- //!!! Proper solution would also check file mode to avoid confusing errors
- if (LOADER_ERR(LStatus = pMapLoader->pFunc(FINDFIRST, (&pInBuf[1]), NULL, NULL)) != SUCCESS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //Close file handle returned by FINDFIRST
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(LStatus), NULL, NULL);
-
- //File must exist, so inform UI to attempt execution in the usual way (enables consistent feedback)
- pMapUi->Flags |= UI_EXECUTE_LMS_FILE;
- strncpy((PSZ)(pMapUi->LMSfilename), (PSZ)(&pInBuf[1]), FILENAME_LENGTH + 1);
- }
- break;
-
- case RC_STOP_PROGRAM:
- {
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- {
- RCStatus = ERR_NO_PROG;
- break;
- }
-
- IOMapCmd.DeactivateFlag = TRUE;
- }
- break;
-
- case RC_PLAY_SOUND_FILE:
- {
- if (LOADER_ERR(LStatus = pMapLoader->pFunc(FINDFIRST, (&pInBuf[2]), NULL, NULL)) != SUCCESS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //Close file handle returned by FINDFIRST
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(LStatus), NULL, NULL);
-
- if (pInBuf[1] == FALSE)
- pMapSound->Mode = SOUND_ONCE;
- else //Any non-zero value treated as TRUE
- pMapSound->Mode = SOUND_LOOP;
-
- strncpy((PSZ)pMapSound->SoundFilename, (PSZ)(&pInBuf[2]), FILENAME_LENGTH + 1);
- pMapSound->Flags |= SOUND_UPDATE;
- }
- break;
-
- case RC_PLAY_TONE:
- {
- pMapSound->Mode = SOUND_TONE;
- //!!! Range check valid values?
- memcpy((PSZ)(&(pMapSound->Freq)), (PSZ)(&pInBuf[1]), 2);
- memcpy((PSZ)(&(pMapSound->Duration)), (PSZ)(&pInBuf[3]), 2);
-
- pMapSound->Flags |= SOUND_UPDATE;
- }
- break;
-
- case RC_SET_OUT_STATE:
- {
- UBYTE Port = pInBuf[1];
- //Don't do anything if illegal port specification is made
- if (Port >= NO_OF_OUTPUTS && Port != 0xFF)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //0xFF is protocol defined to mean "all ports".
- if (Port == 0xFF)
- {
- FirstPort = 0;
- LastPort = NO_OF_OUTPUTS - 1;
- }
- else
- FirstPort = LastPort = Port;
-
- for (i = FirstPort; i <= LastPort; i++)
- {
- OUTPUT * pOut = &(pMapOutPut->Outputs[i]);
- pOut->Speed = pInBuf[2];
- pOut->Mode = pInBuf[3];
- pOut->RegMode = pInBuf[4];
- pOut->SyncTurnParameter = pInBuf[5];
- pOut->RunState = pInBuf[6];
- pOut->Options = pOut->Mode & REG_METHOD;
- memcpy((PSZ)(&(pOut->TachoLimit)), (PSZ)(&pInBuf[7]), 4);
-
- pOut->Flags |= UPDATE_MODE | UPDATE_SPEED | UPDATE_TACHO_LIMIT;
- }
- }
- break;
-
- case RC_SET_IN_MODE:
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- //!!! Should check against legal Types and Modes? (bitmask for Modes?)
- if (i >= NO_OF_INPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
- INPUTSTRUCT * pIn = &(pMapInput->Inputs[i]);
-
- pIn->SensorType = pInBuf[2];
- pIn->SensorMode = pInBuf[3];
-
- //Set InvalidData flag automatically since type may have changed
- pIn->InvalidData = TRUE;
- }
- break;
-
- case RC_GET_OUT_STATE:
- {
- if (SendResponse == TRUE)
- {
- i = pInBuf[1];
-
- //Return error and all zeros if illegal port specification is made
- if (i >= NO_OF_OUTPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- memset(&(pOutBuf[ResponseLen]), 0, 22);
- ResponseLen += 22;
- break;
- }
- OUTPUT * pOut = &(pMapOutPut->Outputs[i]);
-
- //Echo port
- pOutBuf[ResponseLen] = i;
- ResponseLen++;
-
- //Power
- pOutBuf[ResponseLen] = pOut->Speed;
- ResponseLen++;
-
- //Mode
- pOutBuf[ResponseLen] = pOut->Mode;
- ResponseLen++;
-
- //RegMode
- pOutBuf[ResponseLen] = pOut->RegMode;
- ResponseLen++;
-
- //TurnRatio
- pOutBuf[ResponseLen] = pOut->SyncTurnParameter;
- ResponseLen++;
-
- //RunState
- pOutBuf[ResponseLen] = pOut->RunState;
- ResponseLen++;
-
- //TachoLimit ULONG
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pOut->TachoLimit)), 4);
- ResponseLen += 4;
-
- //TachoCount SLONG
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pOut->TachoCnt)), 4);
- ResponseLen += 4;
-
- //BlockTachoCount SLONG
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pOut->BlockTachoCount)), 4);
- ResponseLen += 4;
-
- //RotationCount SLONG
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pOut->RotationCount)), 4);
- ResponseLen += 4;
-
- NXT_ASSERT(ResponseLen == 23);
- }
- }
- break;
-
- case RC_GET_IN_VALS:
- {
- if (SendResponse == TRUE)
- {
- i = pInBuf[1];
-
- //Return error and all zeros if illegal port specification is made
- if (i >= NO_OF_INPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- memset(&(pOutBuf[ResponseLen]), 0, 13);
- ResponseLen += 13;
- break;
- }
-
- //Echo port
- pOutBuf[ResponseLen] = i;
- ResponseLen++;
-
- INPUTSTRUCT * pIn = &(pMapInput->Inputs[i]);
-
- //Set "Valid?" boolean
- if (pIn->InvalidData)
- pOutBuf[ResponseLen] = FALSE;
- else
- pOutBuf[ResponseLen] = TRUE;
-
- ResponseLen++;
-
- //Set "Calibrated?" boolean
- //!!! "Calibrated?" is a placeholder in the protocol. Always FALSE for now.
- pOutBuf[ResponseLen] = FALSE;
- ResponseLen++;
-
- pOutBuf[ResponseLen] = pIn->SensorType;
- ResponseLen++;
-
- pOutBuf[ResponseLen] = pIn->SensorMode;
- ResponseLen++;
-
- //Set Raw, Normalized, and Scaled values
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pIn->ADRaw)), 2);
- ResponseLen += 2;
-
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pIn->SensorRaw)), 2);
- ResponseLen += 2;
-
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pIn->SensorValue)), 2);
- ResponseLen += 2;
-
- //!!! Return normalized raw value in place of calibrated value for now -- see comment above
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)(&(pIn->SensorRaw)), 2);
- ResponseLen += 2;
-
- NXT_ASSERT(ResponseLen == 14);
- }
- }
- break;
-
- case RC_RESET_IN_VAL:
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_INPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //Clear SensorValue to zero. Leave Raw and Normalized as-is, since they never accumulate running values.
- pMapInput->Inputs[i].SensorValue = 0;
- }
- break;
-
- case RC_MESSAGE_WRITE:
- {
- QueueID = pInBuf[1];
- Count = pInBuf[2];
- pData = &(pInBuf[3]);
-
- //If Count is illegal or MsgData is not null-terminated,
- // we can't accept it as a valid string
- if (Count == 0 || Count > MAX_MESSAGE_SIZE || pData[Count - 1] != 0x00)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- RCStatus = cCmdMessageWrite(QueueID, pData, Count);
-
- //ERR_MEM here means we must compact the dataspace and retry message write
- if (RCStatus == ERR_MEM)
- {
- cCmdDSCompact();
- RCStatus = cCmdMessageWrite(QueueID, pData, Count);
- }
- }
- break;
-
- case RC_RESET_POSITION:
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_OUTPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //pInBuf[2] is a selector
- //FALSE: Position relative to start of last program
- //TRUE: Position relative to start of last motor control block
- pMapOutPut->Outputs[i].Flags |= (pInBuf[2] ? UPDATE_RESET_BLOCK_COUNT : UPDATE_RESET_ROTATION_COUNT);
- }
- break;
-
- case RC_GET_BATT_LVL:
- {
- if (SendResponse == TRUE)
- {
- //Return BatteryVoltage directly from IOMapUI, in mV
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)&(pMapUi->BatteryVoltage), 2);
- ResponseLen += 2;
- }
- }
- break;
-
- case RC_STOP_SOUND:
- {
- //Tell sound module to stop playback, no questions asked
- pMapSound->State = SOUND_STOP;
- }
- break;
-
- case RC_KEEP_ALIVE:
- {
- pMapUi->Flags |= UI_RESET_SLEEP_TIMER;
-
- if (SendResponse == TRUE)
- {
- //Convert to milliseconds to match external conventions
- i = (pMapUi->SleepTimeout * 60 * 1000);
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)&i, 4);
- ResponseLen += 4;
- }
- }
- break;
-
- case RC_LS_GET_STATUS:
- {
- if (SendResponse == TRUE)
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- RCStatus = cCmdLSCheckStatus(i);
-
- pOutBuf[ResponseLen] = cCmdLSCalcBytesReady(i);
- ResponseLen++;
- }
- }
- break;
-
- case RC_LS_WRITE:
- {
- i = pInBuf[1];
- Count = pInBuf[2];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- RCStatus = cCmdLSWrite(i, Count, &(pInBuf[4]), pInBuf[3]);
- }
- break;
-
- case RC_LS_READ:
- {
- if (SendResponse == TRUE)
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- //Get channel status and number of bytes available to read
- RCStatus = cCmdLSCheckStatus(i);
- Count = cCmdLSCalcBytesReady(i);
-
- pOutBuf[ResponseLen] = (UBYTE)Count;
- ResponseLen++;
-
- //If channel is ready and has data ready for us, put the data into outgoing buffer
- if (!IS_ERR(RCStatus) && Count > 0)
- {
- RCStatus = cCmdLSRead(i, (UBYTE)Count, &(pOutBuf[ResponseLen]));
- ResponseLen += Count;
- }
-
- //Pad remaining data bytes with zeroes
- Count = 16 - Count;
- memset(&(pOutBuf[ResponseLen]), 0, Count);
- ResponseLen += Count;
- }
- }
- break;
-
- case RC_GET_CURR_PROGRAM:
- {
- if (SendResponse == TRUE)
- {
- //If there's no active program, return error and empty name buffer
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- {
- RCStatus = ERR_NO_PROG;
- memset(&(pOutBuf[ResponseLen]), 0, FILENAME_LENGTH + 1);
- }
- //Else, copy out stashed program name
- else
- {
- strncpy((PSZ)(&(pOutBuf[ResponseLen])), (PSZ)(VarsCmd.ActiveProgName), FILENAME_LENGTH + 1);
- }
-
- //Regardless, we've copied out a filename's worth of bytes...
- ResponseLen += FILENAME_LENGTH + 1;
- }
- }
- break;
-
- case RC_MESSAGE_READ:
- {
- if (SendResponse == TRUE)
- {
- QueueID = pInBuf[1];
-
- //Fill in response with remote mailbox number so remote device knows where to store this message.
- pOutBuf[ResponseLen] = pInBuf[2];
- ResponseLen++;
-
- RCStatus = cCmdMessageGetSize(QueueID, &Count);
- pOutBuf[ResponseLen] = Count;
- ResponseLen++;
-
- if (!IS_ERR(RCStatus) && Count > 0)
- {
- pData = &(pOutBuf[ResponseLen]);
- RCStatus = cCmdMessageRead(QueueID, pData, Count, (pInBuf[3]));
- //If cCmdMessageRead encountered an error, there is no real data in the buffer, so clear it out (below)
- if (IS_ERR(RCStatus))
- Count = 0;
- else
- ResponseLen += Count;
- }
-
- //Pad remaining data bytes with zeroes
- Count = MAX_MESSAGE_SIZE - Count;
- memset(&(pOutBuf[ResponseLen]), 0, Count);
- ResponseLen += Count;
- }
- }
- break;
-
- // remote-only command to read from datalog buffer
- // pInBuf[1] = Remove? (bool)
- case RC_DATALOG_READ:
- {
- if (SendResponse == TRUE)
- {
- RCStatus = cCmdDatalogGetSize(&Count);
- pOutBuf[ResponseLen] = Count;
- ResponseLen++;
-
- if (!IS_ERR(RCStatus) && Count > 0)
- {
- pData = &(pOutBuf[ResponseLen]);
- RCStatus = cCmdDatalogRead(pData, Count, (pInBuf[1]));
- //If cCmdDatalogRead encountered an error, there is no real data in the buffer, so clear it out (below)
- if (IS_ERR(RCStatus))
- Count = 0;
- else
- ResponseLen += Count;
- }
-
- //Pad remaining data bytes with zeroes
- Count = MAX_DATALOG_SIZE - Count;
- memset(&(pOutBuf[ResponseLen]), 0, Count);
- ResponseLen += Count;
- }
- }
- break;
- case RC_DATALOG_SET_TIMES:
- {
- //SyncTime SLONG
- memcpy((PSZ)&IOMapCmd.SyncTime, (PSZ)&(pInBuf[1]), 4);
- IOMapCmd.SyncTick= dTimerReadNoPoll();
- }
- break;
-
- case RC_BT_GET_CONN_COUNT:
- if (SendResponse == TRUE) {
- pOutBuf[ResponseLen]= SIZE_OF_BT_CONNECT_TABLE;
- ResponseLen++;
- }
- break;
- case RC_BT_GET_CONN_NAME: // param in is index, param out is name
- if (SendResponse == TRUE) { // get index from inbuf
- i = pInBuf[1];
- if(i < SIZE_OF_BT_CONNECT_TABLE) { // unsigned, so guaranteed >= 0
- pOutBuf[ResponseLen] = cCmdBTGetDeviceType(pMapComm->BtConnectTable[i].ClassOfDevice);
- memcpy((PSZ)(&(pOutBuf[ResponseLen+1])), (PSZ)(pMapComm->BtConnectTable[i].Name), SIZE_OF_BT_NAME + 1);
- ResponseLen += SIZE_OF_BT_NAME + 2;
- }
- else {
- pOutBuf[ResponseLen] = 0;
- ResponseLen += SIZE_OF_BT_NAME + 2;
- }
- }
- break;
- case RC_BT_GET_CONTACT_COUNT:
- if (SendResponse == TRUE) {
- pOutBuf[ResponseLen]= SIZE_OF_BT_DEVICE_TABLE;
- ResponseLen++;
- }
- break;
- case RC_BT_GET_CONTACT_NAME:
- if (SendResponse == TRUE) { // get index from inbuf
- i = pInBuf[1];
- if(i < SIZE_OF_BT_DEVICE_TABLE && (pMapComm->BtDeviceTable[i].DeviceStatus & BT_DEVICE_KNOWN)) { // unsigned, so guaranteed >= 0
- (pOutBuf[ResponseLen])= cCmdBTGetDeviceType(pMapComm->BtDeviceTable[i].ClassOfDevice);
- memcpy((PSZ)(&(pOutBuf[ResponseLen+1])), (PSZ)(pMapComm->BtDeviceTable[i].Name), SIZE_OF_BT_NAME + 1);
- ResponseLen += SIZE_OF_BT_NAME + 2;
- }
- else
- {
- pOutBuf[ResponseLen] = 0;
- memset((PSZ)(&(pOutBuf[ResponseLen+1])), 0, SIZE_OF_BT_NAME + 1);
- ResponseLen += SIZE_OF_BT_NAME + 2;
- }
- }
- break;
- case RC_SET_PROPERTY: // label/value pairs
- i = pInBuf[1];
- switch(i) {
- case RC_PROP_BTONOFF: {
- UWORD retVal, status;
- if(pInBuf[2])
- status= pMapComm->pFunc(BTON, 0, 0, 0, NULL, &retVal);
- else
- status= pMapComm->pFunc(BTOFF, 0, 0, 0, NULL, &retVal);
-
- RCStatus= (status == SUCCESS) ? retVal : status;
- }
- break;
- case RC_PROP_SOUND_LEVEL: {
- UBYTE volume= pInBuf[2];
- if(volume > 4)
- volume= 4;
- pMapSound->Volume= volume; // apparently stored in two places
- pMapUi->Volume= volume;
- }
- break;
- case RC_PROP_SLEEP_TIMEOUT: { // ulong millisecs to sleep
- ULONG value;
- memcpy((PSZ)&value, (PSZ)&(pInBuf[2]), 4);
- pMapUi->SleepTimeout= value / 60000;
- }
- break;
- default:
- //Unknown property -- still inform client to not expect any response bytes
- NXT_BREAK;
- RCStatus = ERR_RC_UNKNOWN_CMD;
- break;
- }
- break;
- case RC_GET_PROPERTY: // label/value pairs
- if (SendResponse == TRUE) { // get index from inbuf
- i = pInBuf[1];
- switch(i) {
- case RC_PROP_BTONOFF:
- pOutBuf[ResponseLen]= pMapUi->BluetoothState != BT_STATE_OFF;
- ResponseLen++;
- break;
- case RC_PROP_SOUND_LEVEL: {
- pOutBuf[ResponseLen]= pMapSound->Volume;
- ResponseLen++;
- }
- break;
- case RC_PROP_SLEEP_TIMEOUT: {
- ULONG value= (pMapUi->SleepTimeout * 60 * 1000);
- memcpy((PSZ)&(pOutBuf[ResponseLen]), (PSZ)&value, 4);
- ResponseLen += 4;
- }
- break;
- default:
- //Unknown property -- still inform client to not expect any response bytes
- NXT_BREAK;
- RCStatus = ERR_RC_UNKNOWN_CMD;
- break;
- }
- }
- break;
- case RC_UPDATE_RESET_COUNT:
- {
- i = pInBuf[1];
-
- //Don't do anything if illegal port specification is made
- if (i >= NO_OF_OUTPUTS)
- {
- RCStatus = ERR_RC_ILLEGAL_VAL;
- break;
- }
-
- pMapOutPut->Outputs[i].Flags |= UPDATE_RESET_COUNT;
- }
- break;
- default:
- {
- //Unknown remote command -- still inform client to not expect any response bytes
- NXT_BREAK;
- RCStatus = ERR_RC_UNKNOWN_CMD;
- }
- break;
- };
- }
- //Handle reply telegrams
- else
- {
- switch(pInBuf[0])
- {
- case RC_MESSAGE_READ:
- {
- QueueID = pInBuf[2];
- Count = pInBuf[3];
- pData = &(pInBuf[4]);
-
- //This is a response to our request to read a message from a remote mailbox.
- //If telegram looks valid, write the resulting message into our local mailbox.
- //(If MsgData is not null-terminated, we can't accept it as a valid string.)
- if (!IS_ERR((SBYTE)(pInBuf[1]))
- && Count > 0
- && Count <= MAX_MESSAGE_SIZE
- && pData[Count - 1] == 0x00)
- {
- RCStatus = cCmdMessageWrite(QueueID, pData, Count);
-
- //ERR_MEM here means we must compact the dataspace
- if (RCStatus == ERR_MEM)
- {
- cCmdDSCompact();
- RCStatus = cCmdMessageWrite(QueueID, pData, Count);
- }
- }
-
- //If telegram doesn't check out, do nothing. No errors are ever returned for reply telegrams.
- }
- break;
-
- default:
- {
- //Unhandled reply telegram. Do nothing.
- //!!! Could/should stash unhandled/all replies somewhere so a syscall could read them
- }
- break;
- };
- }
-
- if (SendResponse == TRUE)
- {
- //Return response length (pointer checked above)
- *pLen = (UBYTE)ResponseLen;
- //Fill in status byte
- pOutBuf[0] = (UBYTE)(RCStatus);
- }
- else
- *pLen = 0;
-
- return (0);
-}
-
-
-//
-// Standard interface functions
-//
-
-void cCmdInit(void* pHeader)
-{
- ULONG i;
-
- pHeaders = pHeader;
-
- IOMapCmd.pRCHandler = &cCmdHandleRemoteCommands;
-
-#if defined(ARM_DEBUG)
- //Init run-time assert tracking variables
- VarsCmd.AssertFlag = FALSE;
- VarsCmd.AssertLine = 0;
-#endif
-
- //Initialize IO_PTRS_OUT
- for (i = 0; i < NO_OF_OUTPUTS; i++)
- {
- OUTPUT * pOut = &(pMapOutPut->Outputs[i]);
- IO_PTRS_OUT[IO_OUT_FLAGS + i * IO_OUT_FPP] = (void*)&(pOut->Flags);
- IO_PTRS_OUT[IO_OUT_MODE + i * IO_OUT_FPP] = (void*)&(pOut->Mode);
- IO_PTRS_OUT[IO_OUT_SPEED + i * IO_OUT_FPP] = (void*)&(pOut->Speed);
- IO_PTRS_OUT[IO_OUT_ACTUAL_SPEED + i * IO_OUT_FPP] = (void*)&(pOut->ActualSpeed);
- IO_PTRS_OUT[IO_OUT_TACH_COUNT + i * IO_OUT_FPP] = (void*)&(pOut->TachoCnt);
- IO_PTRS_OUT[IO_OUT_TACH_LIMIT + i * IO_OUT_FPP] = (void*)&(pOut->TachoLimit);
- IO_PTRS_OUT[IO_OUT_RUN_STATE + i * IO_OUT_FPP] = (void*)&(pOut->RunState);
- IO_PTRS_OUT[IO_OUT_TURN_RATIO + i * IO_OUT_FPP] = (void*)&(pOut->SyncTurnParameter);
- IO_PTRS_OUT[IO_OUT_REG_MODE + i * IO_OUT_FPP] = (void*)&(pOut->RegMode);
- IO_PTRS_OUT[IO_OUT_OVERLOAD + i * IO_OUT_FPP] = (void*)&(pOut->Overloaded);
- IO_PTRS_OUT[IO_OUT_REG_P_VAL + i * IO_OUT_FPP] = (void*)&(pOut->RegPParameter);
- IO_PTRS_OUT[IO_OUT_REG_I_VAL + i * IO_OUT_FPP] = (void*)&(pOut->RegIParameter);
- IO_PTRS_OUT[IO_OUT_REG_D_VAL + i * IO_OUT_FPP] = (void*)&(pOut->RegDParameter);
- IO_PTRS_OUT[IO_OUT_BLOCK_TACH_COUNT + i * IO_OUT_FPP] = (void*)&(pOut->BlockTachoCount);
- IO_PTRS_OUT[IO_OUT_ROTATION_COUNT + i * IO_OUT_FPP] = (void*)&(pOut->RotationCount);
- IO_PTRS_OUT[IO_OUT_OPTIONS + i * IO_OUT_FPP] = (void*)&(pOut->Options);
- IO_PTRS_OUT[IO_OUT_MAX_SPEED + i * IO_OUT_FPP] = (void*)&(pOut->MaxSpeed);
- IO_PTRS_OUT[IO_OUT_MAX_ACCELERATION + i * IO_OUT_FPP] = (void*)&(pOut->MaxAcceleration);
- }
-
- //Initialize IO_PTRS_IN
- for (i = 0; i < NO_OF_INPUTS; i++)
- {
- INPUTSTRUCT * pIn = &(pMapInput->Inputs[i]);
- IO_PTRS_IN[IO_IN_TYPE + i * IO_IN_FPP] = (void*)&(pIn->SensorType);
- IO_PTRS_IN[IO_IN_MODE + i * IO_IN_FPP] = (void*)&(pIn->SensorMode);
- IO_PTRS_IN[IO_IN_ADRAW + i * IO_IN_FPP] = (void*)&(pIn->ADRaw);
- IO_PTRS_IN[IO_IN_NORMRAW + i * IO_IN_FPP] = (void*)&(pIn->SensorRaw);
- IO_PTRS_IN[IO_IN_SCALEDVAL + i * IO_IN_FPP] = (void*)&(pIn->SensorValue);
- IO_PTRS_IN[IO_IN_INVALID_DATA + i * IO_IN_FPP] = (void*)&(pIn->InvalidData);
- }
-
- //Clear memory pool and initialize VarsCmd (cCmdDeactivateProgram effectively re-inits VarsCmd)
- cCmdInitPool();
- cCmdDeactivateProgram();
-
- //Global state variables for BlueTooth communication.
- VarsCmd.CommStat = (SWORD)SUCCESS;
- VarsCmd.CommStatReset = (SWORD)BTBUSY;
- VarsCmd.CommCurrConnection = 1;
-
- //Global flags for various reset and bookkeeping scenarios
- VarsCmd.DirtyComm = FALSE;
- VarsCmd.DirtyDisplay = FALSE;
-
- VarsCmd.VMState = VM_IDLE;
-
-#if defined (ARM_NXT)
- //Make sure Pool is long-aligned
- NXT_ASSERT(!((ULONG)(POOL_START) % SIZE_SLONG));
-#endif
-
- IOMapCmd.ProgStatus = PROG_IDLE;
- IOMapCmd.ActivateFlag = FALSE;
- IOMapCmd.Awake = TRUE;
-
- //Default offsets explicitly chosen to cause an error if used with IOMAPREAD/IOMAPWRITE
- //Real values will be set when programs run and/or the DS is re-arranged.
- IOMapCmd.OffsetDVA = 0xFFFF;
- IOMapCmd.OffsetDS = 0xFFFF;
-
- //Initialize format string and clear out FileName string
- strncpy((PSZ)(IOMapCmd.FormatString), VM_FORMAT_STRING, VM_FORMAT_STRING_SIZE);
- memset(IOMapCmd.FileName, 0, sizeof(IOMapCmd.FileName));
-
- dTimerInit();
- IOMapCmd.Tick = dTimerRead();
- IOMapCmd.SyncTime= 0;
- IOMapCmd.SyncTick= 0;
-
- return;
-}
-
-
-void cCmdCtrl(void)
-{
- NXT_STATUS Status = NO_ERR;
-
- switch (VarsCmd.VMState)
- {
- case VM_RUN_FREE:
- case VM_RUN_SINGLE:
- {
- #if VMProfilingCode
- ULONG EnterTime= dTimerReadHiRes(), FinishTime;
- CmdCtrlCalls ++;
-#endif
- ULONG Continue;
-
-#if VM_BENCHMARK
- //IOMapCmd.Tick currently holds the tick from the end of last cCmdCtrl call.
- //If we don't come back here before dTimerRead() increments, the m_sched loop has taken *at least* 1 ms.
- if (IOMapCmd.Tick != dTimerRead())
- {
- VarsCmd.OverTimeCount++;
- //Record maximum magnitude of schedule loop overage, in millisecs
- if (dTimerRead() - IOMapCmd.Tick > VarsCmd.MaxOverTimeLength)
- VarsCmd.MaxOverTimeLength = dTimerRead() - IOMapCmd.Tick;
- }
- VarsCmd.CmdCtrlCount++;
-#endif
- //Abort current program if cancel button is pressed
- if (IOMapCmd.DeactivateFlag == TRUE || pMapButton->State[BTN1] & PRESSED_EV)
- {
- IOMapCmd.DeactivateFlag = FALSE;
-
- //Clear pressed event so it doesn't get double-counted by UI
- pMapButton->State[BTN1] &= ~PRESSED_EV;
-
- //Go to VM_RESET1 state and report abort
- VarsCmd.VMState = VM_RESET1;
- IOMapCmd.ProgStatus = PROG_ABORT;
- break;
- }
-
- //Assert that we have an active program
- NXT_ASSERT(VarsCmd.ActiveProgHandle != NOT_A_HANDLE);
-
- //Handle any resting clumps that are ready to awaken
- cCmdCheckRestQ(IOMapCmd.Tick); // not using result, yet
- //Execute from at least one clump
- do
- {
- //Execute instructions from a clump up to INSTR_MAX, to end of millisec,
- //Finishing/suspending a clump, BREAKOUT_REQ, or any errors will cause a return
-#if VMProfilingCode
- ULONG ClumpEnterTime= dTimerReadHiRes();
- CLUMP_ID clump= VarsCmd.RunQ.Head;
-#endif
- Status = cCmdInterpFromClump();
-#if VMProfilingCode
- CmdCtrlClumpTime[clump] += dTimerReadHiRes() - ClumpEnterTime;
-#endif
-
- //If RunQ and RestQ are empty, program is done, or wacko
- if (!cCmdIsClumpIDSane(VarsCmd.RunQ.Head)) {
- Continue = FALSE;
- if(!cCmdIsClumpIDSane(VarsCmd.RestQ.Head)) {
- VarsCmd.VMState = VM_RESET1;
- IOMapCmd.ProgStatus = PROG_OK;
- }
- }
- else if (Status == CLUMP_SUSPEND || Status == CLUMP_DONE)
- Continue = TRUE; // queue isn't empty, didn't timeout
- //Only rotate RunQ on a "normal" finish, i.e. no error, clump end, or breakout request
- else if (Status == ROTATE_QUEUE) { // done and suspend do their own
- cCmdRotateQ();
- Continue= TRUE;
- }
- else if (Status == TIMES_UP) {
- cCmdRotateQ();
- Continue = FALSE;
- }
- else if (IS_ERR(Status)) // mem error is handled in InterpFromClump if possible
- {
- Continue = FALSE;
- VarsCmd.VMState = VM_RESET1;
- IOMapCmd.ProgStatus = PROG_ERROR;
- }
- else if (Status == STOP_REQ)
- {
- Continue = FALSE;
- VarsCmd.VMState = VM_RESET1;
- IOMapCmd.ProgStatus = PROG_OK;
- }
- else if (Status == BREAKOUT_REQ)
- {
- Continue = FALSE;
- }
- } while (Continue == TRUE);
-#if VMProfilingCode
- FinishTime= dTimerReadHiRes();
- if(NotFirstCall)
- OverheadTime += EnterTime - LeaveTime;
- else
- NotFirstCall= 1;
- CmdCtrlTime += FinishTime - EnterTime;
- LeaveTime= FinishTime;
-#endif
- // May busy wait to postpone to 1ms schedule
- while (IOMapCmd.Tick == dTimerRead());
- }
- break;
- case VM_IDLE:
- {
- //If there's a new program to activate...
- if (IOMapCmd.ActivateFlag == TRUE)
- {
- //Clear flag so we only activate once per new file
- IOMapCmd.ActivateFlag = FALSE;
-
- Status = cCmdActivateProgram(IOMapCmd.FileName);
-
- //If we hit an activation error:
- //1. Set PROG_ERROR status
- //2. Proceed to VM_RESET1 (some unneeded work, yes, but preserves contract with UI
- if (IS_ERR(Status))
- {
- IOMapCmd.ProgStatus = PROG_ERROR;
- VarsCmd.VMState = VM_RESET1;
- }
- //Else start running program
- else
- {
- VarsCmd.VMState = VM_RUN_FREE;
- IOMapCmd.ProgStatus = PROG_RUNNING;
- VarsCmd.StartTick = IOMapCmd.Tick;
- if(VarsCmd.VMState == VM_RUN_FREE)
- gInstrsToExecute = 20;
- else
- gInstrsToExecute= 1;
-
-#if VM_BENCHMARK
- //Re-init benchmark
- VarsCmd.InstrCount = 0;
- VarsCmd.Average = 0;
- VarsCmd.OverTimeCount = 0;
- VarsCmd.MaxOverTimeLength = 0;
- VarsCmd.CmdCtrlCount = 0;
- VarsCmd.CompactionCount = 0;
- VarsCmd.LastCompactionTick = 0;
- VarsCmd.MaxCompactionTime = 0;
- memset(VarsCmd.OpcodeBenchmarks, 0, sizeof(VarsCmd.OpcodeBenchmarks));
- memset(VarsCmd.SyscallBenchmarks, 0, sizeof(VarsCmd.SyscallBenchmarks));
-#endif
- //Reset devices to a known state before we begin running
- cCmdResetDevices();
-
- pMapUi->Flags |= (UI_DISABLE_LEFT_RIGHT_ENTER | UI_DISABLE_EXIT);
- }
- }
- while (IOMapCmd.Tick == dTimerRead()); // delay until scheduled time
- }
- break;
-
- //Initialize VM internal state data and devices which must respond immediately to program ending
- case VM_RESET1:
- {
- //If we aborted a program, reset devices (specifically, motors) immediately
- //Otherwise, wait for UI to put us into PROG_RESET (gives motors a chance to brake before setting to coast)
- //!!! This means cCmdResetDevices will get called twice on abort. Should not be a big deal.
- if (IOMapCmd.ProgStatus == PROG_ABORT)
- cCmdResetDevices();
-
- //Reenable UI access to buttons
- pMapUi->Flags &= ~(UI_DISABLE_LEFT_RIGHT_ENTER | UI_DISABLE_EXIT);
-
-#if VM_BENCHMARK
- if (IOMapCmd.Tick != VarsCmd.StartTick)
- VarsCmd.Average = VarsCmd.InstrCount / (IOMapCmd.Tick - VarsCmd.StartTick);
- else
- //It appears that we finished in 0 milliseconds. Very unlikely on ARM, so set a flag value.
- VarsCmd.Average = 0xFFFFFFFF;
-
- cCmdWriteBenchmarkFile();
-#endif
-
- //Re-initialize program state data (contents of memory pool preserved)
- //!!! Skip this step in simulator builds so helper access methods still work
-#ifndef SIM_NXT
- cCmdDeactivateProgram();
-#endif //SIM_NXT
-
- //If this program has taken over the display, reset it for the UI
- cCmdRestoreDefaultScreen();
-
- //Stop any currently playing sound and re-init volume according to UI prefs
- pMapSound->State = SOUND_STOP;
- pMapSound->Volume = pMapUi->Volume;
-
- //Artificially set CommStatReset to BTBUSY to force at least one SETCMDMODE call (see VM_RESET2 case)
- VarsCmd.CommStatReset = (SWORD)BTBUSY;
-
- VarsCmd.VMState = VM_RESET2;
- while (IOMapCmd.Tick == dTimerRead()); // delay until scheduled time
- }
- break;
-
- case VM_RESET2:
- {
- //Reset BlueCore into "command mode" (close any open streams)
- //Since SETCMDMODE subject to BTBUSY, we may need to make multiple calls
- //Any CommStatReset value other than BTBUSY means our request was accepted
- //Assumptions:
- //Process should never take longer than UI timeout (see below), but if it does,
- // we could be left with the stream open to an NXT peer and block out the PC.
- //Also assuming that once SETCMDMODE request is accepted, it never fails.
- if (VarsCmd.CommStatReset == (SWORD)BTBUSY && VarsCmd.DirtyComm == TRUE)
- pMapComm->pFunc(SETCMDMODE, 0, 0, 0, NULL, (UWORD*)&(VarsCmd.CommStatReset));
-
- //If UI is done displaying ending program status, move on.
- if (IOMapCmd.ProgStatus == PROG_RESET)
- {
- //Reset devices whenever a program ends for any reason
- cCmdResetDevices();
-
- VarsCmd.DirtyComm = FALSE;
-
- //Go to VM_IDLE state
- VarsCmd.VMState = VM_IDLE;
- IOMapCmd.ProgStatus = PROG_IDLE;
- }
- while (IOMapCmd.Tick == dTimerRead()); // delay until scheduled time
- }
- break;
- }//END state machine switch
-
- //Set tick to new value for next time 'round
- IOMapCmd.Tick = dTimerReadNoPoll();
-
- return;
-}
-
-
-void cCmdExit(void)
-{
- dTimerExit();
-
- return;
-}
-
-
-NXT_STATUS cCmdReadFileHeader(UBYTE* pData, ULONG DataSize,
- PROG_FILE_OFFSETS* pFileOffsets)
-{
- ULONG i;
- UBYTE * pCursor;
- UWORD CurrOffset = 0;
- UBYTE DepCount;
- UWORD DopeVectorOffset;
- UWORD FileClumpCount;
- UBYTE FileMajor, FileMinor,
- CompatibleMinor, CompatibleMajor,
- CurrentMajor;
-
- NXT_ASSERT(pData != NULL);
-
- if (strncmp((PSZ)pData, "NXTBINARY", VM_FORMAT_STRING_SIZE) == 0)
- {
- ULONG NativeOffset;
- pCursor = (pData + 12);
- NativeOffset = (ULONG)(*pCursor);
- void (*native)(ULONG, ULONG) = (void (*)())(pData + NativeOffset);
- (*native)((ULONG)pData, DataSize);
- NXT_BREAK;
- return (ERR_VER);
- }
- //Assign pCursor to point to version word inside file header
- pCursor = (pData + VM_FORMAT_STRING_SIZE - 2);
-
- //Decode version numbers into comparable bytes
- FileMajor = *pCursor;
- FileMinor = *(pCursor + 1);
- CompatibleMajor = (UBYTE)(VM_OLDEST_COMPATIBLE_VERSION >> 8);
- CompatibleMinor = (UBYTE)(VM_OLDEST_COMPATIBLE_VERSION);
- CurrentMajor = (UBYTE)(FIRMWAREVERSION >> 8);
- //CurrentMinor = (UBYTE)(FIRMWAREVERSION);
-
- //Return ERR_VER if file lacks proper format string or version number
- //!!! Only checking major version recommended for future development
- if (strncmp((PSZ)pData, VM_FORMAT_STRING, VM_FORMAT_STRING_SIZE)
- || FileMajor < CompatibleMajor || FileMinor < CompatibleMinor
- || FileMajor > CurrentMajor)
- {
- NXT_BREAK;
- return (ERR_VER);
- }
-
- //Advance CurrOffset past header information
- CurrOffset += VM_FORMAT_STRING_SIZE;
-
- //
- //Initialize bookkeeping variables
- //
- VarsCmd.DataspaceCount = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- VarsCmd.DataspaceSize = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- VarsCmd.DSStaticSize = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- pFileOffsets->DSDefaultsSize = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- pFileOffsets->DynamicDefaults = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- pFileOffsets->DynamicDefaultsSize = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- VarsCmd.MemMgr.Head = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- VarsCmd.MemMgr.Tail = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- DopeVectorOffset = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- //!!! Odd code here to deal with type mismatch between file format and CLUMP_ID typedef.
- //Neither is trivial to change, so it's best to just check the data for consistency here.
- FileClumpCount = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- //Must have at least one clump and count can't exceed the NOT_A_CLUMP sentinel
- if (FileClumpCount == 0 || FileClumpCount >= NOT_A_CLUMP)
- return (ERR_FILE);
- else
- VarsCmd.AllClumpsCount = (CLUMP_ID)FileClumpCount;
-
- VarsCmd.CodespaceCount = *((UWORD*)(pData + CurrOffset));
- CurrOffset += 2;
-
- //Can't have a valid program with no code
- if (VarsCmd.CodespaceCount == 0)
- return (ERR_FILE);
-
- //
- // Now, calculate offsets for each data segment in the file
- //
-
- CurrOffset += CurrOffset % 2;
- pFileOffsets->DSTOC = CurrOffset;
- CurrOffset += VarsCmd.DataspaceCount * sizeof(DS_TOC_ENTRY);
-
- CurrOffset += CurrOffset % 2;
- pFileOffsets->DSDefaults = CurrOffset;
- CurrOffset += pFileOffsets->DSDefaultsSize;
-
- //ClumpRecs must be aligned on even boundaries
- CurrOffset += CurrOffset % 2;
- pFileOffsets->Clumps = CurrOffset;
-
- //Set cursor to start of clump records
- pCursor = pData + CurrOffset;
-
- //Set CurrOffset to start of dependent lists
- CurrOffset += VarsCmd.AllClumpsCount * VM_FILE_CLUMP_REC_SIZE;
-
- //Read dependent count from each clump record, advancing CurrOffset accordingly
- for (i = 0; i < VarsCmd.AllClumpsCount; i++)
- {
- DepCount = *(pCursor + 1);
- CurrOffset += DepCount;
- pCursor += VM_FILE_CLUMP_REC_SIZE;
- }
-
- //Codespace must be aligned on even boundary
- CurrOffset += CurrOffset % 2;
- pFileOffsets->Codespace = CurrOffset;
-
- //No need to read through codespace, but make sure CurrOffset ended up sane
- //If not, something went wrong reading the header information
- if (CurrOffset != (DataSize - VarsCmd.CodespaceCount * 2))
- {
- NXT_BREAK;
- return (ERR_FILE);
- }
-
- //
- // Finally, update VarsCmd fields
- //
-
- VarsCmd.RunQ.Head = NOT_A_CLUMP;
- VarsCmd.RunQ.Tail = NOT_A_CLUMP;
- VarsCmd.RestQ.Head = NOT_A_CLUMP;
- VarsCmd.RestQ.Tail = NOT_A_CLUMP;
-
- //Reset codespace pointer
- VarsCmd.pCodespace = (CODE_WORD*)(pData + pFileOffsets->Codespace);
-
- //...placing clump records first...
- VarsCmd.pAllClumps = (CLUMP_REC*)(VarsCmd.Pool + VarsCmd.PoolSize);
- VarsCmd.PoolSize += VarsCmd.AllClumpsCount * sizeof(CLUMP_REC);
-
- //...then DSTOC...
- VarsCmd.pDataspaceTOC = (DS_TOC_ENTRY*)(pData + pFileOffsets->DSTOC);
-
- //...then the dataspace itself
- ALIGN_TO_MOD(VarsCmd.PoolSize, POOL_ALIGN);
- VarsCmd.pDataspace = (VarsCmd.Pool + VarsCmd.PoolSize);
- IOMapCmd.OffsetDS = (UWORD)((ULONG)(VarsCmd.pDataspace) - (ULONG)&(IOMapCmd));
- VarsCmd.PoolSize += VarsCmd.DataspaceSize;
-
- //init rest of MemMgr
- VarsCmd.MemMgr.pDopeVectorArray = (DOPE_VECTOR *)(VarsCmd.pDataspace + DopeVectorOffset);
- IOMapCmd.OffsetDVA = (UWORD)((ULONG)(VarsCmd.MemMgr.pDopeVectorArray) - (ULONG)&(IOMapCmd));
- VarsCmd.MemMgr.FreeHead = NOT_A_DS_ID;
-
-
- if (VarsCmd.PoolSize > POOL_MAX_SIZE)
- {
- NXT_BREAK;
- return (ERR_FILE);
- }
-
- return (NO_ERR);
-}
-
-
-//!!! Recursive function
-NXT_STATUS cCmdInflateDSDefaults(UBYTE* pDSDefaults, UWORD *pDefaultsOffset, DS_ELEMENT_ID DSElementID)
-{
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode;
- UWORD i, Count;
- UBYTE *pVal;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
-
- TypeCode = cCmdDSType(DSElementID);
-
- if (TypeCode > TC_LAST_VALID)
- return ERR_INSTR;
- else if (TypeCode == TC_CLUSTER)
- {
- Count = cCmdClusterCount(DSElementID);
- //Advance DSElementID to sub-type
- DSElementID = INC_ID(DSElementID);
- //Loop through sub-types, inflate recursively
- for (i = 0; i < Count; i++)
- {
- Status = cCmdInflateDSDefaults(pDSDefaults, pDefaultsOffset, DSElementID);
- if (IS_ERR(Status))
- return Status;
- DSElementID = cCmdNextDSElement(DSElementID);
- }
- }
- else
- {
- if (TypeCode == TC_ARRAY)
- {
- //Resolve pointer to DVIndex
- pVal = VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[DSElementID].DSOffset;
- }
- else
- {
- pVal = cCmdResolveDataArg(DSElementID, 0, NULL);
- }
-
- //Check if the element has the "default default"
- if (VarsCmd.pDataspaceTOC[DSElementID].Flags & DS_DEFAULT_DEFAULT)
- {
- //Fill element with the "default default" of zero
- memset(pVal, 0, cCmdSizeOf(TypeCode));
- }
- else
- {
- //Get default from stream
- memmove(pVal, pDSDefaults + *pDefaultsOffset, cCmdSizeOf(TypeCode));
- *pDefaultsOffset += cCmdSizeOf(TypeCode);
- }
- }
-
- //!!! Currently will always return NO_ERR
- return Status;
-}
-
-void cCmdRefreshActiveClump(CLUMP_ID CurrID)
-{
- CLUMP_REC * clumpRecPtr= &(VarsCmd.pAllClumps[CurrID]);
-
- if(clumpRecPtr->clumpScalarDispatchHints & scalarBinopDispatchMask)
- InterpFuncs[8]= cCmdInterpScalarBinop;
- else
- InterpFuncs[8]= cCmdInterpBinop;
- if(clumpRecPtr->clumpScalarDispatchHints & scalarUnop2DispatchMask)
- InterpFuncs[6]= cCmdInterpScalarUnop2;
- else
- InterpFuncs[6]= cCmdInterpUnop2;
-}
-
-NXT_STATUS cCmdActivateProgram(UBYTE * pFileName)
-{
- UWORD i, j;
- UBYTE * pCursor;
-
- NXT_STATUS Status = NO_ERR;
- PROG_FILE_OFFSETS FileOffsets;
-
- LOADER_STATUS LStatus;
- ULONG DataSize;
- UBYTE * pData;
- ULONG pDataHolder;
- UWORD DefaultsOffset;
-
- LStatus = pMapLoader->pFunc(OPENREADLINEAR, pFileName, (UBYTE*)(&pDataHolder), &DataSize);
- pData = (UBYTE*)(pDataHolder);
-
- //If Loader returned error or bad file pointer, bail out
- if (LOADER_ERR(LStatus) != SUCCESS || pData == NULL || DataSize == 0)
- return (ERR_FILE);
-
- //Deactivate current program and re-initialize memory pool
- cCmdDeactivateProgram();
- cCmdInitPool();
-
- //Stash this program's handle since we hold it open while running
- VarsCmd.ActiveProgHandle = LOADER_HANDLE(LStatus);
-
- //Stash this program's name for easy reference later
- strncpy((PSZ)(VarsCmd.ActiveProgName), (PSZ)(pFileName), FILENAME_LENGTH + 1);
-
- //Consume activation record data stream.
- //See TargettingVIs/NXT.PackAR.vi for data stream packing details
-
- //Read header portion of the file, calculating offsets and initializing VarsCmd
- Status = cCmdReadFileHeader(pData, DataSize, &FileOffsets);
- if (IS_ERR(Status))
- return Status;
-
- //Do some spot checks to make sure bad file contents didn't leave us with obviously insane VarsCmd contents
- //!!! Should add alignment checks on these pointers to avoid data abort exceptions later
- if (((UBYTE*)(VarsCmd.pCodespace) < pData)
- || ((UBYTE*)(VarsCmd.pCodespace) >= (pData + DataSize))
- || ((UBYTE*)(VarsCmd.pAllClumps) < POOL_START)
- || ((UBYTE*)(VarsCmd.pAllClumps) >= POOL_SENTINEL)
- || ((UBYTE*)(VarsCmd.pDataspace) < POOL_START)
- || ((UBYTE*)(VarsCmd.pDataspace) >= POOL_SENTINEL)
- || (VarsCmd.DataspaceSize == 0) )
- {
- NXT_BREAK;
- return ERR_FILE;
- }
-
- //Initialize CLUMP_RECs as contiguous list in RAM
- pCursor = (pData + FileOffsets.Clumps);
- for (i = 0; i < VarsCmd.AllClumpsCount; i++)
- {
- CLUMP_REC *clumpPtr= &VarsCmd.pAllClumps[i];
- clumpPtr->InitFireCount = *(UBYTE*)(pCursor + i * VM_FILE_CLUMP_REC_SIZE);
- clumpPtr->DependentCount = *(UBYTE*)(pCursor + (i * VM_FILE_CLUMP_REC_SIZE) + 1);
- clumpPtr->CodeStart = *(UWORD*)(pCursor + (i * VM_FILE_CLUMP_REC_SIZE) + 2) + VarsCmd.pCodespace;
-
- //Initialize remaining CLUMP_REC fields
- clumpPtr->PC = clumpPtr->CodeStart;
- clumpPtr->Link = NOT_A_CLUMP;
-
- //Activate any clumps with CurrFireCount of 0
- clumpPtr->CurrFireCount = clumpPtr->InitFireCount;
- if (clumpPtr->CurrFireCount == 0)
- cCmdEnQClump(&(VarsCmd.RunQ), (CLUMP_ID)i);
- }
-
- //Patch up dependents in separate pass (reuse of pCursor)
- pCursor += VarsCmd.AllClumpsCount * VM_FILE_CLUMP_REC_SIZE;
- for (i = 0; i < VarsCmd.AllClumpsCount; i++)
- {
- CLUMP_REC *clumpPtr= &VarsCmd.pAllClumps[i];
- if (clumpPtr->DependentCount > 0)
- {
- clumpPtr->pDependents = (CLUMP_ID*)(pCursor);
-
- pCursor += (clumpPtr->DependentCount * sizeof(CLUMP_ID));
- }
- else
- clumpPtr->pDependents = NULL;
-
- //Patch up CodeEnd value based on CodeStart of next clump or last overall codeword
- if (i < (VarsCmd.AllClumpsCount - 1))
- clumpPtr->CodeEnd = (clumpPtr+1)->CodeStart - 1;
- else
- clumpPtr->CodeEnd = VarsCmd.CodespaceCount - 1 + VarsCmd.pCodespace;
-
- //Test for empty/insane clump code definitions
- NXT_ASSERT(clumpPtr->CodeStart < clumpPtr->CodeEnd);
- }
-
- // Check if the instructions within a clump are polymorphic and mark which table to dispatch from
- for (i = 0; i < VarsCmd.AllClumpsCount; i++)
- { // Check type on Boolean, math, ArrInit and ArrIndex, ingore GetSet I/O as these are always scalar
- // do we need to check for DataArg encodings to I/O map??? GM
- // Get Opcode and size of each instr, if ^^, check Arg types for Array or Cluster
- CLUMP_REC *clumpPtr= &VarsCmd.pAllClumps[i];
- CODE_WORD *pInstr = clumpPtr->CodeStart, *lastPC = clumpPtr->CodeEnd;
- ULONG InstrSize, opCode, shortOp, isT2Agg, isT3Agg, isScalarBinop= TRUE, isScalarUnop2= TRUE;
- TYPE_CODE t1, t2, t3;
- ULONG instrWord;
- do
- {
- instrWord= *(UWORD*)pInstr;
- opCode= OP_CODE(pInstr);
- shortOp= (instrWord>>8) & 0x0F;
- InstrSize = INSTR_SIZE(instrWord);
- if (InstrSize == VAR_INSTR_SIZE)
- InstrSize = ((UWORD*)pInstr)[1];
- if(shortOp <= 7) // no shorts are binOps
- {
- t2= cCmdDSType(pInstr[2]);
- isT2Agg= IS_AGGREGATE_TYPE(t2);
- if(InstrSize == 8) {
- t3= cCmdDSType(pInstr[3]);
- isT3Agg= IS_AGGREGATE_TYPE(t3);
- if(isT2Agg || isT3Agg) {
- if(opCode == OP_CMP) {
- UBYTE isString2, isString3;
- isString2= (t2 == TC_ARRAY) && cCmdDSType(INC_ID(pInstr[2])) == TC_UBYTE;
- isString3= (t3 == TC_ARRAY) && cCmdDSType(INC_ID(pInstr[3])) == TC_UBYTE;
- t1= cCmdDSType(pInstr[1]);
- if((!isString2 || !isString3) || t1 == TC_ARRAY) // allow strings to go scalar, don't let through element compares of bytes or Bools
- isScalarBinop= FALSE;
- }
- else if(opCode == OP_BRCMP)
- isScalarBinop= FALSE;
- }
- }
- else if(InstrSize == 6 && isT2Agg && (opCode == OP_NOT || opCode == OP_BRTST))
- isScalarUnop2= FALSE;
- }
- pInstr += InstrSize/2;
- } while((isScalarBinop || isScalarUnop2) && pInstr < lastPC);
- if(isScalarBinop)
- clumpPtr->clumpScalarDispatchHints |= scalarBinopDispatchMask;
- else
- clumpPtr->clumpScalarDispatchHints &= ~scalarBinopDispatchMask;
-
- if(isScalarUnop2)
- clumpPtr->clumpScalarDispatchHints |= scalarUnop2DispatchMask;
- else
- clumpPtr->clumpScalarDispatchHints &= ~scalarUnop2DispatchMask;
-
- }
- //Programs with no active clumps constitutes an activation error
- if (VarsCmd.RunQ.Head == NOT_A_CLUMP)
- return (ERR_FILE);
- else
- {
- // now that we know which clumps are scalar and poly, refresh dispatch table to match head
- cCmdRefreshActiveClump(VarsCmd.RunQ.Head);
-
- }
-
- //Initialize dataspace with default values from file
- //!!! This would be a good place to enforce check against potentially
- // unsafe nested types (deeply nested types mean deep recursive calls)
- DefaultsOffset = 0;
- for (i = 0; i != NOT_A_DS_ID; i = cCmdNextDSElement(i))
- {
-
- Status = cCmdInflateDSDefaults(pData + FileOffsets.DSDefaults, &DefaultsOffset, i);
- if (IS_ERR(Status))
- return Status;
- }
-
- if ((DefaultsOffset != FileOffsets.DynamicDefaults)
- || (DefaultsOffset + FileOffsets.DynamicDefaultsSize != FileOffsets.DSDefaultsSize))
- {
- NXT_BREAK;
- return (ERR_FILE);
- }
-
- //Copy Dynamic defaults from file
- memmove(VarsCmd.pDataspace + VarsCmd.DSStaticSize, pData + FileOffsets.DSDefaults + FileOffsets.DynamicDefaults, FileOffsets.DynamicDefaultsSize);
-
- // fix memmgr links. old files contain unused backPtrs, we now use these to store backLink
- DV_INDEX prev= NOT_A_DS_ID;
- for (i = VarsCmd.MemMgr.Head; i != NOT_A_DS_ID; i = DV_ARRAY[i].Link) {
- DV_ARRAY[i].BackLink= prev;
- prev= i;
- }
-
- //Verify the MemMgr ended up where we said it would
- if ((UBYTE *)VarsCmd.MemMgr.pDopeVectorArray != VarsCmd.pDataspace + DV_ARRAY[0].Offset)
- {
- NXT_BREAK;
- return (ERR_FILE);
- }
-
- //Initialize message queues
- for (i = 0; i < MESSAGE_QUEUE_COUNT; i++)
- {
- VarsCmd.MessageQueues[i].ReadIndex = 0;
- VarsCmd.MessageQueues[i].WriteIndex = 0;
-
- for (j = 0; j < MESSAGES_PER_QUEUE; j++)
- {
- VarsCmd.MessageQueues[i].Messages[j] = NOT_A_DS_ID;
- }
- }
-
- //Initialize datalog queue
- VarsCmd.DatalogBuffer.ReadIndex = 0;
- VarsCmd.DatalogBuffer.WriteIndex = 0;
- for (j = 0; j < DATALOG_QUEUE_DEPTH; j++)
- {
- VarsCmd.DatalogBuffer.Datalogs[j] = NOT_A_DS_ID;
- }
-
- // now that we've loaded program, prime memmgr dopevectors based upon number of handles in ds.
- ULONG numHandles= DV_ARRAY[0].Count/2;
- if(numHandles > 200)
- numHandles= 200;
- Status = cCmdGrowDopeVectorArray(numHandles);
-
- if (cCmdVerifyMemMgr() != TRUE)
- return (ERR_FILE);
-
- gUsageSemData= 0;
- gRequestSemData= 0;
- // preload all calibration coefficients into mem
- cCmdLoadCalibrationFiles();
- return (Status);
-}
-
-
-void cCmdDeactivateProgram()
-{
- UBYTE i, tmp;
-
- //Wipe away all references into the pool and clear all run-time data
- VarsCmd.pCodespace = NULL;
- VarsCmd.CodespaceCount = 0;
-
- VarsCmd.pAllClumps = NULL;
- VarsCmd.AllClumpsCount = 0;
-
- VarsCmd.DataspaceCount = 0;
- VarsCmd.pDataspaceTOC = NULL;
- VarsCmd.pDataspace = NULL;
- VarsCmd.DataspaceSize = 0;
- VarsCmd.DSStaticSize = 0;
-
- VarsCmd.MemMgr.Head = NOT_A_DS_ID;
- VarsCmd.MemMgr.Tail = NOT_A_DS_ID;
- VarsCmd.MemMgr.FreeHead = NOT_A_DS_ID;
- VarsCmd.MemMgr.pDopeVectorArray = NULL;
-
- VarsCmd.RunQ.Head = NOT_A_CLUMP;
- VarsCmd.RunQ.Tail = NOT_A_CLUMP;
-
- if (VarsCmd.ActiveProgHandle != NOT_A_HANDLE)
- {
- //Close handle that we've kept open for this program
- pMapLoader->pFunc(CLOSE, &(VarsCmd.ActiveProgHandle), NULL, NULL);
- VarsCmd.ActiveProgHandle = NOT_A_HANDLE;
-
- //Clear internal stashed name
- memset(VarsCmd.ActiveProgName, 0, FILENAME_LENGTH + 1);
- }
-
- //Close any files we had opened programatically
- for (i = 0; i < MAX_HANDLES; i++)
- {
- //Copy i to tmp, because we pass a pointer to it to pFunc
- tmp = i;
- //Close file
- if (*(VarsCmd.FileHandleTable[i]) != 0)
- pMapLoader->pFunc(CROPDATAFILE, &tmp, NULL, NULL);
- }
-
- //Clear FileHandleTable
- memset(VarsCmd.FileHandleTable, 0, sizeof(VarsCmd.FileHandleTable));
-
- return;
-}
-
-
-void cCmdResetDevices(void)
-{
- UBYTE i;
-
- //Clear NXT button counts so 'bumped' will work on first run
- for (i = 0; i < NO_OF_BTNS; i++)
- {
- pMapButton->BtnCnt[i].RelCnt = 0;
- //Need to clear short and long counts too, because RelCnt depends on them. No known side effects.
- pMapButton->BtnCnt[i].ShortRelCnt = 0;
- pMapButton->BtnCnt[i].LongRelCnt = 0;
- }
-
- for (i = 0; i < NO_OF_INPUTS; i++)
- {
- INPUTSTRUCT * pIn = &(pMapInput->Inputs[i]);
- //Clear type and mode to defaults
- pIn->SensorType = NO_SENSOR;
- pIn->SensorMode = RAWMODE;
-
- //Reset input values to 0 prior to running (clear things like stale rotation counts)
- pIn->ADRaw = 0;
- pIn->SensorRaw = 0;
- pIn->SensorValue = 0;
-
- //Assert invalid data flag so future code is aware of these changes
- pIn->InvalidData = TRUE;
- }
-
- for (i = 0; i < NO_OF_OUTPUTS; i++)
- {
- //Coast and reset all motor parameters
- OUTPUT * pOut = &(pMapOutPut->Outputs[i]);
- pOut->Mode = 0;
- pOut->RegMode = REGULATION_MODE_IDLE;
- pOut->RunState = MOTOR_RUN_STATE_IDLE;
- pOut->Speed = 0;
- pOut->TachoLimit = 0;
- pOut->SyncTurnParameter = 0;
- pOut->Flags = UPDATE_MODE | UPDATE_SPEED | UPDATE_TACHO_LIMIT | UPDATE_RESET_COUNT | UPDATE_RESET_BLOCK_COUNT | UPDATE_RESET_ROTATION_COUNT;
- }
-
- //Lowspeed init, INSERT CODE !!!
- for (i = 0; i < NO_OF_LOWSPEED_COM_CHANNEL; i++)
- {
- pMapLowSpeed->InBuf[i].InPtr = 0;
- pMapLowSpeed->InBuf[i].OutPtr = 0;
- pMapLowSpeed->InBuf[i].BytesToRx = 0;
- pMapLowSpeed->OutBuf[i].InPtr = 0;
- pMapLowSpeed->OutBuf[i].OutPtr = 0;
- if (pMapLowSpeed->ChannelState[i] != LOWSPEED_IDLE)
- {
- pMapLowSpeed->ChannelState[i] = LOWSPEED_DONE;
- pMapLowSpeed->State |= (0x01<<i);
- }
- }
-
-}
-
-
-//Add NewClump to end, updating Queue's head/tail as needed
-void cCmdEnQClump(CLUMP_Q * Queue, CLUMP_ID NewClump)
-{
- //Make sure NewClump's ID is valid and not already on Q
- NXT_ASSERT(cCmdIsClumpIDSane(NewClump));
- NXT_ASSERT(cCmdIsQSane(Queue) == TRUE);
- NXT_ASSERT(!cCmdIsClumpOnQ(Queue, NewClump));
-
- VarsCmd.pAllClumps[NewClump].Link = NOT_A_CLUMP;
-
- //If queue is empty, NewClump becomes both head and tail
- if (Queue->Head == NOT_A_CLUMP)
- {
- NXT_ASSERT(Queue->Tail == NOT_A_CLUMP);
-
- Queue->Head = NewClump;
- Queue->Tail = NewClump;
- if(Queue == &(VarsCmd.RunQ))
- cCmdRefreshActiveClump(NewClump);
- }
- //Otherwise, tack onto the end
- else
- {
- VarsCmd.pAllClumps[Queue->Tail].Link = NewClump;
- Queue->Tail = NewClump;
- }
-
- return;
-}
-
-//Dequeue specified clump
-//Normal usage is to dequeue only from the head (i.e. pass Queue.Head as arg)
-void cCmdDeQClump(CLUMP_Q * Queue, CLUMP_ID Clump)
-{
- CLUMP_ID CurrID, LinkID;
-
- //Make sure Clump's ID is valid and is already on Queue
- NXT_ASSERT(cCmdIsClumpIDSane(Clump));
- NXT_ASSERT(cCmdIsQSane(Queue) == TRUE);
- NXT_ASSERT(cCmdIsClumpOnQ(Queue, Clump));
-
- CurrID = Queue->Head;
-
- //If our clump is the head, move up the next and disconnect
- if (CurrID == Clump)
- {
- Queue->Head = VarsCmd.pAllClumps[Clump].Link;
- VarsCmd.pAllClumps[Clump].Link = NOT_A_CLUMP;
-
- //If we just removed the last clump, patch up the queue's tail
- if (Queue->Head == NOT_A_CLUMP)
- Queue->Tail = NOT_A_CLUMP;
- else if(Queue == &(VarsCmd.RunQ))
- cCmdRefreshActiveClump(Queue->Head);
- }
- //Else, look through rest of list looking for a link to our clump
- else
- {
- do
- {
- CLUMP_REC *clumpPtr= &VarsCmd.pAllClumps[CurrID];
- LinkID = clumpPtr->Link;
-
- //If we find a link to our clump, patch up predecessor's link
- if (clumpPtr->Link == Clump)
- {
- clumpPtr->Link = VarsCmd.pAllClumps[Clump].Link;
- VarsCmd.pAllClumps[Clump].Link = NOT_A_CLUMP;
-
- //If we just removed the tail, patch tail
- if (Clump == Queue->Tail)
- Queue->Tail = CurrID;
- }
-
- CurrID = LinkID;
- } while (CurrID != NOT_A_CLUMP);
- }
-
- return;
-}
-
-
-//Rotate head to tail and advance head for given Queue
-void cCmdRotateQ()
-{
- CLUMP_ID CurrID;
- CLUMP_REC * pClumpRec;
- CLUMP_Q * Queue = &VarsCmd.RunQ;
-
- //Make sure Queue is sane
- NXT_ASSERT(cCmdIsQSane(Queue) == TRUE);
-
- //If queue has at least two clumps
- if (Queue->Head != Queue->Tail)
- {
- CurrID = Queue->Head;
- pClumpRec = &(VarsCmd.pAllClumps[CurrID]);
-
- //Disconnect head
- Queue->Head = pClumpRec->Link;
- pClumpRec->Link = NOT_A_CLUMP;
-
- //Reconnect head as tail
- pClumpRec = &(VarsCmd.pAllClumps[Queue->Tail]);
- pClumpRec->Link = CurrID;
- Queue->Tail = CurrID;
-
- // reinit clump info
- CurrID= Queue->Head;
- cCmdRefreshActiveClump(Queue->Head);
-
- //Make sure we didn't make any really stupid mistakes
- NXT_ASSERT(cCmdIsQSane(Queue) == TRUE);
- }
-
- return;
-}
-
-
-UBYTE cCmdIsClumpOnQ(CLUMP_Q * Queue, CLUMP_ID Clump)
-{
- CLUMP_ID CurrID;
-
- //Make sure Clump's ID is valid and is already on Queue
- NXT_ASSERT(cCmdIsClumpIDSane(Clump));
- NXT_ASSERT(cCmdIsQSane(Queue) == TRUE);
-
- CurrID = Queue->Head;
-
- while (CurrID != NOT_A_CLUMP)
- {
- if (CurrID == Clump)
- return TRUE;
-
- CurrID = VarsCmd.pAllClumps[CurrID].Link;
- }
-
- return FALSE;
-}
-
-
-UBYTE cCmdIsQSane(CLUMP_Q * Queue)
-{
- CLUMP_ID Head, Tail;
- CLUMP_REC * pHead;
-
- if (Queue == NULL)
- {
- NXT_BREAK;
- return FALSE;
- }
-
- Head = Queue->Head;
- Tail = Queue->Tail;
-
- if (Head == NOT_A_CLUMP && cCmdIsClumpIDSane(Tail))
- return FALSE;
-
- if (cCmdIsClumpIDSane(Head) && Tail == NOT_A_CLUMP)
- return FALSE;
-
- if (cCmdIsClumpIDSane(Head) && cCmdIsClumpIDSane(Tail))
- {
- pHead = &(VarsCmd.pAllClumps[Head]);
-
- //!!! More comprehensive queue tests could go here
-
- //Check for mislinked head if there are at least two queue members
- if (Head != Tail && pHead->Link == NOT_A_CLUMP)
- return FALSE;
- }
-
- return TRUE;
-}
-
-//
-// Mutex queuing functions
-//
-
-NXT_STATUS cCmdAcquireMutex(MUTEX_Q * Mutex)
-{
- NXT_STATUS Status = NO_ERR;
- CLUMP_ID Clump= VarsCmd.RunQ.Head; // save off before queue changes below
-
- NXT_ASSERT(Mutex != NULL && cCmdIsClumpIDSane(Clump));
-
- if (Mutex->Owner == NOT_A_CLUMP)
- {
- //Mutex is open, so just take it
- Mutex->Owner = Clump;
-
- NXT_ASSERT(Mutex->WaitQ.Head == NOT_A_CLUMP && Mutex->WaitQ.Tail == NOT_A_CLUMP);
- }
- else
- {
- //Mutex is reserved by someone else, take self off RunQ and add to WaitQ
- cCmdDeQClump(&(VarsCmd.RunQ), Clump);
- cCmdEnQClump(&(Mutex->WaitQ), Clump);
- Status = CLUMP_SUSPEND;
- }
-
- NXT_ASSERT(cCmdIsQSane(&(Mutex->WaitQ)));
-
- return (Status);
-}
-
-
-NXT_STATUS cCmdReleaseMutex(MUTEX_Q * Mutex)
-{
-#if WIN_DEBUG || defined(ARM_DEBUG)
- CLUMP_ID Clump= VarsCmd.RunQ.Head;
-#endif
- NXT_ASSERT(Mutex != NULL);
- //!!! don't actually need to pass in Owner clump, but provides nice error checking for now
- // Might want to return an error/warning if we see a Release on an free mutex, though...
- NXT_ASSERT(Clump != NOT_A_CLUMP && Mutex->Owner == Clump);
-
- //Always set new Owner to WaitQ's Head, since NOT_A_CLUMP means mutex is free
- Mutex->Owner = Mutex->WaitQ.Head;
-
- if (Mutex->Owner != NOT_A_CLUMP)
- {
- cCmdDeQClump(&(Mutex->WaitQ), Mutex->Owner);
- cCmdEnQClump(&(VarsCmd.RunQ), Mutex->Owner);
- }
-
- NXT_ASSERT(cCmdIsQSane(&(Mutex->WaitQ)));
- NXT_ASSERT(cCmdIsQSane(&(VarsCmd.RunQ)));
-
- return (NO_ERR);
-}
-
-// No instruction to do this yet, but put current clump to sleep until awakeTime occurs
-NXT_STATUS cCmdSleepClump(ULONG time)
-{
- CLUMP_ID Clump= VarsCmd.RunQ.Head; // save off before queue changes below
- CLUMP_REC * pClump = &(VarsCmd.pAllClumps[Clump]);
- cCmdDeQClump(&(VarsCmd.RunQ), Clump);
- cCmdEnQClump(&(VarsCmd.RestQ), Clump);
- pClump->awakenTime= time;
- return CLUMP_SUSPEND;
-}
-
-UBYTE cCmdCheckRestQ(ULONG currTime)
-{
- UBYTE awakened= FALSE;
- CLUMP_ID curr, next;
- CLUMP_REC * pClump;
- curr= VarsCmd.RestQ.Head;
- while(curr != NOT_A_CLUMP) {
- pClump= &(VarsCmd.pAllClumps[curr]);
- next= pClump->Link;
- if(pClump->awakenTime <= currTime) {
- pClump->awakenTime= 0; // not necessary, but for debugging identification
- cCmdDeQClump(&(VarsCmd.RestQ), curr);
- cCmdEnQClump(&(VarsCmd.RunQ), curr);
- awakened= TRUE;
- }
- curr= next;
- }
- return awakened;
-}
-
-NXT_STATUS cCmdSchedDependents(CLUMP_ID Clump, SWORD Begin, SWORD End)
-{
- CLUMP_ID CurrDepClumpID;
- SWORD i;
-
- //Begin and End specify range of CLUMP_IDs in dependent list to schedule
- //If either equals -1, both should equal -1, and no dependents will be scheduled
- //Else schedule specified subset offset from pDependents
-
- //Check for valid args
- NXT_ASSERT(cCmdIsClumpIDSane(Clump));
- NXT_ASSERT((Begin >= 0 && End >= 0 && End < VarsCmd.pAllClumps[Clump].DependentCount)
- || (Begin == -1 && End == -1));
-
- //If non-empty range
- if (Begin != -1 || End != -1)
- {
- //update dependents, scheduling if their CurrFireCount reaches 0
- for (i = Begin; i <= End; i++)
- {
- CurrDepClumpID = VarsCmd.pAllClumps[Clump].pDependents[i];
-
- NXT_ASSERT(cCmdIsClumpIDSane(CurrDepClumpID));
-
- VarsCmd.pAllClumps[CurrDepClumpID].CurrFireCount--;
-
- if (VarsCmd.pAllClumps[CurrDepClumpID].CurrFireCount == 0)
- cCmdEnQClump(&(VarsCmd.RunQ), CurrDepClumpID);
- }
- }
-
- return (NO_ERR);
-}
-
-
-NXT_STATUS cCmdSchedDependent(CLUMP_ID Clump, CLUMP_ID TargetClump)
-{
- //TargetClump specifies the clump number of the target to schedule explicitly.
-
- //Check for valid args
- NXT_ASSERT(cCmdIsClumpIDSane(Clump));
- NXT_ASSERT(cCmdIsClumpIDSane(TargetClump));
-
- CLUMP_REC *clumpPtr= &VarsCmd.pAllClumps[TargetClump];
- clumpPtr->CurrFireCount--;
- if (clumpPtr->CurrFireCount == 0)
- cCmdEnQClump(&(VarsCmd.RunQ), TargetClump);
-
- return (NO_ERR);
-}
-
-
-UBYTE cCmdIsClumpIDSane(CLUMP_ID Clump)
-{
- if (Clump < VarsCmd.AllClumpsCount)
- return TRUE;
- else
- return FALSE;
-}
-
-
-//
-// Memory pool management functions
-//
-void cCmdInitPool(void)
-{
- ULONG i;
- ULONG *poolPtr;
-
- //VarsCmd.Pool is a UBYTE pointer to ULONG array
- //This was done to enforce portable alignment.
- VarsCmd.Pool = (UBYTE*)(IOMapCmd.MemoryPool);
-
- for (i = (POOL_MAX_SIZE / 4), poolPtr= (ULONG*)&(POOL_START)[0]; i>0; i--, poolPtr++)
- *poolPtr = 0xDEADBEEF;
-
- VarsCmd.PoolSize = 0;
-}
-
-
-#if VMProfilingCode
-ULONG memMgrTime= 0;
-#endif
-NXT_STATUS cCmdDSArrayAlloc(DS_ELEMENT_ID DSElementID, UWORD Offset, UWORD NewCount)
-{
- NXT_STATUS Status = NO_ERR;
- UWORD DVIndex;
- UWORD OldCount;
- UWORD i;
-#if VMProfilingCode
- ULONG enterTime= dTimerReadHiRes();
-#endif
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
-
- //Only arrays are valid here
- //!!! Recommended to upgrade NXT_ASSERT to ERR_INSTR return
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_ARRAY);
-
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
- OldCount = DV_ARRAY[DVIndex].Count;
-
- if(OldCount == NewCount)
- goto allocExit;
- Status = cCmdDVArrayAlloc(DVIndex, NewCount);
-
- if (Status < NO_ERR)
- goto allocExit;
-
- if(!IS_AGGREGATE_TYPE(cCmdDSType(INC_ID(DSElementID))))
- goto allocExit;
-
- if (OldCount > NewCount)
- {
- //Free dope vectors for sub-arrays.
- for (i = NewCount; i < OldCount; i++)
- {
- Status = cCmdFreeSubArrayDopeVectors(INC_ID(DSElementID), ARRAY_ELEM_OFFSET(DVIndex, i));
- if (IS_ERR(Status))
- goto allocExit;
- }
- }
- else if (OldCount < NewCount)
- {
- //Alloc dope vectors for sub-arrays. Set up DVIndexes
- for (i = OldCount; i < NewCount; i++)
- {
- Status = cCmdAllocSubArrayDopeVectors(INC_ID(DSElementID), ARRAY_ELEM_OFFSET(DVIndex, i));
- if (IS_ERR(Status))
- goto allocExit;
- }
- }
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-allocExit:
-#if VMProfilingCode
- memMgrTime += dTimerReadHiRes() - enterTime;
-#endif
- return Status;
-}
-
-NXT_STATUS cCmdDVArrayAlloc(DV_INDEX DVIndex, UWORD NewCount)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE *pData;
- UWORD ArraySize, InplaceSize;
- UWORD NextDVIndex;
- UWORD OldCount;
-
- OldCount = DV_ARRAY[DVIndex].Count;
-
- if (OldCount == NewCount)
- {
- //Nothing to alloc. Return.
- return Status;
- }
- else if (OldCount > NewCount)
- {
- //Already have the space. Shrink inplace.
- DV_ARRAY[DVIndex].Count = NewCount;
- return Status;
- }
- else // need to grow array
- {
- //Calculate new array size
- ArraySize = NewCount * DV_ARRAY[DVIndex].ElemSize;
-
- //Try growing inplace
- // If the Offset == NOT_AN_OFFSET then the array has never been allocated and can't grow inplace.
- if (DV_ARRAY[DVIndex].Offset != NOT_AN_OFFSET)
- {
- //Get pointer to next dope vector in dataspace
- if (DV_ARRAY[DVIndex].Link != NOT_A_DS_ID)
- {
- NextDVIndex = DV_ARRAY[DVIndex].Link;
- InplaceSize = DV_ARRAY[NextDVIndex].Offset - DV_ARRAY[DVIndex].Offset;
- }
- else
- {
- //Last element in dataspace.
- NXT_ASSERT(DVIndex == VarsCmd.MemMgr.Tail);
- InplaceSize = VarsCmd.DataspaceSize - DV_ARRAY[DVIndex].Offset;
- }
-
- if (ArraySize <= InplaceSize)
- {
- DV_ARRAY[DVIndex].Count = NewCount;
- return Status;
- }
- }
-
- //Can't grow inplace, have to allocate new space
-
- //Make sure we properly align for type
- //!!! This could also overflow memory (make PoolSize > POOL_MAX_SIZE) if we're within 3 bytes of the end.
- // I don't think it matters because if it does happend, we'll trigger the ERR_MEM below and compact.
- // During compaction, we'll reclaim these unused bytes.
- //!!! Aligning beginning of ALL arrays to 4 byte address
- ALIGN_TO_MOD(VarsCmd.PoolSize, SIZE_ULONG);
- ALIGN_TO_MOD(VarsCmd.DataspaceSize, SIZE_ULONG);
-
- if (VarsCmd.PoolSize + ArraySize >= POOL_MAX_SIZE)
- {
- //Not enough memory available
- return ERR_MEM;
- }
-
- //Get data from end of pool
- pData = VarsCmd.Pool + VarsCmd.PoolSize;
- //Grow pool and dataspace
- VarsCmd.PoolSize += ArraySize;
- VarsCmd.DataspaceSize += ArraySize;
-
- //Move old Array Data to new allocation
- if(OldCount)
- memmove(pData, VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset, (UWORD)(DV_ARRAY[DVIndex].ElemSize * OldCount));
- //!!! Clear mem so old mem doesn't contain stale data. Not strictly needed.
-#if WIN_DEBUG || defined(ARM_DEBUG)
- memset(VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset, 0xFF, (UWORD)(DV_ARRAY[DVIndex].ElemSize * OldCount));
-#endif
- //Update dope vector
- DV_ARRAY[DVIndex].Offset = pData - VarsCmd.pDataspace;
- DV_ARRAY[DVIndex].Count = NewCount;
-
- //Move dope vector to end of MemMgr list
- Status = cCmdMemMgrMoveToTail(DVIndex);
- if (IS_ERR(Status))
- return Status;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
- }
-
- return Status;
-}
-
-
-//!!! Recursive function
-NXT_STATUS cCmdAllocSubArrayDopeVectors(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- // Walks a single array element to see if it contains arrays
- // For any array it finds, a dope vector is allocated and the DVIndex is placed in the dataspace for the parent array.
- // This is a non-recursive function. It only walks the immediate array element.
- // DSElementID - ID of array sub-entry
- // Offset - offset to array element in dataspace
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode;
- DV_INDEX DVIndex;
- UWORD i;
- UWORD DVIndexOffset; //Offset to DVIndex field that points to the DopeVector from pDataspace
- UWORD LoopCount = 1;
- UWORD ElemSize;
-
- for (i = 0; i < LoopCount; i++)
- {
- TypeCode = cCmdDSType((DS_ELEMENT_ID)(DSElementID + i));
- if (TypeCode == TC_CLUSTER)
- {
- LoopCount += cCmdClusterCount(DSElementID);
- }
- else if (TypeCode == TC_ARRAY)
- {
- //!!! ElemSize is a static value, but we don't have anywhere we put it (another TOC sub-entry?)
- // It'd be nice to not have to recalculate it.
- ElemSize = cCmdCalcArrayElemSize((DS_ELEMENT_ID)(DSElementID + i));
- DVIndexOffset = VarsCmd.pDataspaceTOC[DSElementID + i].DSOffset + Offset;
- Status = cCmdAllocDopeVector(&DVIndex, ElemSize);
- if (IS_ERR(Status))
- return Status;
-
- *((UWORD *)(VarsCmd.pDataspace + DVIndexOffset)) = DVIndex;
- }
- }
-
- return Status;
-}
-
-
-//!!! Recursive function
-NXT_STATUS cCmdFreeSubArrayDopeVectors(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- // Walks a single array element to see if it contains arrays
- // Frees all dope vectors associated with the array element.
- // Recursively deletes sub-arrays.
- // DSElementID - ID of array sub-entry
- // Offset - offset to array element in dataspace
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode;
- DV_INDEX DVIndex;
- UWORD i, Count;
-
- TypeCode = cCmdDSType(DSElementID);
-
- if (TypeCode == TC_ARRAY)
- {
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
-
- NXT_ASSERT(DVIndex < DV_ARRAY[0].Count);
-
- Count = DV_ARRAY[DVIndex].Count;
- //Recur on sub-elements
- for (i = 0; i < Count; i++)
- {
- Status = cCmdFreeSubArrayDopeVectors(INC_ID(DSElementID), ARRAY_ELEM_OFFSET(DVIndex, i));
- if (IS_ERR(Status))
- return Status;
- }
-
- //Free Dope Vector
- Status = cCmdFreeDopeVector(DVIndex);
- }
- else if (TypeCode == TC_CLUSTER)
- {
- Count = cCmdClusterCount(DSElementID);
- DSElementID = INC_ID(DSElementID);
- //Recur on sub-elements
- for (i = 0; i < Count; i++)
- {
- Status = cCmdFreeSubArrayDopeVectors((DS_ELEMENT_ID)(DSElementID + i), Offset);
- if (IS_ERR(Status))
- return Status;
- }
- }
-
- return Status;
-}
-
-
-NXT_STATUS cCmdAllocDopeVector(DV_INDEX *pIndex, UWORD ElemSize)
-{
- NXT_STATUS Status = NO_ERR;
-
- if (VarsCmd.MemMgr.FreeHead == NOT_A_DS_ID)
- {
- //No free DVs. Need to grow DopeVector array.
- Status = cCmdGrowDopeVectorArray(DV_ARRAY_GROWTH_COUNT);
- if (IS_ERR(Status))
- return Status;
- }
-
- if(VarsCmd.MemMgr.FreeHead == NOT_A_DS_ID)
- return ERR_MEM;
-
- //Remove DV from free list
- *pIndex = VarsCmd.MemMgr.FreeHead;
- VarsCmd.MemMgr.FreeHead = DV_ARRAY[*pIndex].Link;
- if(VarsCmd.MemMgr.FreeHead != NOT_A_DS_ID)
- DV_ARRAY[VarsCmd.MemMgr.FreeHead].BackLink= NOT_A_DS_ID;
- //Add DV to tail of MemMgr list
- Status = cCmdMemMgrInsertAtTail(*pIndex);
-
- //Initialize values
- DV_ARRAY[*pIndex].Offset = NOT_AN_OFFSET;
- DV_ARRAY[*pIndex].ElemSize = ElemSize;
- DV_ARRAY[*pIndex].Count = 0;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- return Status;
-}
-
-//
-//cCmdFreeDopeVector() - Open up a spot in the DopeVectorArray for future use
-// The DopeVectorArray doesn't shrink when arrays (and their dope vectors) are deleted.
-// Instead they're pushed on the free list and the array stays the same size.
-// Future allocations check the free list before resorting to cCmdGrowDopeVectorArray()
-//
-NXT_STATUS cCmdFreeDopeVector(DV_INDEX DVIndex)
-{
- NXT_STATUS Status = NO_ERR;
- DV_INDEX prev, post;
-
- //Bounds check
- NXT_ASSERT(DVIndex < DV_ARRAY[0].Count);
-
- //Reset dope vector fields
- DV_ARRAY[DVIndex].Count = 0;
- DV_ARRAY[DVIndex].ElemSize = 0;
- DV_ARRAY[DVIndex].Offset = NOT_AN_OFFSET;
-
- //Remove from MemMgr list
- if (DVIndex == VarsCmd.MemMgr.Head)
- {
- VarsCmd.MemMgr.Head = DV_ARRAY[DVIndex].Link;
- if(VarsCmd.MemMgr.Head != NOT_A_DS_ID)
- DV_ARRAY[VarsCmd.MemMgr.Head].BackLink= NOT_A_DS_ID;
- }
- else
- {
- // patchup middle or end of list.
- prev= DV_ARRAY[DVIndex].BackLink;
- post= DV_ARRAY[DVIndex].Link;
- NXT_ASSERT(prev != NOT_A_DS_ID);
-
- DV_ARRAY[prev].Link = post;
- if(post != NOT_A_DS_ID)
- DV_ARRAY[post].BackLink= prev;
- if (DVIndex == VarsCmd.MemMgr.Tail)
- VarsCmd.MemMgr.Tail = prev;
- //Make sure we found the previous DV, otherwise this DV was not in the the list (already freed?)
- }
-
- //Push onto free list
- DV_ARRAY[DVIndex].Link = VarsCmd.MemMgr.FreeHead;
- DV_ARRAY[DVIndex].BackLink = NOT_A_DS_ID;
- DV_ARRAY[VarsCmd.MemMgr.FreeHead].BackLink= DVIndex;
- VarsCmd.MemMgr.FreeHead = DVIndex;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- return Status;
-}
-
-//
-//cCmdGrowDopeVectorArray() - expand DopeVectorArray to be able to track more dataspace arrays
-//
-NXT_STATUS cCmdGrowDopeVectorArray(UWORD NewNodesCount)
-{
- NXT_STATUS Status = NO_ERR;
- UWORD ArraySize;
- UWORD OldCount, NewCount, i;
- UBYTE * pData;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- OldCount = DV_ARRAY[0].Count;
- NewCount = OldCount + NewNodesCount;
- NXT_ASSERT(NewCount > OldCount);
-
- ArraySize = DV_ARRAY[0].ElemSize * NewCount;
-
- //!!! Aligning beginning of ALL arrays to 4 byte address
- ALIGN_TO_MOD(VarsCmd.PoolSize, SIZE_ULONG);
- ALIGN_TO_MOD(VarsCmd.DataspaceSize, SIZE_ULONG);
-
- if (VarsCmd.PoolSize + ArraySize >= POOL_MAX_SIZE)
- {
- //Not enough memory available
- return ERR_MEM;
- }
-
- //Get data from end of pool
- pData = VarsCmd.Pool + VarsCmd.PoolSize;
- //Grow pool and dataspace
- VarsCmd.PoolSize += ArraySize;
- VarsCmd.DataspaceSize += ArraySize;
-
- //Move DopeVector Array
- memmove(pData, (UBYTE *)VarsCmd.MemMgr.pDopeVectorArray, (UWORD)(DV_ARRAY[0].ElemSize * DV_ARRAY[0].Count));
-
- //Update MemMgr pointer
- VarsCmd.MemMgr.pDopeVectorArray = (DOPE_VECTOR *)pData;
- IOMapCmd.OffsetDVA = (UWORD)((ULONG)(VarsCmd.MemMgr.pDopeVectorArray) - (ULONG)&(IOMapCmd));
-
- //Update dope vector
- DV_ARRAY[0].Offset = pData - VarsCmd.pDataspace;
- DV_ARRAY[0].Count = NewCount;
-
- //Add new DopeVectors to free list
- //Push in reverse order so they get popped in order (mostly for ease of debugging)
- for (i = NewCount - 1; i >= OldCount; i--)
- {
- DV_ARRAY[i].Offset = 0xFFFF;
- DV_ARRAY[i].ElemSize = 0;
- DV_ARRAY[i].Count = 0;
- DV_ARRAY[i].BackLink = NOT_A_DS_ID;
- if(VarsCmd.MemMgr.FreeHead != NOT_A_DS_ID)
- DV_ARRAY[VarsCmd.MemMgr.FreeHead].BackLink = i;
- DV_ARRAY[i].Link = VarsCmd.MemMgr.FreeHead;
- VarsCmd.MemMgr.FreeHead = i;
- }
-
- //Move dope vector to end of MemMgr list
- Status = cCmdMemMgrMoveToTail(0);
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- return Status;
-}
-
-
-UWORD cCmdCalcArrayElemSize(DS_ELEMENT_ID DSElementID)
-{
- TYPE_CODE TypeCode;
- UWORD SizeOfType;
- UWORD i;
- UWORD LoopCount = 1;
- UWORD Size = 0;
- UWORD Alignment = 0;
-
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_ARRAY);
-
- DSElementID = INC_ID(DSElementID);
- for (i = 0; i < LoopCount; i++)
- {
- TypeCode = cCmdDSType((DS_ELEMENT_ID)(DSElementID + i));
- if (TypeCode == TC_CLUSTER)
- {
- LoopCount += cCmdClusterCount((DS_ELEMENT_ID)(DSElementID + i));
- }
- else
- {
- SizeOfType = cCmdSizeOf(TypeCode);
- ALIGN_TO_MOD(Size, SizeOfType);
- Size += SizeOfType;
- if (SizeOfType > Alignment)
- Alignment = SizeOfType;
- }
- }
- ALIGN_TO_MOD(Size, Alignment);
-
- return Size;
-}
-
-
-NXT_STATUS cCmdMemMgrMoveToTail(DV_INDEX DVIndex)
-{
- DV_INDEX prev, post;
-
- //Bounds check
- NXT_ASSERT(DVIndex < DV_ARRAY[0].Count);
-
- //Short circut if its already at the tail
- if (DVIndex == VarsCmd.MemMgr.Tail)
- return NO_ERR;
-
- if (DVIndex == VarsCmd.MemMgr.Head) {
- VarsCmd.MemMgr.Head = DV_ARRAY[DVIndex].Link;
- DV_ARRAY[VarsCmd.MemMgr.Head].BackLink= NOT_A_DS_ID;
- }
- else
- {
- // connect to middle or end of list.
- prev= DV_ARRAY[DVIndex].BackLink;
- post= DV_ARRAY[DVIndex].Link;
- NXT_ASSERT(prev != NOT_A_DS_ID);
- DV_ARRAY[prev].Link = post;
- if(post != NOT_A_DS_ID)
- DV_ARRAY[post].BackLink= prev;
- }
-
- DV_ARRAY[DVIndex].Link = NOT_A_DS_ID;
- DV_ARRAY[DVIndex].BackLink = VarsCmd.MemMgr.Tail;
- if(VarsCmd.MemMgr.Tail != NOT_A_DS_ID)
- DV_ARRAY[VarsCmd.MemMgr.Tail].Link = DVIndex;
- VarsCmd.MemMgr.Tail = DVIndex;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- return NO_ERR;
-}
-
-
-NXT_STATUS cCmdMemMgrInsertAtTail(DV_INDEX DVIndex)
-{
- //Bounds check
- NXT_ASSERT(DVIndex < DV_ARRAY[0].Count);
-
- DV_ARRAY[VarsCmd.MemMgr.Tail].Link = DVIndex;
- DV_ARRAY[DVIndex].BackLink= VarsCmd.MemMgr.Tail;
- DV_ARRAY[DVIndex].Link = NOT_A_DS_ID;
- VarsCmd.MemMgr.Tail = DVIndex;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- return NO_ERR;
-}
-
-
-UBYTE cCmdVerifyMemMgr()
-{
- DV_INDEX i, prev, post;
- UWORD CurrOffset = 0;
- UWORD PrevOffset = 0;
- UWORD DVCount = 0;
-
- //Make sure the MemMgr list is properly sorted in ascending offset order
- for (i = VarsCmd.MemMgr.Head; i != NOT_A_DS_ID; i = DV_ARRAY[i].Link)
- {
- CurrOffset = DV_ARRAY[i].Offset;
-
- if (CurrOffset != 0xFFFF)
- {
- if (PrevOffset > CurrOffset)
- return FALSE;
-
- PrevOffset = CurrOffset;
- }
-
- prev= DV_ARRAY[i].BackLink;
- post= DV_ARRAY[i].Link;
- if (post == NOT_A_DS_ID && i != VarsCmd.MemMgr.Tail)
- return FALSE;
- else if(prev == NOT_A_DS_ID && i != VarsCmd.MemMgr.Head)
- return FALSE;
- else if(prev != NOT_A_DS_ID && DV_ARRAY[prev].Link != i)
- return FALSE;
- else if(post != NOT_A_DS_ID && DV_ARRAY[post].BackLink != i)
- return FALSE;
-
- DVCount++;
- }
-
- // could check link and backlinks too
- for (i = VarsCmd.MemMgr.FreeHead; i != NOT_A_DS_ID; i = DV_ARRAY[i].Link)
- {
- DVCount++;
- }
-
- //Make sure the # of dope vectors = # used + # free
- if (DVCount != DV_ARRAY[0].Count)
- return FALSE;
-
- return TRUE;
-}
-
-
-NXT_STATUS cCmdDSCompact(void)
-{
- NXT_STATUS Status = NO_ERR;
-
- DV_INDEX CurrIndex;
- UWORD NewOffset;
- UWORD CurrOffset;
- UWORD Size;
- UWORD DeltaDSSize;
- UWORD TempOffset, TempSize;
-
-#if VM_BENCHMARK
- ULONG StartTime, TotalTime;
-
- VarsCmd.CompactionCount++;
- VarsCmd.LastCompactionTick = IOMapCmd.Tick - VarsCmd.StartTick;
-
- StartTime = dTimerRead();
-#endif
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
- NewOffset = VarsCmd.DSStaticSize;
- for (CurrIndex = VarsCmd.MemMgr.Head; CurrIndex != NOT_A_DS_ID; CurrIndex = DV_ARRAY[CurrIndex].Link)
- {
- //Align NewOffset for array to 4 byte address.
- ALIGN_TO_MOD(NewOffset, SIZE_ULONG);
-
- CurrOffset = DV_ARRAY[CurrIndex].Offset;
- if (CurrOffset != NOT_AN_OFFSET)
- {
- Size = DV_ARRAY[CurrIndex].ElemSize * DV_ARRAY[CurrIndex].Count;
- if (CurrOffset != NewOffset)
- {
- NXT_ASSERT(NewOffset < CurrOffset);
- memmove(VarsCmd.pDataspace + NewOffset, VarsCmd.pDataspace + CurrOffset, Size);
-
- // Clear mem to make stale data references more obvious while debugging.
- // Correct for overlapping memory regions (make sure we don't clear what we just moved).
- //!!! Clearing step not strictly necessary, so it could be optimized out
- if (NewOffset + Size > CurrOffset)
- {
- TempOffset = NewOffset + Size;
- TempSize = Size - (TempOffset - CurrOffset);
- }
- else
- {
- TempOffset = CurrOffset;
- TempSize = Size;
- }
- memset(VarsCmd.pDataspace + TempOffset, 0xFF, TempSize);
-
- //Update pDopeVectorArray if we move the dope vector array
- if (CurrIndex == 0)
- {
- VarsCmd.MemMgr.pDopeVectorArray = (DOPE_VECTOR *)(VarsCmd.pDataspace + NewOffset);
- IOMapCmd.OffsetDVA = (UWORD)((ULONG)(VarsCmd.MemMgr.pDopeVectorArray) - (ULONG)&(IOMapCmd));
- }
-
- //Update offset in DV Array
- DV_ARRAY[CurrIndex].Offset = NewOffset;
- }
-
- NewOffset += Size;
- }
- }
-
- DeltaDSSize = VarsCmd.DataspaceSize - NewOffset;
-
- VarsCmd.PoolSize -= DeltaDSSize;
- VarsCmd.DataspaceSize -= DeltaDSSize;
-
- NXT_ASSERT(cCmdVerifyMemMgr());
-
-#if VM_BENCHMARK
- TotalTime = dTimerRead() - StartTime;
-
- if (TotalTime > VarsCmd.MaxCompactionTime)
- VarsCmd.MaxCompactionTime = TotalTime;
-#endif
-
- return Status;
-}
-
-
-//
-// Message Queue functions
-//
-
-NXT_STATUS cCmdMessageWrite(UWORD QueueID, UBYTE * pData, UWORD Length)
-{
- NXT_STATUS Status = NO_ERR;
-
- if (pData == NULL)
- return ERR_ARG;
-
- if (QueueID >= MESSAGE_QUEUE_COUNT)
- return ERR_INVALID_QUEUE;
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- return ERR_NO_PROG;
-
- //Can't accept oversize messages because we treat them as strings (truncation would remove null termination)
- if (Length > MAX_MESSAGE_SIZE)
- return ERR_INVALID_SIZE;
-
- if (IS_DV_INDEX_SANE(GET_WRITE_MSG(QueueID)))
- {
- //A message is already there, the queue is full
- NXT_ASSERT(VarsCmd.MessageQueues[QueueID].WriteIndex == VarsCmd.MessageQueues[QueueID].ReadIndex);
-
- //Bump read index, drop existing message to make room for our new incoming message
- VarsCmd.MessageQueues[QueueID].ReadIndex = (VarsCmd.MessageQueues[QueueID].ReadIndex + 1) % MESSAGES_PER_QUEUE;
- }
- else
- {
- //Allocate dope vector for message
- Status = cCmdAllocDopeVector(&GET_WRITE_MSG(QueueID), 1);
- if (IS_ERR(Status))
- return Status;
- }
-
- //Allocate storage for message
- Status = cCmdDVArrayAlloc(GET_WRITE_MSG(QueueID), Length);
- if (IS_ERR(Status))
- {
- //Clear the dope vector for the message, since we're unable to put a message there.
- cCmdFreeDopeVector(GET_WRITE_MSG(QueueID));
- SET_WRITE_MSG(QueueID, NOT_A_DS_ID);
- return Status;
- }
-
- //Copy message
- memmove(cCmdDVPtr(GET_WRITE_MSG(QueueID)), pData, Length);
-
- //Advance write index
- VarsCmd.MessageQueues[QueueID].WriteIndex = (VarsCmd.MessageQueues[QueueID].WriteIndex + 1) % MESSAGES_PER_QUEUE;
-
- return Status;
-}
-
-
-NXT_STATUS cCmdMessageGetSize(UWORD QueueID, UWORD * Size)
-{
- DV_INDEX ReadDVIndex;
-
- if (Size == NULL)
- return (ERR_ARG);
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- {
- *Size = 0;
- return (ERR_NO_PROG);
- }
-
- if (QueueID >= MESSAGE_QUEUE_COUNT)
- {
- *Size = 0;
- return (ERR_INVALID_QUEUE);
- }
-
- ReadDVIndex = GET_READ_MSG(QueueID);
-
- if (IS_DV_INDEX_SANE(ReadDVIndex))
- {
- *Size = (DV_ARRAY[ReadDVIndex].Count);
- return (NO_ERR);
- }
- else
- {
- *Size = 0;
- return (STAT_MSG_EMPTY_MAILBOX);
- }
-}
-
-
-NXT_STATUS cCmdMessageRead(UWORD QueueID, UBYTE * pBuffer, UWORD Length, UBYTE Remove)
-{
- NXT_STATUS Status = NO_ERR;
- DV_INDEX ReadDVIndex;
-
- if (pBuffer == NULL)
- return (ERR_ARG);
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- return (ERR_NO_PROG);
-
- if (QueueID >= MESSAGE_QUEUE_COUNT)
- return (ERR_INVALID_QUEUE);
-
- ReadDVIndex = GET_READ_MSG(QueueID);
-
- if (IS_DV_INDEX_SANE(ReadDVIndex))
- {
- //If Buffer doesn't have room for the entire message,
- //don't risk incomplete string floating around
- if (Length < DV_ARRAY[ReadDVIndex].Count)
- return (ERR_INVALID_SIZE);
-
- //Copy message
- memmove(pBuffer, cCmdDVPtr(ReadDVIndex), DV_ARRAY[ReadDVIndex].Count);
-
- if (Remove)
- {
- //Free memory used by message
- Status = cCmdFreeDopeVector(ReadDVIndex);
- if (IS_ERR(Status))
- return Status;
-
- SET_READ_MSG(QueueID, NOT_A_DS_ID);
-
- //Advance read index
- VarsCmd.MessageQueues[QueueID].ReadIndex = (VarsCmd.MessageQueues[QueueID].ReadIndex + 1) % MESSAGES_PER_QUEUE;
- }
- }
- else
- {
- //No message to read, message Queue is empty
- NXT_ASSERT(VarsCmd.MessageQueues[QueueID].ReadIndex == VarsCmd.MessageQueues[QueueID].WriteIndex);
-
- return (STAT_MSG_EMPTY_MAILBOX);
- }
-
- return Status;
-}
-
-//
-// Datalog Queue function(s)
-//
-
-NXT_STATUS cCmdDatalogWrite(UBYTE * pData, UWORD Length)
-{
- NXT_STATUS Status = NO_ERR;
-
- if (pData == NULL)
- return ERR_ARG;
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- return (ERR_NO_PROG);
-
- //Can't accept oversize messages because we treat them as strings (truncation would remove null termination)
- if (Length > MAX_DATALOG_SIZE)
- return ERR_INVALID_SIZE;
-
- if (IS_DV_INDEX_SANE(GET_WRITE_DTLG()))
- {
- //A message is already there, the queue is full
- NXT_ASSERT(VarsCmd.DatalogBuffer.WriteIndex == VarsCmd.DatalogBuffer.ReadIndex);
- Status = STAT_MSG_BUFFERWRAP;
- //Bump read index, drop existing message to make room for our newly acquired datalog
- VarsCmd.DatalogBuffer.ReadIndex = (VarsCmd.DatalogBuffer.ReadIndex + 1) % DATALOG_QUEUE_DEPTH;
- }
- else
- {
- //Allocate dope vector for message
- Status = cCmdAllocDopeVector(&GET_WRITE_DTLG(), 1);
- if (IS_ERR(Status))
- return Status;
- }
-
- //Allocate storage for message
- Status |= cCmdDVArrayAlloc(GET_WRITE_DTLG(), Length);
- if (IS_ERR(Status))
- {
- //Clear the dope vector for the message, since we're unable to put a message there.
- cCmdFreeDopeVector(GET_WRITE_DTLG());
- SET_WRITE_DTLG(NOT_A_DS_ID);
- return Status;
- }
-
- //Copy message
- memmove(cCmdDVPtr(GET_WRITE_DTLG()), pData, Length);
-
- //Advance write index
- VarsCmd.DatalogBuffer.WriteIndex = (VarsCmd.DatalogBuffer.WriteIndex + 1) % DATALOG_QUEUE_DEPTH;
-
- return Status;
-}
-
-NXT_STATUS cCmdDatalogGetSize(UWORD * Size)
-{
- DV_INDEX ReadDVIndex;
-
- if (Size == NULL)
- return (ERR_ARG);
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- {
- *Size = 0;
- return (ERR_NO_PROG);
- }
-
- ReadDVIndex = GET_READ_DTLG();
-
- if (IS_DV_INDEX_SANE(ReadDVIndex))
- {
- *Size = (DV_ARRAY[ReadDVIndex].Count);
- return (NO_ERR);
- }
- else
- {
- *Size = 0;
- return (STAT_MSG_EMPTY_MAILBOX);
- }
-}
-
-NXT_STATUS cCmdDatalogRead(UBYTE * pBuffer, UWORD Length, UBYTE Remove)
-{
- NXT_STATUS Status = NO_ERR;
- DV_INDEX ReadDVIndex;
-
- if (pBuffer == NULL)
- return (ERR_ARG);
-
- if (VarsCmd.ActiveProgHandle == NOT_A_HANDLE)
- return (ERR_NO_PROG);
-
- ReadDVIndex = GET_READ_DTLG();
-
- if (IS_DV_INDEX_SANE(ReadDVIndex))
- {
- //If Buffer doesn't have room for the entire message,
- //don't risk incomplete string floating around
- if (Length < DV_ARRAY[ReadDVIndex].Count)
- return (ERR_INVALID_SIZE);
-
- //Copy message
- memmove(pBuffer, cCmdDVPtr(ReadDVIndex), DV_ARRAY[ReadDVIndex].Count);
-
- if (Remove)
- {
- //Free memory used by message
- Status = cCmdFreeDopeVector(ReadDVIndex);
- if (IS_ERR(Status))
- return Status;
-
- SET_READ_DTLG(NOT_A_DS_ID);
-
- //Advance read index
- VarsCmd.DatalogBuffer.ReadIndex = (VarsCmd.DatalogBuffer.ReadIndex + 1) % DATALOG_QUEUE_DEPTH;
- }
- }
- else
- {
- //No message to read, datalog Queue is empty
- NXT_ASSERT(VarsCmd.DatalogBuffer.ReadIndex == VarsCmd.DatalogBuffer.WriteIndex);
-
- return (STAT_MSG_EMPTY_MAILBOX);
- }
-
- return Status;
-}
-
-
-//
-// Color Sensor Functions
-//
-NXT_STATUS cCmdColorSensorRead (UBYTE Port, SWORD * SensorValue, UWORD * RawArray, UWORD * NormalizedArray,
- SWORD * ScaledArray, UBYTE * InvalidData)
-{
- ULONG i;
- //Make sure Port is valid for Color Sensor
- INPUTSTRUCT * pIn = &(pMapInput->Inputs[Port]);
- UBYTE sType = pIn->SensorType;
- if (!(sType == COLORFULL || sType == COLORRED || sType == COLORGREEN ||
- sType == COLORBLUE || sType == COLORNONE))
- {
- return (ERR_COMM_CHAN_NOT_READY); //TODO - is this the right error?
- }
- //Copy Detected Color
- *SensorValue = pIn->SensorValue;
-
- //Copy all raw, normalized and scaled data from I/O Map
- for (i=0; i<NO_OF_COLORS; i++){
- COLORSTRUCT * pColor = &(pMapInput->Colors[Port]);
- RawArray[i] = pColor->ADRaw[i];
- NormalizedArray[i] = pColor->SensorRaw[i];
- ScaledArray[i] = pColor->SensorValue[i];
- }
- //Copy the Invalid Data Flag
- *InvalidData = pIn->InvalidData;
-
- return NO_ERR;
-
-}
-
-
-//
-// Dataspace Support functions
-//
-
-UBYTE cCmdIsDSElementIDSane(DS_ELEMENT_ID Index)
-{
- if (Index < VarsCmd.DataspaceCount)
- return TRUE;
- else
- return FALSE;
-}
-
-void * cCmdResolveDataArg(DATA_ARG DataArg, UWORD Offset, TYPE_CODE * TypeCode)
-{
- void * ret_val = NULL;
-
- //!!! DATA_ARG masking system only for internal c_cmd use!
- // All normal bytecode arguments should go through top if() block.
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DataArg));
- ret_val = cCmdDSPtr(DataArg, Offset);
- if (TypeCode)
- *TypeCode = VarsCmd.pDataspaceTOC[DataArg].TypeCode;
-
- //!!! Caller beware! If DataArg isn't sane, ret_val may be out of range or NULL!
- return ret_val;
-}
-
-// normal Resolve handles both, but this is specific to I/O args
-void * cCmdResolveIODataArg(DATA_ARG DataArg, ULONG Offset, TYPE_CODE * TypeCode)
- {
- void * ret_val = NULL;
-
- ULONG ModuleID;
- ULONG FieldID;
- //DataArg refers to a field in the IO map
- // ModuleID = ((DataArg >> 9) & 0x1F);
- ModuleID = ((DataArg & 0x3FFF) >> 9);
- FieldID = (DataArg & 0x01FF);
-
- //!!! Preliminary bounds check -- still could allow invalid combos through
- if (ModuleID > MOD_OUTPUT || FieldID >= IO_OUT_FIELD_COUNT)
- {
- NXT_BREAK;
- return NULL;
- }
-
- ret_val = IO_PTRS[ModuleID][FieldID];
- if (TypeCode)
- *TypeCode = IO_TYPES[ModuleID][FieldID];
- return ret_val;
-}
-
-void cCmdSetValFlt(void * pVal, TYPE_CODE TypeCode, float NewVal)
-{
-
- if (pVal)
- {
- switch (TypeCode)
- {
- case TC_ULONG:
- case TC_SLONG:
- {
- *(ULONG*)pVal = NewVal;
- }
- break;
-
- case TC_UWORD:
- case TC_SWORD:
- {
- *(UWORD*)pVal = (UWORD)NewVal;
- }
- break;
-
- case TC_UBYTE:
- case TC_SBYTE:
- {
- *(UBYTE*)pVal = (UBYTE)NewVal;
- }
- break;
-
- case TC_FLOAT:
- {
- *(float*)pVal = (float)NewVal;
- }
- break;
- }
- }
-
- return;
-}
-
-ULONG cCmdGetUByte(void * pVal);
-ULONG cCmdGetSByte(void * pVal);
-ULONG cCmdGetUWord(void * pVal);
-ULONG cCmdGetSWord(void * pVal);
-ULONG cCmdGetULong(void * pVal);
-ULONG cCmdGetSLong(void * pVal);
-ULONG cCmdGetError(void * pVal);
-ULONG cCmdGetFloat(void * pVal);
-
-void cCmdSetByte(void * pVal, ULONG NewVal);
-void cCmdSetWord(void * pVal, ULONG NewVal);
-void cCmdSetLong(void * pVal, ULONG NewVal);
-void cCmdSetError(void * pVal, ULONG NewVal);
-
-
-typedef ULONG (*pGetOperand)(void *);
-static pGetOperand GetProcArray[11]= {cCmdGetUByte, cCmdGetUByte, cCmdGetSByte, cCmdGetUWord, cCmdGetSWord, cCmdGetULong, cCmdGetSLong, cCmdGetError, cCmdGetError, cCmdGetError, cCmdGetFloat}; // dup UByte to line up
-
-typedef void (*pSetOperand)(void *, ULONG);
-static pSetOperand SetProcArray[9]= {cCmdSetByte, cCmdSetByte, cCmdSetByte, cCmdSetWord, cCmdSetWord, cCmdSetLong, cCmdSetLong, cCmdSetError, cCmdSetError}; // dup UByte to line up
-
-void cCmdSetError(void * pVal, ULONG NewVal) {
- NXT_BREAK;
-}
-
-void cCmdSetLong(void * pVal, ULONG NewVal) {
- *(ULONG*)pVal = NewVal;
-}
-
-void cCmdSetWord(void * pVal, ULONG NewVal) {
- *(UWORD*)pVal = (UWORD)NewVal;
-}
-
-void cCmdSetByte(void * pVal, ULONG NewVal) {
- *(UBYTE*)pVal = (UBYTE)NewVal;
-}
-
-// only works on simple types, equivalent to resolve and get, but faster
-ULONG cCmdGetScalarValFromDataArg(DATA_ARG DataArg, UWORD Offset)
-{
- DS_TOC_ENTRY *dsTOCPtr= &VarsCmd.pDataspaceTOC[DataArg];
- return GetProcArray[dsTOCPtr->TypeCode](VarsCmd.pDataspace + dsTOCPtr->DSOffset + Offset);
-}
-
-
-ULONG cCmdGetError(void * pVal) {
- NXT_BREAK;
- return 0;
-}
-
-ULONG cCmdGetULong(void * pVal) {
- return (ULONG)(*(ULONG*)pVal);
-}
-
-ULONG cCmdGetSLong(void * pVal) {
- return (SLONG)(*(SLONG*)pVal);
-}
-
-ULONG cCmdGetUWord(void * pVal) {
- return (UWORD)(*(UWORD*)pVal);
-}
-
-ULONG cCmdGetSWord(void * pVal) {
- return (SWORD)(*(SWORD*)pVal);
-}
-
-ULONG cCmdGetUByte(void * pVal) {
- return (UBYTE)(*(UBYTE*)pVal);
-}
-
-ULONG cCmdGetSByte(void * pVal) {
- return (SBYTE)(*(SBYTE*)pVal);
-}
-
-ULONG cCmdGetFloat(void * pVal) {
- float tempVal = *(float*)pVal;
- if (tempVal >= 0.0f) {
- tempVal += 0.5f;
- }
- else {
- tempVal -= 0.5f;
- }
- return (ULONG)tempVal;
-}
-
-ULONG cCmdGetVal(void * pVal, TYPE_CODE TypeCode)
-{
- if (pVal)
- return GetProcArray[TypeCode](pVal);
- else
- //!!! Default return value places responsibility on caller to use this function wisely
- return 0;
-}
-
-
-float cCmdGetValFlt(void * pVal, TYPE_CODE TypeCode)
-{
- if (pVal)
- {
- switch (TypeCode)
- {
- case TC_ULONG:
- {
- return (ULONG)(*(ULONG*)pVal);
- }
-
- case TC_SLONG:
- {
- return (SLONG)(*(SLONG*)pVal);
- }
-
- case TC_UWORD:
- {
- return (UWORD)(*(UWORD*)pVal);
- }
-
- case TC_SWORD:
- {
- return (SWORD)(*(SWORD*)pVal);
- }
-
- case TC_UBYTE:
- {
- return (UBYTE)(*(UBYTE*)pVal);
- }
-
- case TC_SBYTE:
- {
- return (SBYTE)(*(SBYTE*)pVal);
- }
-
- case TC_FLOAT:
- {
- return (float)(*(float*)pVal);
- }
-
- default:
- break;
- }
- }
-
- //!!! Default return value places responsibility on caller to use this function wisely
- return 0;
-}
-
-
-
-// Only for scalar types and no offset
-void cCmdSetScalarValFromDataArg(DATA_ARG DataArg, ULONG NewVal)
-{
- DS_TOC_ENTRY *dsTOCPtr= &VarsCmd.pDataspaceTOC[DataArg];
- SetProcArray[dsTOCPtr->TypeCode](VarsCmd.pDataspace + dsTOCPtr->DSOffset, NewVal);
-}
-
-void cCmdSetVal(void * pVal, TYPE_CODE TypeCode, ULONG NewVal)
-{
- if (pVal)
- SetProcArray[TypeCode](pVal, NewVal);
-}
-
-void* cCmdDSPtr(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- void * pDSItem;
- DV_INDEX DVIndex;
- TYPE_CODE TypeCode;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
-
- TypeCode = cCmdDSType(DSElementID);
- if (TypeCode == TC_ARRAY)
- {
- //!!! Empty arrays return NULL.
- if (cCmdArrayCount(DSElementID, Offset) == 0)
- pDSItem = NULL;
- else
- {
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
- pDSItem = (VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset);
- }
- }
- else if (TypeCode == TC_CLUSTER)
- {
- NXT_ASSERT(cCmdClusterCount(DSElementID) != 0)
-
- //Returning pointer to the first element in the cluster
- pDSItem = cCmdDSPtr(INC_ID(DSElementID), Offset);
- }
- else
- pDSItem = (VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[DSElementID].DSOffset + Offset);
-
- NXT_ASSERT((UBYTE*)pDSItem < POOL_SENTINEL);
-
- return pDSItem;
-}
-
-void* cCmdDVPtr(DV_INDEX DVIndex)
-{
- NXT_ASSERT(IS_DV_INDEX_SANE(DVIndex));
- return (VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset);
-}
-
-
-//!!! Recursive function
-DS_ELEMENT_ID cCmdNextDSElement(DS_ELEMENT_ID CurrID)
-{
- DS_ELEMENT_ID NextID;
- TYPE_CODE CurrType;
- UWORD ClusterCount, i;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(CurrID));
-
- NextID = CurrID + 1;
-
- if (!cCmdIsDSElementIDSane(NextID))
- return NOT_A_DS_ID;
-
- CurrType = cCmdDSType(CurrID);
-
- if (CurrType == TC_ARRAY)
- {
- //Arrays contain two elements. Advance past the second one.
- NextID = cCmdNextDSElement(NextID);
- }
- else if (CurrType == TC_CLUSTER)
- {
- ClusterCount = cCmdClusterCount(CurrID);
- for (i = 0; i < ClusterCount; i++)
- {
- NextID = cCmdNextDSElement(NextID);
- }
- }
-
- return NextID;
-}
-
-
-//!!! Recursive function
-UBYTE cCmdCompareDSType(DS_ELEMENT_ID DSElementID1, DS_ELEMENT_ID DSElementID2)
-{
- TYPE_CODE Type1, Type2;
- UWORD i, Count1, Count2;
-
- Type1 = cCmdDSType(DSElementID1);
- Type2 = cCmdDSType(DSElementID2);
-
- if (Type1 != Type2)
- return FALSE;
-
- if (Type1 == TC_CLUSTER)
- {
- Count1 = cCmdClusterCount(DSElementID1);
- Count2 = cCmdClusterCount(DSElementID2);
-
- if(Count1 != Count2)
- return FALSE;
-
- DSElementID1 = INC_ID(DSElementID1);
- DSElementID2 = INC_ID(DSElementID2);
-
- for (i = 0; i < Count1; i++)
- {
- if (!cCmdCompareDSType(DSElementID1, DSElementID2))
- return FALSE;
-
- DSElementID1 = cCmdNextDSElement(DSElementID1);
- DSElementID2 = cCmdNextDSElement(DSElementID2);
- }
- }
- else if (Type1 == TC_ARRAY)
- {
- if (!cCmdCompareDSType(INC_ID(DSElementID1), INC_ID(DSElementID2)))
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-//!!! Recursive function
-UWORD cCmdCalcFlattenedSize(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- UWORD Size = 0;
- TYPE_CODE TypeCode;
- DV_INDEX DVIndex;
- UWORD i;
- UWORD Count;
-
- TypeCode = cCmdDSType(DSElementID);
-
- if (TypeCode == TC_ARRAY)
- {
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
-
- DSElementID = INC_ID(DSElementID);
- TypeCode = cCmdDSType(DSElementID);
-
- if (!IS_AGGREGATE_TYPE(TypeCode))
- {
- //Short circuit recursive calculation if our array sub-type is a scalar
- Size += DV_ARRAY[DVIndex].ElemSize * DV_ARRAY[DVIndex].Count;
- }
- else
- {
- //If the sub type is an aggregate type, then it can contain arrays, so we have to recur
- for (i = 0; i < DV_ARRAY[DVIndex].Count; i++)
- {
- Size += cCmdCalcFlattenedSize(DSElementID, ARRAY_ELEM_OFFSET(DVIndex, i));
- }
- }
- }
- else if (TypeCode == TC_CLUSTER)
- {
- Count = cCmdClusterCount(DSElementID);
-
- DSElementID = INC_ID(DSElementID);
- for (i = 0; i < Count; i++)
- {
- Size += cCmdCalcFlattenedSize(DSElementID, Offset);
- DSElementID = cCmdNextDSElement(DSElementID);
- }
- }
- else //Scalar
- {
- Size += cCmdSizeOf(TypeCode);
- }
- return Size;
-}
-
-
-//!!! Recursive function
-NXT_STATUS cCmdFlattenToByteArray(UBYTE * pByteArray, UWORD * pByteOffset, DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode;
- DV_INDEX DVIndex;
- UWORD i;
- UWORD Count;
- UBYTE *pVal;
-
- TypeCode = cCmdDSType(DSElementID);
-
- if (TypeCode == TC_ARRAY)
- {
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
- Count = DV_ARRAY[DVIndex].Count;
-
- DSElementID = INC_ID(DSElementID);
- TypeCode = cCmdDSType(DSElementID);
- if (!IS_AGGREGATE_TYPE(TypeCode))
- {
- //Short circuit recursive calculation if our array sub-type is a scalar
- Count = DV_ARRAY[DVIndex].ElemSize * DV_ARRAY[DVIndex].Count;
- memmove((pByteArray + *pByteOffset), (VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset), Count);
- *pByteOffset += Count;
- }
- else
- {
- //If the sub type is an aggregate type, then it can contain arrays, so we have to recur
- for (i = 0; i < Count; i++)
- {
- cCmdFlattenToByteArray(pByteArray, pByteOffset, DSElementID, ARRAY_ELEM_OFFSET(DVIndex, i));
- }
- }
- }
- else if (TypeCode == TC_CLUSTER)
- {
- Count = cCmdClusterCount(DSElementID);
-
- DSElementID = INC_ID(DSElementID);
- for (i = 0; i < Count; i++)
- {
- cCmdFlattenToByteArray(pByteArray, pByteOffset, DSElementID, Offset);
- DSElementID = cCmdNextDSElement(DSElementID);
- }
- }
- else //Scalar
- {
- pVal = cCmdResolveDataArg(DSElementID, Offset, NULL);
- Count = cCmdSizeOf(TypeCode);
-
- memmove((pByteArray + *pByteOffset), pVal, Count);
- *pByteOffset += Count;
- }
-
- return Status;
-}
-
-NXT_STATUS cCmdUnflattenFromByteArray(UBYTE * pByteArray, UWORD * pByteOffset, DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode;
- DV_INDEX DVIndex;
- UWORD i;
- UWORD Count;
- UBYTE *pVal;
-
- TypeCode = cCmdDSType(DSElementID);
-
- if (TypeCode == TC_ARRAY)
- {
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
- Count = DV_ARRAY[DVIndex].Count;
-
- DSElementID = INC_ID(DSElementID);
- TypeCode = cCmdDSType(DSElementID);
- if (!IS_AGGREGATE_TYPE(TypeCode))
- {
- //Short circuit recursive calculation if our array sub-type is a scalar
- Count = DV_ARRAY[DVIndex].ElemSize * DV_ARRAY[DVIndex].Count;
- memmove((VarsCmd.pDataspace + DV_ARRAY[DVIndex].Offset), (pByteArray + *pByteOffset), Count);
- *pByteOffset += Count;
- }
- else
- {
- //If the sub type is an aggregate type, then it can contain arrays, so we have to recur
- for (i = 0; i < Count; i++)
- {
- cCmdUnflattenFromByteArray(pByteArray, pByteOffset, DSElementID, ARRAY_ELEM_OFFSET(DVIndex, i));
- }
- }
- }
- else if (TypeCode == TC_CLUSTER)
- {
- Count = cCmdClusterCount(DSElementID);
-
- DSElementID = INC_ID(DSElementID);
- for (i = 0; i < Count; i++)
- {
- cCmdUnflattenFromByteArray(pByteArray, pByteOffset, DSElementID, Offset);
- DSElementID = cCmdNextDSElement(DSElementID);
- }
- }
- else //Scalar
- {
- pVal = cCmdResolveDataArg(DSElementID, Offset, NULL);
- Count = cCmdSizeOf(TypeCode);
-
- memmove(pVal, (pByteArray + *pByteOffset), Count);
- *pByteOffset += Count;
- }
-
- return Status;
-}
-
-
-UWORD cCmdClusterCount(DS_ELEMENT_ID DSElementID)
-{
- UWORD ClusterCount;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_CLUSTER);
-
- ClusterCount = VarsCmd.pDataspaceTOC[DSElementID].DSOffset;
-
- return ClusterCount;
-}
-
-
-UWORD cCmdGetDVIndex(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- UWORD DVIndex;
-
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_ARRAY);
-
- DVIndex = *(UWORD *)(VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[DSElementID].DSOffset + Offset);
-
- //Make sure we're returning a valid DVIndex
- NXT_ASSERT(DVIndex != 0 && DVIndex < DV_ARRAY[0].Count);
-
- return DVIndex;
-}
-
-
-UWORD cCmdArrayCount(DS_ELEMENT_ID DSElementID, UWORD Offset)
-{
- DV_INDEX DVIndex;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_ARRAY);
-
- DVIndex = cCmdGetDVIndex(DSElementID, Offset);
- return DV_ARRAY[DVIndex].Count;
-}
-
-TYPE_CODE cCmdArrayType(DS_ELEMENT_ID DSElementID)
-{
- TYPE_CODE TypeCode;
-
- NXT_ASSERT(cCmdIsDSElementIDSane(DSElementID));
- NXT_ASSERT(cCmdIsDSElementIDSane(INC_ID(DSElementID)));
- NXT_ASSERT(cCmdDSType(DSElementID) == TC_ARRAY);
-
- TypeCode = VarsCmd.pDataspaceTOC[DSElementID + 1].TypeCode;
-
- return TypeCode;
-}
-
-
-DS_ELEMENT_ID cCmdGetDataspaceCount(void)
-{
- return (VarsCmd.DataspaceCount);
-}
-
-
-UBYTE cCmdCompare(UBYTE CompCode, ULONG Val1, ULONG Val2, TYPE_CODE TypeCode1, TYPE_CODE TypeCode2)
-{
- SLONG SVal1, SVal2;
- if (QUICK_UNSIGNED_TEST(TypeCode1) || QUICK_UNSIGNED_TEST(TypeCode2))
- {
- return ((CompCode == OPCC1_LT && Val1 < Val2)
- || (CompCode == OPCC1_GT && Val1 > Val2)
- || (CompCode == OPCC1_LTEQ && Val1 <= Val2)
- || (CompCode == OPCC1_GTEQ && Val1 >= Val2)
- || (CompCode == OPCC1_EQ && Val1 == Val2)
- || (CompCode == OPCC1_NEQ && Val1 != Val2));
- }
- else
- {
- SVal1 = (SLONG)Val1;
- SVal2 = (SLONG)Val2;
- return ((CompCode == OPCC1_LT && SVal1 < SVal2)
- || (CompCode == OPCC1_GT && SVal1 > SVal2)
- || (CompCode == OPCC1_LTEQ && SVal1 <= SVal2)
- || (CompCode == OPCC1_GTEQ && SVal1 >= SVal2)
- || (CompCode == OPCC1_EQ && SVal1 == SVal2)
- || (CompCode == OPCC1_NEQ && SVal1 != SVal2));
- }
-}
-
-UBYTE cCmdCompareFlt(UBYTE CompCode, float Val1, float Val2, TYPE_CODE TypeCode1, TYPE_CODE TypeCode2)
-{
- //!!! add threshold to equality comparisons
- return ((CompCode == OPCC1_LT && Val1 < Val2)
- || (CompCode == OPCC1_GT && Val1 > Val2)
- || (CompCode == OPCC1_LTEQ && Val1 <= Val2)
- || (CompCode == OPCC1_GTEQ && Val1 >= Val2)
- || (CompCode == OPCC1_EQ && Val1 == Val2)
- || (CompCode == OPCC1_NEQ && Val1 != Val2));
-}
-
-
-NXT_STATUS cCmdCompareAggregates(UBYTE CompCode, UBYTE *ReturnBool, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE Finished;
-
- Finished = FALSE;
- Status = cCmdRecursiveCompareAggregates(CompCode, ReturnBool, &Finished, Arg2, Offset2, Arg3, Offset3);
- if (Finished == FALSE)
- {
- //If Finished has not been set to TRUE, it means that it was unable to find an inequality, thereby ending the comparison.
- //Both elements are equal. Assign the proper value to ReturnBool
- *ReturnBool = (CompCode == OPCC1_EQ || CompCode == OPCC1_GTEQ || CompCode == OPCC1_LTEQ);
- }
-
- return Status;
-}
-
-
-//!!! Recursive function
-NXT_STATUS cCmdRecursiveCompareAggregates(UBYTE CompCode, UBYTE *ReturnBool, UBYTE *Finished, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3)
-{
- //The value of Finished must be set to FALSE before calling this function.
- //We are able to determine the result of the comparison once we find an inequality.
- //Once an inequality is found, Finished is set to TRUE and ReturnBool is set based on the CompCode.
- //A call to this function will return with Finished still equal to FALSE if both elements are equal in value and count.
- //It is the caller of this function's job to set ReturnBool if this function returns with Finished == FALSE.
-
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode2, TypeCode3;
- DV_INDEX DVIndex2, DVIndex3;
- ULONG ArgVal2, ArgVal3;
- UWORD Count2, Count3, MinCount;
- UWORD i;
-
- TypeCode2 = cCmdDSType(Arg2);
- TypeCode3 = cCmdDSType(Arg3);
-
- //Make sure the two things we're comparing are the same type
- if (IS_AGGREGATE_TYPE(TypeCode2) && (TypeCode2 != TypeCode3))
- {
- NXT_BREAK;
- return ERR_ARG;
- }
-
- //Simple case, both args are scalars. Solve and return.
- if (!IS_AGGREGATE_TYPE(TypeCode2))
- {
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, Offset2);
- ArgVal3 = cCmdGetScalarValFromDataArg(Arg3, Offset3);
-
- //Once we find an inequality, we can determine the result of the comparison
- *Finished = cCmdCompare(OPCC1_NEQ, ArgVal2, ArgVal3, TypeCode2, TypeCode3);
-
- if (*Finished)
- *ReturnBool = cCmdCompare(CompCode, ArgVal2, ArgVal3, TypeCode2, TypeCode3);
-
- return Status;
- }
-
- // Initialize local variables for each argument
-
- if (TypeCode2 == TC_ARRAY)
- {
- Count2 = cCmdArrayCount(Arg2, Offset2);
- DVIndex2 = cCmdGetDVIndex(Arg2, Offset2);
- Offset2 = DV_ARRAY[DVIndex2].Offset;
-
- Count3 = cCmdArrayCount(Arg3, Offset3);
- DVIndex3 = cCmdGetDVIndex(Arg3, Offset3);
- Offset3 = DV_ARRAY[DVIndex3].Offset;
- }
- else if (TypeCode2 == TC_CLUSTER)
- {
- Count2 = cCmdClusterCount(Arg2);
- Count3 = cCmdClusterCount(Arg3);
- }
-
- //Short circuit evaluation of EQ and NEQ if counts are different
- if (Count2 != Count3)
- {
- if ((CompCode == OPCC1_EQ) || (CompCode == OPCC1_NEQ))
- {
- *Finished = TRUE;
- *ReturnBool = (CompCode == OPCC1_NEQ);
- return Status;
- }
- }
-
- MinCount = (Count2 < Count3) ? Count2 : Count3;
-
- //Advance aggregate args to first sub-element for next call
- Arg2 = INC_ID(Arg2);
- Arg3 = INC_ID(Arg3);
-
- //
- // Loop through the sub-elements of aggregate arguments.
- // Call cCmdRecursiveCompareAggregates recursively with simpler type.
- //
-
- for (i = 0; i < MinCount; i++)
- {
- Status = cCmdRecursiveCompareAggregates(CompCode, ReturnBool, Finished, Arg2, Offset2, Arg3, Offset3);
- if (*Finished || IS_ERR(Status))
- return Status;
-
- //Advance aggregate args to next sub-element
- if (TypeCode2 == TC_ARRAY)
- {
- Offset2 += DV_ARRAY[DVIndex2].ElemSize;
- Offset3 += DV_ARRAY[DVIndex3].ElemSize;
- }
- else if (TypeCode2 == TC_CLUSTER)
- {
- Arg2 = cCmdNextDSElement(Arg2);
- Arg3 = cCmdNextDSElement(Arg3);
- }
- }
-
- //All elements in aggregates type up to MinCount are equal. Count discrepancy determines comparison outcome.
- if (Count2 != Count3)
- {
- *Finished = TRUE;
- *ReturnBool = cCmdCompare(CompCode, Count2, Count3, TC_UWORD, TC_UWORD);
- }
- //Else, no size discrepancy. Elements are equal. Comparison still not resolved,
- //so return !Finished and status back up the call chain for further comparison
-
- return Status;
-}
-
-ULONG gClearProfileInfo= 0, bigExecTime= 0;
-#if VMProfilingCode
-void UpdateProfileInfo(ULONG shortOp, CODE_WORD *pInstr, ULONG execTime, ULONG InstrSize)
-{
- ULONG j;
- ULONG opCode;
-
- if(execTime > 500 && shortOp == 8)
- bigExecTime= shortOp;
- if(gClearProfileInfo) {
- ExecutedInstrs= 0;
- CmdCtrlTime= 0;
- OverheadTime= 0;
- CmdCtrlCalls= 0;
- LastAvgCount= 0;
- for(j= 0; j < 255; j++)
- CmdCtrlClumpTime[j]= 0;
- for(j= 0; j < OPCODE_COUNT; j++) {
- InstrProfile[j].Avg= 0;
- InstrProfile[j].Time= 0;
- InstrProfile[j].Count= 0;
- InstrProfile[j].Max= 0;
- }
- for(j= 0; j < SYSCALL_COUNT; j++) {
- SysCallProfile[j].Avg= 0;
- SysCallProfile[j].Time= 0;
- SysCallProfile[j].Count= 0;
- SysCallProfile[j].Max= 0;
- }
- for(j= 0; j < NUM_SHORT_OPCODE_COUNT; j++) {
- ShortInstrProfile[j].Avg= 0;
- ShortInstrProfile[j].Time= 0;
- ShortInstrProfile[j].Count= 0;
- ShortInstrProfile[j].Max= 0;
- }
- for(j= 0; j < NUM_INTERP_FUNCS; j++) {
- InterpFuncProfile[j].Avg= 0;
- InterpFuncProfile[j].Time= 0;
- InterpFuncProfile[j].Count= 0;
- InterpFuncProfile[j].Max= 0;
- }
- gClearProfileInfo= FALSE;
- }
- ExecutedInstrs ++;
- if(shortOp > 7) // shortop bit set
- {
- ShortInstrProfile[shortOp-8].Time += execTime;
- ShortInstrProfile[shortOp-8].Count++;
- if(execTime > ShortInstrProfile[shortOp-8].Max)
- ShortInstrProfile[shortOp-8].Max= execTime;
- }
- else
- {
- opCode = OP_CODE(pInstr);
- InstrProfile[opCode].Time += execTime;
- InstrProfile[opCode].Count++;
- if(execTime > InstrProfile[opCode].Max)
- InstrProfile[opCode].Max= execTime;
- if(opCode == OP_SYSCALL)
- {
- SysCallProfile[GetDataArg(pInstr[1])].Time += execTime;
- SysCallProfile[GetDataArg(pInstr[1])].Count++;
- if(execTime > SysCallProfile[GetDataArg(pInstr[1])].Max)
- SysCallProfile[GetDataArg(pInstr[1])].Max= execTime;
- }
-
- InterpFuncProfile[InstrSize].Time += execTime;
- InterpFuncProfile[InstrSize].Count++;
- if(execTime > InterpFuncProfile[InstrSize].Max)
- InterpFuncProfile[InstrSize].Max= execTime;
- }
- if(ExecutedInstrs - LastAvgCount > 999) // every N instrs, update avgs
- {
- for(j= 0; j < OPCODE_COUNT; j++)
- if(InstrProfile[j].Count)
- InstrProfile[j].Avg= InstrProfile[j].Time/InstrProfile[j].Count;
- for(j= 0; j < SYSCALL_COUNT; j++)
- if(SysCallProfile[j].Count)
- SysCallProfile[j].Avg= SysCallProfile[j].Time/SysCallProfile[j].Count;
- for(j= 0; j < NUM_SHORT_OPCODE_COUNT; j++)
- if(ShortInstrProfile[j].Count)
- ShortInstrProfile[j].Avg= ShortInstrProfile[j].Time/ShortInstrProfile[j].Count;
- for(j= 0; j < NUM_INTERP_FUNCS; j++)
- if(InterpFuncProfile[j].Count)
- InterpFuncProfile[j].Avg= InterpFuncProfile[j].Time/InterpFuncProfile[j].Count;
- LastAvgCount= ExecutedInstrs;
- }
-}
-#endif
-
-
-//
-// Interpreter Functions
-//
-
-NXT_STATUS cCmdInterpFromClump()
-{
- CLUMP_ID Clump= VarsCmd.RunQ.Head;
- NXT_STATUS Status = NO_ERR;
- CLUMP_REC * pClumpRec;
- CODE_WORD * pInstr, *lastClumpInstr;
- UBYTE InstrSize;
- ULONG shortOp, nextMSTick;
- SLONG i;
-#if VM_BENCHMARK
- ULONG InstrTime = dTimerRead();
-#endif
-
- if (!cCmdIsClumpIDSane(Clump)) // this means all clumps are asleep
- return TIMES_UP;
-
- //Resolve clump record structure and current instruction pointer
- pClumpRec = &(VarsCmd.pAllClumps[Clump]);
- pInstr = pClumpRec->PC; // abs
- lastClumpInstr= pClumpRec->CodeEnd; // abs
-
- i= gInstrsToExecute;
- nextMSTick= dTimerGetNextMSTickCnt();
- do
- {
-#if VMProfilingCode
- ULONG instrStartTime;
- instrStartTime= dTimerReadHiRes();
-#endif
-
- ULONG instrWord= *(UWORD*)pInstr;
- shortOp= (instrWord>>8) & 0x0F;
- if(shortOp > 7) // shortop bit set
- Status= ShortInterpFuncs[shortOp - 8](pInstr);
- else
- { // we know this is a long instr, dispatch on num params, which correlates to size
- InstrSize = INSTR_SIZE(instrWord); // keep in a local for profiling
- Status = (*InterpFuncs[InstrSize])(pInstr);
- }
-
-#if VMProfilingCode
- UpdateProfileInfo(shortOp, pInstr, dTimerReadHiRes() - instrStartTime, InstrSize);
-#endif
-
-afterCompaction:
- if (Status == NO_ERR)
- pInstr += gPCDelta;
- else if (Status == CLUMP_DONE) // already requeued
- {
- pClumpRec->PC = pClumpRec->CodeStart;
- pClumpRec->CurrFireCount = pClumpRec->InitFireCount;
- return Status;
- }
- else if (Status == CLUMP_SUSPEND || Status == BREAKOUT_REQ || Status == ROTATE_QUEUE) // already requeued
- {
- pClumpRec->PC = pInstr + gPCDelta;
- //Throw error if we ever advance beyond the clump's codespace
- if (pInstr > lastClumpInstr)
- {
- NXT_BREAK;
- Status = ERR_INSTR;
- }
- return Status;
- }
- else if (Status == ERR_MEM)
- {
- //Memory is full. Compact dataspace and try the instruction again.
- //!!! Could compact DopeVectorArray here
- cCmdDSCompact();
- if(shortOp > 7) // shortop bit set
- Status= ShortInterpFuncs[shortOp - 8](pInstr);
- else
- Status = (*InterpFuncs[InstrSize])(pInstr);
- if(Status == ERR_MEM)
- return Status;
- else
- goto afterCompaction;
- }
- else // other errors, breakout, stop
- return Status;
-
- //Throw error if we ever advance beyond the clump's codespace
- if (pInstr > lastClumpInstr)
- {
- NXT_BREAK;
- Status = ERR_INSTR;
- }
-
-#if VM_BENCHMARK
- //Increment opcode count
- VarsCmd.OpcodeBenchmarks[OP_CODE(pInstr)][0]++;
-
- InstrTime = dTimerRead() - InstrTime;
- if (InstrTime > 1)
- {
- VarsCmd.OpcodeBenchmarks[OP_CODE(pInstr)][1]++;
- if (InstrTime > VarsCmd.OpcodeBenchmarks[OP_CODE(pInstr)][2])
- VarsCmd.OpcodeBenchmarks[OP_CODE(pInstr)][2] = InstrTime;
- }
- VarsCmd.InstrCount++;
-#endif
-
- //Count one more instruction for this pass
- if ((SLONG)(nextMSTick - dTimerReadTicks()) <= 0) // HWTimer has passed ms tick limit
- Status= TIMES_UP;
- else if(--i <= 0)
- Status= ROTATE_QUEUE;
- } while (!Status);
- pClumpRec->PC= pInstr;
- return (Status);
-}
-
-
-NXT_STATUS cCmdInterpUnop1(CODE_WORD * const pCode)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE opCode;
- DATA_ARG Arg1;
-
- NXT_ASSERT(pCode != NULL);
-
- gPCDelta= 2;
- opCode = OP_CODE(pCode);
- Arg1 = pCode[1];
-
- switch (opCode)
- {
- case OP_JMP:
- {
- gPCDelta= (SWORD)Arg1;
- Status = NO_ERR;
- }
- break;
-
- case OP_ACQUIRE:
- {
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg1));
- NXT_ASSERT(VarsCmd.pDataspaceTOC[Arg1].TypeCode == TC_MUTEX);
-
- Status = cCmdAcquireMutex((MUTEX_Q *)cCmdDSScalarPtr(Arg1, 0));
- }
- break;
-
- case OP_RELEASE:
- {
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg1));
- NXT_ASSERT(VarsCmd.pDataspaceTOC[Arg1].TypeCode == TC_MUTEX);
-
- Status = cCmdReleaseMutex((MUTEX_Q *)cCmdDSScalarPtr(Arg1, 0));
- }
- break;
-
- case OP_SUBRET:
- {
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg1));
-
- //Take Subroutine off RunQ
- //Add Subroutine's caller to RunQ
- cCmdDeQClump(&(VarsCmd.RunQ), VarsCmd.RunQ.Head);
- cCmdEnQClump(&(VarsCmd.RunQ), *((CLUMP_ID *)cCmdDSScalarPtr(Arg1, 0)));
-
- Status = CLUMP_DONE;
- }
- break;
-
- case OP_FINCLUMPIMMED:
- {
- CLUMP_ID Clump= VarsCmd.RunQ.Head; // DeQ changes Head, use local val
- cCmdDeQClump(&(VarsCmd.RunQ), Clump); //Dequeue finalized clump
- cCmdSchedDependent(Clump, (CLUMP_ID)Arg1); // Use immediate form
-
- Status = CLUMP_DONE;
- }
- break;
-
- case OP_GETTICK:
- {
- cCmdSetScalarValFromDataArg(Arg1, dTimerReadNoPoll());
- }
- break;
-
- case OP_STOP:
- {
- //Unwired Arg1 means always stop
- if (Arg1 == NOT_A_DS_ID)
- Status = STOP_REQ;
- else if (cCmdGetScalarValFromDataArg(Arg1, 0) > 0)
- Status = STOP_REQ;
- }
- break;
-
- default:
- {
- //Fatal error: Unrecognized instruction
- NXT_BREAK;
- Status = ERR_INSTR;
- }
- break;
- }
-
- return (Status);
-}
-
-ULONG scalarNots= 0, scalarBrtst= 0, scalarUn2Other= 0, scalarUn2Dispatch= 0, polyUn2Dispatch= 0;
-NXT_STATUS cCmdInterpScalarUnop2(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- UBYTE opCode;
-
- NXT_ASSERT(pCode != NULL);
- opCode = OP_CODE(pCode);
- DATA_ARG Arg1, Arg2;
-
- scalarUn2Dispatch ++;
- if(opCode == OP_NOT) // t2 && t3 guaranteed scalar
- {
- gPCDelta= 3;
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- ULONG ArgVal1, ArgVal2;
-
- ArgVal2= cCmdGetScalarValFromDataArg(Arg2, 0);
- //!!! OP_NOT is logical, *not* bit-wise.
- //This differs from the other logical ops because we don't distinguish booleans from UBYTEs.
- ArgVal1= (!ArgVal2);
- cCmdSetScalarValFromDataArg(Arg1, ArgVal1);
- Status = NO_ERR;
- scalarNots ++;
- }
- else if(opCode == OP_BRTST)
- {
- ULONG Branch, compare= COMP_CODE(pCode);
- ULONG TypeCode;
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- TypeCode = cCmdDSType(Arg2);
-
- if(Arg2 == NOT_A_DS_ID)
- {
- Branch= ((compare == OPCC1_EQ)
- || (compare == OPCC1_LTEQ)
- || (compare == OPCC1_GTEQ));
- }
- else
- {
- if(compare == OPCC1_EQ && TypeCode == TC_UBYTE) // very common for loops
- {
- UBYTE *pBRVal = (VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[Arg2].DSOffset);
- Branch= *pBRVal == 0;
- }
- else
- {
- SLONG SVal1 = (SLONG)cCmdGetScalarValFromDataArg(Arg2, 0);
- Branch= ((compare == OPCC1_EQ && SVal1 == 0)
- || (compare == OPCC1_NEQ && SVal1 != 0)
- || (compare == OPCC1_GT && SVal1 > 0)
- || (compare == OPCC1_LT && SVal1 < 0)
- || (compare == OPCC1_LTEQ && SVal1 <= 0)
- || (compare == OPCC1_GTEQ && SVal1 >= 0));
- }
- }
- if (Branch)
- gPCDelta = (SWORD)Arg1;
- else
- gPCDelta= 3;
- Status = NO_ERR;
- scalarBrtst ++;
- }
- else {
- Status= cCmdInterpUnop2(pCode);
- scalarUn2Other ++;
- }
- return Status;
-}
-
-NXT_STATUS cCmdInterpUnop2(CODE_WORD * const pCode)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE opCode;
- DATA_ARG Arg1;
- DATA_ARG Arg2;
- void *pArg1 = NULL, *pArg2 = NULL;
- TYPE_CODE TypeCode1, TypeCode2;
-
- ULONG i;
- UWORD ArgC;
- static UBYTE * ArgV[MAX_CALL_ARGS + 1];
-
- polyUn2Dispatch ++;
- UWORD Count;
- UWORD Offset;
- SLONG TmpSLong;
- ULONG TmpULong;
- ULONG ArgVal2;
- float FltArgVal2;
- char Buffer[30];
- char FormatString[5];
- UBYTE CheckTrailingZeros = 0;
-
- NXT_ASSERT(pCode != NULL);
-
- gPCDelta= 3;
- opCode = OP_CODE(pCode);
- Arg1 = pCode[1];
- Arg2 = pCode[2];
-
- if (opCode == OP_NEG || opCode == OP_NOT || opCode == OP_TST || opCode == OP_SQRT || opCode == OP_ABS)
- {
- return cCmdInterpPolyUnop2(*pCode, Arg1, 0, Arg2, 0);
- }
-
- switch (opCode)
- {
- case OP_MOV:
- {
- Status= cCmdMove(Arg1, Arg2);
- }
- break;
-
- case OP_SET:
- {
- //!!! Should throw error if TypeCode1 is non-scalar
- // Accepting non-scalar destinations could have unpredictable results!
- cCmdSetScalarValFromDataArg(Arg1, Arg2);
- }
- break;
-
- case OP_BRTST:
- {
- //!!!BDUGGAN BRTST w/ Float?
- ULONG Branch, compare= COMP_CODE(pCode);
- ULONG TypeCode = cCmdDSType(Arg2);
- if(compare == OPCC1_EQ && TypeCode == TC_UBYTE) // very common for loops
- {
- UBYTE *pBRVal = (VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[Arg2].DSOffset);
- Branch= *pBRVal == 0;
- }
- else
- {
- SLONG SVal1 = (SLONG)cCmdGetScalarValFromDataArg(Arg2, 0);
- Branch= ((compare == OPCC1_EQ && SVal1 == 0)
- || (compare == OPCC1_NEQ && SVal1 != 0)
- || (compare == OPCC1_GT && SVal1 > 0)
- || (compare == OPCC1_LT && SVal1 < 0)
- || (compare == OPCC1_LTEQ && SVal1 <= 0)
- || (compare == OPCC1_GTEQ && SVal1 >= 0));
- }
- if (Branch)
-
- {
- gPCDelta = (SWORD)Arg1;
- Status = NO_ERR;
- }
- }
- break;
-
- case OP_FINCLUMP:
- {
- CLUMP_ID Clump= VarsCmd.RunQ.Head; // DeQ changes Head, use local val
- cCmdDeQClump(&(VarsCmd.RunQ), Clump); //Dequeue finalized clump
- cCmdSchedDependents(Clump, (SWORD)Arg1, (SWORD)Arg2);
- Status = CLUMP_DONE;
- }
- break;
-
- case OP_SUBCALL:
- {
- NXT_ASSERT(cCmdIsClumpIDSane((CLUMP_ID)Arg1));
- NXT_ASSERT(!cCmdIsClumpOnQ(&(VarsCmd.RunQ), (CLUMP_ID)Arg1));
-
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg2));
-
- *((CLUMP_ID *)(cCmdDSScalarPtr(Arg2, 0))) = VarsCmd.RunQ.Head;
-
- cCmdDeQClump(&(VarsCmd.RunQ), VarsCmd.RunQ.Head); //Take caller off RunQ
- cCmdEnQClump(&(VarsCmd.RunQ), (CLUMP_ID)Arg1); //Add callee to RunQ
-
- Status = CLUMP_SUSPEND;
- }
- break;
-
- case OP_ARRSIZE:
- {
- cCmdSetScalarValFromDataArg(Arg1, cCmdArrayCount(Arg2, 0));
- }
- break;
-
- case OP_SYSCALL:
- {
- if (Arg1 >= SYSCALL_COUNT)
- {
- NXT_BREAK;
- Status = ERR_INSTR;
- break;
- }
-
- ArgC = cCmdClusterCount(Arg2);
-
- if (ArgC > MAX_CALL_ARGS)
- {
- NXT_BREAK;
- Status = ERR_INSTR;
- break;
- }
-
- if (ArgC > 0)
- {
- Arg2 = INC_ID(Arg2);
-
- for (i = 0; i < ArgC; i++)
- {
- if (cCmdDSType(Arg2) == TC_ARRAY)
- {
- //Storing pointer to array's DV_INDEX
- //!!! This resolve is different than cCmdDSPtr
- // since SysCalls may need the DVIndex to re-alloc arrays
- ArgV[i] = VarsCmd.pDataspace + VarsCmd.pDataspaceTOC[Arg2].DSOffset;
- }
- else
- {
- ArgV[i] = cCmdDSPtr(Arg2, 0);
- }
-
- //If any argument fails to resolve, return a fatal error.
- if (ArgV[i] == NULL)
- {
- Status = ERR_BAD_PTR;
- break;
- }
-
- Arg2 = cCmdNextDSElement(Arg2);
- }
- }
- else
- {
- i = 0;
- }
-
- //ArgV list is null terminated
- ArgV[i] = NULL;
-
- Status = (*SysCallFuncs[Arg1])(ArgV);
- }
- break;
-
- case OP_FLATTEN:
- {
- //Flatten Arg2 to a NULL terminated string
-
- //Assert that the destination is a string (array of bytes)
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg1)) == TC_UBYTE);
-
- Count = cCmdCalcFlattenedSize(Arg2, 0);
- //Add room for NULL terminator
- Count++;
- Status = cCmdDSArrayAlloc(Arg1, 0, Count);
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- Offset = 0;
-
- Status = cCmdFlattenToByteArray(pArg1, &Offset, Arg2, 0);
- //Append NULL terminator
- *((UBYTE *)pArg1 + Offset) = 0;
- Offset++;
- NXT_ASSERT(Offset == Count);
- }
- break;
-
- case OP_NUMTOSTRING:
- {
- //Assert that the destination is a string (array of bytes)
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg1)) == TC_UBYTE);
-
- //Make sure we're trying to convert a scalar to a string
- TypeCode2= cCmdDSType(Arg2);
- NXT_ASSERT(!IS_AGGREGATE_TYPE(TypeCode2));
-
- if (TypeCode2 == TC_FLOAT)
- {
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
- FltArgVal2 = cCmdGetValFlt(pArg2, TypeCode2);
- // is number too big for display? then format differently and don't bother with trailing zeros
- if ((FltArgVal2 > 9999999999999.99f)||(FltArgVal2 < -999999999999.99f)){ // these are the widest %.2f numbers that will fit on display
- strcpy (FormatString, "%.6g");
- }
- else{
- strcpy (FormatString, "%.2f");
- CheckTrailingZeros = 1;
- }
- Count = sprintf(Buffer, FormatString, FltArgVal2);
- Count++; //add room for null terminator
-
- if (CheckTrailingZeros){
- // Determine if the trailing digits are zeros. If so, drop them
- if (Buffer[Count-2] == 0x30) { // NOTE: 0x30 is ASCII 0
- if (Buffer[Count-3] == 0x30){
- strcpy (FormatString, "%.0f"); // the last two digits = 0, copy as integer
- Count = Count - 3; // don't need memory for decimal and 2 ascii characters
- }
- else {
- strcpy (FormatString, "%.1f"); // only the 2nd digit = 0 so drop it, but keep the tenths place
- Count = Count - 1; // don't need memory for 2nd ascii character
- }
- }
- }
- }
- else
- {
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, 0);
- //Calculate size of array
- if (ArgVal2 == 0)
- Count = 1;
- else {
- Count = 0;
- SLONG digits= 0;
- ULONG Tmp= 1;
- if (TypeCode2 == TC_SLONG || TypeCode2 == TC_SWORD || TypeCode2 == TC_SBYTE)
- {
- TmpSLong = (SLONG)ArgVal2;
- //Add room for negative sign
- if (TmpSLong < 0) {
- Count++;
- TmpULong= -TmpSLong;
- }
- else
- TmpULong= ArgVal2;
- }
- else
- TmpULong= ArgVal2;
-
- while (Tmp <= TmpULong && digits < 10) { // maxint is ten digits, max
- Tmp *= 10;
- digits++;
- }
- Count += digits;
- }
- //add room for NULL terminator
- Count++;
- }
-
- //Allocate array
- Status = cCmdDSArrayAlloc(Arg1, 0, Count);
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, &TypeCode1);
-
- //Populate array
- if (TypeCode2 == TC_FLOAT)
- {
- sprintf(pArg1, FormatString, FltArgVal2);
- }
- else if (TypeCode2 == TC_SLONG || TypeCode2 == TC_SWORD || TypeCode2 == TC_SBYTE)
- {
- sprintf(pArg1, "%d", (SLONG)ArgVal2);
- }
- else
- {
- sprintf(pArg1, "%u", ArgVal2);
- }
- }
- break;
-
- case OP_STRTOBYTEARR:
- {
- NXT_ASSERT((cCmdDSType(Arg1) == TC_ARRAY) && (cCmdDSType(INC_ID(Arg1)) == TC_UBYTE));
- NXT_ASSERT((cCmdDSType(Arg2) == TC_ARRAY) && (cCmdDSType(INC_ID(Arg2)) == TC_UBYTE));
-
- Count = cCmdArrayCount(Arg2, 0);
-
- if (Count > 0)
- {
- Status = cCmdDSArrayAlloc(Arg1, 0, (UWORD)(Count - 1));
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
-
- memmove(pArg1, pArg2, Count - 1);
- }
- }
- break;
-
- case OP_BYTEARRTOSTR:
- {
- NXT_ASSERT((cCmdDSType(Arg1) == TC_ARRAY) && (cCmdDSType(INC_ID(Arg1)) == TC_UBYTE));
- NXT_ASSERT((cCmdDSType(Arg2) == TC_ARRAY) && (cCmdDSType(INC_ID(Arg2)) == TC_UBYTE));
-
- Count = cCmdArrayCount(Arg2, 0);
-
- Status = cCmdDSArrayAlloc(Arg1, 0, (UWORD)(Count + 1));
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
-
- memmove(pArg1, pArg2, Count);
- *((UBYTE *)pArg1 + Count) = '\0';
- }
- break;
-
- case OP_WAIT:
- {
- ULONG wait= 0;
- //Unwired Arg2 defaults to wait 0, which rotates queue
- if (Arg2 != NOT_A_DS_ID)
- wait= cCmdGetScalarValFromDataArg(Arg2, 0);
- if(wait == 0)
- Status= ROTATE_QUEUE;
- else
- Status = cCmdSleepClump(wait + IOMapCmd.Tick); // put to sleep, to wake up wait ms in future
- if(Arg1 != NOT_A_DS_ID)
- cCmdSetScalarValFromDataArg(Arg1, dTimerReadNoPoll());
- }
- break;
-
- default:
- {
- //Fatal error: Unrecognized instruction
- NXT_BREAK;
- Status = ERR_INSTR;
- }
- break;
- }
-
- return (Status);
-}
-
-
-NXT_STATUS cCmdInterpPolyUnop2(CODE_WORD const Code, DATA_ARG Arg1, UWORD Offset1Param, DATA_ARG Arg2, UWORD Offset2Param)
-{
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode1, TypeCode2;
- DV_INDEX DVIndex1, DVIndex2;
- ULONG ArgVal1, ArgVal2;
- float FltArgVal1, FltArgVal2;
- UWORD Count1, Count2, Offset1= Offset1Param, Offset2= Offset2Param;
- UWORD MinArrayCount;
- UWORD i;
- //!!! AdvCluster is intended to catch the case where sources are Cluster and an Array of Clusters.
- // In practice, the logic it uses is broken, leading to some source cluster elements being ignored.
- UBYTE AdvCluster;
-
- void * pArg1 = NULL,
- *pArg2 = NULL;
-
- TypeCode1 = cCmdDSType(Arg1);
- TypeCode2 = cCmdDSType(Arg2);
-
- //Simple case, scalar. Solve and return.
- if (!IS_AGGREGATE_TYPE(TypeCode2))
- {
- NXT_ASSERT(!IS_AGGREGATE_TYPE(TypeCode1));
-
- pArg1 = cCmdResolveDataArg(Arg1, Offset1, &TypeCode1);
-
- if (TypeCode1 == TC_FLOAT || TypeCode2 == TC_FLOAT)
- {
- pArg2 = cCmdResolveDataArg(Arg2, Offset2, &TypeCode2);
- FltArgVal2 = cCmdGetValFlt(pArg2, TypeCode2);
- FltArgVal1 = cCmdUnop2Flt(Code, FltArgVal2, TypeCode2);
- cCmdSetValFlt(pArg1, TypeCode1, FltArgVal1);
- }
- else
- {
- ArgVal2= cCmdGetScalarValFromDataArg(Arg2, Offset2);
- if(OP_CODE(&Code) == OP_MOV)
- ArgVal1= ArgVal2;
- else
- ArgVal1 = cCmdUnop2(Code, ArgVal2, TypeCode2);
- cCmdSetVal(pArg1, TypeCode1, ArgVal1);
- }
- return Status;
- }
-
- //At least one of the args is an aggregate type
-
- if(TypeCode1 == TC_ARRAY && TypeCode2 == TC_ARRAY) {
- TYPE_CODE tc1, tc2;
- tc1= cCmdDSType(INC_ID(Arg1));
- tc2= cCmdDSType(INC_ID(Arg2));
- if(tc1 <= TC_LAST_INT_SCALAR && tc1 == tc2) {
- void *pArg1, *pArg2;
- ULONG Count = cCmdArrayCount(Arg2, Offset2);
- Status = cCmdDSArrayAlloc(Arg1, Offset1, Count);
- if (IS_ERR(Status))
- return Status;
- pArg1 = cCmdResolveDataArg(Arg1, Offset1, NULL);
- pArg2 = cCmdResolveDataArg(Arg2, Offset2, NULL);
- memmove(pArg1, pArg2, Count * cCmdSizeOf(tc1));
- return Status;
- }
- }
-
-
- //
- // Initialize Count and ArrayType local variables for each argument
- //
-
- if (TypeCode2 == TC_ARRAY)
- {
- Count2 = cCmdArrayCount(Arg2, Offset2);
- DVIndex2 = cCmdGetDVIndex(Arg2, Offset2);
- Offset2 = DV_ARRAY[DVIndex2].Offset;
- }
- else if (TypeCode2 == TC_CLUSTER)
- {
- Count2 = cCmdClusterCount(Arg2);
- }
-
- if (TypeCode1 == TC_ARRAY)
- {
- if (TypeCode2 != TC_ARRAY)
- {
- //If output is an array, but source is not an array, that's a fatal error!
- NXT_BREAK;
- return (ERR_ARG);
- }
- if(Count2 == 0) { // both arrays, input is empty, is output already empty?
- Count1= cCmdArrayCount(Arg1, Offset1);
- if(Count1 == 0)
- return NO_ERR;
- }
-
- MinArrayCount = Count2;
-
- //Make sure the destination array is the proper size to hold the result
- Status = cCmdDSArrayAlloc(Arg1, Offset1, MinArrayCount);
- if (IS_ERR(Status))
- return Status;
-
- if(MinArrayCount == 0) // if we emptied array, nothing else to do.
- return NO_ERR;
- Count1 = MinArrayCount;
- DVIndex1 = cCmdGetDVIndex(Arg1, Offset1);
- Offset1 = DV_ARRAY[DVIndex1].Offset;
- AdvCluster = FALSE;
- }
- else if (TypeCode1 == TC_CLUSTER)
- {
- Count1 = cCmdClusterCount(Arg1);
- AdvCluster = TRUE;
- }
-
- //Advance aggregate args to first sub-element for next call
- if (IS_AGGREGATE_TYPE(TypeCode1))
- Arg1 = INC_ID(Arg1);
- if (IS_AGGREGATE_TYPE(TypeCode2))
- Arg2 = INC_ID(Arg2);
-
- //
- // Loop through the sub-elements of aggregate arguments.
- // Call cCmdInterpPolyUnop2 recursively with simpler type.
- //
- for (i = 0; i < Count1; i++)
- {
- Status = cCmdInterpPolyUnop2(Code, Arg1, Offset1, Arg2, Offset2);
- if (IS_ERR(Status))
- return Status;
-
- //Advance aggregate args to next sub-element
- if (TypeCode1 == TC_ARRAY)
- Offset1 += DV_ARRAY[DVIndex1].ElemSize;
- else if ((TypeCode1 == TC_CLUSTER) && AdvCluster)
- Arg1 = cCmdNextDSElement(Arg1);
-
- if (TypeCode2 == TC_ARRAY)
- Offset2 += DV_ARRAY[DVIndex2].ElemSize;
- else if ((TypeCode2 == TC_CLUSTER) && AdvCluster)
- Arg2 = cCmdNextDSElement(Arg2);
- }
- return Status;
-}
-
-
-ULONG cCmdUnop2(CODE_WORD const Code, ULONG Operand, TYPE_CODE TypeCode)
-{
- UBYTE opCode;
-
- opCode = OP_CODE((&Code));
- if(opCode == OP_MOV)
- return Operand;
- else if(opCode == OP_NEG)
- return (-((SLONG)Operand));
- else if(opCode == OP_NOT)
- //!!! OP_NOT is logical, *not* bit-wise.
- //This differs from the other logical ops because we don't distinguish booleans from UBYTEs.
- return (!Operand);
- else if(opCode == OP_TST)
- return cCmdCompare(COMP_CODE((&Code)), Operand, 0, TypeCode, TypeCode);
- else if(opCode == OP_ABS)
- return abs(Operand);
- else
- {
- //Unrecognized instruction, NXT_BREAK for easy debugging (ERR_INSTR handled in caller)
- NXT_BREAK;
- return 0;
- }
-}
-
-float cCmdUnop2Flt(CODE_WORD const Code, float Operand, TYPE_CODE TypeCode)
-{
- UBYTE opCode;
-
- opCode = OP_CODE((&Code));
- if(opCode == OP_MOV)
- return Operand;
- else if(opCode == OP_NEG)
- return (-(Operand));
- else if(opCode == OP_NOT)
- //!!! OP_NOT is logical, *not* bit-wise.
- //This differs from the other logical ops because we don't distinguish booleans from UBYTEs.
- return (!Operand);
- else if(opCode == OP_TST)
- return cCmdCompareFlt(COMP_CODE((&Code)), Operand, 0, TypeCode, TypeCode);
- else if(opCode == OP_ABS)
- return fabsf(Operand);
- else if(opCode == OP_SQRT)
- return sqrtf(Operand);
-#if 0
- else if(opCode == OP_SIN)
- return sinf(Operand);
- else if(opCode == OP_COS)
- return cosf(Operand);
- else if(opCode == OP_TAN)
- return tanf(Operand);
- else if(opCode == OP_ASIN)
- return asinf(Operand);
- else if(opCode == OP_ACOS)
- return acosf(Operand);
- else if(opCode == OP_ATAN)
- return atanf(Operand);
-#endif
- else
- {
- //Unrecognized instruction, NXT_BREAK for easy debugging (ERR_INSTR handled in caller)
- NXT_BREAK;
- return 0;
- }
-}
-
-NXT_STATUS cCmdIOGetSet(ULONG opCode, DATA_ARG Arg1, DATA_ARG Arg2, DATA_ARG Arg3)
-{
- ULONG ArgVal1, ArgVal2;
- TYPE_CODE TypeCode2;
- void *pArg2 = NULL;
- switch(opCode)
- {
- case OP_GETOUT:
- {
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, 0);
- Arg2 = (UWORD)(0x200 | (Arg3 + ArgVal2 * IO_OUT_FPP));
- pArg2 = cCmdResolveIODataArg(Arg2, 0, &TypeCode2);
- cCmdSetScalarValFromDataArg(Arg1, cCmdGetVal(pArg2, TypeCode2));
- }
- break;
- //!!! All IO map access commands should screen illegal port values!
- // Right now, cCmdResolveIODataArg's implementation allows SETIN/GETIN to access arbitrary RAM!
- case OP_SETIN:
- {
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, 0);
- Arg2 = (UWORD)(Arg3 + ArgVal2 * IO_IN_FPP);
- pArg2 = cCmdResolveIODataArg(Arg2, 0, &TypeCode2);
- ArgVal1 = cCmdGetScalarValFromDataArg(Arg1, 0);
- cCmdSetVal(pArg2, TypeCode2, ArgVal1);
- }
- break;
- case OP_GETIN:
- {
- TYPE_CODE TypeCode1;
- void * pArg1;
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, 0);
- Arg2 = (UWORD)(Arg3 + ArgVal2 * IO_IN_FPP);
- pArg2 = cCmdResolveIODataArg(Arg2, 0, &TypeCode2);
- TypeCode1= cCmdDSType(Arg1);
- pArg1= cCmdDSScalarPtr(Arg1, 0);
- if(TypeCode1 <= TC_SBYTE && TypeCode1 <= TC_SBYTE) // seems really common
- *(UBYTE*)pArg1= *(UBYTE*)pArg2;
- else
- cCmdSetVal(pArg1, TypeCode1, cCmdGetVal(pArg2, TypeCode2));
- }
- break;
- }
- return NO_ERR;
-}
-
-ULONG scalarCmp= 0, scalarFloatCmp= 0, recursiveCmp= 0, PolyScalarCmp= 0, polyPolyCmp= 0, scalarOther= 0, scalarBinopDispatch= 0, polyBinopDispatch= 0;
-NXT_STATUS cCmdInterpScalarBinop(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- UBYTE opCode;
- UBYTE CmpBool;
-
- NXT_ASSERT(pCode != NULL);
- opCode = OP_CODE(pCode);
- DATA_ARG Arg1, Arg2, Arg3;
-
- scalarBinopDispatch ++;
- if(opCode == OP_CMP) // t2 && t3 guaranteed scalar or string
- {
- gPCDelta= 4;
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- ULONG ArgVal1, ArgVal2, ArgVal3;
- TYPE_CODE TypeCode2, TypeCode3;
- DS_TOC_ENTRY *dsTOC2Ptr= &VarsCmd.pDataspaceTOC[Arg2];
- DS_TOC_ENTRY *dsTOC3Ptr= &VarsCmd.pDataspaceTOC[Arg3];
-
- TypeCode2 = dsTOC2Ptr->TypeCode;
- TypeCode3 = dsTOC3Ptr->TypeCode;
- if(TypeCode2 <= TC_LAST_INT_SCALAR && TypeCode3 <= TC_LAST_INT_SCALAR) {
- ArgVal2= GetProcArray[TypeCode2](VarsCmd.pDataspace + dsTOC2Ptr->DSOffset);
- ArgVal3= GetProcArray[TypeCode3](VarsCmd.pDataspace + dsTOC3Ptr->DSOffset);
- ArgVal1= cCmdCompare(COMP_CODE(pCode), ArgVal2, ArgVal3, TypeCode2, TypeCode3);
- DS_TOC_ENTRY *dsTOC1Ptr= &VarsCmd.pDataspaceTOC[Arg1];
- SetProcArray[dsTOC1Ptr->TypeCode](VarsCmd.pDataspace + dsTOC1Ptr->DSOffset, ArgVal1);
- scalarCmp++;
- Status = NO_ERR;
- }
- else if (TypeCode2 == TC_ARRAY) // two strings
- {
- // memcmp(); here or in compareagg, could use memcmp to speed up string compares ???
- Status = cCmdCompareAggregates(COMP_CODE(pCode), &CmpBool, Arg2, 0, Arg3, 0);
- cCmdSetScalarValFromDataArg(Arg1, CmpBool);
- recursiveCmp++;
- }
- else { // floats
- Status = cCmdInterpPolyBinop(*pCode, Arg1, 0, Arg2, 0, Arg3, 0);
- scalarFloatCmp++;
- }
- }
- else if(opCode == OP_BRCMP) { // t2 and t3 guaranteed scalar
- TYPE_CODE TypeCode2, TypeCode3;
- ULONG ArgVal2, ArgVal3;
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- TypeCode2= cCmdDSType(Arg2);
- TypeCode3= cCmdDSType(Arg3);
- ArgVal2= cCmdGetScalarValFromDataArg(Arg2, 0);
- ArgVal3= cCmdGetScalarValFromDataArg(Arg3, 0);
- CmpBool= cCmdCompare(COMP_CODE(pCode), ArgVal2, ArgVal3, TypeCode2, TypeCode3);
-
- if (CmpBool)
- gPCDelta = (SWORD)Arg1;
- else
- gPCDelta= 4;
- Status= NO_ERR;
- }
- else if(opCode >= OP_SETIN && opCode <= OP_GETOUT) {
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Status= cCmdIOGetSet(opCode, Arg1, Arg2, Arg3);
- gPCDelta= 4;
- }
- else {
- scalarOther ++;
- Status= cCmdInterpBinop(pCode);
- }
- return Status;
-}
-
-
-NXT_STATUS cCmdInterpBinop(CODE_WORD * const pCode)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE opCode;
- DATA_ARG Arg1, Arg2, Arg3;
- ULONG ArgVal3;
- UBYTE CmpBool;
- DV_INDEX DVIndex1, DVIndex2;
- UWORD i;
-
- polyBinopDispatch ++;
- gPCDelta= 4;
-
- NXT_ASSERT(pCode != NULL);
- opCode = OP_CODE(pCode);
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
-
- if (opCode <= OP_XOR) // && ! OP_NEG, can't happen since it is unop
- Status= cCmdInterpPolyBinop(opCode, Arg1, 0, Arg2, 0, Arg3, 0);
- else if(opCode >= OP_SETIN && opCode <= OP_GETOUT)
- Status= cCmdIOGetSet(opCode, Arg1, Arg2, Arg3);
- else {
- switch (opCode)
- {
- case OP_CMP:
- {
- TYPE_CODE TypeCode2= cCmdDSType(Arg2), TypeCode3= cCmdDSType(Arg3);
- if(TypeCode2 <= TC_LAST_INT_SCALAR && TypeCode3 <= TC_LAST_INT_SCALAR) {
- ULONG ArgVal1, ArgVal2, ArgVal3;
- ArgVal2= cCmdGetScalarValFromDataArg(Arg2, 0);
- ArgVal3= cCmdGetScalarValFromDataArg(Arg3, 0);
- ArgVal1= cCmdCompare(COMP_CODE(pCode), ArgVal2, ArgVal3, TypeCode2, TypeCode3);
- cCmdSetScalarValFromDataArg(Arg1, ArgVal1);
- PolyScalarCmp++;
- }
- else if (IS_AGGREGATE_TYPE(TypeCode2) && IS_AGGREGATE_TYPE(TypeCode3) && !IS_AGGREGATE_TYPE(cCmdDSType(Arg1)))
- {
- //Compare Aggregates
- Status = cCmdCompareAggregates(COMP_CODE(pCode), &CmpBool, Arg2, 0, Arg3, 0);
- cCmdSetScalarValFromDataArg(Arg1, CmpBool);
- recursiveCmp++;
- }
- else
- {
- //Compare Elements
- Status = cCmdInterpPolyBinop(*pCode, Arg1, 0, Arg2, 0, Arg3, 0);
- polyPolyCmp++;
- }
- }
- break;
-
- case OP_BRCMP:
- {
- TYPE_CODE TypeCode2= cCmdDSType(Arg2), TypeCode3= cCmdDSType(Arg3);
- if(TypeCode2 <= TC_LAST_INT_SCALAR && TypeCode3 <= TC_LAST_INT_SCALAR) {
- ULONG ArgVal2, ArgVal3;
- ArgVal2= cCmdGetScalarValFromDataArg(Arg2, 0);
- ArgVal3= cCmdGetScalarValFromDataArg(Arg3, 0);
- CmpBool= cCmdCompare(COMP_CODE(pCode), ArgVal2, ArgVal3, TypeCode2, TypeCode3);
- }
- else //Compare Aggregates
- Status = cCmdCompareAggregates(COMP_CODE(pCode), &CmpBool, Arg2, 0, Arg3, 0);
-
- if (CmpBool)
- gPCDelta = (SWORD)Arg1;
- }
- break;
-
- case OP_INDEX:
- {
- ArgVal3 = (Arg3 != NOT_A_DS_ID) ? cCmdGetScalarValFromDataArg(Arg3, 0) : 0;
-
- DVIndex2 = cCmdGetDVIndex(Arg2, 0);
- if (ArgVal3 >= DV_ARRAY[DVIndex2].Count)
- return (ERR_ARG);
-
- Status = cCmdInterpPolyUnop2(OP_MOV, Arg1, 0, INC_ID(Arg2), ARRAY_ELEM_OFFSET(DVIndex2, ArgVal3));
- }
- break;
-
- case OP_ARRINIT:
- {
- //Arg1 - Dst, Arg2 - element type/default val, Arg3 - length
-
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
-
- ArgVal3 = (Arg3 != NOT_A_DS_ID) ? cCmdGetScalarValFromDataArg(Arg3, 0) : 0;
-
- Status = cCmdDSArrayAlloc(Arg1, 0, (UWORD)ArgVal3);
- if (!IS_ERR(Status))
- {
- DVIndex1 = cCmdGetDVIndex(Arg1, 0);
- if(cCmdDSType(Arg2) <= TC_LAST_INT_SCALAR)
- {
- ULONG val= cCmdGetScalarValFromDataArg(Arg2, 0);
- TYPE_CODE TypeCode= cCmdDSType(INC_ID(Arg1));
- for (i = 0; i < ArgVal3; i++) // could init ptr and incr by offset GM???
- {
- //copy Arg2 into each element of Arg1
- cCmdSetVal(VarsCmd.pDataspace + ARRAY_ELEM_OFFSET(DVIndex1, i), TypeCode, val);
- }
- }
- else
- for (i = 0; i < ArgVal3; i++) //copy Arg2 into each element of Arg1
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg1), ARRAY_ELEM_OFFSET(DVIndex1, i), Arg2, 0);
- }
- }
- break;
-
- default:
- {
- //Fatal error: Unrecognized instruction
- NXT_BREAK;
- Status = ERR_INSTR;
- }
- break;
- }
- }
- return (Status);
-}
-
-
-NXT_STATUS cCmdInterpPolyBinop(CODE_WORD const Code, DATA_ARG Arg1, UWORD Offset1, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3)
-{
- NXT_STATUS Status = NO_ERR;
- TYPE_CODE TypeCode1, TypeCode2, TypeCode3;
- DV_INDEX DVIndex1, DVIndex2, DVIndex3;
- ULONG ArgVal1, ArgVal2, ArgVal3;
- float FltArgVal1, FltArgVal2, FltArgVal3;
- UWORD Count1, Count2, Count3;
- UWORD MinArrayCount;
- UWORD i;
- //!!! AdvCluster is intended to catch the case where sources are Cluster and an Array of Clusters.
- // In practice, the logic it uses is broken, leading to some source cluster elements being ignored.
- UBYTE AdvCluster;
-
- void * pArg1 = NULL,
- *pArg2 = NULL,
- *pArg3 = NULL;
-
- TypeCode1 = cCmdDSType(Arg1);
- TypeCode2 = cCmdDSType(Arg2);
- TypeCode3 = cCmdDSType(Arg3);
-
- //Simple case, both args are scalars. Solve and return.
- if ((!IS_AGGREGATE_TYPE(TypeCode2)) && (!IS_AGGREGATE_TYPE(TypeCode3)))
- {
- NXT_ASSERT(!IS_AGGREGATE_TYPE(TypeCode1));
-
- pArg1 = cCmdResolveDataArg(Arg1, Offset1, NULL);
-
- if (TypeCode1 == TC_FLOAT || TypeCode2 == TC_FLOAT || TypeCode3 == TC_FLOAT){
- pArg2 = cCmdResolveDataArg(Arg2, Offset2, NULL);
- pArg3 = cCmdResolveDataArg(Arg3, Offset3, NULL);
- FltArgVal2 = cCmdGetValFlt(pArg2, TypeCode2);
- FltArgVal3 = cCmdGetValFlt(pArg3, TypeCode3);
- FltArgVal1 = cCmdBinopFlt(Code, FltArgVal2, FltArgVal3, TypeCode2, TypeCode3);
- cCmdSetValFlt(pArg1, TypeCode1, FltArgVal1);
- }
- else
- {
- ArgVal2 = cCmdGetScalarValFromDataArg(Arg2, Offset2);
- ArgVal3 = cCmdGetScalarValFromDataArg(Arg3, Offset3);
- ArgVal1 = cCmdBinop(Code, ArgVal2, ArgVal3, TypeCode2, TypeCode3);
- cCmdSetVal(pArg1, TypeCode1, ArgVal1);
- }
- return Status;
- }
-
- //At least one of the args is an aggregate type
-
- //
- // Initialize Count and ArrayType local variables for each argument
- //
-
- if (TypeCode2 == TC_ARRAY)
- {
- Count2 = cCmdArrayCount(Arg2, Offset2);
- DVIndex2 = cCmdGetDVIndex(Arg2, Offset2);
- Offset2 = DV_ARRAY[DVIndex2].Offset;
- }
- else if (TypeCode2 == TC_CLUSTER)
- {
- Count2 = cCmdClusterCount(Arg2);
- }
-
- if (TypeCode3 == TC_ARRAY)
- {
- Count3 = cCmdArrayCount(Arg3, Offset3);
- DVIndex3 = cCmdGetDVIndex(Arg3, Offset3);
- Offset3 = DV_ARRAY[DVIndex3].Offset;
- }
- else if (TypeCode3 == TC_CLUSTER)
- {
- Count3 = cCmdClusterCount(Arg3);
- }
-
-
- if (TypeCode1 == TC_ARRAY)
- {
- //If the destination is an array, make sure it has enough memory to hold the result
- if ((TypeCode2 == TC_ARRAY) && (TypeCode3 == TC_ARRAY))
- {
- if (Count2 < Count3)
- MinArrayCount = Count2;
- else
- MinArrayCount = Count3;
- }
- else if (TypeCode2 == TC_ARRAY)
- MinArrayCount = Count2;
- else if (TypeCode3 == TC_ARRAY)
- MinArrayCount = Count3;
- else
- {
- //If output is an array, but no sources are arrays, that's a fatal error!
- NXT_BREAK;
- return (ERR_ARG);
- }
-
- //Make sure the destination array is the proper size to hold the result
- Status = cCmdDSArrayAlloc(Arg1, Offset1, MinArrayCount);
- if (IS_ERR(Status))
- return Status;
-
- Count1 = MinArrayCount;
- DVIndex1 = cCmdGetDVIndex(Arg1, Offset1);
- Offset1 = DV_ARRAY[DVIndex1].Offset;
- AdvCluster = FALSE;
- }
- else if (TypeCode1 == TC_CLUSTER)
- {
- Count1 = cCmdClusterCount(Arg1);
- AdvCluster = TRUE;
- }
-
- //Advance aggregate args to first sub-element for next call
- if (IS_AGGREGATE_TYPE(TypeCode1))
- Arg1 = INC_ID(Arg1);
- if (IS_AGGREGATE_TYPE(TypeCode2))
- Arg2 = INC_ID(Arg2);
- if (IS_AGGREGATE_TYPE(TypeCode3))
- Arg3 = INC_ID(Arg3);
-
- //
- // Loop through the sub-elements of aggregate arguments.
- // Call cCmdInterpPolyBinop recursively with simpler type.
- //
-
- for (i = 0; i < Count1; i++)
- {
- Status = cCmdInterpPolyBinop(Code, Arg1, Offset1, Arg2, Offset2, Arg3, Offset3);
- if (IS_ERR(Status))
- return Status;
-
- //Advance aggregate args to next sub-element
- if (TypeCode1 == TC_ARRAY)
- Offset1 += DV_ARRAY[DVIndex1].ElemSize;
- else if ((TypeCode1 == TC_CLUSTER) && AdvCluster)
- Arg1 = cCmdNextDSElement(Arg1);
-
- if (TypeCode2 == TC_ARRAY)
- Offset2 += DV_ARRAY[DVIndex2].ElemSize;
- else if ((TypeCode2 == TC_CLUSTER) && AdvCluster)
- Arg2 = cCmdNextDSElement(Arg2);
-
- if (TypeCode3 == TC_ARRAY)
- Offset3 += DV_ARRAY[DVIndex3].ElemSize;
- else if ((TypeCode3 == TC_CLUSTER) && AdvCluster)
- Arg3 = cCmdNextDSElement(Arg3);
- }
-
- return Status;
-}
-
-
-ULONG cCmdBinop(CODE_WORD const Code, ULONG LeftOp, ULONG RightOp, TYPE_CODE LeftType, TYPE_CODE RightType)
-{
- UBYTE opCode;
-
- opCode = OP_CODE((&Code));
-
- switch (opCode)
- {
- case OP_ADD:
- {
- return LeftOp + RightOp;
- }
-
- case OP_SUB:
- {
- return LeftOp - RightOp;
- }
-
- case OP_MUL:
- {
- return LeftOp * RightOp;
- }
-
- case OP_DIV:
- {
- //Catch divide-by-zero for a portable, well-defined result.
- //(x / 0) = 0. Thus Spake LOTHAR!! (It's technical.)
- if (RightOp == 0)
- return 0;
-
- if (IS_SIGNED_TYPE(LeftType) && IS_SIGNED_TYPE(RightType))
- return ((SLONG)LeftOp) / ((SLONG)RightOp);
- else if (IS_SIGNED_TYPE(LeftType))
- return ((SLONG)LeftOp) / RightOp;
- else if (IS_SIGNED_TYPE(RightType))
- return LeftOp / ((SLONG)RightOp);
- else
- return LeftOp / RightOp;
- }
-
- case OP_MOD:
- {
- //As with OP_DIV, make sure (x % 0) = x is well-defined
- if (RightOp == 0)
- return (LeftOp);
-
- if (IS_SIGNED_TYPE(LeftType) && IS_SIGNED_TYPE(RightType))
- return ((SLONG)LeftOp) % ((SLONG)RightOp);
- else if (IS_SIGNED_TYPE(LeftType))
- return ((SLONG)LeftOp) % RightOp;
- else if (IS_SIGNED_TYPE(RightType))
- return LeftOp % ((SLONG)RightOp);
- else
- return LeftOp % RightOp;
- }
-
- case OP_AND:
- {
- return (LeftOp & RightOp);
- }
-
- case OP_OR:
- {
- return (LeftOp | RightOp);
- }
-
- case OP_XOR:
- {
- return ((LeftOp | RightOp) & (~(LeftOp & RightOp)));
- }
-
- case OP_CMP:
- {
- return cCmdCompare(COMP_CODE((&Code)), LeftOp, RightOp, LeftType, RightType);
- }
-
- default:
- {
- //Unrecognized instruction, NXT_BREAK for easy debugging (ERR_INSTR handled in caller)
- NXT_BREAK;
- return 0;
- }
- }
-}
-
-
-float cCmdBinopFlt(CODE_WORD const Code, float LeftOp, float RightOp, TYPE_CODE LeftType, TYPE_CODE RightType)
-{
- UBYTE opCode;
-
- opCode = OP_CODE((&Code));
-
- switch (opCode)
- {
- case OP_ADD:
- {
- return LeftOp + RightOp;
- }
-
- case OP_SUB:
- {
- return LeftOp - RightOp;
- }
-
- case OP_MUL:
- {
- return LeftOp * RightOp;
- }
-
- case OP_DIV:
- {
- //Catch divide-by-zero for a portable, well-defined result.
- //(x / 0) = 0. Thus Spake LOTHAR!! (It's technical.)
- if (RightOp == 0)
- return 0;
-
- return LeftOp / RightOp;
- }
-
- case OP_MOD:
- {
- //As with OP_DIV, make sure (x % 0) = x is well-defined
- if (RightOp == 0)
- return (LeftOp);
-
- return (SLONG)LeftOp % (SLONG)RightOp;
- }
-
- case OP_AND:
- {
- return ((SLONG)LeftOp & (SLONG)RightOp);
- }
-
- case OP_OR:
- {
- return ((SLONG)LeftOp | (SLONG)RightOp);
- }
-
- case OP_XOR:
- {
- return (((SLONG)LeftOp | (SLONG)RightOp) & (~((SLONG)LeftOp & (SLONG)RightOp)));
- }
-
- case OP_CMP:
- {
- return cCmdCompareFlt(COMP_CODE((&Code)), LeftOp, RightOp, LeftType, RightType);
- }
-
- default:
- {
- //Unrecognized instruction, NXT_BREAK for easy debugging (ERR_INSTR handled in caller)
- NXT_BREAK;
- return 0;
- }
- }
-}
-
-NXT_STATUS cCmdInterpNoArg(CODE_WORD * const pCode)
-{
- //Fatal error: Unrecognized instruction (no current opcodes have zero instructions)
- NXT_BREAK;
- return (ERR_INSTR);
-}
-
-NXT_STATUS cCmdInterpShortError(CODE_WORD * const pCode)
-{
- //Fatal error: Unrecognized instruction (no current opcodes have zero instructions)
- NXT_BREAK;
- return (ERR_INSTR);
-}
-
-NXT_STATUS cCmdInterpShortSubCall(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- DATA_ARG Arg1, Arg2;
-
- gPCDelta= 2;
- Arg1 = GetDataArg(SHORT_ARG(pCode) + pCode[1]);
- Arg2 = GetDataArg(pCode[1]);
- NXT_ASSERT(cCmdIsClumpIDSane((CLUMP_ID)Arg1));
- NXT_ASSERT(!cCmdIsClumpOnQ(&(VarsCmd.RunQ), (CLUMP_ID)Arg1));
-
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg2));
-
- *((CLUMP_ID *)(cCmdDSScalarPtr(Arg2, 0))) = VarsCmd.RunQ.Head;
-
- cCmdDeQClump(&(VarsCmd.RunQ), VarsCmd.RunQ.Head); //Take caller off RunQ
- cCmdEnQClump(&(VarsCmd.RunQ), (CLUMP_ID)Arg1); //Add callee to RunQ
-
- Status = CLUMP_SUSPEND;
-
- return Status;
-}
-
-ULONG moveSameInt= 0, moveDiffInt= 0, moveFloat= 0, moveArrInt= 0, moveOther= 0;
-NXT_STATUS cCmdMove(DATA_ARG Arg1, DATA_ARG Arg2)
-{
- NXT_STATUS Status;
- DS_TOC_ENTRY *TOC1Ptr= &VarsCmd.pDataspaceTOC[Arg1],
- *TOC2Ptr= &VarsCmd.pDataspaceTOC[Arg2];
- TYPE_CODE tc1= TOC1Ptr->TypeCode, tc2= TOC2Ptr->TypeCode;
- void *pArg1, *pArg2;
-
- if(tc1 <= TC_LAST_INT_SCALAR && tc2 <= TC_LAST_INT_SCALAR)
- {
- // if tc1 == tc2, do long, byte, then word assignment
- if(tc1 == tc2)
- {
- moveSameInt++;
- pArg1= VarsCmd.pDataspace + TOC1Ptr->DSOffset;
- pArg2= VarsCmd.pDataspace + TOC2Ptr->DSOffset;
- if(tc1 >= TC_ULONG)
- *(ULONG*)pArg1= *(ULONG*)pArg2;
- else if(tc1 <= TC_SBYTE)
- *(UBYTE*)pArg1= *(UBYTE*)pArg2;
- else
- *(UWORD*)pArg1= *(UWORD*)pArg2;
- Status= NO_ERR;
- }
- else
- {
- moveDiffInt++;
- ULONG val= cCmdGetScalarValFromDataArg(Arg2, 0);
- cCmdSetScalarValFromDataArg(Arg1, val);
- Status= NO_ERR;
- }
- }
- else if(tc1 == TC_FLOAT && tc2 == TC_FLOAT) { // may also need to speed up float to int and int to float conversions
- moveFloat++;
- pArg1= VarsCmd.pDataspace + TOC1Ptr->DSOffset;
- pArg2= VarsCmd.pDataspace + TOC2Ptr->DSOffset;
- *(float*)pArg1= *(float*)pArg2;
- Status= NO_ERR;
- }
- //!!! Optimized move for arrays of ints.
- else if ((tc1 == TC_ARRAY) && (tc2 == TC_ARRAY)
- && ((TOC1Ptr+1)->TypeCode <= TC_LAST_INT_SCALAR)
- && ((TOC1Ptr+1)->TypeCode == (TOC2Ptr+1)->TypeCode))
- {
- ULONG Count;
- moveArrInt++;
- Count = cCmdArrayCount(Arg2, 0);
- Status = cCmdDSArrayAlloc(Arg1, 0, Count);
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
-
- memmove(pArg1, pArg2, Count * cCmdSizeOf((TOC1Ptr+1)->TypeCode));
- }
- else { // if ((tc1 == TC_CLUSTER) && (tc2 == TC_CLUSTER))
- moveOther++;
- Status = cCmdInterpPolyUnop2(OP_MOV, Arg1, 0, Arg2, 0);
- }
- return Status;
-}
-
-
-NXT_STATUS cCmdInterpShortMove(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- DATA_ARG Arg1, Arg2;
-
- Arg1 = GetDataArg(SHORT_ARG(pCode) + pCode[1]);
- Arg2 = GetDataArg(pCode[1]);
- Status= cCmdMove(Arg1, Arg2);
-
- gPCDelta= 2;
- return Status;
-}
-
-NXT_STATUS cCmdInterpShortAcquire(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- DATA_ARG Arg1;
-
- gPCDelta= 1;
- Arg1 = GetDataArg(SHORT_ARG(pCode));
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg1));
- NXT_ASSERT(cCmdDSType(Arg1) == TC_MUTEX);
-
- Status = cCmdAcquireMutex((MUTEX_Q *)cCmdDSScalarPtr(Arg1, 0));
-
- return Status;
-}
-
-NXT_STATUS cCmdInterpShortRelease(CODE_WORD * const pCode)
-{
- NXT_STATUS Status;
- DATA_ARG Arg1;
-
- gPCDelta= 1;
- Arg1 = GetDataArg(SHORT_ARG(pCode));
- NXT_ASSERT(cCmdIsDSElementIDSane(Arg1));
- NXT_ASSERT(cCmdDSType(Arg1) == TC_MUTEX);
-
- Status = cCmdReleaseMutex((MUTEX_Q *)cCmdDSScalarPtr(Arg1, 0));
-
- return Status;
-}
-
-
-//OP_SETOUT gets it's own interpreter function because it is relatively complex
-// (called from cCmdInterpOther())
-//This also serves as a convenient breakpoint stop for investigating output module behavior
-NXT_STATUS cCmdExecuteSetOut(CODE_WORD * const pCode)
-{
- TYPE_CODE TypeCodeField, TypeCodeSrc, TypeCodePortArg;
- void *pField = NULL,
- *pSrc = NULL,
- *pPort = NULL;
- DS_ELEMENT_ID PortArg;
- UWORD PortCount, InstrSize;
- ULONG Port, FieldTableIndex, i, j;
- DV_INDEX DVIndex;
-
- //Arg1 = InstrSize
- //Arg2 = port number or list of ports
- //Arg3 and beyond = FieldID, src DSID tuples
-
- //Calculate number of tuples
- //!!! Might want to throw ERR_INSTR if instrSize and tuples don't check out
- InstrSize = (pCode[1] / 2);
-
- //Second argument may specify a single port or an array list.
- //Figure out which and resolve accordingly.
- PortArg = pCode[2];
- TypeCodePortArg = cCmdDSType(PortArg);
-
- if (TypeCodePortArg == TC_ARRAY)
- {
- DVIndex = cCmdGetDVIndex(PortArg, 0);
- PortCount = cCmdArrayCount(PortArg, 0);
- }
- else
- PortCount = 1;
-
- //For each port, process all the tuples
- for (i = 0; i < PortCount; i++)
- {
- if (TypeCodePortArg == TC_ARRAY)
- {
- pPort = (UBYTE*)cCmdResolveDataArg(INC_ID(PortArg), ARRAY_ELEM_OFFSET(DVIndex, i), NULL);
- Port = cCmdGetVal(pPort, cCmdDSType(INC_ID(PortArg)));
- }
- else
- {
- Port = cCmdGetScalarValFromDataArg(PortArg, 0);
- }
-
- //If user specified a valid port, process the tuples. Else, this port is a no-op
- if (Port < NO_OF_OUTPUTS)
- {
- for (j = 3; j < InstrSize; j += 2)
- {
- FieldTableIndex = (Port * IO_OUT_FPP) + pCode[j];
- pSrc = cCmdResolveDataArg(pCode[j + 1], 0, &TypeCodeSrc);
-
- //If FieldTableIndex is valid, go ahead and set the value
- if (FieldTableIndex < IO_OUT_FIELD_COUNT)
- {
- pField = IO_PTRS[MOD_OUTPUT][FieldTableIndex];
- TypeCodeField = IO_TYPES[MOD_OUTPUT][FieldTableIndex];
- cCmdSetVal(pField, TypeCodeField, cCmdGetVal(pSrc, TypeCodeSrc));
- }
- //Else, compiler is nutso! Return fatal error.
- else
- return (ERR_INSTR);
- }
- }
- }
-
- return (NO_ERR);
-}
-
-
-NXT_STATUS cCmdInterpOther(CODE_WORD * const pCode)
-{
- NXT_STATUS Status = NO_ERR;
- UBYTE opCode;
- DATA_ARG Arg1, Arg2, Arg3, Arg4, Arg5;
- TYPE_CODE TypeCode1, TypeCode2, TypeCode3, TypeCode5;
- ULONG ArgVal2, ArgVal3, ArgVal4, ArgVal5;
- UWORD ArrayCount1, ArrayCount2, ArrayCount3, ArrayCount4;
- UWORD MinCount;
- UWORD i,j;
- DV_INDEX DVIndex1, DVIndex2, DVIndex4,TmpDVIndex;
- UWORD SrcCount;
- DS_ELEMENT_ID TmpDSID;
- UWORD DstIndex;
- UWORD Size;
- UWORD Offset;
-
- void *pArg1 = NULL;
- void *pArg2 = NULL;
- void *pArg3 = NULL;
- void *pArg5 = NULL;
-
- NXT_ASSERT(pCode != NULL);
-
- ULONG sz= INSTR_SIZE(*(UWORD*)pCode);
- if (sz == VAR_INSTR_SIZE)
- sz = ((UWORD*)pCode)[1];
- gPCDelta= sz/2; // advance words, sz is in bytes
-
- opCode = OP_CODE(pCode);
-
- switch (opCode)
- {
-
- case OP_REPLACE:
- {
- //Arg1 - Dst
- //Arg2 - Src
- //Arg3 - Index
- //Arg4 - New val / array of vals
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Arg4 = pCode[4];
-
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(Arg2) == TC_ARRAY);
-
- //Copy Src to Dst
- //!!! Could avoid full data copy if we knew which portion to overwrite
- if (Arg1 != Arg2)
- {
- Status= cCmdMove(Arg1, Arg2);
- if (IS_ERR(Status))
- return Status;
- }
-
- DVIndex1 = cCmdGetDVIndex(Arg1, 0);
- //Copy new val to Dst
- if (Arg3 != NOT_A_DS_ID)
- {
- pArg3 = cCmdResolveDataArg(Arg3, 0, &TypeCode3);
- ArgVal3 = cCmdGetVal(pArg3, TypeCode3);
- }
- else
- {
- //Index input unwired
- ArgVal3 = 0;
- }
-
- ArrayCount1 = cCmdArrayCount(Arg1, 0);
- //Bounds check
- //If array index (ArgVal3) is out of range, just pass out the copy of Src (effectively no-op)
- if (ArgVal3 >= ArrayCount1)
- return (NO_ERR);
-
- if (cCmdDSType(Arg4) != TC_ARRAY)
- {
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg1), ARRAY_ELEM_OFFSET(DVIndex1, ArgVal3), Arg4, 0);
- if (IS_ERR(Status))
- return Status;
- }
- else
- {
- DVIndex4 = cCmdGetDVIndex(Arg4, 0);
-
- ArrayCount4 = cCmdArrayCount(Arg4, 0);
- if (ArrayCount1 - ArgVal3 < ArrayCount4)
- MinCount = (UWORD)(ArrayCount1 - ArgVal3);
- else
- MinCount = ArrayCount4;
-
- for (i = 0; i < MinCount; i++)
- {
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg1), ARRAY_ELEM_OFFSET(DVIndex1, ArgVal3 + i), INC_ID(Arg4), ARRAY_ELEM_OFFSET(DVIndex4, i));
- if (IS_ERR(Status))
- return Status;
- }
- }
- }
- break;
-
- case OP_ARRSUBSET:
- {
- //Arg1 - Dst
- //Arg2 - Src
- //Arg3 - Index
- //Arg4 - Length
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Arg4 = pCode[4];
-
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(Arg2) == TC_ARRAY);
-
- ArrayCount2 = cCmdArrayCount(Arg2, 0);
-
- if (Arg3 != NOT_A_DS_ID)
- ArgVal3 = cCmdGetScalarValFromDataArg(Arg3, 0);
- else //Index input unwired
- ArgVal3 = 0;
-
- if (Arg4 != NOT_A_DS_ID)
- ArgVal4 = cCmdGetScalarValFromDataArg(Arg4, 0);
- else //Length input unwired, set to "rest"
- ArgVal4 = (UWORD)(ArrayCount2 - ArgVal3);
-
- //Bounds check
- if (ArgVal3 > ArrayCount2)
- {
- //Illegal range - return empty subset
- Status = cCmdDSArrayAlloc(Arg1, 0, 0);
- return Status;
- }
-
- //Set MinCount to "rest"
- MinCount = (UWORD)(ArrayCount2 - ArgVal3);
-
- // Copy "Length" if it is less than "rest"
- if (ArgVal4 < (ULONG)MinCount)
- MinCount = (UWORD)ArgVal4;
-
- //Allocate Dst array
- Status = cCmdDSArrayAlloc(Arg1, 0, MinCount);
- if (IS_ERR(Status))
- return Status;
-
- DVIndex1 = cCmdGetDVIndex(Arg1, 0);
- DVIndex2 = cCmdGetDVIndex(Arg2, 0);
-
- //Move src subset to dst
- for (i = 0; i < MinCount; i++)
- {
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg1), ARRAY_ELEM_OFFSET(DVIndex1, i), INC_ID(Arg2), ARRAY_ELEM_OFFSET(DVIndex2, ArgVal3 + i));
- if (IS_ERR(Status))
- return Status;
- }
- }
- break;
-
- case OP_STRSUBSET:
- {
- //Arg1 - Dst
- //Arg2 - Src
- //Arg3 - Index
- //Arg4 - Length
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Arg4 = pCode[4];
-
- NXT_ASSERT(cCmdDSType(Arg1) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg1)) == TC_UBYTE);
- NXT_ASSERT(cCmdDSType(Arg2) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg2)) == TC_UBYTE);
-
- ArrayCount2 = cCmdArrayCount(Arg2, 0);
-
- //Remove NULL from Count
- ArrayCount2--;
-
- if (Arg3 != NOT_A_DS_ID)
- ArgVal3 = cCmdGetScalarValFromDataArg(Arg3, 0);
- else //Index input unwired
- ArgVal3 = 0;
-
- if (Arg4 != NOT_A_DS_ID)
- ArgVal4 = cCmdGetScalarValFromDataArg(Arg4, 0);
- else //Length input unwired, set to "rest"
- ArgVal4 = (UWORD)(ArrayCount2 - ArgVal3);
-
- //Bounds check
- if (ArgVal3 > ArrayCount2)
- {
- //Illegal range - return empty string
- Status = cCmdDSArrayAlloc(Arg1, 0, 1);
- if (!IS_ERR(Status))
- {
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- *((UBYTE *)pArg1) = '\0';
- }
- return Status;
- }
-
- //Set MinCount to "rest"
- MinCount = (UWORD)(ArrayCount2 - ArgVal3);
-
- // Copy "Length" if it is less than "rest"
- if (ArgVal4 < (ArrayCount2 - ArgVal3))
- MinCount = (UWORD)ArgVal4;
-
- //Allocate Dst array
- Status = cCmdDSArrayAlloc(Arg1, 0, (UWORD)(MinCount + 1));
- if (IS_ERR(Status))
- return Status;
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, NULL);
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
-
- //Move src subset to dst
- memmove((UBYTE *)pArg1, (UBYTE *)pArg2 + ArgVal3, MinCount);
-
- //Append NULL terminator to Dst
- *((UBYTE *)pArg1 + MinCount) = '\0';
-
- }
- break;
-
- case OP_SETOUT:
- {
- Status = cCmdExecuteSetOut(pCode);
- }
- break;
-
- case OP_ARRBUILD:
- {
- // Arg1 - Instruction Size in bytes
- // Arg2 - Dst
- // Arg3-N - Srcs
-
- Arg2 = pCode[2];
-
- NXT_ASSERT(cCmdDSType(Arg2) == TC_ARRAY);
-
- //Number of Srcs = total code words - 3 (account for opcode word, size, and Dst)
- //!!! Argument access like this is potentially unsafe.
- //A function/macro which checks proper encoding would be better
- SrcCount = (pCode[1] / 2) - 3;
-
- //Calculate Dst array count
- ArrayCount2 = 0;
- for (i = 0; i < SrcCount; i++)
- {
- TmpDSID = pCode[3 + i];
- NXT_ASSERT(cCmdIsDSElementIDSane(TmpDSID));
-
- //If the type descriptors are the same, then the input is an array, not a single element
- if (cCmdCompareDSType(Arg2, TmpDSID))
- {
- NXT_ASSERT(cCmdDSType(TmpDSID) == TC_ARRAY);
- ArrayCount2 += cCmdArrayCount(TmpDSID, 0);
- }
- else
- {
- //Assert that the output is an array of this input type
- NXT_ASSERT(cCmdCompareDSType(INC_ID(Arg2), TmpDSID));
- ArrayCount2++;
- }
- }
-
- //Allocate Dst array
- Status = cCmdDSArrayAlloc(Arg2, 0, ArrayCount2);
- if (IS_ERR(Status))
- return Status;
-
- DVIndex2 = cCmdGetDVIndex(Arg2, 0);
-
- //Move Src(s) to Dst
- DstIndex = 0;
- for (i = 0; i < SrcCount; i++)
- {
- TmpDSID = pCode[3 + i];
-
- //If the type descriptors are the same, then the input is an array, not a single element
- if (cCmdCompareDSType(Arg2, TmpDSID))
- {
- NXT_ASSERT(cCmdDSType(TmpDSID) == TC_ARRAY);
- TmpDVIndex = cCmdGetDVIndex(TmpDSID, 0);
- // if flat, use memmove, otherwise this stuff
- if(cCmdDSType(INC_ID(TmpDSID)) <= TC_LAST_INT_SCALAR)
- {
- memmove(VarsCmd.pDataspace + ARRAY_ELEM_OFFSET(DVIndex2, DstIndex), VarsCmd.pDataspace + DV_ARRAY[TmpDVIndex].Offset, (UWORD)(DV_ARRAY[TmpDVIndex].ElemSize * DV_ARRAY[TmpDVIndex].Count));
- DstIndex += DV_ARRAY[TmpDVIndex].Count;
- }
- else
- for (j = 0; j < DV_ARRAY[TmpDVIndex].Count; j++)
- {
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg2), ARRAY_ELEM_OFFSET(DVIndex2, DstIndex), INC_ID(TmpDSID), ARRAY_ELEM_OFFSET(TmpDVIndex, j));
- if (IS_ERR(Status))
- return Status;
- DstIndex++;
- }
- }
- else
- {
- //Assert that the output is an array of this input type
- NXT_ASSERT(cCmdCompareDSType(INC_ID(Arg2), TmpDSID));
- Status = cCmdInterpPolyUnop2(OP_MOV, INC_ID(Arg2), ARRAY_ELEM_OFFSET(DVIndex2, DstIndex), TmpDSID, 0);
- if (IS_ERR(Status))
- return Status;
- DstIndex++;
- }
- }
-
- NXT_ASSERT(DstIndex == ArrayCount2);
- }
- break;
-
- case OP_STRCAT:
- {
- // Arg1 - Instruction Size in bytes
- // Arg2 - Dst
- // Arg3-N - Srcs
-
- Arg2 = pCode[2];
-
- //Make sure Dst arg is a string
- NXT_ASSERT(cCmdDSType(Arg2) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg2)) == TC_UBYTE);
-
- //Number of Srcs = total code words - 3 (account for opcode word, size, and Dst)
- //!!! Argument access like this is potentially unsafe.
- //A function/macro which checks proper encoding would be better
- SrcCount = (pCode[1] / 2) - 3;
-
- //Calculate Dst array count
- ArrayCount2 = 0;
- for (i = 0; i < SrcCount; i++)
- {
- TmpDSID = pCode[3 + i];
- NXT_ASSERT(cCmdIsDSElementIDSane(TmpDSID));
-
- //Make sure Src arg is a string
- //!!! Type checks here should be richer to allow array of strings as input (match LabVIEW behavior)
- NXT_ASSERT(cCmdDSType(TmpDSID) == TC_ARRAY);
-
- if (cCmdDSType(INC_ID(TmpDSID)) != TC_UBYTE)
- {
- NXT_BREAK;
- return ERR_ARG;
- }
-
- ArrayCount3 = cCmdArrayCount(TmpDSID, 0);
- NXT_ASSERT(ArrayCount3 > 0);
- //Subtract NULL terminator from Src array count
- ArrayCount3--;
-
- //Increase Dst array count by Src array count
- ArrayCount2 += ArrayCount3;
- }
-
- //Add room for NULL terminator
- ArrayCount2++;
-
- //Allocate Dst array
- Status = cCmdDSArrayAlloc(Arg2, 0, ArrayCount2);
- if (IS_ERR(Status))
- return Status;
-
- //Move Src(s) to Dst
- DstIndex = 0;
- pArg2 = cCmdResolveDataArg(Arg2, 0, NULL);
- for (i = 0; i < SrcCount; i++)
- {
- TmpDSID = pCode[3 + i];
-
- pArg3 = cCmdResolveDataArg(TmpDSID, 0, NULL);
-
- ArrayCount3 = cCmdArrayCount(TmpDSID, 0);
- NXT_ASSERT(ArrayCount3 > 0);
- //Subtract NULL terminator from Src array count
- ArrayCount3--;
-
- memmove((UBYTE *)pArg2 + DstIndex, pArg3, ArrayCount3);
- DstIndex += ArrayCount3;
- }
-
- //Append NULL terminator to Dst
- *((UBYTE *)pArg2 + DstIndex) = '\0';
- DstIndex++;
-
- NXT_ASSERT(DstIndex == ArrayCount2);
- }
- break;
-
- case OP_UNFLATTEN:
- {
- //Arg1 - Dst
- //Arg2 - Err (output)
- //Arg3 - Src (byte stream)
- //Arg4 - Type
-
- //The Type arg is a preallocated structure of the exact size you
- //want to unflatten into. This allows us to support unflattening arbitrary types.
-
- //!!! Currently, both outputs must have valid destinations.
- // It would be trivial to handle NOT_A_DS_ID to avoid dummy
- // allocations when outputs are unused.
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Arg4 = pCode[4];
-
- //Move Type template to Dst
- //This provides a default value for Dst and makes sure Dst is properly sized
- Status= cCmdMove(Arg1, Arg4);
- if (IS_ERR(Status))
- return Status;
-
- //Resolve error data pointer
- pArg2 = cCmdResolveDataArg(Arg2, 0, &TypeCode2);
-
- //Make sure Arg3 is a String
- NXT_ASSERT(cCmdDSType(Arg3) == TC_ARRAY);
- NXT_ASSERT(cCmdDSType(INC_ID(Arg3)) == TC_UBYTE);
-
- ArrayCount3 = cCmdArrayCount(Arg3, 0);
- //Take NULL terminator out of count
- ArrayCount3--;
-
- Size = cCmdCalcFlattenedSize(Arg4, 0);
-
- //Check that we have a proper type template to unflatten into
- if (ArrayCount3 == Size)
- {
- pArg3 = cCmdResolveDataArg(Arg3, 0, NULL);
- Offset = 0;
- Status = cCmdUnflattenFromByteArray(pArg3, &Offset, Arg1, 0);
-
- //!!! Status ignored from cCmdUnflattenFromByteArray
- // If future revisions of this function provide better error checking,
- // Err arg should be conditionally set based on the result.
- //Unflatten succeeded; set Err arg to FALSE
- cCmdSetVal(pArg2, TypeCode2, FALSE);
-
- NXT_ASSERT(Offset == Size);
- }
- else
- {
- //Unflatten failed; set Err arg to TRUE
- cCmdSetVal(pArg2, TypeCode2, TRUE);
- }
- }
- break;
-
- case OP_STRINGTONUM:
- {
- float ArgValF;
- SLONG decimals= 0;
- UBYTE cont= TRUE;
- // Arg1 - Dst number (output)
- // Arg2 - Offset past match (output)
- // Arg3 - Src string
- // Arg4 - Offset
- // Arg5 - Default (type/value)
-
- //!!! Currently, both outputs must have valid destinations.
- // It would be trivial to handle NOT_A_DS_ID to avoid dummy
- // allocations when outputs are unused.
-
- Arg1 = pCode[1];
- Arg2 = pCode[2];
- Arg3 = pCode[3];
- Arg4 = pCode[4];
- Arg5 = pCode[5];
-
- pArg1 = cCmdResolveDataArg(Arg1, 0, &TypeCode1);
- pArg3 = cCmdResolveDataArg(Arg3, 0, &TypeCode3);
-
- if (Arg4 != NOT_A_DS_ID)
- ArgVal4 = cCmdGetScalarValFromDataArg(Arg4, 0);
- else //Offset input unwired
- ArgVal4 = 0;
-
- if (Arg5 != NOT_A_DS_ID)
- {
- pArg5 = cCmdResolveDataArg(Arg5, 0, &TypeCode5);
- ArgVal5 = cCmdGetVal(pArg5, TypeCode5);
- }
- else //Default input unwired
- {
- ArgVal5 = 0;
- }
-
- //Read number from string
- if (sscanf(((PSZ)pArg3 + ArgVal4), "%f", &ArgValF) == 1)
- {
- i = (UWORD)ArgVal4;
- //Scan until we see the number, consumes negative sign too
- while ((((UBYTE *)pArg3)[i] < '0') || (((UBYTE *)pArg3)[i] > '9'))
- i++;
-
- //Scan until we get past the number and no more than one decimal
- while (cont) {
- if ((((UBYTE *)pArg3)[i] >= '0') && (((UBYTE *)pArg3)[i] <= '9'))
- i++;
- else if(((UBYTE *)pArg3)[i] == '.' && !decimals) {
- i++;
- decimals++;
- }
- else
- cont= FALSE;
- }
- ArgVal2 = i;
- }
- else
- {
- //Number wasn't found in string, use defaults
- ArgValF = ArgVal5;
- ArgVal2 = 0;
- }
-
- //Set outputs
- cCmdSetValFlt(pArg1, TypeCode1, ArgValF);
- cCmdSetScalarValFromDataArg(Arg2, ArgVal2);
- }
- break;
-
- default:
- {
- //Fatal error: Unrecognized instruction
- NXT_BREAK;
- Status = ERR_INSTR;
- }
- break;
- }
-
- return (Status);
-}
-
-
-//
-//Support functions for lowspeed (I2C devices, i.e. ultrasonic sensor) communications
-//
-
-//Simple lookup table for pMapLowSpeed->ChannelState[Port] values
-//This is used to keep VM status code handling consistent
-//...and ChannelState gives us too much information, anyway...
-static const NXT_STATUS MapLStoVMStat[6] =
-{
- NO_ERR, //LOWSPEED_IDLE,
- STAT_COMM_PENDING, //LOWSPEED_INIT,
- STAT_COMM_PENDING, //LOWSPEED_LOAD_BUFFER,
- STAT_COMM_PENDING, //LOWSPEED_COMMUNICATING,
- ERR_COMM_BUS_ERR, //LOWSPEED_ERROR,
- STAT_COMM_PENDING, //LOWSPEED_DONE (really means c_lowspeed state machine is resetting)
-};
-
-
-//cCmdLSCheckStatus
-//Check lowspeed port status, optionally returning bytes available in the buffer for reading
-NXT_STATUS cCmdLSCheckStatus(UBYTE Port)
-{
- if (Port >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- return (ERR_COMM_CHAN_INVALID);
- }
-
- INPUTSTRUCT * pInput = &(pMapInput->Inputs[Port]);
-
- //If port is not configured properly ahead of time, report that error
- //!!! This seems like the right policy, but may restrict otherwise valid read operations...
- if (!(pInput->SensorType == LOWSPEED_9V || pInput->SensorType == LOWSPEED)
- || !(pInput->InvalidData == FALSE))
- {
- return (ERR_COMM_CHAN_NOT_READY);
- }
-
- return (MapLStoVMStat[pMapLowSpeed->ChannelState[Port]]);
-}
-
-//cCmdLSCalcBytesReady
-//Calculate true number of bytes available in the inbound LS buffer
-UBYTE cCmdLSCalcBytesReady(UBYTE Port)
-{
- SLONG Tmp;
-
- //Expect callers to validate Port, but short circuit here to be safe.
- if (Port >= NO_OF_LOWSPEED_COM_CHANNEL)
- return 0;
-
- LSBUF * pInBuf = &(pMapLowSpeed->InBuf[Port]);
-
- //Normally, bytes available is a simple difference.
- Tmp = pInBuf->InPtr - pInBuf->OutPtr;
-
- //If InPtr is actually behind OutPtr, circular buffer has wrapped. Account for wrappage...
- if (Tmp < 0)
- Tmp = (pInBuf->InPtr + (SIZE_OF_LSBUF - pInBuf->OutPtr));
-
- return (UBYTE)(Tmp);
-}
-
-//cCmdLSWrite
-//Write BufLength bytes into specified port's lowspeed buffer and kick off comm process to device
-NXT_STATUS cCmdLSWrite(UBYTE Port, UBYTE BufLength, UBYTE *pBuf, UBYTE ResponseLength)
-{
- if (Port >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- return (ERR_COMM_CHAN_INVALID);
- }
-
- if (BufLength > SIZE_OF_LSBUF || ResponseLength > SIZE_OF_LSBUF)
- {
- return (ERR_INVALID_SIZE);
- }
-
- INPUTSTRUCT * pInput = &(pMapInput->Inputs[Port]);
- UBYTE * pChState = &(pMapLowSpeed->ChannelState[Port]);
- LSBUF * pOutBuf = &(pMapLowSpeed->OutBuf[Port]);
-
- //Only start writing process if port is properly configured and c_lowspeed module is ready
- if ((pInput->SensorType == LOWSPEED_9V || pInput->SensorType == LOWSPEED)
- && (pInput->InvalidData == FALSE)
- && (*pChState == LOWSPEED_IDLE) || (*pChState == LOWSPEED_ERROR))
- {
- pOutBuf->InPtr = 0;
- pOutBuf->OutPtr = 0;
-
- memcpy(pOutBuf->Buf, pBuf, BufLength);
- pOutBuf->InPtr = (UBYTE)BufLength;
-
- pMapLowSpeed->InBuf[Port].BytesToRx = ResponseLength;
-
- *pChState = LOWSPEED_INIT;
- pMapLowSpeed->State |= (COM_CHANNEL_ONE_ACTIVE << Port);
-
- return (NO_ERR);
- }
- else
- {
- //!!! Would be more consistent to return STAT_COMM_PENDING if c_lowspeed is busy
- return (ERR_COMM_CHAN_NOT_READY);
- }
-}
-
-
-//cCmdLSRead
-//Read BufLength bytes from specified port's lowspeed buffer
-NXT_STATUS cCmdLSRead(UBYTE Port, UBYTE BufLength, UBYTE * pBuf)
-{
- UBYTE BytesReady, BytesToRead;
-
- if (Port >= NO_OF_LOWSPEED_COM_CHANNEL)
- {
- return (ERR_COMM_CHAN_INVALID);
- }
-
- if (BufLength > SIZE_OF_LSBUF)
- {
- return (ERR_INVALID_SIZE);
- }
-
- BytesReady = cCmdLSCalcBytesReady(Port);
-
- if (BufLength > BytesReady)
- {
- return (ERR_COMM_CHAN_NOT_READY);
- }
-
- BytesToRead = BufLength;
-
- LSBUF * pInBuf = &(pMapLowSpeed->InBuf[Port]);
-
- //If the bytes we want to read wrap around the end, we must first read the end, then reset back to the beginning
- if (pInBuf->OutPtr + BytesToRead >= SIZE_OF_LSBUF)
- {
- BytesToRead = SIZE_OF_LSBUF - pInBuf->OutPtr;
- memcpy(pBuf, pInBuf->Buf + pInBuf->OutPtr, BytesToRead);
- pInBuf->OutPtr = 0;
- pBuf += BytesToRead;
- BytesToRead = BufLength - BytesToRead;
- }
-
- memcpy(pBuf, pInBuf->Buf + pInBuf->OutPtr, BytesToRead);
- pInBuf->OutPtr += BytesToRead;
-
- return (NO_ERR);
-}
-
-
-//
-//Wrappers for OP_SYSCALL
-//
-
-//
-//cCmdWrapFileOpenRead
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 return
-//ArgV[2]: Filename, CStr
-//ArgV[3]: Length, U32 return
-NXT_STATUS cCmdWrapFileOpenRead(UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- LStatus = pMapLoader->pFunc(OPENREAD, ArgV[2], NULL, (ULONG *)ArgV[3]);
-
- //Add entry into FileHandleTable
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)][0] = 'r';
- strcpy((PSZ)(VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)] + 1), (PSZ)(ArgV[2]));
- }
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
- //File handle in low byte of LStatus
- *(ArgV[1]) = LOADER_HANDLE(LStatus);
-
- return NO_ERR;
-}
-
-//cCmdWrapFileOpenWrite
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 return
-//ArgV[2]: Filename, CStr
-//ArgV[3]: Length, U32 return
-NXT_STATUS cCmdWrapFileOpenWrite(UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- LStatus = pMapLoader->pFunc(OPENWRITEDATA, ArgV[2], NULL, (ULONG *)ArgV[3]);
-
- //Add entry into FileHandleTable
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)][0] = 'w';
- strcpy((PSZ)(VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)] + 1), (PSZ)(ArgV[2]));
- }
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
- //File handle in low byte of LStatus
- *(ArgV[1]) = LOADER_HANDLE(LStatus);
-
- return NO_ERR;
-}
-
-//cCmdWrapFileOpenAppend
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 return
-//ArgV[2]: Filename, CStr
-//ArgV[3]: Length Remaining, U32 return
-NXT_STATUS cCmdWrapFileOpenAppend(UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- LStatus = pMapLoader->pFunc(OPENAPPENDDATA, ArgV[2], NULL, (ULONG *)ArgV[3]);
-
- //Add entry into FileHandleTable
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)][0] = 'w';
- strcpy((PSZ)(VarsCmd.FileHandleTable[LOADER_HANDLE(LStatus)] + 1), (PSZ)(ArgV[2]));
- }
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
- //File handle in low byte of LStatus
- *(ArgV[1]) = LOADER_HANDLE(LStatus);
-
- return NO_ERR;
-}
-
-//cCmdWrapFileRead
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 in/out
-//ArgV[2]: Buffer, CStr out
-//ArgV[3]: Length, U32 in/out
-NXT_STATUS cCmdWrapFileRead(UBYTE * ArgV[])
-{
- NXT_STATUS Status = NO_ERR;
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- //Size Buffer to Length
- //Add room for null terminator to length
- Status = cCmdDVArrayAlloc(DVIndex, (UWORD)(*(ULONG *)ArgV[3] + 1));
- if (IS_ERR(Status))
- return Status;
-
- ArgV[2] = cCmdDVPtr(DVIndex);
- LStatus = pMapLoader->pFunc(READ, ArgV[1], ArgV[2], (ULONG *)ArgV[3]);
-
- //Tack on NULL terminator
- //Note that loader code may have adjusted length (*ArgV[3]) if all requested data was not available
- //!!! Better solution would be to resize buffer to new length + 1,
- // but then you must also be wary of side effects if resize allocation fails!
- *(ArgV[2] + *(ULONG *)ArgV[3]) = '\0';
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
- //File handle in low byte of LStatus
- *(ArgV[1]) = LOADER_HANDLE(LStatus);
-
- return Status;
-}
-
-//cCmdWrapFileWrite
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 in/out
-//ArgV[2]: Buffer, CStr
-//ArgV[3]: Length, U32 return
-NXT_STATUS cCmdWrapFileWrite(UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- LStatus = pMapLoader->pFunc(WRITE, ArgV[1], ArgV[2], (ULONG *)ArgV[3]);
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
- //File handle in low byte of LStatus
- *(ArgV[1]) = LOADER_HANDLE(LStatus);
-
- return NO_ERR;
-}
-
-//cCmdWrapFileClose
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8
-NXT_STATUS cCmdWrapFileClose(UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
-
- //!!! This bounds check also exists in dLoaderCloseHandle(), but we provide an explicit error code
- if (*(ArgV[1]) >= MAX_HANDLES)
- {
- *((UWORD *)ArgV[0]) = ILLEGALHANDLE;
- return NO_ERR;
- }
-
- LStatus = pMapLoader->pFunc(CLOSE, ArgV[1], NULL, NULL);
-
- //Clear entry in FileHandleTable
- memset(VarsCmd.FileHandleTable[*(ArgV[1])], 0, FILENAME_LENGTH + 2);
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
-
- return NO_ERR;
-}
-
-//cCmdWrapFileResolveHandle
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: File Handle, U8 return
-//ArgV[2]: Write Handle?, Bool return
-//ArgV[3]: Filename, CStr
-NXT_STATUS cCmdWrapFileResolveHandle (UBYTE * ArgV[])
-{
- UBYTE i;
- DV_INDEX DVIndex;
-
- //Resolve array argument
- DVIndex = *(DV_INDEX *)(ArgV[3]);
- ArgV[3] = cCmdDVPtr(DVIndex);
-
- for (i = 0; i < MAX_HANDLES; i++)
- {
- if (strcmp((PSZ)(ArgV[3]), (PSZ)(VarsCmd.FileHandleTable[i] + 1)) == 0)
- {
- *(ArgV[2]) = (VarsCmd.FileHandleTable[i][0] == 'w');
- break;
- }
- }
-
- if (i == MAX_HANDLES)
- {
- i = NOT_A_HANDLE;
- *((UWORD *)ArgV[0]) = HANDLEALREADYCLOSED;
- }
- else
- {
- *((UWORD *)ArgV[0]) = SUCCESS;
- }
-
- *(ArgV[1]) = i;
-
- return NO_ERR;
-}
-
-
-//cCmdWrapFileRename
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: Old Filename, CStr
-//ArgV[2]: New Filename, CStr
-NXT_STATUS cCmdWrapFileRename (UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- ULONG Tmp;
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- ArgV[1] = cCmdDVPtr(DVIndex);
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- //!!! Tmp placeholder passed into loader code to avoid illegal dereferencing.
- LStatus = pMapLoader->pFunc(RENAMEFILE, ArgV[1], ArgV[2], &Tmp);
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
-
- return NO_ERR;
-}
-
-
-//cCmdWrapFileDelete
-//ArgV[0]: (Function return) Loader status, U16 return
-//ArgV[1]: Filename, CStr
-NXT_STATUS cCmdWrapFileDelete (UBYTE * ArgV[])
-{
- LOADER_STATUS LStatus;
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- ArgV[1] = cCmdDVPtr(DVIndex);
-
- LStatus = pMapLoader->pFunc(DELETE, ArgV[1], NULL, NULL);
-
- //Status code in high byte of LStatus
- *((UWORD *)ArgV[0]) = LOADER_ERR(LStatus);
-
- return NO_ERR;
-}
-
-//
-//cCmdWrapSoundPlayFile
-//ArgV[0]: (Return value) Status code, SBYTE
-//ArgV[1]: Filename, CStr
-//ArgV[2]: Loop?, UBYTE (bool)
-//ArgV[3]: Volume, UBYTE
-//
-NXT_STATUS cCmdWrapSoundPlayFile(UBYTE * ArgV[])
-{
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- UBYTE sndVol= *(ArgV[3]);
- ArgV[1] = cCmdDVPtr(DVIndex);
-
- //!!! Should check filename and/or existence and return error before proceeding
- strncpy((PSZ)(pMapSound->SoundFilename), (PSZ)(ArgV[1]), FILENAME_LENGTH);
-
- if (*(ArgV[2]) == TRUE)
- pMapSound->Mode = SOUND_LOOP;
- else
- pMapSound->Mode = SOUND_ONCE;
-
- if(sndVol > 4)
- sndVol= 4;
- pMapSound->Volume = sndVol;
- //SampleRate of '0' means "let file specify SampleRate"
- pMapSound->SampleRate = 0;
- pMapSound->Flags |= SOUND_UPDATE;
-
- *((SBYTE*)(ArgV[0])) = (NO_ERR);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapSoundPlayTone
-//ArgV[0]: (Return value) Status code, SBYTE
-//ArgV[1]: Frequency, UWORD
-//ArgV[2]: Duration, UWORD
-//ArgV[3]: Loop?, UBYTE (Boolean)
-//ArgV[4]: Volume, UBYTE
-//
-NXT_STATUS cCmdWrapSoundPlayTone(UBYTE * ArgV[])
-{
- UBYTE sndVol= *(ArgV[4]);
- pMapSound->Freq = *(UWORD*)(ArgV[1]);
- pMapSound->Duration = *(UWORD*)(ArgV[2]);
- if(sndVol > 4)
- sndVol= 4;
- pMapSound->Volume = sndVol;
- pMapSound->Flags |= SOUND_UPDATE;
-
- if (*(ArgV[3]) == TRUE)
- pMapSound->Mode = SOUND_TONE | SOUND_LOOP;
- else
- pMapSound->Mode = SOUND_TONE;
-
- *((SBYTE*)(ArgV[0])) = (NO_ERR);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapSoundGetState
-//ArgV[0]: (Return value) sound module state, UBYTE
-//ArgV[1]: Flags, UBYTE
-//
-NXT_STATUS cCmdWrapSoundGetState(UBYTE * ArgV[])
-{
- *(ArgV[0]) = pMapSound->State;
- *(ArgV[1]) = pMapSound->Flags;
- return (NO_ERR);
-}
-
-//
-//cCmdWrapSoundSetState
-//ArgV[0]: (Return value) sound module state, UBYTE
-//ArgV[1]: State, UBYTE
-//ArgV[2]: Flags, UBYTE
-//
-NXT_STATUS cCmdWrapSoundSetState(UBYTE * ArgV[])
-{
- pMapSound->State = *(ArgV[1]);
- //Return same state we just set, mostly for interface consistency
- *(ArgV[0]) = pMapSound->State;
-
- //OR in provided flags (usually 0)
- pMapSound->Flags |= *(ArgV[2]);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapReadButton
-//ArgV[0]: (Function return) Status code, SBYTE
-//ArgV[1]: Index (U8)
-//ArgV[2]: Pressed (bool)
-//ArgV[3]: Count (U8) (count of press-then-release cycles)
-//ArgV[4]: ResetCount? (bool in)
-//
-NXT_STATUS cCmdWrapReadButton(UBYTE * ArgV[])
-{
- UBYTE btnIndex;
-
- btnIndex = *((UBYTE*)(ArgV[1]));
-
- if (btnIndex < NO_OF_BTNS)
- {
- //Set pressed boolean output
- if (pMapButton->State[btnIndex] & PRESSED_STATE)
- *(ArgV[2]) = TRUE;
- else
- *(ArgV[2]) = FALSE;
-
- //Set count output
- *(ArgV[3]) = (UBYTE)(pMapButton->BtnCnt[btnIndex].RelCnt);
-
- //Optionally reset internal count
- if (*(ArgV[4]) != 0)
- {
- pMapButton->BtnCnt[btnIndex].RelCnt = 0;
- //Need to clear short and long counts too, because RelCnt depends on them. No known side effects.
- pMapButton->BtnCnt[btnIndex].ShortRelCnt = 0;
- pMapButton->BtnCnt[btnIndex].LongRelCnt = 0;
- }
-
- // Set status code 'OK'
- *((SBYTE*)(ArgV[0])) = NO_ERR;
- }
- else
- {
- //Bad button index specified, return error and default outputs
- *((SBYTE*)(ArgV[0])) = ERR_INVALID_PORT;
- *(ArgV[2]) = FALSE;
- *(ArgV[3]) = 0;
- }
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommLSWrite
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: Buffer to send, UBYTE array, only SIZE_OF_LSBUF bytes will be used
-//ArgV[3]: ResponseLength, UBYTE, specifies expected bytes back from slave device
-//
-NXT_STATUS cCmdWrapCommLSWrite(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE Port = *(ArgV[1]);
- UBYTE * pBuf;
- UWORD BufLength;
- UBYTE ResponseLength = *(ArgV[3]);
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- pBuf = cCmdDVPtr(DVIndex);
- BufLength = DV_ARRAY[DVIndex].Count;
-
- *pReturnVal = cCmdLSWrite(Port, (UBYTE)BufLength, pBuf, ResponseLength);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommLSCheckStatus
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: BytesReady, UBYTE
-//
-NXT_STATUS cCmdWrapCommLSCheckStatus(UBYTE * ArgV[])
-{
- UBYTE Port = *(ArgV[1]);
-
- *((SBYTE*)(ArgV[0])) = cCmdLSCheckStatus(Port);
- *((UBYTE*)(ArgV[2])) = cCmdLSCalcBytesReady(Port);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommLSRead
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: Buffer for data, UBYTE array, max SIZE_OF_LSBUF bytes will be written
-//ArgV[3]: BufferLength, UBYTE, specifies size of buffer requested
-//
-NXT_STATUS cCmdWrapCommLSRead(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE Port = *(ArgV[1]);
- UBYTE * pBuf;
- UBYTE BufLength = *(ArgV[3]);
- UBYTE BytesToRead;
- DV_INDEX DVIndex = *(DV_INDEX *)(ArgV[2]);
- NXT_STATUS AllocStatus;
-
- *pReturnVal = cCmdLSCheckStatus(Port);
- BytesToRead = cCmdLSCalcBytesReady(Port);
-
- //If channel is OK and has data ready for us, put the data into outgoing buffer
- if (!IS_ERR(*pReturnVal) && BytesToRead > 0)
- {
- //Limit buffer to available data
- if (BufLength > BytesToRead)
- BufLength = BytesToRead;
-
- AllocStatus = cCmdDVArrayAlloc(DVIndex, BufLength);
- if (IS_ERR(AllocStatus))
- return (AllocStatus);
-
- pBuf = cCmdDVPtr(DVIndex);
- *pReturnVal = cCmdLSRead(Port, BufLength, pBuf);
- }
- //Else, the channel has an error and/or there's no data to read; clear the output array
- else
- {
- AllocStatus = cCmdDVArrayAlloc(DVIndex, 0);
- if (IS_ERR(AllocStatus))
- return (AllocStatus);
- }
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapRandomNumber
-//ArgV[0]: (return) Random number, SWORD
-//
-NXT_STATUS cCmdWrapRandomNumber(UBYTE * ArgV[])
-{
- static UBYTE count = 0;
- SWORD random;
-
- if (count == 0)
- srand(dTimerRead());
-
- if (count > 20)
- count = 0;
- else
- count++;
-
- //!!! IAR's implementation of the rand() library function returns signed values, and we want it that way.
- //Some stdlib implementations may return only positive numbers, so be wary if this code is ported.
- random = rand();
-
- *((SWORD *)ArgV[0]) = random;
-
- return NO_ERR;
-}
-
-//
-//cCmdWrapGetStartTick
-//ArgV[0]: (return) Start Tick, ULONG
-//
-NXT_STATUS cCmdWrapGetStartTick(UBYTE * ArgV[])
-{
- *((ULONG *)ArgV[0]) = VarsCmd.StartTick;
- return NO_ERR;
-}
-
-//
-//cCmdWrapMessageWrite
-//ArgV[0]: (return) Error Code, SBYTE (NXT_STATUS)
-//ArgV[1]: QueueID, UBYTE
-//ArgV[2]: Message, CStr
-//
-NXT_STATUS cCmdWrapMessageWrite(UBYTE * ArgV[])
-{
- NXT_STATUS Status = NO_ERR;
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- ArgV[2] = cCmdDVPtr(DVIndex);
-
- Status = cCmdMessageWrite(*(UBYTE *)(ArgV[1]), ArgV[2], DV_ARRAY[DVIndex].Count);
-
- *(SBYTE *)(ArgV[0]) = Status;
-
- if (IS_FATAL(Status))
- return Status;
- else
- return (NO_ERR);
-}
-
-
-
-//
-//cCmdWrapColorSensorRead
-//ArgV[0]: (return) Error code, SBYTE
-//ArgV[1]: Port, UBYTE
-//ArgV[2]: SensorValue, SWORD
-//ArgV[3]: RawArray, UWORD[NO_OF_COLORS]
-//ArgV[4]: NormalizedArray, UWORD[NO_OF_COLORS]
-//ArgV[5]: ScaledArray, SWORD[NO_OF_COLORS]
-//ArgV[6]: InvalidData, UBYTE
-//
-NXT_STATUS cCmdWrapColorSensorRead (UBYTE * ArgV[])
-{
- DV_INDEX DVIndex;
- NXT_STATUS Status = NO_ERR;
- //Resolve return val arguments
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- //Resolve Port argument
- UBYTE Port = *(UBYTE*)(ArgV[1]);
- //Resolve SensorValue
- SWORD SensorValue = *(SWORD*)(ArgV[2]);
- //Resolve RawArray as array
- DVIndex = *(DV_INDEX*)(ArgV[3]);
- NXT_ASSERT(IS_DV_INDEX_SANE(DestDVIndex));
- Status= cCmdDVArrayAlloc(DVIndex, NO_OF_COLORS);
- if (IS_ERR(Status))
- return (Status);
- ArgV[3] = cCmdDVPtr (DVIndex);
- //Resolve NormalizedArray as array
- DVIndex = *(DV_INDEX*)(ArgV[4]);
- NXT_ASSERT(IS_DV_INDEX_SANE(DestDVIndex));
- Status= cCmdDVArrayAlloc(DVIndex, NO_OF_COLORS);
- if (IS_ERR(Status))
- return (Status);
- ArgV[4] = cCmdDVPtr (DVIndex);
- //Resolve ScaledArray as array
- DVIndex = *(DV_INDEX*)(ArgV[5]);
- NXT_ASSERT(IS_DV_INDEX_SANE(DestDVIndex));
- Status= cCmdDVArrayAlloc(DVIndex, NO_OF_COLORS);
- if (IS_ERR(Status))
- return (Status);
- ArgV[5] = cCmdDVPtr (DVIndex);
- //Resolve InvalidData
- UBYTE InvalidData = *(UBYTE*)(ArgV[6]);
-
- //call implementation with unwrapped parameters
- *pReturnVal = cCmdColorSensorRead (Port, &SensorValue, (UWORD*)ArgV[3], (UWORD*)ArgV[4], (SWORD*)ArgV[5], &InvalidData);
-
- *(ArgV[2]) = SensorValue;
- *(ArgV[6]) = InvalidData;
-
- if (IS_ERR(*pReturnVal)){
- return (*pReturnVal);
- }
- return NO_ERR;
-}
-
-
-#define UNPACK_STATUS(StatusWord) ((SBYTE)(StatusWord))
-
-NXT_STATUS cCmdBTCheckStatus(UBYTE Connection)
-{
- //If specified connection is invalid, return error code to the user.
- if (Connection >= SIZE_OF_BT_CONNECT_TABLE)
- {
- return (ERR_INVALID_PORT);
- }
-
- //INPROGRESS means a request is currently pending completion by the comm module
- if (VarsCmd.CommStat == INPROGRESS)
- {
- return (STAT_COMM_PENDING);
- }
- //Translate BTBUSY to ERR_COMM_CHAN_NOT_READY
- //And check if specified connection is indeed configured
- else if (VarsCmd.CommStat == (SWORD)BTBUSY
- || (pMapComm->BtConnectTable[Connection].Name[0]) == '\0')
- {
- return (ERR_COMM_CHAN_NOT_READY);
- }
- else
- {
- return (UNPACK_STATUS(VarsCmd.CommStat));
- }
-}
-
-//Default packet to send for a remote MESSAGE_READ command.
-//3rd byte must be replaced with remote mailbox (QueueID)
-//4th byte must be replaced with local mailbox
-static UBYTE RemoteMsgReadPacket[5] = {0x00, 0x13, 0xFF, 0xFF, 0x01};
-
-//
-//cCmdWrapMessageRead
-//ArgV[0]: (return) Error Code, SBYTE (NXT_STATUS)
-//ArgV[1]: QueueID, UBYTE
-//ArgV[2]: Remove, UBYTE
-//ArgV[3]: (return) Message, CStr
-//
-NXT_STATUS cCmdWrapMessageRead(UBYTE * ArgV[])
-{
- NXT_STATUS Status = NO_ERR;
- NXT_STATUS AllocStatus = NO_ERR;
- UBYTE QueueID = *(UBYTE *)(ArgV[1]);
- DV_INDEX DestDVIndex = *(DV_INDEX *)(ArgV[3]);
- UWORD MessageSize;
- UBYTE i;
-
- NXT_ASSERT(IS_DV_INDEX_SANE(DestDVIndex));
-
- //Check Next Message's size
- Status = cCmdMessageGetSize(QueueID, &MessageSize);
-
- //If there is a valid message in local mailbox, read it
- if (!IS_ERR(Status) && MessageSize > 0 )
- {
- //!!! Also check for EMPTY_MAILBOX status?
- //Size destination string
- AllocStatus = cCmdDVArrayAlloc(DestDVIndex, MessageSize);
- if (IS_ERR(AllocStatus))
- return AllocStatus;
-
- //Get Message
- //!!! Should more aggressively enforce null termination before blindly copying to dataspace
- Status = cCmdMessageRead(QueueID, cCmdDVPtr(DestDVIndex), MessageSize, *(ArgV[2]));
- }
- else
- {
- //Clear destination string
- AllocStatus = cCmdDVArrayAlloc(DestDVIndex, 1);
- if (IS_ERR(AllocStatus))
- return AllocStatus;
-
- //Successful allocation, make sure first byte is null terminator
- *(UBYTE*)(cCmdDVPtr(DestDVIndex)) = '\0';
- }
-
- //If there were no local messages, see if there are any waiting in our slaves' outboxes
- if (Status == STAT_MSG_EMPTY_MAILBOX && QueueID < INCOMING_QUEUE_COUNT)
- {
- //If there's an old error code hanging around, clear it before proceeding.
- //!!! Clearing error here means bytecode status checking loops could get false SUCCESS results?
- if (VarsCmd.CommStat < 0)
- VarsCmd.CommStat = SUCCESS;
-
- //Search through possible slaves, looking for valid connection
- for (i = 0; i < SIZE_OF_BT_CONNECT_TABLE - 1; i++)
- {
- //Advance CommCurrConnection and limit to 1, 2, or 3 (only slave connection slots are checked)
- VarsCmd.CommCurrConnection++;
- if (VarsCmd.CommCurrConnection == SIZE_OF_BT_CONNECT_TABLE)
- VarsCmd.CommCurrConnection = 1;
-
- if (cCmdBTCheckStatus(VarsCmd.CommCurrConnection) == NO_ERR)
- break;
- }
-
- //If there is at least one configured slave connection, make a remote read request
- if (i < SIZE_OF_BT_CONNECT_TABLE - 1)
- {
- //Outgoing QueueID on slave device is the local QueueID + INCOMING_QUEUE_COUNT
- RemoteMsgReadPacket[2] = QueueID + INCOMING_QUEUE_COUNT;
- RemoteMsgReadPacket[3] = QueueID;
-
- //Request comm module to send assembled packet and not go idle until response comes back (or error)
- pMapComm->pFunc(SENDDATA, sizeof(RemoteMsgReadPacket), VarsCmd.CommCurrConnection, TRUE, RemoteMsgReadPacket, (UWORD*)&(VarsCmd.CommStat));
-
- //Read status back after SENDDATA call so bytecode gets STAT_COMM_PENDING or error
- Status = cCmdBTCheckStatus(VarsCmd.CommCurrConnection);
-
- //If our request was accepted, set the DirtyComm flag so stream will get cleaned up later
- if (Status == STAT_COMM_PENDING)
- VarsCmd.DirtyComm = TRUE;
- }
- }
-
- *(SBYTE *)(ArgV[0]) = Status;
- if (IS_FATAL(Status))
- return Status;
- else
- return (NO_ERR);
-}
-
-
-//
-//cCmdWrapCommBTCheckStatus
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Connection index, 0-3
-//
-NXT_STATUS cCmdWrapCommBTCheckStatus(UBYTE * ArgV[])
-{
- *((SBYTE*)(ArgV[0])) = cCmdBTCheckStatus(*(ArgV[1]));
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommBTWrite
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Connection index, 0-3
-//ArgV[2]: Buffer
-//
-NXT_STATUS cCmdWrapCommBTWrite(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE Connection = *(ArgV[1]);
- UBYTE * pBuf;
- UWORD BufLength;
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- pBuf = cCmdDVPtr(DVIndex);
-
- BufLength = DV_ARRAY[DVIndex].Count;
-
- //If there's an old error code hanging around, clear it before proceeding.
- if (VarsCmd.CommStat < 0)
- VarsCmd.CommStat = SUCCESS;
-
- //!!! Only first 256 bytes could possibly make it through! Should return error on longer input?
- //!!! Not requesting a wait-for-response because only known use doesn't read responses.
- pMapComm->pFunc(SENDDATA, (UBYTE)BufLength, Connection, FALSE, pBuf, (UWORD*)&(VarsCmd.CommStat));
-
- //!!! Reasonable to wrap below code in cCmdCommBTCheckStatus?
- //INPROGRESS means our request was accepted by His Funkiness of pFunc
- if (VarsCmd.CommStat == (SWORD)INPROGRESS)
- {
- *pReturnVal = STAT_COMM_PENDING;
-
- //Set DirtyComm flag so stream is reset after program ends
- VarsCmd.DirtyComm = TRUE;
- }
- //Translate BTBUSY to ERR_COMM_CHAN_NOT_READY
- else if (VarsCmd.CommStat == (SWORD)BTBUSY)
- {
- *pReturnVal = ERR_COMM_CHAN_NOT_READY;
- }
- else
- {
- *pReturnVal = UNPACK_STATUS(VarsCmd.CommStat);
- }
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommBTRead
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Count to read
-//ArgV[2]: Buffer
-//
-NXT_STATUS cCmdWrapCommBTRead(UBYTE * ArgV[])
-{
- //SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- //UBYTE * pBuf = (ArgV[2]);
- //!!! should provide length and/or connection to read?
-
- //!!! This syscall is not implemented; return fatal error.
- return (ERR_INSTR);
-}
-
-//
-//cCmdWrapKeepAlive
-//ArgV[0]: (return) Current timer limit in ms, ULONG
-//
-NXT_STATUS cCmdWrapKeepAlive(UBYTE * ArgV[])
-{
- pMapUi->Flags |= UI_RESET_SLEEP_TIMER;
-
- //Convert UI's minute-based timeout value to millisecs
- //Milliseconds are the "natural" time unit in user-land.
- *(ULONG*)(ArgV[0]) = (pMapUi->SleepTimeout * 60 * 1000);
-
- return (NO_ERR);
-}
-
-
-
-#define MAX_IOM_BUFFER_SIZE 64
-//
-//cCmdWrapIOMapRead
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Module name, CStr
-//ArgV[2]: Offset, UWORD
-//ArgV[3]: Count, UWORD
-//ArgV[4]: Buffer, UBYTE array
-//
-NXT_STATUS cCmdWrapIOMapRead(UBYTE * ArgV[])
-{
- UWORD LStatus;
- NXT_STATUS Status;
-
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UWORD Offset = *(UWORD*)(ArgV[2]);
- //Our copy of 'Count' must be a ULONG to match the loader interface
- ULONG Count = *(UWORD*)(ArgV[3]);
-
- DV_INDEX DVIndex;
-
- //Buffer for return of FINDFIRSTMODULE call, structure defined in protocol doc
- //We need it to transfer the ModuleID to the IOMAPREAD call
- UBYTE FindBuffer[FILENAME_LENGTH + 10];
- //Buffer to store data and offset in for IOMAPREAD call
- //!!! Constant size means only limited reads and writes
- UBYTE DataBuffer[MAX_IOM_BUFFER_SIZE + 2];
-
- if (Count > MAX_IOM_BUFFER_SIZE)
- {
- //Request to read too much data at once; clear buffer, return error.
- DVIndex = *(DV_INDEX *)(ArgV[4]);
- *pReturnVal = cCmdDVArrayAlloc(DVIndex, 0);
- if (IS_ERR(*pReturnVal))
- return (*pReturnVal);
-
- *pReturnVal = ERR_INVALID_SIZE;
- return (NO_ERR);
- }
-
- //Resolve module name
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- ArgV[1] = cCmdDVPtr(DVIndex);
-
- //Find module by name. Note that wildcards are accepted, but only first match matters.
- LStatus = pMapLoader->pFunc(FINDFIRSTMODULE, ArgV[1], FindBuffer, NULL);
-
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- //Module was found, transfer Offset into first two bytes of DataBuffer and attempt to read
- *(UWORD*)(DataBuffer) = Offset;
- LStatus = pMapLoader->pFunc(IOMAPREAD, &(FindBuffer[FILENAME_LENGTH + 1]), DataBuffer, &Count);
-
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- //No error from IOMAPREAD, so copy the data into VM's dataspace
- //Size destination array
- DVIndex = *(DV_INDEX *)(ArgV[4]);
- Status = cCmdDVArrayAlloc(DVIndex, (UWORD)Count);
- if (IS_ERR(Status))
- {
- //Alloc failed, so close handle and return
- pMapLoader->pFunc(CLOSEMODHANDLE, NULL, NULL, NULL);
- return (Status);
- }
-
- //Alloc succeeded, so resolve and copy away
- ArgV[4] = cCmdDVPtr(DVIndex);
- memcpy(ArgV[4], &(DataBuffer[2]), Count);
- }
- }
-
- *pReturnVal = LOADER_ERR_BYTE(LStatus);
-
- pMapLoader->pFunc(CLOSEMODHANDLE, NULL, NULL, NULL);
- return (NO_ERR);
-}
-
-//
-//cCmdWrapIOMapWrite
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Module name, CStr
-//ArgV[2]: Offset, UWORD
-//ArgV[3]: Buffer, UBYTE array
-//
-NXT_STATUS cCmdWrapIOMapWrite(UBYTE * ArgV[])
-{
- UWORD LStatus;
-
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UWORD Offset = *(UWORD*)(ArgV[2]);
-
- //Our copy of 'Count' must be a ULONG to match the loader interface
- ULONG Count;
- DV_INDEX DVIndex;
-
- //Buffer for return of FINDFIRSTMODULE call, structure defined in protocol doc
- //We need it to transfer the ModuleID to the IOMAPREAD call
- UBYTE FindBuffer[FILENAME_LENGTH + 10];
- //Buffer to store data and offset in for IOMAPREAD call
- //!!! Constant size means only limited reads and writes
- UBYTE DataBuffer[MAX_IOM_BUFFER_SIZE + 2];
-
- //Resolve module name and buffer
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- ArgV[1] = cCmdDVPtr(DVIndex);
-
- DVIndex = *(DV_INDEX *)(ArgV[3]);
- ArgV[3] = cCmdDVPtr(DVIndex);
- Count = DV_ARRAY[DVIndex].Count;
-
- if (Count > MAX_IOM_BUFFER_SIZE)
- {
- //Request to read too much data at once; return error and give up
- *pReturnVal = ERR_INVALID_SIZE;
- return (NO_ERR);
- }
-
- LStatus = pMapLoader->pFunc(FINDFIRSTMODULE, ArgV[1], FindBuffer, NULL);
-
- if (LOADER_ERR(LStatus) == SUCCESS)
- {
- //Module was found, transfer Offset into first two bytes of DataBuffer, copy data into rest of buffer, then write
- *(UWORD*)(DataBuffer) = Offset;
- memcpy(&(DataBuffer[2]), ArgV[3], Count);
- LStatus = pMapLoader->pFunc(IOMAPWRITE, &(FindBuffer[FILENAME_LENGTH + 1]), DataBuffer, &Count);
- }
-
- *pReturnVal = LOADER_ERR_BYTE(LStatus);
-
- pMapLoader->pFunc(CLOSEMODHANDLE, NULL, NULL, NULL);
- return (NO_ERR);
-}
-
-#if VM_BENCHMARK
-void cCmdWriteBenchmarkFile()
-{
- LOADER_STATUS LStatus;
- UBYTE Handle;
- ULONG BenchFileSize;
- ULONG i, Length;
- UBYTE Buffer[256];
-
- //Remove old benchmark file, create a new one
- strcpy((char *)Buffer, "benchmark.txt");
- pMapLoader->pFunc(DELETE, Buffer, NULL, NULL);
- BenchFileSize = 2048;
- LStatus = pMapLoader->pFunc(OPENWRITEDATA, Buffer, NULL, &BenchFileSize);
-
- if (!LOADER_ERR(LStatus))
- {
- //Write Benchmark file
- Handle = LOADER_HANDLE(LStatus);
-
- //Header
- sprintf((char *)Buffer, "Program Name: %s\r\n", VarsCmd.ActiveProgName);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "InstrCount: %d\r\n", VarsCmd.InstrCount);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "Time: %d\r\n", IOMapCmd.Tick - VarsCmd.StartTick);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "Instr/Tick: %d\r\n", VarsCmd.Average);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "CmdCtrl Calls: %d\r\n", VarsCmd.CmdCtrlCount);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "OverTime Rounds: %d\r\n", VarsCmd.OverTimeCount);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "Max OverTime Length: %d\r\n", VarsCmd.MaxOverTimeLength);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "CompactionCount: %d\r\n", VarsCmd.CompactionCount);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "LastCompactionTick: %d\r\n", VarsCmd.LastCompactionTick);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- sprintf((char *)Buffer, "MaxCompactionTime: %d\r\n", VarsCmd.MaxCompactionTime);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
-
- //opcode benchmarks
- sprintf((char *)Buffer, "Op\tCnt\tOver\tMax\r\n");
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
- for (i = 0; i < OPCODE_COUNT; i++)
- {
- sprintf((char *)Buffer, "%x\t%d\t%d\t%d\t%d\r\n", i, VarsCmd.OpcodeBenchmarks[i][0], VarsCmd.OpcodeBenchmarks[i][1], VarsCmd.OpcodeBenchmarks[i][2], VarsCmd.OpcodeBenchmarks[i][3]);
- Length = strlen((char *)Buffer);
- LStatus = pMapLoader->pFunc(WRITE, &Handle, Buffer, &Length);
- }
- //close file
- LStatus = pMapLoader->pFunc(CLOSE, &Handle, NULL, NULL);
- }
-}
-#endif
-
-
-/////////////////////////////////////////////////////////////
-// Dymanic syscall implementations
-////////////////////////////////////////////////////////////
-
-//
-//cCmdWrapDatalogWrite
-//ArgV[0]: (return) Error Code, SBYTE (NXT_STATUS)
-//ArgV[1]: Message, CStr
-//
-NXT_STATUS cCmdWrapDatalogWrite(UBYTE * ArgV[])
-{
- NXT_STATUS Status = NO_ERR;
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[1]);
- ArgV[1] = cCmdDVPtr(DVIndex);
-
- Status = cCmdDatalogWrite(ArgV[1], DV_ARRAY[DVIndex].Count);
-
- *(SBYTE *)(ArgV[0]) = Status;
-
- if (IS_FATAL(Status))
- return Status;
- else
- return (NO_ERR);
-}
-
-//
-//cCmdWrapDatalogGetTimes
-//ArgV[0]: SyncTime, U32
-//ArgV[1]: SyncTick, U32
-//
-NXT_STATUS cCmdWrapDatalogGetTimes(UBYTE * ArgV[])
-{
- *((ULONG *)ArgV[1]) = IOMapCmd.SyncTime;
- *((ULONG *)ArgV[2]) = IOMapCmd.SyncTick;
- return (NO_ERR);
-}
-
-//
-//cCmdWrapSetSleepTimeout
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: desired timer limit in ms, ULONG
-//
-NXT_STATUS cCmdWrapSetSleepTimeout(UBYTE * ArgV[])
-{
- ULONG value = *(ULONG*)(ArgV[1]);
- if(value==0)
- {
- pMapUi->SleepTimeout=0;
- }
- else if(value < 60000)
- {
- pMapUi->SleepTimeout=1; //integer math would've made this zero
- }
- else
- {
- pMapUi->SleepTimeout= value / 60000;
- }
- return (NO_ERR);
-}
-
-// currently copied from LS, not finished.
-//
-//cCmdWrapCommHSWrite
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: Buffer to send, UBYTE array, only SIZE_OF_LSBUF bytes will be used
-//ArgV[3]: ResponseLength, UBYTE, specifies expected bytes back from slave device
-//
-NXT_STATUS cCmdWrapCommHSWrite(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE Port = *(ArgV[1]);
- UBYTE * pBuf;
- UWORD BufLength;
- UBYTE ResponseLength = *(ArgV[3]);
- DV_INDEX DVIndex;
-
- //Resolve array arguments
- DVIndex = *(DV_INDEX *)(ArgV[2]);
- pBuf = cCmdDVPtr(DVIndex);
- BufLength = DV_ARRAY[DVIndex].Count;
-
- *pReturnVal = cCmdLSWrite(Port, (UBYTE)BufLength, pBuf, ResponseLength);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommHSCheckStatus
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: BytesReady, UBYTE
-//
-NXT_STATUS cCmdWrapCommHSCheckStatus(UBYTE * ArgV[])
-{
- UBYTE Port = *(ArgV[1]);
-
- *((SBYTE*)(ArgV[0])) = cCmdLSCheckStatus(Port);
- *((UBYTE*)(ArgV[2])) = cCmdLSCalcBytesReady(Port);
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommHSRead
-//ArgV[0]: (return) Status code, SBYTE
-//ArgV[1]: Port specifier, UBYTE
-//ArgV[2]: Buffer for data, UBYTE array, max SIZE_OF_LSBUF bytes will be written
-//ArgV[3]: BufferLength, UBYTE, specifies size of buffer requested
-//
-NXT_STATUS cCmdWrapCommHSRead(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE Port = *(ArgV[1]);
- UBYTE * pBuf;
- UBYTE BufLength = *(ArgV[3]);
- UBYTE BytesToRead;
- DV_INDEX DVIndex = *(DV_INDEX *)(ArgV[2]);
- NXT_STATUS AllocStatus;
-
- *pReturnVal = cCmdLSCheckStatus(Port);
- BytesToRead = cCmdLSCalcBytesReady(Port);
-
- //If channel is OK and has data ready for us, put the data into outgoing buffer
- if (!IS_ERR(*pReturnVal) && BytesToRead > 0)
- {
- //Limit buffer to available data
- if (BufLength > BytesToRead)
- BufLength = BytesToRead;
-
- AllocStatus = cCmdDVArrayAlloc(DVIndex, BufLength);
- if (IS_ERR(AllocStatus))
- return (AllocStatus);
-
- pBuf = cCmdDVPtr(DVIndex);
- *pReturnVal = cCmdLSRead(Port, BufLength, pBuf);
- }
- //Else, the channel has an error and/or there's no data to read; clear the output array
- else
- {
- AllocStatus = cCmdDVArrayAlloc(DVIndex, 0);
- if (IS_ERR(AllocStatus))
- return (AllocStatus);
- }
-
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommBTOnOff
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Power State, 0-1
-//
-NXT_STATUS cCmdWrapCommBTOnOff(UBYTE * ArgV[])
-{
- UWORD retVal;
- NXT_STATUS status;
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
-
- UBYTE powerState = *(ArgV[1]);
- if(powerState)
- status= pMapComm->pFunc(BTON, 0, 0, 0, NULL, &retVal);
- else
- status= pMapComm->pFunc(BTOFF, 0, 0, 0, NULL, &retVal);
-
- *pReturnVal= (status == SUCCESS) ? retVal : status;
- return (NO_ERR);
-}
-
-//
-//cCmdWrapCommBTConnection
-//ArgV[0]: (return) Status byte, SBYTE
-//ArgV[1]: Action, UBYTE
-//ArgV[2]: name, UBYTE array CStr
-//ArgV[3]: connection slot, UBYTE
-//
-NXT_STATUS cCmdWrapCommBTConnection(UBYTE * ArgV[])
-{
- UWORD retVal;
- NXT_STATUS status;
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- UBYTE *nmPtr;
-
- UBYTE action = *(ArgV[1]);
- UBYTE connection = *(ArgV[3]);
- nmPtr = cCmdDVPtr(*(DV_INDEX *)(ArgV[2]));
-
- if(action) // Init
- status= pMapComm->pFunc(CONNECTBYNAME, 0, connection, 0, nmPtr, &retVal);
- else // Close
- status= pMapComm->pFunc(DISCONNECT, connection, 0, 0, NULL, &retVal);
-
- *pReturnVal= (status == SUCCESS) ? retVal : status;
- return (NO_ERR);
-}
-
-
-//
-//cCmdWrapReadSemData
-//ArgV[0]: return data, U8
-//ArgV[1]: which (0=used, 1=request), U8
-//
-NXT_STATUS cCmdWrapReadSemData(UBYTE * ArgV[])
-{
- if(!(*((UBYTE *)ArgV[1])))
- *((UBYTE *)ArgV[0])= gUsageSemData;
- else
- *((UBYTE *)ArgV[0])= gRequestSemData;
- return (NO_ERR);
-}
-
-//
-//cCmdWrapWriteSemData
-//ArgV[0]: return data, U8
-//ArgV[1]: which (0=used, 1=request), U8
-//ArgV[2]: newValue, U8
-//ArgV[3]: action (0= OR, 1= AND), U8
-//
-NXT_STATUS cCmdWrapWriteSemData(UBYTE * ArgV[])
-{
- UBYTE curVal, newVal, which= (*((UBYTE *)ArgV[1]));
- if(!which)
- curVal= gUsageSemData;
- else
- curVal= gRequestSemData;
-
- newVal= *((UBYTE *)ArgV[2]);
-
- if(*((UBYTE *)ArgV[3]))
- curVal &= ~newVal;
- else
- curVal |= newVal;
-
- if(!which)
- gUsageSemData= curVal;
- else
- gRequestSemData= curVal;
- *((UBYTE *)ArgV[0])= curVal;
- return (NO_ERR);
-}
-
-
-//
-//cCmdWrapUpdateCalibCacheInfo
-//ArgV[0]: return data, U8
-//ArgV[1]: nm, UBYTE array CStr
-//ArgV[2]: min, U16
-//ArgV[3]: max , U16
-//
-NXT_STATUS cCmdWrapUpdateCalibCacheInfo(UBYTE * ArgV[])
-{
- UBYTE *nm= cCmdDVPtr(*(DV_INDEX *)(ArgV[1]));
- SWORD min= (*((SWORD *)ArgV[2]));
- SWORD max= (*((SWORD *)ArgV[3]));
-
- cCmdUpdateCalibrationCache(nm, min, max);
- *((UBYTE *)ArgV[0])= SUCCESS;
- return (NO_ERR);
-}
-
-//
-//cCmdWrapComputeCalibValue
-//ArgV[0]: return data, U8
-//ArgV[1]: nm, UBYTE array CStr
-//ArgV[2]: raw, U16 ref in out
-NXT_STATUS cCmdWrapComputeCalibValue (UBYTE * ArgV[])
-{
- UBYTE *nm= cCmdDVPtr(*(DV_INDEX *)(ArgV[1]));
- SWORD raw= (*((SWORD *)ArgV[2]));
-
- *((UBYTE *)ArgV[0])= cCmdComputeCalibratedValue(nm, &raw);
- (*((SWORD *)ArgV[2]))= raw;
- return (NO_ERR);
-}
-
-typedef struct {
- SWORD min, max;
- UBYTE nm[FILENAME_LENGTH + 1];
-} CalibCacheType;
-
-SBYTE gCalibCacheCnt= 0;
-DV_INDEX gCalibCacheArrayDVIdx= NOT_A_DS_ID;
-CalibCacheType *gCalibCacheArray= NULL;
-
-SWORD cCmdGetCalibrationIndex(UBYTE *nm) {
- SBYTE i;
- for(i= 0; i < gCalibCacheCnt; i++)
- if(!strcmp((PSZ)nm, (PSZ)gCalibCacheArray[i].nm))
- break;
- return i;
-}
-
-NXT_STATUS cCmdComputeCalibratedValue(UBYTE *nm, SWORD *pRaw) {
- SBYTE i= cCmdGetCalibrationIndex(nm);
- NXT_STATUS status= ERR_RC_ILLEGAL_VAL;
- SLONG raw= *pRaw, range;
- if(i < gCalibCacheCnt) {
- status= SUCCESS;
- raw -= gCalibCacheArray[i].min;
- range= (gCalibCacheArray[i].max - gCalibCacheArray[i].min);
- }
- else
- range= 1023;
- raw *= 100;
- raw /= range;
- if(raw < 0) raw= 0;
- else if(raw > 100) raw= 100;
- *pRaw= raw;
- return status;
-}
-
-
-NXT_STATUS ResizeCalibCache(ULONG elements) { // alloc dv if needed, grow if needed. dv never freed. on boot, set to NOT_A_DS_ID. use cnt for valid elements.
- NXT_STATUS Status = NO_ERR;
-
- if(gCalibCacheArrayDVIdx == NOT_A_DS_ID)
- Status = cCmdAllocDopeVector(&gCalibCacheArrayDVIdx, sizeof(CalibCacheType));
- if(!IS_ERR(Status) && DV_ARRAY[gCalibCacheArrayDVIdx].Count < elements) //Allocate storage for cache element
- Status = cCmdDVArrayAlloc(gCalibCacheArrayDVIdx, elements);
- if(!IS_ERR(Status))
- gCalibCacheArray= cCmdDVPtr(gCalibCacheArrayDVIdx);
- // on error, does old DVIdx still point to array, or should we null out array???
- return Status;
-}
-
-// called to update min/max on existing cache element, and to add new named element
-void cCmdUpdateCalibrationCache(UBYTE *nm, SWORD min, SWORD max) {
- SWORD i= cCmdGetCalibrationIndex(nm);
- NXT_STATUS Status = NO_ERR;
-
- if(i == gCalibCacheCnt) { // sensor wasn't found, insert into cache
- Status= ResizeCalibCache(gCalibCacheCnt+1);
- if(!IS_ERR(Status)) {
- gCalibCacheCnt++;
- strcpy((PSZ)gCalibCacheArray[i].nm, (PSZ)nm);
- }
- }
- if(!IS_ERR(Status)) {
- gCalibCacheArray[i].min= min;
- gCalibCacheArray[i].max= max;
- }
-}
-
-void cCmdLoadCalibrationFiles(void) {
- ULONG cnt, DataSize;
- UBYTE nm[FILENAME_LENGTH + 1], nmLen;
- SWORD Handle, HandleSearch;
- gCalibCacheCnt= 0;
- gCalibCacheArrayDVIdx= NOT_A_DS_ID;
- // file I/O to load all .cal files into cached globals used by scaling syscall
- HandleSearch = pMapLoader->pFunc(FINDFIRST, "*.cal", nm, &cnt); // returns total files and nm of first one
- while (LOADER_ERR(HandleSearch) == SUCCESS) { // if we have a file, process it by closing and opening
- SWORD min= 0, max= 0, tmp;
- ULONG length;
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(HandleSearch), NULL, NULL);
- Handle = pMapLoader->pFunc(OPENREAD, nm, NULL, &DataSize);
- if (LOADER_ERR(Handle) == SUCCESS && DataSize == 4) {
- // access data, two bytes for min and two for max
- length= 2;
- pMapLoader->pFunc(READ,LOADER_HANDLE_P(Handle),(UBYTE*)&tmp,&length);
- if (length == 2)
- min= tmp;
- length= 2;
- pMapLoader->pFunc(READ,LOADER_HANDLE_P(Handle),(UBYTE*)&tmp,&length);
- if (length == 2)
- max= tmp;
- }
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(Handle), NULL, NULL);
- // update calibration cache with nm, min, and max
- nmLen= strlen((PSZ)nm) - 4; // chop off .cal extension
- nm[nmLen]= 0;
- cCmdUpdateCalibrationCache(nm, min, max);
-
- HandleSearch = pMapLoader->pFunc(FINDNEXT, LOADER_HANDLE_P(HandleSearch), nm, &cnt);
- }
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(HandleSearch), NULL, NULL);
-}
-
-//
-//cCmdWrapListFiles
-//ArgV[0]: return data, SBYTE
-//ArgV[1]: pattern, UBYTE array CStr
-//ArgV[2]: list, UBYTE array CStr array ref in out
-NXT_STATUS cCmdWrapListFiles (UBYTE * ArgV[])
-{
- ULONG fileSize, matchCount=0, i=0, oldCount;
- SWORD HandleSearch;
- NXT_STATUS Status = NO_ERR;
- DV_INDEX listIdx, *list;
- UBYTE *strTemp, *pattern;
- UBYTE name[FILENAME_LENGTH + 1];
-
- //Resolve array arguments
- pattern = cCmdDVPtr(*(DV_INDEX *)(ArgV[1]));
- listIdx = *(DV_INDEX *)(ArgV[2]);
-
- HandleSearch = pMapLoader->pFunc(FINDFIRST, pattern, name, &fileSize); // returns first file matching pattern
-
- //Count how many files we're going to have
- while (LOADER_ERR(HandleSearch) == SUCCESS)
- {
- matchCount++;
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(HandleSearch), NULL, NULL);
- HandleSearch = pMapLoader->pFunc(FINDNEXT, LOADER_HANDLE_P(HandleSearch), name, &fileSize);
- }
-
- HandleSearch = pMapLoader->pFunc(FINDFIRST, pattern, name, &fileSize); // returns first file matching pattern
-
- oldCount = DV_ARRAY[listIdx].Count; // Check to see how many dope vectors are already in the array (if they passed us a non-blank array of strings)
-
- Status = cCmdDVArrayAlloc(listIdx, matchCount); // Size the top-level array
- if(IS_ERR(Status))
- return Status;
-
- list = (DV_INDEX*)(VarsCmd.pDataspace + DV_ARRAY[listIdx].Offset); // Get a pointer into the dataspace for the array of DV_INDEXes
-
- while (LOADER_ERR(HandleSearch) == SUCCESS && !IS_ERR(Status))
- {
- pMapLoader->pFunc(CLOSE, LOADER_HANDLE_P(HandleSearch), NULL, NULL); // Close the handle that we automatically opened above
- // Allocate a new dope vector if one doesn't already exist
- if(i >= oldCount)
- Status = cCmdAllocDopeVector(&(list[i]), sizeof(char));
-
- // Allocate the string buffer for output array[i]
- if(!IS_ERR(Status))
- Status = cCmdDVArrayAlloc(list[i], strlen((PSZ)name) + 1);
-
- if(!IS_ERR(Status))
- {
- strTemp = VarsCmd.pDataspace + DV_ARRAY[list[i]].Offset; // Get a pointer into the dataspace for this string
- strcpy((PSZ)strTemp, (PSZ)name);
- }
- i++;
-
- HandleSearch = pMapLoader->pFunc(FINDNEXT, LOADER_HANDLE_P(HandleSearch), name, &fileSize);
- }
-
- *(SBYTE *)(ArgV[0]) = Status;
-
- return Status;
-}
-
-#ifdef SIM_NXT
-// Accessors for simulator library code
-SWORD cCmdGetCodeWord(CLUMP_ID Clump, CODE_INDEX Index)
-{
- if (Clump == NOT_A_CLUMP)
- {
- NXT_ASSERT(Index < VarsCmd.CodespaceCount);
- return (VarsCmd.pCodespace[Index]);
- }
- else
- {
- NXT_ASSERT(cCmdIsClumpIDSane(Clump));
-#error // CodeStart is now absolute, but not sure how to fix
- return (((SWORD)VarsCmd.pCodespace[VarsCmd.pAllClumps[Clump].CodeStart + Index]));
- }
-}
-
-
-UBYTE * cCmdGetDataspace(UWORD *DataspaceSize)
-{
- if (DataspaceSize)
- *DataspaceSize = VarsCmd.DataspaceSize;
- return (VarsCmd.pDataspace);
-}
-
-
-DOPE_VECTOR * cCmdGetDopeVectorPtr()
-{
- return VarsCmd.MemMgr.pDopeVectorArray;
-}
-
-
-MEM_MGR cCmdGetMemMgr(void)
-{
- return VarsCmd.MemMgr;
-}
-
-
-ULONG cCmdGetPoolSize()
-{
- return VarsCmd.PoolSize;
-}
-#endif
-
-#else //!ENABLE_VM
-//
-//Implementations of standard interface if VM is disabled.
-//Place low-level test code here if VM is causing issues.
-//Test code must implement cCmdInit(), cCmdCtrl(), and cCmdExit() at a minimum.
-//Recommend using a pattern like #include "c_cmd_alternate.c"
-//
-
-//!!! !ENABLE_VM implementations really should provide a placeholder function for this pointer
-//IOMapCmd.pRCHandler = &cCmdHandleRemoteCommands;
-#include "c_cmd_alternate.c"
-
-#endif //ENABLE_VM
diff --git a/AT91SAM7S256/Source/c_cmd.h b/AT91SAM7S256/Source/c_cmd.h
deleted file mode 100644
index c6e5267..0000000
--- a/AT91SAM7S256/Source/c_cmd.h
+++ /dev/null
@@ -1,885 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 10-07-08 13:22 $
-//
-// Filename $Workfile:: c_cmd.h $
-//
-// Version $Revision: 8 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_cmd. $
-//
-// Platform C
-//
-
-//
-// File Description:
-// This file contains definitions and prototypes for the VM which runs bytecode
-// programs compatible with LEGO MINDSTORMS NXT Software 1.0.
-//
-
-#ifndef C_CMD
-#define C_CMD
-
-//!!! MAX_HANDLES also defined in m_sched.h
-#ifndef MAX_HANDLES
-#define MAX_HANDLES 16
-#endif
-
-#include "c_cmd_bytecodes.h"
-#define SYSCALL_COUNT 48
-
-extern const HEADER cCmd;
-
-//
-//Standard interface to other modules
-//
-void cCmdInit(void* pHeader);
-void cCmdCtrl(void);
-void cCmdExit(void);
-
-//
-//ARM_NXT vs SIM_NXT
-//These definitions are set up to allow compiling this code for use in a simulated (non-ARM7) environment.
-//If your toolchain doesn't automatically use the __ICCARM__ or __arm__ token, define it to ensure normal compilation.
-//
-#if defined (__ICCARM__) || (defined (__GNUC__) && defined (__arm__))
-#define ARM_NXT
-#else
-#define SIM_NXT
-#endif
-
-//
-//ENABLE_VM toggles compilation the main body of VM code.
-//Define it as 0 to compile alternate implementation for testing (see bottom of c_cmd.c)
-//
-#define ENABLE_VM 1
-#undef ARM_DEBUG
-//
-//VM_BENCHMARK enables extra instrumentation code to measure VM performance.
-//When enabled, a file named "benchmark.txt" is produced every time a program completes.
-//
-#define VM_BENCHMARK (ENABLE_VM && 0) //<-- Toggle to turn on benchmark calculations
-
-#if VM_BENCHMARK
-//Prototype for benchmark recording function
-void cCmdWriteBenchmarkFile();
-#endif
-
-//
-//Run-time assert macros
-//Use these to test for unexpected conditions
-//If expr evaluates as false while running under a debugger,
-// a software breakpoint exception is thrown.
-//NXT_BREAK is just a shortcut for unconditional break.
-//
-//Assert definitions behind WIN_DEBUG only make sense when compiling SIM_NXT
-// under an x86 Windows debugger.
-//
-#if defined WIN_DEBUG
-//"int 3" is a break exception on x86
-#define NXT_ASSERT(expr) if (expr) {} else { __asm {int 3} }
-#define NXT_BREAK NXT_ASSERT(0)
-//
-//Assert definitions behind ARM_DEBUG aren't quite as handy as WIN_DEBUG,
-// but they do record the code line causing the last assert failure.
-//
-#elif defined(ARM_DEBUG)
-#define NXT_ASSERT(expr) if (expr) {}\
- else\
- {\
- VarsCmd.AssertFlag = TRUE;\
- VarsCmd.AssertLine = __LINE__;\
- }
-#define NXT_BREAK NXT_ASSERT(0);
-#else
-//Not debugging, so #defined as nothing
-//!!! Note that these definitions means all usages of NXT_ASSERT and NXT_BREAK
-// get stripped out of an unmodified ARM7 build.
-//Unless ARM_DEBUG is enabled, treat them as documentation of expected values.
-#define NXT_ASSERT(expr)
-#define NXT_BREAK
-#endif
-
-//
-//Status byte used to return requests for further action or errors
-//Valid codes #defined in c_cmd.iom
-//!!!JLOFTUS Replace with NXT_STATUS? Same for ASSERTS? Others? Risk factors?
-//
-typedef SBYTE NXT_STATUS;
-
-#if ENABLE_VM
-
-//Intial values for clump records are packed into 4 bytes in the file format.
-#define VM_FILE_CLUMP_REC_SIZE 4
-
-//
-// Definitions for dataspace management, IO Map (IOM) access, and bytecode instruction structure
-//
-
-//Type codes for use in the dataspace table-of-contents (DSTOC)
-typedef UBYTE TYPE_CODE;
-
-enum
-{
- //VOID type for unused DS elements; never valid to address them from bytecode
- TC_VOID,
-
- //Simple scalar integers, equivalent to matching basic types from stdconst.h
- TC_UBYTE,
- TC_SBYTE,
- TC_UWORD,
- TC_SWORD,
- TC_ULONG,
- TC_SLONG, TC_LAST_INT_SCALAR= TC_SLONG,
-
- //Aggregate types containing one or more scalar
- TC_ARRAY,
- TC_CLUSTER,
-
- //Mutex tracks current holder and any waiting clumps
- TC_MUTEX,
- TC_FLOAT, TC_LAST_VALID= TC_FLOAT
-};
-
-//Sizes (in bytes) of each scalar type
-#define SIZE_UBYTE 1
-#define SIZE_SBYTE 1
-#define SIZE_UWORD 2
-#define SIZE_SWORD 2
-#define SIZE_ULONG 4
-#define SIZE_SLONG 4
-#define SIZE_FLOAT 4
-
-//MUTEX record is a struct containing 3 8-bit CLUMP_IDs, packed into 32-bit word
-//See MUTEX_Q typedef
-#define SIZE_MUTEX 4
-
-//Module IDs for IO map addressing
-enum
-{
- MOD_INPUT,
- MOD_OUTPUT
-};
-
-//Field IDs for input IOM
-enum
-{
- IO_IN_TYPE,
- IO_IN_MODE,
- IO_IN_ADRAW,
- IO_IN_NORMRAW,
- IO_IN_SCALEDVAL,
- IO_IN_INVALID_DATA
-};
-
-//FPP = Fields Per Port
-#define IO_IN_FPP 6
-#define IO_IN_FIELD_COUNT (IO_IN_FPP * NO_OF_INPUTS)
-
-//Field IDs for input IOM
-enum
-{
- IO_OUT_FLAGS,
- IO_OUT_MODE,
- IO_OUT_SPEED, //AKA "Power"
- IO_OUT_ACTUAL_SPEED,
- IO_OUT_TACH_COUNT,
- IO_OUT_TACH_LIMIT,
- IO_OUT_RUN_STATE,
- IO_OUT_TURN_RATIO,
- IO_OUT_REG_MODE,
- IO_OUT_OVERLOAD,
- IO_OUT_REG_P_VAL,
- IO_OUT_REG_I_VAL,
- IO_OUT_REG_D_VAL,
- IO_OUT_BLOCK_TACH_COUNT,
- IO_OUT_ROTATION_COUNT,
- IO_OUT_OPTIONS,
- IO_OUT_MAX_SPEED,
- IO_OUT_MAX_ACCELERATION,
-};
-
-#define IO_OUT_FPP 18
-#define IO_OUT_FIELD_COUNT (IO_OUT_FPP * NO_OF_OUTPUTS)
-
-//
-//DS_TOC_ENTRY is a record in the dataspace table of contents
-//The TypeCode describes the data which is stored at Dataspace[DSOffset]
-//
-typedef struct
-{
- TYPE_CODE TypeCode;
- UBYTE Flags;
- SWORD DSOffset;
-} DS_TOC_ENTRY;
-
-//DS_TOC_ENTRY Flags
-//!!! Yes, there's only one flag defined for an 8-bit field.
-//ARM7 alignment rules means those bits would otherwise just be padding, anyway.
-#define DS_DEFAULT_DEFAULT 1 //This entry has no default value in file; fill with zero at activation time
-
-//DS_ELEMENT_ID (AKA "DS item ID") indexes DataspaceTOC
-typedef UWORD DS_ELEMENT_ID;
-
-//Special flag value used for opcode-specific default behavior when real dataspace argument is not provided
-#define NOT_A_DS_ID 0xFFFF
-
-//Macro to bump DS_ELEMENT_IDs +1 with a cast (mostly to quash annoying warnings)
-#define INC_ID(X) ((DS_ELEMENT_ID)(X + 1))
-
-//DATA_ARG may contain a DS_ELEMENT_ID or encoded IO map address
-typedef UWORD DATA_ARG;
-
-//CODE_WORD is a single indexable element of the codespace
-typedef SWORD CODE_WORD;
-
-//CODE_INDEX indexes codespaces for opcodes and args
-//!!! UWORD CODE_INDEX currently limits programs to 128KB code
-// Yes, this is "plenty", but noted here to make sure we think about it
-// when considering code size changes
-typedef UWORD CODE_INDEX;
-
-//Typedef and define to hold and check for valid file handles
-typedef UBYTE FILE_HANDLE;
-
-#define NOT_A_HANDLE 0xFF
-
-//
-// Dynamic Memory Manager
-//
-
-typedef UWORD DV_INDEX; //Dope Vector Index: Index into the DopeVectorArray
-
-//DOPE_VECTOR struct: One instance exists in the DopeVectorArray for every array in the dataspace.
-typedef struct
-{
- UWORD Offset;
- UWORD ElemSize;
- UWORD Count;
- DV_INDEX BackLink; // points to previous DV
- DV_INDEX Link; // points to next DV
-} DOPE_VECTOR;
-
-//
-//MEM_MGR struct
-//Head and Tail keep track of the main linked-list of dope vectors,
-// which must be maintained in ascending order according to Offset
-//FreeHead is the head DV of the list of allocated but unused DVs
-//pDopeVectorArray is initialized at activation-time to point to the master DVA
-//
-typedef struct
-{
- DV_INDEX Head;
- DV_INDEX Tail;
- DV_INDEX FreeHead;
- DOPE_VECTOR * pDopeVectorArray;
-} MEM_MGR;
-
-//Macro to shorten common DVA access code
-#define DV_ARRAY VarsCmd.MemMgr.pDopeVectorArray
-//# of nodes to alloc when the Dope Vector Array is full
-#define DV_ARRAY_GROWTH_COUNT 25
-//Flag value for invalid Offset fields in DVs
-#define NOT_AN_OFFSET 0xFFFF
-//Check for legal index into DVA
-#define IS_DV_INDEX_SANE(X) (((X) > 0) && ((X) < DV_ARRAY[0].Count))
-
-//
-// Message Queuing
-//
-
-//
-//There are 10 incoming and 10 outgoing message queues, each 5 messages deep
-//A "message" is defined as a null-terminated string under MAX_MESSAGE_SIZE
-//
-#define MESSAGES_PER_QUEUE 5
-#define MESSAGE_QUEUE_COUNT 20
-#define INCOMING_QUEUE_COUNT ((MESSAGE_QUEUE_COUNT)/2)
-#define NOT_A_QUEUE 0xFF
-
-//
-//MAX_MESSAGE_SIZE including null-terminator
-//!!! Capped at 59 unless USB protocol assumptions are changed!
-//
-#define MAX_MESSAGE_SIZE 59
-
-//A MESSAGE is a dynamically sized string, so we use a DV_INDEX to get to its information
-typedef DV_INDEX MESSAGE;
-
-//
-//MESSAGE_QUEUE keeps track of last messages read and written (acts as a circular buffer)
-//
-typedef struct
-{
- UWORD ReadIndex;
- UWORD WriteIndex;
- MESSAGE Messages[MESSAGES_PER_QUEUE];
-} MESSAGE_QUEUE;
-
-//Handy macros for accessing MESSAGE_QUEUEs
-#define GET_WRITE_MSG(QueueID) (VarsCmd.MessageQueues[(QueueID)].Messages[VarsCmd.MessageQueues[(QueueID)].WriteIndex])
-#define GET_READ_MSG(QueueID) (VarsCmd.MessageQueues[(QueueID)].Messages[VarsCmd.MessageQueues[(QueueID)].ReadIndex])
-#define SET_WRITE_MSG(QueueID, DVIndex) (VarsCmd.MessageQueues[(QueueID)].Messages[VarsCmd.MessageQueues[(QueueID)].WriteIndex] = (DVIndex))
-#define SET_READ_MSG(QueueID, DVIndex) (VarsCmd.MessageQueues[(QueueID)].Messages[VarsCmd.MessageQueues[(QueueID)].ReadIndex] = (DVIndex))
-
-//
-// Datalog Queuing
-//
-// The datalog queue is loosely modeled around the message queue except that there is only one queue, not an array of them.
-//
-
-// A datalog has one less byte of 'header' info so different max size
-#define MAX_DATALOG_SIZE 60
-
-// The number of datalog messages to buffer
-#define DATALOG_QUEUE_DEPTH 30
-
-// A DATALOG_MESSAGE is a dynamically sized string, so we use a DV_INDEX to get to its information
-typedef DV_INDEX DATALOG_MESSAGE;
-
-//
-// DATALOG_QUEUE keeps track of last messages read and written (acts as a circular buffer)
-typedef struct
-{
- UWORD ReadIndex;
- UWORD WriteIndex;
- DATALOG_MESSAGE Datalogs[DATALOG_QUEUE_DEPTH];
-} DATALOG_QUEUE;
-
-//Handy macros for accessing the DATALOG_QUEUE
-#define GET_WRITE_DTLG() (VarsCmd.DatalogBuffer.Datalogs[VarsCmd.DatalogBuffer.WriteIndex])
-#define GET_READ_DTLG() (VarsCmd.DatalogBuffer.Datalogs[VarsCmd.DatalogBuffer.ReadIndex])
-#define SET_WRITE_DTLG(DVIndex) (VarsCmd.DatalogBuffer.Datalogs[VarsCmd.DatalogBuffer.WriteIndex] = (DVIndex))
-#define SET_READ_DTLG(DVIndex) (VarsCmd.DatalogBuffer.Datalogs[VarsCmd.DatalogBuffer.ReadIndex] = (DVIndex))
-
-
-//
-//Definitions related to dataflow scheduling
-//
-
-//CLUMP_IDs are used to index list at pAllClumps
-typedef UBYTE CLUMP_ID;
-
-//
-//The last value in CLUMP_ID's range is reserved as NOT_A_CLUMP
-//This is useful as a queue terminator and general placeholder
-//
-#define NOT_A_CLUMP 0xFF
-#define MAX_CLUMPS 255
-#define INSTR_MAX_COUNT 20
-
-//CLUMP_Q struct for tracking head and tail of a queue of clumps
-typedef struct
-{
- CLUMP_ID Head;
- CLUMP_ID Tail;
-} CLUMP_Q;
-
-//
-//MUTEX_Q is a struct to be stashed in the dataspace to track state of a mutex
-//If mutex is free, Owner field is NOT_A_CLUMP and WaitQ is empty.
-//The mutex is acquired by stashing a new owner's ID.
-//If others attempt to acquire, they will be put on the WaitQ
-//
-typedef struct
-{
- CLUMP_ID Owner;
- CLUMP_Q WaitQ;
-} MUTEX_Q;
-
-//
-// Clump Record, run-time book-keeping for each clump
-//
-// CodeStart: Start of this clump's bytecodes, absolute address
-// CodeEnd: End of this clump's bytecodes, absolute address
-// PC: "program counter" -- current offset into codespace relative to CodeStart
-// InitFireCount: Initial count of upstream dependencies
-// CurrFireCount: Run-time count of unsatisfied dependencies
-// Link: ID of next clump in the queue. NOT_A_CLUMP denotes end or bad link.
-//
-// clumpScalarDispatchHints: this clump only uses scalar data args, can be interpretted with faster dispatch tables
-//
-// pDependents: pointer to list of downstream dependents' ClumpIDs
-// awakenTime: If a clump is on rest queue for sleep, this is the time at which it will return to runQueue
-// DependentCount: Count of downstream dependents
-//
-typedef struct
-{
- CODE_WORD* CodeStart;
- CODE_WORD* CodeEnd;
- CODE_WORD* PC;
- UBYTE InitFireCount;
- UBYTE CurrFireCount; //AKA ShortCount
- CLUMP_ID Link;
-
- UBYTE clumpScalarDispatchHints;
-
- CLUMP_ID* pDependents;
- ULONG awakenTime;
- UBYTE DependentCount;
-} CLUMP_REC;
-
-//
-//Definitions for memory pool management
-//
-
-//First valid pointer into the memory pool
-#define POOL_START ((UBYTE*)(VarsCmd.Pool))
-
-//Sentinel points one byte *past* the pool -- i.e. first bad pool pointer
-#define POOL_SENTINEL ((UBYTE*)(VarsCmd.Pool + VarsCmd.PoolSize))
-
-//Alignment mod for Pool and all sub-fields of the Pool
-#define POOL_ALIGN SIZE_SLONG
-
-#define ALIGN_TO_MOD(val,mod) if ((val) % (mod) != 0) { (val) += (mod) - ((val) % (mod)); } else {}
-
-//
-//Internal states of the VM
-//VM_IDLE: Just sitting around. Request to run program will lead to ONE of the VM_RUN* states.
-//VM_RUN_FREE: Attempt to run as many instructions as possible within our timeslice
-//VM_RUN_SINGLE: Run exactly one instruction per timeslice
-//VM_RUN_PAUSE: Program still "active", but someone has asked us to pause
-//VM_RESET2: Final clean up and return to IDLE
-//VM_RESET1: Initialize state variables and some I/O devices -- executed when programs end
-//
-typedef enum
-{
- VM_IDLE,
- VM_RUN_FREE,
- VM_RUN_SINGLE,
- VM_RUN_PAUSE,
- VM_RESET1,
- VM_RESET2,
-} VM_STATE;
-
-//
-// VARSCMD: Private state data for active program and VM system
-//
-//pCodespace: pointer for flat codespace (stored in flash, includes all clumps)
-//CodespaceCount: count of code words
-//
-//pAllClumps: Pointer to list of CLUMP_RECs
-//AllClumpsCount: Count of CLUMP_RECs in list
-//
-//RunQ: Head and tail of run queue (elements in-place in AllClumps list)
-//
-//pDataspaceTOC: Pointer to DSTOC entries (stored in flash)
-//DataspaceCount: Count of entries in DSTOC
-//pDataspace: Base pointer of actual dataspace
-//DataspaceSize: Size, in bytes, of dataspace
-//DSStaticSize: Size, in bytes, of static portion of the dataspace (used as an offset to the dynamic dataspace)
-//
-//VMState: Internal state of VM's loader/scheduler (cCmdCtrl())
-//
-//MemMgr: Contains data to manage dynamic arrays
-//
-//PoolSize: Current size of main memory pool, in bytes.
-//Pool: Static pool of bytes for stashing all program run-time data
-//
-//ActiveProgHandle: Handle of the program that is currently running
-//ActiveProgName: Stashed name of currently running program, if any
-//
-//FileHandleTable: Table of file names opened by program while running.
-// First byte of each record is 'r' or 'w' (read or write).
-//
-//MessageQueues: Message buffer tracking data
-//
-//CommStat, CommStatReset, CommCurrConnection, DirtyComm: Helper data for interfacing to c_comm module
-//
-//DirtyDisplay: Boolean reminding us to re-initialize the display if program used it
-//
-//StartTick: MS tick stashed when program started. Used for relative time measurements.
-//
-//Further notes on the memory pool:
-// The main memory pool is used for all clump records, dataspace tracking data,
-// and the dataspace itself. In other words, pAllClumps and
-// pDataspace must all point to memory within the pool. Watch for NXT_ASSERTs
-// to enforce safe indexing into the pool.
-//
-typedef struct
-{
- CODE_WORD* pCodespace;
- CLUMP_REC* pAllClumps;
- DS_TOC_ENTRY* pDataspaceTOC;
- UBYTE* pDataspace;
- UBYTE* Pool;
-
- ULONG PoolSize;
- UWORD CodespaceCount;
- CLUMP_ID AllClumpsCount;
- UWORD DataspaceCount;
- UWORD DataspaceSize;
- UWORD DSStaticSize;
-
- VM_STATE VMState;
-
- MEM_MGR MemMgr;
-
- CLUMP_Q RunQ;
- CLUMP_Q RestQ;
-
- UBYTE ActiveProgHandle;
- UBYTE ActiveProgName[FILENAME_LENGTH + 1];
-
- UBYTE FileHandleTable[MAX_HANDLES][FILENAME_LENGTH + 2];
-
- MESSAGE_QUEUE MessageQueues[MESSAGE_QUEUE_COUNT];
-
- SWORD CommStat;
- SWORD CommStatReset;
- UBYTE CommCurrConnection;
-
- UBYTE DirtyComm;
- UBYTE DirtyDisplay;
-
- ULONG StartTick;
-
- DATALOG_QUEUE DatalogBuffer;
-
-#if VM_BENCHMARK
- ULONG InstrCount;
- ULONG Average;
- ULONG OverTimeCount;
- ULONG MaxOverTimeLength;
- ULONG CmdCtrlCount;
- ULONG CompactionCount;
- ULONG LastCompactionTick;
- ULONG MaxCompactionTime;
- ULONG OpcodeBenchmarks[OPCODE_COUNT][4];
- ULONG SyscallBenchmarks[SYSCALL_COUNT][4];
- UBYTE Buffer[256];
-#endif
-
-#if defined ARM_DEBUG
- UBYTE AssertFlag;
- ULONG AssertLine;
-#endif
-} VARSCMD;
-
-//
-//Activation
-//
-
-//Activate new program by filename (open file and inflate run-time data)
-NXT_STATUS cCmdActivateProgram(UBYTE * pFileName);
-
-//Deactivate currently active program (re-init run-time data and close file)
-void cCmdDeactivateProgram();
-
-//Reset various device state variables
-void cCmdResetDevices(void);
-
-//Parse activation record file header information
-typedef struct
-{
- UWORD DSTOC;
- UWORD DSDefaults;
- UWORD DSDefaultsSize;
- UWORD DynamicDefaults;
- UWORD DynamicDefaultsSize;
- UWORD Clumps;
- UWORD Codespace;
-} PROG_FILE_OFFSETS;
-
-NXT_STATUS cCmdReadFileHeader(UBYTE* pData, ULONG DataSize,
- PROG_FILE_OFFSETS* pFileOffsets);
-
-NXT_STATUS cCmdInflateDSDefaults(UBYTE* pDSDefaults, UWORD *pDefaultsOffset, DS_ELEMENT_ID DSElementID);
-
-
-//
-//Clump management
-//
-
-//Clump queuing
-void cCmdEnQClump(CLUMP_Q * Queue, CLUMP_ID NewClump);
-void cCmdDeQClump(CLUMP_Q * Queue, CLUMP_ID Clump);
-void cCmdRotateQ();
-UBYTE cCmdIsClumpOnQ(CLUMP_Q * Queue, CLUMP_ID Clump);
-UBYTE cCmdIsQSane(CLUMP_Q * Queue);
-
-// Rest queue functions
-NXT_STATUS cCmdSleepClump(ULONG time);
-UBYTE cCmdCheckRestQ(ULONG currTime);
-
-//Mutex queuing
-NXT_STATUS cCmdAcquireMutex(MUTEX_Q * Mutex);
-NXT_STATUS cCmdReleaseMutex(MUTEX_Q * Mutex);
-
-//Conditionally schedule dependents of given clump (Begin and End specify subset of list)
-NXT_STATUS cCmdSchedDependents(CLUMP_ID Clump, SWORD Begin, SWORD End);
-
-//Conditionally schedule TargetClump
-NXT_STATUS cCmdSchedDependent(CLUMP_ID Clump, CLUMP_ID TargetClump);
-
-//Test if ClumpID is sane at run-time (valid for indexing AllClumps)
-UBYTE cCmdIsClumpIDSane(CLUMP_ID Clump);
-
-//
-//Code stream management
-//
-
-//Instruction masking macros -- get the interesting bits out of an encoded instruction word
-#define COMP_CODE(pInstr) ((UBYTE)((((pInstr)[0]) & 0x0700) >> 8))
-#define INSTR_SIZE(wd) ((wd) >> 12) & 0x0F;
-
-#define IS_SHORT_OP(pInstr) ((UBYTE)((((pInstr)[0]) & 0x0800) >> 8) == 8)
-#define SHORT_OP_CODE(pInstr) COMP_CODE(pInstr)
-#define SHORT_ARG(pInstr) ((SBYTE) (((pInstr)[0]) & 0x00FF))
-//ShortOpMap defined in c_cmd_bytecodes.h
-#define OP_CODE(pInstr) (UBYTE) (((pInstr)[0]) & 0x00FF)
-
-//
-//Memory pool management
-//
-
-//Initialize entire memory pool with default value
-void cCmdInitPool(void);
-
-//Resize dataspace array specified by DSElementID and Offset.
-NXT_STATUS cCmdDSArrayAlloc(DS_ELEMENT_ID DSElementID, UWORD Offset, UWORD NewCount);
-//Resize dataspace array specified by DVIndex. In most cases, call higher-level cCmdDSArrayAlloc instead.
-NXT_STATUS cCmdDVArrayAlloc(DV_INDEX DVIndex, UWORD NewCount);
-
-NXT_STATUS cCmdAllocSubArrayDopeVectors(DS_ELEMENT_ID DSElementID, UWORD Offset);
-NXT_STATUS cCmdFreeSubArrayDopeVectors(DS_ELEMENT_ID DSElementID, UWORD Offset);
-NXT_STATUS cCmdAllocDopeVector(DV_INDEX *pIndex, UWORD ElemSize);
-NXT_STATUS cCmdFreeDopeVector(DV_INDEX DVIndex);
-NXT_STATUS cCmdGrowDopeVectorArray(UWORD NewCount);
-
-UWORD cCmdCalcArrayElemSize(DS_ELEMENT_ID DSElementID);
-
-NXT_STATUS cCmdMemMgrMoveToTail(DV_INDEX DVIndex);
-NXT_STATUS cCmdMemMgrInsertAtTail(DV_INDEX DVIndex);
-
-//Utility function to check sanity of MemMgr data structure. Boolean result.
-UBYTE cCmdVerifyMemMgr();
-
-NXT_STATUS cCmdDSCompact(void);
-
-//
-// Message Queue management
-//
-
-NXT_STATUS cCmdMessageWrite(UWORD QueueID, UBYTE * pData, UWORD Length);
-NXT_STATUS cCmdMessageRead(UWORD QueueID, UBYTE * pData, UWORD Length, UBYTE Remove);
-NXT_STATUS cCmdMessageGetSize(UWORD QueueID, UWORD * Size);
-
-//
-// Datalog Queue management
-//
-
-NXT_STATUS cCmdDatalogWrite(UBYTE * pData, UWORD Length);
-NXT_STATUS cCmdDatalogRead(UBYTE * pData, UWORD Length, UBYTE Remove);
-NXT_STATUS cCmdDatalogGetSize(UWORD * Size);
-
-//
-// Color Sensor
-//
-
-NXT_STATUS cCmdColorSensorRead (UBYTE Port, SWORD* SensorValue, UWORD* RawArray, UWORD* NormalizedArray,
- SWORD* ScaledArray, UBYTE* InvalidData);
-
-//
-//Dataspace management
-//
-
-#define IS_AGGREGATE_TYPE(TypeCode) ((TypeCode == TC_ARRAY) || (TypeCode == TC_CLUSTER))
-// use carefully, only where tc will be a scalar int
-#define QUICK_UNSIGNED_TEST(TypeCode) ((TypeCode) & 0x1)
-#define IS_SIGNED_TYPE(TypeCode) (((TypeCode) == TC_SBYTE) || ((TypeCode) == TC_SWORD) || ((TypeCode) == TC_SLONG))
-//!!!BDUGGAN add TC_FLOAT?
-
-//Test if DS_ELEMENT_ID is sane at run-time (valid for indexing DS TOC)
-UBYTE cCmdIsDSElementIDSane(DS_ELEMENT_ID Index);
-
-DS_ELEMENT_ID cCmdGetDataspaceCount(void);
-
-//Pointer accessors to resolve actual data locations in RAM
-void* cCmdDSPtr(DS_ELEMENT_ID DSElementID, UWORD Offset);
-void* cCmdDVPtr(DV_INDEX DVIndex);
-
-//Helper to walk the DSTOC to the next entry at the same aggregate nesting level as CurrID
-DS_ELEMENT_ID cCmdNextDSElement(DS_ELEMENT_ID CurrID);
-
-//Recursively compare two complete data type descriptors
-UBYTE cCmdCompareDSType(DS_ELEMENT_ID DSElementID1, DS_ELEMENT_ID DSElementID2);
-
-//Functions for managing data flattened to byte arrays
-UWORD cCmdCalcFlattenedSize(DS_ELEMENT_ID DSElementID, UWORD Offset);
-NXT_STATUS cCmdFlattenToByteArray(UBYTE * pByteArray, UWORD * pByteOffset, DS_ELEMENT_ID DSElementID, UWORD Offset);
-NXT_STATUS cCmdUnflattenFromByteArray(UBYTE * pByteArray, UWORD * pByteOffset, DS_ELEMENT_ID DSElementID, UWORD Offset);
-
-//Comparison evaluation. Comparison codes defined in c_cmd_bytecodes.h.
-//cCmdCompare operates on scalars passed as ULONGs -- type-specific comparisons done inside function.
-UBYTE cCmdCompare(UBYTE CompCode, ULONG Val1, ULONG Val2, TYPE_CODE TypeCode1, TYPE_CODE TypeCode2);
-UBYTE cCmdCompareFlt(UBYTE CompCode, float Val1, float Val2, TYPE_CODE TypeCode1, TYPE_CODE TypeCode2);
-//cCmdCompareAggregates does polymorphic comparisons (with recursive helper function).
-NXT_STATUS cCmdCompareAggregates(UBYTE CompCode, UBYTE *ReturnBool, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3);
-NXT_STATUS cCmdRecursiveCompareAggregates(UBYTE CompCode, UBYTE *ReturnBool, UBYTE *Finished, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3);
-
-//Cluster functions
-UWORD cCmdClusterCount(DS_ELEMENT_ID DSElementID);
-
-//Array functions
-#define ARRAY_ELEM_OFFSET(DVIndex, Index) ((UWORD)(DV_ARRAY[(DVIndex)].Offset + DV_ARRAY[(DVIndex)].ElemSize * (Index)))
-UWORD cCmdGetDVIndex(DS_ELEMENT_ID DSElementID, UWORD Offset);
-UWORD cCmdArrayCount(DS_ELEMENT_ID DSElementID, UWORD Offset);
-TYPE_CODE cCmdArrayType(DS_ELEMENT_ID DSElementID);
-
-//!!! DATA_ARG masks are for internal use only! (Bytecode programs should never contain them)
-// See cCmdResolveDataArg() calls in the interpreter code for OP_GETOUT, OP_SETIN, and OP_GETIN.
-#define DATA_ARG_ADDR_MASK 0x3FFF
-#define DATA_ARG_IMM_MASK 0x7FFF
-
-//General data accessors (DS and IO Map)
-void * cCmdResolveDataArg(DATA_ARG DataArg, UWORD Offset, TYPE_CODE * TypeCode);
-void * cCmdResolveIODataArg(DATA_ARG DataArg, ULONG Offset, TYPE_CODE * TypeCode);
-ULONG cCmdGetVal(void * pVal, TYPE_CODE TypeCode);
-void cCmdSetVal(void * pVal, TYPE_CODE TypeCode, ULONG NewVal);
-
-// Calibration routines
-void cCmdLoadCalibrationFiles(void);
-NXT_STATUS cCmdComputeCalibratedValue(UBYTE *nm, SWORD *raw);
-void cCmdUpdateCalibrationCache(UBYTE *nm, SWORD min, SWORD max);
-
-//
-//Interpreter functions
-//
-
-//Clump-based "master" interpreter
-NXT_STATUS cCmdInterpFromClump();
-
-//Function pointer typedef for sub-interpreters
-typedef NXT_STATUS (*pInterp)(CODE_WORD * const);
-typedef NXT_STATUS (*pInterpShort)(CODE_WORD * const);
-
-//Sub-interpreter dispatch functions
-NXT_STATUS cCmdInterpNoArg(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpUnop1(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpUnop2(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpScalarUnop2(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpBinop(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpScalarBinop(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpOther(CODE_WORD * const pCode);
-
-NXT_STATUS cCmdInterpShortError(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpShortSubCall(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpShortMove(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpShortAcquire(CODE_WORD * const pCode);
-NXT_STATUS cCmdInterpShortRelease(CODE_WORD * const pCode);
-
-NXT_STATUS cCmdMove(DATA_ARG Arg1, DATA_ARG Arg2);
-
-//Polymorphic interpreter functions
-NXT_STATUS cCmdInterpPolyUnop2(CODE_WORD const Code, DATA_ARG Arg1, UWORD Offset1, DATA_ARG Arg2, UWORD Offset2);
-ULONG cCmdUnop2(CODE_WORD const Code, ULONG Operand, TYPE_CODE TypeCode);
-float cCmdUnop2Flt(CODE_WORD const Code, float Operand, TYPE_CODE TypeCode);
-
-NXT_STATUS cCmdInterpPolyBinop(CODE_WORD const Code, DATA_ARG Arg1, UWORD Offset1, DATA_ARG Arg2, UWORD Offset2, DATA_ARG Arg3, UWORD Offset3);
-ULONG cCmdBinop(CODE_WORD const Code, ULONG LeftOp, ULONG RightOp, TYPE_CODE LeftType, TYPE_CODE RightType);
-float cCmdBinopFlt(CODE_WORD const Code, float LeftOp, float RightOp, TYPE_CODE LeftType, TYPE_CODE RightType);
-void cCmdSetValFlt(void * pVal, TYPE_CODE TypeCode, float NewVal);
-float cCmdGetValFlt(void * pVal, TYPE_CODE TypeCode);
-//
-//Support functions for lowspeed (I2C devices, i.e. ultrasonic sensor) communications
-//
-
-NXT_STATUS cCmdLSCheckStatus(UBYTE Port);
-UBYTE cCmdLSCalcBytesReady(UBYTE Port);
-NXT_STATUS cCmdLSWrite(UBYTE Port, UBYTE BufLength, UBYTE *pBuf, UBYTE ResponseLength);
-NXT_STATUS cCmdLSRead(UBYTE Port, UBYTE BufLength, UBYTE * pBuf);
-
-//
-//Support for OP_SYSCALL
-//
-
-//
-//Each cCmdWrap<SysCallName> funtion below implements one system call.
-//The OP_SYSCALL interpreter wrangles the argument vector, ArgV,
-// then calls the appropriate wrapper function according to the SysCallID.
-//Wrapper functions write directly back into the dataspace via ArgV.
-//
-#define MAX_CALL_ARGS 16
-
-typedef NXT_STATUS (*pSysCall)(UBYTE * ArgV[]);
-
-NXT_STATUS cCmdWrapFileOpenRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileOpenWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileOpenAppend(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileClose(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileResolveHandle (UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileRename (UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapFileDelete (UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSoundPlayFile(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSoundPlayTone(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSoundGetState(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSoundSetState(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawText(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawPoint(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawLine(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawCircle(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawRect(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDrawPicture(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSetScreenMode(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapReadButton(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommLSWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommLSRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommLSCheckStatus(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapRandomNumber(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapGetStartTick(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapMessageWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapMessageRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDatalogWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommBTCheckStatus(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommBTWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommBTRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapKeepAlive(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapIOMapRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapIOMapWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapColorSensorRead (UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapDatalogGetTimes(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapSetSleepTimeout(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapListFiles(UBYTE * ArgV[]);
-
-// Handlers for dynamically added syscalls
-NXT_STATUS cCmdWrapCommHSWrite(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommHSRead(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommHSCheckStatus(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommBTOnOff(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapCommBTConnection(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapReadSemData(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapWriteSemData(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapUpdateCalibCacheInfo(UBYTE * ArgV[]);
-NXT_STATUS cCmdWrapComputeCalibValue(UBYTE * ArgV[]);
-
-
-//Handler for remote control protocol packets -- called from comm module via IO map function pointer
-UWORD cCmdHandleRemoteCommands(UBYTE * pInBuf, UBYTE * pOutBuf, UBYTE * pLen);
-
-#ifdef SIM_NXT
-//
-// Helper functions to provide simulator library access to VM internals
-//
-SWORD cCmdGetCodeWord(CLUMP_ID Clump, CODE_INDEX Index);
-UBYTE * cCmdGetDataspace(UWORD *DataspaceSize);
-DOPE_VECTOR * cCmdGetDopeVectorPtr(void);
-ULONG cCmdGetPoolSize(void);
-MEM_MGR cCmdGetMemMgr(void);
-#endif
-
-#else //!ENABLE_VM
-
-//Placeholder VARSCMD for alternate implementation (see bottom of c_cmd.c for usage notes)
-typedef struct
-{
- UBYTE Tmp;
-} VARSCMD;
-
-#endif //ENABLE_VM
-
-#endif //C_CMD
diff --git a/AT91SAM7S256/Source/c_cmd.iom b/AT91SAM7S256/Source/c_cmd.iom
deleted file mode 100644
index 7c5906c..0000000
--- a/AT91SAM7S256/Source/c_cmd.iom
+++ /dev/null
@@ -1,202 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 3-02-09 9:28 $
-//
-// Filename $Workfile:: c_cmd.iom $
-//
-// Version $Revision: 5 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_cmd. $
-//
-// Platform C
-//
-
-#ifndef CCMD_IOM
-#define CCMD_IOM
-
-#include "modules.h"
-
-#define pMapCmd ((IOMAPCMD*)(pHeaders[ENTRY_CMD]->pIOMap))
-
-//
-// Status/error codes for the VM internal code and bytecodes, loosely categorized
-// Positive values are used for non-error status codes; commonly used by bytecode handlers
-// to affect future execution.
-// Negative values are run-time errors, and the first group is considered "fatal" in that
-// program execution cannot continue when these errors are encountered.
-//
-
-#define STAT_MSG_EMPTY_MAILBOX 64 //0x40 Specified mailbox contains no new messages
-#define STAT_MSG_BUFFERWRAP 16 //0x10 Datalog buffer not being read fast enough
-#define STAT_COMM_PENDING 32 //0x20 Pending setup operation in progress
-
-#define TIMES_UP 6 //0x06 Return to let drivers run
-#define ROTATE_QUEUE 5 //0x05 Give a slice to another queue
-#define STOP_REQ 4 //0x04 Abort current program
-#define BREAKOUT_REQ 3 //0x03 Break multi-instruction interpreter loop; give I/O a chance to run
-#define CLUMP_SUSPEND 2 //0x02 Place clump in stasis; execute others until this one returns to RunQ
-#define CLUMP_DONE 1 //0x01 Finish and reset this clump; execute others until this one is rescheduled
-
-#define NO_ERR 0
-
-//Fatal errors
-#define ERR_ARG -1 //0xFF Bad arguments
-#define ERR_INSTR -2 //0xFE Illegal bytecode instruction
-#define ERR_FILE -3 //0xFD Mal-formed file contents
-#define ERR_VER -4 //0xFC Version mismatch between firmware and compiler
-#define ERR_MEM -5 //0xFB Insufficient memory available
-#define ERR_BAD_PTR -6 //0xFA Someone passed us a bad pointer!
-
-//General errors
-#define ERR_INVALID_PORT -16 //0xF0 Bad input or output port specified
-#define ERR_INVALID_FIELD -17 //0xEF Attempted to access invalid field of a structure
-#define ERR_INVALID_QUEUE -18 //0xEE Illegal queue ID specified
-#define ERR_INVALID_SIZE -19 //0xED Illegal size specified
-#define ERR_NO_PROG -20 //0xEC No active program
-
-//Communications specific errors
-#define ERR_COMM_CHAN_NOT_READY -32 //0xE0 Specified channel/connection not configured or busy
-#define ERR_COMM_CHAN_INVALID -33 //0xDF Specified channel/connection is not valid
-#define ERR_COMM_BUFFER_FULL -34 //0xDE No room in comm buffer
-#define ERR_COMM_BUS_ERR -35 //0xDD Something went wrong on the communications bus
-
-//Remote control ("direct commands") errors
-#define ERR_RC_ILLEGAL_VAL -64 //0xC0 Data contains out-of-range values
-#define ERR_RC_BAD_PACKET -65 //0xBF Clearly insane packet
-#define ERR_RC_UNKNOWN_CMD -66 //0xBE Unknown command opcode
-#define ERR_RC_FAILED -67 //0xBD Request failed (i.e. specified file not found)
-
-//NB: Error codes -96 through -128 (0xA0 through 0x80) reserved for loader (file system) errors
-//This whole range isn't actually used by current loader code, but it's a reasonable range to reserve
-
-#define IS_ERR(Status) ((Status) < NO_ERR)
-
-//Errors are considered fatal if they are something we'd consider halting the VM for.
-#define IS_FATAL(Status) ((Status) < NO_ERR && (Status) >= ERR_BAD_PTR)
-
-//Direct command protocol opcodes
-//!!! These MUST be mutually exclusive with c_comm's protocol opcodes.
-// Since all of c_comm's protocol opcodes are above 0x80, we're safe for now.
-enum
-{
- RC_START_PROGRAM,
- RC_STOP_PROGRAM,
- RC_PLAY_SOUND_FILE,
- RC_PLAY_TONE,
- RC_SET_OUT_STATE,
- RC_SET_IN_MODE,
- RC_GET_OUT_STATE,
- RC_GET_IN_VALS,
- RC_RESET_IN_VAL,
- RC_MESSAGE_WRITE,
- RC_RESET_POSITION,
- RC_GET_BATT_LVL,
- RC_STOP_SOUND,
- RC_KEEP_ALIVE,
- RC_LS_GET_STATUS,
- RC_LS_WRITE,
- RC_LS_READ,
- RC_GET_CURR_PROGRAM,
- RC_GET_BUTTON_STATE,
- RC_MESSAGE_READ,
- RC_RESERVED1,
- RC_RESERVED2,
- RC_RESERVED3,
- RC_RESERVED4,
- RC_RESERVED5,
- RC_DATALOG_READ,
- RC_DATALOG_SET_TIMES,
- RC_BT_GET_CONTACT_COUNT,
- RC_BT_GET_CONTACT_NAME,
- RC_BT_GET_CONN_COUNT,
- RC_BT_GET_CONN_NAME,
- RC_SET_PROPERTY,
- RC_GET_PROPERTY,
- RC_UPDATE_RESET_COUNT,
-
- NUM_RC_OPCODES
-};
-
-// selectors for RC Get and Set properties
-enum {
-RC_PROP_BTONOFF,
-RC_PROP_SOUND_LEVEL,
-RC_PROP_SLEEP_TIMEOUT
-};
-
-//
-//Published status of last program to be activated
-//This value is published so outside parties (like the UI) can check if a program is running,
-//and if not, how the last program ended. Initial value is "PROG_OK".
-//PROG_OK: Last program finished normally.
-//PROG_RUNNING: Program currently running
-//PROG_ERROR: Last program ended because of an error
-//PROG_ABORT: Last program ended because of (user) abort
-//
-typedef enum
-{
- PROG_IDLE,
- PROG_OK,
- PROG_RUNNING,
- PROG_ERROR,
- PROG_ABORT,
- PROG_RESET
-} PROGRAM_STATUS;
-
-//Maximum size of memory pool, in bytes
-//!!! Code assumes this value is evenly divisible by 4!
-#define POOL_MAX_SIZE 32768
-
-//Versioning information
-//Format string must exist verbatim in the header of a valid program file.
-//Also included in IOMAPCMD for remote identification of the VM
-#define VM_FORMAT_STRING "MindstormsNXT"
-//Size of format string above, plus version number packed in the last two bytes.
-#define VM_FORMAT_STRING_SIZE 16
-//Current firmware version defined in c_loader.iom as FIRMWAREVERSION
-//This is the oldest compatible version in the same system
-#define VM_OLDEST_COMPATIBLE_VERSION 0x0004
-//
-//IO Map for Command Module
-// pRCHandler: Function pointer to handler for remote control protocol
-// Tick: Latest value from 1 ms system timer
-
-//!!! Two offset values below are useful for external debugging. They are only valid after a program has started!
-// OffsetDS: Offset to the dataspace (inside MemoryPool); relative to first byte of IOMapCmd
-// OffsetDVA: Offset to the DopeVectorArray (inside MemoryPool); relative to first byte of IOMapCmd
-
-// ProgStatus: Published status of last program to be activated
-// Awake: Boolean is only true after initialization
-
-// ActivateFlag: Set this flag to notify cCmdCtrl to activate new file
-// DeactivateFlag: Set this flag to notify cCmdCtrl to deactivate current program
-
-// FileName[]: Fill in this buffer when using ActivateFlag
-// MemoryPool[]: Main memory pool for program data.
-// (Declared as ULONG for portable alignment; used internally via a byte pointer.)
-//
-typedef struct
-{
- UBYTE FormatString[VM_FORMAT_STRING_SIZE];
- UWORD (*pRCHandler)(UBYTE *, UBYTE *, UBYTE *);
- ULONG Tick;
-
- UWORD OffsetDS;
- UWORD OffsetDVA;
-
- PROGRAM_STATUS ProgStatus;
-
- UBYTE Awake;
-
- UBYTE ActivateFlag;
- UBYTE DeactivateFlag;
- UBYTE FileName[FILENAME_LENGTH + 1];
-
- ULONG MemoryPool[POOL_MAX_SIZE / 4];
-
- ULONG SyncTime;
- ULONG SyncTick;
-} IOMAPCMD;
-
-#endif //CCMD_IOM
diff --git a/AT91SAM7S256/Source/c_cmd_bytecodes.h b/AT91SAM7S256/Source/c_cmd_bytecodes.h
deleted file mode 100644
index 5cd9dfd..0000000
--- a/AT91SAM7S256/Source/c_cmd_bytecodes.h
+++ /dev/null
@@ -1,119 +0,0 @@
-#ifndef C_CMD_BYTECODES
-#define C_CMD_BYTECODES
-//
-// opcode definitions
-// symbol, bits, arg format
-//
-#define OPCODE_COUNT 0x38
-
-//Family: Math
-#define OP_ADD 0x00 // dest, src1, src2
-#define OP_SUB 0x01 // dest, src1, src2
-#define OP_NEG 0x02 // dest, src
-#define OP_MUL 0x03 // dest, src1, src2
-#define OP_DIV 0x04 // dest, src1, src2
-#define OP_MOD 0x05 // dest, src1, src2
-
-//Family: Logic
-#define OP_AND 0x06 // dest, src1, src2
-#define OP_OR 0x07 // dest, src1, src2
-#define OP_XOR 0x08 // dest, src1, src2
-#define OP_NOT 0x09 // dest, src
-
-//Family: Bit manipulation
-#define OP_CMNT 0x0A // dest, src
-#define OP_LSL 0x0B // dest, src
-#define OP_LSR 0x0C // dest, src
-#define OP_ASL 0x0D // dest, src
-#define OP_ASR 0x0E // dest, src
-#define OP_ROTL 0x0F // dest, src
-#define OP_ROTR 0x10 // dest, src
-
-//Family: Comparison
-#define OP_CMP 0x11 // dest, src1, src2
-#define OP_TST 0x12 // dest, src
-#define OP_CMPSET 0x13 // dest, src, testsrc, testsrc
-#define OP_TSTSET 0x14 // dest, src, testsrc
-
-//Family: Array ops
-#define OP_INDEX 0x15 // dest, src, index
-#define OP_REPLACE 0x16 // dest, src, index, val
-#define OP_ARRSIZE 0x17 // dest, src
-#define OP_ARRBUILD 0x18 // instrsize, dest, src1, src2, …
-#define OP_ARRSUBSET 0x19 // dest, src, index, length
-#define OP_ARRINIT 0x1A // dest, elem, length
-
-//Family: Memory ops
-#define OP_MOV 0x1B // dest, src
-#define OP_SET 0x1C // dest, imm
-
-//Family: String ops
-#define OP_FLATTEN 0x1D // dest, src
-#define OP_UNFLATTEN 0x1E // dest, err, src, type
-#define OP_NUMTOSTRING 0x1F // dest, src
-#define OP_STRINGTONUM 0x20 // dest, offsetpast, src, offset, default
-#define OP_STRCAT 0x21 // instrsize, dest, src1, src2, …
-#define OP_STRSUBSET 0x22 // dest, src, index, length
-#define OP_STRTOBYTEARR 0x23 // dest, src
-#define OP_BYTEARRTOSTR 0x24 // dest, src
-
-//Family: Control flow
-#define OP_JMP 0x25 // offset
-#define OP_BRCMP 0x26 // offset, src1, src2
-#define OP_BRTST 0x27 // offset, src
-#define OP_SYSCALL 0x28 // func, args
-#define OP_STOP 0x29 // stop?
-
-//Family: Clump scheduling
-#define OP_FINCLUMP 0x2A // start, end
-#define OP_FINCLUMPIMMED 0x2B // clumpID
-#define OP_ACQUIRE 0x2C // mutexID
-#define OP_RELEASE 0x2D // mutexID
-#define OP_SUBCALL 0x2E // subroutine, callerID
-#define OP_SUBRET 0x2F // callerID
-
-//Family: IO ops
-#define OP_SETIN 0x30 // src, port, propid
-#define OP_SETOUT 0x31 // src, port, propid
-#define OP_GETIN 0x32 // dest, port, propid
-#define OP_GETOUT 0x33 // dest, port, propid
-
-//Family: Timing
-#define OP_WAIT 0x34 // dest, src
-#define OP_GETTICK 0x35 // dest
-
-//Family: Math NEW
-#define OP_SQRT 0x36 // dest, src
-#define OP_ABS 0x37 // dest, src
-
-// condition code definitions
-#define OPCC1_LT 0x00
-#define OPCC1_GT 0x01
-#define OPCC1_LTEQ 0x02
-#define OPCC1_GTEQ 0x03
-#define OPCC1_EQ 0x04
-#define OPCC1_NEQ 0x05
-
-
-
-//
-// short op definitions
-//
-#define USE_SHORT_OPS
-#define SHORT_OP_MOV 0
-#define SHORT_OP_ACQUIRE 1
-#define SHORT_OP_RELEASE 2
-#define SHORT_OP_SUBCALL 3
-
-//
-// short op mapping table
-//
-static UBYTE ShortOpMap[4] =
-{
- OP_MOV,
- OP_ACQUIRE,
- OP_RELEASE,
- OP_SUBCALL
-};
-
-#endif // C_CMD_BYTECODES
diff --git a/AT91SAM7S256/Source/c_cmd_drawing.inc b/AT91SAM7S256/Source/c_cmd_drawing.inc
deleted file mode 100644
index 0132d44..0000000
--- a/AT91SAM7S256/Source/c_cmd_drawing.inc
+++ /dev/null
@@ -1,894 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 8/26/05 4:17p $
-//
-// Filename $Workfile:: c_cmd.c $
-//
-// Version $Revision:: 35 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main/Firmware/Source/c_cmd_drawing.c $
-//
-// Platform C
-//
-
-//absolute value of a
-#define ABS(a) (((a)<0) ? -(a) : (a))
-
-//take binary sign of a, either -1, or 1 if >= 0
-#define SGN(a) (((a)<0) ? -1 : 1)
-
-#define DISP_BUFFER_P ((UBYTE*)&(pMapDisplay->Normal))
-
-//------------------------------------------------------------------
-// cCmdClearScreenIfNeeded - Clear entire sceen buffer if explicitly requested or implicitly required.
-void cCmdClearScreenIfNeeded(ULONG DrawOptions);
-
-//------------------------------------------------------------------
-// cCmdRestorDefaultScreen - Restore screen to default 'Running' screen
-void cCmdRestoreDefaultScreen(void);
-
-//------------------------------------------------------------------
-// cCmdDrawString - Draw string to display buffer
-void cCmdDrawString(UBYTE *pString, ULONG X, ULONG Y);
-
-// OP codes supported by RIC files
-enum {
- IMG_DESCRIPTION_ID = 0, // Ignored at this time
- IMG_SPRITE_ID = 1,
- IMG_VARMAP_ID = 2,
- IMG_COPYBITS_ID = 3,
- IMG_PIXEL_ID = 4,
- IMG_LINE_ID = 5,
- IMG_RECTANGLE_ID = 6,
- IMG_CIRCLE_ID = 7,
- IMG_NUMBOX_ID = 8
-};
-
-#define IMG_SYMB_USEARGS(_v) (_v & (SWORD)0xF000)
-#define IMG_SYMB_MAP(_v) ((_v & 0x0F00) >> 8)
-#define IMG_SYMB_ARG(_v) (_v & 0x000F)
-
-// DrawingOptions
-#define DRAW_OPT_CLEAR_WHOLE_SCREEN (0x0001)
-#define DRAW_OPT_CLEAR_EXCEPT_STATUS_SCREEN (0x0002)
-#define DRAW_OPT_CLEAR_MODE(_v) ((_v) & 0x0003)
-
-
-// Clear Before Drawing Modes for Draw functions
-enum {
- DO_NOT_CLEAR = 0,
- CLEAR_B4_DRAW = 1
-};
-
-// Screen Modes for SetScreenMode function
-enum {
- RESTORE_NXT_SCREEN = 0
-};
-
-#define IMG_COMMON_FIELDS UWORD OpSize; UWORD OpCode;
-
-#define TRANSLATE_Y(_y) ((DISPLAY_HEIGHT-1) - (_y))
-
-typedef struct
-{
- SWORD X, Y;
-} IMG_PT;
-
-typedef struct
-{
- IMG_PT Pt;
- SWORD Width, Height;
-} IMG_RECT;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
-} IMG_OP_CORE;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD Options;
- UWORD Width;
- UWORD Height;
-} IMG_OP_DESCRIPTION;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD DataAddr; //Address sprite handle will be stored in.
- UWORD Rows; //Second deminsion of the array below.
- UWORD RowBytes; //The actual size of the following array. Must be even.
- UBYTE Bytes[2]; //Minimum of two for alignment purposes
-} IMG_OP_SPRITE;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD DataAddr; //Address sprite handle will be stored in.
- UWORD MapCount; //The actual size of the following array. Must be even.
- struct
- { //Minimum of two for alignment purposes
- UWORD Domain;
- UWORD Range;
- } MapElt[1];
-} IMG_OP_VARMAP;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions; // Copy, CopyNot, Or, BitClear;
- UWORD DataAddr; // Address of an already defined sprite
- IMG_RECT Src; // Source rectangle
- IMG_PT Dst; // Destination left top
-} IMG_OP_COPYBITS;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions;
- IMG_PT Pt;
- UWORD Value; // typically mapped to an argument
-} IMG_OP_PIXEL;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions;
- IMG_PT Pt1;
- IMG_PT Pt2;
-} IMG_OP_LINE;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions;
- IMG_PT Pt;
- SWORD Width, Height;
-} IMG_OP_RECT;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions;
- IMG_PT Pt;
- UWORD Radius;
-} IMG_OP_CIRCLE;
-
-typedef struct
-{
- IMG_COMMON_FIELDS
- UWORD CopyOptions;
- IMG_PT Pt;
- UWORD Value; // typically mapped to an argument
-} IMG_OP_NUMBOX;
-
-typedef union
-{ IMG_OP_CORE Core;
- IMG_OP_DESCRIPTION Desc;
- IMG_OP_SPRITE Sprite;
- IMG_OP_VARMAP VarMap;
- IMG_OP_COPYBITS CopyBits;
- IMG_OP_PIXEL Pixel;
- IMG_OP_LINE Line;
- IMG_OP_RECT Rect;
- IMG_OP_CIRCLE Circle;
- IMG_OP_NUMBOX NumBox;
-} IMG_OP_UNION;
-
-// Variables for DrawImage
-#define IMG_MAX_DATA 11
-IMG_OP_UNION * gpImgData[IMG_MAX_DATA];
-SLONG * gpPassedImgVars;
-SWORD gPassedVarsCount;
-
-// Private Prototypes
-void cCmdDrawLine(SLONG x1, SLONG y1, SLONG x2, SLONG y2);
-void cCmdDrawRect(SLONG left, SLONG bottom, SLONG width, SLONG hieght);
-void cCmdCopyBitMapBits(SLONG dst_x, SLONG dst_y,
- SLONG src_x, SLONG src_y, SLONG src_width, SLONG src_height,
- IMG_OP_SPRITE * pSprite);
-SLONG cCmdResolveValue(SWORD Value);
-void cCmdSetPixel(SLONG X, SLONG Y, ULONG Val);
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawText
-//ArgV[0]: (Function return) Status byte, SBYTE
-//ArgV[1]: Location (IMG_PT *)
-//ArgV[2]: Text (CStr)
-//ArgV[3]: Options (ULONG)
-//
-NXT_STATUS cCmdWrapDrawText(UBYTE * ArgV[])
-{
- IMG_PT * pPt = (IMG_PT*) ArgV[1];
-
- ArgV[2] = (UBYTE*)cCmdDVPtr(*(DV_INDEX *)(ArgV[2])); //Resolve array argument
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[3]);
-
- // Display the String
- cCmdDrawString(ArgV[2], (UBYTE)pPt->X, (UBYTE)(pPt->Y));
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- // Set return value
- *((SBYTE*)(ArgV[0])) = NO_ERR;
-
- return NO_ERR;
-}
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawPoint
-//ArgV[0]: (Function return) Status byte, SBYTE
-//ArgV[1]: Location (IMG_PT *)
-//ArgV[2]: Options (ULONG)
-NXT_STATUS cCmdWrapDrawPoint(UBYTE * ArgV[])
-{
- IMG_PT * pPt = (IMG_PT*) ArgV[1];
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[2]);
-
- // Display the String
- cCmdSetPixel(pPt->X, pPt->Y, TRUE);
-
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- // Set return value
- *((SBYTE*)(ArgV[0])) = NO_ERR;
-
- return NO_ERR;
-}
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawLine
-//ArgV[0]: (Function return) Status byte, SBYTE
-//ArgV[1]: Start Location (IMG_PT *)
-//ArgV[2]: End Location (IMG_PT *)
-//ArgV[3]: Options (ULONG)
-NXT_STATUS cCmdWrapDrawLine(UBYTE * ArgV[])
-{
- IMG_PT * pPt1 = (IMG_PT*) ArgV[1];
- IMG_PT * pPt2 = (IMG_PT*) ArgV[2];
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[3]);
-
- cCmdDrawLine(pPt1->X, pPt1->Y, pPt2->X, pPt2->Y);
-
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- // Set return value
- *((SBYTE*)(ArgV[0])) = NO_ERR;
-
- return NO_ERR;
-}
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawCircle
-//ArgV[0]: (Function return) Status byte, SBYTE
-//ArgV[1]: Start Location (IMG_PT *)
-//ArgV[2]: Radius (U8)
-//ArgV[3]: Options (ULONG)
-NXT_STATUS cCmdWrapDrawCircle(UBYTE * ArgV[])
-{
- SLONG x, x1, y1, y, dp, delta;
- IMG_PT * pPt = (IMG_PT*) ArgV[1];
- SLONG radius = *(UBYTE*)ArgV[2];
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[3]);
-
- x1 = pPt->X;
- y1 = pPt->Y;
- x = 0;
- y = radius;
- dp=2*(1-radius);
- while(y >= 0)
- {
- cCmdSetPixel((x+x1), (y+y1), TRUE);
- cCmdSetPixel((-x+x1),(-y+y1), TRUE);
- cCmdSetPixel((x+x1), (-y+y1), TRUE);
- cCmdSetPixel((-x+x1),(y+y1), TRUE);
- if(dp<0)
- {
- delta = 2*dp + 2*y - 1;
- if (delta > 0)
- {
- x++;
- y--;
- dp += 2*x - 2*y + 2;
- }
- else
- {
- x++;
- dp += 2*x + 1;
- }
- }
- else if (dp > 0)
- {
- delta = 2*dp - 2*x - 1;
- if (delta > 0)
- {
- y--;
- dp += 1 - 2*y;
- }
- else
- {
- x++;
- y--;
- dp += 2*x - 2*y + 2;
- }
- }
- else
- {
- x++;
- y--;
- dp += 2*x - 2*y +2;
- }
- }
-
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- // Set return value
- *((SBYTE*)(ArgV[0])) = NO_ERR;
-
- return NO_ERR;
-}
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawRect
-//ArgV[0]: (Function return) Status byte, SBYTE
-//ArgV[1]: TopLeft (IMG_PT *)
-//ArgV[2]: BottomRight (IMG_PT *)
-//ArgV[3]: Options (ULONG)
-NXT_STATUS cCmdWrapDrawRect(UBYTE * ArgV[])
-{
- IMG_PT * pPt1 = (IMG_PT*) ArgV[1];
- IMG_PT * pPt2 = (IMG_PT*) ArgV[2]; // Second point is actually (width, height)
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[3]);
-
- cCmdDrawRect(pPt1->X, pPt1->Y, pPt2->X, pPt2->Y);
-
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
-
- // Set return value
- *((SBYTE*)(ArgV[0])) = NO_ERR;
-
- return NO_ERR;
-}
-
-//-----------------------------------------------------------------
-IMG_OP_UNION * cCmdGetIMGData(ULONG DataAddr)
-{
- if (DataAddr >= IMG_MAX_DATA)
- return NULL;
- else
- return gpImgData[DataAddr];
-}
-
-//-----------------------------------------------------------------
-void cCmdSetIMGData(ULONG DataAddr, IMG_OP_UNION * pSprite)
-{
- if ((DataAddr >= 1) && (DataAddr < IMG_MAX_DATA))
- gpImgData[DataAddr] = pSprite;
-}
-
-//-----------------------------------------------------------------
-SLONG cCmdResolveValue(SWORD Value)
-{
- if (!IMG_SYMB_USEARGS(Value))
- {
- return Value;
- }
- else
- {
- IMG_OP_VARMAP * pVarMap;
- SLONG Arg;
-
- pVarMap = (IMG_OP_VARMAP *) cCmdGetIMGData((SWORD)IMG_SYMB_MAP(Value));
- Arg = gpPassedImgVars[IMG_SYMB_ARG(Value)];
-
- if (!pVarMap)
- {
- // No map, this implies a 1:1 mapping.
- return Arg;
- }
- else
- {
- // Scan through the list finding the pair the Arg lies between
- // Then linearly interpolate the mapping.
- SLONG i, DCur, RCur, DSpread, VSpread, RSpread;
- SLONG Count = pVarMap->MapCount;
- SLONG DPrev = pVarMap->MapElt[0].Domain;
- SLONG RPrev = pVarMap->MapElt[0].Range;
- if (Arg <= DPrev)
- {
- // Too small, map it to the first point
- return RPrev;
- }
-
- for (i = 1; i < Count; i++)
- {
- DCur = pVarMap->MapElt[i].Domain;
- RCur = pVarMap->MapElt[i].Range;
- if (Arg < DCur)
- {
- DSpread = DCur - DPrev;
- VSpread = Arg - DPrev;
- RSpread = RCur - RPrev;
- // Found the point and mapped, it return.
- return (RPrev+((VSpread*RSpread)/DSpread));
- }
- DPrev = DCur;
- RPrev = RCur;
- }
- // If we get this far then it is too large, map it to the last point.
- return RCur;
- }
- }
-}
-
-
-//-----------------------------------------------------------------
-//cCmdWrapDrawGraphic
-//ArgV[0]: (Function return) Status Byte, SBYTE
-//ArgV[1]: Left Top (IMG_PT *)
-//ArgV[2]: Filename, CStr
-//ArgV[3]: Variables, array of I32
-//ArgV[4]: Options (ULONG)
-NXT_STATUS cCmdWrapDrawPicture(UBYTE * ArgV[])
-{
- SBYTE * pReturnVal = (SBYTE*)(ArgV[0]);
- LOADER_STATUS LStatus;
- NXT_STATUS DStatus = NO_ERR;
- ULONG DataSize;
- SLONG OpSize;
- IMG_PT Pt; // Where to draw the picture at (up and to the right)
- UBYTE ImageHandle;
- IMG_OP_UNION * pImage;
-
- //Resolve array argument
- ArgV[2] = (UBYTE*)cCmdDVPtr(*(DV_INDEX *)(ArgV[2]));
- ArgV[3] = (UBYTE*)cCmdDVPtr(*(DV_INDEX *)(ArgV[3]));
-
- cCmdClearScreenIfNeeded(*(ULONG*)ArgV[4]);
-
- //Open the file in memory map mode. return if failure.
- LStatus = pMapLoader->pFunc(OPENREADLINEAR, ArgV[2], (UBYTE*)(&pImage), &DataSize);
- ImageHandle = LOADER_HANDLE(LStatus);
-
- //If error opening file, give up and write loader status back to user.
- if (LOADER_ERR(LStatus) != SUCCESS || pImage == NULL)
- {
- *pReturnVal = (SBYTE)(LOADER_ERR_BYTE(LStatus));
- return (NO_ERR);
- }
- //Else, start interpretting the file
- else
- {
- // Read the ArgV params, Clear the data table.
- Pt = *(IMG_PT*)ArgV[1];
- //!!! Unsafe assumption that array is non-empty. Should check and avoid using pointer if empty.
- gpPassedImgVars = (SLONG*)ArgV[3];
- memset(gpImgData,0,sizeof(gpImgData));
-
- // Run through the op codes.
- while(!IS_ERR(DStatus))
- {
- // Setup to look at an opcode, make sure it looke reasonable.
- if (DataSize < sizeof(IMG_OP_CORE))
- {
- DStatus = ERR_FILE;
- break; // Too small to look at, somethings wrong.
- }
- OpSize = pImage->Core.OpSize + sizeof(UWORD);
- if (OpSize & 0x01)
- {
- DStatus = ERR_FILE;
- break; // Odd sizes not allowed.
- }
-
- switch(pImage->Core.OpCode)
- {
- case IMG_SPRITE_ID:
- {
- if (OpSize >= sizeof(IMG_OP_SPRITE))
- cCmdSetIMGData(pImage->Sprite.DataAddr, pImage);
- }
- break;
-
- case IMG_VARMAP_ID:
- {
- if (OpSize >= sizeof(IMG_OP_VARMAP))
- cCmdSetIMGData(pImage->VarMap.DataAddr, pImage);
- }
- break;
-
- case IMG_COPYBITS_ID:
- {
- if (OpSize >= sizeof(IMG_OP_COPYBITS))
- {
- IMG_OP_COPYBITS * pCB = &(pImage->CopyBits);
- cCmdCopyBitMapBits(
- (cCmdResolveValue(pCB->Dst.X) + Pt.X),
- (cCmdResolveValue(pCB->Dst.Y) + Pt.Y),
- cCmdResolveValue((pCB->Src.Pt.X)),
- cCmdResolveValue((pCB->Src.Pt.Y)),
- cCmdResolveValue((pCB->Src.Width)),
- cCmdResolveValue((pCB->Src.Height)),
- (IMG_OP_SPRITE*)cCmdGetIMGData(cCmdResolveValue(pCB->DataAddr)));
- }
- }
- break;
-
- case IMG_LINE_ID:
- {
- if (OpSize >= sizeof(IMG_OP_LINE))
- {
- IMG_OP_LINE * pL = &(pImage->Line);
- cCmdDrawLine(
- (cCmdResolveValue(pL->Pt1.X)+Pt.X),
- (cCmdResolveValue(pL->Pt1.Y)+Pt.Y),
- (cCmdResolveValue(pL->Pt2.X)+Pt.X),
- (cCmdResolveValue(pL->Pt2.Y)+Pt.Y)
- );
- }
- }
- break;
-
- case IMG_RECTANGLE_ID:
- {
- if (OpSize >= sizeof(IMG_OP_LINE))
- {
- IMG_OP_RECT * pL = &(pImage->Rect);
- cCmdDrawRect(
- (SWORD)(cCmdResolveValue(pL->Pt.X)+Pt.X),
- (SWORD)(cCmdResolveValue(pL->Pt.Y)+Pt.Y),
- (SWORD)(cCmdResolveValue(pL->Width)),
- (SWORD)(cCmdResolveValue(pL->Height))
- );
- }
- }
- break;
-
- case IMG_PIXEL_ID:
- {
- if (OpSize >= sizeof(IMG_OP_PIXEL))
- {
- cCmdSetPixel(
- (cCmdResolveValue(pImage->Pixel.Pt.X) + Pt.X),
- (cCmdResolveValue(pImage->Pixel.Pt.Y) + Pt.Y),
- TRUE);
- }
- }
- break;
-
- case IMG_NUMBOX_ID:
- {
- if (OpSize >= sizeof(IMG_OP_NUMBOX))
- {
- UBYTE NumStr[20];
- IMG_OP_NUMBOX * pNB = &(pImage->NumBox);
- sprintf((PSZ)NumStr, "%d", cCmdResolveValue(pNB->Value));
- cCmdDrawString(
- NumStr,
- (UBYTE) (cCmdResolveValue(pNB->Pt.X) + Pt.X),
- (UBYTE) (cCmdResolveValue(pNB->Pt.Y) + Pt.Y));
- }
- }
- break;
-
- case IMG_DESCRIPTION_ID:
- {
- //No-op
- }
- break;
-
- default:
- {
- //Unrecognized opcode, pass an error back to the user.
- DStatus = ERR_FILE;
- }
- break;
- }
-
- DataSize -= OpSize;
- pImage = (IMG_OP_UNION*) ((UBYTE*)pImage + OpSize);
- }
-
- pMapDisplay->UpdateMask |= SCREEN_BIT(SCREEN_BACKGROUND);
- }
-
- // Set return value, close file and return
- *pReturnVal = DStatus;
- pMapLoader->pFunc(CLOSE, &ImageHandle, NULL, NULL);
- return (NO_ERR);
-}
-
-//-----------------------------------------------------------------
-// cCmdDrawLine - draw a line. All clipping is done by the set pixel function.
-void cCmdDrawLine(
- SLONG x1,
- SLONG y1,
- SLONG x2,
- SLONG y2)
-{
- SLONG d,x,y,ax,ay,sx,sy,dx,dy;
-
- // Initialize variables
- dx = x2-x1; ax = ABS(dx)<<1; sx = SGN(dx);
- dy = y2-y1; ay = ABS(dy)<<1; sy = SGN(dy);
- x = x1;
- y = y1;
- if (ax>ay)
- { /* x dominant */
- d = ay-(ax>>1);
- for (;;)
- {
- cCmdSetPixel(x, y, TRUE);
- if (x==x2)
- return;
- if (d>=0)
- {
- y += sy;
- d -= ax;
- }
- x += sx;
- d += ay;
- }
- }
- else
- { /* y dominant */
- d = ax-(ay>>1);
- for (;;)
- {
- cCmdSetPixel(x, y, TRUE);
- if (y==y2)
- return;
- if (d>=0)
- {
- x += sx;
- d -= ay;
- }
- y += sy;
- d += ax;
- }
- }
-}
-
-
-//-----------------------------------------------------------------
-// cCmdDrawRect - draw a rectangle. All clipping is done by the set pixel function.
-void cCmdDrawRect(
- SLONG left,
- SLONG bottom,
- SLONG width,
- SLONG height)
-{
- SLONG right = left + width;
- SLONG top = bottom + height;
-
- // Draw the four line segments
- cCmdDrawLine(left, top, right, top);
- cCmdDrawLine(right, top, right, bottom);
- cCmdDrawLine(right, bottom, left, bottom);
- cCmdDrawLine(left, bottom, left, top);
-}
-
-
-#ifndef DISPLAY_REALWIDTH
- #define DISPLAY_REALWIDTH DISPLAY_WIDTH
-#endif
-//-----------------------------------------------------------------
-//cCmdCopyBitMapBits
-void cCmdCopyBitMapBits(
- SLONG dst_x, // left pixel on LCD
- SLONG dst_y, // bottom pixel on LCD
- SLONG src_x, // starting pixel x coordinate from source map
- SLONG src_y, // starting pixel y coordinate from source map
- SLONG src_width, // width in pixels to the right (negative implies to the left)
- SLONG src_height, // height in pixels down (negative implies down)
- IMG_OP_SPRITE * pSprite)
-{
- SLONG dy; // Location in the destination pixmap , the screen that is
- SLONG sx;
- SLONG sy; // Location in the source pixmap.
- SLONG trim, last_x, last_y, rowbytes;
- UBYTE *pSrcByte;
- UBYTE *pDstBytes;
- UBYTE *pDstByte, *pFirstDstByte;
- UBYTE *pLastDstByte;
- UBYTE bit_y, not_bit_y;
- UBYTE masks[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
-
- // Data in the image file is row major 8 pixels per byte.top row first.
- // src and dst coordinates treat the bottom left most pixel as (0,0)
-
- if (!pSprite || pSprite->OpCode!=IMG_SPRITE_ID)
- return;
-
- pDstBytes = DISP_BUFFER_P;
-
- // Clip the edges. Modify the source and width as well.
- if (dst_x < 0) { // bounds check start of x
- trim = (0 - dst_x);
- dst_x = 0;
- src_x += trim;
- src_width -= trim;
- }
-
- last_x = dst_x + src_width;
- if (last_x > DISPLAY_WIDTH) // bound check end of x
- last_x = DISPLAY_WIDTH;
-
- if (dst_y < 0) { // bound check start of y
- trim = (0 - dst_y);
- dst_y = 0;
- src_y += trim; // fix up source as well since we are clipping the start of the loop
- src_height -= trim;
- }
-
- last_y = dst_y + src_height;
- if (last_y > DISPLAY_HEIGHT) // bound check end of y
- last_y = DISPLAY_HEIGHT;
-
- // Convert the 0,0 bottom left origin to the top left 0,0 used by the actual
- // buffer
- last_y = TRANSLATE_Y(last_y);
- dst_y = TRANSLATE_Y(dst_y);
-
- // The last row is the top most scan line in the LCD Buffer
- // so limit if the copy would copy into memory before the buffer.
- // The first row copied will be the one closest to the bottom of the LCD
- // If that is off screen then limit as well and adjust the start point on the start
-
- // Copy bits top to top moving down.
- sy = src_y;
- rowbytes = pSprite->RowBytes;
-
- pSrcByte = pSprite->Bytes + ((pSprite->Rows - 1 - sy) * rowbytes);
- pFirstDstByte = pDstBytes + ((dst_y >> 3) * DISPLAY_REALWIDTH) + dst_x;
- for (dy = dst_y; dy > last_y; dy--)
- {
- sx = src_x;
- bit_y = masks[7 - (dy & 0x07)];
- not_bit_y = ~ bit_y;
- pDstByte = pFirstDstByte;
- pLastDstByte = pDstByte + (last_x - dst_x);
- for (; pDstByte < pLastDstByte; pDstByte++)
- {
- if ( *(pSrcByte + (sx >> 3)) & masks[sx & 0x07] ){
- *pDstByte |= bit_y;
- } else {
- *pDstByte &= not_bit_y;
- }
- sx ++;
- }
- pSrcByte -= rowbytes;
- sy ++;
- if ((dy & 0x07) == 0) // bump back the scan line start point at rollover
- pFirstDstByte -= DISPLAY_REALWIDTH;
- }
-
-}
-
-//-----------------------------------------------------------------
-// cCmdSetPixel - Set or clear a pixel based on Val
-void cCmdSetPixel(SLONG X, SLONG Y, ULONG Val)
-{
- Y = TRANSLATE_Y(Y);
-
- pMapDisplay->pFunc(DISPLAY_PIXEL, (UBYTE)Val, (UBYTE)X, (UBYTE)Y, 0, 0);
-}
-
-
-//-----------------------------------------------------------------
-//cCmdWrapSetScreenMode
-//ArgV[0]: (Function return) Status code, SBYTE
-//ArgV[1]: ScreenMode ULONG
-NXT_STATUS cCmdWrapSetScreenMode(UBYTE * ArgV[])
-{
- ULONG ScreenMode = (ULONG)(*ArgV[1]);
- if (ScreenMode == RESTORE_NXT_SCREEN) {
- cCmdRestoreDefaultScreen();
- }
-
- // Set return value
- *(SBYTE*)(ArgV[0]) = NO_ERR;
- return NO_ERR;
-}
-
-//------------------------------------------------------------------
-// cCmdClearScreenIfNeeded - Clear entire sceen buffer if explicitly requested or implicitly required.
-void cCmdClearScreenIfNeeded(ULONG DrawOptions)
-{
- //If we are the first drawing command, clear the screen and record that we've done so
- if (VarsCmd.DirtyDisplay == FALSE)
- {
- VarsCmd.DirtyDisplay = TRUE;
- pMapUi->Flags &= ~UI_ENABLE_STATUS_UPDATE;
-
- //Override DrawOptions because we have to clear anyway
- DrawOptions = DRAW_OPT_CLEAR_WHOLE_SCREEN;
- }
-
- if (DRAW_OPT_CLEAR_MODE(DrawOptions))
- {
- pMapDisplay->pFunc(DISPLAY_ERASE_ALL, 0, 0, 0, 0, 0);
-
- //Clear UpdateMask to kill any pending updates
- pMapDisplay->UpdateMask = 0;
- }
-
- return;
-}
-
-//------------------------------------------------------------------
-// cCmdDrawString - Draw string to display buffer
-// Properly uses 'Normal' display buffer to avoid conflicts with popup buffer
-// Clips text at bottom and right hand edges of the screen buffer
-//!!! Function copied and modified from cDisplayString
-void cCmdDrawString(UBYTE *pString, ULONG X, ULONG Y)
-{
- UBYTE *pSource;
- UBYTE *pDestination;
- FONT *pFont;
- ULONG FontWidth;
- ULONG Items;
- ULONG Item;
- ULONG Line;
-
- //Get current font information
- pFont = pMapDisplay->pFont;
- Items = pFont->ItemsX * pFont->ItemsY;
-
- //Invert Y coordinate to match display buffer
- Y = TRANSLATE_Y(Y);
- Line = (Y & 0xF8) / 8;
-
- //If text line is out of bounds, do nothing.
- if (Line >= TEXTLINES)
- return;
-
- //Calculate pointer to first byte of drawing destination
- pDestination = &(DISP_BUFFER_P[Line * DISPLAY_WIDTH + X]);
-
- while (*pString)
- {
- FontWidth = pFont->ItemPixelsX;
- //Calculate X coordinate of the right edge of this character.
- //If it will extend past the right edge, clip the string.
- X += FontWidth;
- if (X >= DISPLAY_WIDTH)
- break;
-
- //If Item is defined by the font, display it. Else, ignore it.
- Item = *pString - ' ';
- if (Item < Items)
- {
- pSource = (UBYTE*)&(pFont->Data[Item * FontWidth]);
- while (FontWidth--)
- {
- *pDestination = *pSource;
- pDestination++;
- pSource++;
- }
- }
- pString++;
- }
-}
-
-//------------------------------------------------------------------
-// cCmdRestoreDefaultScreen - Restore to Default 'Running' screen
-void cCmdRestoreDefaultScreen(void)
-{
- //If this program has taken over the display, reset it for the UI
- if (VarsCmd.DirtyDisplay == TRUE)
- {
- VarsCmd.DirtyDisplay = FALSE;
-
- pMapDisplay->pFunc(DISPLAY_ERASE_ALL, 0, 0, 0, 0, 0);
- pMapDisplay->UpdateMask = SCREEN_BIT(SCREEN_BACKGROUND);
-
- pMapUi->Flags |= UI_ENABLE_STATUS_UPDATE | UI_REDRAW_STATUS;
- }
-}
diff --git a/AT91SAM7S256/Source/c_comm.c b/AT91SAM7S256/Source/c_comm.c
deleted file mode 100644
index 176a1ff..0000000
--- a/AT91SAM7S256/Source/c_comm.c
+++ /dev/null
@@ -1,3714 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 8-09-08 14:11 $
-//
-// Filename $Workfile:: c_comm.c $
-//
-// Version $Revision: 7 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_comm $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_comm.iom"
-#include "c_loader.iom"
-#include "c_ioctrl.iom"
-#include "c_ui.iom"
-#include "c_cmd.iom"
-#include "c_display.iom"
-#include "c_comm.h"
-#include "d_usb.h"
-#include "d_hispeed.h"
-#include "d_bt.h"
-#include <string.h>
-#include <ctype.h>
-#ifdef ARMDEBUG
-#include "debug_stub.h"
-#endif
-
-enum
-{
- DEVICE_VERIFIED,
- DEVICE_UPDATED,
- DEVICE_INSERTED
-};
-
-#define DEFAULTBTADR "\x00\x16\x53\xFF\xFF\xFF"
-#define BTSTREAMTOUT 610
-
-#define LOOKUPNO 3
-
-#define CLEARExtMode {\
- UBYTE Tmp;\
- for(Tmp = 0; Tmp < NO_OF_CHANNELS; Tmp++)\
- {\
- VarsComm.ExtMode[Tmp].Status = FALSE;\
- }\
- }
-
-#define CHNumber(Bit) (Bit>>1)
-#define SETBtStateIdle VarsComm.ActiveUpdate = UPD_IDLE;\
- VarsComm.UpdateState = 0;\
- VarsComm.StreamStateCnt = 0;\
- VarsComm.CmdSwitchCnt = 0;\
- VarsComm.CloseConn0Cnt = 0;\
- VarsComm.DiscAllCnt = 0;\
- VarsComm.ResetBtCnt = 0
-
-#define SETBtCmdState VarsComm.BtState = BT_ARM_CMD_MODE;\
- IOMapComm.BtInBuf.InPtr = 0;\
- CLEARExtMode;\
- dBtClearArm7CmdSignal();\
- dBtInitReceive(VarsComm.BtModuleInBuf.Buf, (UBYTE)CMD_MODE);
-
-#define SETBtDataState IOMapComm.BtInBuf.InPtr = 0;\
- VarsComm.BtState = BT_ARM_DATA_MODE;\
- dBtClearTimeOut(); /* stop cmd timeout because in datamode */\
- dBtSetArm7CmdSignal();\
- dBtInitReceive(VarsComm.BtModuleInBuf.Buf, (UBYTE)STREAM_MODE)
-
-#define SETBtOff VarsComm.BtState = BT_ARM_OFF;\
- dBtSetBcResetPinLow()
-
-#define CLEARConnEntry(Index) memset((IOMapComm.BtConnectTable[Index].BdAddr), 0, SIZE_OF_BDADDR);\
- memset(IOMapComm.BtConnectTable[Index].Name, 0, SIZE_OF_BT_NAME);\
- memset((IOMapComm.BtConnectTable[Index].ClassOfDevice), 0, SIZE_OF_CLASS_OF_DEVICE);\
- memset((IOMapComm.BtConnectTable[Index].PinCode), 0, SIZE_OF_BT_PINCODE);\
- IOMapComm.BtConnectTable[Index].HandleNr = BLUETOOTH_HANDLE_UNDEFIEND;\
- IOMapComm.BtConnectTable[Index].StreamStatus = 0;\
- IOMapComm.BtConnectTable[Index].LinkQuality = 0
-
-#define FILETXTOUT 30000
-
-const UBYTE BootString[] = {"Let's dance: SAMBA"};
-const UBYTE NoName[SIZE_OF_BT_NAME] = {"No Name"};
-
-static IOMAPCOMM IOMapComm;
-static VARSCOMM VarsComm;
-static HEADER **pHeaders;
-
-const HEADER cComm =
-{
- 0x00050001L,
- "Comm",
- cCommInit,
- cCommCtrl,
- cCommExit,
- (void *)&IOMapComm,
- (void *)&VarsComm,
- (UWORD)sizeof(IOMapComm),
- (UWORD)sizeof(VarsComm),
- 0x0000 /* Code size - not used so far */
-};
-
-UWORD cCommReceivedBtData(void);
-void cCommBtCmdInterpreter(void);
-UWORD cCommInterprete(UBYTE *pInBuf, UBYTE *pOutBuf, UBYTE *pLength, UBYTE CmdBit, UWORD MsgLength);
-UWORD cCommInterpreteCmd(UBYTE Cmd, UBYTE *pInBuf, UBYTE *pOutBuf, UBYTE *pLength, UBYTE CmdBit, UWORD MsgLength);
-void cCommCpyToUpper(UBYTE *pDst, UBYTE *pSrc, UBYTE Length);
-void cCommCopyFileName(UBYTE *pDst, UBYTE *pSrc);
-void cCommSendHiSpeedData(void);
-void cCommReceivedHiSpeedData(void);
-UWORD cCommReq(UBYTE Cmd, UBYTE Param1, UBYTE Param2, UBYTE Param3, UBYTE *pName, UWORD *pRetVal);
-UBYTE cCommBtValidateCmd(void);
-
-void cCommClearStreamStatus(void);
-void cCommUpdateBt(void);
-UWORD cCommCopyBdaddr(UBYTE *pDst, UBYTE *pSrc);
-UWORD cCommInsertBtName(UBYTE *pDst, UBYTE *pSrc);
-UWORD cCommCheckBdaddr(UBYTE *pAdr, UBYTE *pSrc);
-UWORD cCommInsertDevice(UBYTE *pBdaddr, UBYTE *pName, UBYTE *pCod, UBYTE DeviceStatus, UBYTE *pAddInfo);
-void cCommsSetCmdMode(UBYTE *pNextState);
-void cCommsOpenStream(UBYTE *pNextState);
-void cCommsCloseConn0(UBYTE *pNextState);
-void cCommsDisconnectAll(UBYTE *pNextState);
-void cCommsBtReset(UBYTE *pNextState);
-void cCommPinCode(UBYTE *pPinCode);
-void cCommClrConnTable(void);
-SBYTE cCommSearchBTDevTableForName(UBYTE*);
-
-void cCommInit(void* pHeader)
-{
- UBYTE Tmp;
-
- pHeaders = pHeader;
- IOMapComm.pFunc = &cCommReq;
- IOMapComm.pFunc2 = &cCommPinCode;
- IOMapComm.UsbState = FALSE;
- IOMapComm.UsbOutBuf.OutPtr = 0;
-
- CLEARExtMode;
-
- dUsbInit();
- dBtInit();
-
- SETBtStateIdle;
- VarsComm.BtModuleInBuf.InPtr = 0;
- VarsComm.BtWaitTimeCnt = 0;
-
- /* Force a reset sequence on the BC4 */
- VarsComm.pRetVal = &(VarsComm.RetVal);
- VarsComm.ActiveUpdate = UPD_RESET;
-
- VarsComm.BtState = BT_ARM_CMD_MODE;
- IOMapComm.BrickData.BtHwStatus = BT_DISABLE;
-
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus = BT_DEVICE_EMPTY;
- }
- IOMapComm.BtDeviceCnt = 0;
- IOMapComm.BrickData.BtStateStatus = 0;
-
- cCommClrConnTable();
-
- dBtInitReceive(VarsComm.BtModuleInBuf.Buf, (UBYTE)CMD_MODE);
- dBtStartADConverter();
-
- dHiSpeedInit();
- VarsComm.HsState = 0;
-
- IOMapComm.UsbPollBuf.InPtr = 0;
- IOMapComm.UsbPollBuf.OutPtr = 0;
-
- VarsComm.BtAdrStatus = COLDBOOT;
-}
-
-void cCommCtrl(void)
-{
-
- if (FALSE == cCommReceivedBtData())
- {
-
- /* there has been a timeout on the BC4 channel */
- SETBtStateIdle;
- *(VarsComm.pRetVal) = BTTIMEOUT;
- if (COLDBOOT == VarsComm.BtAdrStatus)
- {
-
- /* there is an BT fatal error - set default bt adr and name*/
- strcpy((char*)IOMapComm.BrickData.Name, (char*)UI_NAME_DEFAULT);
- dUsbStoreBtAddress((UBYTE*)DEFAULTBTADR);
- pMapUi->Flags |= UI_REDRAW_STATUS;
- dBtSetBcResetPinLow();
- VarsComm.BtAdrStatus = BTADRERROR;
- }
- }
- cCommUpdateBt();
- VarsComm.BtBcPinLevel = dBtGetBc4CmdSignal();
-
- if (UPD_IDLE == VarsComm.ActiveUpdate)
- {
- switch (VarsComm.BtState)
- {
-
- /* Bluetooth device can either be in CMD, DATA or OFF state at top level */
- case BT_ARM_OFF:
- {
- }
- break;
- case BT_ARM_CMD_MODE:
- {
- if (VarsComm.BtBcPinLevel)
- {
- SETBtDataState;
- }
- }
- break;
-
- case BT_ARM_DATA_MODE:
- {
- if (!(VarsComm.BtBcPinLevel))
- {
- SETBtCmdState;
- }
- }
- break;
- }
- }
- IOMapComm.BtInBuf.Buf[BT_CMD_BYTE] = 0;
-
-
- /* Here comes the the HIGHSPEED_PORT implementation */
- if (IOMapComm.HsFlags & HS_UPDATE)
- {
- IOMapComm.HsFlags &= ~HS_UPDATE;
- switch (IOMapComm.HsState)
- {
- case HS_INITIALISE:
- {
- dHiSpeedSetupUart();
- IOMapComm.HsState = HS_INIT_RECEIVER;
- IOMapComm.HsFlags |= HS_UPDATE;
- }
- break;
-
- case HS_INIT_RECEIVER:
- {
- dHiSpeedInitReceive(VarsComm.HsModuleInBuf.Buf);
- VarsComm.HsState = 0x01;
- }
- break;
-
- case HS_SEND_DATA:
- {
- cCommSendHiSpeedData();
- }
- break;
-
- case HS_DISABLE:
- {
- VarsComm.HsState = 0x00;
- dHiSpeedExit();
- }
- break;
- }
- }
-
- if (VarsComm.HsState != 0)
- {
- cCommReceivedHiSpeedData();
- }
-
- /* Here comes the the USB implementation */
- ULONG Length;
- UWORD Status;
-
- if (0 != IOMapComm.UsbOutBuf.OutPtr)
- {
- dUsbWrite((const UBYTE *)IOMapComm.UsbOutBuf.Buf, (ULONG)IOMapComm.UsbOutBuf.OutPtr);
- IOMapComm.UsbOutBuf.OutPtr = 0;
- }
-
- Length = 0;
-
- if (TRUE == dUsbCheckConnection())
- {
- pMapUi->UsbState = 1;
- if (TRUE == dUsbIsConfigured())
- {
- Length = dUsbRead(IOMapComm.UsbInBuf.Buf, sizeof(IOMapComm.UsbInBuf.Buf));
- IOMapComm.UsbState = TRUE;
- pMapUi->UsbState = 2;
- }
- }
- else
- {
- pMapUi->UsbState = 0;
- dUsbResetConfig();
- if (TRUE == IOMapComm.UsbState)
- {
- IOMapComm.UsbState = FALSE;
- Status = dUsbGetFirstHandle();
- while(0 == LOADER_ERR(Status))
- {
- IOMapComm.UsbInBuf.Buf[0] = LOADER_HANDLE(Status);
- pMapLoader->pFunc(CLOSE, &(IOMapComm.UsbInBuf.Buf[0]), &(IOMapComm.UsbInBuf.Buf[2]), &Length);
- dUsbRemoveHandle(IOMapComm.UsbInBuf.Buf[0]);
- Status = dUsbGetNextHandle();
- }
- }
- }
-
- if (0 != Length)
- {
- cCommInterprete(IOMapComm.UsbInBuf.Buf, IOMapComm.UsbOutBuf.Buf, (UBYTE*)&Length, USB_CMD_READY, (UWORD)Length);
- if (Length)
- {
- dUsbWrite((const UBYTE *)IOMapComm.UsbOutBuf.Buf, Length);
- }
- }
- dBtStartADConverter();
-}
-
-void cCommExit(void)
-{
- dUsbExit();
- dHiSpeedExit();
- dBtExit();
-}
-
-
-UBYTE cCommCheckSysFileType(UBYTE *pName)
-{
- UBYTE RtnVal;
- UBYTE TmpFilename[FILENAME_LENGTH + 1];
-
- RtnVal = FALSE;
- cCommCpyToUpper(TmpFilename, &pName[1], (UBYTE)(FILENAME_LENGTH + 1));
- if ((0 != strstr((PSZ)(TmpFilename), ".RXE")) ||
- (0 != strstr((PSZ)(TmpFilename), ".SYS")) ||
- (0 != strstr((PSZ)(TmpFilename), ".RTM")))
- {
- RtnVal = TRUE;
- }
- return(RtnVal);
-}
-
-
-UWORD cCommInterprete(UBYTE *pInBuf, UBYTE *pOutBuf, UBYTE *pLength, UBYTE CmdBit, UWORD MsgLength)
-{
- UWORD ReturnStatus;
- UBYTE Channel;
-
- Channel = CHNumber(CmdBit);
- if (FALSE == VarsComm.ExtMode[Channel].Status)
- {
-
- switch (((pInBuf[0]) & ~NO_REPLY_BIT))
- {
- case SYSTEM_CMD:
- {
- ReturnStatus = cCommInterpreteCmd(pInBuf[1], &(pInBuf[1]), &(pOutBuf[2]), pLength, CmdBit, MsgLength);
-
- /* Check if reply is requested */
- if ((pInBuf[0]) & NO_REPLY_BIT)
- {
-
- /* Sender has choosen no reply */
- *pLength = 0;
-
- /* if extended mode then remember the reply bit */
- VarsComm.ExtMode[Channel].Type |= NO_REPLY_BIT;
- }
- else
- {
-
- /* Check if receiver wants to reply */
- if (*pLength)
- {
- (*pLength)+= 2;
- pOutBuf[0] = REPLY_CMD;
- pOutBuf[1] = pInBuf[1];
- }
- }
- }
- break;
-
- case DIRECT_CMD:
- {
-
- /* Adjust length to account for cmd type byte */
- (*pLength) -= 1;
-
- /* If no reply requested, pass NULL output buffer pointer and clear *pLength */
- if ((pInBuf[0]) & NO_REPLY_BIT)
- {
- pMapCmd->pRCHandler(&(pInBuf[0]), NULL, pLength);
- }
- else
- {
- pMapCmd->pRCHandler(&(pInBuf[0]), &(pOutBuf[2]), pLength);
- if (*pLength)
- {
- (*pLength) += 2;
- pOutBuf[0] = REPLY_CMD;
- pOutBuf[1] = pInBuf[1];
- }
- }
- }
- break;
-
- case REPLY_CMD:
- {
-
- /* If this is a reply to a direct command opcode, pRCHandler will handle it */
- if (pInBuf[1] < NUM_RC_OPCODES)
- pMapCmd->pRCHandler(&(pInBuf[0]), NULL, pLength);
-
- /* No Reply ever required on REPLY_CMD messages */
- *pLength = 0;
- }
- break;
-
-#ifdef ARMDEBUG
- case DEBUG_CMD:
- {
- ReturnStatus = cCommHandleDebug(&(pInBuf[0]), CmdBit, MsgLength); /* Pass everything (incl. message command byte) to function */
- /* Check that Debug Command does not expect reply */
- ReturnStatus = (0 == ((pInBuf[0]) & NO_REPLY_BIT));
- *pLength = 0;
- }
- break;
-#endif
-
- default:
- {
-
- /* UNSUPPORTED - don't reply on these messages */
- *pLength = 0;
- }
- break;
- }
-
- }
- else
- {
- switch (VarsComm.ExtMode[Channel].Type & ~NO_REPLY_BIT)
- {
- case SYSTEM_CMD:
- {
- ReturnStatus = cCommInterpreteCmd(VarsComm.ExtMode[Channel].Cmd, &(pInBuf[0]), &(pOutBuf[2]), pLength, CmdBit, MsgLength);
- if ((VarsComm.ExtMode[Channel].Type) & NO_REPLY_BIT)
- {
-
- /* Sender has choosen no reply */
- *pLength = 0;
- }
- else
- {
-
- /* Check if receiver wants to reply */
- if (*pLength)
- {
- (*pLength) += 2;
- pOutBuf[0] = REPLY_CMD;
- pOutBuf[1] = VarsComm.ExtMode[Channel].Cmd;
- }
- }
- }
- break;
- case DIRECT_CMD:
- {
- }
- break;
- case REPLY_CMD:
- {
- }
- break;
- default:
- {
- }
- break;
- }
- }
-
- return(ReturnStatus);
-}
-
-
-UWORD cCommInterpreteCmd(UBYTE Cmd, UBYTE *pInBuf, UBYTE *pOutBuf, UBYTE *pLength, UBYTE CmdBit, UWORD MsgLength)
-{
- ULONG FileLength;
- UWORD Status;
- UBYTE Channel;
-
- Channel = CHNumber(CmdBit);
- switch(Cmd)
- {
- case OPENWRITE:
- {
- FileLength = pInBuf[21];
- FileLength += (ULONG)pInBuf[22] << 8;
- FileLength += (ULONG)pInBuf[23] << 16;
- FileLength += (ULONG)pInBuf[24] << 24;
-
- if(TRUE == cCommCheckSysFileType(&pInBuf[1]))
- {
- Status = pMapLoader->pFunc(OPENWRITELINEAR, &pInBuf[1], NULL, &FileLength);
- }
- else
- {
- Status = pMapLoader->pFunc(OPENWRITE, &pInBuf[1], NULL, &FileLength);
- }
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 2;
- if ((SUCCESS == LOADER_ERR(Status)) && (CmdBit & USB_CMD_READY))
- {
- dUsbInsertHandle(LOADER_HANDLE(Status));
- }
- }
- break;
- case WRITE:
- {
-
- if (FALSE == VarsComm.ExtMode[Channel].Status)
- {
-
- FileLength = *pLength - 3;
- Status = pMapLoader->pFunc(WRITE, &(pInBuf[1]), &(pInBuf[2]), &FileLength);
- pOutBuf[2] = (UBYTE)(FileLength);
- pOutBuf[3] = (UBYTE)(FileLength >> 8);
- if ((*pLength != MsgLength) && (MsgLength != 0))
- {
-
- /* This is the beginnig of and extended write command*/
- VarsComm.ExtMode[Channel].Cmd = WRITE;
- VarsComm.ExtMode[Channel].Type = SYSTEM_CMD;
- VarsComm.ExtMode[Channel].Status = TRUE;
- VarsComm.ExtMode[Channel].Handle = LOADER_HANDLE(Status);
- *pLength = 0;
- }
- else
- {
-
- /* Normal write */
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 4;
- }
- }
- else
- {
- UWORD TmpLen;
- FileLength = *pLength;
- Status = pMapLoader->pFunc(WRITE, &(VarsComm.ExtMode[Channel].Handle), &(pInBuf[0]), &FileLength);
- TmpLen = pOutBuf[3];
- TmpLen <<= 8;
- TmpLen |= pOutBuf[2];
- TmpLen += FileLength;
- pOutBuf[2] = (UBYTE)(TmpLen);
- pOutBuf[3] = (UBYTE)(TmpLen >> 8);
- if (MsgLength)
- {
-
- /* Don't answer before complete message has been received */
- *pLength = 0;
- }
- else
- {
-
- /* Complete msg has been received */
- VarsComm.ExtMode[Channel].Status = FALSE;
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 4; /* Remember the 2 length bytes */
-
- }
- }
-
- }
- break;
- case OPENWRITEDATA:
- {
- FileLength = pInBuf[21];
- FileLength += (ULONG)pInBuf[22] << 8;
- FileLength += (ULONG)pInBuf[23] << 16;
- FileLength += (ULONG)pInBuf[24] << 24;
-
- if(TRUE == cCommCheckSysFileType(&pInBuf[1]))
- {
- Status = ILLEGALFILENAME;
- }
- else
- {
- Status = pMapLoader->pFunc(OPENWRITEDATA, &pInBuf[1], NULL, &FileLength);
- }
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 2;
- if ((SUCCESS == LOADER_ERR(Status)) && (CmdBit & USB_CMD_READY))
- {
- dUsbInsertHandle(LOADER_HANDLE(Status));
- }
- }
- break;
- case OPENAPPENDDATA:
- {
- Status = pMapLoader->pFunc(OPENAPPENDDATA, &pInBuf[1], NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
-
- pOutBuf[2] = (UBYTE)FileLength;
- pOutBuf[3] = (UBYTE)(FileLength >> 8);
- pOutBuf[4] = (UBYTE)(FileLength >> 16);
- pOutBuf[5] = (UBYTE)(FileLength >> 24);
- *pLength = 6;
- if ((SUCCESS == LOADER_ERR(Status)) && (CmdBit & USB_CMD_READY))
- {
- dUsbInsertHandle(LOADER_HANDLE(Status));
- }
- }
- break;
- case CLOSE:
- {
- if (CmdBit & USB_CMD_READY)
- {
- dUsbRemoveHandle(pInBuf[1]);
- }
- Status = pMapLoader->pFunc(CLOSE, &(pInBuf[1]), NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 2;
- }
- break;
- case CROPDATAFILE:
- {
- Status = pMapLoader->pFunc(CROPDATAFILE, &(pInBuf[1]), NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 2;
- }
- break;
- case OPENREAD:
- {
- Status = pMapLoader->pFunc(OPENREAD, &pInBuf[1], NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- pOutBuf[2] = (UBYTE)FileLength;
- pOutBuf[3] = (UBYTE)(FileLength >> 8);
- pOutBuf[4] = (UBYTE)(FileLength >> 16);
- pOutBuf[5] = (UBYTE)(FileLength >> 24);
- *pLength = 6;
- if ((SUCCESS == LOADER_ERR(Status)) && (CmdBit & USB_CMD_READY))
- {
- dUsbInsertHandle(LOADER_HANDLE(Status));
- }
- }
- break;
- case READ:
- {
- ULONG Length;
-
- FileLength = pInBuf[3];
- FileLength <<= 8;
- FileLength |= pInBuf[2];
- Length = FileLength;
-
- /* Here test for channel - USB can only handle a 64 byte return (- wrapping )*/
- if (CmdBit & USB_CMD_READY)
- {
- if (FileLength > (SIZE_OF_USBBUF - 6))
- {
-
- /* Buffer cannot hold the requested data adjust to buffer size */
- FileLength = (SIZE_OF_USBBUF - 6);
- }
- *pLength = FileLength + 4;
- Status = pMapLoader->pFunc(READ, &pInBuf[1], &pOutBuf[4], &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- pOutBuf[2] = (UBYTE)Length;
- pOutBuf[3] = (UBYTE)(Length >> 8);
-
- if (FileLength < Length)
- {
-
- /* End of file is detcted - add up with zeros to the requested msg length */
- Length -= FileLength;
- memset(&(pOutBuf[(FileLength + 4)]),0x00,Length);
- }
- }
- else
- {
-
- /* This is a BT request - BT can handle large packets */
- if (FileLength > (SIZE_OF_BTBUF - 6))
- {
-
- /* Read length exceeds buffer length check for extended read back */
- if (SUCCESS == cCommReq(EXTREAD, 0x00, 0x00, 0x00, NULL, &(VarsComm.RetVal)))
- {
-
- /* More data requested than buffer can hold .... go into extended mode */
- VarsComm.ExtTx.RemMsgSize = FileLength;
- VarsComm.ExtTx.SrcHandle = pInBuf[1];
- VarsComm.ExtTx.Cmd = READ;
- *pLength = 0;
- }
- else
- {
-
- /* We were not able to go into extended mode bt was busy */
- /* for now do not try to reply as it is not possible to */
- /* return the requested bytes */
- *pLength = 0;
- }
- }
- else
- {
-
- *pLength = FileLength + 4;
- Status = pMapLoader->pFunc(READ, &pInBuf[1], &pOutBuf[4], &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- pOutBuf[2] = (UBYTE)Length;
- pOutBuf[3] = (UBYTE)(Length >> 8);
-
- if (FileLength < Length)
- {
-
- /* End of file is detcted - add up with zeros to the requested msg length */
- Length -= FileLength;
- memset(&(pOutBuf[(FileLength + 4)]),0x00,Length);
- }
- }
- }
- }
- break;
- case DELETE:
- {
- Status = pMapLoader->pFunc(DELETE, &pInBuf[1], NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- cCommCopyFileName(&pOutBuf[1], &pInBuf[1]);
- *pLength = FILENAME_LENGTH + 1 + 1; /*Filemname + 0 terminator + error byte */
- }
- break;
- case FINDFIRST:
- {
- Status = pMapLoader->pFunc(FINDFIRST, &(pInBuf[1]), &(pOutBuf[2]), &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- if (LOADER_ERR_BYTE(SUCCESS) == pOutBuf[0])
- {
- pOutBuf[22] = (UBYTE)FileLength;
- pOutBuf[23] = (UBYTE)(FileLength >> 8);
- pOutBuf[24] = (UBYTE)(FileLength >> 16);
- pOutBuf[25] = (UBYTE)(FileLength >> 24);
- if (CmdBit & USB_CMD_READY)
- {
- dUsbInsertHandle(pOutBuf[1]);
- }
- }
- else
- {
-
- /* ERROR - Fill with zeros */
- memset(&(pOutBuf[2]),0x00,24);
- }
-
- *pLength = 26;
- }
- break;
- case FINDNEXT:
- {
- Status = pMapLoader->pFunc(FINDNEXT, &(pInBuf[1]), &(pOutBuf[2]), &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- if (LOADER_ERR_BYTE(SUCCESS) == pOutBuf[0])
- {
- pOutBuf[22] = (UBYTE)FileLength;
- pOutBuf[23] = (UBYTE)(FileLength >> 8);
- pOutBuf[24] = (UBYTE)(FileLength >> 16);
- pOutBuf[25] = (UBYTE)(FileLength >> 24);
- }
- else
- {
-
- /* ERROR - Fill with zeros */
- memset(&(pOutBuf[2]),0x00,24);
- }
- *pLength = 26;
- }
- break;
- case OPENREADLINEAR:
- {
-
- /* For internal use only */
- }
- break;
- case VERSIONS:
- {
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- pOutBuf[1] = (UBYTE)PROTOCOLVERSION;
- pOutBuf[2] = (UBYTE)(PROTOCOLVERSION>>8);
- pOutBuf[3] = (UBYTE)FIRMWAREVERSION;
- pOutBuf[4] = (UBYTE)(FIRMWAREVERSION>>8);
- *pLength = 5;
- }
- break;
- case OPENWRITELINEAR:
- {
- FileLength = pInBuf[21];
- FileLength += (ULONG)pInBuf[22] << 8;
- FileLength += (ULONG)pInBuf[23] << 16;
- FileLength += (ULONG)pInBuf[24] << 24;
- Status = pMapLoader->pFunc(OPENWRITELINEAR, &pInBuf[1], NULL, &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = LOADER_HANDLE(Status);
- *pLength = 2;
- if ((SUCCESS == LOADER_ERR(Status)) && (CmdBit & USB_CMD_READY))
- {
- dUsbInsertHandle(LOADER_HANDLE(Status));
- }
- }
- break;
- case FINDFIRSTMODULE:
- {
- Status = pMapLoader->pFunc(FINDFIRSTMODULE, &pInBuf[1], &pOutBuf[2], &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = 0;
-
- if (LOADER_ERR_BYTE(SUCCESS) != pOutBuf[0])
- {
- memset(&pOutBuf[2], 0x00, 30);
- }
- *pLength = 32;
- }
- break;
-
- case FINDNEXTMODULE:
- {
- Status = pMapLoader->pFunc(FINDNEXTMODULE, pInBuf, &pOutBuf[2], &FileLength);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = 0;
-
- if (LOADER_ERR_BYTE(SUCCESS) != pOutBuf[0])
- {
- memset(&pOutBuf[2], 0x00, 30);
- }
- *pLength = 32;
- }
- break;
-
- case CLOSEMODHANDLE:
- {
- Status = pMapLoader->pFunc(CLOSEMODHANDLE, NULL, NULL, NULL);
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[1] = 0;
- *pLength = 2;
- }
- break;
-
- case IOMAPREAD:
- {
- ULONG ModuleId;
- UWORD Length;
-
- ModuleId = pInBuf[1];
- ModuleId |= (ULONG)pInBuf[2] << 8;
- ModuleId |= (ULONG)pInBuf[3] << 16;
- ModuleId |= (ULONG)pInBuf[4] << 24;
-
- /* Transfer the Module id */
- pOutBuf[1] = pInBuf[1];
- pOutBuf[2] = pInBuf[2];
- pOutBuf[3] = pInBuf[3];
- pOutBuf[4] = pInBuf[4];
-
- /* Transfer the offset into the iomap (pOutBuf[6] is intended...)*/
- pOutBuf[5] = pInBuf[5];
- pOutBuf[6] = pInBuf[6];
-
- /* Get the read *pLength */
- FileLength = pInBuf[8];
- FileLength <<= 8;
- FileLength |= pInBuf[7];
-
- if (CmdBit & USB_CMD_READY)
- {
-
- /* test for USB buffer overrun */
- if (FileLength > (SIZE_OF_USBBUF - 9))
- {
- FileLength = SIZE_OF_USBBUF - 9;
- }
- }
- else
- {
-
- /* test for BT buffer overrun */
- if (FileLength > (SIZE_OF_BTBUF - 9))
- {
- FileLength = SIZE_OF_BTBUF - 9;
- }
- }
-
- Length = FileLength;
- *pLength = Length + 7;
- Status = pMapLoader->pFunc(IOMAPREAD, (UBYTE *)&ModuleId, &pOutBuf[5], &FileLength);
-
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[5] = (UBYTE)FileLength;
- pOutBuf[6] = (UBYTE)(FileLength >> 8);
-
- if (Length > FileLength)
- {
- Length -= FileLength;
- memset(&(pOutBuf[FileLength + 7]), 0x00, Length);
- }
- }
- break;
-
- case IOMAPWRITE:
- {
- ULONG ModuleId;
-
- pOutBuf[1] = pInBuf[1];
- pOutBuf[2] = pInBuf[2];
- pOutBuf[3] = pInBuf[3];
- pOutBuf[4] = pInBuf[4];
-
- ModuleId = pInBuf[1];
- ModuleId |= (ULONG)pInBuf[2] << 8;
- ModuleId |= (ULONG)pInBuf[3] << 16;
- ModuleId |= (ULONG)pInBuf[4] << 24;
-
- FileLength = pInBuf[8];
- FileLength <<= 8;
- FileLength |= pInBuf[7];
-
- /* Place offset right before data */
- pInBuf[8] = pInBuf[6];
- pInBuf[7] = pInBuf[5];
-
- Status = pMapLoader->pFunc(IOMAPWRITE, (UBYTE *)&ModuleId, &pInBuf[7], &FileLength);
-
- pOutBuf[0] = LOADER_ERR_BYTE(Status);
- pOutBuf[5] = (UBYTE)FileLength;
- pOutBuf[6] = (UBYTE)(FileLength >> 8);
-
- *pLength = 7;
- }
- break;
-
- case BOOTCMD:
- {
-
- UBYTE Tmp;
-
- /* The boot command is only allowed by USB - as firmware download can ONLY */
- /* be send by USB */
- pOutBuf[0] = LOADER_ERR_BYTE(UNDEFINEDERROR);
- memset(&(pOutBuf[1]), 0, 4);
- *pLength = 5;
-
- if (CmdBit & USB_CMD_READY)
- {
-
- Tmp = 0;
- while((Tmp < (sizeof(BootString) - 1)) && (BootString[Tmp] == pInBuf[Tmp+1]))
- {
- Tmp++;
- }
- if (Tmp == (sizeof(BootString) - 1))
- {
-
- /* Yes valid boot sequence */
- pMapDisplay->Flags &= ~DISPLAY_ON;
- pMapDisplay->Flags |= DISPLAY_REFRESH;
- pMapIoCtrl->PowerOn = BOOT;
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- pOutBuf[1] = 'Y';
- pOutBuf[2] = 'e';
- pOutBuf[3] = 's';
- pOutBuf[4] = '\0';
- }
- }
- }
- break;
-
- case SETBRICKNAME:
- {
-
- UWORD RtnVal;
-
- *pLength = 1;
-
- /* Update the name in the BT device - reply for this command is send */
- /* before command is actually executed */
- if (SUCCESS == cCommReq(SETBTNAME, 0, 0, 0, &pInBuf[1], &RtnVal))
- {
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- cCommInsertBtName(IOMapComm.BrickData.Name, &pInBuf[1]);
- pMapUi->Flags |= UI_REDRAW_STATUS;
- }
- else
- {
- pOutBuf[0] = LOADER_ERR_BYTE(BTBUSY);
- }
- }
- break;
-
- case BTGETADR:
- {
- UBYTE Tmp;
- UBYTE *pAdr;
-
- pAdr = (IOMapComm.BrickData.BdAddr);
- for (Tmp = 0; Tmp < 7; Tmp++)
- {
- pOutBuf[Tmp + 1] = pAdr[Tmp];
- }
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- *pLength = 8;
- }
- break;
-
- case DEVICEINFO:
- {
-
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
-
- /* Brick name */
- memcpy(&(pOutBuf[1]), IOMapComm.BrickData.Name, 15);
-
- /* BT address */
- cCommCopyBdaddr(&(pOutBuf[16]), (IOMapComm.BrickData.BdAddr));
-
- /* Link quality of the 4 possible connected devices */
- pOutBuf[23] = IOMapComm.BtConnectTable[0].LinkQuality;
- pOutBuf[24] = IOMapComm.BtConnectTable[1].LinkQuality;
- pOutBuf[25] = IOMapComm.BtConnectTable[2].LinkQuality;
- pOutBuf[26] = IOMapComm.BtConnectTable[3].LinkQuality;
-
- /* Free user flash */
- memcpy(&(pOutBuf[27]), &(pMapLoader->FreeUserFlash), sizeof(pMapLoader->FreeUserFlash));
-
- /* Set answer length */
- *pLength = 31;
- }
- break;
-
- case DELETEUSERFLASH:
- {
- Status = pMapLoader->pFunc(DELETEUSERFLASH, NULL, NULL, NULL);
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- *pLength = 1;
- }
- break;
-
- case POLLCMDLEN:
- {
-
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- pOutBuf[1] = pInBuf[1]; /* This is the Buf Number */
- if (0 == pInBuf[1])
- {
-
- /* USB poll buffer */
- pOutBuf[2] = ((IOMapComm.UsbPollBuf.InPtr - IOMapComm.UsbPollBuf.OutPtr) & (SIZE_OF_USBBUF - 1));
- }
- else
- {
-
- /* HI speed poll buffer */
- pOutBuf[2] = ((IOMapComm.HsInBuf.InPtr - IOMapComm.HsInBuf.OutPtr) & (SIZE_OF_HSBUF - 1));
- }
- *pLength = 3;
- }
- break;
-
- case POLLCMD:
- {
- UBYTE Tmp;
- UBYTE MaxBufData;
-
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- pOutBuf[1] = pInBuf[1];
- *pLength = pInBuf[2];
-
- if (CmdBit & USB_CMD_READY)
- {
- MaxBufData = (SIZE_OF_USBDATA - 5); /* Substract wrapping */
- }
- else
- {
- MaxBufData = (SIZE_OF_BTBUF - 7); /* Substract wrapping + length bytes for BT*/
- }
-
- if (0x00 == pInBuf[1])
- {
-
- /* Data from USB poll buffer are requested */
- if (*pLength <= MaxBufData)
- {
- for (Tmp = 0; ((Tmp < (*pLength)) && (IOMapComm.UsbPollBuf.InPtr != IOMapComm.UsbPollBuf.OutPtr)); Tmp++)
- {
- pOutBuf[3 + Tmp] = IOMapComm.UsbPollBuf.Buf[IOMapComm.UsbPollBuf.OutPtr];
- IOMapComm.UsbPollBuf.OutPtr = ((IOMapComm.UsbPollBuf.OutPtr) + 1) % SIZE_OF_USBBUF;
- }
- pOutBuf[2] = Tmp;
-
- /* if end of buffer has been reached fill up with zeros */
- memset(&(pOutBuf[Tmp + 3]), 0x00, (*pLength - Tmp));
- }
- else
- {
-
- /* if more data requested than possible to return */
- pOutBuf[0] = LOADER_ERR_BYTE(UNDEFINEDERROR);
- pOutBuf[1] = pInBuf[1]; /* This is buffer number */
- pOutBuf[2] = 0; /* no of bytes returned */
- *pLength = 0;
- }
- }
- else
- {
-
- /* Data from hi speed buffer are requested */
- if (*pLength <= MaxBufData)
- {
- for (Tmp = 0; ((Tmp < (*pLength)) && (IOMapComm.HsInBuf.InPtr != IOMapComm.HsInBuf.OutPtr)); Tmp++)
- {
- pOutBuf[3 + Tmp] = IOMapComm.HsInBuf.Buf[IOMapComm.HsInBuf.OutPtr];
- IOMapComm.HsInBuf.OutPtr = ((IOMapComm.HsInBuf.OutPtr) + 1) % SIZE_OF_USBBUF;
- }
- pOutBuf[2] = Tmp;
-
- /* if end of buffer has been reached fill up with zeros */
- memset(&(pOutBuf[Tmp + 3]), 0x00, (*pLength - Tmp));
- }
- else
- {
-
- /* if more data requested than possible to return */
- pOutBuf[0] = LOADER_ERR_BYTE(UNDEFINEDERROR);
- pOutBuf[1] = pInBuf[1]; /* This is buffer number */
- pOutBuf[2] = 0; /* no of bytes returned */
- *pLength = 0;
- }
- }
- (*pLength) += 3; /* Add 3 bytes for the status byte, length byte and Buf no */
- }
- break;
-
- case BTFACTORYRESET:
- {
- UWORD RtnVal;
-
- if (CmdBit & USB_CMD_READY)
- {
- if (SUCCESS == cCommReq(FACTORYRESET, 0, 0, 0, NULL, &RtnVal))
- {
-
- /* Request success */
- pOutBuf[0] = LOADER_ERR_BYTE(SUCCESS);
- }
- else
- {
-
- /* BT request error */
- pOutBuf[0] = LOADER_ERR_BYTE(UNDEFINEDERROR);
- }
- }
- else
- {
-
- /* Factory reset request cannot be done by bluetooth */
- pOutBuf[0] = LOADER_ERR_BYTE(UNDEFINEDERROR);
- }
- *pLength = 1;
- }
- break;
-
- default:
- {
- }
- break;
- }
- return(Status);
-}
-
-
-UWORD cCommReceivedBtData(void)
-{
- UWORD NumberOfBytes;
- UWORD BytesToGo;
- UWORD RtnVal;
-
- RtnVal = dBtReceivedData(&NumberOfBytes, &BytesToGo);
- if (TRUE == RtnVal)
- {
-
- /* Everything is fine go on */
- if (NumberOfBytes != 0)
- {
-
- /* Copy the bytes into the IOMapBuffer */
- memcpy((IOMapComm.BtInBuf.Buf), (VarsComm.BtModuleInBuf.Buf), NumberOfBytes);
-
- if (VarsComm.BtState == BT_ARM_CMD_MODE)
- {
-
- /* Call the BC4 command interpreter */
- cCommBtCmdInterpreter();
- IOMapComm.BtInBuf.InPtr = 0;
- }
- else
- {
-
- /* ActiveUpdate has to be idle because BC4 can send stream data even if CMD */
- /* mode has been requested - dont try to interprete the data */
- /* VarsComm.CmdSwitchCnt != 0 if a transition to Cmd mode is in process */
- if ((VarsComm.BtState == BT_ARM_DATA_MODE) && (0 == VarsComm.CmdSwitchCnt))
- {
-
- /* Move the inptr ahead */
- IOMapComm.BtInBuf.InPtr = NumberOfBytes;
-
- /* using the outbuf inptr in order to get the number of bytes in the return answer at the right place*/
- IOMapComm.BtOutBuf.InPtr = NumberOfBytes;
-
- /* call the data stream interpreter */
- cCommInterprete(IOMapComm.BtInBuf.Buf, IOMapComm.BtOutBuf.Buf, &(IOMapComm.BtOutBuf.InPtr), (UBYTE) BT_CMD_READY, BytesToGo);
-
- /* if there is a reply to be send then send it */
- if (IOMapComm.BtOutBuf.InPtr)
- {
- dBtSendMsg(IOMapComm.BtOutBuf.Buf, IOMapComm.BtOutBuf.InPtr, IOMapComm.BtOutBuf.InPtr);
- IOMapComm.BtOutBuf.InPtr = 0;
- }
- }
- }
- }
- }
- return(RtnVal);
-}
-
-void cCommBtCmdInterpreter(void)
-{
-
- /* this function handles all bluecode commands that can be */
- /* initiated from the outside, meaning from other devices */
- if(cCommBtValidateCmd())
- {
- switch (IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- case MSG_REQUEST_PIN_CODE:
- {
-
- /* Pass the pin request on to cCommReq it'l handle it */
- cCommReq(PINREQ, 0x00, 0x00, 0x00, NULL, &(VarsComm.RetVal));
- }
- break;
-
- case MSG_REQUEST_CONNECTION:
- {
-
- /* Connect request from the outside */
- cCommReq(CONNECTREQ, 0x00, 0x00, 0x00, NULL, &(VarsComm.RetVal));
- }
- break;
-
- case MSG_LIST_RESULT:
- {
- switch (IOMapComm.BtInBuf.Buf[2])
- {
- case LR_SUCCESS:
- {
- }
- break;
- case LR_ENTRY_REMOVED:
- {
- }
- break;
-/*
- case LR_COULD_NOT_SAVE:
- case LR_STORE_IS_FULL:
- case LR_UNKOWN_ADDR:
-*/
- default:
- {
- pMapUi->Error = (UBYTE)IOMapComm.BtInBuf.Buf[2];
- pMapUi->BluetoothState |= BT_ERROR_ATTENTION;
- }
- break;
- }
- }
- break;
-
- case MSG_CLOSE_CONNECTION_RESULT:
- {
- UBYTE ConnNo;
-
- for (ConnNo = 0; ConnNo < SIZE_OF_BT_CONNECT_TABLE; ConnNo++)
- {
- if (IOMapComm.BtConnectTable[ConnNo].HandleNr == IOMapComm.BtInBuf.Buf[3])
- {
- IOMapComm.BrickData.BtStateStatus &= ~(BT_CONNECTION_0_ENABLE<<ConnNo);
- CLEARConnEntry(ConnNo);
- ConnNo = SIZE_OF_BT_CONNECT_TABLE;
- }
- }
-
- if (!(IOMapComm.BrickData.BtStateStatus & (BT_CONNECTION_0_ENABLE | BT_CONNECTION_1_ENABLE | BT_CONNECTION_2_ENABLE | BT_CONNECTION_3_ENABLE)))
- {
- pMapUi->BluetoothState &= ~BT_STATE_CONNECTED;
- }
- pMapUi->Flags |= UI_REDRAW_STATUS;
- }
- break;
-
- case MSG_PORT_OPEN_RESULT:
- {
- if (IOMapComm.BtInBuf.Buf[2] == 1)
- {
- IOMapComm.BtConnectTable[0].HandleNr = IOMapComm.BtInBuf.Buf[3];
- IOMapComm.BrickData.BtStateStatus |= BT_BRICK_PORT_OPEN;
- }
- else
- {
-
- /* There was an error setting up the OpenPort command in BC4 */
- IOMapComm.BtConnectTable[0].HandleNr = BLUETOOTH_HANDLE_UNDEFIEND;
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_PORT_OPEN;
- }
- }
- break;
-
- case MSG_CLOSE_PORT_RESULT:
- {
- if (IOMapComm.BtInBuf.Buf[2] == 1)
- {
- IOMapComm.BtConnectTable[0].HandleNr = BLUETOOTH_HANDLE_UNDEFIEND;
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_PORT_OPEN;
- }
- }
- break;
-
- case MSG_PIN_CODE_ACK:
- {
- pMapUi->BluetoothState &= ~BT_PIN_REQUEST;
- }
- break;
-
- case MSG_DISCOVERABLE_ACK:
- {
- if (VarsComm.BtCmdData.ParamOne == 1)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState |= BT_STATE_VISIBLE;
- }
- else
- {
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState &= ~BT_STATE_VISIBLE;
- }
- }
- break;
- case MSG_RESET_INDICATION:
- {
- if ((UPD_RESET != VarsComm.ActiveUpdate) &&
- (UPD_BRICKNAME != VarsComm.ActiveUpdate) &&
- (UPD_FACTORYRESET != VarsComm.ActiveUpdate))
- {
-
- /* Not intended reset indication - restart the bluecore */
- if (VarsComm.ActiveUpdate != UPD_IDLE)
- {
-
- /* Something was ongoing send error message */
- *(VarsComm.pRetVal) = (UWORD)ERR_COMM_BUS_ERR;
- *(VarsComm.pRetVal) |= 0x8000;
- }
-
- SETBtStateIdle;
- VarsComm.pRetVal = &(VarsComm.RetVal);
- VarsComm.ActiveUpdate = UPD_RESET;
- }
- }
- break;
- }
- }
- else
- {
- /* Receive a message with wrong checkSum ! */
- }
-}
-
-void cCommCpyToUpper(UBYTE *pDst, UBYTE *pSrc, UBYTE Length)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < Length; Tmp++)
- {
- pDst[Tmp] =(UBYTE)toupper((UWORD)pSrc[Tmp]);
- }
-
- /* The requried length has been copied - now fill with zeros */
- for(Tmp = Length; Tmp < (FILENAME_LENGTH + 1); Tmp++)
- {
- pDst[Tmp] = '\0';
- }
-}
-
-void cCommCopyFileName(UBYTE *pDst, UBYTE *pSrc)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < (FILENAME_LENGTH + 1); Tmp++, pDst++)
- {
- if ('\0' != *pSrc)
- {
- *pDst = *pSrc;
- pSrc++;
- }
- else
- {
- *pDst = '\0';
- }
- }
-}
-
-void cCommSendHiSpeedData(void)
-{
- VarsComm.HsModuleOutBuf.OutPtr = 0;
- for (VarsComm.HsModuleOutBuf.InPtr = 0; VarsComm.HsModuleOutBuf.InPtr < IOMapComm.HsOutBuf.InPtr; VarsComm.HsModuleOutBuf.InPtr++)
- {
- VarsComm.HsModuleOutBuf.Buf[VarsComm.HsModuleOutBuf.InPtr] = IOMapComm.HsOutBuf.Buf[IOMapComm.HsOutBuf.OutPtr];
- IOMapComm.HsOutBuf.OutPtr++;
- }
- dHiSpeedSendData(VarsComm.HsModuleOutBuf.Buf, (VarsComm.HsModuleOutBuf.InPtr - VarsComm.HsModuleOutBuf.OutPtr));
-}
-
-void cCommReceivedHiSpeedData(void)
-{
- UWORD NumberOfBytes;
- UWORD Tmp;
-
- dHiSpeedReceivedData(&NumberOfBytes);
-
- if (NumberOfBytes != 0)
- {
- for (Tmp = 0; Tmp < NumberOfBytes; Tmp++)
- {
- IOMapComm.HsInBuf.Buf[IOMapComm.HsInBuf.InPtr] = VarsComm.HsModuleInBuf.Buf[Tmp];
- IOMapComm.HsInBuf.InPtr++;
- if (IOMapComm.HsInBuf.InPtr > (SIZE_OF_HSBUF - 1))
- {
- IOMapComm.HsInBuf.InPtr = 0;
- }
- VarsComm.HsModuleInBuf.Buf[Tmp] = 0;
- }
-
- /* Now new data is available from the HIGH SPEED port ! */
- }
-}
-
-UBYTE cCommBtValidateCmd(void)
-{
- UWORD CheckSumTmp = 0;
- UBYTE Tmp, CheckSumHigh, CheckSumLow;
-
- for (Tmp = 0; Tmp < (IOMapComm.BtInBuf.Buf[0] - 1);Tmp++)
- {
- CheckSumTmp += IOMapComm.BtInBuf.Buf[Tmp];
- }
- CheckSumTmp = (UWORD) (1 + (0xFFFF - CheckSumTmp));
- CheckSumHigh = (UBYTE)((CheckSumTmp & 0xFF00)>>8);
- CheckSumLow = (UBYTE)(CheckSumTmp & 0x00FF);
-
- if ((CheckSumHigh == IOMapComm.BtInBuf.Buf[IOMapComm.BtInBuf.Buf[0] - 1]) && (CheckSumLow == IOMapComm.BtInBuf.Buf[IOMapComm.BtInBuf.Buf[0]]))
- {
- return(TRUE);
- }
- else
- {
- return(FALSE);
- }
-}
-
-void cCommClearStreamStatus(void)
-{
- IOMapComm.BtConnectTable[0].StreamStatus = 0;
- IOMapComm.BtConnectTable[1].StreamStatus = 0;
- IOMapComm.BtConnectTable[2].StreamStatus = 0;
- IOMapComm.BtConnectTable[3].StreamStatus = 0;
-}
-
-void cCommUpdateBt(void)
-{
- UBYTE Tmp, Tmp2, Handle;
-
- Tmp = 0;
- Tmp2 = 0;
-
- switch(VarsComm.ActiveUpdate)
- {
- case UPD_RESET:
- {
-
- switch(VarsComm.UpdateState)
- {
- case 0:
- {
- /* Setup Reset sequence */
- pMapUi->BluetoothState = BT_STATE_OFF;
- VarsComm.UpdateState = 1;
- }
- break;
-
- case 1:
- {
- cCommsBtReset(&(VarsComm.UpdateState));
- }
- break;
-
- case 2:
- {
- (VarsComm.UpdateState)++;
- dBtSendBtCmd((UBYTE)MSG_GET_LOCAL_ADDR, 0, 0, NULL, NULL, NULL, NULL);
- }
- break;
-
- case 3:
- {
- if (MSG_GET_LOCAL_ADDR_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- cCommCopyBdaddr((IOMapComm.BrickData.BdAddr), &(IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1]));
- dUsbStoreBtAddress( &(IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1]));
- dBtSendBtCmd((UBYTE)MSG_GET_FRIENDLY_NAME, 0, 0, NULL, NULL, NULL, NULL);
- VarsComm.BtAdrStatus = INITIALIZED;
- (VarsComm.UpdateState)++;
- }
- }
- break;
-
- case 4:
- {
- if (MSG_GET_FRIENDLY_NAME_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- memcpy(IOMapComm.BrickData.Name, &(IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1]), SIZE_OF_BRICK_NAME);
- pMapUi->Flags |= UI_REDRAW_STATUS;
- IOMapComm.BtDeviceCnt = 0;
- IOMapComm.BtDeviceNameCnt = 0;
- dBtSendBtCmd((UBYTE)MSG_DUMP_LIST, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- }
- break;
-
- case 5:
- {
- if (MSG_LIST_ITEM == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- cCommCopyBdaddr((IOMapComm.BtDeviceTable[IOMapComm.BtDeviceCnt].BdAddr), &(IOMapComm.BtInBuf.Buf[2]));
- cCommInsertBtName(IOMapComm.BtDeviceTable[IOMapComm.BtDeviceCnt].Name, &(IOMapComm.BtInBuf.Buf[9]));
- IOMapComm.BtDeviceTable[IOMapComm.BtDeviceCnt].DeviceStatus = BT_DEVICE_KNOWN;
-
- memcpy(IOMapComm.BtDeviceTable[IOMapComm.BtDeviceCnt].ClassOfDevice, &(IOMapComm.BtInBuf.Buf[9+SIZE_OF_BT_NAME]), sizeof(IOMapComm.BtDeviceTable[IOMapComm.BtDeviceCnt].ClassOfDevice));
-
- IOMapComm.BtDeviceCnt++;
- IOMapComm.BtDeviceNameCnt++;
- }
-
- if (MSG_LIST_DUMP_STOPPED == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- dBtSendBtCmd((UBYTE)MSG_GET_VERSION, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- IOMapComm.BtInBuf.Buf[BT_CMD_BYTE] = 0;
- }
- break;
-
- case 6:
- {
- if (MSG_GET_VERSION_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- IOMapComm.BrickData.BluecoreVersion[0] = IOMapComm.BtInBuf.Buf[3];
- IOMapComm.BrickData.BluecoreVersion[1] = IOMapComm.BtInBuf.Buf[2];
-
- /* BtHwStatus indicates cold boot or user interaction */
- if (BT_DISABLE == IOMapComm.BrickData.BtHwStatus)
- {
-
- /* This is from brick turning on */
- dBtSendBtCmd((UBYTE)MSG_GET_BRICK_STATUSBYTE, 0, 0, NULL, NULL, NULL, NULL);
- }
- else
- {
-
- /* this is user interaction setting the brick on */
- dBtSendBtCmd((UBYTE)MSG_SET_BRICK_STATUSBYTE, BT_ENABLE, 0, NULL, NULL, NULL, NULL);
- }
- (VarsComm.UpdateState)++;
- pMapUi->Flags |= UI_REDRAW_STATUS;
- }
- }
- break;
-
- case 7:
- {
- if (MSG_GET_BRICK_STATUSBYTE_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- IOMapComm.BrickData.TimeOutValue = IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 2];
-
- /* Check for brick to be on or off */
- if (BT_ENABLE == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1])
- {
- pMapUi->BluetoothState &= ~BT_STATE_OFF;
- IOMapComm.BrickData.BtHwStatus = BT_ENABLE;
- dBtSendBtCmd((UBYTE)MSG_GET_DISCOVERABLE, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
- SETBtOff;
- IOMapComm.BrickData.BtHwStatus = BT_ENABLE;
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- }
- if (MSG_SET_BRICK_STATUSBYTE_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* brick to be on*/
- pMapUi->BluetoothState &= ~BT_STATE_OFF;
- IOMapComm.BrickData.BtHwStatus = BT_ENABLE;
- dBtSendBtCmd((UBYTE)MSG_GET_DISCOVERABLE, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- }
- break;
-
- case 8:
- {
- if (MSG_GET_DISCOVERABLE_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (IOMapComm.BtInBuf.Buf[2] & 0x01)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState |= BT_STATE_VISIBLE;
- }
- else
- {
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState &= ~BT_STATE_VISIBLE;
- }
- dBtSendBtCmd((UBYTE)MSG_OPEN_PORT, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- }
- break;
-
- case 9:
- {
-
- if (MSG_PORT_OPEN_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1] & 0x01)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_BRICK_PORT_OPEN;
- }
- else
- {
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_PORT_OPEN;
- }
-
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_FACTORYRESET:
- {
- switch(VarsComm.UpdateState)
- {
-
- case 0:
- {
- if (BT_STATE_OFF & (pMapUi->BluetoothState))
- {
-
- /* Bluetooth is off - now start it up */
- (VarsComm.UpdateState)++;
- }
- else
- {
-
- /* BT is already on - continue */
- (VarsComm.UpdateState) += 2;
- }
- }
- break;
- case 1:
- {
- cCommsBtReset(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 3:
- {
- cCommsDisconnectAll(&(VarsComm.UpdateState));
- }
- break;
- case 4:
- {
-
- /* Now bc4 is in cmd mode now factory can be sent */
- /* Just leave the BC4 in cmd mode */
- dBtSendBtCmd((UBYTE)MSG_SET_FACTORY_SETTINGS, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
- case 5:
- {
- if (MSG_SET_FACTORY_SETTINGS_ACK == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- SETBtStateIdle;
- IOMapComm.BrickData.BtHwStatus = BT_DISABLE; /* Boot BT like cold boot*/
- VarsComm.ActiveUpdate = UPD_RESET;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_BRICKNAME:
- {
- switch(VarsComm.UpdateState)
- {
- case 0:
- {
-
- if (BT_STATE_OFF & (pMapUi->BluetoothState))
- {
-
- /* Bluetooth is off - now start it up */
- (VarsComm.UpdateState)++;
- }
- else
- {
- VarsComm.UpdateState = 2;
- }
- }
- break;
-
- case 1:
- {
- cCommsBtReset(&(VarsComm.UpdateState));
- }
- break;
-
- case 2:
- {
- VarsComm.BtUpdateDataConnectNr = 0;
- if (BT_ARM_DATA_MODE == VarsComm.BtState)
- {
- for (Tmp = 0; Tmp < SIZE_OF_BT_CONNECT_TABLE; Tmp++)
- {
- if (IOMapComm.BtConnectTable[Tmp].StreamStatus)
- {
- VarsComm.BtUpdateDataConnectNr = Tmp | 0x80;
- }
- }
- (VarsComm.UpdateState)++;
- }
- else
- {
- (VarsComm.UpdateState) += 2;
- }
- }
- break;
-
- case 3:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
-
- case 4:
- {
-
- /* Brick name has been updated prior to this */
- dBtSendBtCmd((UBYTE)MSG_SET_FRIENDLY_NAME, 0, 0, NULL, IOMapComm.BrickData.Name, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
-
- case 5:
- {
- if (MSG_SET_FRIENDLY_NAME_ACK == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* Set name has been executed */
- if (VarsComm.BtUpdateDataConnectNr & 0x80)
- {
- dBtSendBtCmd((UBYTE)MSG_OPEN_STREAM, IOMapComm.BtConnectTable[(VarsComm.BtUpdateDataConnectNr & ~0x80)].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
- if (BT_STATE_OFF & (pMapUi->BluetoothState))
- {
- SETBtOff;
- }
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- pMapUi->Flags |= UI_REDRAW_STATUS;
- }
- }
- break;
- case 6:
- {
- if (VarsComm.BtBcPinLevel)
- {
- IOMapComm.BtConnectTable[(VarsComm.BtUpdateDataConnectNr & ~0x80)].StreamStatus = 1;
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtDataState;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_REQCMDMODE:
- {
- switch(VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- break;
- }
- }
- break;
-
- case UPD_OPENSTREAM:
- {
- switch(VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsOpenStream(&(VarsComm.UpdateState));
- }
- break;
-
- case 1:
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- break;
- }
- }
- break;
-
- case UPD_SENDFILE:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsOpenStream(&(VarsComm.UpdateState));
- }
- break;
-
- case 1:
- {
-
- /* Here we wait for the open stream to succeed*/
- if (IOMapComm.BtConnectTable[VarsComm.ExtTx.SlotNo].StreamStatus)
- {
-
- /* Stream has been opened send the openwrite command */
- VarsComm.BtModuleOutBuf.Buf[0] = SYSTEM_CMD;
- VarsComm.BtModuleOutBuf.Buf[1] = OPENWRITE;
- memcpy((UBYTE*)&(VarsComm.BtModuleOutBuf.Buf[2]),(UBYTE*)VarsComm.ExtTx.FileName, FILENAME_LENGTH + 1);
- memcpy((UBYTE*)&(VarsComm.BtModuleOutBuf.Buf[22]),(UBYTE*)&(VarsComm.ExtTx.RemFileSize), sizeof(VarsComm.ExtTx.RemFileSize));
- dBtSendMsg(VarsComm.BtModuleOutBuf.Buf, 26, 26);
-
- VarsComm.ExtTx.Timer = 0;
- VarsComm.UpdateState = 2;
-
- }
- else
- {
- if (VarsComm.ExtTx.Timer >= FILETXTOUT)
- {
- *(VarsComm.pRetVal) = FILETX_STREAMERROR;
- VarsComm.UpdateState = 8;
- }
- else
- {
- (VarsComm.ExtTx.Timer)++;
- }
- }
- }
- break;
-
- case 2:
- {
-
- if (4 == IOMapComm.BtInBuf.InPtr)
- {
-
- /* Data has been received - examine the answer */
- if ((REPLY_CMD == IOMapComm.BtInBuf.Buf[0]) && (OPENWRITE == IOMapComm.BtInBuf.Buf[1]))
- {
-
- /* OpenWrite answer */
- if (LOADER_ERR_BYTE(SUCCESS) == IOMapComm.BtInBuf.Buf[2])
- {
-
- /* save the handle from the other brick */
- VarsComm.ExtTx.DstHandle = IOMapComm.BtInBuf.Buf[3];
- VarsComm.UpdateState = 3;
- IOMapComm.BtInBuf.InPtr = 0;
- }
- else
- {
-
- /* Open write failiure - terminate file transfer */
- *(VarsComm.pRetVal) = IOMapComm.BtInBuf.Buf[2];
- VarsComm.UpdateState = 8;
- }
- }
- }
-
- if (VarsComm.ExtTx.Timer >= FILETXTOUT)
- {
- *(VarsComm.pRetVal) = FILETX_TIMEOUT;
- VarsComm.UpdateState = 8;
- }
- else
- {
- (VarsComm.ExtTx.Timer)++;
- }
- }
- break;
-
- case 3: /*SENDWRITE:*/
- {
- ULONG Length;
- UWORD MsgSize;
-
- VarsComm.ExtTx.Timer = 0;
-
- if (VarsComm.ExtTx.RemFileSize > (MAX_BT_MSG_SIZE - 5))
- {
-
- /* need to use the maximum size available - approx 64K */
- VarsComm.ExtTx.RemMsgSize = (MAX_BT_MSG_SIZE - 5);
- }
- else
- {
-
- /* Message can hold the remaining message */
- VarsComm.ExtTx.RemMsgSize = VarsComm.ExtTx.RemFileSize;
- }
-
- if (VarsComm.ExtTx.RemMsgSize > (SIZE_OF_BTBUF - 5))
- {
- Length = SIZE_OF_BTBUF - 5;
- VarsComm.UpdateState = 4;
- }
- else
- {
- Length = VarsComm.ExtTx.RemMsgSize;
- VarsComm.UpdateState = 5;
- }
-
- Handle = (UBYTE)(VarsComm.ExtTx.SrcHandle);
- pMapLoader->pFunc(READ, &Handle, &(VarsComm.BtModuleOutBuf.Buf[3]), &Length);
- MsgSize = VarsComm.ExtTx.RemMsgSize + 3;
- VarsComm.BtModuleOutBuf.Buf[0] = SYSTEM_CMD;
- VarsComm.BtModuleOutBuf.Buf[1] = WRITE;
- VarsComm.BtModuleOutBuf.Buf[2] = VarsComm.ExtTx.DstHandle;
- dBtSendMsg(VarsComm.BtModuleOutBuf.Buf, Length + 3, MsgSize);
-
- VarsComm.ExtTx.RemMsgSize -= Length;
- VarsComm.ExtTx.RemFileSize -= Length;
- }
- break;
-
- case 4: /* CONTINOUSWRITE:*/
- {
- ULONG Length;
- UWORD Status;
-
- if(dBtCheckForTxBuf())
- {
-
- /* do only send more data if buffer is empty */
- VarsComm.ExtTx.Timer = 0;
- if (VarsComm.ExtTx.RemMsgSize >= SIZE_OF_BTBUF)
- {
- Length = SIZE_OF_BTBUF;
- }
- else
- {
- Length = VarsComm.ExtTx.RemMsgSize;
- }
-
- VarsComm.ExtTx.RemMsgSize -= Length;
- VarsComm.ExtTx.RemFileSize -= Length;
- Handle = (UBYTE)(VarsComm.ExtTx.SrcHandle);
- Status = pMapLoader->pFunc(READ, &Handle, &(VarsComm.BtModuleOutBuf.Buf[0]), &Length);
- if (Status >= 0x8000)
- {
- Length = 0;
- }
- dBtSend(VarsComm.BtModuleOutBuf.Buf, Length);
- if (!(VarsComm.ExtTx.RemMsgSize))
- {
-
- /* at this point due to large write command acknowledge is expected */
- VarsComm.UpdateState = 5;
- VarsComm.ExtTx.Timer = 0;
- IOMapComm.BtInBuf.InPtr = 0;
- }
- }
- }
- break;
-
- case 5: /* WRITEACK: */
- {
- if (6 == IOMapComm.BtInBuf.InPtr)
- {
- if ((WRITE == IOMapComm.BtInBuf.Buf[1]) &&
- (REPLY_CMD == IOMapComm.BtInBuf.Buf[0]) &&
- (VarsComm.ExtTx.DstHandle == IOMapComm.BtInBuf.Buf[3]))
- {
-
- /* Ok the the return reply is for me - was it ok? */
- if (LOADER_ERR_BYTE(SUCCESS) == IOMapComm.BtInBuf.Buf[2])
- {
-
- /* Ok send next write*/
- if (VarsComm.ExtTx.RemFileSize)
- {
- VarsComm.UpdateState = 3;
- }
- else
- {
- VarsComm.UpdateState = 6;
- }
- IOMapComm.BtInBuf.InPtr = 0;
- }
- }
- }
-
- if (VarsComm.ExtTx.Timer >= FILETXTOUT)
- {
- *(VarsComm.pRetVal) = FILETX_TIMEOUT;
- VarsComm.UpdateState = 8;
- }
- else
- {
- (VarsComm.ExtTx.Timer)++;
- }
- }
- break;
-
- case 6: /*TERMINATESEND: */
- {
-
- /* Stream still open close the receiver handle */
- VarsComm.BtModuleOutBuf.Buf[0] = SYSTEM_CMD;
- VarsComm.BtModuleOutBuf.Buf[1] = CLOSE;
- VarsComm.BtModuleOutBuf.Buf[2] = VarsComm.ExtTx.DstHandle;
- dBtSendMsg(VarsComm.BtModuleOutBuf.Buf, 3, 3);
-
- VarsComm.ExtTx.Timer = 0;
- VarsComm.UpdateState = 7;
- }
- break;
- case 7: /* TERMINATEACK:*/
- {
-
- if (4 == IOMapComm.BtInBuf.InPtr)
- {
-
- if ((CLOSE == IOMapComm.BtInBuf.Buf[1]) &&
- (REPLY_CMD == IOMapComm.BtInBuf.Buf[0]) &&
- (VarsComm.ExtTx.DstHandle == IOMapComm.BtInBuf.Buf[3]))
- {
- if (LOADER_ERR_BYTE(SUCCESS) == IOMapComm.BtInBuf.Buf[2])
- {
- *(VarsComm.pRetVal) = SUCCESS;
- VarsComm.UpdateState = 8;
- }
- else
- {
- *(VarsComm.pRetVal) = FILETX_CLOSEERROR;
- VarsComm.UpdateState = 8;
- }
- IOMapComm.BtInBuf.InPtr = 0;
- }
- }
-
- if (VarsComm.ExtTx.Timer >= FILETXTOUT)
- {
- *(VarsComm.pRetVal) = FILETX_TIMEOUT;
- VarsComm.UpdateState = 8;
- }
- else
- {
- (VarsComm.ExtTx.Timer)++;
- }
- }
- break;
- case 8:
- {
- UBYTE Handle;
- Handle = (UBYTE)(VarsComm.ExtTx.SrcHandle);
- pMapLoader->pFunc(CLOSE, &Handle, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
- case 9:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 10:
- {
- SETBtStateIdle;
- }
- break;
- }
- }
- break;
-
- case UPD_EXTREAD:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- ULONG MsgLength;
- UWORD Status;
-
- MsgLength = (SIZE_OF_BTBUF - 8);
- Handle =(UBYTE)(VarsComm.ExtTx.SrcHandle);
- Status = pMapLoader->pFunc(READ, &Handle, &(VarsComm.BtModuleOutBuf.Buf[6]), &MsgLength);
- VarsComm.BtModuleOutBuf.Buf[0] = (UBYTE) (REPLY_CMD);
- VarsComm.BtModuleOutBuf.Buf[1] = (UBYTE) (VarsComm.ExtTx.Cmd);
- VarsComm.BtModuleOutBuf.Buf[2] = LOADER_ERR_BYTE(Status);
- VarsComm.BtModuleOutBuf.Buf[3] = LOADER_HANDLE(Status);
- VarsComm.BtModuleOutBuf.Buf[4] = (UBYTE)VarsComm.ExtTx.RemMsgSize;
- VarsComm.BtModuleOutBuf.Buf[5] = (UBYTE)(VarsComm.ExtTx.RemMsgSize >> 8);
- dBtSendMsg(VarsComm.BtModuleOutBuf.Buf, (UBYTE)(SIZE_OF_BTBUF - 2), (VarsComm.ExtTx.RemMsgSize + 6));
-
- VarsComm.ExtTx.RemMsgSize -= (SIZE_OF_BTBUF - 8);
- VarsComm.UpdateState = 1;
- }
- break;
-
- case 1:
- {
-
- ULONG Length;
-
- if(dBtCheckForTxBuf())
- {
- if (VarsComm.ExtTx.RemMsgSize > (SIZE_OF_BTBUF))
- {
-
- /* Send max number of bytes */
- VarsComm.ExtTx.RemMsgSize -= SIZE_OF_BTBUF;
- Length = SIZE_OF_BTBUF;
- }
- else
- {
-
- /* Buffer can hold the last part of the requested data */
- Length = VarsComm.ExtTx.RemMsgSize;
- VarsComm.ExtTx.RemMsgSize = 0;
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- Handle =(UBYTE)(VarsComm.ExtTx.SrcHandle);
- pMapLoader->pFunc(READ, &Handle, (VarsComm.BtModuleOutBuf.Buf), &Length);
- dBtSend(VarsComm.BtModuleOutBuf.Buf, Length);
- }
- }
- break;
- }
- }
- break;
-
- case UPD_SEARCH:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsCloseConn0(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
-
- /* Now ready for the actual search */
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if ((IOMapComm.BtDeviceTable[Tmp].DeviceStatus) & BT_DEVICE_KNOWN)
- {
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus) = (BT_DEVICE_AWAY | BT_DEVICE_KNOWN);
- }
- else
- {
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus = BT_DEVICE_EMPTY;
- }
- }
- dBtSendBtCmd((UBYTE)MSG_BEGIN_INQUIRY, (UBYTE)BT_DEFAULT_INQUIRY_MAX,
- BT_DEFAULT_INQUIRY_TIMEOUT_LO, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
- case 3:
- {
-
- /* this is the stop search flag */
- /* - meaning that the search should be stopped */
- if (1 == VarsComm.BtCmdData.ParamOne)
- {
- dBtSendBtCmd((UBYTE)MSG_CANCEL_INQUIRY, 0, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState) = 7;
- }
- else
- {
-
-
- /* when inquiry is running there is 2 alloable return answers */
- /* either inquiry result or inquiry stopped */
- if (MSG_INQUIRY_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- dBtResetTimeOut(); /* reset the cmd timeout */
- Tmp = cCommInsertDevice(&(IOMapComm.BtInBuf.Buf[2]), &(IOMapComm.BtInBuf.Buf[9]),
- &(IOMapComm.BtInBuf.Buf[25]), (UBYTE) BT_DEVICE_UNKNOWN, &Tmp2);
- if (SIZE_OF_BT_DEVICE_TABLE > Tmp)
- {
-
- /* Remember to check for already existing entry ....*/
- if (DEVICE_VERIFIED != Tmp2)
- {
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus) &= ~BT_DEVICE_AWAY;
- IOMapComm.BtDeviceCnt++;
- }
- }
- else
- {
-
- /* We will send a stop inquiry cmd as the table is full! */
- dBtSendBtCmd((UBYTE)MSG_CANCEL_INQUIRY, 0, 0, NULL, NULL, NULL, NULL);
- }
- }
-
- if (MSG_INQUIRY_STOPPED == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- VarsComm.BtDeviceIndex = 0; /* Start looking for found devices at index 0 */
- VarsComm.LookUpCnt = 0; /* how many times should we try to ask for the name */
- (VarsComm.UpdateState)++;
- }
- }
- IOMapComm.BtInBuf.Buf[BT_CMD_BYTE] = 0;
- }
- break;
-
- case 4:
- {
-
- /* this is the stop search flag */
- /* - meaning that the search should be stopped */
- if (1 == VarsComm.BtCmdData.ParamOne)
- {
- (VarsComm.UpdateState) = 8;
- }
- else
- {
-
- /* Needs to run through the hole list as found devices can be placed anywhere */
- /* in the table */
- for (Tmp = (VarsComm.BtDeviceIndex); Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if ((BT_DEVICE_UNKNOWN == IOMapComm.BtDeviceTable[Tmp].DeviceStatus) ||
- (BT_DEVICE_KNOWN == IOMapComm.BtDeviceTable[Tmp].DeviceStatus))
- {
- VarsComm.BtDeviceIndex = (Tmp + 1);
- (VarsComm.UpdateState)++;
- dBtSendBtCmd((UBYTE)MSG_LOOKUP_NAME, 0, 0, (IOMapComm.BtDeviceTable[Tmp].BdAddr),
- NULL, NULL, NULL);
- break;
- }
- }
- if (SIZE_OF_BT_DEVICE_TABLE == Tmp)
- {
- (VarsComm.LookUpCnt)++;
- if (((VarsComm.LookUpCnt) < LOOKUPNO) && ((IOMapComm.BtDeviceNameCnt) != (IOMapComm.BtDeviceCnt)))
- {
- VarsComm.BtDeviceIndex = 0;
- }
- else
- {
-
- // all done
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- }
- }
- }
- break;
-
- case 5:
- {
-
- if (MSG_LOOKUP_NAME_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- Tmp2 = FALSE; /* Tmp2 used to indicate name change */
- (IOMapComm.BtDeviceNameCnt)++;
-
- /* Try look the most obvious place in the device table */
- Tmp = VarsComm.BtDeviceIndex - 1;
- if (TRUE != cCommCheckBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), &(IOMapComm.BtInBuf.Buf[2])))
- {
-
- /* there was no match - now look the complete table */
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if (TRUE == cCommCheckBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), &(IOMapComm.BtInBuf.Buf[2])))
- {
- break;
- }
- }
- }
-
- if (Tmp < SIZE_OF_BT_DEVICE_TABLE)
- {
-
- /* Valid index with matching device adress found */
- if (0 == IOMapComm.BtInBuf.Buf[9])
- {
-
- if (0 == IOMapComm.BtDeviceTable[Tmp].Name[0])
- {
-
- /* No valid name recvd and no valid name in table -> insert "No Name" */
- cCommInsertBtName(IOMapComm.BtDeviceTable[Tmp].Name, (UBYTE*)NoName);
- }
- }
- else
- {
-
- /* Valid Name - check it against the one allready stored in the device table */
- /* if it differs then update */
- if (0 != strcmp((char const*)IOMapComm.BtDeviceTable[Tmp].Name, (char const*)&(IOMapComm.BtInBuf.Buf[9])))
- {
- cCommInsertBtName(IOMapComm.BtDeviceTable[Tmp].Name, &(IOMapComm.BtInBuf.Buf[9]));
- Tmp2 = TRUE;
- }
- }
- if ((BT_DEVICE_KNOWN == (IOMapComm.BtDeviceTable[Tmp].DeviceStatus)) && (TRUE == Tmp2))
- {
- dBtSendBtCmd((UBYTE)MSG_ADD_DEVICE, 0, 0, (IOMapComm.BtDeviceTable[Tmp].BdAddr),
- (IOMapComm.BtDeviceTable[Tmp].Name), (IOMapComm.BtDeviceTable[Tmp].ClassOfDevice), NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
- (VarsComm.UpdateState)--;
- }
- }
-
- /* Update devicestatus (name found) so it doesn't look up the name anymore */
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus |= BT_DEVICE_NAME;
- }
-
- if (MSG_LOOKUP_NAME_FAILURE == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- if ((LOOKUPNO - 1) == VarsComm.LookUpCnt)
- {
-
- /* This is the last time we ask this device -> we will not get a valid name */
- /* Try look the most obvious place in the device table */
- Tmp = VarsComm.BtDeviceIndex - 1;
- if (TRUE != cCommCheckBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), &(IOMapComm.BtInBuf.Buf[2])))
- {
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if (TRUE == cCommCheckBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), &(IOMapComm.BtInBuf.Buf[2])))
- {
- break;
- }
- }
- if ((Tmp < SIZE_OF_BT_DEVICE_TABLE) && (BT_DEVICE_UNKNOWN == (IOMapComm.BtDeviceTable[Tmp].DeviceStatus)))
- {
- cCommInsertBtName(IOMapComm.BtDeviceTable[Tmp].Name, (UBYTE*) NoName);
- }
- }
- (IOMapComm.BtDeviceNameCnt)++;
- }
- (VarsComm.UpdateState)--;
- }
- IOMapComm.BtInBuf.Buf[BT_CMD_BYTE] = 0;
- }
- break;
-
- case 6:
- {
-
- /* Waiting for reply on add device command - List result */
- if (MSG_LIST_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (LR_SUCCESS == IOMapComm.BtInBuf.Buf[2])
- {
-
- /* Return and go through the list*/
- (VarsComm.UpdateState) -= 2;
- }
- else
- {
- pMapUi->Error = (UBYTE)IOMapComm.BtInBuf.Buf[2];
- pMapUi->BluetoothState |= BT_ERROR_ATTENTION;
- }
- }
- }
- break;
- case 7:
- {
-
- /* here because search has been stopped by user during inquiry */
- if (MSG_INQUIRY_STOPPED == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* table should be cleared as no names hes been inquired */
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if ((IOMapComm.BtDeviceTable[Tmp].DeviceStatus) & BT_DEVICE_KNOWN)
- {
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus) = BT_DEVICE_KNOWN;
- }
- else
- {
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus) = BT_DEVICE_EMPTY;
- }
- IOMapComm.BtDeviceCnt = 0;
- IOMapComm.BtDeviceNameCnt = 0;
- }
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- }
- break;
- case 8:
- {
- for (Tmp = (VarsComm.BtDeviceIndex); Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if (BT_DEVICE_UNKNOWN == IOMapComm.BtDeviceTable[Tmp].DeviceStatus)
- {
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus = BT_DEVICE_EMPTY;
- }
- }
- SETBtStateIdle;
- *(VarsComm.pRetVal) = SUCCESS;
- }
- break;
- }
- }
- break;
-
- case UPD_CONNECTREQ:
- {
- switch (VarsComm.UpdateState)
- {
-
- case 0:
- {
- dBtSendBtCmd((UBYTE)MSG_ACCEPT_CONNECTION, 1, 0, NULL, NULL, NULL, NULL);
- cCommCopyBdaddr((IOMapComm.BtConnectTable[0].BdAddr), &(IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1]));
- (VarsComm.UpdateState)++;
- }
- break;
-
- case 1:
- {
- if (MSG_CONNECT_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* Check for successfull connection */
- if (1 == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 1])
- {
-
- /* Save the handle number and look up the name of the master */
- IOMapComm.BtConnectTable[0].HandleNr = IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 2];
- pMapUi->BluetoothState |= BT_STATE_CONNECTED;
- dBtSendBtCmd((UBYTE)MSG_LOOKUP_NAME, 0, 0, (IOMapComm.BtConnectTable[0].BdAddr), NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
-
- /* Unsuccessful connection */
- SETBtStateIdle;
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- }
- }
- }
- break;
-
- case 2:
- {
-
- /* a close connection can happen during connection sequence - if this */
- /* occurs for connection 0 then abort the rest of the sequence - OxFF */
- /* is unused handle */
- if ((MSG_CLOSE_CONNECTION_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE]) &&
- (0xFF == IOMapComm.BtConnectTable[0].HandleNr))
- {
- SETBtStateIdle;
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- }
- else
- {
-
- if (MSG_LOOKUP_NAME_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- Tmp = cCommInsertDevice(&(IOMapComm.BtInBuf.Buf[2]), &(IOMapComm.BtInBuf.Buf[9]),
- &(IOMapComm.BtInBuf.Buf[25]), (UBYTE) BT_DEVICE_KNOWN, &Tmp2);
-
- if (SIZE_OF_BT_DEVICE_TABLE > Tmp)
- {
-
- /* entry has been added or is allready existing in the devicetable */
- cCommInsertBtName(IOMapComm.BtConnectTable[0].Name, &(IOMapComm.BtInBuf.Buf[9]));
- cCommCopyBdaddr((IOMapComm.BtConnectTable[0].BdAddr), &(IOMapComm.BtInBuf.Buf[2]));
- memcpy(IOMapComm.BtConnectTable[0].ClassOfDevice,
- IOMapComm.BtDeviceTable[Tmp].ClassOfDevice, SIZE_OF_CLASS_OF_DEVICE);
- dBtSendBtCmd((UBYTE)MSG_ADD_DEVICE, 0, 0, (IOMapComm.BtDeviceTable[Tmp].BdAddr),
- (IOMapComm.BtDeviceTable[Tmp].Name), (IOMapComm.BtDeviceTable[Tmp].ClassOfDevice), NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
-
- /* no room in the devicetable -> reject the request. Param2 is index in connect table */
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, IOMapComm.BtConnectTable[0].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- SETBtStateIdle;
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- }
- }
-
- if (MSG_LOOKUP_NAME_FAILURE == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* not able to get the name - disconnect*/
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, IOMapComm.BtConnectTable[0].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- SETBtStateIdle;
- }
- }
- }
- break;
-
- case 3:
- {
- if (MSG_LIST_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (LR_SUCCESS == IOMapComm.BtInBuf.Buf[2])
- {
-
- /* All success - open stream (Data mode) */
- dBtSendBtCmd((UBYTE)MSG_OPEN_STREAM, IOMapComm.BtConnectTable[0].HandleNr, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
-
- /* no room in the BC4 -> reject the request */
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, IOMapComm.BtConnectTable[0].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- SETBtStateIdle;
- }
- }
- }
- break;
-
- case 4:
- {
- if (VarsComm.BtBcPinLevel)
- {
- IOMapComm.BtConnectTable[0].StreamStatus = 1;
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtDataState;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_CONNECT:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsCloseConn0(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- dBtSendBtCmd((UBYTE)MSG_CONNECT, 0, 0,
- IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].BdAddr, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
-
- case 3:
- {
- if (MSG_CONNECT_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (IOMapComm.BtInBuf.Buf[2] == 1)
- {
-
- IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].HandleNr = IOMapComm.BtInBuf.Buf[3];
- pMapUi->BluetoothState |= BT_STATE_CONNECTED;
-
- //Now we need to copy the data to the connectiontable
- memcpy((IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].BdAddr), (IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].BdAddr), SIZE_OF_BDADDR);
- cCommInsertBtName(IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].Name, IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].Name);
- memcpy((IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].ClassOfDevice),
- (IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].ClassOfDevice), SIZE_OF_CLASS_OF_DEVICE);
- IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].DeviceStatus = BT_DEVICE_KNOWN;
-
- if (VarsComm.BtCmdData.ParamTwo == 1)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_CONNECTION_1_ENABLE;
- }
- else
- {
- if (VarsComm.BtCmdData.ParamTwo == 2)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_CONNECTION_2_ENABLE;
- }
- else
- {
- if (VarsComm.BtCmdData.ParamTwo == 3)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_CONNECTION_3_ENABLE;
- }
- }
- }
- dBtSendBtCmd((UBYTE)MSG_ADD_DEVICE, 0, 0, (IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].BdAddr),
- (IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].Name),
- (IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].ClassOfDevice), NULL);
- (VarsComm.UpdateState)+=3; /* skip the pin code part */
- }
- else
- {
-
- /* Connect request denied */
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- SETBtStateIdle;
- }
- }
- if (MSG_REQUEST_PIN_CODE == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- *(VarsComm.pRetVal) = REQPIN;
- VarsComm.pValidPinCode = NULL;
- (VarsComm.UpdateState)++;
- }
- }
- break;
-
- case 4:
- {
- if (NULL != VarsComm.pValidPinCode)
- {
-
- memcpy((IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].PinCode),
- VarsComm.pValidPinCode, SIZE_OF_BT_PINCODE);
-
- dBtSendBtCmd((UBYTE)MSG_PIN_CODE, 0, 0, IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].BdAddr,
- NULL, NULL, (VarsComm.pValidPinCode));
- (VarsComm.UpdateState)++;
- }
- if (MSG_CONNECT_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* if no pin code has been accepted then timeout indicated */
- /* by connect failiure - it can only be failiure here */
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- SETBtStateIdle;
- }
- }
- break;
-
- case 5:
- {
-
- if (MSG_CONNECT_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* Connect failiure can happen at any time */
- *(VarsComm.pRetVal) = BTCONNECTFAIL;
- SETBtStateIdle;
- }
- if (MSG_PIN_CODE_ACK == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* return back and wait for connect ack */
- (VarsComm.UpdateState) = 3;
- }
- }
- break;
- case 6:
- {
- if (MSG_LIST_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_DISCONNECT:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
-
- case 1:
- {
- if (BLUETOOTH_HANDLE_UNDEFIEND != IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamOne].HandleNr)
- {
- VarsComm.BtCmdData.ParamOne = IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamOne].HandleNr;
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, VarsComm.BtCmdData.ParamOne, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- else
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
-
- case 2:
- {
-
- /* look for right message and right handle */
- if ((MSG_CLOSE_CONNECTION_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE]) &&
- (VarsComm.BtCmdData.ParamOne == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE + 2]))
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
- case UPD_DISCONNECTALL:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsDisconnectAll(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- break;
- }
- }
- break;
- case UPD_REMOVEDEVICE:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsCloseConn0(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- dBtSendBtCmd((UBYTE)MSG_REMOVE_DEVICE, 0, 0,
- IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].BdAddr, NULL, NULL, NULL);
- IOMapComm.BtDeviceTable[VarsComm.BtCmdData.ParamOne].DeviceStatus = BT_DEVICE_EMPTY;
- (VarsComm.UpdateState)++;
- }
- break;
- case 3:
- {
- if (MSG_LIST_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_PINREQ:
- {
-
- /* This is pincode request from the outside - always conn 0*/
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- if (NULL != VarsComm.pValidPinCode)
- {
- memcpy((IOMapComm.BtConnectTable[0].PinCode),
- VarsComm.pValidPinCode, SIZE_OF_BT_PINCODE);
- dBtSendBtCmd((UBYTE)MSG_PIN_CODE, 0, 0, (IOMapComm.BtConnectTable[0].BdAddr),
- NULL, NULL, (VarsComm.pValidPinCode));
- (VarsComm.UpdateState)++;
- }
- }
- break;
- case 1:
- {
- if (MSG_PIN_CODE_ACK == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_VISIBILITY:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsCloseConn0(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- dBtSendBtCmd((UBYTE)MSG_SET_DISCOVERABLE, VarsComm.BtCmdData.ParamOne, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
- case 3:
- {
- if (MSG_DISCOVERABLE_ACK == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (VarsComm.BtCmdData.ParamOne == 1)
- {
- IOMapComm.BrickData.BtStateStatus |= BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState |= BT_STATE_VISIBLE;
- }
- else
- {
- IOMapComm.BrickData.BtStateStatus &= ~BT_BRICK_VISIBILITY;
- pMapUi->BluetoothState &= ~BT_STATE_VISIBLE;
- }
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
-
- case UPD_OFF:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- cCommsSetCmdMode(&(VarsComm.UpdateState));
- }
- break;
- case 1:
- {
- cCommsDisconnectAll(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
- dBtSendBtCmd((UBYTE)MSG_SET_BRICK_STATUSBYTE, BT_DISABLE, 0, NULL, NULL, NULL, NULL);
- (VarsComm.UpdateState)++;
- }
- break;
- case 3:
- {
- if (MSG_SET_BRICK_STATUSBYTE_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- if (IOMapComm.BtInBuf.Buf[2] == LR_SUCCESS)
- {
- SETBtOff;
- pMapUi->BluetoothState = BT_STATE_OFF;
- pMapUi->Flags |= UI_REDRAW_STATUS;
- }
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- break;
- }
- }
- break;
- case UPD_SENDDATA:
- {
- switch (VarsComm.UpdateState)
- {
- case 0:
- {
- if (1 == IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].StreamStatus)
- {
-
- /* Stream is allready open for the requested channel */
- (VarsComm.UpdateState) += 2;
- }
- else
- {
-
- /* Stream not open - try open it*/
- (VarsComm.UpdateState)++;
- }
- }
- break;
- case 1:
- {
- cCommsOpenStream(&(VarsComm.UpdateState));
- }
- break;
- case 2:
- {
-
- /* Stream is now opened now send the data */
- IOMapComm.BtInBuf.Buf[0] = 0;
- dBtSendMsg((VarsComm.BtModuleOutBuf.Buf), VarsComm.BtCmdData.ParamOne, (UWORD)(VarsComm.BtCmdData.ParamOne));
- (VarsComm.UpdateState)++;
- }
- break;
- case 3:
- {
- if(dBtCheckForTxBuf())
- {
- if (VarsComm.BtCmdData.ParamThree)
- {
- VarsComm.ExtTx.Timer = 0;
- (VarsComm.UpdateState)++;
- }
- else
- {
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- }
- }
- break;
- case 4:
- {
- if (0x02 == IOMapComm.BtInBuf.Buf[0])
- {
-
- /* a reply has been received now release the send sequence */
- *(VarsComm.pRetVal) = SUCCESS;
- SETBtStateIdle;
- }
- else
- {
- if (++VarsComm.ExtTx.Timer > BTSTREAMTOUT)
- {
- *(VarsComm.pRetVal) = BTTIMEOUT;
- SETBtStateIdle;
- }
- }
- }
- break;
- }
- }
- break;
- default:
- {
-
- /* This is idle */
- VarsComm.UpdateState = 0;
- }
- break;
- }
-}
-
-UWORD cCommCopyBdaddr(UBYTE *pDst, UBYTE *pSrc)
-{
- memcpy(pDst, pSrc, SIZE_OF_BDADDR);
- return((UWORD) SIZE_OF_BDADDR);
-}
-
-UWORD cCommCheckBdaddr(UBYTE *pAdr, UBYTE *pSrc)
-{
- UWORD RetVal;
-
- RetVal = FALSE;
- if (0 == memcmp((UBYTE*)pAdr, pSrc, SIZE_OF_BDADDR))
- {
- RetVal = TRUE;
- }
- return(RetVal);
-}
-
-UWORD cCommInsertBtName(UBYTE *pDst, UBYTE *pSrc)
-{
- UBYTE Cnt;
-
- Cnt = 0;
-
- /* Complete brick name */
- while ((pSrc[Cnt]) && (Cnt < (SIZE_OF_BT_NAME - 1)))
- {
- pDst[Cnt] = pSrc[Cnt];
- Cnt++;
- }
-
- /* Fill remaining up with zeros */
- while (Cnt < SIZE_OF_BT_NAME)
- {
- pDst[Cnt] = 0;
- Cnt++;
- }
-
- return((UWORD)SIZE_OF_BT_NAME);
-}
-
-
-UWORD cCommInsertDevice(UBYTE *pBdaddr, UBYTE *pName, UBYTE *pCod, UBYTE DeviceStatus, UBYTE *pAddInfo)
-{
- UWORD Tmp;
- UWORD RtnVal;
-
- RtnVal = FALSE;
- *pAddInfo = DEVICE_VERIFIED;
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if ((TRUE == cCommCheckBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), pBdaddr)) &&
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus != BT_DEVICE_EMPTY))
- {
-
- if ((IOMapComm.BtDeviceTable[Tmp].DeviceStatus) & BT_DEVICE_AWAY)
- {
- *pAddInfo = DEVICE_UPDATED;
- (IOMapComm.BtDeviceTable[Tmp].DeviceStatus) &= ~BT_DEVICE_AWAY;
- }
-
- if (BT_DEVICE_UNKNOWN == IOMapComm.BtDeviceTable[Tmp].DeviceStatus)
- {
-
- /* Former unknown adresses can be upgraded - downgrading is not possible */
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus = DeviceStatus;
- }
- if (pCod != NULL)
- {
-
- /* Class of device can also upgraded - never downgraded to 0 */
- memcpy(&(IOMapComm.BtDeviceTable[Tmp].ClassOfDevice), pCod, SIZE_OF_CLASS_OF_DEVICE);
- }
- if ((*pName) != 0)
- {
-
- /* Only upgrade name if name is received */
- cCommInsertBtName(IOMapComm.BtDeviceTable[Tmp].Name, pName);
- }
- RtnVal = TRUE;
-
- /* Break out - entry can only be found once */
- break;
- }
- }
-
- if (FALSE == RtnVal)
- {
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if (IOMapComm.BtDeviceTable[Tmp].DeviceStatus == BT_DEVICE_EMPTY)
- {
- *pAddInfo = DEVICE_INSERTED;
- IOMapComm.BtDeviceTable[Tmp].DeviceStatus = DeviceStatus;
- cCommCopyBdaddr((IOMapComm.BtDeviceTable[Tmp].BdAddr), pBdaddr);
- cCommInsertBtName(IOMapComm.BtDeviceTable[Tmp].Name, pName);
- if (NULL != pCod)
- {
- memcpy((IOMapComm.BtDeviceTable[Tmp].ClassOfDevice), pCod, SIZE_OF_CLASS_OF_DEVICE);
- }
- else
- {
- memset((IOMapComm.BtDeviceTable[Tmp].ClassOfDevice), 0, SIZE_OF_CLASS_OF_DEVICE);
- }
- RtnVal = TRUE;
- break;
- }
- }
- }
-
- /* Function returns SIZE_OF_BT_DEVICE_TABLE if device is not in the list */
- return(Tmp);
-}
-
-void cCommsSetCmdMode(UBYTE *pNextState)
-{
- switch(VarsComm.CmdSwitchCnt)
- {
- case 0:
- {
- if (BT_ARM_CMD_MODE != VarsComm.BtState)
- {
- cCommClearStreamStatus();
- VarsComm.BtCmdModeWaitCnt = 0;
- VarsComm.CmdSwitchCnt++;
- }
- else
- {
-
- /* allready in CMD mode - Exit */
- VarsComm.CmdSwitchCnt = 0;
- (*pNextState)++;
- }
- }
- break;
-
- case 1:
- {
-
- /* stream status has been cleared now wait until buffers has been emptied */
- if (TRUE == dBtTxEnd())
- {
-
- /* Wait 100 ms after last byte has been sent to BC4 - else BC4 can crash */
- if (++(VarsComm.BtCmdModeWaitCnt) > 100)
- {
- dBtClearArm7CmdSignal();
- VarsComm.CmdSwitchCnt++;
- }
- }
- }
- break;
-
- case 2:
- {
- if (VarsComm.BtBcPinLevel == 0)
- {
-
- /* Bluecore has entered cmd mode */
- SETBtCmdState;
- VarsComm.CmdSwitchCnt = 0;
- (*pNextState)++;
- }
- }
- break;
-
- default:
- {
- VarsComm.CmdSwitchCnt = 0;
- }
- break;
- }
-}
-
-void cCommsOpenStream(UBYTE *pNextState)
-{
- switch(VarsComm.StreamStateCnt)
- {
- case 0:
- {
-
- if (SIZE_OF_BT_CONNECT_TABLE > VarsComm.BtCmdData.ParamTwo)
- {
-
- /* first check if there is a connection on the requested channel */
- if ('\0' != IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].Name[0])
- {
-
- if (1 == IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].StreamStatus)
- {
-
- /* Stream is allready open - continue */
- (*pNextState)++;
- }
- else
- {
-
- /* There is a connection on requested channel proceed */
- VarsComm.StreamStateCnt = 1;
- }
- }
- else
- {
-
- /* Error - no connecteion on requested channel - exit */
- *(VarsComm.pRetVal) = (UWORD)ERR_COMM_CHAN_NOT_READY;
- *(VarsComm.pRetVal) |= 0x8000;
- SETBtStateIdle;
- }
- }
- else
- {
-
- /* Error - Illegal channel no - exit */
- *(VarsComm.pRetVal) = (UWORD)ERR_COMM_CHAN_INVALID;
- *(VarsComm.pRetVal) |= 0x8000;
- SETBtStateIdle;
- }
- }
- break;
-
- case 1:
- {
- cCommsSetCmdMode(&(VarsComm.StreamStateCnt));
- }
- break;
-
- case 2:
- {
- cCommsCloseConn0(&(VarsComm.StreamStateCnt));
- }
- break;
-
- case 3:
- {
-
- /* Open stream on the specified channel */
- VarsComm.StreamStateCnt = 4;
- dBtSendBtCmd((UBYTE)MSG_OPEN_STREAM, IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- }
- break;
-
- case 4:
- {
- if (VarsComm.BtBcPinLevel)
- {
- SETBtDataState;
- IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamTwo].StreamStatus = 1;
- VarsComm.StreamStateCnt = 0;
- (*pNextState)++;
- }
- }
- break;
-
- default:
- {
- VarsComm.StreamStateCnt = 0;
- }
- break;
- }
-}
-
-void cCommsCloseConn0(UBYTE *pNextState)
-{
- switch(VarsComm.CloseConn0Cnt)
- {
- case 0:
- {
- if ('\0' != IOMapComm.BtConnectTable[0].Name[0])
- {
-
- /* now disconnect channel 0 */
- VarsComm.CloseConn0Cnt = 1;
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, IOMapComm.BtConnectTable[0].HandleNr, 0, NULL, NULL, NULL, NULL);
- }
- else
- {
- (*pNextState)++;
- }
- }
- break;
- case 1:
- {
- if (MSG_CLOSE_CONNECTION_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
- VarsComm.CloseConn0Cnt = 0;
- (*pNextState)++;
- }
- }
- break;
- default:
- {
- VarsComm.CloseConn0Cnt = 0;
- }
- break;
- }
-}
-
-void cCommsDisconnectAll(UBYTE *pNextState)
-{
- switch(VarsComm.DiscAllCnt)
- {
- case 0:
- {
- VarsComm.BtCmdData.ParamOne = 0;
- (VarsComm.DiscAllCnt)++;
- }
- break;
- case 1:
- {
- while (('\0' == IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamOne].Name[0]) &&
- (VarsComm.BtCmdData.ParamOne < 4))
- {
- VarsComm.BtCmdData.ParamOne++;
- }
- if (VarsComm.BtCmdData.ParamOne < 4)
- {
-
- /* now disconnect selected channel */
- dBtSendBtCmd((UBYTE)MSG_CLOSE_CONNECTION, IOMapComm.BtConnectTable[VarsComm.BtCmdData.ParamOne].HandleNr,
- 0, NULL, NULL, NULL, NULL);
- VarsComm.BtCmdData.ParamOne++;
- (VarsComm.DiscAllCnt)++;
- }
- else
- {
-
- /* no more connections - move on */
- (VarsComm.DiscAllCnt) = 0;
- (*pNextState)++;
- }
- }
- break;
- case 2:
- {
- if (MSG_CLOSE_CONNECTION_RESULT == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE])
- {
-
- /* Go back and check for more connections to close */
- (VarsComm.DiscAllCnt)--;
- }
- }
- break;
- }
-}
-
-void cCommsBtReset(UBYTE *pNextState)
-{
- switch(VarsComm.ResetBtCnt)
- {
- case 0:
- {
-
- /* Setup Reset sequence */
- VarsComm.BtResetTimeCnt = 0;
- VarsComm.ResetBtCnt = 1;
- dBtSetBcResetPinLow();
- }
- break;
- case 1:
- {
-
- /* Reset should be held low for a certain time "BLUECORE_RESET_TIME" */
- VarsComm.BtResetTimeCnt++;
- if (VarsComm.BtResetTimeCnt > BLUECORE_RESET_TIME)
- {
- dBtSetBcResetPinHigh();
- VarsComm.BtWaitTimeCnt = 0;
- VarsComm.ResetBtCnt = 2;
- }
- }
- break;
- case 2:
- {
-
- /* Wait after reset is released either wait a minimum time or wait for the reset indication telegram */
- VarsComm.BtWaitTimeCnt++;
- if ((VarsComm.BtWaitTimeCnt > BLUECORE_WAIT_BEFORE_INIT) || (MSG_RESET_INDICATION == IOMapComm.BtInBuf.Buf[BT_CMD_BYTE]))
- {
- memset(&(IOMapComm.BtDeviceTable), 0, sizeof(IOMapComm.BtDeviceTable));
- cCommClrConnTable();
- VarsComm.ResetBtCnt = 3;
- }
- }
- break;
-
- case 3:
- {
- SETBtCmdState;
- VarsComm.ResetBtCnt = 0;
- (*pNextState)++;
- }
- break;
- }
-}
-
-
-UWORD cCommReq(UBYTE Cmd, UBYTE Param1, UBYTE Param2, UBYTE Param3, UBYTE *pName, UWORD *pRetVal)
-{
- ULONG Length;
- UWORD ReturnVal;
- SBYTE foundIndex= 0;
-
- ReturnVal = BTBUSY;
- *pRetVal = BTBUSY;
- if ((UPD_IDLE == (VarsComm.ActiveUpdate)) || ((UPD_SEARCH == (VarsComm.ActiveUpdate)) && (STOPSEARCH == Cmd)))
- {
-
- ReturnVal = SUCCESS;
- *pRetVal = INPROGRESS;
- VarsComm.pRetVal = pRetVal;
- switch(Cmd)
- {
- case SENDFILE:
- {
- ReturnVal = SUCCESS;
-
- /* No file is currently beeing send - Now open the file */
- VarsComm.ExtTx.SrcHandle = pMapLoader->pFunc(OPENREAD, pName, NULL, &Length);
- VarsComm.ExtTx.RemFileSize = Length;
- VarsComm.ExtTx.SlotNo = Param1;
- VarsComm.BtCmdData.ParamTwo = Param1; /* This is used to open the correct stream */
-
- if (0x8000 > VarsComm.ExtTx.SrcHandle)
- {
-
- /* Source file is ok - go ahead */
- VarsComm.ActiveUpdate = UPD_SENDFILE;
- VarsComm.ExtTx.Timer = 0;
- VarsComm.ExtTx.Cmd = WRITE;
- cCommCopyFileName(VarsComm.ExtTx.FileName, pName);
- }
- else
- {
-
- /* Error in opening source file for read - file do not exist */
- ReturnVal = FILETX_SRCMISSING;
- }
- }
- break;
- case CONNECTBYNAME: // redo Param1, then fall through existing CONNECT code
- foundIndex= cCommSearchBTDevTableForName(pName);
- if(foundIndex != -1)
- Param1= foundIndex;
- case CONNECT:
- {
-
- if (BLUETOOTH_HANDLE_UNDEFIEND == IOMapComm.BtConnectTable[Param2].HandleNr && foundIndex != -1)
- {
-
- /* Connection not occupied */
- VarsComm.ActiveUpdate = UPD_CONNECT;
- VarsComm.BtCmdData.ParamOne = Param1;
- VarsComm.BtCmdData.ParamTwo = Param2;
- }
- else
- {
-
- /* Connection occupied */
- ReturnVal = BTCONNECTFAIL;
- *pRetVal = BTCONNECTFAIL;
- }
- }
- break;
-
- case DISCONNECT:
- {
- VarsComm.ActiveUpdate = UPD_DISCONNECT;
- VarsComm.BtCmdData.ParamOne = Param1;
- }
- break;
-
- case DISCONNECTALL:
- {
- VarsComm.ActiveUpdate = UPD_DISCONNECTALL;
- }
- break;
-
- case SEARCH:
- {
- VarsComm.ActiveUpdate = UPD_SEARCH;
- IOMapComm.BtDeviceNameCnt = 0;
- IOMapComm.BtDeviceCnt = 0;
- VarsComm.BtCmdData.ParamOne = 0;
- }
- break;
- case STOPSEARCH:
- {
- if (UPD_SEARCH == (VarsComm.ActiveUpdate))
- {
- VarsComm.BtCmdData.ParamOne = 1;
- }
- else
- {
- *pRetVal = SUCCESS;
- }
- }
- break;
- case REMOVEDEVICE:
- {
- VarsComm.ActiveUpdate = UPD_REMOVEDEVICE;
- VarsComm.BtCmdData.ParamOne = Param1;
- }
- break;
- case VISIBILITY:
- {
- VarsComm.ActiveUpdate = UPD_VISIBILITY;
- VarsComm.BtCmdData.ParamOne = Param1;
- }
- break;
- case SETCMDMODE:
- {
- VarsComm.ActiveUpdate = UPD_REQCMDMODE;
- }
- break;
- case FACTORYRESET:
- {
- VarsComm.ActiveUpdate = UPD_FACTORYRESET;
- }
- break;
- case BTON:
- {
- if (BT_STATE_OFF & (pMapUi->BluetoothState))
- {
- VarsComm.ActiveUpdate = UPD_RESET;
- }
- else
- {
-
- /* Device is already on*/
- *pRetVal = SUCCESS;
- }
- }
- break;
- case BTOFF:
- {
- VarsComm.ActiveUpdate = UPD_OFF;
- }
- break;
- case SENDDATA:
- {
-
- /* Param2 indicates the port that the data should be */
- /* be sent on - param1 indicates the number of data */
- /* to be sent. pName is the pointer to the data */
- if (Param1 <= sizeof(VarsComm.BtModuleOutBuf.Buf))
- {
- if ('\0' != IOMapComm.BtConnectTable[Param2].Name[0])
- {
- VarsComm.BtCmdData.ParamOne = Param1;
- VarsComm.BtCmdData.ParamTwo = Param2;
- VarsComm.BtCmdData.ParamThree = Param3;
- memcpy((VarsComm.BtModuleOutBuf.Buf), pName, Param1);
- VarsComm.ActiveUpdate = UPD_SENDDATA;
- }
- else
- {
- ReturnVal = (UWORD)ERR_COMM_CHAN_NOT_READY;
- ReturnVal |= 0x8000;
- }
- }
- else
- {
- ReturnVal = (UWORD)ERR_COMM_BUFFER_FULL;
- ReturnVal |= 0x8000;
- }
- }
- break;
- case OPENSTREAM:
- {
- VarsComm.BtCmdData.ParamTwo = Param2;
- VarsComm.ActiveUpdate = UPD_OPENSTREAM;
- }
- break;
- case SETBTNAME:
- {
- VarsComm.ActiveUpdate = UPD_BRICKNAME;
- }
- break;
- case EXTREAD:
- {
- VarsComm.ActiveUpdate = UPD_EXTREAD;
- }
- break;
- case PINREQ:
- {
-
- /* This is an incomming pinrequest for connection on connection 0 because */
- /* ActiveUpdate is idle (if it was incomming it is not idle) */
- cCommCopyBdaddr((IOMapComm.BtConnectTable[0].BdAddr), &(IOMapComm.BtInBuf.Buf[2]));
- pMapUi->BluetoothState |= (BT_CONNECT_REQUEST | BT_PIN_REQUEST);
- VarsComm.pValidPinCode = NULL;
- VarsComm.ActiveUpdate = UPD_PINREQ;
- }
- break;
- case CONNECTREQ:
- {
- VarsComm.ActiveUpdate = UPD_CONNECTREQ;
- }
- break;
- }
- }
- return(ReturnVal);
-}
-
-void cCommPinCode(UBYTE *pPinCode)
-{
- VarsComm.pValidPinCode = pPinCode;
- if (REQPIN == (*(VarsComm.pRetVal)))
- {
- *(VarsComm.pRetVal) = INPROGRESS;
- }
-}
-
-void cCommClrConnTable(void)
-{
- UBYTE Tmp;
-
- for (Tmp = 0; Tmp < SIZE_OF_BT_CONNECT_TABLE; Tmp++)
- {
- CLEARConnEntry(Tmp);
- }
- IOMapComm.BrickData.BtStateStatus &= ~(BT_CONNECTION_0_ENABLE | BT_CONNECTION_1_ENABLE | BT_CONNECTION_2_ENABLE | BT_CONNECTION_3_ENABLE);
- pMapUi->BluetoothState &= ~BT_STATE_CONNECTED;
- pMapUi->Flags |= UI_REDRAW_STATUS;
-}
-
- /* search the BT table */
-SBYTE cCommSearchBTDevTableForName(UBYTE *name) {
- UBYTE Tmp;
- for (Tmp = 0; Tmp < SIZE_OF_BT_DEVICE_TABLE; Tmp++)
- {
- if (0 == strcmp((char*)(IOMapComm.BtDeviceTable[Tmp].Name), (char*)name))
- return Tmp;
- }
- return -1;
-}
diff --git a/AT91SAM7S256/Source/c_comm.h b/AT91SAM7S256/Source/c_comm.h
deleted file mode 100644
index 06137b2..0000000
--- a/AT91SAM7S256/Source/c_comm.h
+++ /dev/null
@@ -1,154 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_comm.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_comm $
-//
-// Platform C
-//
-
-#ifndef C_COMM
-#define C_COMM
-
-
-#define BLUECORE_RESET_TIME 100 // Time in mS
-#define BLUECORE_WAIT_BEFORE_INIT 5000 // Time in mS
-#define BLUETOOTH_HANDLE_UNDEFIEND 0xFF
-
-/* Constants related to BtAdrStatus*/
-enum
-{
- COLDBOOT,
- INITIALIZED,
- BTADRERROR
-};
-
-
-enum
-{
- USB_CH,
- BT_CH,
- HISPEED_CH,
- NO_OF_CHANNELS
-};
-
-
-/* enum reffering to BT update */
-enum
-{
- UPD_BRICKNAME,
- UPD_FACTORYRESET,
- UPD_OPENSTREAM,
- UPD_REQCMDMODE,
- UPD_CONNECT,
- UPD_CONNECTREQ,
- UPD_PINREQ,
- UPD_DISCONNECT,
- UPD_DISCONNECTALL,
- UPD_REMOVEDEVICE,
- UPD_SEARCH,
- UPD_RESET,
- UPD_EXTREAD,
- UPD_SENDFILE,
- UPD_OFF,
- UPD_VISIBILITY,
- UPD_SENDDATA,
- UPD_IDLE
-};
-
-/* Constants reffering to Protocol */
-enum
-{
- DIRECT_CMD = 0x00,
- SYSTEM_CMD = 0x01,
- REPLY_CMD = 0x02,
-#ifdef ARMDEBUG
- DEBUG_CMD = 0x0d,
-#endif
- NO_REPLY_BIT = 0x80
-};
-
-typedef struct
-{
- ULONG RemFileSize;
- UWORD RemMsgSize;
- UWORD SrcHandle;
- UWORD DstHandle;
- UWORD Timer;
- UBYTE FileName[FILENAME_LENGTH + 1];
- UBYTE Cmd;
- UBYTE SlotNo;
-}EXTTX;
-
-typedef struct
-{
- UBYTE Buf[256];
- UWORD InPtr;
- UWORD OutPtr;
-}BTDATA;
-
-typedef struct
-{
- UBYTE Buf[256];
- UWORD InPtr;
- UWORD OutPtr;
-}HSDATA;
-
-typedef struct
-{
- UBYTE Status;
- UBYTE Type;
- UBYTE Handle;
- UBYTE Cmd;
-}EXTMODE;
-
-typedef struct
-{
- UBYTE ParamOne;
- UBYTE ParamTwo;
- UBYTE ParamThree;
-}BTCMD;
-
-typedef struct
-{
- UBYTE BtUpdateDataConnectNr;
- UBYTE BtBcPinLevel;
- UBYTE BtResetTimeCnt;
- UWORD BtWaitTimeCnt;
- BTDATA BtModuleInBuf;
- BTDATA BtModuleOutBuf;
- BTCMD BtCmdData;
- UBYTE HsState;
- HSDATA HsModuleInBuf;
- HSDATA HsModuleOutBuf;
- EXTTX ExtTx;
- EXTMODE ExtMode[NO_OF_CHANNELS];
- UBYTE ActiveUpdate;
- UBYTE UpdateState;
- UBYTE BtDeviceIndex;
- UBYTE CmdSwitchCnt;
- UBYTE StreamStateCnt;
- UBYTE CloseConn0Cnt;
- UBYTE DiscAllCnt;
- UBYTE ResetBtCnt;
- UBYTE BtState;
- UWORD *pRetVal;
- UWORD RetVal;
- UBYTE *pValidPinCode;
- UBYTE LookUpCnt;
- UBYTE BtAdrStatus;
- UBYTE BtCmdModeWaitCnt;
-}VARSCOMM;
-
-void cCommInit(void* pHeader);
-void cCommCtrl(void);
-void cCommExit(void);
-
-extern const HEADER cComm;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_comm.iom b/AT91SAM7S256/Source/c_comm.iom
deleted file mode 100644
index 2dfe994..0000000
--- a/AT91SAM7S256/Source/c_comm.iom
+++ /dev/null
@@ -1,223 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 9-06-08 14:57 $
-//
-// Filename $Workfile:: c_comm.iom $
-//
-// Version $Revision:: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_comm $
-//
-// Platform C
-//
-
-#ifndef CCOMM_IOM
-#define CCOMM_IOM
-
-#define pMapComm ((IOMAPCOMM*)(pHeaders[ENTRY_COMM]->pIOMap))
-
-#define SIZE_OF_USBBUF 64
-#define USB_PROTOCOL_OVERHEAD 1 + 1 /* Command type byte + Command */
-#define SIZE_OF_USBDATA (SIZE_OF_USBBUF - USB_PROTOCOL_OVERHEAD)
-#define SIZE_OF_HSBUF 128
-#define SIZE_OF_BTBUF 128
-
-#define BT_CMD_BYTE 1
-#define SIZE_OF_BT_DEVICE_TABLE 30
-#define SIZE_OF_BT_CONNECT_TABLE 4 /* Index 0 is alway incomming connections */
-#define MAX_BT_MSG_SIZE 60000L
-
-#define BT_DEFAULT_INQUIRY_MAX 0 /* Unlimited no */
-#define BT_DEFAULT_INQUIRY_TIMEOUT_LO 15 /* 15 x 1,28 Sec = 19,2 Sec */
-
-
-// Constants reffering to BtState
-enum
-{
- BT_ARM_OFF,
- BT_ARM_CMD_MODE,
- BT_ARM_DATA_MODE,
-};
-
-//Constant reffering to BtStateStatus
-#define BT_BRICK_VISIBILITY 0x01
-#define BT_BRICK_PORT_OPEN 0x02
-#define BT_CONNECTION_0_ENABLE 0x10
-#define BT_CONNECTION_1_ENABLE 0x20
-#define BT_CONNECTION_2_ENABLE 0x40
-#define BT_CONNECTION_3_ENABLE 0x80
-
-//Constant reffering to BtHwStatus
-#define BT_ENABLE 0x00
-#define BT_DISABLE 0x01
-
-// Constants reffering to HsFlags
-enum
-{
- HS_UPDATE = 1
-};
-
-// Constants reffering to HsState
-enum
-{
- HS_INITIALISE = 1,
- HS_INIT_RECEIVER,
- HS_SEND_DATA,
- HS_DISABLE
-};
-
-//Constants refering to DeviceStatus within DeviceTable
-enum
-{
- BT_DEVICE_EMPTY = 0x00,
- BT_DEVICE_UNKNOWN = 0x01,
- BT_DEVICE_KNOWN = 0x02,
- BT_DEVICE_NAME = 0x40,
- BT_DEVICE_AWAY = 0x80
-};
-
-/* Interface between command other modules */
-enum
-{
- SENDFILE,
- SEARCH,
- STOPSEARCH,
- CONNECT,
- DISCONNECT,
- DISCONNECTALL,
- REMOVEDEVICE,
- VISIBILITY,
- SETCMDMODE,
- OPENSTREAM,
- SENDDATA,
- FACTORYRESET,
- BTON,
- BTOFF,
- SETBTNAME,
- EXTREAD,
- PINREQ,
- CONNECTREQ,
- CONNECTBYNAME
-};
-
-
-enum
-{
- LR_SUCCESS = 0x50,
- LR_COULD_NOT_SAVE,
- LR_STORE_IS_FULL,
- LR_ENTRY_REMOVED,
- LR_UNKOWN_ADDR
-};
-
-enum
-{
- USB_CMD_READY = 0x01,
- BT_CMD_READY = 0x02,
- HS_CMD_READY = 0x04
-};
-
-typedef struct
-{
- UBYTE Buf[SIZE_OF_USBBUF];
- UBYTE InPtr;
- UBYTE OutPtr;
- UBYTE Spare1;
- UBYTE Spare2;
-}USBBUF;
-
-typedef struct
-{
- UBYTE Buf[SIZE_OF_HSBUF];
- UBYTE InPtr;
- UBYTE OutPtr;
- UBYTE Spare1;
- UBYTE Spare2;
-}HSBUF;
-
-typedef struct
-{
- UBYTE Buf[SIZE_OF_BTBUF];
- UBYTE InPtr;
- UBYTE OutPtr;
- UBYTE Spare1;
- UBYTE Spare2;
-}BTBUF;
-
-typedef struct
-{
- UBYTE Name[SIZE_OF_BT_NAME];
- UBYTE ClassOfDevice[SIZE_OF_CLASS_OF_DEVICE];
- UBYTE BdAddr[SIZE_OF_BDADDR];
- UBYTE DeviceStatus;
- UBYTE Spare1;
- UBYTE Spare2;
- UBYTE Spare3;
-}BDDEVICETABLE;
-
-typedef struct
-{
- UBYTE Name[SIZE_OF_BT_NAME];
- UBYTE ClassOfDevice[SIZE_OF_CLASS_OF_DEVICE];
- UBYTE PinCode[16];
- UBYTE BdAddr[SIZE_OF_BDADDR];
- UBYTE HandleNr;
- UBYTE StreamStatus;
- UBYTE LinkQuality;
- UBYTE Spare;
-}BDCONNECTTABLE;
-
-typedef struct
-{
- UBYTE Name[SIZE_OF_BT_NAME];
- UBYTE BluecoreVersion[2];
- UBYTE BdAddr[SIZE_OF_BDADDR];
- UBYTE BtStateStatus;
- UBYTE BtHwStatus;
- UBYTE TimeOutValue;
- UBYTE Spare1;
- UBYTE Spare2;
- UBYTE Spare3;
-}BRICKDATA;
-
-typedef struct
-{
- UWORD (*pFunc)(UBYTE, UBYTE, UBYTE, UBYTE, UBYTE*, UWORD*);
- void (*pFunc2)(UBYTE*);
-
- // BT related entries
- BDDEVICETABLE BtDeviceTable[SIZE_OF_BT_DEVICE_TABLE];
- BDCONNECTTABLE BtConnectTable[SIZE_OF_BT_CONNECT_TABLE];
-
- //General brick data
- BRICKDATA BrickData;
-
- BTBUF BtInBuf;
- BTBUF BtOutBuf;
-
- // HI Speed related entries
- HSBUF HsInBuf;
- HSBUF HsOutBuf;
-
- // USB related entries
- USBBUF UsbInBuf;
- USBBUF UsbOutBuf;
- USBBUF UsbPollBuf;
-
- UBYTE BtDeviceCnt;
- UBYTE BtDeviceNameCnt;
-
- UBYTE HsFlags;
- UBYTE HsSpeed;
- UBYTE HsState;
-
- UBYTE UsbState;
-
-}IOMAPCOMM;
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_display.c b/AT91SAM7S256/Source/c_display.c
deleted file mode 100644
index 6b15495..0000000
--- a/AT91SAM7S256/Source/c_display.c
+++ /dev/null
@@ -1,849 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author: Dkflebun $
-//
-// Revision date $Date: 9-06-08 13:35 $
-//
-// Filename $Workfile:: c_display.c $
-//
-// Version $Revision: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_disp $
-//
-// Platform C
-//
-
-#include <string.h>
-#include "stdconst.h"
-#include "modules.h"
-#include "c_display.iom"
-#include "c_display.h"
-#include "d_display.h"
-
-
-static IOMAPDISPLAY IOMapDisplay;
-static VARSDISPLAY VarsDisplay;
-
-const HEADER cDisplay =
-{
- 0x000A0001L,
- "Display",
- cDisplayInit,
- cDisplayCtrl,
- cDisplayExit,
- (void *)&IOMapDisplay,
- (void *)&VarsDisplay,
- (UWORD)sizeof(IOMapDisplay),
- (UWORD)sizeof(VarsDisplay),
- 0x0000 //Code size - not used so far
-};
-
-
-const SCREEN_CORDINATE SCREEN_CORDINATES[SCREENS] =
-{
- { 0, 0,DISPLAY_WIDTH,DISPLAY_HEIGHT }, // Background
- { 0, 8,DISPLAY_WIDTH,DISPLAY_HEIGHT - 8 }, // Large
- { 0, 8,DISPLAY_WIDTH,24 } // Small
-};
-
-const SCREEN_CORDINATE SELECT_FRAME_CORDINATES =
-{
- 38,41,24,24
-};
-
-
-const SCREEN_CORDINATE MENUICON_CORDINATES[MENUICONS] =
-{
- { DISPLAY_MENUICONS_X_OFFS,DISPLAY_MENUICONS_Y,24,24 }, // Left
- { DISPLAY_MENUICONS_X_OFFS + DISPLAY_MENUICONS_X_DIFF,DISPLAY_MENUICONS_Y,24,24 }, // Center
- { DISPLAY_MENUICONS_X_OFFS + DISPLAY_MENUICONS_X_DIFF * 2,DISPLAY_MENUICONS_Y,24,24 },// Right
-};
-
-const SCREEN_CORDINATE STATUSICON_CORDINATES[STATUSICONS] =
-{
- { 0, 0,12, 8 }, // Bluetooth
- { 12, 0,12, 8 }, // Usb
- { 76, 0,12, 8 }, // Vm
- { 88, 0,12, 8 } // Battery
-};
-
-
-const SCREEN_CORDINATE STEPICON_CORDINATES[STEPICONS] =
-{
- { 11,16,11,16 }, // Step 1
- { 28,16,11,16 }, // Step 2
- { 45,16,11,16 }, // Step 3
- { 62,16,11,16 }, // Step 4
- { 79,16,11,16 } // Step 5
-};
-
-
-void cDisplaySetPixel(UBYTE X,UBYTE Y)
-{
- if ((X < DISPLAY_WIDTH) && (Y < DISPLAY_HEIGHT))
- {
- IOMapDisplay.Display[(Y / 8) * DISPLAY_WIDTH + X] |= (1 << (Y % 8));
- }
-}
-
-
-void cDisplayClrPixel(UBYTE X,UBYTE Y)
-{
- if ((X < DISPLAY_WIDTH) && (Y < DISPLAY_HEIGHT))
- {
- IOMapDisplay.Display[(Y / 8) * DISPLAY_WIDTH + X] &= ~(1 << (Y % 8));
- }
-}
-
-
-void cDisplayChar(FONT *pFont,UBYTE On,UBYTE X,UBYTE Y,UBYTE Char)
-{
- UBYTE *pSource;
- UBYTE FontWidth;
- UBYTE FontHeight;
- UBYTE Items;
- UBYTE Item;
- UBYTE TmpY;
-
-
- Items = pFont->ItemsX * pFont->ItemsY;
- Item = Char - ' ';
- if (Item < Items)
- {
- FontWidth = pFont->ItemPixelsX;
- pSource = (UBYTE*)&pFont->Data[Item * FontWidth];
- while (FontWidth--)
- {
- TmpY = 0;
- FontHeight = pFont->ItemPixelsY;
- while (FontHeight--)
- {
- if (On == TRUE)
- {
- if (((*pSource) & (1 << TmpY)))
- {
- cDisplaySetPixel(X,Y + TmpY);
- }
- else
- {
- cDisplayClrPixel(X,Y + TmpY);
- }
- }
- else
- {
- if (((*pSource) & (1 << TmpY)))
- {
- cDisplayClrPixel(X,Y + TmpY);
- }
- else
- {
- cDisplaySetPixel(X,Y + TmpY);
- }
- }
- TmpY++;
- }
- X++;
- pSource++;
- }
- }
-}
-
-
-void cDisplayString(FONT *pFont,UBYTE X,UBYTE Y,UBYTE *pString)
-{
- UBYTE *pSource;
- UBYTE *pDestination;
- UBYTE FontWidth;
- UBYTE Line;
- UBYTE Items;
- UBYTE Item;
-
-
- Line = (Y & 0xF8) / 8;
- Items = pFont->ItemsX * pFont->ItemsY;
- pDestination = (UBYTE*)&IOMapDisplay.Display[Line * DISPLAY_WIDTH + X];
-
- while (*pString)
- {
- Item = *pString - ' ';
- if (Item < Items)
- {
- FontWidth = pFont->ItemPixelsX;
- pSource = (UBYTE*)&pFont->Data[Item * FontWidth];
- while (FontWidth--)
- {
- *pDestination = *pSource;
- pDestination++;
- pSource++;
- }
- }
- pString++;
- }
-}
-
-
-void cDisplayUpdateScreen(SCREEN_CORDINATE *pCord,BMPMAP *pBitmap)
-{
- UBYTE *pSource;
- UBYTE *pDestination;
- UBYTE Line;
- UBYTE Lines;
-
- if (pBitmap)
- {
- if ((((pBitmap->StartY + pCord->StartY) & 0x07) == 0) && ((pBitmap->PixelsY & 0x07) == 0))
- {
- pSource = pBitmap->Data;
- Line = (pBitmap->StartY + pCord->StartY) / 8;
- Lines = Line + pBitmap->PixelsY / 8;
- while (Line < Lines)
- {
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + pBitmap->StartX + pCord->StartX];
- memcpy(pDestination,pSource,(size_t)pBitmap->PixelsX);
- pSource += pBitmap->PixelsX;
- Line++;
- }
- }
- }
-}
-
-
-void cDisplayCenterString(FONT *pFont,UBYTE *pString,UBYTE Line)
-{
- UWORD Chars;
- UBYTE Column;
-
- if (pString)
- {
- Chars = 0;
- while (pString[Chars])
- {
- Chars++;
- }
- Column = (DISPLAY_WIDTH - Chars * pFont->ItemPixelsX) / 2;
- cDisplayString(pFont,Column,Line * 8,pString);
- }
-}
-
-
-void cDisplayUpdateMenuIcon(UBYTE *pIcon,SCREEN_CORDINATE *pCord)
-{
- UBYTE *pDestination;
- UBYTE Line;
- UBYTE Column;
- UBYTE Lines;
- UBYTE Columns;
-
- if (((pCord->StartY & 0x07) == 0) && ((pCord->PixelsY & 0x07) == 0))
- {
- Line = pCord->StartY / 8;
- Lines = Line + pCord->PixelsY / 8;
- Columns = pCord->StartX + pCord->PixelsX;
- if (pIcon != NULL)
- {
- while (Line < Lines)
- {
- Column = pCord->StartX;
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + Column];
-
- while (Column < Columns)
- {
- *pDestination |= *pIcon;
- pIcon++;
- pDestination++;
- Column++;
- }
- Line++;
- }
- }
- else
- {
- while (Line < Lines)
- {
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + pCord->StartX];
- memset(pDestination,0,(size_t)pCord->PixelsX);
- Line++;
- }
- }
- }
-}
-
-
-void cDisplayUpdateIcon(ICON *pIcons,UBYTE Index,SCREEN_CORDINATE *pCord)
-{
- UBYTE *pSource;
- UBYTE *pDestination;
- UBYTE Line;
- UBYTE Lines;
-
- if (pIcons)
- {
- if ((Index > 0) && (Index <= (pIcons->ItemsX * pIcons->ItemsY)))
- {
- Index--;
- if (((pCord->StartY & 0x07) == 0) && ((pCord->PixelsY & 0x07) == 0))
- {
- Line = pCord->StartY / 8;
- Lines = Line + pCord->PixelsY / 8;
- pSource = &pIcons->Data[((Index / pIcons->ItemsX) * pIcons->ItemsX * pIcons->ItemPixelsX * pIcons->ItemPixelsY / 8) + ((Index % pIcons->ItemsX) * pIcons->ItemPixelsX)];
- while (Line < Lines)
- {
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + pCord->StartX];
- memcpy(pDestination,pSource,(size_t)pCord->PixelsX);
- pSource += (pIcons->ItemPixelsX * pIcons->ItemsX);
- Line++;
- }
- }
- }
- else
- {
- if (((pCord->StartY & 0x07) == 0) && ((pCord->PixelsY & 0x07) == 0))
- {
- Line = pCord->StartY / 8;
- Lines = Line + pCord->PixelsY / 8;
- while (Line < Lines)
- {
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + pCord->StartX];
- memset(pDestination,0,(size_t)pCord->PixelsX);
- Line++;
- }
- }
- }
- }
-}
-
-
-void cDisplayLineX(UBYTE X1,UBYTE X2,UBYTE Y)
-{
- UBYTE X;
- UBYTE M;
-
- M = 1 << (Y % 8);
- Y >>= 3;
- for (X = X1;X < X2;X++)
- {
- IOMapDisplay.Display[Y * DISPLAY_WIDTH + X] |= M;
- }
-}
-
-void cDisplayLineY(UBYTE X,UBYTE Y1,UBYTE Y2)
-{
- UBYTE Y;
-
- for (Y = Y1;Y < Y2;Y++)
- {
- IOMapDisplay.Display[(Y / 8) * DISPLAY_WIDTH + X] |= (1 << (Y % 8));
- }
-}
-
-void cDisplayFrame(SCREEN_CORDINATE *pCord)
-{
- cDisplayLineX(pCord->StartX,pCord->StartX + pCord->PixelsX - 1,pCord->StartY);
- cDisplayLineY(pCord->StartX,pCord->StartY,pCord->StartY + pCord->PixelsY - 1);
- cDisplayLineY(pCord->StartX + pCord->PixelsX - 1,pCord->StartY,pCord->StartY + pCord->PixelsY - 1);
-}
-
-
-void cDisplayEraseLine(UBYTE Line)
-{
- memset(&IOMapDisplay.Display[Line * DISPLAY_WIDTH], 0x00, DISPLAY_WIDTH);
-}
-
-
-void cDisplayErase(void)
-{
- memset(&IOMapDisplay.Display[0], 0x00, DISPLAY_WIDTH*DISPLAY_HEIGHT/8);
-}
-
-
-void cDisplayEraseScreen(SCREEN_CORDINATE *pCord)
-{
- UBYTE *pDestination;
- UBYTE Line;
- UBYTE Lines;
-
- if (((pCord->StartY & 0x07) == 0) && ((pCord->PixelsY & 0x07) == 0))
- {
- Line = pCord->StartY / 8;
- Lines = Line + pCord->PixelsY / 8;
-
- while (Line < Lines)
- {
- pDestination = &IOMapDisplay.Display[Line * DISPLAY_WIDTH + pCord->StartX];
- memset(pDestination,0,(size_t)pCord->PixelsX);
- Line++;
- }
- }
-}
-
-
-void cDisplayDraw(UBYTE Cmd,UBYTE On,UBYTE X1,UBYTE Y1,UBYTE X2,UBYTE Y2)
-{
- switch (Cmd)
- {
- case DISPLAY_ERASE_ALL :
- {
- cDisplayErase();
- }
- break;
-
- case DISPLAY_PIXEL :
- {
- if (On == TRUE)
- {
- cDisplaySetPixel(X1,Y1);
- }
- else
- {
- cDisplayClrPixel(X1,Y1);
- }
- }
- break;
-
- case DISPLAY_HORISONTAL_LINE :
- {
- if (On == TRUE)
- {
- if (X1 > X2)
- {
- cDisplayLineX(X2,X1,Y1);
- }
- else
- {
- cDisplayLineX(X1,X2,Y1);
- }
- }
- }
- break;
-
- case DISPLAY_VERTICAL_LINE :
- {
- if (On == TRUE)
- {
- if (Y1 > Y2)
- {
- cDisplayLineY(X1,Y2,Y1);
- }
- else
- {
- cDisplayLineY(X1,Y1,Y2);
- }
- }
- }
- break;
-
- case DISPLAY_CHAR :
- {
- cDisplayChar(IOMapDisplay.pFont,On,X1,Y1,X2);
- }
- break;
-
- }
-}
-
-
-void cDisplayInit(void* pHeader)
-{
- dDisplayInit();
- IOMapDisplay.Display = (UBYTE*)IOMapDisplay.Normal;
- IOMapDisplay.pFunc = &cDisplayDraw;
- IOMapDisplay.EraseMask = 0;
- IOMapDisplay.UpdateMask = 0;
- IOMapDisplay.TextLinesCenterFlags = 0;
- IOMapDisplay.Flags = DISPLAY_REFRESH | DISPLAY_ON;
- VarsDisplay.ErasePointer = 0;
- VarsDisplay.UpdatePointer = 0;
-}
-
-
-void cDisplayCtrl(void)
-{
- ULONG TmpMask;
- UBYTE Tmp;
- SCREEN_CORDINATE Cordinate;
-
- if (!(IOMapDisplay.Flags & DISPLAY_POPUP))
- {
- if (IOMapDisplay.Display == (UBYTE*)IOMapDisplay.Popup)
- {
- IOMapDisplay.Display = VarsDisplay.DisplaySave;
- }
- }
- else
- {
- if (IOMapDisplay.Display != (UBYTE*)IOMapDisplay.Popup)
- {
- VarsDisplay.DisplaySave = IOMapDisplay.Display;
- IOMapDisplay.Display = (UBYTE*)IOMapDisplay.Popup;
- }
- }
-
- if (IOMapDisplay.EraseMask)
- {
-
- VarsDisplay.ErasePointer = 31;
- while ((VarsDisplay.ErasePointer) && (!(IOMapDisplay.EraseMask & (0x00000001 << VarsDisplay.ErasePointer))))
- {
- VarsDisplay.ErasePointer--;
- }
-
- TmpMask = IOMapDisplay.EraseMask & (1 << VarsDisplay.ErasePointer);
- if ((TmpMask & TEXTLINE_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & TEXTLINE_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < TEXTLINES)
- {
- cDisplayEraseLine(Tmp);
- }
- }
- else
- {
- if ((TmpMask & MENUICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & MENUICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < MENUICONS)
- {
- cDisplayEraseScreen((SCREEN_CORDINATE*)&MENUICON_CORDINATES[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & STATUSICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & STATUSICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < STATUSICONS)
- {
- cDisplayEraseScreen((SCREEN_CORDINATE*)&STATUSICON_CORDINATES[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & SCREEN_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & SCREEN_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < SCREENS)
- {
- cDisplayEraseScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[Tmp]);
- }
- if ((TmpMask & SCREEN_BIT(SCREEN_LARGE)))
- {
- if ((IOMapDisplay.UpdateMask & SPECIAL_BIT(TOPLINE)))
- {
- cDisplayLineX(0,DISPLAY_WIDTH - 1,9);
- IOMapDisplay.UpdateMask &= ~SPECIAL_BIT(TOPLINE);
- }
- }
- }
- else
- {
- if ((TmpMask & BITMAP_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & BITMAP_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < BITMAPS)
- {
- Cordinate.StartX = VarsDisplay.pOldBitmaps[Tmp]->StartX;
- Cordinate.StartY = VarsDisplay.pOldBitmaps[Tmp]->StartY;
- Cordinate.PixelsX = VarsDisplay.pOldBitmaps[Tmp]->PixelsX;
- Cordinate.PixelsY = VarsDisplay.pOldBitmaps[Tmp]->PixelsY;
- cDisplayEraseScreen(&Cordinate);
- }
- }
- else
- {
- if ((TmpMask & SPECIAL_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & SPECIAL_BIT(Tmp)))
- {
- Tmp++;
- }
- switch (Tmp)
- {
- case FRAME_SELECT :
- {
- }
- break;
-
- case MENUTEXT :
- {
- cDisplayEraseLine(TEXTLINE_5);
- }
- break;
-
- case STATUSTEXT :
- {
- cDisplayEraseLine(TEXTLINE_1);
- }
- break;
-
- case STEPLINE :
- {
- }
- break;
-
- case TOPLINE :
- {
- }
- break;
-
- }
- }
- else
- {
- if ((TmpMask & STEPICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & STEPICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < STEPICONS)
- {
- cDisplayEraseScreen((SCREEN_CORDINATE*)&STEPICON_CORDINATES[Tmp]);
- }
- }
- }
- }
- }
- }
- }
- }
- IOMapDisplay.EraseMask &= ~TmpMask;
-
- if (++VarsDisplay.ErasePointer >= 32)
- {
- VarsDisplay.ErasePointer = 0;
- }
- VarsDisplay.UpdatePointer = 0;
- }
- else
- {
- if (IOMapDisplay.UpdateMask)
- {
-
- VarsDisplay.UpdatePointer = 31;
- while ((VarsDisplay.UpdatePointer) && (!(IOMapDisplay.UpdateMask & (0x00000001 << VarsDisplay.UpdatePointer))))
- {
- VarsDisplay.UpdatePointer--;
- }
- TmpMask = IOMapDisplay.UpdateMask & (0x00000001 << VarsDisplay.UpdatePointer);
-
- if ((TmpMask & TEXTLINE_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & TEXTLINE_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < TEXTLINES)
- {
- if ((IOMapDisplay.TextLinesCenterFlags & (UBYTE)TmpMask))
- {
- cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pTextLines[Tmp],TEXTLINE_1 + Tmp);
- }
- else
- {
- cDisplayString(IOMapDisplay.pFont,0,Tmp * 8,IOMapDisplay.pTextLines[Tmp]);
- }
- }
- }
- else
- {
- if ((TmpMask & MENUICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & MENUICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < MENUICONS)
- {
- cDisplayUpdateMenuIcon(IOMapDisplay.pMenuIcons[Tmp],(SCREEN_CORDINATE*)&MENUICON_CORDINATES[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & STATUSICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & STATUSICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < STATUSICONS)
- {
- cDisplayUpdateIcon(IOMapDisplay.pStatusIcons,IOMapDisplay.StatusIcons[Tmp],(SCREEN_CORDINATE*)&STATUSICON_CORDINATES[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & SCREEN_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & SCREEN_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < SCREENS)
- {
- cDisplayUpdateScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[Tmp],IOMapDisplay.pScreens[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & BITMAP_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & BITMAP_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < BITMAPS)
- {
- VarsDisplay.pOldBitmaps[Tmp] = IOMapDisplay.pBitmaps[Tmp];
- cDisplayUpdateScreen((SCREEN_CORDINATE*)&SCREEN_CORDINATES[SCREEN_BACKGROUND],IOMapDisplay.pBitmaps[Tmp]);
- }
- }
- else
- {
- if ((TmpMask & SPECIAL_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & SPECIAL_BIT(Tmp)))
- {
- Tmp++;
- }
- switch (Tmp)
- {
- case FRAME_SELECT :
- {
- cDisplayFrame((SCREEN_CORDINATE*)&SELECT_FRAME_CORDINATES);
- }
- break;
-
- case MENUTEXT :
- {
- cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pMenuText,TEXTLINE_5);
- }
- break;
-
- case STATUSTEXT :
- {
- cDisplayCenterString(IOMapDisplay.pFont,IOMapDisplay.pStatusText,TEXTLINE_1);
- }
- break;
-
- case STEPLINE :
- {
- cDisplayLineX(22,28,20);
- cDisplayLineX(39,45,20);
- cDisplayLineX(56,62,20);
- cDisplayLineX(73,79,20);
- }
- break;
-
- case TOPLINE :
- {
- cDisplayLineX(0,DISPLAY_WIDTH - 1,9);
- }
- break;
-
- }
- }
- else
- {
- if ((TmpMask & STEPICON_BITS))
- {
- Tmp = 0;
- while (!(TmpMask & STEPICON_BIT(Tmp)))
- {
- Tmp++;
- }
- if (Tmp < STEPICONS)
- {
- cDisplayUpdateIcon(IOMapDisplay.pStepIcons,IOMapDisplay.StepIcons[Tmp],(SCREEN_CORDINATE*)&STEPICON_CORDINATES[Tmp]);
- }
- }
- }
- }
- }
- }
- }
- }
- IOMapDisplay.TextLinesCenterFlags &= (UBYTE)(~TmpMask);
- IOMapDisplay.UpdateMask &= ~TmpMask;
- if (++VarsDisplay.UpdatePointer >= 32)
- {
- VarsDisplay.UpdatePointer = 0;
- }
- }
- VarsDisplay.ErasePointer = 0;
- }
- if (!(IOMapDisplay.Flags & DISPLAY_POPUP))
- {
- if (!(IOMapDisplay.Flags & DISPLAY_REFRESH_DISABLED))
- {
- if ((IOMapDisplay.Flags & DISPLAY_ON))
- {
- dDisplayOn(TRUE);
- }
- else
- {
- dDisplayOn(FALSE);
- }
- if (!(dDisplayUpdate(DISPLAY_HEIGHT,DISPLAY_WIDTH,(UBYTE*)IOMapDisplay.Normal)))
- {
- IOMapDisplay.Flags &= ~DISPLAY_BUSY;
- if (!(IOMapDisplay.Flags & DISPLAY_REFRESH))
- {
- IOMapDisplay.Flags |= DISPLAY_REFRESH_DISABLED;
- }
- }
- else
- {
- IOMapDisplay.Flags |= DISPLAY_BUSY;
- }
- }
- else
- {
- if ((IOMapDisplay.Flags & DISPLAY_REFRESH))
- {
- IOMapDisplay.Flags &= ~DISPLAY_REFRESH_DISABLED;
- }
- }
- }
- else
- {
- dDisplayUpdate(DISPLAY_HEIGHT,DISPLAY_WIDTH,(UBYTE*)IOMapDisplay.Popup);
- }
-}
-
-
-void cDisplayExit(void)
-{
- dDisplayExit();
-}
-
diff --git a/AT91SAM7S256/Source/c_display.h b/AT91SAM7S256/Source/c_display.h
deleted file mode 100644
index 56b6744..0000000
--- a/AT91SAM7S256/Source/c_display.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_display.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_disp $
-//
-// Platform C
-//
-
-#ifndef C_DISPLAY
-#define C_DISPLAY
-
-#ifndef INCLUDE_OS
-
-typedef struct
-{
- UBYTE *DisplaySave;
- BMPMAP *pOldBitmaps[BITMAPS];
- UBYTE ErasePointer;
- UBYTE UpdatePointer;
-}VARSDISPLAY;
-
-#endif
-
-
-void cDisplayInit(void* pHeader);
-void cDisplayCtrl(void);
-void cDisplayExit(void);
-
-
-extern const HEADER cDisplay;
-
-
-#endif
diff --git a/AT91SAM7S256/Source/c_display.iom b/AT91SAM7S256/Source/c_display.iom
deleted file mode 100644
index 2e1ab74..0000000
--- a/AT91SAM7S256/Source/c_display.iom
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_display.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_disp $
-//
-// Platform C
-//
-
-#ifndef CDISPLAY_IOM
-#define CDISPLAY_IOM
-
-#define pMapDisplay ((IOMAPDISPLAY*)(pHeaders[ENTRY_DISPLAY]->pIOMap))
-
-// Constants related to simple draw entry (x = dont care)
-enum
-{
- DISPLAY_ERASE_ALL = 0x00, // W - erase entire screen (CMD,x,x,x,x,x)
- DISPLAY_PIXEL = 0x01, // W - set pixel (on/off) (CMD,TRUE/FALSE,X,Y,x,x)
- DISPLAY_HORISONTAL_LINE = 0x02, // W - draw horisontal line (CMD,TRUE,X1,Y1,X2,x)
- DISPLAY_VERTICAL_LINE = 0x03, // W - draw vertical line (CMD,TRUE,X1,Y1,x,Y2)
- DISPLAY_CHAR = 0x04 // W - draw char (actual font) (CMD,TRUE,X1,Y1,Char,x)
-};
-
-// Constants related to Flags
-enum
-{
- DISPLAY_ON = 0x01, // W - Display on
- DISPLAY_REFRESH = 0x02, // W - Enable refresh
- DISPLAY_POPUP = 0x08, // W - Use popup display memory
- DISPLAY_REFRESH_DISABLED = 0x40, // R - Refresh disabled
- DISPLAY_BUSY = 0x80 // R - Refresh in progress
-};
-
-
-#define DISPLAY_HEIGHT 64 // Y pixels
-#define DISPLAY_WIDTH 100 // X pixels
-
-#define DISPLAY_MENUICONS_Y 40
-#define DISPLAY_MENUICONS_X_OFFS 7
-#define DISPLAY_MENUICONS_X_DIFF 31
-
-#define DISPLAY_IDLE ((pMapDisplay->EraseMask == 0) && (pMapDisplay->UpdateMask == 0))
-
-enum TEXTLINE_NO // Used in macro "TEXTLINE_BIT"
-{
- TEXTLINE_1, // Upper most line
- TEXTLINE_2, //
- TEXTLINE_3, //
- TEXTLINE_4, //
- TEXTLINE_5, //
- TEXTLINE_6, //
- TEXTLINE_7, //
- TEXTLINE_8, // Buttom line
- TEXTLINES
-};
-
-enum MENUICON_NO // Used in macro "MENUICON_BIT"
-{
- MENUICON_LEFT, // Left icon
- MENUICON_CENTER, // Center icon
- MENUICON_RIGHT, // Right icon
- MENUICONS
-};
-
-enum SPECIAL_NO // Used in macro "SPECIAL_BIT"
-{
- FRAME_SELECT, // Center icon select frame
- STATUSTEXT, // Status text (BT name)
- MENUTEXT, // Center icon text
- STEPLINE, // Step collection lines
- TOPLINE, // Top status underline
- SPECIALS
-};
-
-enum STATUSICON_NO // Used in macro "STATUSICON_BIT"
-{
- STATUSICON_BLUETOOTH, // BlueTooth status icon collection
- STATUSICON_USB, // USB status icon collection
- STATUSICON_VM, // VM status icon collection
- STATUSICON_BATTERY, // Battery status icon collection
- STATUSICONS
-};
-
-enum SCREEN_NO // Used in macro "SCREEN_BIT"
-{
- SCREEN_BACKGROUND, // Entire screen
- SCREEN_LARGE, // Entire screen except status line
- SCREEN_SMALL, // Screen between menu icons and status line
- SCREENS
-};
-
-enum BITMAP_NO // Used in macro "BITMAP_BIT"
-{
- BITMAP_1, // Bitmap 1
- BITMAP_2, // Bitmap 2
- BITMAP_3, // Bitmap 3
- BITMAP_4, // Bitmap 4
- BITMAPS
-};
-
-enum STEP_NO // Used in macro "STEPICON_BIT"
-{
- STEPICON_1, // Left most step icon
- STEPICON_2, //
- STEPICON_3, //
- STEPICON_4, //
- STEPICON_5, // Right most step icon
- STEPICONS
-};
-
-#define SCREEN_BITS ((ULONG)0xE0000000) // Executed as 1.
-#define STEPICON_BITS ((ULONG)0x1F000000) // Executed as 2.
-#define BITMAP_BITS ((ULONG)0x00F00000) // Executed as 3.
-#define MENUICON_BITS ((ULONG)0x000E0000) // Executed as 4.
-#define STATUSICON_BITS ((ULONG)0x0001E000) // Executed as 5.
-#define SPECIAL_BITS ((ULONG)0x00001F00) // Executed as 6.
-#define TEXTLINE_BITS ((ULONG)0x000000FF) // Executed as 7.
-
-#define SCREEN_BIT(No) ((ULONG)0x20000000 << (No))
-#define STEPICON_BIT(No) ((ULONG)0x01000000 << (No))
-#define BITMAP_BIT(No) ((ULONG)0x00100000 << (No))
-#define MENUICON_BIT(No) ((ULONG)0x00020000 << (No))
-#define STATUSICON_BIT(No) ((ULONG)0x00002000 << (No))
-#define SPECIAL_BIT(No) ((ULONG)0x00000100 << (No))
-#define TEXTLINE_BIT(No) ((ULONG)0x00000001 << (No))
-
-
-typedef struct
-{
- void (*pFunc)(UBYTE,UBYTE,UBYTE,UBYTE,UBYTE,UBYTE); // Simple draw entry
-
- ULONG EraseMask; // Section erase mask (executed first)
- ULONG UpdateMask; // Section update mask (executed next)
-
- FONT *pFont; // Pointer to font file
- UBYTE *pTextLines[TEXTLINES]; // Pointer to text strings
-
- UBYTE *pStatusText; // Pointer to status text string
- ICON *pStatusIcons; // Pointer to status icon collection file
-
- BMPMAP *pScreens[SCREENS]; // Pointer to screen bitmap file
- BMPMAP *pBitmaps[BITMAPS]; // Pointer to free bitmap files
-
- UBYTE *pMenuText; // Pointer to menu icon text (NULL == none)
- UBYTE *pMenuIcons[MENUICONS]; // Pointer to menu icon images (NULL == none)
-
- ICON *pStepIcons; // Pointer to step icon collection file
-
- UBYTE *Display; // Display content copied to physical display every 17 mS
-
- UBYTE StatusIcons[STATUSICONS]; // Index in status icon collection file (index = 0 -> none)
-
- UBYTE StepIcons[STEPICONS]; // Index in step icon collection file (index = 0 -> none)
-
- UBYTE Flags; // Update flags enumerated above
-
- UBYTE TextLinesCenterFlags; // Mask to center TextLines
-
- UBYTE Normal[DISPLAY_HEIGHT / 8][DISPLAY_WIDTH]; // Raw display memory for normal screen
- UBYTE Popup[DISPLAY_HEIGHT / 8][DISPLAY_WIDTH]; // Raw display memory for popup screen
-}
-IOMAPDISPLAY;
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_input.c b/AT91SAM7S256/Source/c_input.c
deleted file mode 100644
index 2cb9be1..0000000
--- a/AT91SAM7S256/Source/c_input.c
+++ /dev/null
@@ -1,1335 +0,0 @@
-
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 3/21/09 10:31a $
-//
-// Filename $Workfile:: c_input.c $
-//
-// Version $Revision:: 39 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_inpu $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_input.h"
-#include "d_input.h"
-#include "c_output.iom"
-#include "c_loader.iom"
-#include <string.h>
-
-
-#define INVALID_RELOAD_NORMAL 20
-#define INVALID_RELOAD_SOUND 300
-#define INVALID_RELOAD_COLOR 400
-
-#define ROT_SLOW_SPEED 30
-#define ROT_OV_SAMPLING 7
-
-#define VCC_SENSOR 5000L
-#define VCC_SENSOR_DIODE 4300L
-#define AD_MAX 1023L
-
-#define REFLECTIONSENSORMIN (1906L/(VCC_SENSOR/AD_MAX))
-#define REFLECTIONSENSORMAX ((AD_MAX * 4398L)/VCC_SENSOR)
-#define REFLECTIONSENSORPCTDYN (UBYTE)(((REFLECTIONSENSORMAX - REFLECTIONSENSORMIN) * 100L)/AD_MAX)
-
-#define NEWLIGHTSENSORMIN (800L/(VCC_SENSOR/AD_MAX))
-#define NEWLIGHTSENSORMAX ((AD_MAX * 4400L)/VCC_SENSOR)
-#define NEWLIGHTSENSORPCTDYN (UBYTE)(((NEWLIGHTSENSORMAX - NEWLIGHTSENSORMIN) * 100L)/AD_MAX)
-
-#define NEWSOUNDSENSORMIN (650L/(VCC_SENSOR/AD_MAX))
-#define NEWSOUNDSENSORMAX ((AD_MAX * 4980L)/VCC_SENSOR)
-#define NEWSOUNDSENSORPCTDYN (UBYTE)(((NEWSOUNDSENSORMAX - NEWSOUNDSENSORMIN) * 100L)/AD_MAX)
-
-/* Remember this is ARM AD converter - 3,3 VDC as max voltage */
-/* When in color mode background value is substracted => min = 0!!! */
-#define COLORSENSORBGMIN (214/(3300/AD_MAX))
-#define COLORSENSORMIN (1L/(3300/AD_MAX)) /* 1 inserted else div 0 (1L/(120/AD_MAX)) */
-#define COLORSENSORMAX ((AD_MAX * 3300L)/3300)
-#define COLORSENSORPCTDYN (UBYTE)(((COLORSENSORMAX - COLORSENSORMIN) * 100L)/AD_MAX)
-#define COLORSENSORBGPCTDYN (UBYTE)(((COLORSENSORMAX - COLORSENSORBGMIN) * 100L)/AD_MAX)
-
-enum
-{
- POWER = 0x00,
- NO_POWER = 0x01,
- ACTIVE = 0x02,
- ALWAYS_ACTIVE = 0x04,
- DIGI_0_HIGH = 0x08,
- DIGI_1_HIGH = 0x10,
- DIGI_0_IN = 0x20,
- DIGI_1_IN = 0x40,
- CUSTOM_SETUP = 0x80
-};
-
-static IOMAPINPUT IOMapInput;
-static VARSINPUT VarsInput;
-
-const HEADER cInput =
-{
- 0x00030001L,
- "Input",
- cInputInit,
- cInputCtrl,
- cInputExit,
- (void *)&IOMapInput,
- (void *)&VarsInput,
- (UWORD)sizeof(IOMapInput),
- (UWORD)sizeof(VarsInput),
- 0x0000 //Code size - not used so far
-};
-
-void cInputCalcFullScale(UWORD *pRawVal, UWORD ZeroPointOffset, UBYTE PctFullScale, UBYTE InvState);
-void cInputCalcSensorValue(UWORD NewSensorRaw, UWORD *pOldSensorRaw, SWORD *pSensorValue,
- UBYTE *pBoolean, UBYTE *pDebounce, UBYTE *pSampleCnt,
- UBYTE *LastAngle, UBYTE *pEdgeCnt, UBYTE Slope,
- UBYTE Mode);
-void cInputSetupType(UBYTE Port, UBYTE *pType, UBYTE OldType);
-void cInputSetupCustomSensor(UBYTE Port);
-void cInputCalcSensorValues(UBYTE No);
-UBYTE cInputInitColorSensor(UBYTE Port, UBYTE *pInitStatus);
-void cInputCalibrateColor(COLORSTRUCT *pC, UWORD *pNewVals);
-SWORD cInputTempConv(UWORD InputVal);
-
-void cInputInit(void* pHeader)
-{
- UBYTE Tmp;
-
- memset(IOMapInput.Colors, 0, sizeof(IOMapInput.Colors));
- memset(VarsInput.VarsColor, 0, sizeof(VarsInput.VarsColor));
-
- /* Init IO map */
- for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++)
- {
- IOMapInput.Inputs[Tmp].SensorType = NO_SENSOR;
- IOMapInput.Inputs[Tmp].SensorMode = RAWMODE;
- IOMapInput.Inputs[Tmp].SensorRaw = 0;
- IOMapInput.Inputs[Tmp].SensorValue = 0;
- IOMapInput.Inputs[Tmp].SensorBoolean = 0;
- IOMapInput.Inputs[Tmp].InvalidData = INVALID_DATA;
- IOMapInput.Inputs[Tmp].DigiPinsDir = 0;
- IOMapInput.Inputs[Tmp].DigiPinsOut = 0;
- IOMapInput.Inputs[Tmp].CustomActiveStatus = CUSTOMINACTIVE;
- IOMapInput.Inputs[Tmp].CustomZeroOffset = 0;
- IOMapInput.Inputs[Tmp].CustomPctFullScale = 0;
- dInputRead0(Tmp, &(IOMapInput.Inputs[Tmp].DigiPinsIn));
- dInputRead1(Tmp, &(IOMapInput.Inputs[Tmp].DigiPinsIn));
-
- VarsInput.EdgeCnt[Tmp] = 0;
- VarsInput.InputDebounce[Tmp] = 0;
- VarsInput.LastAngle[Tmp] = 0;
- VarsInput.SampleCnt[Tmp] = 0;
- VarsInput.InvalidTimer[Tmp] = INVALID_RELOAD_NORMAL;
- VarsInput.OldSensorType[Tmp] = NO_SENSOR;
- }
-
- VarsInput.ColorStatus = 0;
- VarsInput.ColorCnt = 0;
-
- dInputInit();
-}
-
-void cInputCtrl(void)
-{
- UBYTE Tmp;
-
-
- if (VarsInput.ColorStatus)
- {
- switch(VarsInput.ColorCnt)
- {
- case 0:
- {
- VarsInput.ColorCnt = 1;
- dInputSetColorClkInput();
-
- }
- break;
- case 1:
- {
- VarsInput.ColorCnt = 2;
- }
- break;
- case 2:
- {
- VarsInput.ColorCnt = 0;
- dInputGetAllColors(IOMapInput.Colors, VarsInput.ColorStatus);
- }
- break;
- default:
- {
- VarsInput.ColorCnt = 0;
- }
- break;
- }
- }
-
- for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++)
- {
- UBYTE sType = IOMapInput.Inputs[Tmp].SensorType;
- UBYTE *pType = &IOMapInput.Inputs[Tmp].SensorType;
- UBYTE oldType = VarsInput.OldSensorType[Tmp];
-
- if (sType != oldType)
- {
-
- /* Clear all variables for this sensor */
- VarsInput.EdgeCnt[Tmp] = 0;
- VarsInput.InputDebounce[Tmp] = 0;
- VarsInput.LastAngle[Tmp] = 0;
- VarsInput.SampleCnt[Tmp] = 0;
- VarsInput.ColorStatus &= ~(0x01<<Tmp);
- memset(&(VarsInput.VarsColor[Tmp]),0 ,sizeof(VarsInput.VarsColor[Tmp]));
-
- /* Setup the pins for the new sensortype */
- cInputSetupType(Tmp, pType, oldType);
- sType = *pType;
- IOMapInput.Inputs[Tmp].InvalidData = INVALID_DATA;
- VarsInput.OldSensorType[Tmp] = sType;
- }
- else
- {
- if (VarsInput.InvalidTimer[Tmp])
- {
-
- /* A type change has been carried out earlier - waiting for valid data */
- /* The color sensor requires special startup sequence with communication */
- if ((sType == COLORFULL) || (sType == COLORRED) ||
- (sType == COLORGREEN)|| (sType == COLORBLUE) ||
- (sType == COLOREXIT) || (sType == COLORNONE))
- {
- cInputCalcSensorValues(Tmp);
- }
-
- (VarsInput.InvalidTimer[Tmp])--;
- if (0 == VarsInput.InvalidTimer[Tmp])
- {
-
- /* Time elapsed - data are now valid */
- IOMapInput.Inputs[Tmp].InvalidData &= ~INVALID_DATA;
- }
- }
- else
- {
-
- /* The invalid bit could have been set by the VM due to Mode change */
- /* but input module needs to be called once to update the values */
- IOMapInput.Inputs[Tmp].InvalidData &= ~INVALID_DATA;
- }
- }
-
- if (!(INVALID_DATA & (IOMapInput.Inputs[Tmp].InvalidData)))
- {
- cInputCalcSensorValues(Tmp);
- }
- }
-}
-
-
-void cInputCalcSensorValues(UBYTE No)
-{
- UBYTE sType = IOMapInput.Inputs[No].SensorType;
-
- switch(sType)
- {
- case SWITCH:
- case TEMPERATURE:
- case REFLECTION:
- case ANGLE:
- case LIGHT_ACTIVE:
- case LIGHT_INACTIVE:
- case SOUND_DB:
- case SOUND_DBA:
- case CUSTOM:
- {
- UWORD InputVal;
-
- if (sType == CUSTOM) {
- /* Setup and read digital IO */
- cInputSetupCustomSensor(No);
- dInputRead0(No, &(IOMapInput.Inputs[No].DigiPinsIn));
- dInputRead1(No, &(IOMapInput.Inputs[No].DigiPinsIn));
- }
-
- dInputGetRawAd(&InputVal, No);
- IOMapInput.Inputs[No].ADRaw = InputVal;
-
- if (sType == REFLECTION)
- {
- cInputCalcFullScale(&InputVal, REFLECTIONSENSORMIN, REFLECTIONSENSORPCTDYN, TRUE);
- }
- else if (sType == TEMPERATURE)
- {
- if (InputVal < 290)
- InputVal = 290;
- else if (InputVal > 928)
- InputVal = 928;
- InputVal = cInputTempConv(InputVal - 290);
- InputVal = InputVal + 200;
- InputVal = (UWORD)(((SLONG)InputVal * (SLONG)1023)/(SLONG)900);
- }
- else if (sType == LIGHT_ACTIVE || sType == LIGHT_INACTIVE)
- {
- cInputCalcFullScale(&InputVal, NEWLIGHTSENSORMIN, NEWLIGHTSENSORPCTDYN, TRUE);
- }
- else if (sType == SOUND_DB || sType == SOUND_DBA)
- {
- cInputCalcFullScale(&InputVal, NEWSOUNDSENSORMIN, NEWSOUNDSENSORPCTDYN, TRUE);
- }
- else if (sType == CUSTOM)
- {
- cInputCalcFullScale(&InputVal, IOMapInput.Inputs[No].CustomZeroOffset, IOMapInput.Inputs[No].CustomPctFullScale, FALSE);
- }
- cInputCalcSensorValue( InputVal,
- &(IOMapInput.Inputs[No].SensorRaw),
- &(IOMapInput.Inputs[No].SensorValue),
- &(IOMapInput.Inputs[No].SensorBoolean),
- &(VarsInput.InputDebounce[No]),
- &(VarsInput.SampleCnt[No]),
- &(VarsInput.LastAngle[No]),
- &(VarsInput.EdgeCnt[No]),
- ((IOMapInput.Inputs[No].SensorMode) & SLOPEMASK),
- ((IOMapInput.Inputs[No].SensorMode) & MODEMASK));
- }
- break;
-
- /* Tripple case intended */
- case LOWSPEED:
- case LOWSPEED_9V:
- case HIGHSPEED:
- {
- }
- break;
-
- /* Four cases intended */
- case COLORRED:
- case COLORGREEN:
- case COLORBLUE:
- case COLORNONE:
- {
-
- UWORD InputVal;
- switch (IOMapInput.Colors[No].CalibrationState)
- {
- case SENSOROFF:
- {
-
- /* Make sure that sensor data are invalid while unplugged*/
- VarsInput.InvalidTimer[No] = INVALID_RELOAD_COLOR;
- IOMapInput.Inputs[No].InvalidData = INVALID_DATA;
-
- /* Check if sensor has been attached */
- if (dInputCheckColorStatus(No))
- {
-
- /* Sensor has been attached now get cal data */
- VarsInput.VarsColor[No].ColorInitState = 0;
- (IOMapInput.Colors[No].CalibrationState) = SENSORCAL;
- }
- }
- break;
- case SENSORCAL:
- {
-
- UBYTE Status;
- if (FALSE == cInputInitColorSensor(No, &Status))
- {
-
- /* Color sensor has been removed during calibration */
- (IOMapInput.Colors[No].CalibrationState) = SENSOROFF;
- }
-
- if (TRUE == Status)
- {
-
- /* Use clock to detect errors */
- dInputSetDirInDigi0(No);
- (IOMapInput.Colors[No].CalibrationState) = 0;
- }
- }
- break;
- default:
- {
- if (dInputGetColor(No, &(IOMapInput.Inputs[No].ADRaw)))
- {
- InputVal = IOMapInput.Inputs[No].ADRaw;
- cInputCalcFullScale(&InputVal, COLORSENSORBGMIN, COLORSENSORBGPCTDYN, FALSE);
- cInputCalcSensorValue(InputVal,
- &(IOMapInput.Inputs[No].SensorRaw),
- &(IOMapInput.Inputs[No].SensorValue),
- &(IOMapInput.Inputs[No].SensorBoolean),
- &(VarsInput.InputDebounce[No]),
- &(VarsInput.SampleCnt[No]),
- &(VarsInput.LastAngle[No]),
- &(VarsInput.EdgeCnt[No]),
- ((IOMapInput.Inputs[No].SensorMode) & SLOPEMASK),
- ((IOMapInput.Inputs[No].SensorMode) & MODEMASK));
- }
- else
- {
- IOMapInput.Colors[No].CalibrationState = SENSOROFF;
- }
- }
- break;
- }
- }
- break;
- case COLORFULL:
- {
- switch (IOMapInput.Colors[No].CalibrationState)
- {
- case SENSOROFF:
- {
-
- /* Make sure that sensor data are invalid while unplugged */
- VarsInput.InvalidTimer[No] = INVALID_RELOAD_COLOR;
- IOMapInput.Inputs[No].InvalidData = INVALID_DATA;
-
- /* Check if sensor has been attached */
- if (dInputCheckColorStatus(No))
- {
-
- /* Sensor has been attached now get cal data */
- VarsInput.VarsColor[No].ColorInitState = 0;
- (IOMapInput.Colors[No].CalibrationState) = SENSORCAL;
- }
- }
- break;
- case SENSORCAL:
- {
- UBYTE Status;
-
- if (FALSE == cInputInitColorSensor(No, &Status))
- {
-
- /* Color sensor has been removed during calibration */
- (IOMapInput.Colors[No].CalibrationState) = SENSOROFF;
- VarsInput.ColorStatus &= ~(0x01<<No);
- }
-
- if (TRUE == Status)
- {
-
- /* Initialization finished with success recalc the values*/
- (IOMapInput.Colors[No].CalibrationState) = 0;
-
- /* Calculate Calibration factor */
- VarsInput.ColorStatus |= (0x01<<No);
-
- }
- }
- break;
- default:
- {
-
- /* calculate only when new ad values are ready */
- if (0 == VarsInput.ColorCnt)
- {
-
- UWORD NewSensorVals[NO_OF_COLORS];
- UBYTE ColorCount;
-
- COLORSTRUCT *pC;
-
- pC = &(IOMapInput.Colors[No]);
-
- /* Check if sensor is deteched */
- if (dInputCheckColorStatus(No))
- {
-
- /* Calibrate the raw ad values returns the SensorRaw */
- cInputCalibrateColor(pC, NewSensorVals);
-
- for(ColorCount = 0; ColorCount < BLANK; ColorCount++)
- {
-
- /* Calculate color sensor values */
- cInputCalcSensorValue(NewSensorVals[ColorCount],
- &(IOMapInput.Colors[No].SensorRaw[ColorCount]),
- &(IOMapInput.Colors[No].SensorValue[ColorCount]),
- &(IOMapInput.Colors[No].Boolean[ColorCount]),
- &(VarsInput.VarsColor[No].ColorInputDebounce[ColorCount]),
- &(VarsInput.VarsColor[No].ColorSampleCnt[ColorCount]),
- &(VarsInput.VarsColor[No].ColorLastAngle[ColorCount]),
- &(VarsInput.VarsColor[No].ColorEdgeCnt[ColorCount]),
- ((IOMapInput.Inputs[No].SensorMode) & SLOPEMASK),
- ((IOMapInput.Inputs[No].SensorMode) & MODEMASK));
- }
-
- /* Calculate background sensor values */
- cInputCalcSensorValue(NewSensorVals[BLANK],
- &(IOMapInput.Colors[No].SensorRaw[BLANK]),
- &(IOMapInput.Colors[No].SensorValue[BLANK]),
- &(IOMapInput.Colors[No].Boolean[BLANK]),
- &(VarsInput.VarsColor[No].ColorInputDebounce[BLANK]),
- &(VarsInput.VarsColor[No].ColorSampleCnt[BLANK]),
- &(VarsInput.VarsColor[No].ColorLastAngle[BLANK]),
- &(VarsInput.VarsColor[No].ColorEdgeCnt[BLANK]),
- ((IOMapInput.Inputs[No].SensorMode) & SLOPEMASK),
- ((IOMapInput.Inputs[No].SensorMode) & MODEMASK));
-
- /* Color Sensor values has been calculated - */
- /* now calculate the color and put it in Sensor value */
- if (((pC->SensorRaw[RED]) > (pC->SensorRaw[BLUE] )) &&
- ((pC->SensorRaw[RED]) > (pC->SensorRaw[GREEN])))
- {
-
- /* If all 3 colors are less than 65 OR (Less that 110 and bg less than 40)*/
- if (((pC->SensorRaw[RED]) < 65) ||
- (((pC->SensorRaw[BLANK]) < 40) && ((pC->SensorRaw[RED]) < 110)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- if (((((pC->SensorRaw[BLUE]) >> 2) + ((pC->SensorRaw[BLUE]) >> 3) + (pC->SensorRaw[BLUE])) < (pC->SensorRaw[GREEN])) &&
- ((((pC->SensorRaw[GREEN]) << 1)) > (pC->SensorRaw[RED])))
- {
- IOMapInput.Inputs[No].SensorValue = YELLOWCOLOR;
- }
- else
- {
-
- if ((((pC->SensorRaw[GREEN]) << 1) - ((pC->SensorRaw[GREEN]) >> 2)) < (pC->SensorRaw[RED]))
- {
-
- IOMapInput.Inputs[No].SensorValue = REDCOLOR;
- }
- else
- {
-
- if ((((pC->SensorRaw[BLUE]) < 70) ||
- ((pC->SensorRaw[GREEN]) < 70)) ||
- (((pC->SensorRaw[BLANK]) < 140) && ((pC->SensorRaw[RED]) < 140)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- IOMapInput.Inputs[No].SensorValue = WHITECOLOR;
- }
- }
- }
- }
- }
- else
- {
-
- /* Red is not the dominant color */
- if ((pC->SensorRaw[GREEN]) > (pC->SensorRaw[BLUE]))
- {
-
- /* Green is the dominant color */
- /* If all 3 colors are less than 40 OR (Less that 70 and bg less than 20)*/
- if (((pC->SensorRaw[GREEN]) < 40) ||
- (((pC->SensorRaw[BLANK]) < 30) && ((pC->SensorRaw[GREEN]) < 70)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- if ((((pC->SensorRaw[BLUE]) << 1)) < (pC->SensorRaw[RED]))
- {
- IOMapInput.Inputs[No].SensorValue = YELLOWCOLOR;
- }
- else
- {
- if ((((pC->SensorRaw[RED]) + ((pC->SensorRaw[RED])>>2)) < (pC->SensorRaw[GREEN])) ||
- (((pC->SensorRaw[BLUE]) + ((pC->SensorRaw[BLUE])>>2)) < (pC->SensorRaw[GREEN])))
- {
- IOMapInput.Inputs[No].SensorValue = GREENCOLOR;
- }
- else
- {
- if ((((pC->SensorRaw[RED]) < 70) ||
- ((pC->SensorRaw[BLUE]) < 70)) ||
- (((pC->SensorRaw[BLANK]) < 140) && ((pC->SensorRaw[GREEN]) < 140)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- IOMapInput.Inputs[No].SensorValue = WHITECOLOR;
- }
- }
- }
- }
- }
- else
- {
-
- /* Blue is the most dominant color */
- /* Colors can be blue, white or black */
- /* If all 3 colors are less than 48 OR (Less that 85 and bg less than 25)*/
- if (((pC->SensorRaw[BLUE]) < 48) ||
- (((pC->SensorRaw[BLANK]) < 25) && ((pC->SensorRaw[BLUE]) < 85)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- if ((((((pC->SensorRaw[RED]) * 48) >> 5) < (pC->SensorRaw[BLUE])) &&
- ((((pC->SensorRaw[GREEN]) * 48) >> 5) < (pC->SensorRaw[BLUE])))
- ||
- (((((pC->SensorRaw[RED]) * 58) >> 5) < (pC->SensorRaw[BLUE])) ||
- ((((pC->SensorRaw[GREEN]) * 58) >> 5) < (pC->SensorRaw[BLUE]))))
- {
- IOMapInput.Inputs[No].SensorValue = BLUECOLOR;
- }
- else
- {
-
- /* Color is white or Black */
- if ((((pC->SensorRaw[RED]) < 60) ||
- ((pC->SensorRaw[GREEN]) < 60)) ||
- (((pC->SensorRaw[BLANK]) < 110) && ((pC->SensorRaw[BLUE]) < 120)))
- {
- IOMapInput.Inputs[No].SensorValue = BLACKCOLOR;
- }
- else
- {
- if ((((pC->SensorRaw[RED]) + ((pC->SensorRaw[RED]) >> 3)) < (pC->SensorRaw[BLUE])) ||
- (((pC->SensorRaw[GREEN]) + ((pC->SensorRaw[GREEN]) >> 3)) < (pC->SensorRaw[BLUE])))
- {
- IOMapInput.Inputs[No].SensorValue = BLUECOLOR;
- }
- else
- {
- IOMapInput.Inputs[No].SensorValue = WHITECOLOR;
- }
- }
- }
- }
- }
- }
- }
- else
- {
- IOMapInput.Colors[No].CalibrationState = SENSOROFF;
- VarsInput.ColorStatus &= ~(0x01<<No);
- }
- }
- break;
- }
- }
- }
- break;
- case COLOREXIT:
- {
- UBYTE Status;
-
- VarsInput.ColorStatus &= ~(0x01<<No);
- if (FALSE == cInputInitColorSensor(No, &Status))
- {
- IOMapInput.Inputs[No].SensorType = NO_SENSOR;
- }
-
- if (TRUE == Status)
- {
-
- /* Initialization finished with success recalc the values*/
- (IOMapInput.Colors[No].CalibrationState) = 0;
- IOMapInput.Inputs[No].SensorType = NO_SENSOR;
- VarsInput.OldSensorType[No] = NO_SENSOR;
- }
- }
- break;
- default:
- {
- }
- break;
- }
-}
-
-
-void cInputCalcSensorValue(UWORD NewSensorRaw, UWORD *pOldSensorRaw, SWORD *pSensorValue,
- UBYTE *pBoolean, UBYTE *pDebounce, UBYTE *pSampleCnt,
- UBYTE *LastAngle, UBYTE *pEdgeCnt, UBYTE Slope,
- UBYTE Mode)
-{
- SWORD Delta;
- UBYTE PresentBoolean;
- UBYTE Sample;
-
- if (0 == Slope)
- {
-
- /* This is absolute measure method */
- if (NewSensorRaw > THRESHOLD_FALSE)
- {
- PresentBoolean = FALSE;
- }
- else
- {
- if (NewSensorRaw < THRESHOLD_TRUE)
- {
- PresentBoolean = TRUE;
- }
- }
- }
- else
- {
-
- /* This is dynamic measure method */
- if (NewSensorRaw > (ACTUAL_AD_RES - Slope))
- {
- PresentBoolean = FALSE;
- }
- else
- {
- if (NewSensorRaw < Slope)
- {
- PresentBoolean = TRUE;
- }
- else
- {
- Delta = *pOldSensorRaw - NewSensorRaw;
- if (Delta < 0)
- {
- if (-Delta > Slope)
- {
- PresentBoolean = FALSE;
- }
- }
- else
- {
- if (Delta > Slope)
- {
- PresentBoolean = TRUE;
- }
- }
- }
- }
- }
- *pOldSensorRaw = NewSensorRaw;
-
- switch(Mode)
- {
-
- case RAWMODE:
- {
- *pSensorValue = NewSensorRaw;
- }
- break;
-
- case BOOLEANMODE:
- {
- *pSensorValue = PresentBoolean;
- }
- break;
-
- case TRANSITIONCNTMODE:
- {
- if ((*pDebounce) > 0)
- {
- (*pDebounce)--;
- }
- else
- {
- if (*pBoolean != PresentBoolean)
- {
- (*pDebounce) = DEBOUNCERELOAD;
- (*pSensorValue)++;
- }
- }
- }
- break;
-
- case PERIODCOUNTERMODE:
- {
- if ((*pDebounce) > 0)
- {
- (*pDebounce)--;
- }
- else
- {
- if (*pBoolean != PresentBoolean)
- {
- (*pDebounce) = DEBOUNCERELOAD;
- *pBoolean = PresentBoolean;
- if (++(*pEdgeCnt) > 1)
- {
- if (PresentBoolean == 0)
- {
- (*pEdgeCnt) = 0;
- (*pSensorValue)++;
- }
- }
- }
- }
- }
- break;
-
- case PCTFULLSCALEMODE:
- {
-
- /* Output is 0-100 pct */
- *pSensorValue = ((NewSensorRaw) * 100)/SENSOR_RESOLUTION;
- }
- break;
-
- case FAHRENHEITMODE:
- {
-
- /* Fahrenheit mode goes from -40 to 158 degrees */
- *pSensorValue = (((ULONG)(NewSensorRaw) * 900L)/SENSOR_RESOLUTION) - 200;
- *pSensorValue = ((180L * (ULONG)(*pSensorValue))/100L) + 320;
- }
- break;
-
- case CELSIUSMODE:
- {
-
- /* Celsius mode goes from -20 to 70 degrees */
- *pSensorValue = (((ULONG)(NewSensorRaw * 900L)/SENSOR_RESOLUTION) - 200);
- }
- break;
-
- case ANGLESTEPSMODE:
- {
- *pBoolean = PresentBoolean;
-
- if (NewSensorRaw < ANGLELIMITA)
- {
- Sample = 0;
- }
- else
- {
- if (NewSensorRaw < ANGLELIMITB)
- {
- Sample = 1;
- }
- else
- {
- if (NewSensorRaw < ANGLELIMITC)
- {
- Sample = 2;
- }
- else
- {
- Sample = 3;
- }
- }
- }
-
- switch (*LastAngle)
- {
- case 0 :
- {
- if (Sample == 1)
- {
- if ((*pSampleCnt) >= ROT_SLOW_SPEED )
- {
-
- if (++(*pSampleCnt) >= (ROT_SLOW_SPEED + ROT_OV_SAMPLING))
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- }
- else
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- }
- if (Sample == 2)
- {
- (*pSensorValue)--;
- (*LastAngle) = Sample;
- }
- if (Sample == 0)
- {
- if ((*pSampleCnt) < ROT_SLOW_SPEED)
- {
- (*pSampleCnt)++;
- }
- }
- }
- break;
- case 1 :
- {
- if (Sample == 3)
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- if (Sample == 0)
- {
- (*pSensorValue)--;
- (*LastAngle) = Sample;
- }
- (*pSampleCnt) = 0;
- }
- break;
- case 2 :
- {
- if (Sample == 0)
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- if (Sample == 3)
- {
- (*pSensorValue)--;
- (*LastAngle) = Sample;
- }
- (*pSampleCnt) = 0;
- }
- break;
- case 3 :
- {
- if (Sample == 2)
- {
- if ((*pSampleCnt) >= ROT_SLOW_SPEED)
- {
-
- if (++(*pSampleCnt) >= (ROT_SLOW_SPEED + ROT_OV_SAMPLING))
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- }
- else
- {
- (*pSensorValue)++;
- (*LastAngle) = Sample;
- }
- }
- if (Sample == 1)
- {
- (*pSensorValue)--;
- (*LastAngle) = Sample;
- }
- if (Sample == 3)
- {
- if ((*pSampleCnt) < ROT_SLOW_SPEED)
- {
- (*pSampleCnt)++;
- }
- }
- }
- break;
- }
- }
- }
-
- *pBoolean = PresentBoolean;
-}
-
-void cInputCalcFullScale(UWORD *pRawVal, UWORD ZeroPointOffset, UBYTE PctFullScale, UBYTE InvStatus)
-{
- if (*pRawVal >= ZeroPointOffset)
- {
- *pRawVal -= ZeroPointOffset;
- }
- else
- {
- *pRawVal = 0;
- }
-
- *pRawVal = (*pRawVal * 100)/PctFullScale;
- if (*pRawVal > SENSOR_RESOLUTION)
- {
- *pRawVal = SENSOR_RESOLUTION;
- }
- if (TRUE == InvStatus)
- {
- *pRawVal = SENSOR_RESOLUTION - *pRawVal;
- }
-}
-
-
-void cInputSetupType(UBYTE Port, UBYTE *pType, UBYTE OldType)
-{
-
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_NORMAL;
-
- /* If old type is color sensor in color lamp mode then turn off leds */
- switch (OldType)
- {
- case COLORRED:
- case COLORGREEN:
- case COLORBLUE:
- case COLORFULL:
- case COLOREXIT:
- {
- if (NO_SENSOR == *pType)
- {
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_COLOR;
- *pType = COLOREXIT;
- }
- }
- break;
- }
- switch(*pType)
- {
- case NO_SENSOR:
- case SWITCH:
- case TEMPERATURE:
- {
- dInputSetInactive(Port);
- dInputSetDirInDigi0(Port);
- dInputSetDirInDigi1(Port);
- }
- break;
-
- case REFLECTION:
- case ANGLE:
- {
- dInputSetActive(Port);
- dInputClearDigi0(Port);
- dInputClearDigi1(Port);
- }
- break;
-
- case LIGHT_ACTIVE:
- {
- dInputSetInactive(Port);
- dInputSetDigi0(Port);
- dInputClearDigi1(Port);
- }
- break;
-
- case LIGHT_INACTIVE:
- {
- dInputSetInactive(Port);
- dInputClearDigi0(Port);
- dInputClearDigi1(Port);
- }
- break;
-
- case SOUND_DB:
- {
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_SOUND;
- dInputSetInactive(Port);
- dInputSetDigi0(Port);
- dInputClearDigi1(Port);
- }
- break;
-
- case SOUND_DBA:
- {
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_SOUND;
- dInputSetInactive(Port);
- dInputClearDigi0(Port);
- dInputSetDigi1(Port);
- }
- break;
-
- case CUSTOM:
- {
- cInputSetupCustomSensor(Port);
- }
- break;
-
- case LOWSPEED:
- {
- dInputSetInactive(Port);
- dInputSetDigi0(Port);
- dInputSetDigi1(Port);
- }
- break;
-
- case LOWSPEED_9V:
- {
- dInputSet9v(Port);
- dInputSetDigi0(Port);
- dInputSetDigi1(Port);
- }
- break;
-
- case HIGHSPEED:
- {
- dInputSetInactive(Port);
- dInputSetDirInDigi0(Port);
- dInputSetDirInDigi1(Port);
- }
- break;
-
- case COLORFULL:
- case COLORRED:
- case COLORGREEN:
- case COLORBLUE:
- case COLORNONE:
- {
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_COLOR;
- dInputSetInactive(Port);
- dInputSetDigi0(Port);
- dInputSetDirInDigi1(Port);
- IOMapInput.Colors[Port].CalibrationState = SENSORCAL;
- VarsInput.VarsColor[Port].ColorInitState = 0;
- }
- break;
-
- default:
- {
- }
- break;
- }
-}
-
-void cInputSetupCustomSensor(UBYTE Port)
-{
- if ((IOMapInput.Inputs[Port].DigiPinsDir) & 0x01)
- {
- if ((IOMapInput.Inputs[Port].DigiPinsOut) & 0x01)
- {
- dInputSetDigi0(Port);
- }
- else
- {
- dInputClearDigi0(Port);
- }
- }
- if ((IOMapInput.Inputs[Port].DigiPinsDir) & 0x02)
- {
- if ((IOMapInput.Inputs[Port].DigiPinsOut) & 0x02)
- {
- dInputSetDigi1(Port);
- }
- else
- {
- dInputClearDigi1(Port);
- }
- }
- else
- {
- dInputSetDirInDigi1(Port);
- }
-
- if (CUSTOMACTIVE == (IOMapInput.Inputs[Port].CustomActiveStatus))
- {
- dInputSetActive(Port);
- }
- else
- {
- if (CUSTOM9V == (IOMapInput.Inputs[Port].CustomActiveStatus))
- {
- dInputSet9v(Port);
- }
- else
- {
- dInputSetInactive(Port);
- }
- }
-}
-
-
-SWORD cInputTempConv(UWORD InputVal)
-{
- static const long long TempCoeff[] = { -5425ll, 9261399ll, -6686663252ll,
- 2573629857807ll, -822478326197838ll, 195856762719738784ll };
- const unsigned int TempCoeffShift = 48;
- /* Replace the original table with polynomial. */
- int i;
- long long Input = InputVal;
- long long Output = TempCoeff[0];
- for (i = 1; i < sizeof TempCoeff / sizeof TempCoeff[0]; i++)
- Output = Output * Input + TempCoeff[i];
- /* Round. */
- return Output + (1ll << TempCoeffShift - 1) >> TempCoeffShift;
-}
-
-
-UBYTE cInputInitColorSensor(UBYTE Port, UBYTE *pInitStatus)
-{
-
- *pInitStatus = FALSE;
- switch(VarsInput.VarsColor[Port].ColorInitState)
- {
- case 0:
- {
- dInputSetDigi0(Port);
- dInputSetDigi1(Port);
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- break;
- case 1:
- {
- dInputClearDigi0(Port);
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- break;
-
- case 2:
- {
- dInputSetDigi0(Port);
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- break;
- case 3:
- {
-
- dInputClearDigi0(Port);
-
- /* Clear clock for 100mS - use pit timer*/
- dInputClearColor100msTimer(Port);
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- break;
- case 4:
- {
-
- /* Wait 100mS */
- if (dInputChkColor100msTimer(Port))
- {
- VarsInput.VarsColor[Port].ColorInitState += 1;
- }
- }
- break;
- case 5:
- {
- UBYTE TmpType;
-
- if (COLOREXIT == IOMapInput.Inputs[Port].SensorType)
- {
- TmpType = COLORNONE;
- }
- else
- {
- TmpType = IOMapInput.Inputs[Port].SensorType;
- }
- dInputColorTx(Port, TmpType);
-
- /* Be ready to receive data from sensor */
- dInputSetDirInDigi1(Port);
- VarsInput.VarsColor[Port].ReadCnt = 0;
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- break;
- case 6:
- {
- UBYTE Data;
- UBYTE DataCnt;
- UBYTE *pData;
-
- DataCnt = (VarsInput.VarsColor[Port].ReadCnt);
- pData = (UBYTE*)(IOMapInput.Colors[Port].Calibration);
-
- /* Read first byte of cal data */
- dInputReadCal(Port, &Data);
-
- pData[DataCnt] = Data;
-
- /* If all bytes has been read - then continue to next step */
- if (++(VarsInput.VarsColor[Port].ReadCnt) >= ((sizeof(IOMapInput.Colors[Port].Calibration) + sizeof(IOMapInput.Colors[Port].CalLimits))))
- {
- VarsInput.VarsColor[Port].ColorInitState++;
- }
- }
- break;
- case 7:
- {
-
- /* Check CRC then continue or restart if false */
- UWORD Crc, CrcCheck;
- UBYTE Cnt;
- UBYTE Data;
- UBYTE *pData;
-
- dInputReadCal(Port, &Data);
- Crc = (UWORD)(Data) << 8;
- dInputReadCal(Port, &Data);
- Crc += (UWORD)Data;
- CrcCheck = 0x5AA5;
- pData = (UBYTE*)(IOMapInput.Colors[Port].Calibration);
- for (Cnt = 0; Cnt < (sizeof(IOMapInput.Colors[Port].Calibration) + sizeof(IOMapInput.Colors[Port].CalLimits)); Cnt++)
- {
- UWORD i,j;
- UBYTE c;
- c = pData[Cnt];
- for(i = 0; i != 8; c >>= 1, i++)
- {
- j = (c^CrcCheck) & 1;
- CrcCheck >>= 1;
-
- if(j)
- {
- CrcCheck ^= 0xA001;
- }
- }
-
- }
- if ((CrcCheck != Crc))
- {
-
- /* incorrect!!! try again */
- VarsInput.VarsColor[Port].ColorInitState = 0;
- VarsInput.InvalidTimer[Port] = INVALID_RELOAD_COLOR;
- }
- else
- {
-
- /* Correct crc sum -> calculate the calibration values then exit */
- VarsInput.VarsColor[Port].ColorInitState = 0;
-
- /* Sensor is almost ready - needs a little time to make first measurements */
- VarsInput.InvalidTimer[Port] = 10;
- *pInitStatus = TRUE;
- }
- }
- break;
- default:
- {
- VarsInput.VarsColor[Port].ColorInitState = 0;
- }
- break;
- }
- return(dInputCheckColorStatus(Port));
-}
-
-
-void cInputCalibrateColor(COLORSTRUCT *pC, UWORD *pNewVals)
-{
- UBYTE CalRange;
-
- if ((pC->ADRaw[BLANK]) < pC->CalLimits[1])
- {
- CalRange = 2;
- }
- else
- {
- if ((pC->ADRaw[BLANK]) < pC->CalLimits[0])
- {
- CalRange = 1;
- }
- else
- {
- CalRange = 0;
- }
- }
-
- pNewVals[RED] = 0;
- if ((pC->ADRaw[RED]) > (pC->ADRaw[BLANK]))
- {
- pNewVals[RED] = (UWORD)(((ULONG)((pC->ADRaw[RED]) - (pC->ADRaw[BLANK])) * (pC->Calibration[CalRange][RED])) >> 16);
- }
-
- pNewVals[GREEN] = 0;
- if ((pC->ADRaw[GREEN]) > (pC->ADRaw[BLANK]))
- {
- pNewVals[GREEN] = (UWORD)(((ULONG)((pC->ADRaw[GREEN]) - (pC->ADRaw[BLANK])) * (pC->Calibration[CalRange][GREEN])) >> 16);
- }
-
- pNewVals[BLUE] = 0;
- if ((pC->ADRaw[BLUE]) > (pC->ADRaw[BLANK]))
- {
- pNewVals[BLUE] = (UWORD)(((ULONG)((pC->ADRaw[BLUE]) -(pC->ADRaw[BLANK])) * (pC->Calibration[CalRange][BLUE])) >> 16);
- }
-
- pNewVals[BLANK] = (pC->ADRaw[BLANK]);
- cInputCalcFullScale(&(pNewVals[BLANK]), COLORSENSORBGMIN, COLORSENSORBGPCTDYN, FALSE);
- (pNewVals[BLANK]) = (UWORD)(((ULONG)(pNewVals[BLANK]) * (pC->Calibration[CalRange][BLANK])) >> 16);
-}
-
-
-void cInputExit(void)
-{
- dInputExit();
-}
-
diff --git a/AT91SAM7S256/Source/c_input.h b/AT91SAM7S256/Source/c_input.h
deleted file mode 100644
index 4e508f3..0000000
--- a/AT91SAM7S256/Source/c_input.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-01-09 10:33 $
-//
-// Filename $Workfile:: c_input.h $
-//
-// Version $Revision:: 7 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_inpu $
-//
-// Platform C
-//
-
-#ifndef C_INPUT
-#define C_INPUT
-
-#ifdef INCLUDE_OS
-extern const HEADER cInput;
-#endif
-
-#include "c_input.iom"
-
-#define ACTUAL_AD_RES 1023L
-#define SENSOR_RESOLUTION 1023L
-#define DEBOUNCERELOAD 100
-#define THRESHOLD_FALSE (UWORD)(ACTUAL_AD_RES * 45L / 100L)
-#define THRESHOLD_TRUE (UWORD)(ACTUAL_AD_RES * 55L / 100L)
-
-#define ANGLELIMITA (UWORD)(ACTUAL_AD_RES * 4400L / 10000L)
-#define ANGLELIMITB (UWORD)(ACTUAL_AD_RES * 6600L / 10000L)
-#define ANGLELIMITC (UWORD)(ACTUAL_AD_RES * 8900L / 10000L)
-
-#define FWDDIR 1
-#define RWDDIR 2
-#define MAXSAMPLECNT 5
-
-typedef struct
-{
- UBYTE ColorInputDebounce [NO_OF_COLORS];
- UBYTE ColorEdgeCnt [NO_OF_COLORS];
- UBYTE ColorLastAngle [NO_OF_COLORS];
- UBYTE ColorSampleCnt [NO_OF_COLORS];
- UBYTE ColorInitState;
- UBYTE ReadCnt;
-} VARSCOLOR;
-
-
-typedef struct
-{
- UWORD InvalidTimer [NO_OF_INPUTS];
- UBYTE InputDebounce [NO_OF_INPUTS];
- UBYTE EdgeCnt [NO_OF_INPUTS];
- UBYTE LastAngle [NO_OF_INPUTS];
- UBYTE OldSensorType [NO_OF_INPUTS];
- UBYTE SampleCnt [NO_OF_INPUTS];
- VARSCOLOR VarsColor [NO_OF_INPUTS];
- UBYTE ColorCnt;
- UBYTE ColorStatus;
-}VARSINPUT;
-
-void cInputInit(void* pHeader);
-void cInputCtrl(void);
-void cInputExit(void);
-
-
-#endif
diff --git a/AT91SAM7S256/Source/c_input.iom b/AT91SAM7S256/Source/c_input.iom
deleted file mode 100644
index dee1309..0000000
--- a/AT91SAM7S256/Source/c_input.iom
+++ /dev/null
@@ -1,175 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-09-08 15:23 $
-//
-// Filename $Workfile:: c_input.iom $
-//
-// Version $Revision:: 16 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_inpu $
-//
-// Platform C
-//
-
-#ifndef CINPUT_IOM
-#define CINPUT_IOM
-
-#define NO_OF_INPUTS 4
-#define pMapInput ((IOMAPINPUT*)(pHeaders[ENTRY_INPUT]->pIOMap))
-
-
-/* Constants related to sensor type */
-enum
-{
- NO_SENSOR = 0,
- SWITCH = 1,
- TEMPERATURE = 2,
- REFLECTION = 3,
- ANGLE = 4,
- LIGHT_ACTIVE = 5,
- LIGHT_INACTIVE = 6,
- SOUND_DB = 7,
- SOUND_DBA = 8,
- CUSTOM = 9,
- LOWSPEED = 10,
- LOWSPEED_9V = 11,
- HIGHSPEED = 12,
- COLORFULL = 13,
- COLORRED = 14,
- COLORGREEN = 15,
- COLORBLUE = 16,
- COLORNONE = 17,
- COLOREXIT = 18, /* For internal use when going from color or Lamp to no_sensor*/
- NO_OF_SENSOR_TYPES = 18
-};
-
-/* Constants related to sensor mode */
-enum
-{
- RAWMODE = 0x00,
- BOOLEANMODE = 0x20,
- TRANSITIONCNTMODE = 0x40,
- PERIODCOUNTERMODE = 0x60,
- PCTFULLSCALEMODE = 0x80,
- CELSIUSMODE = 0xA0,
- FAHRENHEITMODE = 0xC0,
- ANGLESTEPSMODE = 0xE0,
- SLOPEMASK = 0x1F,
- MODEMASK = 0xE0
-};
-
-/* Constants related to Digital I/O */
-enum
-{
- DIGI0 = 1,
- DIGI1 = 2
-};
-
-enum
-{
- CUSTOMINACTIVE = 0x00,
- CUSTOM9V = 0x01,
- CUSTOMACTIVE = 0x02
-};
-
-enum
-{
- INVALID_DATA = 0x01
-};
-
-/* Constants related to Colorstruct */
-enum
-{
- RED,
- GREEN,
- BLUE,
- BLANK,
- NO_OF_COLORS
-};
-
-
-/* Constants related to color sensor value using */
-/* Color sensor as color detector */
-enum
-{
- BLACKCOLOR = 1,
- BLUECOLOR = 2,
- GREENCOLOR = 3,
- YELLOWCOLOR = 4,
- REDCOLOR = 5,
- WHITECOLOR = 6
-};
-
-
-/* Constants related to Color CalibrationState */
-/* When STARTCAL is TRUE then calibration is */
-/* in progress */
-enum
-{
- SENSORCAL = 0x01,
- SENSOROFF = 0x02,
- RUNNINGCAL = 0x20,
- STARTCAL = 0x40,
- RESETCAL = 0x80,
-};
-
-enum
-{
- CAL_POINT_0,
- CAL_POINT_1,
- CAL_POINT_2,
- NO_OF_POINTS
-};
-
-
-typedef struct
-{
- UWORD CustomZeroOffset; /* Set the offset of the custom sensor */
- UWORD ADRaw;
- UWORD SensorRaw;
- SWORD SensorValue;
-
- UBYTE SensorType;
- UBYTE SensorMode;
- UBYTE SensorBoolean;
-
- UBYTE DigiPinsDir; /* Direction of the Digital pins 1 is output 0 is input */
- UBYTE DigiPinsIn; /* Contains the status of the digital pins */
- UBYTE DigiPinsOut; /* Sets the output level of the digital pins */
- UBYTE CustomPctFullScale; /* Sets the Pct full scale of the custom sensor */
- UBYTE CustomActiveStatus; /* Sets the active or inactive state of the custom sensor */
-
- UBYTE InvalidData; /* Indicates wether data is invalid (1) or valid (0) */
-
- UBYTE Spare1;
- UBYTE Spare2;
- UBYTE Spare3;
-
-}INPUTSTRUCT;
-
-typedef struct
-{
-
- ULONG Calibration[NO_OF_POINTS][NO_OF_COLORS];
- UWORD CalLimits[NO_OF_POINTS - 1];
- UWORD ADRaw[NO_OF_COLORS];
- UWORD SensorRaw[NO_OF_COLORS];
- SWORD SensorValue[NO_OF_COLORS];
- UBYTE Boolean[NO_OF_COLORS];
- UBYTE CalibrationState;
- UBYTE Free1;
- UBYTE Free2;
- UBYTE Free3;
-}COLORSTRUCT;
-
-typedef struct
-{
- INPUTSTRUCT Inputs[NO_OF_INPUTS];
- COLORSTRUCT Colors[NO_OF_INPUTS];
-}IOMAPINPUT;
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_ioctrl.c b/AT91SAM7S256/Source/c_ioctrl.c
deleted file mode 100644
index daab322..0000000
--- a/AT91SAM7S256/Source/c_ioctrl.c
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_ioctrl.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ioct $
-//
-// Platform C
-//
-
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_ioctrl.iom"
-#include "c_ioctrl.h"
-#include "d_ioctrl.h"
-
-static IOMAPIOCTRL IOMapIOCtrl;
-static VARSIOCTRL VarsIOCtrl;
-
-const HEADER cIOCtrl =
-{
- 0x00060001L,
- "IOCtrl",
- cIOCtrlInit,
- cIOCtrlCtrl,
- cIOCtrlExit,
- (void *)&IOMapIOCtrl,
- (void *)&VarsIOCtrl,
- (UWORD)sizeof(IOMapIOCtrl),
- (UWORD)sizeof(VarsIOCtrl),
- 0x0000 //Code size - not used so far
-};
-
-
-void cIOCtrlInit(void* pHeader)
-{
- dIOCtrlSetPower(0);
- dIOCtrlInit();
-}
-
-
-void cIOCtrlCtrl(void)
-{
- switch(IOMapIOCtrl.PowerOn)
- {
- case POWERDOWN:
- {
- dIOCtrlSetPower((POWERDOWN>>8));
- }
- break;
- case BOOT:
- {
- dIOCtrlSetPower((UBYTE)(BOOT>>8));
- dIOCtrlSetPwm((UBYTE)BOOT);
- }
- break;
- default:
- {
- /* No need to change the default value */
- /* if value is boot or reset it should come */
- /* back from reset - setting the value to 0 */
- }
- break;
- }
- dIOCtrlTransfer();
-}
-
-
-void cIOCtrlExit(void)
-{
- dIOCtrlExit();
-}
-
diff --git a/AT91SAM7S256/Source/c_ioctrl.h b/AT91SAM7S256/Source/c_ioctrl.h
deleted file mode 100644
index 5ad4c8f..0000000
--- a/AT91SAM7S256/Source/c_ioctrl.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_ioctrl.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ioct $
-//
-// Platform C
-//
-
-#ifndef C_IOCTRL
-#define C_IOCTRL
-
-typedef struct
-{
- UBYTE Tmp;
-}VARSIOCTRL;
-
-void cIOCtrlInit(void* pHeader);
-void cIOCtrlCtrl(void);
-void cIOCtrlExit(void);
-
-extern const HEADER cIOCtrl;
-#endif
diff --git a/AT91SAM7S256/Source/c_ioctrl.iom b/AT91SAM7S256/Source/c_ioctrl.iom
deleted file mode 100644
index 9742d04..0000000
--- a/AT91SAM7S256/Source/c_ioctrl.iom
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_ioctrl.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ioct $
-//
-// Platform C
-//
-
-#ifndef CIOCTRL_IOM
-#define CIOCTRL_IOM
-
-#define pMapIoCtrl ((IOMAPIOCTRL*)(pHeaders[ENTRY_IOCTRL]->pIOMap))
-
-enum
-{
- POWERDOWN = 0x5A00,
- BOOT = 0xA55A
-};
-
-typedef struct
-{
- UWORD PowerOn;
-}IOMAPIOCTRL;
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_loader.c b/AT91SAM7S256/Source/c_loader.c
deleted file mode 100644
index 995c920..0000000
--- a/AT91SAM7S256/Source/c_loader.c
+++ /dev/null
@@ -1,464 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 12-03-08 15:28 $
-//
-// Filename $Workfile:: c_loader.c $
-//
-// Version $Revision:: 5 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_load $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_loader.iom"
-#include "c_ioctrl.iom"
-#include "d_loader.h"
-#include "c_loader.h"
-
-static IOMAPLOADER IOMapLoader;
-static VARSLOADER VarsLoader;
-static HEADER **pHeaders;
-
-const HEADER cLoader =
-{
- 0x00090001L,
- "Loader",
- cLoaderInit,
- cLoaderCtrl,
- cLoaderExit,
- (void *)&IOMapLoader,
- (void *)&VarsLoader,
- (UWORD)sizeof(IOMapLoader),
- (UWORD)sizeof(VarsLoader),
- 0x0000 //Code size - not used so far
-};
-
-UWORD cLoaderFileRq(UBYTE Cmd, UBYTE *pFileName, UBYTE *pBuffer, ULONG *pLength);
-UWORD cLoaderGetIoMapInfo(ULONG ModuleId, UBYTE *pIoMap, UWORD *pIoMapSize);
-UWORD cLoaderFindModule(UBYTE *pBuffer);
-void cLoaderGetModuleName(UBYTE *pDst, UBYTE *pModule);
-
-void cLoaderInit(void* pHeader)
-{
-
- IOMapLoader.pFunc = &cLoaderFileRq;
- VarsLoader.IoMapHandle = FALSE;
- pHeaders = pHeader;
- dLoaderInit();
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
-}
-
-void cLoaderCtrl(void)
-{
-}
-
-
-
-UWORD cLoaderFileRq(UBYTE Cmd, UBYTE *pFileName, UBYTE *pBuffer, ULONG *pLength)
-{
- UWORD ReturnState;
-
- ReturnState = SUCCESS;
-
- switch(Cmd)
- {
- case OPENREAD:
- {
- ReturnState = dLoaderOpenRead(pFileName, pLength);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
- }
- break;
- case OPENREADLINEAR:
- {
- ReturnState = dLoaderGetFilePtr(pFileName, pBuffer, pLength);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
-
- }
- break;
- case OPENWRITE:
- {
-
- /* This is to create a new file */
- ReturnState = dLoaderCreateFileHeader(*pLength, pFileName, (UBYTE) NONLINEAR, SYSTEMFILE);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
- else
- {
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
- }
- }
- break;
- case OPENWRITELINEAR:
- {
- ReturnState = dLoaderCreateFileHeader(*pLength, pFileName, (UBYTE) LINEAR, SYSTEMFILE);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
- else
- {
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
- }
- }
- break;
- case OPENWRITEDATA:
- {
-
- ReturnState = dLoaderCreateFileHeader(*pLength, pFileName, (UBYTE) NONLINEAR, DATAFILE);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
- else
- {
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
- }
- }
- break;
- case OPENAPPENDDATA:
- {
- ReturnState = dLoaderOpenAppend(pFileName, pLength);
- if (LOADER_ERR(ReturnState) != SUCCESS)
- {
- dLoaderCloseHandle(ReturnState);
- }
- }
- break;
- case CLOSE:
- {
- ReturnState = dLoaderCloseHandle(*pFileName);
- }
- break;
- case CROPDATAFILE:
- {
- ReturnState = dLoaderCropDatafile(*pFileName);
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
- }
- break;
- case READ:
- {
- ReturnState = dLoaderRead(*pFileName, pBuffer, pLength);
- }
- break;
- case WRITE:
- {
- ReturnState = dLoaderWriteData(*pFileName, pBuffer, (UWORD*)pLength);
- }
- break;
- case FINDFIRST:
- {
- ULONG DataLength;
-
- ReturnState = dLoaderFind(pFileName, pBuffer, pLength, &DataLength, (UBYTE) SEARCHING);
- if (0x8000 <= ReturnState)
- {
- dLoaderCloseHandle(ReturnState);
- }
- }
- break;
- case FINDNEXT:
- {
- UWORD Handle;
- ULONG DataLength;
-
- Handle = *pFileName;
- ReturnState = dLoaderFindNext(Handle, pBuffer, pLength, &DataLength);
- }
- break;
- case DELETE:
- {
- ReturnState = dLoaderDelete(pFileName);
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
-
- }
- break;
- case DELETEUSERFLASH:
- {
- dLoaderDeleteAllFiles();
- IOMapLoader.FreeUserFlash = dLoaderReturnFreeUserFlash();
-
- }
- break;
-
- case FINDFIRSTMODULE:
- {
- if (FALSE == VarsLoader.IoMapHandle)
- {
- VarsLoader.IoMapHandle = TRUE;
- VarsLoader.ModSearchIndex = 0;
- dLoaderInsertSearchStr(VarsLoader.ModSearchStr, pFileName, &(VarsLoader.ModSearchType));
- ReturnState = cLoaderFindModule(pBuffer);
- }
- else
- {
- ReturnState = NOMOREHANDLES;
- }
- }
- break;
-
- case FINDNEXTMODULE:
- {
- ReturnState = cLoaderFindModule(pBuffer);
- }
- break;
-
- case CLOSEMODHANDLE:
- {
- VarsLoader.IoMapHandle = FALSE;
- ReturnState = SUCCESS;
- }
- break;
-
- case IOMAPREAD:
- {
-
- UBYTE *pIoMap;
- ULONG Ptr;
- UWORD IoMapSize;
- UBYTE Tmp;
-
- pIoMap = NULL;
- ReturnState = cLoaderGetIoMapInfo((*(ULONG*)(pFileName)),(UBYTE*)(&pIoMap), &IoMapSize);
-
- /* Did we have a valid module ID ?*/
- if (SUCCESS == LOADER_ERR(ReturnState))
- {
-
- /* This is the offset */
- Ptr = pBuffer[0];
- Ptr |= (UWORD)pBuffer[1] << 8;
-
- /* is the offset within the limits of the iomap size? */
- if ((Ptr + *pLength) <= IoMapSize)
- {
-
- /* Add the offset to the pointer */
- pIoMap += Ptr;
-
- for (Tmp = 0; Tmp < *pLength; Tmp++)
- {
- pBuffer[Tmp + 2] = *pIoMap;
- pIoMap++;
- }
- }
- else
- {
-
- /* Error - not within the bounderies */
- ReturnState = OUTOFBOUNDERY;
- *pLength = 0;
- }
- }
- else
- {
-
- /* Error - not a valid module id */
- *pLength = 0;
- }
- }
- break;
-
- case IOMAPWRITE:
- {
- UBYTE *pIoMap;
- ULONG Ptr;
- UWORD IoMapSize;
- UWORD Tmp;
-
-
- pIoMap = NULL;
- ReturnState = cLoaderGetIoMapInfo(*((ULONG*)pFileName), (UBYTE*)&pIoMap, &IoMapSize);
-
- if (LOADER_ERR(ReturnState) == SUCCESS)
- {
-
- /* This is the offset */
- Ptr = *pBuffer;
- pBuffer++;
- Tmp = *pBuffer;
- Ptr |= Tmp << 8;
- pBuffer++;
-
- if ((Ptr + *pLength) <= IoMapSize)
- {
-
- pIoMap += Ptr;
- for (Tmp = 0; Tmp < *pLength; Tmp++)
- {
- *pIoMap = pBuffer[Tmp];
- pIoMap++;
- }
- }
- else
- {
-
- /* Error - not within the bounderies */
- ReturnState = OUTOFBOUNDERY;
- *pLength = 0;
- }
- }
- else
- {
-
- /* Error - not a valid module id */
- *pLength = 0;
- }
- }
- break;
-
- case RENAMEFILE:
- {
- UBYTE FoundName[FILENAME_LENGTH + 1];
-
- /* Check for file exists*/
- ReturnState = dLoaderFind(pBuffer, FoundName, pLength, pLength, (UBYTE) SEARCHING);
- dLoaderCloseHandle(LOADER_HANDLE(ReturnState));
- if (FILENOTFOUND == LOADER_ERR(ReturnState))
- {
- ReturnState = dLoaderFind(pFileName, FoundName, pLength, pLength, (UBYTE) SEARCHING);
- if (ReturnState < 0x8000)
- {
- ReturnState = dLoaderCheckFiles((UBYTE) ReturnState);
- if (ReturnState < 0x8000)
- {
- dLoaderRenameFile((UBYTE) ReturnState, pBuffer);
- }
- }
- dLoaderCloseHandle(LOADER_HANDLE(ReturnState));
- }
- else
- {
- if (SUCCESS == LOADER_ERR(ReturnState))
- {
- ReturnState |= FILEEXISTS;
- }
- }
- }
- break;
-
- default:
- {
- }
- break;
- }
- return (ReturnState);
-}
-
-UWORD cLoaderGetIoMapInfo(ULONG ModuleId, UBYTE *pIoMap, UWORD *pIoMapSize)
-{
- UBYTE Tmp;
- UBYTE Exit;
- UWORD RtnVal;
-
- RtnVal = SUCCESS;
- Tmp = 0;
- Exit = FALSE;
- while((Tmp < 32) && (Exit == FALSE))
- {
- if ((*(pHeaders[Tmp])).ModuleID == ModuleId)
- {
- Exit = TRUE;
- }
- else
- {
- Tmp++;
- }
- }
-
- /* Did we have a valid module ID ?*/
- if (TRUE == Exit)
- {
- /* Get the pointer of the module io map */
- *((ULONG *)pIoMap) = (ULONG)((*(pHeaders[Tmp])).pIOMap);
- *pIoMapSize = (*(pHeaders[Tmp])).IOMapSize;
- }
- else
- {
- RtnVal = MODULENOTFOUND;
- }
-
- /* To avoid a warning - this is optimized away */
- *pIoMap = *pIoMap;
- return(RtnVal);
-}
-
-UWORD cLoaderFindModule(UBYTE *pBuffer)
-{
- UBYTE Tmp;
- UWORD RtnVal;
- UBYTE ModuleName[FILENAME_SIZE];
-
- RtnVal = MODULENOTFOUND;
-
- for (Tmp = VarsLoader.ModSearchIndex; Tmp < 32; Tmp++)
- {
- if (pHeaders[Tmp] != 0)
- {
-
- cLoaderGetModuleName(ModuleName, ((*(pHeaders[Tmp])).ModuleName));
- if (SUCCESS == dLoaderCheckName(ModuleName, VarsLoader.ModSearchStr, VarsLoader.ModSearchType))
- {
-
- dLoaderCopyFileName(pBuffer, ModuleName);
-
- pBuffer[FILENAME_SIZE] = (UBYTE) ((*(pHeaders[Tmp])).ModuleID);
- pBuffer[FILENAME_SIZE + 1] = (UBYTE)(((*(pHeaders[Tmp])).ModuleID) >> 8);
- pBuffer[FILENAME_SIZE + 2] = (UBYTE)(((*(pHeaders[Tmp])).ModuleID) >> 16);
- pBuffer[FILENAME_SIZE + 3] = (UBYTE)(((*(pHeaders[Tmp])).ModuleID) >> 24);
-
- pBuffer[FILENAME_SIZE + 4] = (UBYTE)(((*(pHeaders[Tmp])).ModuleSize));
- pBuffer[FILENAME_SIZE + 5] = (UBYTE)(((*(pHeaders[Tmp])).ModuleSize) >> 8);
- pBuffer[FILENAME_SIZE + 6] = (UBYTE)(((*(pHeaders[Tmp])).ModuleSize) >> 16);
- pBuffer[FILENAME_SIZE + 7] = (UBYTE)(((*(pHeaders[Tmp])).ModuleSize) >> 24);
-
- pBuffer[FILENAME_SIZE + 8] = (UBYTE) ((*(pHeaders[Tmp])).IOMapSize);
- pBuffer[FILENAME_SIZE + 9] = (UBYTE)(((*(pHeaders[Tmp])).IOMapSize) >> 8);
-
- RtnVal = SUCCESS;
- (VarsLoader.ModSearchIndex) = Tmp + 1;
- Tmp = 32;
- }
- }
- }
- return(RtnVal);
-}
-
-void cLoaderGetModuleName(UBYTE *pDst, UBYTE *pModule)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < FILENAME_SIZE; Tmp++)
- {
- if (0 != pModule[Tmp])
- {
- pDst[Tmp] = pModule[Tmp];
- }
- else
- {
- pDst[Tmp++] = '.';
- pDst[Tmp++] = 'm';
- pDst[Tmp++] = 'o';
- pDst[Tmp++] = 'd';
- pDst[Tmp] = '\0';
- Tmp = FILENAME_SIZE;
- }
- }
-}
-
-void cLoaderExit(void)
-{
-}
-
-
diff --git a/AT91SAM7S256/Source/c_loader.h b/AT91SAM7S256/Source/c_loader.h
deleted file mode 100644
index 03f8062..0000000
--- a/AT91SAM7S256/Source/c_loader.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_loader.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_load $
-//
-// Platform C
-//
-
-#ifndef C_LOADER
-#define C_LOADER
-
-enum
-{
- LOADER_BUSY,
- TOO_MANY_FILES,
- NO_MORE_FLASH,
- LOADER_SUCCESS
-};
-
-typedef struct
-{
- UBYTE ModSearchStr[FILENAME_LENGTH + 1];
- UBYTE ModSearchIndex;
- UBYTE ModSearchType;
- UBYTE UsbStatus;
- UBYTE IoMapHandle;
-}VARSLOADER;
-
-void cLoaderInit(void* pHeader);
-void cLoaderCtrl(void);
-void cLoaderExit(void);
-
-extern const HEADER cLoader;
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_loader.iom b/AT91SAM7S256/Source/c_loader.iom
deleted file mode 100644
index 80c8c4e..0000000
--- a/AT91SAM7S256/Source/c_loader.iom
+++ /dev/null
@@ -1,85 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-06-09 8:53 $
-//
-// Filename $Workfile:: c_loader.iom $
-//
-// Version $Revision:: 15 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_load $
-//
-// Platform C
-//
-
-#ifndef CLOADER_IOM
-#define CLOADER_IOM
-
-#define pMapLoader ((IOMAPLOADER*)(pHeaders[ENTRY_LOADER]->pIOMap))
-
-//Version numbers are two bytes, MAJOR.MINOR (big-endian)
-//For example, version 1.5 would be 0x0105
-//If these switch to little-endian, be sure to update
-//definition and usages of VM_OLDEST_COMPATIBLE_VERSION, too!
-#define FIRMWAREVERSION 0x011D // x.y
-#define FIRMWAREPATCH 2 // .z, the third number
-#define PROTOCOLVERSION 0x017C //1.124
-
-enum
-{
- OPENREAD = 0x80,
- OPENWRITE = 0x81,
- READ = 0x82,
- WRITE = 0x83,
- CLOSE = 0x84,
- DELETE = 0x85,
- FINDFIRST = 0x86,
- FINDNEXT = 0x87,
- VERSIONS = 0x88,
- OPENWRITELINEAR = 0x89,
- OPENREADLINEAR = 0x8A,
- OPENWRITEDATA = 0x8B,
- OPENAPPENDDATA = 0x8C,
- CROPDATAFILE = 0x8D, /* New cmd for datalogging */
- FINDFIRSTMODULE = 0x90,
- FINDNEXTMODULE = 0x91,
- CLOSEMODHANDLE = 0x92,
- IOMAPREAD = 0x94,
- IOMAPWRITE = 0x95,
- BOOTCMD = 0x97, /* external command only */
- SETBRICKNAME = 0x98,
- BTGETADR = 0x9A,
- DEVICEINFO = 0x9B,
- DELETEUSERFLASH = 0xA0,
- POLLCMDLEN = 0xA1,
- POLLCMD = 0xA2,
- RENAMEFILE = 0xA3,
- BTFACTORYRESET = 0xA4
-
-};
-
-typedef UWORD LOADER_STATUS;
-
-//Mask out handle byte of Loader status word for error code checks
-#define LOADER_ERR(StatusWord) ((StatusWord & 0xFF00))
-
-//Byte value of error half of Loader status word
-#define LOADER_ERR_BYTE(StatusWord) ((UBYTE)((StatusWord & 0xFF00) >> 8))
-
-//Value of handle inside Loader status word
-#define LOADER_HANDLE(StatusWord) ((UBYTE)(StatusWord))
-
-//Pointer to lower byte of Loader status word
-#define LOADER_HANDLE_P(StatusWord) ((UBYTE*)(&StatusWord))
-
-typedef struct
-{
- UWORD (*pFunc)(UBYTE, UBYTE *, UBYTE *, ULONG *);
- ULONG FreeUserFlash;
-}IOMAPLOADER;
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_lowspeed.c b/AT91SAM7S256/Source/c_lowspeed.c
deleted file mode 100644
index 26851db..0000000
--- a/AT91SAM7S256/Source/c_lowspeed.c
+++ /dev/null
@@ -1,236 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_lowspeed.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_lows $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "c_lowspeed.iom"
-#include "c_input.iom"
-#include "c_lowspeed.h"
-#include "d_lowspeed.h"
-
-static IOMAPLOWSPEED IOMapLowSpeed;
-static VARSLOWSPEED VarsLowSpeed;
-static HEADER **pHeaders;
-
-const UBYTE LOWSPEED_CH_NUMBER[4] = {0x01, 0x02, 0x04, 0x08};
-
-const HEADER cLowSpeed =
-{
- 0x000B0001L,
- "Low Speed",
- cLowSpeedInit,
- cLowSpeedCtrl,
- cLowSpeedExit,
- (void *)&IOMapLowSpeed,
- (void *)&VarsLowSpeed,
- (UWORD)sizeof(IOMapLowSpeed),
- (UWORD)sizeof(VarsLowSpeed),
- 0x0000 //Code size - not used so far
-};
-
-void cLowSpeedInit(void* pHeader)
-{
- pHeaders = pHeader;
-
- dLowSpeedInit();
- IOMapLowSpeed.State = COM_CHANNEL_NONE_ACTIVE;
- VarsLowSpeed.TimerState = TIMER_STOPPED;
-}
-
-void cLowSpeedCtrl(void)
-{
- UBYTE Temp;
- UBYTE ChannelNumber = 0;
-
- if (IOMapLowSpeed.State != 0)
- {
- for (ChannelNumber = 0; ChannelNumber < NO_OF_LOWSPEED_COM_CHANNEL; ChannelNumber++)
- {
- //Lowspeed com is activated
- switch (IOMapLowSpeed.ChannelState[ChannelNumber])
- {
- case LOWSPEED_IDLE:
- {
- }
- break;
-
- case LOWSPEED_INIT:
- {
- if ((pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED) || (pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED_9V))
- {
- if (VarsLowSpeed.TimerState == TIMER_STOPPED)
- {
- dLowSpeedStartTimer();
- VarsLowSpeed.TimerState = TIMER_RUNNING;
- }
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_LOAD_BUFFER;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_NO_ERROR;
- VarsLowSpeed.ErrorCount[ChannelNumber] = 0;
- dLowSpeedInitPins(ChannelNumber);
- }
- else
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_CH_NOT_READY;
- }
- }
- break;
-
- case LOWSPEED_LOAD_BUFFER:
- {
- if ((pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED) || (pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED_9V))
- {
- VarsLowSpeed.OutputBuf[ChannelNumber].OutPtr = 0;
- for (VarsLowSpeed.OutputBuf[ChannelNumber].InPtr = 0; VarsLowSpeed.OutputBuf[ChannelNumber].InPtr < IOMapLowSpeed.OutBuf[ChannelNumber].InPtr; VarsLowSpeed.OutputBuf[ChannelNumber].InPtr++)
- {
- VarsLowSpeed.OutputBuf[ChannelNumber].Buf[VarsLowSpeed.OutputBuf[ChannelNumber].InPtr] = IOMapLowSpeed.OutBuf[ChannelNumber].Buf[IOMapLowSpeed.OutBuf[ChannelNumber].OutPtr];
- IOMapLowSpeed.OutBuf[ChannelNumber].OutPtr++;
- }
- if (dLowSpeedSendData(ChannelNumber, &VarsLowSpeed.OutputBuf[ChannelNumber].Buf[0], (VarsLowSpeed.OutputBuf[ChannelNumber].InPtr - VarsLowSpeed.OutputBuf[ChannelNumber].OutPtr)))
- {
- if (IOMapLowSpeed.InBuf[ChannelNumber].BytesToRx != 0)
- {
- dLowSpeedReceiveData(ChannelNumber, &VarsLowSpeed.InputBuf[ChannelNumber].Buf[0], IOMapLowSpeed.InBuf[ChannelNumber].BytesToRx);
- VarsLowSpeed.RxTimeCnt[ChannelNumber] = 0;
- }
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_COMMUNICATING;
- IOMapLowSpeed.Mode[ChannelNumber] = LOWSPEED_TRANSMITTING;
- }
- else
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_CH_NOT_READY;
- }
- }
- else
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_CH_NOT_READY;
- }
- }
- break;
-
- case LOWSPEED_COMMUNICATING:
- {
- if ((pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED) || (pMapInput->Inputs[ChannelNumber].SensorType == LOWSPEED_9V))
- {
- if (IOMapLowSpeed.Mode[ChannelNumber] == LOWSPEED_TRANSMITTING)
- {
- Temp = dLowSpeedComTxStatus(ChannelNumber); // Returns 0x00 if not done, 0x01 if success, 0xFF if error
-
- if (Temp == LOWSPEED_COMMUNICATION_SUCCESS)
- {
- if (IOMapLowSpeed.InBuf[ChannelNumber].BytesToRx != 0)
- {
- IOMapLowSpeed.Mode[ChannelNumber] = LOWSPEED_RECEIVING;
- }
- else
- {
- IOMapLowSpeed.Mode[ChannelNumber] = LOWSPEED_DATA_RECEIVED;
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_DONE;
- }
- }
- if (Temp == LOWSPEED_COMMUNICATION_ERROR)
- {
- //ERROR in Communication, No ACK received from SLAVE, retry send data 3 times!
- VarsLowSpeed.ErrorCount[ChannelNumber]++;
- if (VarsLowSpeed.ErrorCount[ChannelNumber] > MAX_RETRY_TX_COUNT)
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_TX_ERROR;
- }
- else
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_LOAD_BUFFER;
- }
- }
- }
- if (IOMapLowSpeed.Mode[ChannelNumber] == LOWSPEED_RECEIVING)
- {
- VarsLowSpeed.RxTimeCnt[ChannelNumber]++;
- if (VarsLowSpeed.RxTimeCnt[ChannelNumber] > LOWSPEED_RX_TIMEOUT)
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_RX_ERROR;
- }
- Temp = dLowSpeedComRxStatus(ChannelNumber);
- if (Temp == LOWSPEED_COMMUNICATION_SUCCESS)
- {
- for (VarsLowSpeed.InputBuf[ChannelNumber].OutPtr = 0; VarsLowSpeed.InputBuf[ChannelNumber].OutPtr < IOMapLowSpeed.InBuf[ChannelNumber].BytesToRx; VarsLowSpeed.InputBuf[ChannelNumber].OutPtr++)
- {
- IOMapLowSpeed.InBuf[ChannelNumber].Buf[IOMapLowSpeed.InBuf[ChannelNumber].InPtr] = VarsLowSpeed.InputBuf[ChannelNumber].Buf[VarsLowSpeed.InputBuf[ChannelNumber].OutPtr];
- IOMapLowSpeed.InBuf[ChannelNumber].InPtr++;
- if (IOMapLowSpeed.InBuf[ChannelNumber].InPtr >= SIZE_OF_LSBUF)
- {
- IOMapLowSpeed.InBuf[ChannelNumber].InPtr = 0;
- }
- VarsLowSpeed.InputBuf[ChannelNumber].Buf[VarsLowSpeed.InputBuf[ChannelNumber].OutPtr] = 0;
- }
- IOMapLowSpeed.Mode[ChannelNumber] = LOWSPEED_DATA_RECEIVED;
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_DONE;
- }
- if (Temp == LOWSPEED_COMMUNICATION_ERROR)
- {
- //There was and error in receiving data from the device
- for (VarsLowSpeed.InputBuf[ChannelNumber].OutPtr = 0; VarsLowSpeed.InputBuf[ChannelNumber].OutPtr < IOMapLowSpeed.InBuf[ChannelNumber].BytesToRx; VarsLowSpeed.InputBuf[ChannelNumber].OutPtr++)
- {
- VarsLowSpeed.InputBuf[ChannelNumber].Buf[VarsLowSpeed.InputBuf[ChannelNumber].OutPtr] = 0;
- }
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_RX_ERROR;
- }
- }
- }
- else
- {
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_ERROR;
- IOMapLowSpeed.ErrorType[ChannelNumber] = LOWSPEED_CH_NOT_READY;
- }
- }
- break;
-
- case LOWSPEED_ERROR:
- {
- IOMapLowSpeed.State = IOMapLowSpeed.State & ~LOWSPEED_CH_NUMBER[ChannelNumber];
- if (IOMapLowSpeed.State == 0)
- {
- dLowSpeedStopTimer();
- VarsLowSpeed.TimerState = TIMER_STOPPED;
- }
- }
- break;
-
- case LOWSPEED_DONE:
- {
- IOMapLowSpeed.State = IOMapLowSpeed.State & ~LOWSPEED_CH_NUMBER[ChannelNumber];
- IOMapLowSpeed.ChannelState[ChannelNumber] = LOWSPEED_IDLE;
- if (IOMapLowSpeed.State == 0)
- {
- dLowSpeedStopTimer();
- VarsLowSpeed.TimerState = TIMER_STOPPED;
- }
- }
- break;
-
- default:
- break;
- }
- }
- }
-}
-
-void cLowSpeedExit(void)
-{
- dLowSpeedExit();
-}
diff --git a/AT91SAM7S256/Source/c_lowspeed.h b/AT91SAM7S256/Source/c_lowspeed.h
deleted file mode 100644
index 1595158..0000000
--- a/AT91SAM7S256/Source/c_lowspeed.h
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_lowspeed.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_lows $
-//
-// Platform C
-//
-
-#ifndef C_LOWSPEED
-#define C_LOWSPEED
-
-#define LOWSPEED_RX_TIMEOUT 100
-#define LOWSPEED_COMMUNICATION_SUCCESS 0x01
-#define LOWSPEED_COMMUNICATION_ERROR 0xFF
-#define SIZE_OF_LSBUFDATA 16
-#define NO_OF_LOWSPEED_COM_CH 4
-
-enum
-{
- LOWSPEED_CHANNEL1,
- LOWSPEED_CHANNEL2,
- LOWSPEED_CHANNEL3,
- LOWSPEED_CHANNEL4
-};
-
-enum
-{
- TIMER_STOPPED,
- TIMER_RUNNING
-};
-
-typedef struct
-{
- UBYTE Buf[SIZE_OF_LSBUFDATA];
- UBYTE InPtr;
- UBYTE OutPtr;
-}LSDATA;
-
-typedef struct
-{
- LSDATA OutputBuf[NO_OF_LOWSPEED_COM_CH];
- LSDATA InputBuf[NO_OF_LOWSPEED_COM_CH];
- UBYTE RxTimeCnt[NO_OF_LOWSPEED_COM_CH];
- UBYTE ErrorCount[NO_OF_LOWSPEED_COM_CH];
- UBYTE Tmp;
- UBYTE TimerState;
-}VARSLOWSPEED;
-
-void cLowSpeedInit(void* pHeader);
-void cLowSpeedCtrl(void);
-void cLowSpeedExit(void);
-
-extern const HEADER cLowSpeed;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_lowspeed.iom b/AT91SAM7S256/Source/c_lowspeed.iom
deleted file mode 100644
index 290ed35..0000000
--- a/AT91SAM7S256/Source/c_lowspeed.iom
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_lowspeed.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_lows $
-//
-// Platform C
-//
-
-#ifndef CLOWSPEED_IOM
-#define CLOWSPEED_IOM
-
-#define pMapLowSpeed ((IOMAPLOWSPEED*)(pHeaders[ENTRY_LOWSPEED]->pIOMap))
-
-#define MAX_RETRY_TX_COUNT 3
-#define NO_OF_LOWSPEED_COM_CHANNEL 4
-#define NO_OF_LSBUF NO_OF_LOWSPEED_COM_CHANNEL
-#define SIZE_OF_LSBUF 16
-
-//Constants referring to LowSpeedDeviceType
-enum
-{
- ULTRA_SONIC = 2,
- CUSTOM_LS_DEVICE
-};
-
-// Constants reffering to State
-enum
-{
- COM_CHANNEL_NONE_ACTIVE = 0x00,
- COM_CHANNEL_ONE_ACTIVE = 0x01,
- COM_CHANNEL_TWO_ACTIVE = 0x02,
- COM_CHANNEL_THREE_ACTIVE = 0x04,
- COM_CHANNEL_FOUR_ACTIVE = 0x08
-};
-
-// Constants reffering to ChannelState
-enum
-{
- LOWSPEED_IDLE,
- LOWSPEED_INIT,
- LOWSPEED_LOAD_BUFFER,
- LOWSPEED_COMMUNICATING,
- LOWSPEED_ERROR,
- LOWSPEED_DONE
-};
-
-// Constants reffering to Mode
-enum
-{
- LOWSPEED_TRANSMITTING = 1,
- LOWSPEED_RECEIVING,
- LOWSPEED_DATA_RECEIVED
-};
-
-// Constants reffering to ErrorType
-enum
-{
- LOWSPEED_NO_ERROR = 0,
- LOWSPEED_CH_NOT_READY,
- LOWSPEED_TX_ERROR,
- LOWSPEED_RX_ERROR
-};
-
-
-typedef struct
-{
- UBYTE Buf[SIZE_OF_LSBUF];
- UBYTE InPtr;
- UBYTE OutPtr;
- UBYTE BytesToRx;
-}LSBUF;
-
-typedef struct
-{
- LSBUF InBuf[NO_OF_LSBUF];
- LSBUF OutBuf[NO_OF_LSBUF];
- UBYTE Mode[NO_OF_LSBUF];
- UBYTE ChannelState[NO_OF_LSBUF];
- UBYTE ErrorType[NO_OF_LSBUF];
- UBYTE State;
- UBYTE Speed;
- UBYTE Spare1;
-}IOMAPLOWSPEED;
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_output.c b/AT91SAM7S256/Source/c_output.c
deleted file mode 100644
index e0645e0..0000000
--- a/AT91SAM7S256/Source/c_output.c
+++ /dev/null
@@ -1,180 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_output.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_outp $
-//
-// Platform C
-//
-
-#include <stdio.h>
-#include "stdbool.h"
-#include "stdconst.h"
-#include "modules.h"
-#include "c_output.iom"
-#include "c_output.h"
-#include "d_output.h"
-#include "c_display.iom"
-
-static IOMAPOUTPUT IOMapOutput;
-static VARSOUTPUT VarsOutput;
-
-const HEADER cOutput =
-{
- 0x00020001L,
- "Output",
- cOutputInit,
- cOutputCtrl,
- cOutputExit,
- (void *)&IOMapOutput,
- (void *)&VarsOutput,
- (UWORD)sizeof(IOMapOutput),
- (UWORD)sizeof(VarsOutput),
- 0x0000 //Code size - not used so far
-};
-
-
-void cOutputInit(void* pHeader)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < NO_OF_OUTPUTS; Tmp++)
- {
- OUTPUT * pOut = &(IOMapOutput.Outputs[Tmp]);
- pOut->Mode = 0x00;
- pOut->Speed = 0x00;
- pOut->ActualSpeed = 0x00;
- pOut->TachoCnt = 0x00;
- pOut->RunState = 0x00;
- pOut->TachoLimit = 0x00;
- pOut->RegPParameter = DEFAULT_P_GAIN_FACTOR;
- pOut->RegIParameter = DEFAULT_I_GAIN_FACTOR;
- pOut->RegDParameter = DEFAULT_D_GAIN_FACTOR;
- pOut->Options = 0x00;
- pOut->MaxSpeed = DEFAULT_MAX_SPEED;
- pOut->MaxAcceleration = DEFAULT_MAX_ACCELERATION;
- }
- IOMapOutput.RegulationTime = REGULATION_TIME;
- IOMapOutput.RegulationOptions = 0;
- VarsOutput.TimeCnt = 0;
- dOutputInit();
-}
-
-void cOutputCtrl(void)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < NO_OF_OUTPUTS; Tmp++)
- {
- OUTPUT * pOut = &(IOMapOutput.Outputs[Tmp]);
- if (pOut->Flags != 0)
- {
- if (pOut->Flags & UPDATE_RESET_ROTATION_COUNT)
- {
- pOut->Flags &= ~UPDATE_RESET_ROTATION_COUNT;
- dOutputResetRotationCaptureCount(Tmp);
- }
- if (pOut->Flags & UPDATE_RESET_COUNT)
- {
- pOut->Flags &= ~UPDATE_RESET_COUNT;
- dOutputResetTachoLimit(Tmp);
- }
- if (pOut->Flags & UPDATE_RESET_BLOCK_COUNT)
- {
- pOut->Flags &= ~UPDATE_RESET_BLOCK_COUNT;
- dOutputResetBlockTachoLimit(Tmp);
- }
- if (pOut->Flags & UPDATE_SPEED)
- {
- pOut->Flags &= ~UPDATE_SPEED;
- if (pOut->Mode & MOTORON)
- {
- dOutputSetSpeed(Tmp, pOut->RunState, pOut->Speed, pOut->SyncTurnParameter);
- }
- }
- if (pOut->Flags & UPDATE_MODE)
- {
- pOut->Flags &= ~UPDATE_MODE;
- if (pOut->Mode & BRAKE)
- {
- // Motor is Braked
- dOutputSetMode(Tmp, BRAKE);
- }
- else
- {
- // Motor is floated
- dOutputSetMode(Tmp, 0x00);
- }
- if (pOut->Mode & MOTORON)
- {
- if (pOut->Mode & REGULATED)
- {
- dOutputEnableRegulation(Tmp, pOut->RegMode);
- }
- else
- {
- dOutputDisableRegulation(Tmp);
- }
- }
- else
- {
- dOutputSetSpeed(Tmp, 0x00, 0x00, 0x00);
- dOutputDisableRegulation(Tmp);
- }
- }
- if (pOut->Flags & UPDATE_TACHO_LIMIT)
- {
- pOut->Flags &= ~UPDATE_TACHO_LIMIT;
- dOutputSetTachoLimit(Tmp, pOut->TachoLimit);
- }
- if (pOut->Flags & UPDATE_PID_VALUES)
- {
- pOut->Flags &= ~UPDATE_PID_VALUES;
- dOutputSetPIDParameters(Tmp, pOut->RegPParameter, pOut->RegIParameter, pOut->RegDParameter);
- dOutputSetMax(Tmp, pOut->MaxSpeed, pOut->MaxAcceleration);
- }
- }
- }
- dOutputSetRegulationTime(IOMapOutput.RegulationTime);
- dOutputSetRegulationOptions(IOMapOutput.RegulationOptions);
- dOutputCtrl();
- cOutputUpdateIomap();
-}
-
-void cOutputUpdateIomap(void)
-{
- UBYTE TempCurrentMotorSpeed[NO_OF_OUTPUTS];
- UBYTE TempRunState[NO_OF_OUTPUTS];
- UBYTE TempMotorOverloaded[NO_OF_OUTPUTS];
- SLONG TempTachoCount[NO_OF_OUTPUTS];
- SLONG TempBlockTachoCount[NO_OF_OUTPUTS];
- SLONG TempRotationCount[NO_OF_OUTPUTS];
-
- UBYTE Tmp;
-
- dOutputGetMotorParameters(TempCurrentMotorSpeed, TempTachoCount, TempBlockTachoCount, TempRunState, TempMotorOverloaded,TempRotationCount);
-
- for(Tmp = 0; Tmp < NO_OF_OUTPUTS; Tmp++)
- {
- OUTPUT * pOut = &(IOMapOutput.Outputs[Tmp]);
- pOut->ActualSpeed = TempCurrentMotorSpeed[Tmp];
- pOut->TachoCnt = TempTachoCount[Tmp];
- pOut->BlockTachoCount = TempBlockTachoCount[Tmp];
- pOut->RotationCount = TempRotationCount[Tmp];
- pOut->Overloaded = TempMotorOverloaded[Tmp];
- if (!(pOut->Flags & PENDING_UPDATES))
- {
- pOut->RunState = TempRunState[Tmp];
- }
- }
-}
-
-void cOutputExit(void)
-{
- dOutputExit();
-}
diff --git a/AT91SAM7S256/Source/c_output.h b/AT91SAM7S256/Source/c_output.h
deleted file mode 100644
index 14faa2c..0000000
--- a/AT91SAM7S256/Source/c_output.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_output.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_outp $
-//
-// Platform C
-//
-
-#ifndef C_OUTPUT
-#define C_OUTPUT
-
-typedef struct
-{
- UBYTE TimeCnt;
- UBYTE Tmp;
-}VARSOUTPUT;
-
-void cOutputInit(void* pHeader);
-void cOutputCtrl(void);
-void cOutputExit(void);
-void cOutputUpdateIomap(void);
-
-extern const HEADER cOutput;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_output.iom b/AT91SAM7S256/Source/c_output.iom
deleted file mode 100644
index 276bcba..0000000
--- a/AT91SAM7S256/Source/c_output.iom
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_output.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_outp $
-//
-// Platform C
-//
-
-#ifndef COUTPUT_IOM
-#define COUTPUT_IOM
-
-#define NO_OF_OUTPUTS 3
-#define pMapOutPut ((IOMAPOUTPUT*)(pHeaders[ENTRY_OUTPUT]->pIOMap))
-
-// Constants reffering to mode
-enum
-{
- MOTORON = 0x01,
- BRAKE = 0x02,
- REGULATED = 0x04,
- REG_METHOD = 0xF0 /* Regulation methods - to be designed! */
-};
-
-// Constants related to Flags
-enum
-{
- UPDATE_MODE = 0x01,
- UPDATE_SPEED = 0x02,
- UPDATE_TACHO_LIMIT = 0x04,
- UPDATE_RESET_COUNT = 0x08,
- UPDATE_PID_VALUES = 0x10,
- UPDATE_RESET_BLOCK_COUNT = 0x20,
- UPDATE_RESET_ROTATION_COUNT = 0x40,
- PENDING_UPDATES = 0x80
-};
-
-// Constant related to RunState
-#define MOTOR_RUN_STATE_IDLE 0x00
-#define MOTOR_RUN_STATE_RAMPUP 0x10
-#define MOTOR_RUN_STATE_RUNNING 0x20
-#define MOTOR_RUN_STATE_RAMPDOWN 0x40
-
-// Constant related to RegMode
-enum
-{
- REGULATION_MODE_IDLE = 0,
- REGULATION_MODE_MOTOR_SPEED = 1,
- REGULATION_MODE_MOTOR_SYNC = 2,
- REGULATION_MODE_MOTOR_POS = 4,
-};
-
-typedef struct
-{
- SLONG TachoCnt; /* R - Holds current number of counts, since last reset, updated every 1 mS */
- SLONG BlockTachoCount; /* R - Holds current number of counts for the current output block */
- SLONG RotationCount; /* R - Holds current number of counts for the rotation counter to the output */
- ULONG TachoLimit; /* RW - Holds number of counts to travel, 0 => Run forever */
- SWORD MotorRPM; /* !! Is not updated, will be removed later !! */
- UBYTE Flags; /* RW - Holds flags for which data should be updated */
- UBYTE Mode; /* RW - Holds motor mode: Run, Break, regulated, ... */
- SBYTE Speed; /* RW - Holds the wanted speed */
- SBYTE ActualSpeed; /* R - Holds the current motor speed */
- UBYTE RegPParameter; /* RW - Holds the P-constant use din the regulation, Is set to a default value at init => Setting this value is optional for the user */
- UBYTE RegIParameter; /* RW - Holds the I-constant use din the regulation, Is set to a default value at init => Setting this value is optional for the user */
- UBYTE RegDParameter; /* RW - Holds the D-constant use din the regulation, Is set to a default value at init => Setting this value is optional for the user */
- UBYTE RunState; /* RW - Holds the current RunState in the output module */
- UBYTE RegMode; /* RW - Tells which regulation mode should be used */
- UBYTE Overloaded; /* R - True if the motor has been overloaded within speed control regulation */
- SBYTE SyncTurnParameter; /* RW - Holds the turning parameter need within MoveBlock */
- UBYTE Options;
- SBYTE MaxSpeed; /* RW - Maximum speed for absolute regulation, or 0 for no limit */
- SBYTE MaxAcceleration; /* RW - Maximum acceleration for absolute regulation, or 0 for no limit */
-}OUTPUT;
-
-
-typedef struct
-{
- OUTPUT Outputs[NO_OF_OUTPUTS];
- UBYTE RegulationTime; /* RW - Interval between regulation computations */
- UBYTE RegulationOptions; /* RW - Options for regulation, see REGOPTION_* */
-}IOMAPOUTPUT;
-
-
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/c_sound.c b/AT91SAM7S256/Source/c_sound.c
deleted file mode 100644
index 9d0a81d..0000000
--- a/AT91SAM7S256/Source/c_sound.c
+++ /dev/null
@@ -1,309 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_sound.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_soun $
-//
-// Platform C
-//
-
-#include <stdlib.h>
-#include <string.h>
-#include "stdconst.h"
-#include "modules.h"
-#include "c_sound.iom"
-#include "c_loader.iom"
-#include "c_sound.h"
-#include "d_sound.h"
-
-static IOMAPSOUND IOMapSound;
-static VARSSOUND VarsSound;
-static HEADER **pHeaders;
-
-const HEADER cSound =
-{
- 0x00080001L,
- "Sound",
- cSoundInit,
- cSoundCtrl,
- cSoundExit,
- (void *)&IOMapSound,
- (void *)&VarsSound,
- (UWORD)sizeof(IOMapSound),
- (UWORD)sizeof(VarsSound),
- 0x0000 //Code size - not used so far
-};
-
-
-UWORD cSoundFile(UBYTE Cmd,UBYTE *pFile,UBYTE *pData,ULONG *pLng)
-{
- return (pMapLoader->pFunc(Cmd,pFile,pData,pLng));
-}
-
-
-void cSoundInit(void* pHeader)
-{
- pHeaders = pHeader;
- IOMapSound.Flags &= ~SOUND_UPDATE;
- IOMapSound.Flags &= ~SOUND_RUNNING;
- IOMapSound.State = SOUND_IDLE;
- IOMapSound.Mode = SOUND_ONCE;
- IOMapSound.Volume = SOUNDVOLUMESTEPS;
- IOMapSound.SampleRate = 0;
- IOMapSound.SoundFilename[0] = 0;
- VarsSound.BufferIn = 0;
- VarsSound.BufferOut = 0;
- dSoundInit();
-}
-
-void cSoundCtrl(void)
-{
- static UWORD FileFormat;
- static UBYTE SoundFilename[FILENAME_LENGTH + 1];
- UWORD Handle;
- ULONG Length;
- UBYTE Header[FILEHEADER_LENGTH];
- UBYTE In,Out,Tmp;
-
- In = VarsSound.BufferIn;
- Out = VarsSound.BufferOut;
-
- if ((IOMapSound.Flags & SOUND_UPDATE))
- {
-// Check if valid update
- if (!(SOUND_TONE & IOMapSound.Mode))
- {
- Handle = pMapLoader->pFunc(FINDFIRST,IOMapSound.SoundFilename,SoundFilename,&Length);
- if (!(Handle & 0x8000))
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&Handle,NULL,NULL);
- }
- else
- {
- IOMapSound.Flags &= ~SOUND_UPDATE;
- }
- }
- if ((IOMapSound.Flags & SOUND_UPDATE))
- {
-// Check for open file
- if (!(VarsSound.File & 0x8000))
- {
- cSoundFile(CLOSE,(UBYTE*)&VarsSound.File,NULL,NULL);
- VarsSound.File = 0x8000;
- }
-
- IOMapSound.Flags &= ~SOUND_UPDATE;
-
- if ((SOUND_TONE & IOMapSound.Mode))
- {
- dSoundFreq(IOMapSound.Freq,IOMapSound.Duration,IOMapSound.Volume);
- IOMapSound.State = SOUND_FREQ;
- }
- else
- {
- if (IOMapSound.Flags & SOUND_RUNNING)
- {
- dSoundStop();
- IOMapSound.Flags &= ~SOUND_RUNNING;
- }
- VarsSound.File = pMapLoader->pFunc(OPENREAD,SoundFilename,NULL,&Length);
- if (!(VarsSound.File & 0x8000))
- {
- Length = FILEHEADER_LENGTH;
- pMapLoader->pFunc(READ,(UBYTE*)&VarsSound.File,Header,&Length);
- if (Length == FILEHEADER_LENGTH)
- {
- FileFormat = ((UWORD)Header[0] << 8) + (UWORD)Header[1];
-
- if (FILEFORMAT_SOUND == (FileFormat & 0xFF00))
- {
- if (IOMapSound.SampleRate)
- {
- VarsSound.SampleRate = IOMapSound.SampleRate;
- IOMapSound.SampleRate = 0;
- }
- else
- {
- VarsSound.SampleRate = ((UWORD)Header[4] << 8) + (UWORD)Header[5];
- }
- dSoundVolume(IOMapSound.Volume);
- Length = SOUNDBUFFERSIZE;
- pMapLoader->pFunc(READ,(UBYTE*)&VarsSound.File,VarsSound.Buffer[In],&Length);
- VarsSound.Length[In] = (UWORD)Length;
- In++;
- if (In >= SOUNDBUFFERS)
- {
- In = 0;
- }
- IOMapSound.State = SOUND_BUSY;
- }
- else
- {
- if (FILEFORMAT_MELODY == FileFormat)
- {
- Length = SOUNDBUFFERSIZE;
- pMapLoader->pFunc(READ,(UBYTE*)&VarsSound.File,VarsSound.Buffer[In],&Length);
- VarsSound.Length[In] = (UWORD)Length;
- In++;
- if (In >= SOUNDBUFFERS)
- {
- In = 0;
- }
- IOMapSound.State = SOUND_BUSY;
- }
- else
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsSound.File,NULL,NULL);
- }
- }
- }
- }
- }
- }
- }
-
- switch (IOMapSound.State)
- {
- case SOUND_BUSY :
- {
- IOMapSound.Flags |= SOUND_RUNNING;
- if (In != Out)
- {
- if ((FILEFORMAT_SOUND == FileFormat) || (FILEFORMAT_SOUND_COMPRESSED == FileFormat))
- {
- if (dSoundStart(VarsSound.Buffer[Out],VarsSound.Length[Out],VarsSound.SampleRate,(UBYTE)(FileFormat & 0x00FF)) == TRUE)
- {
- Out++;
- if (Out >= SOUNDBUFFERS)
- {
- Out = 0;
- }
- }
- }
- else
- {
- if (dSoundTone(VarsSound.Buffer[Out],VarsSound.Length[Out],IOMapSound.Volume) == TRUE)
- {
- Out++;
- if (Out >= SOUNDBUFFERS)
- {
- Out = 0;
- }
- }
- }
- }
-
- Tmp = In;
- Tmp++;
- if (Tmp >= SOUNDBUFFERS)
- {
- Tmp = 0;
- }
-
- if (Tmp != Out)
- {
- Tmp++;
- if (Tmp >= SOUNDBUFFERS)
- {
- Tmp = 0;
- }
- if (Tmp != Out)
- {
- Length = SOUNDBUFFERSIZE;
- Handle = cSoundFile(READ,(UBYTE*)&VarsSound.File,VarsSound.Buffer[In],&Length);
- if ((Handle & 0x8000))
- {
- Length = 0L;
- }
- VarsSound.Length[In] = (UWORD)Length;
- if (VarsSound.Length[In] == 0)
- {
- if (SOUND_LOOP == IOMapSound.Mode)
- {
- if (!(IOMapSound.Flags & SOUND_UPDATE))
- {
- cSoundFile(CLOSE,(UBYTE*)&VarsSound.File,NULL,NULL);
- VarsSound.File = cSoundFile(OPENREAD,SoundFilename,NULL,&Length);
- Length = FILEHEADER_LENGTH;
- cSoundFile(READ,(UBYTE*)&VarsSound.File,Header,&Length);
- Length = SOUNDBUFFERSIZE;
- cSoundFile(READ,(UBYTE*)&VarsSound.File,VarsSound.Buffer[In],&Length);
- VarsSound.Length[In] = (UWORD)Length;
- }
- }
- }
- if (VarsSound.Length[In] != 0)
- {
- In++;
- if (In >= SOUNDBUFFERS)
- {
- In = 0;
- }
- }
- if (VarsSound.Length[Out] == 0)
- {
- if (!(VarsSound.File & 0x8000))
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsSound.File,NULL,NULL);
- VarsSound.File = 0x8000;
- }
- IOMapSound.Flags &= ~SOUND_RUNNING;
- IOMapSound.State = SOUND_IDLE;
- }
- }
- }
- }
- break;
-
- case SOUND_FREQ :
- {
- IOMapSound.Flags |= SOUND_RUNNING;
- if (dSoundReady() == TRUE)
- {
- if (SOUND_LOOP & IOMapSound.Mode)
- {
- dSoundFreq(IOMapSound.Freq,IOMapSound.Duration,IOMapSound.Volume);
- }
- else
- {
- IOMapSound.Flags &= ~SOUND_RUNNING;
- IOMapSound.State = SOUND_IDLE;
- }
- }
- }
- break;
-
- case SOUND_STOP :
- {
- dSoundStop();
- if (!(VarsSound.File & 0x8000))
- {
- pMapLoader->pFunc(CLOSE,(UBYTE*)&VarsSound.File,NULL,NULL);
- VarsSound.File = 0x8000;
- }
- IOMapSound.Flags &= ~SOUND_RUNNING;
- IOMapSound.State = SOUND_IDLE;
- Out = In;
- }
- break;
-
- }
-
- VarsSound.BufferIn = In;
- VarsSound.BufferOut = Out;
-}
-
-
-void cSoundExit(void)
-{
- dSoundExit();
-}
diff --git a/AT91SAM7S256/Source/c_sound.h b/AT91SAM7S256/Source/c_sound.h
deleted file mode 100644
index ebdbb9a..0000000
--- a/AT91SAM7S256/Source/c_sound.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_sound.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_soun $
-//
-// Platform C
-//
-
-
-#ifndef C_SOUND
-#define C_SOUND
-
-#define SOUNDBUFFERSIZE 64 // Flash Sector size ?
-#define SOUNDBUFFERS 3 // Min 3 - max 255
-
-
-typedef struct
-{
- UWORD Length[SOUNDBUFFERS];
- UWORD File;
- UWORD SampleRate;
- UBYTE Buffer[SOUNDBUFFERS][SOUNDBUFFERSIZE];
- UBYTE BufferIn;
- UBYTE BufferOut;
- UBYTE BufferTmp;
-}VARSSOUND;
-
-void cSoundInit(void* pHeaders);
-void cSoundCtrl(void);
-void cSoundExit(void);
-
-extern const HEADER cSound;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_sound.iom b/AT91SAM7S256/Source/c_sound.iom
deleted file mode 100644
index ec12076..0000000
--- a/AT91SAM7S256/Source/c_sound.iom
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: c_sound.iom $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_soun $
-//
-// Platform C
-//
-
-#ifndef CSOUND_IOM
-#define CSOUND_IOM
-
-#define pMapSound ((IOMAPSOUND*)(pHeaders[ENTRY_SOUND]->pIOMap))
-
-
-/* HOW TO
-
-Start a sound file strcpy((char*)pMapSound->SoundFilename,"xxxxxxx.rso");
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_ONCE;
- pMapSound->Flags |= SOUND_UPDATE;
-
-
-Start and loop a sound file strcpy((char*)pMapSound->SoundFilename,"xxxxxxx.rso");
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_LOOP;
- pMapSound->Flags |= SOUND_UPDATE;
-
-
-Start a tone pMapSound->Freq = 440;
- pMapSound->Duration = 1000;
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_TONE;
- pMapSound->Flags |= SOUND_UPDATE;
-
-
-Start and loop a tone pMapSound->Freq = 440;
- pMapSound->Duration = 1000;
- pMapSound->Volume = IOMapUi.Volume;
- pMapSound->Mode = SOUND_TONE | SOUND_LOOP;
- pMapSound->Flags |= SOUND_UPDATE;
-
-
-
-Test for sound finished if (!(pMapSound->Flags & (SOUND_RUNNING | SOUND_UPDATE)))
- {
- // FINISHED
- }
-
-
-Abort sound or tone pMapSound->State = SOUND_STOP;
-
-
-**** Start always abort running sound or tone ****
-
-
-
-*/
-
-// Constants related to Flags
-enum
-{
- SOUND_UPDATE = 0x01, // W - Make changes take effect
- SOUND_RUNNING = 0x02 // R - Processing tone or file
-};
-
-// Constants related to State
-enum
-{
- SOUND_IDLE = 0x00, // R - Idle, ready for start sound (SOUND_UPDATE)
- SOUND_BUSY = 0x02, // R - Processing file of sound/melody data
- SOUND_FREQ = 0x03, // R - Processing play tone request
- SOUND_STOP = 0x04 // W - Stop sound imedately and close hardware
-};
-
-// Constants related to Mode
-enum
-{
- SOUND_ONCE = 0x00, // W - Only play file once
- SOUND_LOOP = 0x01, // W - Play file until writing "SOUND_STOP" into "State" or new "update"
- SOUND_TONE = 0x02 // W - Play tone specified in Freq for Duration ms
-};
-
-typedef struct
-{
- UWORD Freq; // RW - Tone frequency [Hz]
- UWORD Duration; // RW - Tone duration [mS]
- UWORD SampleRate; // RW - Sound file sample rate [2000..16000]
- UBYTE SoundFilename[FILENAME_LENGTH + 1]; // RW - Sound/melody filename
- UBYTE Flags; // RW - Play flag - descripted above
- UBYTE State; // RW - Play state - descriped above
- UBYTE Mode; // RW - Play mode - descriped above
- UBYTE Volume; // RW - Sound/melody volume [0..4] 0 = off
-}IOMAPSOUND;
-
-
-#endif
-
-
-
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;
-}
diff --git a/AT91SAM7S256/Source/c_ui.h b/AT91SAM7S256/Source/c_ui.h
deleted file mode 100644
index e0f8f4a..0000000
--- a/AT91SAM7S256/Source/c_ui.h
+++ /dev/null
@@ -1,387 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dktochpe $
-//
-// Revision date $Date:: 10/21/08 12:08p $
-//
-// Filename $Workfile:: c_ui.h $
-//
-// Version $Revision:: 10 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ui.h $
-//
-// Platform C
-//
-
-#ifndef C_UI
-#define C_UI
-
-#define DATALOGENABLED 1 // 1 == Datalog enable
-
-#define NO_OF_FEEDBACK_CHARS 12 // Chars left when bitmap also showed
-#define SIZE_OF_CURSOR 16 // Bitmap size of cursor (header + 8x8 pixels)
-#define SIZE_OF_PORTBITMAP 11 // Bitmap size of port no (header + 3x8 pixels)
-#define NO_OF_STATUSICONS 4 // Status icons
-
-#define NO_OF_INTROBITMAPS 16 // Intro bitmaps
-#define INTRO_START_TIME 1000 // Intro startup time [mS]
-#define INTRO_SHIFT_TIME 100 // Intro inter bitmap time [mS]
-#define INTRO_STOP_TIME 1000 // Intro stop time [mS]
-#define INTRO_LOWBATT_TIME 2000 // Low battery show time at power up [mS]
-
-#define MAX_VOLUME 4 // Max volume in UI [cnt]
-
-#define CHECKBYTE 0x78 // Used to validate NVData
-
-#define BATTERY_COUNT_TO_MV 13.848f // Battery count to mV factor [mV/cnt]
-#define LOW_BATT_THRESHOLD 6 // Low batt conunts before warning
-
-#define BUTTON_DELAY_TIME 800 // Delay before first repeat [mS]
-#define BUTTON_REPEAT_TIME 200 // Repeat time [mS]
-
-#define RUN_BITMAP_CHANGE_TIME 125 // Running bimap update time [mS]
-#define RUN_STATUS_CHANGE_TIME 167 // Running status update time [mS]
-
-#define DISPLAY_SHOW_ERROR_TIME 2500 // Error string show time [mS]
-#define DISPLAY_SHOW_TIME 1500 // Min. response display time [mS]
-#define DISPLAY_VIEW_UPDATE 200 // Display update time [mS]
-#define MIN_DISPLAY_UPDATE_TIME 50 // OBP min graphics update time [mS]
-#define MIN_SENSOR_READ_TIME 100 // Time between sensor reads [mS]
-
-#define ARM_WAIT_FOR_POWER_OFF 250 // Time for off command to execute [mS]
-
-#define DISPLAY_SHOW_FILENAME_TIME 3000 // Datalog show saves as time [mS]
-#define DATALOG_DEFAULT_SAMPLE_TIME 100L // Default time between samples [mS]
-
-// Menu special flags
-
-#define MENU_SKIP_THIS_MOTHER_ID 0x00000001L // Used to seek next common menu (i0000000)
- // Free
-#define MENU_ENTER_ACT_AS_EXIT 0x00000004L // Enter button acts as exit button
-#define MENU_BACK_TWICE 0x00000008L // Exit twice on exit button
-#define MENU_EXIT_ACT_AS_ENTER 0x00000010L // Exit button acts as enter button
-#define MENU_LEAVE_BACKGROUND 0x00000020L // Don't erase background at next menu
-#define MENU_EXIT_CALLS_WITH_FF 0x00000040L // Exit button calls function with MENU_EXIT
-#define MENU_EXIT_LEAVES_MENUFILE 0x00000080L // Exit leaves menu file
-#define MENU_INIT_CALLS_WITH_0 0x00000100L // Menu init calls with MENU_INIT
-#define MENU_LEFT_RIGHT_AS_CALL 0x00000200L // Left calls with MENU_LEFT and right with MENU_RIGHT
-#define MENU_ENTER_ONLY_CALLS 0x00000400L // Enter calls only it does not change menues
-#define MENU_EXIT_ONLY_CALLS 0x00000800L // Exit calls only it does not change menues
-#define MENU_AUTO_PRESS_ENTER 0x00001000L // Enter button is pressed automaticly
-#define MENU_ENTER_LEAVES_MENUFILE 0x00002000L // Enter leaves menufile
-#define MENU_INIT_CALLS 0x00004000L // Init calls instead of enter
-#define MENU_ACCEPT_INCOMMING_REQUEST 0x00008000L // Accept incomming BT connection request
-#define MENU_BACK_THREE_TIMES 0x00010000L // Exit three times on exit button
-#define MENU_EXIT_DISABLE 0x00020000L // Disable exit button
-#define MENU_EXIT_LOAD_POINTER 0x00040000L // Load item index on exit (0i000000)
-#define MENU_EXIT_CALLS 0x00080000L // Exit calls as enter
-#define MENU_INIT_CALLS_WITH_1 0x00100000L // Menu init calls with MENU_INIT
-#define MENU_EXIT_LOAD_MENU 0x00200000L // Exit loads next menu
-#define MENU_ONLY_BT_ON 0x00400000L // Only valid when bluecore is on
-#define MENU_ONLY_DATALOG_ENABLED 0x00800000L // Only valid when datalog is enabled
-
-// Menu function call parameter
-
-#define MENU_SENSOR_EMPTY 0x01 // Empty
-#define MENU_SENSOR_SOUND_DB 0x02 // Sound sensor dB
-#define MENU_SENSOR_SOUND_DBA 0x03 // Sound sensor dBA
-#define MENU_SENSOR_LIGHT 0x04 // Light sensor with flood light
-#define MENU_SENSOR_LIGHT_AMB 0x05 // Light sensor without flood light
-#define MENU_SENSOR_TOUCH 0x06 // Touch sensor
-#define MENU_SENSOR_MOTOR_DEG 0x07 // Motor sensor degrees
-#define MENU_SENSOR_MOTOR_ROT 0x08 // Motor sensor rotations
-#define MENU_SENSOR_ULTRASONIC_IN 0x09 // Ultrasonic sensor inch
-#define MENU_SENSOR_ULTRASONIC_CM 0x0A // Ultrasonic sensor cm
-#define MENU_SENSOR_IIC_TEMP_C 0x0B // IIC temp sensor celcius
-#define MENU_SENSOR_IIC_TEMP_F 0x0C // IIC temp sensor fahrenheit
-#define MENU_SENSOR_COLOR 0x0D // Color sensor
-#define MENU_SENSOR_INVALID 0x0E // Invalid
-
-#define MENU_PORT_EMPTY 0x11 // Port empty
-#define MENU_PORT_1 0x12 // Port 1
-#define MENU_PORT_2 0x13 // Port 2
-#define MENU_PORT_3 0x14 // Port 3
-#define MENU_PORT_4 0x15 // Port 4
-#define MENU_PORT_A 0x16 // Port A
-#define MENU_PORT_B 0x17 // Port B
-#define MENU_PORT_C 0x18 // Port C
-#define MENU_PORT_INVALID 0x19 // Invalid
-
-#define MENU_ACTION_EMPTY 0x21 // Empty
-#define MENU_ACTION_FORWARD_1 0x22 // Forward until
-#define MENU_ACTION_FORWARD_2 0x23 // Forward 5
-#define MENU_ACTION_BACK_LEFT_2 0x24 // Back left 2
-#define MENU_ACTION_TURN_LEFT_1 0x25 // Turn left until
-#define MENU_ACTION_TURN_LEFT_2 0x26 // Turn left 2
-#define MENU_ACTION_BACK_RIGHT_1 0x27 // Back right until
-#define MENU_ACTION_TURN_RIGHT_1 0x28 // Turn right until
-#define MENU_ACTION_TURN_RIGHT_2 0x29 // Turn right 2
-#define MENU_ACTION_BACK_LEFT_1 0x2A // Back left until
-#define MENU_ACTION_TONE_1 0x2B // Tone 1
-#define MENU_ACTION_TONE_2 0x2C // Tone 2
-#define MENU_ACTION_BACKWARD_1 0x2D // Backward until
-#define MENU_ACTION_BACKWARD_2 0x2E // Backward 5
-#define MENU_ACTION_BACK_RIGHT_2 0x2F // Back right 2
-#define MENU_ACTION_INVALID 0x30 // Invalid
-
-#define MENU_WAIT_EMPTY 0x41 // Empty
-#define MENU_WAIT_LIGHT 0x42 // Light
-#define MENU_WAIT_SEEK_OBJ 0x43 // Seek obj.
-#define MENU_WAIT_SOUND 0x44 // Sound
-#define MENU_WAIT_TOUCH 0x45 // Touch
-#define MENU_WAIT_1 0x46 // Wait 2
-#define MENU_WAIT_2 0x47 // Wait 5
-#define MENU_WAIT_3 0x48 // Wait 10
-#define MENU_WAIT_DARK 0x49 // Dark
-#define MENU_WAIT_INVALID 0x4A // Invalid
-
-#define MENU_INIT 0x00 // Init
-#define MENU_INIT_ALTERNATIVE 0x01 // Init alternative
-#define MENU_DRAW 0xE9 // Draw
-#define MENU_OFF 0xEA // Off
-#define MENU_ON 0xEB // On
-#define MENU_OPEN_STREAM 0xEC // Open stream
-#define MENU_OVERWRITE 0xED // Overwrite file
-#define MENU_CALCULATE 0xEE // Calculate
-#define MENU_ENTER 0xEF // Enter
-#define MENU_DISCONNECT 0xF0 // Disconnect BT
-#define MENU_DELETE 0xF1 // Delete
-#define MENU_SELECT 0xF2 // Select
-#define MENU_RUN_SILENT 0xF3 // Run without graphics
-#define MENU_TOGGLE 0xF4 // Toggle
-#define MENU_CONNECT 0xF5 // Connect BT
-#define MENU_UPDATE 0xF6 // Update
-#define MENU_TEXT 0xF7 // Text
-#define MENU_RUN 0xF8 // Run
-#define MENU_SEND 0xF9 // Send
-#define MENU_SAVE 0xFA // Save
-#define MENU_STOP 0xFB // Stop
-#define MENU_LOOP 0xFC // Loop
-#define MENU_LEFT 0xFD // Left
-#define MENU_RIGHT 0xFE // Right
-#define MENU_EXIT 0xFF // Exit
-
-#define DATALOGPORTS (MENU_PORT_INVALID - MENU_PORT_EMPTY - 1)
-#define MAX_DATALOGS 9999 // Highest datalog file number
-#define DATALOGBUFFERSIZE 25 // Largest number of characters buffered before flash write
-
-#define MENULEVELS 10 // Max no of levels in one file (8 + 2 virtual)
-#define MENUFILELEVELS 3 // Max deept in menu file pool
-
-typedef struct // VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevels[VarsUi.MenuLevel].
-{
- ULONG Id; // Menu item id
- UBYTE *IconText; // Menu item icon text pointer
- ULONG SpecialFlags; // Menu item special behaivor
- UBYTE IconImageNo; // Menu item icon image no
- UBYTE FunctionNo; // Menu item function call no (0 = none)
- UBYTE Parameter; // Menu item function call parameter
- UBYTE NextFileNo; // Menu item next menu file no (0 = none)
- UBYTE NextMenuNo; // Menu item next menu no (0 = none)
-
- UBYTE ItemIndex; // Menu item index on level
- UBYTE Items; // Menu items on level
-}
-MENULEVEL;
-
-typedef struct
-{
- MENULEVEL MenuLevels[MENULEVELS]; // See above
- UBYTE FileId; // VarsUi.MenuFiles[VarsUi.MenuFileLevel].FileId
- UBYTE MenuLevel; // VarsUi.MenuFiles[VarsUi.MenuFileLevel].MenuLevel
-}
-MENUFILE;
-
-typedef struct
-{
- UBYTE CheckByte; // Check byte (CHECKBYTE)
- UBYTE DatalogEnabled; // Datalog enabled flag (0 = no)
- UBYTE VolumeStep; // Volume step (0 - MAX_VOLUME)
- UBYTE PowerdownCode; // Power down code
- UWORD DatalogNumber; // Datalog file number (0 - MAX_DATALOGS)
-}
-NVDATA;
-
-typedef struct
-{
- UBYTE StatusText[STATUSTEXT_SIZE + 1]; // RCX name
- UBYTE Initialized; // Ui init done
- UWORD SleepTimer; // Sleep timer
-
- // Menu system
- MENUFILE MenuFiles[MENUFILELEVELS]; // Menu file array
- MENUFILE *pMenuFile; // Actual menu file pointer
- MENULEVEL *pMenuLevel; // Actual menu item on level, pointer
- MENUITEM *pMenuItem; // Actual menu item in menu flash file
- UBYTE MenuFileLevel; // Actual menu file level
- UBYTE Function; // Running function (0 = none)
- UBYTE Parameter; // Parameter for running function
- UBYTE SecondTime; // Second time flag
- UBYTE EnterOnlyCalls; // Enter button only calls
- UBYTE ExitOnlyCalls; // Exit button only calls
- UWORD ButtonTimer; // Button repeat timer
- UWORD ButtonTime; // Button repeat time
- UBYTE ButtonOld; // Button old state
-
- // Update status
- UWORD UpdateCounter; // Update counter
- UBYTE Running; // Running pointer
- UBYTE BatteryToggle; // Battery flash toggle flag
- UBYTE NewStatusIcons[NO_OF_STATUSICONS]; // New status icons (used to detect changes)
-
- // Low battery voltage
- UBYTE *LowBattSavedBitmap; // Low battery overwritten bitmap placeholder
- UBYTE LowBatt; // Low battery volatge flag
- UBYTE LowBattHasOccured; // Low battery voltage has occured
- UBYTE LowBattSavedState; // Low battery current state placeholder
-
- // General used variables
- UBYTE *MenuIconTextSave; // Menu icon text save
-
- UBYTE *pTmp; // General UBYTE pointer
- ULONG TmpLength; // General filelength (used in filelist)
- SWORD TmpHandle; // General filehandle (used in filelist)
-
- SWORD Timer; // General tmp purpose timer
- SWORD ReadoutTimer; // General read out timer
- UBYTE Tmp; // General UBYTE
- UBYTE FileType; // General file type
- UBYTE State; // General tmp purpose state
- UBYTE Pointer; // General tmp purpose pointer
- UBYTE Counter; // General tmp purpose counter
- UBYTE Cursor; // General cursor
- UBYTE SelectedSensor; // General used for selected sensor
- UBYTE SelectedPort; // General used for selected port
- UBYTE SensorReset;
- UBYTE SensorState; // Sensor state (reset, ask, read)
- SWORD SensorTimer; // Timer used to time sensor states
- UBYTE NextState;
-
- UBYTE SelectedFilename[FILENAME_LENGTH + 1]; // Selected file name
- UBYTE FilenameBuffer[FILENAME_LENGTH + 1]; // General filename buffer
- UBYTE SearchFilenameBuffer[FILENAME_LENGTH + 1];// General filename buffer
- UBYTE DisplayBuffer[DISPLAYLINE_LENGTH + 1]; // General purpose display buffer
-
- UBYTE PortBitmapLeft[SIZE_OF_PORTBITMAP]; // Port no bitmap for left icon
- UBYTE PortBitmapCenter[SIZE_OF_PORTBITMAP]; // Port no bitmap for center icon
- UBYTE PortBitmapRight[SIZE_OF_PORTBITMAP]; // Port no bitmap for right icon
-
- // Find no of files and find name for file no
- ULONG FNOFLength; // Length
- SWORD FNOFHandle; // Handle
- UBYTE FNOFState; // State
- UBYTE FNOFSearchBuffer[FILENAME_LENGTH + 1]; // Search buffer
- UBYTE FNOFNameBuffer[FILENAME_LENGTH + 1]; // File name buffer
- UBYTE FNOFFileNo; // File no
-
- // File list
- UBYTE FileCenter; // File center
- UBYTE FileLeft; // File left
- UBYTE FileRight; // File right
- UBYTE NoOfFiles; // No of files
-
- // On brick programming menu
- UBYTE ProgramSteps[ON_BRICK_PROGRAMSTEPS]; // On brick programming steps
- UBYTE ProgramStepPointer; // On brick programming step pointer
- UBYTE CursorTmp[SIZE_OF_CURSOR]; // On brick programming cursor
- UBYTE FileHeader[FILEHEADER_LENGTH]; // File header for programs
- UBYTE *FeedBackText; // Program end text
- UWORD OBPTimer; // Graphic update timer
-
- // BT search menu
- UBYTE NoOfDevices; // BT search no of devices found
- UBYTE NoOfNames; // BT search no of names found
- UBYTE SelectedDevice; // BT selected device
- UBYTE SelectedSlot; // BT selected slot
-
- // BT device list menu
- UBYTE DevicesKnown; // BT device known flag
- UBYTE Devices; // BT devices
- UBYTE DeviceLeft; // BT device left
- UBYTE DeviceCenter; // BT device center
- UBYTE DeviceRight; // BT device right
- UBYTE DeviceType; // BT device type
-
- // BT connect Menu
- UBYTE Slots; // BT connect no of slots
- UBYTE SlotLeft; // BT connect
- UBYTE SlotCenter; // BT connect
- UBYTE SlotRight; // BT connect
-
- // Get user string
- UBYTE GUSTmp; // Seperat tmp for "Get user string"
- UBYTE GUSState; // Seperat state for "Get user string"
- UBYTE GUSNoname; // No user entry
- UBYTE UserString[DISPLAYLINE_LENGTH + 1]; // User string
- UBYTE DisplayText[DISPLAYLINE_LENGTH + 1]; // Display buffer
- SBYTE FigurePointer; // Figure cursor
- UBYTE GUSCursor; // User string cursor
-
- // Connect request
- ULONG CRPasskey; // Passkey to fake wrong pin code
- UBYTE CRState; // Seperate state for "Connect request"
- UBYTE CRTmp; // Seperate tmp for "Connect request"
-
- // Run files
- UBYTE *RunIconSave; // Menu center icon save
- UWORD RunTimer; // Bitmap change timer
- UBYTE RunBitmapPointer; // Bitmap pointer
-
- // Delete files
- UBYTE SelectedType; // Type of selected files for delete
-
- // View
- SLONG ViewSampleValue; // Latch for sensor values
- UBYTE ViewSampleValid; // Latch for sensor valid
-
- // Datalog
- ULONG DatalogOldTick;
- ULONG DatalogRTC; // Real time in mS
- ULONG DatalogTimer; // Logging main timer
- ULONG DatalogSampleTime; // Logging sample time
- ULONG DatalogSampleTimer; // Logging sample timer
- SLONG DatalogSampleValue[DATALOGPORTS]; // Latch for sensor values
- UBYTE DatalogSampleValid[DATALOGPORTS]; // Latch for sensor valid
- UWORD DatalogError; // Error code
- UBYTE DatalogPort[DATALOGPORTS]; // Logging sensor
- UBYTE Update; // Update icons flag
-
- // NV storage
- ULONG NVTmpLength; // Non volatile filelength
- SWORD NVTmpHandle; // Non volatile filehandle
- UBYTE NVFilename[FILENAME_LENGTH + 1]; // Non volatile file name
- NVDATA NVData; // Non volatile data
-
- // Feedback
- UBYTE *FBText; // Seperate text pointer for feedback
- UWORD FBTimer; // Seperate timer for feedback
- UBYTE FBState; // Seperate state for feedback
- UBYTE FBPointer; // Seperate pointer for feedback
-
- // BT command
- UBYTE BTIndex; // List index
- UBYTE BTTmpIndex; // Tmp list index
- UBYTE BTCommand; // Last lached BT command
- UBYTE BTPar1; // Last lached BT command parameter 1
- UBYTE BTPar2; // Last lached BT command parameter 2
- UWORD BTResult; // Last lached BT command result
-
- // Error display
- UBYTE ErrorTimer; // Error show timer
- UBYTE ErrorFunction; // Error latched function
- UBYTE ErrorParameter; // Error latched parameter
- UBYTE ErrorState; // Error latched state
- UBYTE ErrorString[DISPLAYLINE_LENGTH + 1]; // Error string
-}VARSUI;
-
-
-void cUiInit(void* pHeader); // Init controller
-void cUiCtrl(void); // Run controller
-void cUiExit(void); // Exit controller
-
-extern const HEADER cUi;
-
-#endif
diff --git a/AT91SAM7S256/Source/c_ui.iom b/AT91SAM7S256/Source/c_ui.iom
deleted file mode 100644
index 770b682..0000000
--- a/AT91SAM7S256/Source/c_ui.iom
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 10-06-08 9:26 $
-//
-// Filename $Workfile:: c_ui.iom $
-//
-// Version $Revision:: 4 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/c_ui.i $
-//
-// Platform C
-//
-
-#ifndef CUI_IOM
-#define CUI_IOM
-
-#define pMapUi ((IOMAPUI*)(pHeaders[ENTRY_UI]->pIOMap))
-
-enum
-{
- DEVICETYPE_UNKNOWN,
- DEVICETYPE_NXT,
- DEVICETYPE_PHONE,
- DEVICETYPE_PC
-};
-
-// Various filenames without extension
-#define UI_NONVOLATILE "NVConfig" // Ui non volatile config filename
-#define UI_PROGRAM_DEFAULT "Untitled" // On brick programming default filename
-#define UI_PROGRAM_TEMP "Program" // On brick programming tmp filename
-#define UI_PROGRAM_READER "RPGReader" // On brick programming script reader filename
-#define UI_DATALOG_FILENAME "OBD_" // On brick datalog filename
-#define UI_DATALOG_DEFAULT "Untitled" // On brick datalog default name
-#define UI_DATALOG_TEMP "Tmp" // On brick datalog tmp filename
-#define UI_STARTUP_SOUND "! Startup" // Sound file activated when the menu system starts up
-#define UI_KEYCLICK_SOUND "! Click" // Sound file activated when key pressed in the menu system
-#define UI_ATTENTION_SOUND "! Attention" // Sound file activated when incomming BT requests attention
-
-// Various text strings
-#define UI_NAME_DEFAULT "NXT" // Default blue tooth name
-#define UI_PINCODE_DEFAULT "1234" // Default blue tooth pin code
-#define UI_PINCODE_NONE_OUT "????" // Fake pin code to deney outgoing request
-#define UI_PINCODE_NONE_IN "????" // Fake pin code to deney incomming request
-
-// Constants related to Flags
-enum
-{
- UI_UPDATE = 0x01, // W - Make changes take effect
- UI_DISABLE_LEFT_RIGHT_ENTER = 0x02, // RW - Disable left, right and enter button
- UI_DISABLE_EXIT = 0x04, // RW - Disable exit button
- UI_REDRAW_STATUS = 0x08, // W - Redraw entire status line
- UI_RESET_SLEEP_TIMER = 0x10, // W - Reset sleep timeout timer
- UI_EXECUTE_LMS_FILE = 0x20, // W - Execute LMS file in "LMSfilename" (Try It)
- UI_BUSY = 0x40, // R - UI busy running or datalogging (popup disabled)
- UI_ENABLE_STATUS_UPDATE = 0x80 // W - Enable status line to be updated
-};
-
-// Constants related to State
-enum
-{
- INIT_DISPLAY, // RW - Init display and load font, menu etc.
- INIT_LOW_BATTERY, // R - Low battery voltage at power on
- INIT_INTRO, // R - Display intro
- INIT_WAIT, // RW - Wait for initialization end
- INIT_MENU, // RW - Init menu system
- NEXT_MENU, // RW - Next menu icons ready for drawing
- DRAW_MENU, // RW - Execute function and draw menu icons
- TEST_BUTTONS, // RW - Wait for buttons to be pressed
- LEFT_PRESSED, // RW - Load selected function and next menu id
- RIGHT_PRESSED, // RW - Load selected function and next menu id
- ENTER_PRESSED, // RW - Load selected function and next menu id
- EXIT_PRESSED, // RW - Load selected function and next menu id
- CONNECT_REQUEST, // RW - Request for connection accept
- EXECUTE_FILE, // RW - Execute file in "LMSfilename"
- EXECUTING_FILE, // R - Executing file in "LMSfilename"
- LOW_BATTERY, // R - Low battery at runtime
- BT_ERROR // R - BT error
-};
-
-// Constants related to Button
-enum
-{
- BUTTON_NONE, // R - Button inserted are executed
- BUTTON_LEFT, // W - Insert left arrow button
- BUTTON_ENTER, // W - Insert enter button
- BUTTON_RIGHT, // W - Insert right arrow button
- BUTTON_EXIT // W - Insert exit button
-};
-
-// Constants related to BlueToothState
-enum
-{
- BT_STATE_VISIBLE = 0x01, // RW - BT visible
- BT_STATE_CONNECTED = 0x02, // RW - BT connected to something
- BT_STATE_OFF = 0x04, // RW - BT power off
- BT_ERROR_ATTENTION = 0x08, // W - BT error attention
- BT_CONNECT_REQUEST = 0x40, // RW - BT get connect accept in progress
- BT_PIN_REQUEST = 0x80 // RW - BT get pin code
-};
-
-typedef struct
-{
- MENU *pMenu; // W - Pointer to menu file
- UWORD BatteryVoltage; // R - Battery voltage in millivolts
- UBYTE LMSfilename[FILENAME_LENGTH + 1]; // W - LMS filename to execute (Try It)
- UBYTE Flags; // RW - Update command flags (flags enumerated above)
- UBYTE State; // RW - UI state (states enumerated above)
- UBYTE Button; // RW - Insert button (buttons enumerated above)
- UBYTE RunState; // W - VM Run state (0 = stopped, 1 = running)
- UBYTE BatteryState; // W - Battery state (0..4 capacity)
- UBYTE BluetoothState; // W - Bluetooth state (0=on, 1=visible, 2=conn, 3=conn.visible, 4=off, 5=dfu)
- UBYTE UsbState; // W - Usb state (0=disconnected, 1=connected, 2=working)
- UBYTE SleepTimeout; // RW - Sleep timeout time (min)
- UBYTE SleepTimer; // RW - Sleep timer (min)
- UBYTE Rechargeable; // R - Rechargeable battery (0 = no, 1 = yes)
- UBYTE Volume; // RW - Volume used in UI (0 - 4)
- UBYTE Error; // W - Error code
- UBYTE OBPPointer; // W - Actual OBP step (0 - 4)
- UBYTE ForceOff; // W - Force off (> 0 = off)
-}IOMAPUI;
-
-#endif
diff --git a/AT91SAM7S256/Source/config.h b/AT91SAM7S256/Source/config.h
deleted file mode 100644
index d396771..0000000
--- a/AT91SAM7S256/Source/config.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-/*
- * This file defines compilation options.
- */
-
-/* Include intro code and images. */
-#define CONFIG_INTRO 1
-
-#endif /* CONFIG_H */
diff --git a/AT91SAM7S256/Source/d_bt.c b/AT91SAM7S256/Source/d_bt.c
deleted file mode 100644
index 6e3e47d..0000000
--- a/AT91SAM7S256/Source/d_bt.c
+++ /dev/null
@@ -1,452 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-04-08 14:33 $
-//
-// Filename $Workfile:: d_bt.c $
-//
-// Version $Revision:: 3 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_bt.c $
-//
-// Platform C
-//
-
-
-#include "stdconst.h"
-#include "modules.h"
-#include "m_sched.h"
-#include "d_bt.h"
-#include "d_bt.r"
-#include <string.h>
-
-enum
-{
- BT_FAST_TIMEOUT = 500,
- BT_CMD_TIMEOUT_2S = 2000,
- BT_TIMEOUT_30S = 30000
-};
-
-#define SETTimeout(TOut) CmdTOut = 0;\
- CmdTOutLimit = TOut
-#define RESETTimeout CmdTOut = 0
-
-static UWORD CmdTOut;
-static UWORD CmdTOutLimit;
-
-void dBtInit(void)
-{
- SETTimeout(0);
- BTInit;
- BTInitPIOPins;
-}
-
-void dBtSetBcResetPinLow(void)
-{
- BTSetResetLow; /* Set Reset pin to Bluecore chip low */
-}
-
-void dBtSetBcResetPinHigh(void)
-{
- BTSetResetHigh; /* Set Reset pin to Bluecore chip high */
-}
-
-void dBtStartADConverter(void)
-{
- BTStartADConverter;
-}
-
-void dBtInitReceive(UBYTE *InputBuffer, UBYTE Mode)
-{
- BTInitReceiver(InputBuffer, Mode);
-}
-
-void dBtSetArm7CmdSignal(void)
-{
- BT_SetArm7CmdPin;
-}
-
-void dBtClearArm7CmdSignal(void)
-{
- BT_ClearArm7CmdPin;
-}
-
-UBYTE dBtGetBc4CmdSignal(void)
-{
- UWORD ADValue;
-
- BTReadADCValue(ADValue);
-
- if (ADValue > 0x200)
- {
- ADValue = 1;
- }
- else
- {
- ADValue = 0;
- }
- return(ADValue);
-}
-
-
-UWORD dBtTxEnd(void)
-{
- UWORD TxEnd;
-
- REQTxEnd(TxEnd);
-
- return(TxEnd);
-
-}
-
-UWORD dBtCheckForTxBuf(void)
-{
- UWORD AvailBytes;
-
- AVAILOutBuf(AvailBytes);
-
- return(AvailBytes);
-}
-
-void dBtSendMsg(UBYTE *OutputBuffer, UBYTE BytesToSend, UWORD MsgSize)
-{
-
- /* Used for sending a complete message that can be placed in the buffer - */
- /* or to send the first part of a message that cannot be placed in the buffer */
- /* once (bigger than the buffer) */
- BTSendMsg(OutputBuffer,BytesToSend, MsgSize);
-}
-
-void dBtSend(UBYTE *OutputBuffer, UBYTE BytesToSend)
-{
-
- /* Used for continous stream of data to be send */
- BTSend(OutputBuffer, BytesToSend);
-}
-
-UWORD dBtReceivedData(UWORD *pLength, UWORD *pBytesToGo)
-{
- UWORD RtnVal;
-
- RtnVal = TRUE;
- BTReceivedData(pLength, pBytesToGo);
- if (*pLength)
- {
- SETTimeout(0);
- }
- else
- {
- if (CmdTOut < CmdTOutLimit)
- {
- CmdTOut++;
- if (CmdTOut >= CmdTOutLimit)
- {
- SETTimeout(0);
- RtnVal = FALSE;
- }
- }
- }
- return(RtnVal);
-}
-
-void dBtResetTimeOut(void)
-{
- RESETTimeout;
-}
-
-void dBtClearTimeOut(void)
-{
- SETTimeout(0);
-}
-
-void dBtSendBtCmd(UBYTE Cmd, UBYTE Param1, UBYTE Param2, UBYTE *pBdAddr, UBYTE *pName, UBYTE *pCod, UBYTE *pPin)
-{
- UBYTE Tmp;
- UBYTE SendData;
- UWORD CheckSumTmp;
- UBYTE BtOutBuf[128];
- UBYTE BtOutCnt;
-
- SendData = 0;
- BtOutCnt = 0;
- switch (Cmd)
- {
- case MSG_BEGIN_INQUIRY:
- {
- BtOutBuf[BtOutCnt++] = MSG_BEGIN_INQUIRY;
- BtOutBuf[BtOutCnt++] = Param1;
- BtOutBuf[BtOutCnt++] = 0x00;
- BtOutBuf[BtOutCnt++] = Param2;
- BtOutBuf[BtOutCnt++] = 0x00;
- BtOutBuf[BtOutCnt++] = 0x00;
- BtOutBuf[BtOutCnt++] = 0x00;
- BtOutBuf[BtOutCnt++] = 0x00;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_CANCEL_INQUIRY:
- {
- BtOutBuf[BtOutCnt++] = MSG_CANCEL_INQUIRY;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_CONNECT:
- {
- BtOutBuf[BtOutCnt++] = MSG_CONNECT;
- memcpy(&(BtOutBuf[BtOutCnt]), pBdAddr, SIZE_OF_BDADDR);
- BtOutCnt += SIZE_OF_BDADDR;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_OPEN_PORT:
- {
- BtOutBuf[BtOutCnt++] = MSG_OPEN_PORT;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_LOOKUP_NAME:
- {
- BtOutBuf[BtOutCnt++] = MSG_LOOKUP_NAME;
- memcpy(&(BtOutBuf[BtOutCnt]), pBdAddr, SIZE_OF_BDADDR);
- BtOutCnt += SIZE_OF_BDADDR;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_ADD_DEVICE:
- {
- BtOutBuf[BtOutCnt++] = MSG_ADD_DEVICE;
- memcpy(&(BtOutBuf[BtOutCnt]), pBdAddr, SIZE_OF_BDADDR);
- BtOutCnt += SIZE_OF_BDADDR;
- memcpy(&(BtOutBuf[BtOutCnt]), pName, SIZE_OF_BT_NAME);
- BtOutCnt += SIZE_OF_BT_NAME;
- memcpy(&(BtOutBuf[BtOutCnt]), pCod, SIZE_OF_CLASS_OF_DEVICE);
- BtOutCnt += SIZE_OF_CLASS_OF_DEVICE;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_REMOVE_DEVICE:
- {
- BtOutBuf[BtOutCnt++] = MSG_REMOVE_DEVICE;
- memcpy(&(BtOutBuf[BtOutCnt]), pBdAddr, SIZE_OF_BDADDR);
- BtOutCnt += SIZE_OF_BDADDR;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_DUMP_LIST:
- {
- BtOutBuf[BtOutCnt++] = MSG_DUMP_LIST;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_CLOSE_CONNECTION:
- {
- BtOutBuf[BtOutCnt++] = MSG_CLOSE_CONNECTION;
- BtOutBuf[BtOutCnt++] = Param1;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_ACCEPT_CONNECTION:
- {
- BtOutBuf[BtOutCnt++] = MSG_ACCEPT_CONNECTION;
- BtOutBuf[BtOutCnt++] = Param1;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_PIN_CODE:
- {
- BtOutBuf[BtOutCnt++] = MSG_PIN_CODE;
- memcpy(&(BtOutBuf[BtOutCnt]), pBdAddr, SIZE_OF_BDADDR);
- BtOutCnt += SIZE_OF_BDADDR;
- memcpy(&(BtOutBuf[BtOutCnt]), pPin, SIZE_OF_BT_PINCODE);
- BtOutCnt += SIZE_OF_BT_PINCODE;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_OPEN_STREAM:
- {
- BtOutBuf[BtOutCnt++] = MSG_OPEN_STREAM;
- BtOutBuf[BtOutCnt++] = Param1;
-
- SendData = 1;
- SETTimeout(BT_TIMEOUT_30S);
- }
- break;
-
- case MSG_START_HEART:
- {
- BtOutBuf[BtOutCnt++] = MSG_START_HEART;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_SET_DISCOVERABLE:
- {
- BtOutBuf[BtOutCnt++] = MSG_SET_DISCOVERABLE;
- BtOutBuf[BtOutCnt++] = Param1;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_CLOSE_PORT:
- {
- BtOutBuf[BtOutCnt++] = MSG_CLOSE_PORT;
- BtOutBuf[BtOutCnt++] = 0x03;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_SET_FRIENDLY_NAME:
- {
- BtOutBuf[BtOutCnt++] = MSG_SET_FRIENDLY_NAME;
- memcpy(&(BtOutBuf[BtOutCnt]), pName, SIZE_OF_BT_NAME);
- BtOutCnt += SIZE_OF_BT_NAME;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_LINK_QUALITY:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_LINK_QUALITY;
- BtOutBuf[BtOutCnt++] = Param1;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_SET_FACTORY_SETTINGS:
- {
- BtOutBuf[BtOutCnt++] = MSG_SET_FACTORY_SETTINGS;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_LOCAL_ADDR:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_LOCAL_ADDR;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_FRIENDLY_NAME:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_FRIENDLY_NAME;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_DISCOVERABLE:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_DISCOVERABLE;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_PORT_OPEN:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_PORT_OPEN;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_VERSION:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_VERSION;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_GET_BRICK_STATUSBYTE:
- {
- BtOutBuf[BtOutCnt++] = MSG_GET_BRICK_STATUSBYTE;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
-
- case MSG_SET_BRICK_STATUSBYTE:
- {
- BtOutBuf[BtOutCnt++] = MSG_SET_BRICK_STATUSBYTE;
- BtOutBuf[BtOutCnt++] = Param1;
- BtOutBuf[BtOutCnt++] = Param2;
-
- SendData = 1;
- SETTimeout(BT_FAST_TIMEOUT);
- }
- break;
- }
-
- if (SendData == 1)
- {
- CheckSumTmp = 0;
- for(Tmp = 0; Tmp < BtOutCnt; Tmp++)
- {
- CheckSumTmp += BtOutBuf[Tmp];
- }
- CheckSumTmp = (UWORD) (1 + (0xFFFF - CheckSumTmp));
- BtOutBuf[BtOutCnt++] = (UBYTE)((CheckSumTmp & 0xFF00)>>8);
- BtOutBuf[BtOutCnt++] = (UBYTE)(CheckSumTmp & 0x00FF);
- BTSendMsg(BtOutBuf, BtOutCnt, (UWORD)BtOutCnt);
- }
-}
-
-
-
-void dBtExit(void)
-{
- BTExit;
-}
diff --git a/AT91SAM7S256/Source/d_bt.h b/AT91SAM7S256/Source/d_bt.h
deleted file mode 100644
index baf3ab6..0000000
--- a/AT91SAM7S256/Source/d_bt.h
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_bt.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_bt.h $
-//
-// Platform C
-//
-
-#ifndef D_BT
-#define D_BT
-
-#define STREAM_MODE 1
-#define CMD_MODE 2
-
-void dBtInit(void);
-void dBtExit(void);
-void dBtStartADConverter(void);
-void dBtSetArm7CmdSignal(void);
-void dBtClearArm7CmdSignal(void);
-void dBtInitReceive(UBYTE *InputBuffer, UBYTE Mode);
-void dBtSetBcResetPinLow(void);
-void dBtSetBcResetPinHigh(void);
-void dBtSendBtCmd(UBYTE Cmd, UBYTE Param1, UBYTE Param2, UBYTE *pBdAddr, UBYTE *pName, UBYTE *pCod, UBYTE *pPin);
-void dBtSendMsg(UBYTE *pData, UBYTE Length, UWORD MsgSize);
-void dBtSend(UBYTE *pData, UBYTE Length);
-void dBtResetTimeOut(void);
-void dBtClearTimeOut(void);
-UBYTE dBtGetBc4CmdSignal(void);
-UWORD dBtTxEnd(void);
-UWORD dBtReceivedData(UWORD *pLength, UWORD *pBytesToGo);
-UWORD dBtCheckForTxBuf(void);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_bt.r b/AT91SAM7S256/Source/d_bt.r
deleted file mode 100644
index 8c9558f..0000000
--- a/AT91SAM7S256/Source/d_bt.r
+++ /dev/null
@@ -1,347 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-04-08 14:33 $
-//
-// Filename $Workfile:: d_bt.r $
-//
-// Version $Revision:: 3 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_bt.r $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define BT_RX_PIN AT91C_PIO_PA21
-#define BT_TX_PIN AT91C_PIO_PA22
-#define BT_SCK_PIN AT91C_PIO_PA23
-#define BT_RTS_PIN AT91C_PIO_PA24
-#define BT_CTS_PIN AT91C_PIO_PA25
-
-#define BT_CS_PIN AT91C_PIO_PA31
-#define BT_RST_PIN AT91C_PIO_PA11
-
-#define BT_ARM7_CMD_PIN AT91C_PIO_PA27
-
-#else
-
-#endif
-
-#define BAUD_RATE 460800L
-
-#define SIZE_OF_INBUF 128
-#define NO_OF_INBUFFERS 2
-#define NO_OF_DMA_OUTBUFFERS 2
-#define SIZE_OF_OUTBUF 256
-
-#define PER_ID7_UART_1 0x80
-#define UART1_INQ 0x80
-#define EXT_LEN_MSG_BIT 0x80
-
-static UBYTE InBuf[NO_OF_INBUFFERS][SIZE_OF_INBUF];
-static ULONG InBufPtrs[NO_OF_INBUFFERS];
-static UBYTE InBufInPtr;
-static UBYTE LengthSize;
-
-static UBYTE OutDma[NO_OF_DMA_OUTBUFFERS][SIZE_OF_OUTBUF];
-static UBYTE DmaBufPtr;
-static UBYTE *pBuffer;
-
-static UBYTE MsgIn;
-static UBYTE InBufOutCnt;
-static UWORD FullRxLength;
-static UWORD RemainingLength;
-
-
-#define ENABLEDebugOutput {\
- *AT91C_PIOA_PER = 0x20000000; /* Enable PIO on PA029 */\
- *AT91C_PIOA_OER = 0x20000000; /* PA029 set to Output */\
- }
-
-#define SETDebugOutputHigh *AT91C_PIOA_SODR = 0x20000000
-
-#define SETDebugOutputLow *AT91C_PIOA_CODR = 0x20000000
-
-#define BTInit {\
- UBYTE Tmp;\
- LengthSize = 1;\
- InBufInPtr = 0;\
- for(Tmp = 0; Tmp < NO_OF_INBUFFERS; Tmp++)\
- {\
- InBufPtrs[Tmp] = (ULONG)&(InBuf[Tmp][0]);\
- }\
- *AT91C_PMC_PCER = PER_ID7_UART_1; /* Enable PMC clock for UART 1 */\
- *AT91C_PIOA_PDR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; /* Disable Per. A on PA21, PA22, PA23, PA24 & PA25 */\
- *AT91C_PIOA_ASR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; /* Enable Per. A on PA21, PA22, PA23, PA24 & PA25 */\
- *AT91C_US1_CR = AT91C_US_RSTSTA; /* Resets pins on UART1 */\
- *AT91C_US1_CR = AT91C_US_STTTO; /* Start timeout functionality after 1 byte */\
- *AT91C_US1_RTOR = 10000; /* Approxitely 20 mS,x times bit time with 115200 bit pr s */\
- *AT91C_US1_IDR = AT91C_US_TIMEOUT; /* Disable interrupt on timeout */\
- *AT91C_AIC_IDCR = UART1_INQ; /* Disable UART1 interrupt */\
- *AT91C_AIC_ICCR = UART1_INQ; /* Clear interrupt register */\
- *AT91C_US1_MR = AT91C_US_USMODE_HWHSH; /* Set UART with HW handshake */\
- *AT91C_US1_MR &= ~AT91C_US_SYNC; /* Set UART in asynchronous mode */\
- *AT91C_US1_MR |= AT91C_US_CLKS_CLOCK; /* Clock setup MCK*/\
- *AT91C_US1_MR |= AT91C_US_CHRL_8_BITS; /* UART using 8-bit */\
- *AT91C_US1_MR |= AT91C_US_PAR_NONE; /* UART using none parity bit */\
- *AT91C_US1_MR |= AT91C_US_NBSTOP_1_BIT; /* UART using 1 stop bit */\
- *AT91C_US1_MR |= AT91C_US_OVER; /* UART is using 8-bit sampling */\
- *AT91C_US1_BRGR = ((OSC/8/BAUD_RATE) | (((OSC/8) - ((OSC/8/BAUD_RATE) * BAUD_RATE)) / ((BAUD_RATE + 4)/8)) << 16);\
- *AT91C_US1_PTCR = (AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS); /* Disable of TX & RX with DMA */\
- *AT91C_US1_RCR = 0; /* Receive Counter Register */\
- *AT91C_US1_TCR = 0; /* Transmit Counter Register */\
- *AT91C_US1_RNPR = 0;\
- *AT91C_US1_TNPR = 0;\
- Tmp = *AT91C_US1_RHR;\
- Tmp = *AT91C_US1_CSR;\
- *AT91C_US1_RPR = (unsigned int)&(InBuf[InBufInPtr][0]); /* Initialise receiver buffer using DMA */\
- *AT91C_US1_RCR = SIZE_OF_INBUF;\
- *AT91C_US1_RNPR = (unsigned int)&(InBuf[(InBufInPtr + 1)%NO_OF_INBUFFERS][0]);\
- *AT91C_US1_RNCR = SIZE_OF_INBUF;\
- MsgIn = 0;\
- InBufOutCnt = 0;\
- FullRxLength = 0;\
- RemainingLength = 0;\
- *AT91C_US1_CR = AT91C_US_RXEN | AT91C_US_TXEN; /* Enable Tx & Rx on UART 1*/\
- *AT91C_US1_PTCR = (AT91C_PDC_RXTEN | AT91C_PDC_TXTEN); /* Enable of TX & RX with DMA */\
- }
-
-
-#define BTInitPIOPins {\
- *AT91C_PIOA_PER = BT_CS_PIN | BT_RST_PIN; /* Enable PIO on PA11 & PA31 */\
- *AT91C_PIOA_OER = BT_CS_PIN | BT_RST_PIN; /* PA11 & PA31 set to output */\
- *AT91C_PIOA_SODR = BT_CS_PIN | BT_RST_PIN; /* PA31 & PA11 set output high */\
- *AT91C_PIOA_PPUDR = BT_ARM7_CMD_PIN; /* Disable PULL-UP resistor on PA27 */\
- *AT91C_PIOA_PER = BT_ARM7_CMD_PIN; /* Enable PIO on PA27 */\
- *AT91C_PIOA_CODR = BT_ARM7_CMD_PIN; /* PA27 set output low */\
- *AT91C_PIOA_OER = BT_ARM7_CMD_PIN; /* PA27 set to output */\
- }
-
-#define BTStartADConverter {\
- *AT91C_ADC_CHER = AT91C_ADC_CH6 | AT91C_ADC_CH4; \
- ADStart; \
- while(!((*AT91C_ADC_SR) & AT91C_ADC_CH6)); \
- *AT91C_ADC_CHDR = AT91C_ADC_CH6 | AT91C_ADC_CH4; \
- }
-
-#define BTReadADCValue(ADValue) ADValue = *AT91C_ADC_CDR6;
-
-#define BTSetResetHigh {\
- *AT91C_PIOA_SODR = BT_RST_PIN; /* PA11 set output high */\
- }
-
-#define BTSetResetLow {\
- *AT91C_PIOA_CODR = BT_RST_PIN; /* PA11 set output low */\
- }
-
-#define BTInitReceiver(InputBuffer, Mode)\
- {\
- pBuffer = InputBuffer;\
- MsgIn = 0;\
- FullRxLength = 0;\
- if (STREAM_MODE == Mode)\
- {\
- LengthSize = 2;\
- }\
- else\
- {\
- LengthSize = 1;\
- }\
- }
-
-#define BT_SetArm7CmdPin *AT91C_PIOA_SODR = BT_ARM7_CMD_PIN
-
-#define BT_ClearArm7CmdPin *AT91C_PIOA_CODR = BT_ARM7_CMD_PIN
-
-#define BT_GetBc4CmdPin *AT91C_PIOA_PDSR & BT_BC4_CMD_PIN
-
-#define REQTxEnd(TxEnd) TxEnd = FALSE;\
- if ((!(*AT91C_US1_TNCR)) && (!(*AT91C_US1_TCR)))\
- {\
- TxEnd = TRUE;\
- }
-
-#define AVAILOutBuf(Avail) if (!(*AT91C_US1_TNCR))\
- {\
- Avail = SIZE_OF_OUTBUF;\
- }\
- else\
- {\
- Avail = 0;\
- }
-
-
-#define BTSend(OutputBuffer, BytesToSend)\
- {\
- UWORD Avail;\
- AVAILOutBuf(Avail);\
- if (BytesToSend < (Avail - 1))\
- {\
- memcpy(&(OutDma[DmaBufPtr][0]), OutputBuffer, BytesToSend);\
- *AT91C_US1_TNPR = (unsigned int)&(OutDma[DmaBufPtr][0]);\
- *AT91C_US1_TNCR = BytesToSend;\
- DmaBufPtr = (DmaBufPtr + 1) % NO_OF_DMA_OUTBUFFERS;\
- }\
- }
-
-
-#define BTSendMsg(OutputBuffer, BytesToSend, MsgSize)\
- {\
- UWORD Avail;\
- AVAILOutBuf(Avail);\
- if (BytesToSend < (Avail - 1))\
- {\
- if (2 == LengthSize)\
- {\
- OutDma[DmaBufPtr][0] = (UBYTE)MsgSize;\
- OutDma[DmaBufPtr][1] = (UBYTE)(MsgSize>>8);\
- }\
- else\
- {\
- OutDma[DmaBufPtr][0] = (UBYTE)MsgSize;\
- }\
- memcpy(&(OutDma[DmaBufPtr][LengthSize]), OutputBuffer, BytesToSend);\
- *AT91C_US1_TNPR = (unsigned int)&(OutDma[DmaBufPtr][0]);\
- *AT91C_US1_TNCR = BytesToSend + LengthSize;\
- DmaBufPtr = (DmaBufPtr + 1) % NO_OF_DMA_OUTBUFFERS;\
- }\
- }
-
-
-#define BTReceivedData(pByteCnt, pToGo)\
- {\
- UWORD InCnt, Cnt;\
- *pByteCnt = 0;\
- *pToGo = 0;\
- InCnt = (SIZE_OF_INBUF - *AT91C_US1_RCR);\
- if (*AT91C_US1_RNCR == 0)\
- {\
- InCnt = SIZE_OF_INBUF;\
- }\
- InCnt -= InBufOutCnt; /* Remove already read bytes */\
- if (InCnt)\
- {\
- if (0 == FullRxLength) /* FullRxLength still to be calculated */\
- {\
- while((MsgIn < LengthSize) && (InCnt > 0))\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- InCnt--;\
- }\
- if (LengthSize == MsgIn)\
- {\
- if (2 == LengthSize)\
- {\
- FullRxLength = pBuffer[1];\
- FullRxLength <<= 8;\
- FullRxLength |= pBuffer[0];\
- /* Remove Length when in strean mode */\
- MsgIn = 0;\
- }\
- else\
- {\
- FullRxLength = pBuffer[0];\
- }\
- RemainingLength = FullRxLength;\
- }\
- else\
- {\
- /* Length still not received */\
- FullRxLength = 0;\
- }\
- }\
- if (FullRxLength)\
- {\
- /* Incomming msg in progress */\
- /* room for bytes? */\
- if (InCnt >= RemainingLength)\
- {\
- /* Remaining msg bytes are in the buffer */\
- /* Can remaining byte be stored in buffer? */\
- if ((MsgIn + RemainingLength) <= SIZE_OF_INBUF)\
- {\
- /* All bytes can be stored */\
- for (Cnt = 0; Cnt < RemainingLength; Cnt++)\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- }\
- *pByteCnt = MsgIn;\
- *pToGo = 0;\
- FullRxLength = 0;\
- RemainingLength = 0;\
- MsgIn = 0;\
- }\
- else\
- {\
- for (Cnt = 0; MsgIn < SIZE_OF_INBUF; Cnt++)\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- }\
- *pByteCnt = SIZE_OF_INBUF;\
- RemainingLength -= Cnt;\
- *pToGo = RemainingLength;\
- MsgIn = 0;\
- }\
- }\
- else\
- {\
- if ((InCnt + MsgIn) < SIZE_OF_INBUF)\
- {\
- /* Received bytes do not fill up the buffer */\
- for (Cnt = 0; Cnt < InCnt; Cnt++)\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- }\
- RemainingLength -= InCnt;\
- }\
- else\
- {\
- /* Received bytes fill up the buffer */\
- for (Cnt = 0; MsgIn < SIZE_OF_INBUF; Cnt++)\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- }\
- *pByteCnt = SIZE_OF_INBUF;\
- RemainingLength -= Cnt; /* Only substract no removed */\
- *pToGo = RemainingLength;\
- MsgIn = 0;\
- }\
- }\
- }\
- }\
- if ((*AT91C_US1_RNCR == 0) && (SIZE_OF_INBUF == InBufOutCnt))\
- {\
- InBufOutCnt = 0;\
- *AT91C_US1_RNPR = (unsigned int)InBufPtrs[InBufInPtr];\
- *AT91C_US1_RNCR = SIZE_OF_INBUF;\
- InBufInPtr = (InBufInPtr + 1) % NO_OF_INBUFFERS;\
- }\
- }
-
-#define BTExit {\
- *AT91C_PMC_PCDR = PER_ID7_UART_1; /* Disable PMC clock for UART 1*/\
- *AT91C_US1_IDR = AT91C_US_TIMEOUT; /* Disable interrupt on timeout */\
- *AT91C_AIC_IDCR = UART1_INQ; /* Disable PIO interrupt */\
- *AT91C_AIC_ICCR = UART1_INQ; /* Clear interrupt register */\
- }
-
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_button.c b/AT91SAM7S256/Source/d_button.c
deleted file mode 100644
index 2691e8c..0000000
--- a/AT91SAM7S256/Source/d_button.c
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_button.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_butt $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_button.h"
-#include "d_button.r"
-
-static UBYTE TimeTick;
-
-void dButtonInit(UBYTE Prescaler)
-{
- TimeTick = Prescaler;
- BUTTONInit;
-}
-
-void dButtonRead(UBYTE *pButton)
-{
- BUTTONRead(pButton);
-}
-
-void dButtonExit(void)
-{
- BUTTONExit;
-}
diff --git a/AT91SAM7S256/Source/d_button.h b/AT91SAM7S256/Source/d_button.h
deleted file mode 100644
index 10dacac..0000000
--- a/AT91SAM7S256/Source/d_button.h
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_button.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_butt $
-//
-// Platform C
-//
-
-#ifndef D_BUTTON
-#define D_BUTTON
-
-void dButtonInit(UBYTE Prescaler);
-void dButtonExit(void);
-
-void dButtonRead(UBYTE *pButton);
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_button.r b/AT91SAM7S256/Source/d_button.r
deleted file mode 100644
index c478394..0000000
--- a/AT91SAM7S256/Source/d_button.r
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_button.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_butt $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-static UBYTE PrellCnt[NOS_OF_AVR_BTNS];
-static UWORD OldVal;
-static UBYTE OldState;
-static UBYTE RisingTime;
-
-#define PRELL_TIME (60/TimeTick)
-#define RISING_THRESHOLD (10/TimeTick)
-
-#define BUTTONInit {\
- UBYTE Tmp;\
- for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
- {\
- PrellCnt[Tmp] = 0;\
- }\
- IoFromAvr.Buttons = 0;\
- OldVal = 0;\
- OldState = 0;\
- RisingTime = 0;\
- }
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-/* Buttons read here are free of prell or jitter */
-/* And because it's an AD value returned from the AVR */
-/* then a peak detector is needed */
-#define BUTTONRead(pB) {\
- UBYTE Tmp, BtnPtr;\
- UWORD TmpBtn;\
- *pB = OldState;\
- BtnPtr = 0x01;\
- if (OldVal < IoFromAvr.Buttons)\
- {\
- OldVal = IoFromAvr.Buttons;\
- RisingTime = 0;\
- }\
- else\
- {\
- if (OldVal > (IoFromAvr.Buttons + 20))\
- {\
- OldVal = IoFromAvr.Buttons;\
- RisingTime = 0;\
- }\
- else\
- {\
- if (RisingTime > RISING_THRESHOLD)\
- {\
- TmpBtn = IoFromAvr.Buttons;\
- if (0x40 > TmpBtn)\
- {\
- TmpBtn = 0x00;\
- }\
- else if (0x100 > TmpBtn)\
- {\
- TmpBtn = 0x04;\
- }\
- else if (0x1FF > TmpBtn)\
- {\
- TmpBtn = 0x02;\
- }\
- else if (0x5FF > TmpBtn)\
- {\
- TmpBtn = 0x01;\
- }\
- else\
- {\
- TmpBtn = 0x08;\
- }\
- for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
- {\
- if ((TmpBtn) & BtnPtr)\
- {\
- *pB |= BtnPtr;\
- PrellCnt[Tmp] = PRELL_TIME;\
- }\
- else\
- {\
- /* btn not pressed */\
- if (0 != PrellCnt[Tmp])\
- {\
- PrellCnt[Tmp]--;\
- }\
- else\
- {\
- *pB &= ~BtnPtr;\
- }\
- }\
- BtnPtr <<= 1;\
- }\
- OldState = *pB;\
- }\
- else\
- {\
- RisingTime++;\
- }\
- }\
- }\
- }
-
-#else
-
-// Buttons read here are free of prell or jitter
-#define BUTTONRead(pB) {\
- UBYTE Tmp, BtnPtr;\
- UWORD TmpBtn;\
- *pB = OldState;\
- BtnPtr = 0x01;\
- if ((OldVal) < IoFromAvr.Buttons)\
- {\
- OldVal = IoFromAvr.Buttons;\
- }\
- else\
- {\
- if ((OldVal) > IoFromAvr.Buttons)\
- {\
- OldVal = IoFromAvr.Buttons;\
- }\
- else\
- {\
- TmpBtn = IoFromAvr.Buttons;\
- if (100 > TmpBtn)\
- {\
- TmpBtn = 0x00;\
- }\
- else if (170 > TmpBtn)\
- {\
- TmpBtn = 0x01;\
- }\
- else if (255 > TmpBtn)\
- {\
- TmpBtn = 0x02;\
- }\
- else if (1000 > TmpBtn)\
- {\
- TmpBtn = 0x04;\
- }\
- else if (1024 > TmpBtn)\
- {\
- TmpBtn = 0x08;\
- }\
- for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
- {\
- if ((TmpBtn) & BtnPtr)\
- {\
- *pB |= BtnPtr;\
- PrellCnt[Tmp] = PRELL_TIME;\
- }\
- else\
- {\
- /* btn not pressed */\
- if (0 != PrellCnt[Tmp])\
- {\
- PrellCnt[Tmp]--;\
- }\
- else\
- {\
- *pB &= ~BtnPtr;\
- }\
- }\
- BtnPtr <<= 1;\
- }\
- OldState = *pB;\
- }\
- }\
- }
-#endif
-
-#define BUTTONExit
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_display.c b/AT91SAM7S256/Source/d_display.c
deleted file mode 100644
index 99f16c6..0000000
--- a/AT91SAM7S256/Source/d_display.c
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_display.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_disp $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_display.h"
-#include "d_display.r"
-
-
-void dDisplayInit(void)
-{
- DISPLAYInit;
-}
-
-
-void dDisplayOn(UBYTE On)
-{
- if (On)
- {
- DISPLAYOn;
- }
- else
- {
- DISPLAYOff;
- }
-}
-
-
-UBYTE dDisplayUpdate(UWORD Height,UWORD Width,UBYTE *pImage)
-{
- return (DISPLAYUpdate(Height,Width,pImage));
-}
-
-
-void dDisplayExit(void)
-{
- DISPLAYExit;
-}
diff --git a/AT91SAM7S256/Source/d_display.h b/AT91SAM7S256/Source/d_display.h
deleted file mode 100644
index a894685..0000000
--- a/AT91SAM7S256/Source/d_display.h
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_display.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_disp $
-//
-// Platform C
-//
-
-#ifndef D_DISPLAY
-#define D_DISPLAY
-
-void dDisplayInit(void);
-void dDisplayOn(UBYTE On);
-UBYTE dDisplayUpdate(UWORD Height,UWORD Width,UBYTE *pImage);
-void dDisplayExit(void);
-
-
-
-typedef struct
-{
- UBYTE StartX;
- UBYTE StartY;
- UBYTE PixelsX;
- UBYTE PixelsY;
-}
-SCREEN_CORDINATE;
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_display.r b/AT91SAM7S256/Source/d_display.r
deleted file mode 100644
index e38bb45..0000000
--- a/AT91SAM7S256/Source/d_display.r
+++ /dev/null
@@ -1,374 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_display.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_disp $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-// Display 128 x 64
-// 1/65 duty, 1/9 bias
-// VLCD 12.0V
-
-// SPI interface
-//
-// PCB LCD ARM PIO
-// ------ ----- ---- -----
-// CS_DIS -CS1 PA10 NPCS2 (PB)
-// DIS_A0 A0 PA12 PA12
-// DIS_SCL SCL PA14 SPCK (PA)
-// DIS_SDA SI PA13 MOSI (PA)
-
-
-// CPOL = 0, NCPHA=0,
-
-#define BT_RESET_OUT AT91C_PIO_PA11
-#define BT_RESET_IN AT91C_PIO_PA29
-#define BT_MOSI_OUT AT91C_PIO_PA13
-#define BT_MOSI_IN AT91C_PIO_PA20
-#define BT_CLK_OUT AT91C_PIO_PA14
-#define BT_CLK_IN AT91C_PIO_PA28
-#define BT_CE_OUT AT91C_PIO_PA31
-#define BT_CE_IN AT91C_PIO_PA19
-#define BT_REA_OUT AT91C_PIO_PA7
-#define BT_MISO_OUT AT91C_PIO_PA6
-#define BT_MISO_IN AT91C_PIO_PA12
-
-#pragma optimize=s 9
-
-__ramfunc void SpiBtIo(void)
-{
- register ULONG Port;
-
- *AT91C_AIC_IDCR = 0xFFFFFFFF; /* Disable all interrupts */
-
- *AT91C_PIOA_PER = BT_RESET_OUT; /* Enable pin RESET out */
- *AT91C_PIOA_OER = BT_RESET_OUT; /* Set output */
- *AT91C_PIOA_SODR = BT_RESET_OUT; /* Set high */
-
- *AT91C_PIOA_PER = BT_MOSI_OUT; /* Enable pin MOSI out */
- *AT91C_PIOA_OER = BT_MOSI_OUT; /* Set output */
-
- *AT91C_PIOA_PER = BT_CLK_OUT; /* Enable pin CLK out */
- *AT91C_PIOA_OER = BT_CLK_OUT; /* Set output */
-
- *AT91C_PIOA_PER = BT_CE_OUT; /* Enable pin CE out */
- *AT91C_PIOA_OER = BT_CE_OUT; /* Set output */
-
- *AT91C_PIOA_PER = BT_REA_OUT; /* Enable pin REA out */
- *AT91C_PIOA_OER = BT_REA_OUT; /* Set output */
- *AT91C_PIOA_SODR = BT_REA_OUT; /* Set high */
-
- *AT91C_PIOA_PER = BT_MISO_OUT; /* Enable pin MISO out */
- *AT91C_PIOA_OER = BT_MISO_OUT; /* Set output */
-
- *AT91C_PIOA_PER = BT_RESET_IN; /* Enable pin RESET in */
- *AT91C_PIOA_ODR = BT_RESET_IN; /* Set input */
- *AT91C_PIOA_IFDR = BT_RESET_IN; /* Disable filter */
- *AT91C_PIOA_IDR = BT_RESET_IN; /* Disable interrupt */
- *AT91C_PIOA_MDDR = BT_RESET_IN; /* Disable multidriver */
- *AT91C_PIOA_PPUDR = BT_RESET_IN; /* Disable pullup */
-
- *AT91C_PIOA_PER = BT_MOSI_IN; /* Enable pin MOSI in */
- *AT91C_PIOA_ODR = BT_MOSI_IN; /* Set input */
- *AT91C_PIOA_IFDR = BT_MOSI_IN; /* Disable filter */
- *AT91C_PIOA_IDR = BT_MOSI_IN; /* Disable interrupt */
- *AT91C_PIOA_MDDR = BT_MOSI_IN; /* Disable multidriver */
- *AT91C_PIOA_PPUDR = BT_MOSI_IN; /* Disable pullup */
-
- *AT91C_PIOA_PER = BT_CLK_IN; /* Enable pin CLK in */
- *AT91C_PIOA_ODR = BT_CLK_IN; /* Set input */
- *AT91C_PIOA_IFDR = BT_CLK_IN; /* Disable filter */
- *AT91C_PIOA_IDR = BT_CLK_IN; /* Disable interrupt */
- *AT91C_PIOA_MDDR = BT_CLK_IN; /* Disable multidriver */
- *AT91C_PIOA_PPUDR = BT_CLK_IN; /* Disable pullup */
-
- *AT91C_PIOA_PER = BT_CE_IN; /* Enable pin CE in */
- *AT91C_PIOA_ODR = BT_CE_IN; /* Set input */
- *AT91C_PIOA_IFDR = BT_CE_IN; /* Disable filter */
- *AT91C_PIOA_IDR = BT_CE_IN; /* Disable interrupt */
- *AT91C_PIOA_MDDR = BT_CE_IN; /* Disable multidriver */
- *AT91C_PIOA_PPUDR = BT_CE_IN; /* Disable pullup */
-
- *AT91C_PIOA_PER = BT_MISO_IN; /* Enable pin MISO in */
- *AT91C_PIOA_ODR = BT_MISO_IN; /* Set input */
- *AT91C_PIOA_IFDR = BT_MISO_IN; /* Disable filter */
- *AT91C_PIOA_IDR = BT_MISO_IN; /* Disable interrupt */
- *AT91C_PIOA_MDDR = BT_MISO_IN; /* Disable multidriver */
- *AT91C_PIOA_PPUDR = BT_MISO_IN; /* Disable pullup */
-
- while (1)
- {
- Port = *AT91C_PIOA_PDSR;
- if ((Port & BT_MISO_IN))
- {
- *AT91C_PIOA_SODR = BT_MISO_OUT;
- }
- else
- {
- *AT91C_PIOA_CODR = BT_MISO_OUT;
- }
- if ((Port & BT_MOSI_IN))
- {
- *AT91C_PIOA_SODR = BT_MOSI_OUT;
- }
- else
- {
- *AT91C_PIOA_CODR = BT_MOSI_OUT;
- }
- if ((Port & BT_CLK_IN))
- {
- *AT91C_PIOA_SODR = BT_CLK_OUT;
- }
- else
- {
- *AT91C_PIOA_CODR = BT_CLK_OUT;
- }
- if ((Port & BT_CE_IN))
- {
- *AT91C_PIOA_SODR = BT_CE_OUT;
- }
- else
- {
- *AT91C_PIOA_CODR = BT_CE_OUT;
- }
- }
-
-}
-
-
-void BtIo(void)
-{
- SpiBtIo();
-}
-
-
-
-#define SPI_BITRATE 2000000
-
-#define SPIA0High {\
- *AT91C_PIOA_SODR = AT91C_PIO_PA12;\
- }
-
-
-#define SPIA0Low {\
- *AT91C_PIOA_CODR = AT91C_PIO_PA12;\
- }
-
-
-#define SPIInit {\
- *AT91C_PMC_PCER = (1L << AT91C_ID_SPI); /* Enable MCK clock */\
- *AT91C_PIOA_PER = AT91C_PIO_PA12; /* Enable A0 on PA12 */\
- *AT91C_PIOA_OER = AT91C_PIO_PA12;\
- *AT91C_PIOA_CODR = AT91C_PIO_PA12;\
- *AT91C_PIOA_PDR = AT91C_PA14_SPCK; /* Enable SPCK on PA14 */\
- *AT91C_PIOA_ASR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_ODR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_OWER = AT91C_PA14_SPCK;\
- *AT91C_PIOA_MDDR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_PPUDR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_IFDR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_CODR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_IDR = AT91C_PA14_SPCK;\
- *AT91C_PIOA_PDR = AT91C_PA13_MOSI; /* Enable mosi on PA13 */\
- *AT91C_PIOA_ASR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_ODR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_OWER = AT91C_PA13_MOSI;\
- *AT91C_PIOA_MDDR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_PPUDR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_IFDR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_CODR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_IDR = AT91C_PA13_MOSI;\
- *AT91C_PIOA_PDR = AT91C_PA10_NPCS2; /* Enable npcs0 on PA11 */\
- *AT91C_PIOA_BSR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_ODR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_OWER = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_MDDR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_PPUDR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_IFDR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_CODR = AT91C_PA10_NPCS2;\
- *AT91C_PIOA_IDR = AT91C_PA10_NPCS2;\
- *AT91C_SPI_CR = AT91C_SPI_SWRST; /* Soft reset */\
- *AT91C_SPI_CR = AT91C_SPI_SPIEN; /* Enable spi */\
- *AT91C_SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | (0xB << 16);\
- AT91C_SPI_CSR[2] = ((OSC / SPI_BITRATE) << 8) | AT91C_SPI_CPOL;\
- }
-
-
-#define SPIWrite(pString,Length) {\
- *AT91C_SPI_TPR = (unsigned int)pString;\
- *AT91C_SPI_TCR = (unsigned int)Length;\
- *AT91C_SPI_PTCR = AT91C_PDC_TXTEN;\
- }
-
-
-
-#define CMD 0
-#define DAT 1
-#define DISP_LINES 8
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define ACTUAL_WIDTH 100
-
-UBYTE DisplayInitString[] =
-{
- 0xEB, // LCD bias setting = 1/9 0xEB
- 0x2F, // Power control = internal 0x2F
- 0xA4, // All points not on 0xA4
- 0xA6, // Not inverse 0xA6
- 0x40, // Start line = 0 0x40
- 0x81, // Electronic volume 0x81
- 0x5A, // -"- 0x5F
- 0xC4, // LCD mapping 0xC4
- 0x27, // Set temp comp. 0x27-
- 0x29, // Panel loading 0x28 0-1
- 0xA0, // Framerate 0xA0-
- 0x88, // CA++ 0x88-
- 0x23, // Multiplex 1:65 0x23
- 0xAF // Display on 0xAF
-};
-
-#else
-
-#define ACTUAL_WIDTH 128
-
-UBYTE DisplayInitString[] =
-{
- 0xA2, // LCD bias setting = 1/9
- 0x2F, // Power control = internal
- 0xA4, // All points not on
- 0xA6, // Not inverse
- 0x40, // Start line = 0
- 0x81, // Electronic volume
- 0x3F, // -"-
- 0xA0, // LCD mapping
- 0x27, // Resistor ratio
- 0xC8, // Common output state selection
- 0xF8, // Booster ratio
- 0x00, // -"-
- 0xE3, // nop
- 0xAF // Display on
-};
-
-#endif
-
-UBYTE DisplayLineString[DISP_LINES][3] =
-{
- { 0xB0,0x10,0x00 },
- { 0xB1,0x10,0x00 },
- { 0xB2,0x10,0x00 },
- { 0xB3,0x10,0x00 },
- { 0xB4,0x10,0x00 },
- { 0xB5,0x10,0x00 },
- { 0xB6,0x10,0x00 },
- { 0xB7,0x10,0x00 }
-};
-
-UBYTE DisplayWrite(UBYTE Type,UBYTE *pData,UWORD Length)
-{
- UBYTE Result = FALSE;
-
- if ((*AT91C_SPI_SR & AT91C_SPI_TXEMPTY))
- {
- if (Type)
- {
- SPIA0High;
- }
- else
- {
- SPIA0Low;
- }
- SPIWrite(pData,Length);
- Result = TRUE;
- }
-
- return (Result);
-}
-
-UBYTE DisplayUpdate(UWORD Height,UWORD Width,UBYTE *pImage)
-{
- static UWORD State = 0;
- static UWORD Line;
-
- if (State == 0)
- {
- if (DisplayWrite(CMD,(UBYTE*)DisplayInitString,sizeof(DisplayInitString)) == TRUE)
- {
- Line = 0;
- State++;
- }
- }
- else
- {
- if ((State & 1))
- {
- if (DisplayWrite(CMD,(UBYTE*)DisplayLineString[Line],3) == TRUE)
- {
- State++;
- }
- }
- else
- {
- if (DisplayWrite(DAT,(UBYTE*)&pImage[Line * Width],ACTUAL_WIDTH) == TRUE)
- {
- State++;
- if (++Line >= (Height / 8))
- {
- State = 0;
- }
- }
- }
- }
-
- return (State);
-}
-
-
-#if defined (PROTOTYPE_PCB_3)
-
-#define DISPLAYInit {\
- TSTInit;\
- TSTOn;\
- SPIInit;\
- }
-
-#else
-
-#define DISPLAYInit {\
- SPIInit;\
- }
-
-#endif
-
-#define DISPLAYOn {\
- DisplayInitString[6] = 0x5A;\
- DisplayInitString[13] = 0xAF;\
- }
-
-#define DISPLAYOff {\
- DisplayInitString[6] = 0x00;\
- DisplayInitString[13] = 0xAE;\
- }
-
-#define DISPLAYUpdate(H,W,I) DisplayUpdate(H,W,I)
-
-#define DISPLAYExit
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_hispeed.c b/AT91SAM7S256/Source/d_hispeed.c
deleted file mode 100644
index 01f2d07..0000000
--- a/AT91SAM7S256/Source/d_hispeed.c
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_hispeed.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_hisp $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_hispeed.h"
-#include "d_hispeed.r"
-
-void dHiSpeedInit(void)
-{
- HIGHSPEEDInit;
-}
-
-void dHiSpeedSendData(UBYTE *OutputBuffer, UBYTE BytesToSend)
-{
- HIGHSPEEDSendDmaData(OutputBuffer,BytesToSend);
-}
-
-void dHiSpeedSetupUart(void)
-{
- HIGHSPEEDSetupUart;
-}
-
-void dHiSpeedInitReceive(UBYTE *InputBuffer)
-{
- HIGHSPEEDInitReceiver(InputBuffer);
-}
-
-void dHiSpeedReceivedData(UWORD *ByteCnt)
-{
- HIGHSPEEDReceivedData(ByteCnt);
-}
-
-void dHiSpeedExit(void)
-{
- HIGHSPEEDExit;
-}
diff --git a/AT91SAM7S256/Source/d_hispeed.h b/AT91SAM7S256/Source/d_hispeed.h
deleted file mode 100644
index 669a5d1..0000000
--- a/AT91SAM7S256/Source/d_hispeed.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_hispeed.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_hisp $
-//
-// Platform C
-//
-
-#ifndef D_HISPEED
-#define D_HISPEED
-
-void dHiSpeedInit(void);
-void dHiSpeedSendData(UBYTE *OutputBuffer, UBYTE BytesToSend);
-void dHiSpeedSetupUart(void);
-void dHiSpeedInitReceive(UBYTE *InputBuffer);
-void dHiSpeedReceivedData(UWORD *ByteCnt);
-void dHiSpeedExit(void);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_hispeed.r b/AT91SAM7S256/Source/d_hispeed.r
deleted file mode 100644
index 52d5e14..0000000
--- a/AT91SAM7S256/Source/d_hispeed.r
+++ /dev/null
@@ -1,190 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_hispeed.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_hisp $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define HIGHSPEED_RX_PIN AT91C_PIO_PA5
-#define HIGHSPEED_TX_PIN AT91C_PIO_PA6
-#define HIGHSPEED_RTS_PIN AT91C_PIO_PA7
-
-#else
-
-
-#endif
-
-#define PER_ID6_UART_0 0x40
-#define UART0_INQ 0x40
-#define BAUD_RATE 921600L
-
-#define SIZE_OF_INBUF 128
-#define NO_OF_INBUFFERS 2
-#define SIZE_OF_OUTBUF 128
-#define NO_OF_DMA_OUTBUFFERS 1
-
-static UBYTE InBuf[NO_OF_INBUFFERS][SIZE_OF_INBUF];
-static ULONG InBufPtrs[NO_OF_INBUFFERS];
-static UBYTE InBufInPtr;
-
-static UBYTE OutDma[NO_OF_DMA_OUTBUFFERS][SIZE_OF_OUTBUF];
-static UBYTE DmaBufPtr;
-static UBYTE *pBuffer;
-
-static UBYTE MsgIn;
-static UBYTE InBufOutCnt;
-
-#define HIGHSPEEDInit {\
- *AT91C_PIOA_PER = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* Enable PIO on PA07, PA06 & PA05 */\
- *AT91C_PIOA_PPUDR = HIGHSPEED_RX_PIN | HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN; /* Disable Pull-up resistor */\
- *AT91C_PIOA_OER = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* PA07 & PA06 set to Output */\
- *AT91C_PIOA_CODR = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* Set output low */\
- }
-
-
-#define HIGHSPEEDSetupUart {\
- UBYTE Tmp;\
- InBufInPtr = 0;\
- for(Tmp = 0; Tmp < NO_OF_INBUFFERS; Tmp++)\
- {\
- InBufPtrs[Tmp] = (ULONG)&(InBuf[Tmp][0]);\
- }\
- *AT91C_PMC_PCER = PER_ID6_UART_0; /* Enable PMC clock for UART 0 */\
- *AT91C_PIOA_PPUDR = HIGHSPEED_RX_PIN | HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN; /* Disable Pull-up resistor */\
- *AT91C_PIOA_PDR = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* Disable Per. A on PA5, PA6 & PA7 */\
- *AT91C_PIOA_ASR = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN;; /* Enable Per. A on PA5, PA6 & PA7 */\
- *AT91C_US0_CR = AT91C_US_RSTSTA; /* Resets pins on UART0 */\
- *AT91C_US0_CR = AT91C_US_STTTO; /* Start timeout functionality after 1 byte */\
- *AT91C_US0_RTOR = 2400; /* Approxitely 20 mS,x times bit time with 115200 bit pr s */\
- *AT91C_US0_IDR = AT91C_US_TIMEOUT; /* Disable interrupt on timeout */\
- *AT91C_AIC_IDCR = UART0_INQ; /* Disable UART0 interrupt */\
- *AT91C_AIC_ICCR = UART0_INQ; /* Clear interrupt register */\
- *AT91C_US0_MR = AT91C_US_USMODE_RS485; /* Set UART to RUN RS485 Mode*/\
- *AT91C_US0_MR &= ~AT91C_US_SYNC; /* Set UART in asynchronous mode */\
- *AT91C_US0_MR |= AT91C_US_CLKS_CLOCK; /* Clock setup MCK*/\
- *AT91C_US0_MR |= AT91C_US_CHRL_8_BITS; /* UART using 8-bit */\
- *AT91C_US0_MR |= AT91C_US_PAR_NONE; /* UART using none parity bit */\
- *AT91C_US0_MR |= AT91C_US_NBSTOP_1_BIT; /* UART using 1 stop bit */\
- *AT91C_US0_MR |= AT91C_US_OVER; /* UART is using 8-bit sampling */\
- *AT91C_US0_BRGR = ((OSC/8/BAUD_RATE) | (((OSC/8) - ((OSC/8/BAUD_RATE) * BAUD_RATE)) / ((BAUD_RATE + 4)/8)) << 16);\
- *AT91C_US0_PTCR = (AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS); /* Disable of TX & RX with DMA */\
- *AT91C_US0_RCR = 0; /* Receive Counter Register */\
- *AT91C_US0_TCR = 0; /* Transmit Counter Register */\
- *AT91C_US0_RNPR = 0;\
- *AT91C_US0_TNPR = 0;\
- Tmp = *AT91C_US0_RHR;\
- Tmp = *AT91C_US0_CSR;\
- *AT91C_US0_RPR = (unsigned int)&(InBuf[InBufInPtr][0]); /* Initialise receiver buffer using DMA */\
- *AT91C_US0_RCR = SIZE_OF_INBUF;\
- *AT91C_US0_RNPR = (unsigned int)&(InBuf[(InBufInPtr + 1)%NO_OF_INBUFFERS][0]);\
- *AT91C_US0_RNCR = SIZE_OF_INBUF;\
- MsgIn = 0;\
- InBufOutCnt = 0;\
- *AT91C_US0_CR = AT91C_US_RXEN | AT91C_US_TXEN; /* Enable Tx & Rx on UART 0*/\
- *AT91C_US0_PTCR = (AT91C_PDC_RXTEN | AT91C_PDC_TXTEN); /* Enable of TX & RX with DMA */\
- }
-
-#define HIGHSPEEDInitReceiver(InputBuffer)\
- {\
- UBYTE Tmp;\
- pBuffer = InputBuffer;\
- *AT91C_US0_PTCR = (AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS); /* Disable of TX & RX with DMA */\
- *AT91C_US0_RCR = 0; /* Receive Counter Register */\
- *AT91C_US0_TCR = 0; /* Transmit Counter Register */\
- *AT91C_US0_RNPR = 0;\
- *AT91C_US0_TNPR = 0;\
- Tmp = *AT91C_US0_RHR;\
- Tmp = *AT91C_US0_CSR;\
- Tmp = Tmp;\
- *AT91C_US0_RPR = (unsigned int)&(InBuf[InBufInPtr][0]); /* Initialise receiver buffer using DMA */\
- *AT91C_US0_RCR = SIZE_OF_INBUF;\
- *AT91C_US0_RNPR = (unsigned int)&(InBuf[(InBufInPtr + 1)%NO_OF_INBUFFERS][0]);\
- *AT91C_US0_RNCR = SIZE_OF_INBUF;\
- MsgIn = 0;\
- InBufOutCnt = 0;\
- *AT91C_US0_CR = AT91C_US_RXEN | AT91C_US_TXEN; /* Enable Tx & Rx on UART 0*/\
- *AT91C_US0_PTCR = (AT91C_PDC_RXTEN | AT91C_PDC_TXTEN); /* Enable of TX & RX with DMA */\
- }
-
-
-#define HIGHSPEEDReceivedData(pByteCnt)\
- {\
- UWORD InCnt;\
- *pByteCnt = 0;\
- InCnt = (SIZE_OF_INBUF - *AT91C_US0_RCR);\
- if (*AT91C_US0_RNCR == 0)\
- {\
- InCnt = SIZE_OF_INBUF;\
- }\
- InCnt -= InBufOutCnt; /* Remove already read bytes */\
- if(InCnt)\
- {\
- while(InCnt > 0)\
- {\
- pBuffer[MsgIn] = InBuf[InBufInPtr][InBufOutCnt];\
- MsgIn++;\
- InBufOutCnt++;\
- InCnt--;\
- }\
- *pByteCnt = MsgIn;\
- MsgIn = 0;\
- }\
- if ((*AT91C_US0_RNCR == 0) && (SIZE_OF_INBUF == InBufOutCnt))\
- {\
- InBufOutCnt = 0;\
- *AT91C_US0_RNPR = (unsigned int)InBufPtrs[InBufInPtr];\
- *AT91C_US0_RNCR = SIZE_OF_INBUF;\
- InBufInPtr = (InBufInPtr + 1) % NO_OF_INBUFFERS;\
- }\
- }
-
-#define AVAILOutBuf(Avail) if (!(*AT91C_US0_TNCR))\
- {\
- Avail = SIZE_OF_OUTBUF;\
- }\
- else\
- {\
- Avail = 0;\
- }
-
-#define HIGHSPEEDSendDmaData(OutputBuffer, BytesToSend)\
- {\
- UWORD Avail, Cnt;\
- AVAILOutBuf(Avail);\
- if (BytesToSend < (Avail - 1))\
- {\
- for (Cnt = 0; Cnt < BytesToSend; Cnt++)\
- {\
- OutDma[DmaBufPtr][Cnt] = OutputBuffer[Cnt];\
- }\
- *AT91C_US0_TNPR = (unsigned int)&(OutDma[DmaBufPtr][0]);\
- *AT91C_US0_TNCR = BytesToSend;\
- DmaBufPtr = (DmaBufPtr + 1) % NO_OF_DMA_OUTBUFFERS;\
- }\
- }
-
-#define HIGHSPEEDExit {\
- *AT91C_PMC_PCDR = PER_ID6_UART_0; /* Disable PMC clock for UART 0*/\
- *AT91C_PIOA_PER = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* Enable PIO on PA07, PA06 & PA05 */\
- *AT91C_PIOA_PPUDR = HIGHSPEED_RX_PIN | HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN; /* Disable Pull-up resistor */\
- *AT91C_PIOA_OER = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* PA07 & PA06 set to Output */\
- *AT91C_PIOA_CODR = HIGHSPEED_TX_PIN | HIGHSPEED_RTS_PIN | HIGHSPEED_RX_PIN; /* Set output low */\
- }
-
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_input.c b/AT91SAM7S256/Source/d_input.c
deleted file mode 100644
index 771eb3e..0000000
--- a/AT91SAM7S256/Source/d_input.c
+++ /dev/null
@@ -1,152 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-01-09 10:34 $
-//
-// Filename $Workfile:: d_input.c $
-//
-// Version $Revision:: 12 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_inpu $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "c_input.h"
-#include "d_input.h"
-#include "d_input.r"
-
-
-void dInputInit(void)
-{
- INPUTInit;
-}
-
-void dInputSetColorClkInput(void)
-{
- COLORClkInput;
-}
-
-void dInputGetAllColors(COLORSTRUCT *pRaw, UBYTE Status)
-{
- UPDATEAllColors(pRaw, Status);
-}
-
-void dInputGetRawAd(UWORD *pValues, UBYTE No)
-{
- INPUTGetVal(pValues, No);
-}
-
-void dInputSetDirOutDigi0(UBYTE Port)
-{
- INPUTSetOutDigi0(Port);
-}
-
-void dInputSetDirOutDigi1(UBYTE Port)
-{
- INPUTSetOutDigi1(Port);
-}
-
-void dInputSetDirInDigi0(UBYTE Port)
-{
- INPUTSetInDigi0(Port);
-}
-
-void dInputSetDirInDigi1(UBYTE Port)
-{
- INPUTSetInDigi1(Port);
-}
-
-void dInputClearDigi0(UBYTE Port)
-{
- INPUTClearDigi0(Port);
- INPUTSetOutDigi0(Port);
-}
-
-void dInputClearDigi1(UBYTE Port)
-{
- INPUTClearDigi1(Port);
- INPUTSetOutDigi1(Port);
-}
-
-void dInputSetDigi0(UBYTE Port)
-{
- INPUTSetDigi0(Port);
- INPUTSetOutDigi0(Port);
-}
-
-void dInputSetDigi1(UBYTE Port)
-{
- INPUTSetDigi1(Port);
- INPUTSetOutDigi1(Port);
-}
-
-void dInputRead0(UBYTE Port, UBYTE *pData)
-{
- INPUTReadDigi0(Port, pData);
-}
-
-void dInputRead1(UBYTE Port, UBYTE * pData)
-{
- INPUTReadDigi1(Port, pData);
-}
-
-void dInputSetActive(UBYTE Port)
-{
- INPUTSetActive(Port);
-}
-
-void dInputSet9v(UBYTE Port)
-{
- INPUTSet9v(Port);
-}
-
-void dInputSetInactive(UBYTE Port)
-{
- INPUTSetInactive(Port);
-}
-
-UBYTE dInputGetColor(UBYTE No, UWORD *pCol)
-{
- UBYTE Status;
- UPDATELed(No, pCol, Status);
- return(Status);
-}
-
-void dInputColorTx(UBYTE Port, UBYTE Data)
-{
- COLORTx(Port, Data);
-}
-
-void dInputReadCal(UBYTE Port, UBYTE *pData)
-{
- CALDataRead(Port, pData);
-}
-
-UBYTE dInputCheckColorStatus(UBYTE Port)
-{
- UBYTE Status;
-
- CHECKColorState(Port,Status);
- return(Status);
-}
-
-void dInputClearColor100msTimer(UBYTE No)
-{
- CLEARColor100msTimer(No);
-}
-
-UBYTE dInputChkColor100msTimer(UBYTE No)
-{
- UBYTE State;
- COLOR100msStatus(No, State);
- return(State);
-}
-
-void dInputExit(void)
-{
- INPUTExit;
-}
-
diff --git a/AT91SAM7S256/Source/d_input.h b/AT91SAM7S256/Source/d_input.h
deleted file mode 100644
index d365dd1..0000000
--- a/AT91SAM7S256/Source/d_input.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-01-09 10:33 $
-//
-// Filename $Workfile:: d_input.h $
-//
-// Version $Revision:: 12 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_inpu $
-//
-// Platform C
-//
-
-#ifndef D_INPUT
-#define D_INPUT
-
-void dInputInit(void);
-void dInputExit(void);
-
-void dInputGetRawAd(UWORD *pValues, UBYTE No);
-void dInputSetActive(UBYTE Port);
-void dInputSet9v(UBYTE Port);
-void dInputSetInactive(UBYTE Port);
-
-void dInputSetDirOutDigi0(UBYTE Port);
-void dInputSetDirOutDigi1(UBYTE Port);
-void dInputSetDirInDigi0(UBYTE Port);
-void dInputSetDirInDigi1(UBYTE Port);
-void dInputClearDigi0(UBYTE Port);
-void dInputClearDigi1(UBYTE Port);
-void dInputSetDigi0(UBYTE Port);
-void dInputSetDigi1(UBYTE Port);
-void dInputRead0(UBYTE Port, UBYTE *pData);
-void dInputRead1(UBYTE Port, UBYTE *pData);
-
-UBYTE dInputGetColor(UBYTE No, UWORD *pCol);
-
-void dInputColorTx(UBYTE Port, UBYTE Data);
-void dInputReadCal(UBYTE Port, UBYTE *pData);
-UBYTE dInputCheckColorStatus(UBYTE Port);
-void dInputGetAllColors(COLORSTRUCT *pRaw, UBYTE Status);
-void dInputSetColorClkInput(void);
-void dInputClearColor100msTimer(UBYTE No);
-UBYTE dInputChkColor100msTimer(UBYTE No);
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_input.r b/AT91SAM7S256/Source/d_input.r
deleted file mode 100644
index 3dc567e..0000000
--- a/AT91SAM7S256/Source/d_input.r
+++ /dev/null
@@ -1,312 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-01-09 10:33 $
-//
-// Filename $Workfile:: d_input.r $
-//
-// Version $Revision:: 24 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_inpu $
-//
-// Platform C
-//
-
-
-#ifdef SAM7S256
-
-void rInputWait2uS(void);
-void rInputWait20uS(void);
-void rInputWait30uS(void);
-void rInputSingleADC(UBYTE Port, UWORD *Val);
-
-const ULONG Digi0Alloc[] = {AT91C_PIO_PA23, AT91C_PIO_PA28, AT91C_PIO_PA29, AT91C_PIO_PA30};
-const ULONG Digi1Alloc[] = {AT91C_PIO_PA18, AT91C_PIO_PA19, AT91C_PIO_PA20, AT91C_PIO_PA2};
-const ULONG ADPinDef[NO_OF_INPUTS] = {AT91C_ADC_CH1, AT91C_ADC_CH2, AT91C_ADC_CH3, AT91C_ADC_CH7};
-unsigned int volatile* ADValRegs[NO_OF_INPUTS] = {AT91C_ADC_CDR1, AT91C_ADC_CDR2, AT91C_ADC_CDR3, AT91C_ADC_CDR7};
-
-static UBYTE ColorReset[NO_OF_INPUTS];
-static ULONG ColorClkDef;
-static ULONG ColorTimer[NO_OF_INPUTS];
-
-#define TIME2US ((OSC/16)/500000L)
-#define TIME20US ((OSC/16)/50000L)
-#define TIME30US ((OSC/16)/33333L)
-#define TIME100MS ((OSC/16)/10L)
-
-#define MAX_AD_VALUE 0x3FF
-
-#define INPUTInit {\
- UBYTE Tmp; \
- for (Tmp = 0; Tmp < NOS_OF_AVR_INPUTS; Tmp++)\
- { \
- IoFromAvr.AdValue[Tmp] = MAX_AD_VALUE; \
- } \
- IoToAvr.InputPower = 0; \
- for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++) \
- { \
- *AT91C_PIOA_PPUDR = Digi0Alloc[Tmp]; \
- *AT91C_PIOA_PPUDR = Digi1Alloc[Tmp]; \
- INPUTSetInDigi0(Tmp); \
- INPUTSetInDigi1(Tmp); \
- ColorReset[Tmp] = FALSE; \
- } \
- ColorClkDef = 0; \
- }
-
-#define INPUTGetVal(pValues, No) *pValues = (UWORD)IoFromAvr.AdValue[No]; \
- *pValues &= 0x03FF
-
-#define INPUTSetActive(Input) IoToAvr.InputPower |= (0x01 << Input); \
- IoToAvr.InputPower &= ~(0x10 << Input)
-#define INPUTSet9v(Input) IoToAvr.InputPower |= (0x10 << Input); \
- IoToAvr.InputPower &= ~(0x01 << Input)
-#define INPUTSetInactive(Input) IoToAvr.InputPower &= ~(0x11 << Input)
-
-#define INPUTSetOutDigi0(Input) *AT91C_PIOA_PER = Digi0Alloc[Input]; \
- *AT91C_PIOA_OER = Digi0Alloc[Input]
-
-#define INPUTSetOutDigi1(Input) *AT91C_PIOA_PER = Digi1Alloc[Input]; \
- *AT91C_PIOA_OER = Digi1Alloc[Input]
-
-#define INPUTSetInDigi0(Input) *AT91C_PIOA_PER = Digi0Alloc[Input]; \
- *AT91C_PIOA_ODR = Digi0Alloc[Input]
-
-#define INPUTSetInDigi1(Input) *AT91C_PIOA_PER = Digi1Alloc[Input]; \
- *AT91C_PIOA_ODR = Digi1Alloc[Input]
-
-#define INPUTSetDigi0(Input) *AT91C_PIOA_SODR = Digi0Alloc[Input]
-
-#define INPUTSetDigi1(Input) *AT91C_PIOA_SODR = Digi1Alloc[Input]
-
-#define INPUTClearDigi0(Input) *AT91C_PIOA_CODR = Digi0Alloc[Input]
-
-#define INPUTClearDigi1(Input) *AT91C_PIOA_CODR = Digi1Alloc[Input]
-
-#define INPUTReadDigi0(Input, Data) if ((*AT91C_PIOA_PDSR) & Digi0Alloc[Input]) \
- { \
- *Data |= 0x00000001; \
- } \
- else \
- { \
- *Data &= ~0x00000001; \
- }
-#define INPUTReadDigi1(Input, Data) if ((*AT91C_PIOA_PDSR) & Digi1Alloc[Input]) \
- { \
- *Data |= 0x00000002; \
- } \
- else \
- { \
- *Data &= ~0x00000002; \
- }
-
-#define INPUTClkHigh(Port) INPUTSetDigi0(Port); \
- INPUTSetOutDigi0(Port); \
- rInputWait2uS()
-
-#define INPUTClkLow(Port) INPUTClearDigi0(Port); \
- INPUTSetOutDigi0(Port); \
- rInputWait2uS()
-
-#define COLORClkInput *AT91C_PIOA_ODR = ColorClkDef
-
-#define UPDATEAllColors(Vals, Status){\
- ULONG ADDef; \
- ADDef = 0; \
- ColorClkDef = 0; \
- if (0x01 & Status) \
- { \
- ADDef |= ADPinDef[0]; \
- ColorClkDef |= Digi0Alloc[0]; \
- if ((*AT91C_PIOA_PDSR) & Digi0Alloc[0]) \
- { \
- ColorReset[0] = TRUE; \
- } \
- } \
- if (0x02 & Status) \
- { \
- ADDef |= ADPinDef[1]; \
- ColorClkDef |= Digi0Alloc[1]; \
- if ((*AT91C_PIOA_PDSR) & Digi0Alloc[1]) \
- { \
- ColorReset[1] = TRUE; \
- } \
- } \
- if (0x04 & Status) \
- { \
- ADDef |= ADPinDef[2]; \
- ColorClkDef |= Digi0Alloc[2]; \
- if ((*AT91C_PIOA_PDSR) & Digi0Alloc[2]) \
- { \
- ColorReset[2] = TRUE; \
- } \
- } \
- if (0x08 & Status) \
- { \
- ADDef |= ADPinDef[3]; \
- ColorClkDef |= Digi0Alloc[3]; \
- if ((*AT91C_PIOA_PDSR) & Digi0Alloc[3]) \
- { \
- ColorReset[3] = TRUE; \
- } \
- } \
- *AT91C_PIOA_OER = ColorClkDef; \
- *AT91C_ADC_CHER = ADDef; \
- GetAdVals(Vals, BLANK, Status); \
- *AT91C_PIOA_SODR = ColorClkDef; \
- rInputWait20uS(); \
- GetAdVals(Vals, RED, Status); \
- *AT91C_PIOA_CODR = ColorClkDef; \
- rInputWait20uS(); \
- GetAdVals(Vals, GREEN, Status); \
- *AT91C_PIOA_SODR = ColorClkDef; \
- rInputWait20uS(); \
- GetAdVals(Vals, BLUE, Status); \
- *AT91C_PIOA_CODR = ColorClkDef; \
- *AT91C_ADC_CHDR = ADDef; \
- }
-
-#define UPDATELed(Port, Col, Status) { \
- rInputSingleADC(Port, Col); \
- if ((*AT91C_PIOA_PDSR) & Digi0Alloc[Port]) \
- { \
- ColorReset[Port] = TRUE; \
- } \
- CHECKColorState(Port, Status); \
- }
-
-#define SETClkHi(Port) INPUTClkHigh(Port) \
-
-#define COLORTx(Port, Data) { \
- UBYTE BitCnt; \
- BitCnt = 0; \
- while(BitCnt++ < 8) \
- { \
- INPUTClkHigh(Port); \
- if (Data & 0x01) \
- { \
- INPUTSetDigi1(Port); \
- } \
- else \
- { \
- INPUTClearDigi1(Port); \
- } \
- rInputWait30uS(); \
- Data >>= 1; \
- INPUTClkLow(Port); \
- rInputWait30uS(); \
- } \
- }
-
-#define CALDataRead(Port, pData) {\
- UBYTE BitCnt; \
- UBYTE Data; \
- BitCnt = 0; \
- INPUTClkHigh(Port); \
- rInputWait2uS(); \
- while(BitCnt++ < 8) \
- { \
- INPUTClkHigh(Port); \
- rInputWait2uS(); \
- rInputWait2uS(); \
- INPUTClkLow(Port); \
- Data >>= 1; \
- if ((*AT91C_PIOA_PDSR) & Digi1Alloc[Port])\
- { \
- Data |= 0x80; \
- } \
- rInputWait2uS(); \
- } \
- *pData = Data; \
- }
-
-#define CHECKColorState(Port, Status) {\
- Status = TRUE; \
- if ((IoFromAvr.AdValue[Port] > 50) || (TRUE == ColorReset[Port])) \
- { \
- Status = FALSE; \
- ColorReset[Port] = FALSE; \
- } \
- }
-
-
-#define INPUTExit { \
- UBYTE Tmp; \
- *AT91C_ADC_CHDR = (AT91C_ADC_CH1 | AT91C_ADC_CH2 | AT91C_ADC_CH3 | AT91C_ADC_CH7);\
- for (Tmp = 0; Tmp < NO_OF_INPUTS; Tmp++) \
- { \
- INPUTSetInDigi0(Tmp); \
- INPUTSetInDigi1(Tmp); \
- } \
- }
-
-#define CLEARColor100msTimer(No) ColorTimer[No] = (*AT91C_PITC_PIIR);\
-
-#define COLOR100msStatus(No,V) V = FALSE;\
- if (((*AT91C_PITC_PIIR) - ColorTimer[No]) > TIME100MS)\
- {\
- V = TRUE;\
- }
-
-
-
-void rInputSingleADC(UBYTE Port, UWORD *Val)
-{
- *Val = *AT91C_ADC_LCDR;
- *AT91C_ADC_CHER = ADPinDef[Port];
- ADStart;
- while(!((*AT91C_ADC_SR) & AT91C_ADC_DRDY));
- *Val = *AT91C_ADC_LCDR;
- *AT91C_ADC_CHDR = ADPinDef[Port];
-}
-
-void GetAdVals(COLORSTRUCT *pColStruct, UBYTE Color, UBYTE Status)
-{
- UBYTE ChCnt;
- ADStart;
- for(ChCnt = 0; ChCnt < NO_OF_INPUTS; ChCnt++)
- {
- if (Status & (0x01 << ChCnt))
- {
- while(!((*AT91C_ADC_SR) & ADPinDef[ChCnt]));
- pColStruct[ChCnt].ADRaw[Color] = *ADValRegs[ChCnt];
- }
- }
- ADStart;
- for(ChCnt = 0; ChCnt < NO_OF_INPUTS; ChCnt++)
- {
- if (Status & (0x01 << ChCnt))
- {
- while(!((*AT91C_ADC_SR) & ADPinDef[ChCnt]));
- pColStruct[ChCnt].ADRaw[Color] += *ADValRegs[ChCnt];
- pColStruct[ChCnt].ADRaw[Color] = (pColStruct[ChCnt].ADRaw[Color])>>1;
- }
- }
-}
-
-void rInputWait2uS(void)
-{
- ULONG PitTmr;
- PitTmr = (*AT91C_PITC_PIIR);
- while (((*AT91C_PITC_PIIR) - PitTmr) < TIME2US);
-}
-
-void rInputWait20uS(void)
-{
- ULONG PitTmr;
- PitTmr = (*AT91C_PITC_PIIR);
- while (((*AT91C_PITC_PIIR) - PitTmr) < TIME20US);
-}
-
-void rInputWait30uS(void)
-{
- ULONG PitTmr;
- PitTmr = (*AT91C_PITC_PIIR);
- while (((*AT91C_PITC_PIIR) - PitTmr) < TIME30US);
-}
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_ioctrl.c b/AT91SAM7S256/Source/d_ioctrl.c
deleted file mode 100644
index 2506172..0000000
--- a/AT91SAM7S256/Source/d_ioctrl.c
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 5-12-07 15:23 $
-//
-// Filename $Workfile:: d_ioctrl.c $
-//
-// Version $Revision:: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_ioct $
-//
-// Platform C
-//
-
-
-#include <string.h>
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_ioctrl.h"
-#include "d_ioctrl.r"
-
-
-void dIOCtrlInit(void)
-{
- IOCTRLInit;
-}
-
-void dIOCtrlSetPower(UBYTE Power)
-{
- INSERTPower(Power);
-}
-
-void dIOCtrlSetPwm(UBYTE Pwm)
-{
- INSERTPwm(Pwm);
-}
-
-void dIOCtrlTransfer(void)
-{
- I2CTransfer;
-}
-
-void dIOCtrlExit(void)
-{
- IOCTRLExit;
-}
-
diff --git a/AT91SAM7S256/Source/d_ioctrl.h b/AT91SAM7S256/Source/d_ioctrl.h
deleted file mode 100644
index 4b7ae4f..0000000
--- a/AT91SAM7S256/Source/d_ioctrl.h
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_ioctrl.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_ioct $
-//
-// Platform C
-//
-
-#ifndef D_AVRCOMM
-#define D_AVRCOMM
-
-void dIOCtrlInit(void);
-void dIOCtrlExit(void);
-
-void dIOCtrlSetPower(UBYTE Power);
-void dIOCtrlSetPwm(UBYTE Pwm);
-void dIOCtrlTransfer(void);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_ioctrl.r b/AT91SAM7S256/Source/d_ioctrl.r
deleted file mode 100644
index 1071276..0000000
--- a/AT91SAM7S256/Source/d_ioctrl.r
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 7-12-07 14:09 $
-//
-// Filename $Workfile:: d_ioctrl.r $
-//
-// Version $Revision:: 4 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_ioct $
-//
-// Platform C
-//
-
-
-#ifdef SAM7S256
-
-extern void I2cHandler(void);
-
-enum
-{
- I2C_IDLE = 1,
- I2C_ERROR = 2,
- I2C_TX = 3,
- I2C_RX = 4
-};
-
-#define NO_TO_TX BYTES_TO_TX + 1
-#define NO_TO_RX BYTES_TO_RX + 1
-#define TIMEOUT (((OSC/16)/1000)*30) /* 100 ms timeout on I2C*/
-#define I2CCLK 400000L
-#define TIME400KHZ (((OSC/16L)/(I2CCLK * 2)) + 1)
-#define CLDIV (((OSC/I2CCLK)/2)-3)
-#define DEVICE_ADR 0x01
-
-
-static UBYTE *pIrq;
-static UBYTE volatile Cnt;
-static UBYTE I2cStatus;
-static UBYTE I2cLastStatus;
-static UBYTE I2cInBuffer[NO_TO_RX];
-static UBYTE I2cOutBuffer[COPYRIGHTSTRINGLENGTH + 1];
-static UBYTE RxSum;
-static ULONG I2CTimerValue;
-
-
-#define DISABLEI2cIrqs *AT91C_TWI_IDR = 0x000001C7
-#define ISSUEStopCond *AT91C_TWI_CR = AT91C_TWI_STOP
-#define INSERTPower(Power) IoToAvr.Power = Power
-#define INSERTPwm(Pwm) IoToAvr.PwmFreq = Pwm
-#define SETTime I2CTimerValue = ((*AT91C_PITC_PIIR) & AT91C_PITC_CPIV)
-
-
-#define DISABLETwi *AT91C_PIOA_PPUDR = (AT91C_PA4_TWCK | AT91C_PA3_TWD);/* no pull up */\
- *AT91C_PIOA_MDER = (AT91C_PA4_TWCK | AT91C_PA3_TWD);/* SCL + SDA is open drain*/\
- *AT91C_PIOA_SODR = (AT91C_PA4_TWCK | AT91C_PA3_TWD);/* SCL + SDA is high */\
- *AT91C_PIOA_OER = (AT91C_PA4_TWCK | AT91C_PA3_TWD);/* SCL + SDA is output */\
- *AT91C_PIOA_PER = (AT91C_PA4_TWCK | AT91C_PA3_TWD);/* Disable peripheal */\
-
-
-#define STARTIrqTx I2cStatus = I2C_TX;\
- I2cLastStatus = I2C_TX;\
- pIrq = I2cOutBuffer;\
- *AT91C_TWI_CR = AT91C_TWI_MSEN;\
- *AT91C_TWI_MMR = (AT91C_TWI_IADRSZ_NO | (DEVICE_ADR << 16)); /* no int. adr, write dir */\
- *AT91C_TWI_IER = 0x00000104; /* Enable TX related irq */\
- *AT91C_TWI_THR = *pIrq
-
-
-#define WAITClk {\
- ULONG PitTmr;\
- PitTmr = (*AT91C_PITC_PIIR & AT91C_PITC_CPIV) + TIME400KHZ;\
- if (PitTmr >= (*AT91C_PITC_PIMR & AT91C_PITC_CPIV))\
- {\
- PitTmr -= (*AT91C_PITC_PIMR & AT91C_PITC_CPIV);\
- }\
- while ((*AT91C_PITC_PIIR & AT91C_PITC_CPIV) < PitTmr);\
- }
-
-
-#define RESETI2c {\
- UBYTE Tmp;\
- DISABLETwi;\
- Tmp = 0;\
- /* Clock minimum 9 times and both SCK and SDA should be high */\
- while((!(*AT91C_PIOA_PDSR & AT91C_PA3_TWD)) || (Tmp <= 9))\
- {\
- if ((*AT91C_PIOA_PDSR) & AT91C_PA4_TWCK) /* Clk strectching? */\
- {\
- *AT91C_PIOA_CODR = AT91C_PA4_TWCK; /* SCL is low */\
- WAITClk;\
- *AT91C_PIOA_SODR = AT91C_PA4_TWCK; /* SCL is high */\
- WAITClk;\
- Tmp++;\
- }\
- }\
- *AT91C_TWI_CR = AT91C_TWI_MSDIS;\
- *AT91C_TWI_CR = AT91C_TWI_SWRST;\
- *AT91C_PIOA_ASR = (AT91C_PA4_TWCK | AT91C_PA3_TWD); /* Sel. per. A */\
- *AT91C_PIOA_PDR = (AT91C_PA4_TWCK | AT91C_PA3_TWD); /* Sel. per on pins*/\
- }
-
-
-#define IOCTRLInit *AT91C_AIC_IDCR = (1L<<AT91C_ID_TWI); /* Disable AIC irq */\
- *AT91C_PMC_PCER = (1L<<AT91C_ID_TWI); /* Enable TWI Clock */\
- DISABLEI2cIrqs; /* Disable TWI irq */\
- if (((*AT91C_AIC_ISR & 0x1F) == AT91C_ID_TWI))\
- {\
- *AT91C_AIC_EOICR = 1;\
- }\
- RESETI2c;\
- IoToAvr.Power = 0;\
- *AT91C_AIC_ICCR = (1L<<AT91C_ID_TWI); /* Clear AIC irq */\
- AT91C_AIC_SVR[AT91C_ID_TWI] = (unsigned int)I2cHandler;\
- AT91C_AIC_SMR[AT91C_ID_TWI] = ((AT91C_AIC_PRIOR_HIGHEST) | (AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED));\
- *AT91C_AIC_IECR = (1L<<AT91C_ID_TWI); /* Enables AIC irq */\
- *AT91C_TWI_CWGR = (CLDIV | (CLDIV << 8)); /* 400KHz clock */\
- UNLOCKTx
-
-
-#define IOCTRLExit DISABLEI2cIrqs;\
- *AT91C_AIC_IDCR = (1L<<AT91C_ID_TWI); /* Disable AIC irq */\
- *AT91C_AIC_ICCR = (1L<<AT91C_ID_TWI); /* Clear AIC irq */\
- *AT91C_PMC_PCDR = (1L<<AT91C_ID_TWI); /* Disable clock */\
- DISABLETwi
-
-
-#define UNLOCKTx I2cOutBuffer[0] = 0xCC; /* CC is the Unlock cmd */\
- memcpy(&I2cOutBuffer[1], (UBYTE*)COPYRIGHTSTRING, COPYRIGHTSTRINGLENGTH);\
- Cnt = COPYRIGHTSTRINGLENGTH + 1; /* +1 is the 0xCC command*/\
- STARTIrqTx;\
- SETTime
-
-
-#define I2CTransfer if ((I2cStatus == I2C_IDLE) && (*AT91C_TWI_SR & AT91C_TWI_TXCOMP))\
- {\
- DISABLEI2cIrqs;\
- if (I2cLastStatus == I2C_TX)\
- {\
- RxSum = 0;\
- I2cStatus = I2C_RX;\
- I2cLastStatus = I2C_RX;\
- pIrq = I2cInBuffer;\
- Cnt = NO_TO_RX;\
- *AT91C_TWI_CR = AT91C_TWI_MSEN;\
- *AT91C_TWI_MMR = (AT91C_TWI_MREAD | AT91C_TWI_IADRSZ_NO | (DEVICE_ADR << 16));\
- *AT91C_TWI_CR = AT91C_TWI_START;\
- *AT91C_TWI_IER = 0x00000102;\
- }\
- else\
- {\
- /* Now TX (last time was RX) */\
- UBYTE I2cTmp, Sum;\
- /* Copy rx'ed data bytes so they can be read by controllers */\
- if (RxSum == 0xFF)\
- {\
- memcpy((UBYTE*)&IoFromAvr,I2cInBuffer,BYTES_TO_RX);\
- }\
- pIrq = (UBYTE*)&IoToAvr;\
- for(I2cTmp = 0, Sum = 0; I2cTmp < BYTES_TO_TX; I2cTmp++, pIrq++)\
- {\
- I2cOutBuffer[I2cTmp] = *pIrq;\
- Sum += *pIrq;\
- }\
- I2cOutBuffer[I2cTmp] = ~Sum;\
- Cnt = NO_TO_TX;\
- STARTIrqTx;\
- }\
- SETTime;\
- }\
- else\
- {\
- if ((I2cStatus == I2C_ERROR) || (TIMEOUT < (((*AT91C_PITC_PIIR) - I2CTimerValue) & AT91C_PITC_CPIV)))\
- {\
- IOCTRLInit;\
- }\
- }
-
-
-
-__ramfunc void I2cHandler(void)
-{
-
- ULONG Tmp;
- Tmp = *AT91C_TWI_SR;
- if (Tmp & AT91C_TWI_RXRDY)
- {
- *pIrq = *AT91C_TWI_RHR;
- RxSum += *pIrq;
- if (1 == --Cnt)
- {
- ISSUEStopCond;
- }
- else
- {
- if (0 == Cnt)
- {
- I2cStatus = I2C_IDLE;
- }
- }
- pIrq++;
- }
- else
- {
- if (Tmp & AT91C_TWI_TXRDY)
- {
- if (Cnt--)
- {
-
- /* When both shift and THR reg is empty - stop is sent automatically */
- *AT91C_TWI_THR = *pIrq;
- pIrq++;
- }
- else
- {
-
- /* All bytes TX'ed - TXCOMP checked in I2CTransfer*/
- I2cStatus = I2C_IDLE;
- }
- }
- }
-
- /* NACK - Data byte has not been accepted by the reciever */
- if (Tmp & AT91C_TWI_NACK)
- {
- I2cStatus = I2C_ERROR;
- }
-}
-
-
-#endif
-
-
-#ifdef PCWIN
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_loader.c b/AT91SAM7S256/Source/d_loader.c
deleted file mode 100644
index a5ceb7d..0000000
--- a/AT91SAM7S256/Source/d_loader.c
+++ /dev/null
@@ -1,1480 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-06-09 8:53 $
-//
-// Filename $Workfile:: d_loader.c $
-//
-// Version $Revision:: 18 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_load $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "modules.h"
-#include "m_sched.h"
-#include "d_loader.h"
-#include "d_loader.r"
-#include <string.h>
-#include <ctype.h>
-
-#define FILEVERSION (0x0000010DL)
-
-#define MAX_FILES ((FILETABLE_SIZE) - 1) /* Last file entry is used for file version*/
-#define FILEVERSIONINDEX ((FILETABLE_SIZE) - 1) /* Last file entry is used for file version*/
-#define MAX_WRITE_BUFFERS 4
-#define FLASHOFFSET (0x100000L)
-
-#define IS_LOADER_ERR(LStatus) (((LStatus) & 0xFF00) != SUCCESS)
-#define SECTORINDEXUSERFLASH ((STARTOFUSERFLASH & ~FLASHOFFSET)/256/32)
-#define SECTORPOINTERUSERFLASH (((STARTOFUSERFLASH & ~FLASHOFFSET) - ((SECTORINDEXUSERFLASH * 32) * 256))/256)
-
-typedef struct
-{
- const UBYTE *pFlash;
- const UWORD *pSectorNo;
- ULONG ReadLength;
- ULONG DataLength;
- ULONG FileDlPtr;
- UBYTE SearchStr[FILENAME_SIZE];
- UWORD FileIndex;
- UWORD CheckSum;
- UBYTE SearchType;
- UBYTE Status;
- UBYTE FileType;
- UBYTE WriteBufNo;
-}HANDLE;
-
-typedef struct
-{
- ULONG Buf[SECTORSIZE/4];
- UBYTE BufIndex;
- UBYTE Status;
-}WRITEBUF;
-
-static HANDLE HandleTable[MAX_HANDLES];
-static WRITEBUF WriteBuffer[MAX_WRITE_BUFFERS];
-static ULONG SectorTable[NOOFSECTORS>>5];
-static FILEHEADER Header;
-static ULONG FreeUserFlash;
-static UWORD FreeSectors;
-
-void dLoaderUpdateSectorTable(void);
-UWORD dLoaderGetFreeHandle(void);
-const UBYTE * dLoaderGetNextSectorPtr(UBYTE Handle);
-ULONG dLoaderReturnFreeFlash(void);
-UWORD dLoaderAllocateHeader(UWORD Handle, ULONG *FileStartAdr, FILEHEADER *pHeader, UWORD HeaderByteSize, UWORD CompleteFileSectorSize);
-UWORD dLoaderFlashFileHeader(UWORD Handle, ULONG FileStartAdr, FILEHEADER *pHeader, UWORD HeaderByteSize);
-UWORD dLoaderFindFirstSector(UBYTE Type, UWORD SectorCount, UWORD *pSector);
-UWORD dLoaderAllocateWriteBuffer(UWORD Handle);
-UWORD dLoaderSetFilePointer(UWORD Handle, ULONG BytePtr, const UBYTE **pData);
-UWORD dLoaderGetSectorNumber(ULONG Adr);
-void dLoaderCheckVersion(void);
-UWORD dLoaderCheckHandle(UWORD Handle, UBYTE Operation);
-ULONG dLoaderCalcFreeFileSpace(UWORD NosOfFreeSectors);
-UWORD dLoaderCheckDownload(UBYTE *pName);
-UWORD dLoaderAvailFileNo(void);
-
-
-void dLoaderInit(void)
-{
- UWORD Tmp;
-
- LOADERInit;
-
- /* Clear handle table */
- for (Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
- HandleTable[Tmp].Status = FREE;
- HandleTable[Tmp].WriteBufNo = FREEBUFNO;
- }
-
- /* Clear write buffers */
- for (Tmp = 0; Tmp < MAX_WRITE_BUFFERS; Tmp++)
- {
- WriteBuffer[Tmp].Status = FREE;
- }
-
- dLoaderCheckVersion();
- dLoaderUpdateSectorTable();
-}
-
-
-UWORD dLoaderAvailFileNo(void)
-{
- UBYTE Tmp, Tmp2;
- UWORD ReturnVal;
-
- ReturnVal = NOMOREFILES;
- Tmp2 = 0;
- for(Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
-
- /* Check for files allready downloading except datafiles as the have entered their */
- /* filepointer in the filepointer table at begin of download */
- if ((DOWNLOADING == HandleTable[Tmp].Status) && (DATAFILE != HandleTable[Tmp].FileType))
- {
- Tmp2++;
- }
- }
- if ((0xFFFFFFFF == FILEPTRTABLE[(MAX_FILES - 1) - Tmp2]) || (0 == FILEPTRTABLE[(MAX_FILES - 1) - Tmp2]))
- {
- ReturnVal = SUCCESS;
- }
- return(ReturnVal);
-}
-
-
-void dLoaderWriteFilePtrTable(ULONG *RamFilePtrTable)
-{
- UWORD TmpTableSize;
-
- /* FILETABLE_SIZE is in LONG */
- TmpTableSize = (FILETABLE_SIZE * 4);
- while(TmpTableSize)
- {
- TmpTableSize -= SECTORSIZE;
- dLoaderWritePage((ULONG)FILEPTRTABLE + TmpTableSize, SECTORSIZE, RamFilePtrTable + (TmpTableSize/4));
- }
-}
-
-
-UWORD dLoaderInsertPtrTable(const UBYTE *pAdr, UWORD Handle)
-{
- UWORD TmpCnt;
- UWORD Status;
- ULONG PtrTable[FILETABLE_SIZE];
-
- /* It is possible to add the file as checking for number of files */
- /* is done when initiating the file download */
- memset(PtrTable, 0, sizeof(PtrTable));
- TmpCnt = MAX_FILES - 1;
- while(TmpCnt)
- {
-
- /* TmpCnt-- first because you want to copy from index 0 */
- TmpCnt--;
- PtrTable[TmpCnt + 1] = FILEPTRTABLE[TmpCnt];
- }
-
- /* Copy the new file in position 0 */
- PtrTable[0] = (ULONG)pAdr;
-
- /* Add the File version to the top of the file list */
- PtrTable[FILEVERSIONINDEX] = FILEPTRTABLE[FILEVERSIONINDEX];
-
- /* Write the file pointer table to flash */
- dLoaderWriteFilePtrTable(PtrTable);
-
- /* FileIndex in HandleTable should be incremented by one - new file index is 0 */
- for (TmpCnt = 0; TmpCnt < MAX_HANDLES; TmpCnt++)
- {
- if (HandleTable[TmpCnt].Status != FREE)
- {
- (HandleTable[TmpCnt].FileIndex)++;
- }
- }
- HandleTable[Handle].FileIndex = 0;
- Status = SUCCESS | Handle;
-
- return(Status);
-}
-
-
-UWORD dLoaderDeleteFilePtr(UWORD Handle)
-{
- UWORD ErrorCode;
- UWORD LongCnt;
- ULONG PtrTable[FILETABLE_SIZE];
-
- ErrorCode = SUCCESS;
- if (0xFFFFFFFF != FILEPTRTABLE[HandleTable[Handle].FileIndex])
- {
- ErrorCode = dLoaderCheckFiles(Handle);
- if (0x8000 > ErrorCode)
- {
- for (LongCnt = 0; LongCnt < (HandleTable[Handle].FileIndex); LongCnt++)
- {
- PtrTable[LongCnt] = FILEPTRTABLE[LongCnt];
- }
-
- /* Skip the file that has to be deleted "LongCnt + 1" */
- for ( ; LongCnt < (MAX_FILES - 1); LongCnt++)
- {
- PtrTable[LongCnt] = FILEPTRTABLE[LongCnt+1];
- }
-
- /* The top file entry is now free */
- PtrTable[MAX_FILES - 1] = 0xFFFFFFFF;
-
- /* Insert the file version */
- PtrTable[MAX_FILES] = FILEPTRTABLE[MAX_FILES];
-
- /* Write the file pointer table back into flash */
- dLoaderWriteFilePtrTable(PtrTable);
- dLoaderUpdateSectorTable();
-
- /* Update the HandleTable[].FileIndex */
- for (LongCnt = 0; LongCnt < MAX_HANDLES; LongCnt++)
- {
-
- /* FileIndex must not be decremented for to the file to be deleted (when Handle = LongCnt)*/
- if ((HandleTable[Handle].FileIndex < HandleTable[LongCnt].FileIndex) && (FREE != HandleTable[LongCnt].Status))
- {
- (HandleTable[LongCnt].FileIndex)--;
- }
- }
- }
- }
- else
- {
- ErrorCode = FILENOTFOUND;
- }
- return(ErrorCode | Handle);
-}
-
-
-void dLoaderDeleteAllFiles(void)
-{
- ULONG Tmp;
- ULONG PtrTable[FILETABLE_SIZE];
-
- /* Close all handles - all files is to be wiped out */
- for (Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
- dLoaderCloseHandle(Tmp);
- }
-
- for (Tmp = ((STARTOFUSERFLASH-FLASHOFFSET)/SECTORSIZE); Tmp < (SIZEOFFLASH/SECTORSIZE); Tmp++)
- {
- dLoaderErasePage(Tmp<<SECTORSIZESHIFT);
- }
-
- /* Insert the file version */
- memset(PtrTable, 0xFF, sizeof(PtrTable));
- PtrTable[FILEVERSIONINDEX] = FILEVERSION;
-
- /* Write an empty file pointer table to flash */
- dLoaderWriteFilePtrTable(PtrTable);
-
- /* Update all other parameters */
- dLoaderUpdateSectorTable();
- FreeUserFlash = dLoaderReturnFreeFlash();
-}
-
-
-void dLoaderUpdateSectorTable(void)
-{
- UWORD Tmp;
- UWORD SectorNo;
- const FILEHEADER *pFile;
- ULONG FileSize;
- const UWORD *pSectorTable;
-
- Tmp = 0;
-
- memset(SectorTable, 0, sizeof(SectorTable));
-
- /* All file pointer are occupied as default */
- while (Tmp < MAX_FILES)
- {
- SectorNo = dLoaderGetSectorNumber((ULONG)&FILEPTRTABLE[Tmp]);
- SectorTable[SectorNo>>5] |= (0x1 << (SectorNo & 0x001F));
- Tmp += (SECTORSIZE >> 2);
- }
-
- for (Tmp = 0; Tmp < MAX_FILES; Tmp++)
- {
- if ((0xFFFFFFFF != FILEPTRTABLE[Tmp]) && (0x00000000 != FILEPTRTABLE[Tmp]))
- {
- pFile = (const FILEHEADER *) FILEPTRTABLE[Tmp];
-
- /* This is necessary if the start address is at the first address in an sector */
- SectorNo = dLoaderGetSectorNumber((ULONG)pFile->FileStartAdr);
- SectorTable[SectorNo>>5] |= (0x1 << (SectorNo & 0x001F));
-
- /* This is necessary as the first sector (where the fileheader is) is not */
- /* included in the sector table */
- SectorNo = dLoaderGetSectorNumber((ULONG)FILEPTRTABLE[Tmp]);
- SectorTable[SectorNo>>5] |= (0x1 << (SectorNo & 0x001F));
-
- /* First Sector with data has been allocated add this as the initial */
- /* file size */
- FileSize = SECTORSIZE - ((pFile->FileStartAdr) & (SECTORSIZE-1)) ;
- pSectorTable = pFile->FileSectorTable;
- while((FileSize < (pFile->FileSize)) && (NOOFSECTORS > (*pSectorTable)))
- {
- SectorTable[(*pSectorTable)>>5] |= (0x1 << ((*pSectorTable) & 0x1F));
- if (0 == ((ULONG)(pSectorTable + 1) & (SECTORSIZE-1)))
- {
- pSectorTable = (UWORD*)(((ULONG)(*pSectorTable) << SECTORSIZESHIFT) | FLASHOFFSET);
- }
- else
- {
- *pSectorTable++;
- FileSize += SECTORSIZE;
- }
- }
- }
- }
- FreeUserFlash = dLoaderReturnFreeFlash();
-}
-
-
-UWORD dLoaderCreateFileHeader(ULONG FileSize, UBYTE *pName, UBYTE LinearState, UBYTE FileType)
-{
- UWORD HeaderByteSize;
- ULONG FileStartAdr;
- ULONG CompleteFileByteSize;
- UWORD Handle;
- UBYTE Name[FILENAME_SIZE];
- ULONG FileLength;
- ULONG DataLength;
- UWORD ErrorCode;
- UWORD CompleteSectorNo;
- UWORD Tmp;
-
- memset(&(Header.FileName), 0, sizeof(Header.FileName));
- memset(&(Header.FileSectorTable), 0xFF, sizeof(Header.FileSectorTable));
-
- ErrorCode = dLoaderFind(pName, Name, &FileLength, &DataLength, (UBYTE)BUSY);
- Handle = ErrorCode & 0x00FF;
- if (SUCCESS == (ErrorCode & 0xFF00))
- {
- ErrorCode |= FILEEXISTS;
- }
- if (FILENOTFOUND == (ErrorCode & 0xFF00))
- {
-
- /* Here check for the download buffers for a matching download */
- /* in progress */
- ErrorCode &= 0x00FF;
- ErrorCode = dLoaderCheckDownload(pName);
-
- if (0x8000 > ErrorCode)
- {
-
- /* Check for file overflow */
- ErrorCode = dLoaderAvailFileNo();
- if (0x8000 > ErrorCode)
- {
-
- ErrorCode = dLoaderAllocateWriteBuffer(Handle);
- if (0x8000 > ErrorCode)
- {
-
- dLoaderCopyFileName((Header.FileName), pName);
- HandleTable[Handle].pSectorNo = 0;
- HandleTable[Handle].DataLength = FileSize; /* used for end of file detection */
- Header.FileSize = FileSize; /* used to program into flash */
- if (DATAFILE == FileType)
- {
- Header.DataSize = 0;
- }
- else
- {
- Header.DataSize = FileSize;
- }
- HandleTable[Handle].FileType = FileType | LinearState; /* if it is a datafile it can be stopped */
- Header.FileType = FileType | LinearState; /* FileType included for future appending */
-
- /* File body size calculation*/
- CompleteFileByteSize = FileSize;
-
- /* Add the the fixed header to the fixed size */
- CompleteFileByteSize += HEADERFIXEDSIZE;
-
- /* Find the number of sectors used by the fixed file size */
- CompleteSectorNo = (CompleteFileByteSize - 1) >> SECTORSIZESHIFT;
-
- /* Add the size taken by the sectortable */
- CompleteFileByteSize += (CompleteSectorNo << 1);
-
- /* Recalc the number of sectors - to see wether the sectortable has caused */
- /* the sectornumber to encrease */
- Tmp = ((CompleteFileByteSize - 1) >> SECTORSIZESHIFT);
-
- /* Substract from the original sectors used - Tmp holds the encreased number*/
- Tmp -= CompleteSectorNo;
- if (Tmp)
- {
- /* The sectortable takes up more than one sector */
- CompleteFileByteSize += Tmp << 1;
- CompleteSectorNo += Tmp;
- }
-
- HeaderByteSize = CompleteFileByteSize - FileSize;
-
- if (HeaderByteSize & 0x0003)
- {
- /* Header size is not a multiplum of 4 - now make it a mul 4 */
- HeaderByteSize += (0x0004 - (HeaderByteSize & 0x0003));
- }
-
- if (FileSize <= FreeUserFlash)
- {
-
- /* Allocate file header */
- Tmp = (((CompleteFileByteSize - 1) >> SECTORSIZESHIFT) + 1);
- Handle = dLoaderAllocateHeader(Handle, &FileStartAdr, &Header, HeaderByteSize, Tmp);
- if (Handle < 0x8000)
- {
- dLoaderFlashFileHeader(Handle, FileStartAdr, &Header, HeaderByteSize);
-
- /* If this is a datafile then add the filepointer to the filepointer table */
- /* now as the datafile do not need to have a special size to be valid */
- if (DATAFILE & HandleTable[Handle].FileType)
- {
- ErrorCode = dLoaderInsertPtrTable((const UBYTE *)HandleTable[Handle].FileDlPtr, Handle);
- }
- FreeSectors -= Tmp;
- FreeUserFlash = dLoaderCalcFreeFileSpace(FreeSectors);
- HandleTable[Handle].Status = DOWNLOADING;
- }
- }
- else
- {
- ErrorCode = NOSPACE;
- }
- }
- }
- }
- }
-
- return(ErrorCode | Handle);
-}
-
-
-UWORD dLoaderWriteData(UWORD Handle, UBYTE *pBuf, UWORD *pLen)
-{
- UWORD Tmp;
- UBYTE *pSectorBuf;
-
- Handle = dLoaderCheckHandle(Handle, DOWNLOADING);
- if (0x8000 > Handle)
- {
-
- if (*pLen > HandleTable[Handle].DataLength)
- {
-
- /* Write request exceeds filesize - only flash up to filesize*/
- *pLen = HandleTable[Handle].DataLength;
- WriteBuffer[HandleTable[Handle].WriteBufNo].Status = DLERROR; /* save error untill close handle */
- }
-
- pSectorBuf = (UBYTE *)WriteBuffer[HandleTable[Handle].WriteBufNo].Buf;
- for(Tmp = 0; Tmp < *pLen; Tmp++)
- {
- pSectorBuf[WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex] = pBuf[Tmp];
- if ((WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex) >= (SECTORSIZE-1))
- {
- dLoaderWritePage(((ULONG)HandleTable[Handle].pFlash & ~(SECTORSIZE - 1)), SECTORSIZE, WriteBuffer[HandleTable[Handle].WriteBufNo].Buf);
- WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex = 0;
- HandleTable[Handle].pFlash = dLoaderGetNextSectorPtr(Handle);
- memset(WriteBuffer[HandleTable[Handle].WriteBufNo].Buf, 0xFF, sizeof(WriteBuffer[0].Buf));
- }
- else
- {
- (WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex)++;
- }
- }
- HandleTable[Handle].DataLength -= *pLen;
-
- /* Check for correct end of file */
- if (0 == HandleTable[Handle].DataLength)
- {
- if ((WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex) != 0)
- {
-
- /* write the last data into the file */
- dLoaderWritePage(((ULONG)HandleTable[Handle].pFlash & ~(SECTORSIZE - 1)), WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex, WriteBuffer[HandleTable[Handle].WriteBufNo].Buf);
- WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex = 0;
- }
- }
- }
- else
- {
- *pLen = 0;
- }
-
- if (DLERROR == WriteBuffer[HandleTable[Handle].WriteBufNo].Status)
- {
-
- /* DLERROR set due to over flow a file - EOFEXSPECTED should be set */
- /* for repeated overflow requests */
- Handle |= EOFEXSPECTED;
- }
- return(Handle);
-}
-
-
-UWORD dLoaderGetFreeHandle(void)
-{
- UBYTE Tmp;
- UWORD Handle;
-
- Handle = NOMOREHANDLES;
- for(Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
- if (FREE == HandleTable[Tmp].Status)
- {
- HandleTable[Tmp].Status = BUSY;
- Handle = 0; /* Clear NOMOREHANDLES */
- Handle = Tmp;
- Tmp = MAX_HANDLES;
- }
- }
- return(Handle);
-}
-
-const UBYTE * dLoaderGetNextSectorPtr(UBYTE Handle)
-{
- const UBYTE *pAdr;
-
- /* Check for the last entry in a sector - if so, */
- /* then this is the sector number on the next sector table */
- if (!((ULONG)(HandleTable[Handle].pSectorNo + 1) & (SECTORSIZE-1)))
- {
- HandleTable[Handle].pSectorNo = (const UWORD *)(((ULONG)(*(HandleTable[Handle].pSectorNo)) << SECTORSIZESHIFT) | FLASHOFFSET);
- }
-
- /* If pointing at an illegal adr then set it to NULL */
- if (SIZEOFFLASH < (ULONG)((ULONG)(HandleTable[Handle].pSectorNo) & ~FLASHOFFSET))
- {
- pAdr = NULL;
- }
- else
- {
- pAdr = (const UBYTE *)(((ULONG)(*(HandleTable[Handle].pSectorNo)) << SECTORSIZESHIFT) | FLASHOFFSET);
- }
-
- (HandleTable[Handle].pSectorNo)++;
- return(pAdr);
-}
-
-UWORD dLoaderCloseHandle(UWORD Handle)
-{
- UWORD RtnStatus;
- FILEHEADER *TmpFileHeader;
-
- RtnStatus = Handle;
-
- /* if it is a normal handle or handle closed due to an error then error must be different */
- /* from the no more handles available error (else you would delete a used handle) */
- if (((0x8000 > Handle) || (NOMOREHANDLES != (Handle & 0xFF00))) && ((UBYTE)Handle < MAX_HANDLES))
- {
- Handle &= 0x00FF;
- if (FREE == HandleTable[Handle].Status)
- {
- RtnStatus |= HANDLEALREADYCLOSED;
- }
- else
- {
-
- /* Handle was NOT free - now close it */
- if (DOWNLOADING == HandleTable[Handle].Status)
- {
- if (DATAFILE & HandleTable[Handle].FileType)
- {
-
- /* This is a Datafile that should be closed and this is a legal action */
- /* 1. Write the data from the writebuffer into flash */
- /* 2. Update the Datalength in the file header */
- /* This takes minimum 8 mS (2 page writes into flash) */
-
- if (WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex)
- {
-
- /* There are databytes in the writebuffer write them into flash */
- dLoaderWritePage(((ULONG)HandleTable[Handle].pFlash & ~(SECTORSIZE - 1)), WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex, WriteBuffer[HandleTable[Handle].WriteBufNo].Buf);
- }
-
- /* Now the databuffer is free now use if for a buffer for the fileheader*/
- memcpy(WriteBuffer[HandleTable[Handle].WriteBufNo].Buf, (void const*)HandleTable[Handle].FileDlPtr, SECTORSIZE);
- TmpFileHeader = (FILEHEADER *) WriteBuffer[HandleTable[Handle].WriteBufNo].Buf;
- TmpFileHeader->DataSize = TmpFileHeader->FileSize - HandleTable[Handle].DataLength;
- dLoaderWritePage(((ULONG)HandleTable[Handle].FileDlPtr & ~(SECTORSIZE - 1)), SECTORSIZE, WriteBuffer[HandleTable[Handle].WriteBufNo].Buf);
- }
- else
- {
-
- /* This is a system file being closed now update the file pointer table if no error and complete file written */
- if ((DLERROR != WriteBuffer[HandleTable[Handle].WriteBufNo].Status) && (0 == HandleTable[Handle].DataLength))
- {
-
- /* no error durig download - add the file pointer to the file pointer table */
- Handle = dLoaderInsertPtrTable((const UBYTE *) HandleTable[Handle].FileDlPtr, Handle);
- }
- else
- {
-
- /* an error has occured during download - now clean up the mess... */
- dLoaderUpdateSectorTable();
- }
- }
- }
- if (HandleTable[Handle].WriteBufNo != FREEBUFNO)
- {
- WriteBuffer[HandleTable[Handle].WriteBufNo].Status = FREE;
- HandleTable[Handle].WriteBufNo = FREEBUFNO;
- }
- HandleTable[Handle].Status = FREE;
- }
- }
- return(RtnStatus);
-}
-
-
-UWORD dLoaderOpenRead(UBYTE *pFileName, ULONG *pLength)
-{
- UWORD Handle;
- UBYTE Name[16];
- const FILEHEADER *TmpHeader;
- ULONG FileLength;
- ULONG DataLength;
-
- Handle = dLoaderFind(pFileName, Name, &FileLength, &DataLength, (UBYTE)BUSY);
- if (0x8000 > Handle)
- {
- if (FileLength)
- {
- TmpHeader = (FILEHEADER const *)(FILEPTRTABLE[HandleTable[Handle].FileIndex]);
- HandleTable[Handle].pFlash = (const UBYTE *)TmpHeader->FileStartAdr;
- HandleTable[Handle].pSectorNo = TmpHeader->FileSectorTable;
- HandleTable[Handle].DataLength = TmpHeader->DataSize;
- HandleTable[Handle].ReadLength = 0;
- *pLength = TmpHeader->DataSize;
- }
- else
- {
- Handle = FILENOTFOUND;
- }
- }
- return(Handle);
-}
-
-UWORD dLoaderRead(UBYTE Handle, UBYTE *pBuffer, ULONG *pLength)
-{
- UWORD ByteCnt, Status;
-
- Status = dLoaderCheckHandle(Handle, BUSY);
- if (0x8000 > Status)
- {
- Status = Handle;
- ByteCnt = 0;
- while (ByteCnt < *pLength)
- {
- if (HandleTable[Handle].DataLength <= HandleTable[Handle].ReadLength)
- {
- *pLength = ByteCnt;
- Status |= ENDOFFILE;
- }
- else
- {
- *pBuffer = *(HandleTable[Handle].pFlash);
- pBuffer++;
- ByteCnt++;
- HandleTable[Handle].pFlash++;
- HandleTable[Handle].ReadLength++;
- if (!((ULONG)(HandleTable[Handle].pFlash) & (SECTORSIZE-1)))
- {
- HandleTable[Handle].pFlash = dLoaderGetNextSectorPtr(Handle);
- }
- }
- }
- }
- return(Status);
-}
-
-UWORD dLoaderDelete(UBYTE *pFile)
-{
- UWORD LStatus;
- ULONG FileLength;
- ULONG DataLength;
- UBYTE Name[FILENAME_LENGTH + 1];
-
- LStatus = dLoaderFind(pFile, Name, &FileLength, &DataLength, (UBYTE)BUSY);
-
- if (!IS_LOADER_ERR(LStatus))
- {
- LStatus = dLoaderDeleteFilePtr((UBYTE)LStatus);
- }
-
- dLoaderCloseHandle(LStatus);
-
- return(LStatus);
-}
-
-UWORD dLoaderFind(UBYTE *pFind, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength, UBYTE Session)
-{
- UWORD Handle;
-
- Handle = dLoaderGetFreeHandle();
- if (Handle < 0x8000)
- {
- if (FILENAME_LENGTH < strlen((const char*)pFind))
- {
- Handle |= ILLEGALFILENAME;
- }
- else
- {
- HandleTable[Handle].FileIndex = 0xFFFF;
- HandleTable[Handle].Status = Session;
- dLoaderInsertSearchStr((HandleTable[Handle].SearchStr), pFind, &(HandleTable[Handle].SearchType));
- Handle = dLoaderFindNext(Handle, pFound, pFileLength, pDataLength);
- }
- }
-
- return(Handle);
-}
-
-UWORD dLoaderFindNext(UWORD Handle, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength)
-{
- UBYTE Tmp;
- UWORD ReturnVal;
- FILEHEADER *pHeader;
-
- *pFileLength = 0;
- ReturnVal = Handle | FILENOTFOUND;
-
-
- for (Tmp = ((HandleTable[Handle].FileIndex) + 1); Tmp < MAX_FILES; Tmp++)
- {
- if (0xFFFFFFFF != FILEPTRTABLE[Tmp])
- {
- if (SUCCESS == dLoaderCheckName((UBYTE*)FILEPTRTABLE[Tmp], HandleTable[Handle].SearchStr, HandleTable[Handle].SearchType))
- {
- HandleTable[Handle].FileIndex = Tmp;
- Tmp = MAX_FILES;
- ReturnVal = Handle;
- }
- }
- }
- if (0x8000 > ReturnVal)
- {
- pHeader = (FILEHEADER *)FILEPTRTABLE[HandleTable[Handle].FileIndex];
- if (NULL != pFileLength)
- {
- *pFileLength = pHeader->FileSize;
- }
- if (NULL != pDataLength)
- {
- *pDataLength = pHeader->DataSize;
- }
- if (NULL != pFound)
- {
- dLoaderCopyFileName(pFound, (UBYTE *)pHeader->FileName);
- }
- }
- return(ReturnVal);
-}
-
-
-ULONG dLoaderReturnFreeFlash(void)
-{
- ULONG SectorCnt, IndexPtr;
- UWORD Sectors;
-
-
- Sectors = 0;
- IndexPtr = (ULONG)0x01 << SECTORPOINTERUSERFLASH; /* Offset in first index can be different from 0 */
- for(SectorCnt = SECTORINDEXUSERFLASH; SectorCnt <= ((NOOFSECTORS>>5)-1); SectorCnt++)
- {
- for( ; IndexPtr > 0; IndexPtr<<=1)
- {
- if (!(SectorTable[SectorCnt] & IndexPtr))
- {
- Sectors++;
- }
- }
- IndexPtr = 0x00000001;
- }
-
- FreeSectors = Sectors;
- return(dLoaderCalcFreeFileSpace(Sectors));
-}
-
-ULONG dLoaderCalcFreeFileSpace(UWORD NosOfFreeSectors)
-{
- UWORD SectorCnt;
- ULONG Space;
- ULONG HeaderSpace;
-
- /* Calculate only if any sectors available */
- if (NosOfFreeSectors)
- {
-
- Space = (ULONG)NosOfFreeSectors << SECTORSIZESHIFT;
-
- /* (FreeSectors - 1) is beacuse the the first sector of a file do not */
- /* require an entry in the sector table - it is pointed to by the filepointer */
- /* in the file pointer table*/
- SectorCnt = NosOfFreeSectors - 1;
-
- /* If more that one sector is used for the header the first filebody sector do not */
- /* require an entry in the sectortable - it is pointed to by the file startpointer */
- /* in the file header */
- if ((((SectorCnt<<1) + HEADERFIXEDSIZE) & (SECTORSIZE - 1)) < 4)
- {
- SectorCnt--;
- }
-
- HeaderSpace = (HEADERFIXEDSIZE + (SectorCnt << 1));
- if (HeaderSpace & 0x0003)
- {
- /* Header size is not a multiplum of 4 - now make it a mul 4 */
- HeaderSpace += (0x0004 - (HeaderSpace & 0x0003));
- }
- Space -= HeaderSpace;
- }
- return(Space);
-}
-
-
-UWORD dLoaderGetFilePtr(UBYTE *pFileName, UBYTE *pPtrToFile, ULONG *pFileLength)
-{
- UWORD RtnVal;
- UBYTE FoundFile[16];
- FILEHEADER *File;
- ULONG DataLength;
-
-
- RtnVal = dLoaderFind(pFileName, FoundFile, pFileLength, &DataLength, (UBYTE)BUSY);
- if (0x8000 > RtnVal)
- {
-
- File = (FILEHEADER*) FILEPTRTABLE[HandleTable[RtnVal].FileIndex];
- if (LINEAR & File->FileType)
- {
- *((ULONG*)pPtrToFile) = File->FileStartAdr;
- }
- else
- {
- RtnVal |= NOTLINEARFILE;
- }
- }
- return(RtnVal);
-}
-
-UWORD dLoaderAllocateHeader(UWORD Handle, ULONG *FileStartAdr, FILEHEADER *pHeader, UWORD HeaderByteSize, UWORD CompleteFileSectorSize)
-{
- UWORD Tmp;
- UWORD SectorTableIndex;
- ULONG SectorIndex;
- UWORD HeaderSectorSize;
- UBYTE EvenHeader;
- UWORD FileBodySectorSize;
- UWORD ErrorCode;
-
- HeaderSectorSize = ((HeaderByteSize - 1) >> SECTORSIZESHIFT) + 1;
- FileBodySectorSize = (((pHeader->FileSize - (SECTORSIZE - (HeaderByteSize & (SECTORSIZE - 1)))) - 1) >> SECTORSIZESHIFT) + 1;
-
- /* First allocate the file file header - this means the file name, */
- /* the file start adress, and the sector table */
-
- /* SectorTableIndex indicates in the last word of a sector in which */
- /* sector the sectortable continues */
- SectorTableIndex = ((SECTORSIZE - HEADERFIXEDSIZE)>>1) - 1;
-
- /* Find first free sector - here there is a differende between linear or not*/
- ErrorCode = dLoaderFindFirstSector(pHeader->FileType, CompleteFileSectorSize, &Tmp);
-
- if (SUCCESS == ErrorCode)
- {
- *FileStartAdr = (ULONG)((ULONG)Tmp << SECTORSIZESHIFT) | FLASHOFFSET;
- HandleTable[Handle].FileDlPtr = *FileStartAdr;
-
- SectorIndex = (Tmp >> 5);
- Tmp &= 0x1F;
-
- SectorTable[SectorIndex]|= (0x01<<Tmp);
-
- /* Advance to next sector */
- Tmp++;
-
- /* if only one sector used for for file header */
- pHeader->FileStartAdr = (ULONG)(*FileStartAdr) + HeaderByteSize;
-
- /* if there is a sectortable it always starts right after the fixed header (Name + start + size)*/
- HandleTable[Handle].pSectorNo = (const UWORD *)(*FileStartAdr + HEADERFIXEDSIZE);
-
- /* First header has been allocated by find first function */
- HeaderSectorSize--;
- UWORD TmpHSS = HeaderSectorSize;
-
- /* Next part is only executed when more than one sector is used */
- if (HeaderSectorSize)
- {
- UBYTE ExitCode = FALSE;
-
- while ((FALSE == ExitCode) && (SectorIndex < (NOOFSECTORS/32)))
- {
- for(; ((Tmp < 32) && (ExitCode == FALSE)); Tmp++)
- {
- if (!(SectorTable[SectorIndex] & (0x01<<Tmp)))
- {
- /* Sector is free you can have this one */
- SectorTable[SectorIndex] |= (0x01<<Tmp);
- pHeader->FileSectorTable[SectorTableIndex] = (SectorIndex << 5) + Tmp;
- SectorTableIndex += (SECTORSIZE/2);
- HeaderSectorSize--;
- if (0 == HeaderSectorSize)
- {
- pHeader->FileStartAdr = (((SectorIndex << 5) + Tmp) << SECTORSIZESHIFT) + (HeaderByteSize - (TmpHSS<<SECTORSIZESHIFT)) | FLASHOFFSET;
- ExitCode = TRUE;
- }
- }
- }
- if (FALSE == ExitCode)
- {
- SectorIndex++;
- Tmp = 0;
- }
- }
- }
-
- EvenHeader = FALSE;
- if (((HeaderByteSize & (SECTORSIZE - 1)) >= (SECTORSIZE - 2)) || (0 == (HeaderByteSize & (SECTORSIZE - 1))))
- {
-
- /* The header uses exact one or several sectors */
- /* meaning that the next sector do not go into */
- /* the sectortable as it is pointed to by the */
- /* FileStart pointer */
- EvenHeader = TRUE;
- }
-
- /* Now allocated the file body */
- SectorTableIndex = 0;
- while ((FileBodySectorSize > 0) && (SectorIndex < (NOOFSECTORS/32)))
- {
- for(; Tmp < 32; Tmp++)
- {
- if (!(SectorTable[SectorIndex] & (0x01<<Tmp)))
- {
- if (TRUE == EvenHeader)
- {
- /* This sector do not go into the sectortable */
- /* it is pointed to by the filestart pointer */
- SectorTable[SectorIndex] |= (0x01<<Tmp);
- pHeader->FileStartAdr = (((SectorIndex << 5) + Tmp) << SECTORSIZESHIFT) | FLASHOFFSET;
- EvenHeader = FALSE;
- }
- else
- {
-
- /* Sector is free you can have this one */
- SectorTable[SectorIndex] |= (0x01<<Tmp);
- if (((((SECTORSIZE - HEADERFIXEDSIZE)>>1)-1) == SectorTableIndex) || (((SectorTableIndex - ((SECTORSIZE - HEADERFIXEDSIZE)>>1)) & 0x7F) == 127))
- {
- SectorTableIndex++;
- }
- pHeader->FileSectorTable[SectorTableIndex] = (SectorIndex << 5) + Tmp;
- SectorTableIndex++;
- FileBodySectorSize--;
- if (0 == FileBodySectorSize)
- {
- Tmp = 32;
- SectorIndex = (NOOFSECTORS/32);
- }
- }
- }
- }
- SectorIndex++;
- Tmp = 0;
- }
- }
- else
- {
- Handle |= ErrorCode;
- }
- return(Handle);
-}
-
-
-UWORD dLoaderFindFirstSector(UBYTE Type, UWORD SectorCount, UWORD *pSector)
-{
- UWORD CompleteSectorSize;
- UWORD SectorIndex;
- UBYTE Tmp;
- UWORD SectorCnt;
- UWORD ErrorCode;
-
-
- ErrorCode = SUCCESS;
-
- SectorIndex = SECTORINDEXUSERFLASH;
- Tmp = SECTORPOINTERUSERFLASH;
-
-
-
- if (LINEAR & Type)
- {
- CompleteSectorSize = SectorCount;
- ErrorCode = NOLINEARSPACE;
-
- /* find linear adress space */
- SectorCnt = CompleteSectorSize;
-
- while ((SectorCnt > 0) && (SectorIndex < (NOOFSECTORS>>5)))
- {
- if ((SectorTable[SectorIndex]) & ((ULONG)0x01<<Tmp))
- {
- SectorCnt = CompleteSectorSize;
- }
- else
- {
- SectorCnt--;
- if (0 == SectorCnt)
- {
- *pSector = ((SectorIndex<<5) + Tmp) - CompleteSectorSize + 1;
- SectorIndex = (NOOFSECTORS>>5);
- ErrorCode = SUCCESS;
- }
- }
-
- if (0x1F == Tmp)
- {
- SectorIndex++;
- }
- Tmp = (Tmp + 1) & 0x1F;
- }
- }
- else
- {
- ErrorCode = UNDEFINEDERROR;
- while(SectorIndex < (NOOFSECTORS>>5))
- {
- if (!((SectorTable[SectorIndex]) & ((ULONG)0x01<<Tmp)))
- {
- *pSector = (SectorIndex<<5) + Tmp;
- SectorIndex = (NOOFSECTORS>>5);
- ErrorCode = SUCCESS;
- }
- if (0x1F == Tmp)
- {
- SectorIndex++;
- }
- Tmp = (Tmp + 1) & 0x1F;
- }
- }
- return(ErrorCode);
-}
-
-
-UWORD dLoaderFlashFileHeader(UWORD Handle, ULONG FileStartAdr, FILEHEADER *pHeader, UWORD HeaderByteSize)
-{
- ULONG *pBufPtr;
- ULONG FlashPtr;
- UWORD HeaderSectorSize;
-
- pBufPtr = (ULONG*)pHeader;
- FlashPtr = FileStartAdr;
- HeaderSectorSize = (HeaderByteSize - 1) >> SECTORSIZESHIFT;
-
- dLoaderWritePage(FlashPtr, SECTORSIZE, pBufPtr);
-
- while(HeaderSectorSize)
- {
- pBufPtr += (SECTORSIZE>>2);
- FlashPtr = (((*(pBufPtr - 1) & 0xFFFF0000) >> 16) << SECTORSIZESHIFT) | FLASHOFFSET;
- dLoaderWritePage(FlashPtr, SECTORSIZE, pBufPtr);
- HeaderSectorSize--;
- }
-
- /* Prepare for actual data download */
- memcpy(WriteBuffer[HandleTable[Handle].WriteBufNo].Buf, pBufPtr, SECTORSIZE);
- WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex = (UWORD)(pHeader->FileStartAdr) & (SECTORSIZE-1);
- HandleTable[Handle].pFlash = (UBYTE *)pHeader->FileStartAdr;
-
- return(Handle);
-}
-
-
-UWORD dLoaderGetSectorNumber(ULONG Adr)
-{
- UWORD SectorNo;
-
- SectorNo = (Adr & ~FLASHOFFSET)>>SECTORSIZESHIFT;
-
- return(SectorNo);
-}
-
-
-UWORD dLoaderAllocateWriteBuffer(UWORD Handle)
-{
- UBYTE Tmp;
- UWORD ErrorCode;
-
- ErrorCode = NOWRITEBUFFERS;
- for (Tmp = 0; Tmp < MAX_WRITE_BUFFERS; Tmp++)
- {
- if (FREE == WriteBuffer[Tmp].Status)
- {
- WriteBuffer[Tmp].Status = BUSY;
- memset(WriteBuffer[Tmp].Buf, 0xFF, sizeof(WriteBuffer[Tmp].Buf));
- WriteBuffer[Tmp].BufIndex = 0;
- HandleTable[Handle].WriteBufNo = Tmp;
- ErrorCode = SUCCESS;
- Tmp = MAX_WRITE_BUFFERS;
- }
- }
- Handle |= ErrorCode;
- return(Handle);
-}
-
-UWORD dLoaderCheckFiles(UBYTE Handle)
-{
- UBYTE Tmp;
- UBYTE Index;
- UWORD ErrorCode;
-
- ErrorCode = SUCCESS;
- Index = HandleTable[Handle].FileIndex;
- for (Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
- if (((BUSY == HandleTable[Tmp].Status) || (DOWNLOADING == HandleTable[Tmp].Status)) && (Index == HandleTable[Tmp].FileIndex) && (Tmp != Handle))
- {
- ErrorCode = FILEISBUSY;
- }
- }
- return(Handle | ErrorCode);
-}
-
-
-void dLoaderCopyFileName(UBYTE *pDst, UBYTE *pSrc)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < FILENAME_SIZE; Tmp++, pDst++)
- {
- if ('\0' != *pSrc)
- {
- *pDst = *pSrc;
- pSrc++;
- }
- else
- {
- *pDst = '\0';
- }
- }
-}
-
-
-void dLoaderCheckVersion(void)
-{
- if (FILEPTRTABLE[FILEVERSIONINDEX] != FILEVERSION)
- {
- dLoaderDeleteAllFiles();
- }
-}
-
-
-UWORD dLoaderOpenAppend(UBYTE *pFileName, ULONG *pAvailSize)
-{
- UWORD Handle;
- ULONG FileSize, DataSize;
- UBYTE Name[FILENAME_SIZE];
- FILEHEADER *pHeader;
-
- *pAvailSize = 0;
-
- Handle = dLoaderFind(pFileName, Name, &FileSize, &DataSize, (UBYTE)BUSY);
- if (0x8000 > Handle)
- {
-
- /* Check for an append in progress for this file */
- if (0x8000 > dLoaderCheckDownload(pFileName))
- {
-
- /* File has bee found - check for then correct filetype (Datafile) */
- pHeader = (FILEHEADER *)FILEPTRTABLE[HandleTable[Handle].FileIndex];
- if (DATAFILE & pHeader->FileType)
- {
- if (FileSize > DataSize)
- {
- /* Append is possible */
- Handle = dLoaderAllocateWriteBuffer(Handle);
- if (Handle < 0x8000)
- {
- dLoaderSetFilePointer(Handle, DataSize, &(HandleTable[Handle].pFlash));
- WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex = (ULONG)(HandleTable[Handle].pFlash) & (SECTORSIZE - 1);
- memcpy(WriteBuffer[HandleTable[Handle].WriteBufNo].Buf, (const UBYTE *)((ULONG)(HandleTable[Handle].pFlash) & ~(SECTORSIZE - 1)), WriteBuffer[HandleTable[Handle].WriteBufNo].BufIndex );
- HandleTable[Handle].FileDlPtr = FILEPTRTABLE[HandleTable[Handle].FileIndex];
- HandleTable[Handle].Status = (UBYTE)DOWNLOADING;
- *pAvailSize = FileSize - DataSize;
- HandleTable[Handle].DataLength = *pAvailSize;
- HandleTable[Handle].FileType = pHeader->FileType;
- }
- }
- else
- {
- Handle |= FILEISFULL;
- }
- }
- else
- {
- Handle |= APPENDNOTPOSSIBLE;
- }
- }
- else
- {
- Handle |= FILEISBUSY;
- }
- }
-
- return(Handle);
-}
-
-
-UWORD dLoaderSetFilePointer(UWORD Handle, ULONG BytePtr, const UBYTE **pData)
-{
- ULONG AdrOffset;
- const UBYTE *Adr;
- UWORD SectorNo;
- UWORD Tmp;
- FILEHEADER *pHeader;
-
-
- pData = pData;
- pHeader = (FILEHEADER*)FILEPTRTABLE[HandleTable[Handle].FileIndex];
- HandleTable[Handle].pSectorNo = pHeader->FileSectorTable;
-
- /* Get the sector offset */
- AdrOffset = SECTORSIZE - ((pHeader->FileStartAdr) & (SECTORSIZE - 1));
-
- if (BytePtr > AdrOffset)
- {
- BytePtr = BytePtr - AdrOffset;
- SectorNo = ((BytePtr >> SECTORSIZESHIFT) + 1);
-
- for (Tmp = 0; Tmp < SectorNo; Tmp++)
- {
- Adr = dLoaderGetNextSectorPtr(Handle);
- if (BytePtr > SECTORSIZE)
- {
- BytePtr -= SECTORSIZE;
- }
- }
- *pData = (const UBYTE *)((ULONG)Adr + BytePtr);
- }
- else
- {
-
- /* Pointer reside in the first sector of the file body */
- *pData = (const UBYTE *)((ULONG)(pHeader->FileStartAdr) + BytePtr);
- }
- return(Handle);
-}
-
-void dLoaderCpyToLower(UBYTE *pDst, UBYTE *pSrc, UBYTE Length)
-{
- UBYTE Tmp;
-
- for(Tmp = 0; Tmp < Length; Tmp++)
- {
- pDst[Tmp] =(UBYTE)toupper((UWORD)pSrc[Tmp]);
- }
-
- /* The requried length has been copied - now fill with zeros */
- for(Tmp = Length; Tmp < FILENAME_SIZE; Tmp++)
- {
- pDst[Tmp] = '\0';
- }
-}
-
-UWORD dLoaderCheckName(UBYTE *pName, UBYTE *pSearchStr, UBYTE SearchType)
-{
- UBYTE TmpName[FILENAME_SIZE];
- UWORD RtnVal;
-
- RtnVal = UNDEFINEDERROR;
-
- dLoaderCpyToLower(TmpName, pName, (UBYTE)FILENAME_SIZE);
-
- RtnVal = SUCCESS;
- switch (SearchType)
- {
- case FULLNAME:
- {
- if (0 != strcmp((const char*)TmpName, (const char *)pSearchStr))
- {
- RtnVal = UNDEFINEDERROR;
- }
- }
- break;
- case NAME:
- {
- if (0 != memcmp(TmpName, pSearchStr, strlen((const char *)pSearchStr)))
- {
- RtnVal = UNDEFINEDERROR;
- }
- }
- break;
- case EXTENTION:
- {
- if (0 == strstr((const char *)TmpName, (const char*)pSearchStr))
- {
- RtnVal = UNDEFINEDERROR;
- }
- }
- break;
- case WILDCARD:
- {
- RtnVal = SUCCESS;
- }
- break;
- default:
- {
- }
- break;
- }
- return(RtnVal);
-}
-
-void dLoaderInsertSearchStr(UBYTE *pDst, UBYTE *pSrc, UBYTE *pSearchType)
-{
- UBYTE Tmp;
-
- *pSearchType = WILDCARD;
- if (0 != strstr((char const *)pSrc, "*.*"))
- {
-
- /* find all */
- strcpy ((PSZ)pDst, (PSZ)pSrc);
- *pSearchType = WILDCARD;
- }
- else
- {
-
- /* Using other wild cards? */
- Tmp = strlen((char const *)pSrc);
- if (0 != strstr((PSZ)(pSrc), ".*"))
- {
-
- /* Extention wildcard */
- dLoaderCpyToLower(pDst, pSrc, (Tmp-1));
- *pSearchType = NAME;
- }
- else
- {
- if (0 != strstr((PSZ)(pSrc), "*."))
- {
-
- /* Filename wildcard */
- dLoaderCpyToLower(pDst, &pSrc[1], (UBYTE)4);
- *pSearchType = EXTENTION;
- }
- else
- {
-
- /* no wildcards used */
- dLoaderCpyToLower(pDst, pSrc, Tmp);
- *pSearchType = FULLNAME;
- }
- }
- }
-}
-
-UWORD dLoaderCheckHandle(UWORD Handle, UBYTE Operation)
-{
-
- if (MAX_HANDLES > Handle)
- {
- if (Operation != HandleTable[(UBYTE)Handle].Status)
- {
- Handle |= ILLEGALHANDLE;
- }
- }
- else
- {
- Handle |= ILLEGALHANDLE;
- }
- return(Handle);
-}
-
-ULONG dLoaderReturnFreeUserFlash(void)
-{
- return(FreeUserFlash);
-}
-
-UWORD dLoaderRenameFile(UBYTE Handle, UBYTE *pNewName)
-{
- ULONG SectorBuf[SECTORSIZE/4];
- ULONG *pFile;
- UBYTE Tmp;
- FILEHEADER *pHeader;
-
- pFile = (ULONG *)FILEPTRTABLE[HandleTable[Handle].FileIndex];
- for (Tmp = 0; Tmp < (SECTORSIZE/4); Tmp++)
- {
- SectorBuf[Tmp] = pFile[Tmp];
- }
-
- pHeader = (FILEHEADER *) SectorBuf;
-
- dLoaderCopyFileName((pHeader->FileName), pNewName);
- dLoaderWritePage((ULONG)pFile, SECTORSIZE, SectorBuf);
- return(SUCCESS);
-}
-
-
-UWORD dLoaderCheckDownload(UBYTE *pName)
-{
- UBYTE Tmp;
- UWORD ErrorCode;
-
- ErrorCode = SUCCESS;
- for(Tmp = 0; Tmp < MAX_HANDLES; Tmp ++)
- {
- if (DOWNLOADING == HandleTable[Tmp].Status)
- {
- if (SUCCESS == dLoaderCheckName(pName, HandleTable[Tmp].SearchStr, FULLNAME))
- {
- Tmp = MAX_HANDLES;
- ErrorCode = FILEEXISTS;
- }
- }
- }
- return(ErrorCode);
-}
-
-
-
-
-UWORD dLoaderCropDatafile(UBYTE Handle)
-{
- UWORD ReturnVal;
- ULONG SectorBuffer[SECTORSIZE];
- UBYTE FileIndex;
-
- /* Save the fileindex for use after the handle has been closed */
- FileIndex = HandleTable[Handle].FileIndex;
-
- ReturnVal = dLoaderCloseHandle(Handle);
- if (0x8000 > ReturnVal)
- {
-
- /* Successful close handle now try to crop the file if filesize and datasize differs */
- /* and File exists */
- if (((FILEPTRTABLE[FileIndex]) != 0x00000000) && ((FILEPTRTABLE[FileIndex]) != 0xFFFFFFFF))
- {
- if (((FILEHEADER const *)(FILEPTRTABLE[FileIndex]))->FileSize != ((FILEHEADER const *)(FILEPTRTABLE[FileIndex]))->DataSize)
- {
- memcpy(SectorBuffer, (void const*)(FILEPTRTABLE[FileIndex]), SECTORSIZE);
- ((FILEHEADER*)SectorBuffer)->FileSize = ((FILEHEADER const *)(FILEPTRTABLE[FileIndex]))->DataSize;
- dLoaderWritePage((ULONG)(FILEPTRTABLE[HandleTable[Handle].FileIndex]), SECTORSIZE, SectorBuffer);
-
- /* Update sectortable and available flash size */
- dLoaderUpdateSectorTable();
- }
- }
- }
- return(ReturnVal);
-}
-
-void dLoaderExit(void)
-{
-}
diff --git a/AT91SAM7S256/Source/d_loader.h b/AT91SAM7S256/Source/d_loader.h
deleted file mode 100644
index 902c7f7..0000000
--- a/AT91SAM7S256/Source/d_loader.h
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 24-06-09 12:15 $
-//
-// Filename $Workfile:: d_loader.h $
-//
-// Version $Revision:: 18 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_load $
-//
-// Platform C
-//
-
-#ifndef D_LOADER
-#define D_LOADER
-
-#define FILETABLE_SIZE ((2 * SECTORSIZE)/4)
-#define STARTOFFILETABLE (0x140000L - (FILETABLE_SIZE*4))
-#define FILEPTRTABLE ((const ULONG*)(0x140000L - (FILETABLE_SIZE*4)))
-#ifndef STARTOFUSERFLASH_FROM_LINKER
-#define STARTOFUSERFLASH (0x122100L)
-#define SIZEOFUSERFLASH_MAX SIZEOFUSERFLASH
-#else
-extern char __STARTOFUSERFLASH_FROM_LINKER;
-#define STARTOFUSERFLASH ((ULONG) &__STARTOFUSERFLASH_FROM_LINKER)
-#define SIZEOFUSERFLASH_MAX ((ULONG) (128 * 1024))
-#endif
-#define SIZEOFUSERFLASH ((ULONG)STARTOFFILETABLE - STARTOFUSERFLASH)
-
-#define SIZEOFFLASH 262144L
-#define SECTORSIZE 256L
-#define SECTORSIZESHIFT 8
-#define NOOFSECTORS (SIZEOFFLASH/SECTORSIZE)
-#define HEADERFIXEDSIZE (FILENAME_SIZE + 4 + 4 + 4 + 2 + 2)
-#define FILENAME_SIZE (FILENAME_LENGTH + 1)
-
-#define FULLNAME 1
-#define NAME 2
-#define EXTENTION 3
-#define WILDCARD 4
-
-/* Enum related to HandleTable Status */
-enum
-{
- FREE,
- BUSY,
- DOWNLOADING,
- SEARCHING,
- DLERROR
-};
-
-/* Enum related to HandleTable WriteBufNo */
-enum
-{
- FREEBUFNO = 0xFF
-};
-
-
-/* Constants related to filetype */
-enum
-{
- SYSTEMFILE = 0x01,
- DATAFILE = 0x02,
- LINEAR = 0x04,
- NONLINEAR = 0x08
-};
-
-typedef struct
-{
- UBYTE FileName[FILENAME_SIZE];
- ULONG FileStartAdr;
- ULONG FileSize;
- ULONG DataSize;
- UWORD CheckSum;
- UWORD FileType;
- UWORD FileSectorTable[(SIZEOFUSERFLASH_MAX/SECTORSIZE)];
-}FILEHEADER;
-
-void dLoaderInit(void);
-__ramfunc UWORD dLoaderWritePage(ULONG Flash_Address, UWORD Size, ULONG *pBuf);
-UWORD dLoaderInsertPtrTable(const UBYTE *pAdr, UWORD Handle);
-UWORD dLoaderCreateFileHeader(ULONG FileSize, UBYTE *pName, UBYTE LinearState, UBYTE FileType);
-UWORD dLoaderWriteData(UWORD Handle, UBYTE *pBuf, UWORD *pLen);
-UWORD dLoaderCloseHandle(UWORD Handle);
-UWORD dLoaderOpenRead(UBYTE *pFileName, ULONG *pLength);
-UWORD dLoaderRead(UBYTE Handle, UBYTE *pBuf, ULONG *pLength);
-UWORD dLoaderDelete(UBYTE *pFile);
-UWORD dLoaderFind(UBYTE *pFind, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength, UBYTE Session);
-UWORD dLoaderFindNext(UWORD Handle, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength);
-UWORD dLoaderDeleteFilePtr(UWORD Handle);
-void dLoaderDeleteAllFiles(void);
-UWORD dLoaderGetFilePtr(UBYTE *pFileName, UBYTE *pPtrToFile, ULONG *pFileLength);
-void dLoaderCopyFileName(UBYTE *pDst, UBYTE *pSrc);
-UWORD dLoaderOpenAppend(UBYTE *pFileName, ULONG *pAvailSize);
-void dLoaderCpyToLower(UBYTE *pDst, UBYTE *pSrc, UBYTE Length);
-UWORD dLoaderCheckName(UBYTE *pName, UBYTE *pSearchStr, UBYTE SearchType);
-void dLoaderInsertSearchStr(UBYTE *pDst, UBYTE *pSrc, UBYTE *pSearchType);
-ULONG dLoaderReturnFreeUserFlash(void);
-UWORD dLoaderRenameFile(UBYTE Handle, UBYTE *pNewName);
-UWORD dLoaderCheckFiles(UBYTE Handle);
-
-UWORD dLoaderCropDatafile(UBYTE Handle);
-
-
-
-void dLoaderExit(void);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_loader.r b/AT91SAM7S256/Source/d_loader.r
deleted file mode 100644
index 3fb2556..0000000
--- a/AT91SAM7S256/Source/d_loader.r
+++ /dev/null
@@ -1,117 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_loader.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_load $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#define AT91C_MC_CORRECT_KEY 0x5A000000L
-
-static ULONG SectorImage[SECTORSIZE>>2];
-
-#define LOADERInit
-
-
-__ramfunc UWORD AT91F_Flash_Ready (void)
-{
- UWORD status;
- status = 0;
-
- //* Wait the end of command
- while ((status & AT91C_MC_FRDY) != AT91C_MC_FRDY )
- {
- status = AT91C_BASE_MC->MC_FSR;
- }
- return status;
-}
-
-__ramfunc UWORD dLoaderWritePage(ULONG Flash_Address, UWORD Size, ULONG *pBuf)
-{
- //* set the Flash controller base address
- AT91PS_MC ptMC = AT91C_BASE_MC;
- unsigned int i, page, status;
- unsigned int * Flash;
-
- //* init flash pointer
- Flash = (unsigned int *) (Flash_Address | (unsigned int)AT91C_IFLASH);
-
- //* Get the Flash page number
- page = ((Flash_Address & ~(unsigned int)AT91C_IFLASH) >> SECTORSIZESHIFT);
-
- //* copy the new value
- if (Size & 0x0003)
- {
- Size = Size + (0x0004 - (Size & 0x0003));
- }
- for (i=0; (i < SECTORSIZE) & (Size > 0) ;i++, Flash++,pBuf++,Size-=4 )
- {
- //* copy the flash to the write buffer ensuring code generation
- *Flash=*pBuf;
- }
-
- //* Write the write page command
- ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (page <<8));
-
- //* Wait the end of command
- status = AT91F_Flash_Ready();
-
- //* Check the result
- if ( (status & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))!=0)
- {
- return FALSE;
- }
- return TRUE;
-
-}
-
-__ramfunc UWORD dLoaderErasePage(ULONG Flash_Address)
-{
- //* set the Flash controller base address
- AT91PS_MC ptMC = AT91C_BASE_MC;
- unsigned int i, page, status, Size;
- unsigned int * Flash;
-
- Size = SECTORSIZE;
-
- //* init flash pointer
- Flash = (unsigned int *) (Flash_Address | (unsigned int)AT91C_IFLASH);
-
- //* Get the Flash page number
- page = ((Flash_Address & ~(unsigned int)AT91C_IFLASH) >> SECTORSIZESHIFT);
-
- //* copy the new value
- for (i=0; (i < SECTORSIZE) & (Size > 0) ;i++, Flash++,Size-=4 )
- {
- //* copy the flash to the write buffer ensuring code generation
- *Flash=0xFFFFFFFF;
- }
-
- //* Write the write page command
- ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (page <<8));
-
- //* Wait the end of command
- status = AT91F_Flash_Ready();
-
- //* Check the result
- if ( (status & ( AT91C_MC_PROGE | AT91C_MC_LOCKE ))!=0)
- {
- return FALSE;
- }
- return TRUE;
-
-}
-
-
-
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_lowspeed.c b/AT91SAM7S256/Source/d_lowspeed.c
deleted file mode 100644
index 91c1341..0000000
--- a/AT91SAM7S256/Source/d_lowspeed.c
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_lowspeed.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_lows $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_lowspeed.h"
-#include "d_lowspeed.r"
-
-
-void dLowSpeedInit(void)
-{
- LOWSpeedTxInit;
- LOWSpeedTimerInit;
- //ENABLEDebugOutput;
-}
-
-void dLowSpeedStartTimer(void)
-{
- ENABLEPWMTimerForLowCom;
-}
-
-void dLowSpeedStopTimer(void)
-{
- DISABLEPWMTimerForLowCom;
-}
-
-void dLowSpeedInitPins(UBYTE ChannelNumber)
-{
- ENABLETxPins(ChannelNumber);
-}
-
-UBYTE dLowSpeedSendData(UBYTE ChannelNumber, UBYTE *DataOutBuffer, UBYTE NumberOfTxByte)
-{
- UBYTE Status;
-
- TxData(ChannelNumber, Status, DataOutBuffer, NumberOfTxByte);
- return(Status);
-}
-
-void dLowSpeedReceiveData(UBYTE ChannelNumber, UBYTE *DataInBuffer, UBYTE ByteToRx)
-{
- RxData(ChannelNumber, DataInBuffer, ByteToRx);
-}
-
-UBYTE dLowSpeedComTxStatus(UBYTE ChannelNumber)
-{
- UBYTE Status;
-
- STATUSTxCom(ChannelNumber, Status)
-
- return(Status);
-}
-
-UBYTE dLowSpeedComRxStatus(UBYTE ChannelNumber)
-{
- UBYTE Status;
-
- STATUSRxCom(ChannelNumber, Status)
-
- return(Status);
-}
-
-void dLowSpeedExit(void)
-{
- LOWSpeedExit;
-}
diff --git a/AT91SAM7S256/Source/d_lowspeed.h b/AT91SAM7S256/Source/d_lowspeed.h
deleted file mode 100644
index 6ec62fd..0000000
--- a/AT91SAM7S256/Source/d_lowspeed.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_lowspeed.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_lows $
-//
-// Platform C
-//
-
-#ifndef D_LOWSPEED
-#define D_LOWSPEED
-
-void dLowSpeedInit(void);
-void dLowSpeedStartTimer(void);
-void dLowSpeedStopTimer(void);
-void dLowSpeedInitPins(UBYTE ChannelNumber);
-UBYTE dLowSpeedSendData(UBYTE ChannelNumber, UBYTE *DataOutBuffer, UBYTE NumberOfTxByte);
-void dLowSpeedReceiveData(UBYTE ChannelNumber, UBYTE *DataInBuffer, UBYTE ByteToRx);
-UBYTE dLowSpeedComTxStatus(UBYTE ChannelNumber);
-UBYTE dLowSpeedComRxStatus(UBYTE ChannelNumber);
-void dLowSpeedExit(void);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_lowspeed.r b/AT91SAM7S256/Source/d_lowspeed.r
deleted file mode 100644
index 279c10e..0000000
--- a/AT91SAM7S256/Source/d_lowspeed.r
+++ /dev/null
@@ -1,612 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 19-02-09 18:51 $
-//
-// Filename $Workfile:: d_lowspeed.r $
-//
-// Version $Revision:: 4 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_lows $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define CHANNEL_ONE_CLK AT91C_PIO_PA23 /* PA23 is Clk */
-#define CHANNEL_ONE_DATA AT91C_PIO_PA18 /* PA18 is Data */
-
-#define CHANNEL_TWO_CLK AT91C_PIO_PA28 /* PA28 is Clk */
-#define CHANNEL_TWO_DATA AT91C_PIO_PA19 /* PA19 is Data */
-
-#define CHANNEL_THREE_CLK AT91C_PIO_PA29 /* PA29 is Clk */
-#define CHANNEL_THREE_DATA AT91C_PIO_PA20 /* PA20 is Data */
-
-#define CHANNEL_FOUR_CLK AT91C_PIO_PA30 /* PA30 is Clk */
-#define CHANNEL_FOUR_DATA AT91C_PIO_PA2 /* PA2 is Data */
-
-#else
-
-#define CHANNEL_ONE_CLK AT91C_PIO_PA28 /* PA28 is Clk */
-#define CHANNEL_ONE_DATA AT91C_PIO_PA20 /* PA20 is Data */
-
-#endif
-
-typedef struct
-{
- UWORD MaskBit;
- UBYTE ChannelState;
- UBYTE TxState;
- UBYTE RxState;
- UBYTE ReStartState;
- UBYTE TxByteCnt;
- UBYTE RxByteCnt;
- UBYTE *pComOutBuffer;
- UBYTE *pComInBuffer;
- UBYTE AckStatus;
- UBYTE RxBitCnt;
- UBYTE ReStartBit;
- UBYTE ComDeviceAddress;
- UBYTE RxWaitCnt;
- UBYTE ClkStatus;
-}LOWSPEEDPARAMETERS;
-
-static LOWSPEEDPARAMETERS LowSpeedData[4];
-
-__ramdata
-ULONG DATA_PINS[4] = {CHANNEL_ONE_DATA, CHANNEL_TWO_DATA, CHANNEL_THREE_DATA, CHANNEL_FOUR_DATA};
-__ramdata
-ULONG CLK_PINS[4] = {CHANNEL_ONE_CLK, CHANNEL_TWO_CLK, CHANNEL_THREE_CLK, CHANNEL_FOUR_CLK};
-
-#define LOWSPEED_CHANNEL1 0
-#define LOWSPEED_CHANNEL2 1
-#define LOWSPEED_CHANNEL3 2
-#define LOWSPEED_CHANNEL4 3
-#define NO_OF_LOWSPEED_COM_CHANNEL 4
-
-#define MASK_BIT_8 0x80
-
-#define PIO_INQ 0x04
-
-//Used for variable ChannelState
-#define LOWSPEED_IDLE 0x00
-#define LOWSPEED_TX_STOP_BIT 0x01
-#define LOWSPEED_TRANSMITTING 0x02
-#define LOWSPEED_RECEIVING 0x04
-#define LOWSPEED_TEST_WAIT_STATE 0x08
-#define LOWSPEED_RESTART_CONDITION 0x10
-#define LOWSPEED_WAIT_BEFORE_RX 0x20
-
-//Used for variable TxState
-#define TX_IDLE 0x00
-#define TX_DATA_MORE_DATA 0x01
-#define TX_DATA_CLK_HIGH 0x02
-#define TX_EVALUATE_ACK_CLK_HIGH 0x03
-#define TX_DATA_READ_ACK_CLK_LOW 0x04
-#define TX_DATA_CLK_LOW 0x05
-#define TX_ACK_EVALUATED_CLK_LOW 0x06
-
-//Used for variable RxState
-#define RX_IDLE 0x00
-#define RX_START_BIT_CLK_HIGH 0x01
-#define RX_DATA_CLK_HIGH 0x02
-#define RX_ACK_TX_CLK_HIGH 0x03
-#define RX_DATA_CLK_LOW 0x04
-#define RX_DONE_OR_NOT_CLK_LOW 0x05
-
-//Used for variable ReStart
-#define RESTART_STATE_IDLE 0x00
-#define RESTART_STATE_ONE 0x01
-#define RESTART_STATE_TWO 0x02
-#define RESTART_STATE_THREE 0x03
-#define RESTART_STATE_FOUR 0x04
-#define RESTART_STATE_FIVE 0x05
-#define RESTART_STATE_SIX 0x06
-#define RESTART_STATE_SEVEN 0x07
-
-#define LOWSpeedTxInit {\
- LowSpeedData[LOWSPEED_CHANNEL1].ChannelState = 0;\
- LowSpeedData[LOWSPEED_CHANNEL2].ChannelState = 0;\
- LowSpeedData[LOWSPEED_CHANNEL3].ChannelState = 0;\
- LowSpeedData[LOWSPEED_CHANNEL4].ChannelState = 0;\
- }
-
-#define LOWSpeedTimerInit {\
- *AT91C_PMC_PCER = 0x400; /* Enable clock for PWM, PID10*/\
- *AT91C_PWMC_MR = 0x01; /* CLKA is output from prescaler */\
- *AT91C_PWMC_MR |= 0x600; /* Prescaler MCK divided with 64 */\
- *AT91C_PWMC_CH0_CMR = 0x06; /* Channel 0 uses MCK divided by 64 */\
- *AT91C_PWMC_CH0_CMR &= 0xFFFFFEFF; /* Left alignment on periode */\
- *AT91C_PWMC_CH0_CPRDR = 0x20; /* Set to 39 => 52uSecondes interrupt */\
- *AT91C_PWMC_IDR = AT91C_PWMC_CHID0; /* Disable interrupt for PWM output channel 0 */\
- *AT91C_AIC_IDCR = 0x400; /* Disable AIC intterupt on ID10 PWM */\
- AT91C_AIC_SVR[10] = (unsigned int)LowSpeedPwmIrqHandler;\
- AT91C_AIC_SMR[10] = 0x01; /* Enable trigger on level */\
- *AT91C_AIC_ICCR = 0x400; /* Clear interrupt register PID10*/\
- *AT91C_PWMC_IER = AT91C_PWMC_CHID0; /* Enable interrupt for PWM output channel 0 */\
- *AT91C_AIC_IECR = 0x400; /* Enable interrupt from PWM */\
- }
-
-#define LOWSpeedExit
-
-#define ENABLEDebugOutput {\
- *AT91C_PIOA_PER = AT91C_PIO_PA29; /* Enable PIO on PA029 */\
- *AT91C_PIOA_OER = AT91C_PIO_PA29; /* PA029 set to Output */\
- *AT91C_PIOA_CODR = 0x20000000;\
- }
-
-#define SETDebugOutputHigh *AT91C_PIOA_SODR = 0x20000000
-
-#define SETDebugOutputLow *AT91C_PIOA_CODR = 0x20000000
-
-
-#define SETClkLow(ChannelNr) {\
- *AT91C_PIOA_CODR = CLK_PINS[ChannelNr];\
- LowSpeedData[ChannelNr].ClkStatus = 0;\
-}
-
-#define SETClkHigh(ChannelNr) {\
- *AT91C_PIOA_SODR = CLK_PINS[ChannelNr];\
- LowSpeedData[ChannelNr].ClkStatus = 1;\
-}
-
-#define SETDataLow(ChannelNr) {\
- *AT91C_PIOA_CODR = DATA_PINS[ChannelNr];\
-}
-
-#define SETDataHigh(ChannelNr) {\
- *AT91C_PIOA_SODR = DATA_PINS[ChannelNr];\
-}
-
-#define SETDataToInput(ChannelNr) {\
- *AT91C_PIOA_ODR = DATA_PINS[ChannelNr];\
-}
-
-
-#define SETDataToOutput(ChannelNr) {\
- *AT91C_PIOA_OER = DATA_PINS[ChannelNr];\
-}
-
-#define GetClkPinLevel(ChannelNr) (*AT91C_PIOA_PDSR & CLK_PINS[ChannelNr])
-#define GetDataPinLevel(ChannelNr) (*AT91C_PIOA_PDSR & DATA_PINS[ChannelNr])
-
-#define ENABLEPWMTimerForLowCom {\
- *AT91C_PWMC_ENA = AT91C_PWMC_CHID0; /* Enable PWM output channel 0 */\
- }
-
-#define DISABLEPWMTimerForLowCom {\
- *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\
- }
-
-#define OLD_DISABLEPWMTimerForLowCom {\
- *AT91C_PWMC_DIS = AT91C_PWMC_CHID0; /* Disable PWM output channel 0 */\
- *AT91C_PWMC_IDR = AT91C_PWMC_CHID0; /* Disable interrupt from PWM output channel 0 */\
- *AT91C_AIC_IDCR = 0x400; /* Disable Irq from PID10 */\
- *AT91C_AIC_ICCR = 0x400; /* Clear interrupt register PID10*/\
- *AT91C_PMC_PCDR = 0x400; /* Disable clock for PWM, PID10*/\
- }
-
-__ramfunc void LowSpeedPwmIrqHandler(void)
-{
- ULONG TestVar;
- ULONG PinStatus;
- UBYTE ChannelNr;
-
- TestVar = *AT91C_PWMC_ISR;
- TestVar = TestVar;
- PinStatus = *AT91C_PIOA_PDSR;
-
- for (ChannelNr = 0; ChannelNr < NO_OF_LOWSPEED_COM_CHANNEL; ChannelNr++)
- {
- if (((LowSpeedData[ChannelNr].ClkStatus == 1) && (PinStatus & CLK_PINS[ChannelNr])) || (((LowSpeedData[ChannelNr].ClkStatus == 0) && (!(PinStatus & CLK_PINS[ChannelNr])))))
- {
- switch(LowSpeedData[ChannelNr].ChannelState)
- {
- case LOWSPEED_IDLE:
- {
- }
- break;
-
- case LOWSPEED_TX_STOP_BIT:
- {
- SETDataHigh(ChannelNr);
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_IDLE; //Now we have send a STOP sequence, disable this channel
- }
- break;
-
- case LOWSPEED_TRANSMITTING:
- {
- switch(LowSpeedData[ChannelNr].TxState)
- {
- case TX_DATA_MORE_DATA:
- {
- PinStatus |= CLK_PINS[ChannelNr];
- LowSpeedData[ChannelNr].TxState = TX_DATA_CLK_HIGH;
- }
- break;
-
- case TX_DATA_CLK_HIGH:
- {
- SETClkLow(ChannelNr);
- if (LowSpeedData[ChannelNr].MaskBit == 0) //Is Byte Done, then we need a ack from receiver
- {
- SETDataToInput(ChannelNr); //Set datapin to input
- LowSpeedData[ChannelNr].TxState = TX_DATA_READ_ACK_CLK_LOW;
- }
- else
- {
- if (*LowSpeedData[ChannelNr].pComOutBuffer & LowSpeedData[ChannelNr].MaskBit) //Setup data pin in relation to the data
- {
- SETDataHigh(ChannelNr); //Set data output high
- }
- else
- {
- SETDataLow(ChannelNr); //Set data output low
- }
- LowSpeedData[ChannelNr].TxState = TX_DATA_CLK_LOW;
- }
- }
- break;
-
- case TX_EVALUATE_ACK_CLK_HIGH:
- {
- SETClkLow(ChannelNr);
- if (LowSpeedData[ChannelNr].AckStatus == 1)
- {
- LowSpeedData[ChannelNr].TxByteCnt--;
- if (LowSpeedData[ChannelNr].TxByteCnt > 0) //Here initialise to send next byte
- {
- LowSpeedData[ChannelNr].MaskBit = MASK_BIT_8;
- LowSpeedData[ChannelNr].pComOutBuffer++;
- }
- LowSpeedData[ChannelNr].TxState = TX_ACK_EVALUATED_CLK_LOW; //Received ack, now make a stop sequence or send next byte
- }
- else
- { //Data communication error !
- LowSpeedData[ChannelNr].TxByteCnt = 0;
- SETClkHigh(ChannelNr);
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_TX_STOP_BIT; //Received ack, now make a stop sequence or send next byte.
- }
- }
- break;
-
- case TX_DATA_READ_ACK_CLK_LOW:
- {
- if (!(PinStatus & DATA_PINS[ChannelNr]))
- {
- LowSpeedData[ChannelNr].AckStatus = 1; //Read ack signal from receiver
- }
- SETDataToOutput(ChannelNr);
- SETDataLow(ChannelNr);
- LowSpeedData[ChannelNr].TxState = TX_EVALUATE_ACK_CLK_HIGH;
- SETClkHigh(ChannelNr);
- }
- break;
-
- case TX_DATA_CLK_LOW:
- {
- LowSpeedData[ChannelNr].MaskBit = LowSpeedData[ChannelNr].MaskBit >> 1; //Get ready for the next bit which should be clk out next time
- SETClkHigh(ChannelNr); //Clk goes high = The reciever reads the data
- LowSpeedData[ChannelNr].TxState = TX_DATA_CLK_HIGH;
- }
- break;
-
- case TX_ACK_EVALUATED_CLK_LOW:
- {
- if (LowSpeedData[ChannelNr].MaskBit != 0)
- {
- LowSpeedData[ChannelNr].TxState = TX_DATA_MORE_DATA;
- }
- else
- {
- if (LowSpeedData[ChannelNr].ReStartBit != 0)
- {
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_RESTART_CONDITION;
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_ONE;
- SETDataLow(ChannelNr);
- SETClkHigh(ChannelNr); //Clk goes high = The reciever reads the data
- }
- else
- {
- if (LowSpeedData[ChannelNr].RxByteCnt != 0)
- {
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_WAIT_BEFORE_RX;
- }
- else
- {
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_TX_STOP_BIT;
- SETClkHigh(ChannelNr); //Clk goes high = The reciever reads the data
- }
- }
- LowSpeedData[ChannelNr].TxState = TX_IDLE;
- }
- }
- break;
- }
- }
- break;
-
- case LOWSPEED_RESTART_CONDITION:
- {
- switch(LowSpeedData[ChannelNr].ReStartState)
- {
- case RESTART_STATE_ONE:
- {
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_TWO;
- }
- break;
-
- case RESTART_STATE_TWO:
- {
- SETDataHigh(ChannelNr);
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_THREE;
- }
- break;
-
- case RESTART_STATE_THREE:
- {
- SETClkLow(ChannelNr);
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_FOUR;
- }
- break;
-
- case RESTART_STATE_FOUR:
- {
- SETClkHigh(ChannelNr);
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_FIVE;
- }
- break;
-
- case RESTART_STATE_FIVE:
- {
- SETDataLow(ChannelNr);
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_SIX;
- }
- break;
-
- case RESTART_STATE_SIX:
- {
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_SEVEN;
- }
- break;
-
- case RESTART_STATE_SEVEN:
- {
- SETClkLow(ChannelNr);
- LowSpeedData[ChannelNr].ReStartState = RESTART_STATE_IDLE;
- LowSpeedData[ChannelNr].ReStartBit = 0;
- LowSpeedData[ChannelNr].pComOutBuffer = &LowSpeedData[ChannelNr].ComDeviceAddress;
- *LowSpeedData[ChannelNr].pComOutBuffer += 0x01;
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_TRANSMITTING;
- LowSpeedData[ChannelNr].MaskBit = MASK_BIT_8;
- LowSpeedData[ChannelNr].TxByteCnt = 0x01;
- LowSpeedData[ChannelNr].TxState = TX_DATA_CLK_HIGH;
- LowSpeedData[ChannelNr].AckStatus = 0;
- }
- break;
- }
- }
- break;
-
- case LOWSPEED_WAIT_BEFORE_RX:
- {
- LowSpeedData[ChannelNr].RxWaitCnt++;
- if (LowSpeedData[ChannelNr].RxWaitCnt > 5)
- {
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_RECEIVING;
- SETDataToInput(ChannelNr);
- }
- }
- break;
-
- case LOWSPEED_RECEIVING:
- {
- switch(LowSpeedData[ChannelNr].RxState)
- {
- case RX_START_BIT_CLK_HIGH:
- {
- SETClkLow(ChannelNr);
- LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_LOW;
- }
- break;
-
- case RX_DATA_CLK_HIGH:
- {
- LowSpeedData[ChannelNr].RxBitCnt++;
- if(PinStatus & DATA_PINS[ChannelNr])
- {
- *LowSpeedData[ChannelNr].pComInBuffer |= 0x01;
- }
- SETClkLow(ChannelNr);
- if (LowSpeedData[ChannelNr].RxBitCnt < 8)
- {
- *LowSpeedData[ChannelNr].pComInBuffer = *LowSpeedData[ChannelNr].pComInBuffer << 1;
- }
- else
- {
- if (LowSpeedData[ChannelNr].RxByteCnt > 1)
- {
- SETDataToOutput(ChannelNr);
- SETDataLow(ChannelNr);
- }
- }
- LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_LOW;
- }
- break;
-
- case RX_ACK_TX_CLK_HIGH:
- {
- SETClkLow(ChannelNr);
- SETDataToInput(ChannelNr);
- LowSpeedData[ChannelNr].pComInBuffer++;
- LowSpeedData[ChannelNr].RxByteCnt--;
- LowSpeedData[ChannelNr].RxBitCnt = 0;
- LowSpeedData[ChannelNr].RxState = RX_DONE_OR_NOT_CLK_LOW;
- }
- break;
-
- case RX_DATA_CLK_LOW:
- {
- SETClkHigh(ChannelNr);
- if (LowSpeedData[ChannelNr].RxBitCnt == 8)
- {
- LowSpeedData[ChannelNr].RxState = RX_ACK_TX_CLK_HIGH;
- }
- else
- {
- LowSpeedData[ChannelNr].RxState = RX_DATA_CLK_HIGH;
- }
- }
- break;
-
- case RX_DONE_OR_NOT_CLK_LOW:
- {
- if (LowSpeedData[ChannelNr].RxByteCnt == 0)
- {
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_IDLE;
- LowSpeedData[ChannelNr].RxState = RX_IDLE;
- SETClkHigh(ChannelNr);
- }
- else
- {
- LowSpeedData[ChannelNr].RxState = RX_START_BIT_CLK_HIGH;
- }
- }
- break;
- }
- }
- break;
-
- default:
- break;
- }
- }
- else
- {
-
- if (LOWSPEED_IDLE != LowSpeedData[ChannelNr].ChannelState)
- {
- //Data communication error !
- LowSpeedData[ChannelNr].TxByteCnt = 0;
- SETClkHigh(ChannelNr);
- LowSpeedData[ChannelNr].ChannelState = LOWSPEED_TX_STOP_BIT;
- }
- }
- }
-}
-
-#define ENABLETxPins(ChannelNumber) {\
- ULONG Tmp = CLK_PINS[ChannelNumber] | DATA_PINS[ChannelNumber];\
- *AT91C_PIOA_PER = Tmp; /* Enable PIO */\
- *AT91C_PIOA_PPUDR = Tmp; /* Disable Pull-up resistor */\
- *AT91C_PIOA_ODR = Tmp; /* PIO set to Input */\
-}
-
-#define TxData(ChannelNumber, Status, DataOutBuffer, NumberOfByte) {\
- if ((GetDataPinLevel(ChannelNumber) && GetClkPinLevel(ChannelNumber)) && (LowSpeedData[ChannelNumber].ChannelState == LOWSPEED_IDLE))\
- {\
- ULONG Tmp = CLK_PINS[ChannelNumber] | DATA_PINS[ChannelNumber];\
- *AT91C_PIOA_PER = Tmp; /* Enable PIO */\
- *AT91C_PIOA_OER = Tmp; /* POI set to Output */\
- *AT91C_PIOA_PPUDR = Tmp; /* Disable Pull-up resistor */\
- SETClkHigh(ChannelNumber);\
- SETDataLow(ChannelNumber);\
- LowSpeedData[ChannelNumber].ClkStatus = 1;\
- LowSpeedData[ChannelNumber].pComOutBuffer = DataOutBuffer;\
- LowSpeedData[ChannelNumber].ComDeviceAddress = *LowSpeedData[ChannelNumber].pComOutBuffer;\
- LowSpeedData[ChannelNumber].MaskBit = MASK_BIT_8;\
- LowSpeedData[ChannelNumber].TxByteCnt = NumberOfByte;\
- LowSpeedData[ChannelNumber].TxState = TX_DATA_CLK_HIGH;\
- LowSpeedData[ChannelNumber].AckStatus = 0;\
- LowSpeedData[ChannelNumber].ChannelState = LOWSPEED_TRANSMITTING;\
- Status = 1;\
- }\
- else\
- {\
- Status = 0;\
- }\
-}
-
-#define RxData(ChannelNumber, DataInBuffer, RxBytes) {\
- LowSpeedData[ChannelNumber].pComInBuffer = DataInBuffer;\
- LowSpeedData[ChannelNumber].RxBitCnt = 0;\
- LowSpeedData[ChannelNumber].RxByteCnt = RxBytes;\
- LowSpeedData[ChannelNumber].RxState = RX_DATA_CLK_LOW;\
- LowSpeedData[ChannelNumber].ReStartBit = 1;\
- LowSpeedData[ChannelNumber].RxWaitCnt = 0;\
- }
-
-
-#define STATUSTxCom(ChannelNumber, Status) {\
- if (LowSpeedData[ChannelNumber].ChannelState != 0)\
- {\
- if ((LowSpeedData[ChannelNumber].TxByteCnt == 0) && (LowSpeedData[ChannelNumber].ChannelState != LOWSPEED_RESTART_CONDITION))\
- {\
- if (LowSpeedData[ChannelNumber].MaskBit == 0)\
- {\
- if (LowSpeedData[ChannelNumber].AckStatus == 1)\
- {\
- Status = 0x01; /* TX SUCCESS */\
- }\
- else\
- {\
- Status = 0xFF; /* TX ERROR */\
- }\
- }\
- else\
- {\
- Status = 0;\
- }\
- }\
- else\
- {\
- Status = 0;\
- }\
- }\
- else\
- {\
- if (LowSpeedData[ChannelNumber].RxByteCnt == 0)\
- {\
- if (LowSpeedData[ChannelNumber].AckStatus == 1)\
- {\
- Status = 0x01; /* TX SUCCESS */\
- }\
- else\
- {\
- Status = 0xFF; /* TX ERROR */\
- }\
- }\
- else\
- {\
- Status = 0xFF; /* TX ERROR */\
- }\
- }\
- }
-
-#define STATUSRxCom(ChannelNumber, Status) {\
- if (LowSpeedData[ChannelNumber].ChannelState == LOWSPEED_IDLE)\
- {\
- if (LowSpeedData[ChannelNumber].RxByteCnt == 0)\
- {\
- Status = 0x01; /* RX SUCCESS */\
- }\
- else\
- {\
- Status = 0xFF; /* RX ERROR */\
- }\
- }\
- else\
- {\
- Status = 0;\
- }\
- }
-
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_output.c b/AT91SAM7S256/Source/d_output.c
deleted file mode 100644
index 326f6f8..0000000
--- a/AT91SAM7S256/Source/d_output.c
+++ /dev/null
@@ -1,1415 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 3-02-09 14:46 $
-//
-// Filename $Workfile:: d_output.c $
-//
-// Version $Revision:: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_outp $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_output.h"
-#include "d_output.r"
-
-#include <math.h>
-
-#define MAXIMUM_SPEED_FW 100
-#define MAXIMUM_SPEED_RW -100
-
-#define INPUT_SCALE_FACTOR 100
-#define SPEED_TIME 100
-
-#define MAX_COUNT_TO_RUN 10000000
-
-#define REG_MAX_VALUE 100
-
-#define RAMP_TIME_INTERVAL 25 // Measured in 1 mS => 25 mS interval
-
-#define RAMPDOWN_STATE_RAMPDOWN 0
-#define RAMPDOWN_STATE_CONTINIUE 1
-
-#define COAST_MOTOR_MODE 0
-
-void dOutputRampDownSynch(UBYTE MotorNr);
-SLONG dOutputBound(SLONG In, SLONG Limit);
-SLONG dOutputPIDRegulation(UBYTE MotorNr, SLONG PositionError);
-SLONG dOutputFractionalChange(SLONG Value, SWORD *FracError);
-void dOutputSpeedFilter(UBYTE MotorNr, SLONG PositionDiff);
-
-#define ABS(a) (((a) < 0) ? -(a) : (a))
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-typedef struct
-{
- SBYTE MotorSetSpeed; // Motor setpoint in speed
- SBYTE MotorTargetSpeed; // Speed order for the movement
- SBYTE MotorActualSpeed; // Actual speed for motor (Calculated within the PID regulation)
- SBYTE TurnParameter; // Tell the turning parameter used
- UBYTE RegPParameter; // Current P parameter used within the regulation
- UBYTE RegIParameter; // Current I parameter used within the regulation
- UBYTE RegDParameter; // Current D parameter used within the regulation
- UBYTE RegulationTimeCount; // Time counter used to evaluate when the regulation should run again (100 mS)
- UBYTE MotorRunState; // Hold current motor state (Ramp-up, Running, Ramp-Down, Idle)
- UBYTE RegulationMode; // Hold current regulation mode (Position control, Synchronization mode)
- UBYTE MotorOverloaded; // Set if the motor speed in regulation is calculated to be above maximum
- UBYTE MotorRunForever; // Tell that the motor is set to run forever
- UWORD MotorRampDownCount; // Counter to tell if the ramp-down can reach it gaol and therefor need some additional help
- SWORD MotorRampDownIncrement; // Tell the number of count between each speed adjustment during Ramp-Down
- UWORD MotorRampUpCount; // Used to speedup Ramp-Up if position regulation is not enabled
- SWORD MotorRampUpIncrement; // Tell the number of count between each speed adjustment during Ramp-up
- SWORD AccError; // Accumulated Error, used within the integrator of the PID regulation
- SWORD OldPositionError; // Used within position regulation
- SWORD PositionFracError; // Fractionnal position error of last position update
- SLONG DeltaCaptureCount; // Counts within last regulation time-periode
- SLONG CurrentCaptureCount; // Total counts since motor counts has been reset
- SLONG MotorTachoCountToRun; // Holds number of counts to run. 0 = Run forever
- SLONG MotorBlockTachoCount; // Hold CaptureCount for current movement
- SLONG MotorRampTachoCountOld; // Used to hold old position during Ramp-Up
- SLONG MotorRampTachoCountStart; // Used to hold position when Ramp-up started
- SLONG RotationCaptureCount; // Counter for additional rotation counter
- SLONG MotorTachoCountTarget; // For absolute regulation, position on which regulation is done
- SWORD SpeedFracError; // Fractionnal speed error of last speed update
- SBYTE MotorMaxSpeed; // For absolute regulation, maximum motor speed
- SBYTE MotorMaxAcceleration; // For absolute regulation, maximum motor acceleration
-}MOTORDATA;
-
-typedef struct
-{
- SLONG SyncTachoDif;
- SLONG SyncTurnParameter;
- SWORD SyncOldError;
- SWORD SyncAccError;
-}SYNCMOTORDATA;
-
-static MOTORDATA MotorData[3];
-static SYNCMOTORDATA SyncData;
-static UBYTE RegulationTime;
-static UBYTE RegulationOptions;
-
-void dOutputInit(void)
-{
- UBYTE Temp;
-
- OUTPUTInit;
- ENABLECaptureMotorA;
- ENABLECaptureMotorB;
- ENABLECaptureMotorC;
-
- for (Temp = 0; Temp < 3; Temp++)
- {
- MOTORDATA * pMD = &(MotorData[Temp]);
- pMD->MotorSetSpeed = 0;
- pMD->MotorTargetSpeed = 0;
- pMD->MotorActualSpeed = 0;
- pMD->MotorRampUpCount = 0;
- pMD->MotorRampDownCount = 0;
- pMD->MotorRunState = 0;
- pMD->MotorTachoCountToRun = 0;
- pMD->MotorRunForever = 1;
- pMD->AccError = 0;
- pMD->PositionFracError = 0;
- pMD->RegulationTimeCount = 0;
- pMD->RegPParameter = DEFAULT_P_GAIN_FACTOR;
- pMD->RegIParameter = DEFAULT_I_GAIN_FACTOR;
- pMD->RegDParameter = DEFAULT_D_GAIN_FACTOR;
- pMD->MotorMaxSpeed = DEFAULT_MAX_SPEED;
- pMD->MotorMaxAcceleration = DEFAULT_MAX_ACCELERATION;
- pMD->RegulationMode = 0;
- pMD->MotorOverloaded = 0;
- INSERTMode(Temp, COAST_MOTOR_MODE);
- INSERTSpeed(Temp, pMD->MotorSetSpeed);
- }
-}
-
-/* This function is called every 1 mS and will go through all the motors and there dependencies */
-/* Actual motor speed is only passed (updated) to the AVR controller form this function */
-/* DeltacaptureCount used to count number of Tachocount within last 100 mS. Used with position control regulation */
-/* CurrentCaptureCount used to tell total current position. Used to tell when movement has been obtained */
-/* MotorBlockTachoCount tell current position within current movement. Reset when a new block is started from the VM */
-/* RotationCaptureCount is additional counter for the rotationsensor. Uses it own value so it does conflict with other CaptureCount */
-void dOutputCtrl(void)
-{
- UBYTE MotorNr;
- SLONG NewTachoCount[3];
-
- TACHOCaptureReadResetAll(NewTachoCount[MOTOR_A], NewTachoCount[MOTOR_B], NewTachoCount[MOTOR_C]);
-
- for (MotorNr = 0; MotorNr < 3; MotorNr++)
- {
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- pMD->DeltaCaptureCount += NewTachoCount[MotorNr];
- pMD->CurrentCaptureCount += NewTachoCount[MotorNr];
- pMD->MotorBlockTachoCount += NewTachoCount[MotorNr];
- pMD->RotationCaptureCount += NewTachoCount[MotorNr];
- pMD->RegulationTimeCount++;
-
- if (pMD->MotorRunState == MOTOR_RUN_STATE_RAMPUP)
- {
- dOutputRampUpFunction(MotorNr);
- }
- if (pMD->MotorRunState == MOTOR_RUN_STATE_RAMPDOWN)
- {
- dOutputRampDownFunction(MotorNr);
- }
- if (pMD->MotorRunState == MOTOR_RUN_STATE_RUNNING)
- {
- dOutputTachoLimitControl(MotorNr);
- }
- if (pMD->MotorRunState == MOTOR_RUN_STATE_IDLE)
- {
- dOutputMotorIdleControl(MotorNr);
- }
- if (pMD->MotorRunState == MOTOR_RUN_STATE_HOLD)
- {
- pMD->MotorSetSpeed = 0;
- pMD->MotorActualSpeed = 0;
- pMD->MotorTargetSpeed = 0;
- pMD->PositionFracError = 0;
- pMD->RegulationTimeCount = 0;
- pMD->DeltaCaptureCount = 0;
- pMD->MotorRunState = MOTOR_RUN_STATE_RUNNING;
-
- }
- if (pMD->RegulationTimeCount > RegulationTime)
- {
- pMD->RegulationTimeCount = 0;
- dOutputRegulateMotor(MotorNr);
- pMD->DeltaCaptureCount = 0;
- }
- }
- INSERTSpeed(MOTOR_A, MotorData[MOTOR_A].MotorActualSpeed);
- INSERTSpeed(MOTOR_B, MotorData[MOTOR_B].MotorActualSpeed);
- INSERTSpeed(MOTOR_C, MotorData[MOTOR_C].MotorActualSpeed);
-}
-
-void dOutputExit(void)
-{
- OUTPUTExit;
-}
-
-/* Called eveyr 1 mS */
-/* Data mapping for controller (IO-Map is updated with these values) */
-void dOutputGetMotorParameters(UBYTE *CurrentMotorSpeed, SLONG *TachoCount, SLONG *BlockTachoCount, UBYTE *RunState, UBYTE *MotorOverloaded, SLONG *RotationCount)
-{
- UBYTE Tmp;
-
- for (Tmp = 0; Tmp < 3; Tmp++)
- {
- MOTORDATA * pMD = &(MotorData[Tmp]);
- CurrentMotorSpeed[Tmp] = pMD->MotorActualSpeed;
- TachoCount[Tmp] = pMD->CurrentCaptureCount;
- BlockTachoCount[Tmp] = pMD->MotorBlockTachoCount;
- RotationCount[Tmp] = pMD->RotationCaptureCount;
- RunState[Tmp] = pMD->MotorRunState;
- MotorOverloaded[Tmp] = pMD->MotorOverloaded;
- }
-}
-
-void dOutputSetMode(UBYTE MotorNr, UBYTE Mode) //Set motor mode (break, Float)
-{
- INSERTMode(MotorNr, Mode);
-}
-
-/* Update the regulation state for the motor */
-/* Need to reset regulation parameter depending on current status of the motor */
-/* AccError & OldPositionError used for position regulation and Sync Parameter are used for synchronization regulation */
-void dOutputEnableRegulation(UBYTE MotorNr, UBYTE RegulationMode)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- pMD->RegulationMode = RegulationMode;
-
- if ((pMD->RegulationMode & REGSTATE_REGULATED) && (pMD->MotorSetSpeed == 0) && (pMD->MotorRunState != MOTOR_RUN_STATE_RAMPDOWN))
- {
- pMD->AccError = 0;
- pMD->OldPositionError = 0;
- pMD->PositionFracError = 0;
- }
-
- if (pMD->RegulationMode & REGSTATE_SYNCHRONE)
- {
- if (((pMD->MotorActualSpeed == 0) || (pMD->TurnParameter != 0) || (pMD->TurnParameter == 0)) && (pMD->MotorRunState != MOTOR_RUN_STATE_RAMPDOWN))
- {
- SyncData.SyncTachoDif = 0;
-
- SyncData.SyncAccError = 0;
- SyncData.SyncOldError = 0;
- SyncData.SyncTurnParameter = 0;
- }
- }
-}
-
-/* Disable current regulation if enabled */
-void dOutputDisableRegulation(UBYTE MotorNr)
-{
- MotorData[MotorNr].RegulationMode = REGSTATE_IDLE;
-}
-
-/* Calling this function with reset count which tell current position and which is used to tell if the wanted position is obtained */
-/* Calling this function will reset current movement of the motor if it is running */
-void dOutputResetTachoLimit(UBYTE MotorNr)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- pMD->CurrentCaptureCount = 0;
- pMD->MotorTachoCountToRun = 0;
- pMD->MotorTachoCountTarget = 0;
-
- if (pMD->RegulationMode & REGSTATE_SYNCHRONE)
- {
- dOutputResetSyncMotors(MotorNr);
- }
-
- if (pMD->MotorRunForever == 1)
- {
- pMD->MotorRunForever = 0; // To ensure that we get the same functionality for all combination on motor durations
- }
-}
-
-/* MotorBlockTachoCount tells current position in current movement. */
-/* Used within the synchronization to compare current motor position. Reset on every new movement from the VM */
-void dOutputResetBlockTachoLimit(UBYTE MotorNr)
-{
- MotorData[MotorNr].MotorBlockTachoCount = 0;
-}
-
-/* Additional counter add to help the VM application keep track of number of rotation for the rotation sensor */
-/* This values can be reset independtly from the other tacho count values used with regulation and position control */
-void dOutputResetRotationCaptureCount(UBYTE MotorNr)
-{
- MotorData[MotorNr].RotationCaptureCount = 0;
-}
-
-/* Can be used to set new PID values */
-void dOutputSetPIDParameters(UBYTE MotorNr, UBYTE NewRegPParameter, UBYTE NewRegIParameter, UBYTE NewRegDParameter)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- pMD->RegPParameter = NewRegPParameter;
- pMD->RegIParameter = NewRegIParameter;
- pMD->RegDParameter = NewRegDParameter;
-}
-
-/* Set maximum speed and acceleration */
-void dOutputSetMax(UBYTE MotorNr, SBYTE NewMaxSpeed, SBYTE NewMaxAcceleration)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- pMD->MotorMaxSpeed = NewMaxSpeed;
- pMD->MotorMaxAcceleration = NewMaxAcceleration;
-}
-
-/* Set new regulation time */
-void dOutputSetRegulationTime(UBYTE NewRegulationTime)
-{
- RegulationTime = NewRegulationTime;
-}
-
-/* Set new regulation options */
-void dOutputSetRegulationOptions(UBYTE NewRegulationOptions)
-{
- RegulationOptions = NewRegulationOptions;
-}
-
-/* Called to set TachoCountToRun which is used for position control for the model */
-/* Must be called before motor start */
-/* TachoCountToRun is calculated as a signed value */
-void dOutputSetTachoLimit(UBYTE MotorNr, ULONG BlockTachoCntToTravel)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if (pMD->RegulationMode & REGSTATE_POSITION)
- {
- pMD->MotorRunForever = 0;
- pMD->MotorTachoCountToRun = BlockTachoCntToTravel;
- }
- else if (BlockTachoCntToTravel == 0)
- {
- pMD->MotorRunForever = 1;
- }
- else
- {
- pMD->MotorRunForever = 0;
-
- if (pMD->MotorSetSpeed == 0)
- {
- if (pMD->MotorTargetSpeed > 0)
- {
- pMD->MotorTachoCountToRun += BlockTachoCntToTravel;
- }
- else
- {
- pMD->MotorTachoCountToRun -= BlockTachoCntToTravel;
- }
- }
- else
- {
- if (pMD->MotorSetSpeed > 0)
- {
- pMD->MotorTachoCountToRun += BlockTachoCntToTravel;
- }
- else
- {
- pMD->MotorTachoCountToRun -= BlockTachoCntToTravel;
- }
- }
- }
-}
-
-/* This function is used for setting up the motor mode and motor speed */
-void dOutputSetSpeed (UBYTE MotorNr, UBYTE NewMotorRunState, SBYTE Speed, SBYTE NewTurnParameter)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if ((pMD->MotorSetSpeed != Speed) || (pMD->MotorRunState != NewMotorRunState) ||
- (NewMotorRunState == MOTOR_RUN_STATE_IDLE) || (pMD->TurnParameter != NewTurnParameter))
- {
- if (pMD->MotorTargetSpeed == 0)
- {
- pMD->AccError = 0;
- pMD->OldPositionError = 0;
- pMD->PositionFracError = 0;
- pMD->RegulationTimeCount = 0;
- pMD->DeltaCaptureCount = 0;
- TACHOCountReset(MotorNr);
- }
- switch (NewMotorRunState)
- {
- case MOTOR_RUN_STATE_IDLE:
- {
- //pMD->MotorSetSpeed = 0;
- //pMD->MotorTargetSpeed = 0;
- //pMD->TurnParameter = 0;
- pMD->RegulationMode = REGSTATE_IDLE;
- }
- break;
-
- case MOTOR_RUN_STATE_RAMPUP:
- {
- if (pMD->MotorSetSpeed == 0)
- {
- pMD->MotorSetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
- pMD->MotorRampUpIncrement = 0;
- pMD->MotorRampTachoCountStart = pMD->CurrentCaptureCount;
- pMD->MotorRampUpCount = 0;
- }
- else
- {
- if (Speed > 0)
- {
- if (pMD->MotorSetSpeed >= Speed)
- {
- NewMotorRunState = MOTOR_RUN_STATE_RUNNING;
- }
- else
- {
- pMD->MotorSetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
- pMD->MotorRampUpIncrement = 0;
- pMD->MotorRampTachoCountStart = pMD->CurrentCaptureCount;
- pMD->MotorRampUpCount = 0;
- }
- }
- else
- {
- if (pMD->MotorSetSpeed <= Speed)
- {
- NewMotorRunState = MOTOR_RUN_STATE_RUNNING;
- }
- else
- {
- pMD->MotorSetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
- pMD->MotorRampUpIncrement = 0;
- pMD->MotorRampTachoCountStart = pMD->CurrentCaptureCount;
- pMD->MotorRampUpCount = 0;
- }
- }
- }
- }
- break;
-
- case MOTOR_RUN_STATE_RUNNING:
- {
- pMD->MotorSetSpeed = Speed;
- pMD->MotorTargetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
-
- if (pMD->MotorSetSpeed == 0)
- {
- NewMotorRunState = MOTOR_RUN_STATE_HOLD;
- }
- }
- break;
-
- case MOTOR_RUN_STATE_RAMPDOWN:
- {
- if (pMD->MotorTargetSpeed >= 0)
- {
- if (pMD->MotorSetSpeed <= Speed)
- {
- NewMotorRunState = MOTOR_RUN_STATE_RUNNING;
- }
- else
- {
- pMD->MotorSetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
- pMD->MotorRampDownIncrement = 0;
- pMD->MotorRampTachoCountStart = pMD->CurrentCaptureCount;
- pMD->MotorRampDownCount = 0;
- }
- }
- else
- {
- if (pMD->MotorSetSpeed >= Speed)
- {
- NewMotorRunState = MOTOR_RUN_STATE_RUNNING;
- }
- else
- {
- pMD->MotorSetSpeed = Speed;
- pMD->TurnParameter = NewTurnParameter;
- pMD->MotorRampDownIncrement = 0;
- pMD->MotorRampTachoCountStart = pMD->CurrentCaptureCount;
- pMD->MotorRampDownCount = 0;
- }
- }
- }
- break;
- }
- pMD->MotorRunState = NewMotorRunState;
- pMD->MotorOverloaded = 0;
- }
-}
-
-/* Function used for controlling the Ramp-up periode */
-/* Ramp-up is done with 1 increment in speed every X number of TachoCount, where X depend on duration of the periode and the wanted speed */
-void dOutputRampUpFunction(UBYTE MotorNr)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if (pMD->MotorTargetSpeed == 0)
- {
- if (pMD->MotorSetSpeed > 0)
- {
- pMD->MotorTargetSpeed = MIN_MOVEMENT_POWER;
- }
- else
- {
- pMD->MotorTargetSpeed = -MIN_MOVEMENT_POWER;
- }
- }
- else
- {
- if (pMD->MotorRampUpIncrement == 0)
- {
- SWORD delta = (SWORD)((pMD->MotorTachoCountToRun - pMD->MotorRampTachoCountStart) / (pMD->MotorSetSpeed - pMD->MotorTargetSpeed));
- if (pMD->MotorSetSpeed > 0)
- {
- pMD->MotorRampUpIncrement = delta;
- }
- else
- {
- pMD->MotorRampUpIncrement = -delta;
- }
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- }
- if (pMD->MotorSetSpeed > 0)
- {
- if (pMD->CurrentCaptureCount > (pMD->MotorRampTachoCountOld + pMD->MotorRampUpIncrement))
- {
- pMD->MotorTargetSpeed += 1;
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- pMD->MotorRampUpCount = 0;
- }
- else
- {
- if (!(pMD->RegulationMode & REGSTATE_REGULATED))
- {
- pMD->MotorRampUpCount++;
- if (pMD->MotorRampUpCount > 100)
- {
- pMD->MotorRampUpCount = 0;
- pMD->MotorTargetSpeed++;
- }
- }
- }
- }
- else
- {
- if (pMD->CurrentCaptureCount < (pMD->MotorRampTachoCountOld + pMD->MotorRampUpIncrement))
- {
- pMD->MotorTargetSpeed -= 1;
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- pMD->MotorRampUpCount = 0;
- }
- else
- {
- if (!(pMD->RegulationMode & REGSTATE_REGULATED))
- {
- pMD->MotorRampUpCount++;
- if (pMD->MotorRampUpCount > 100)
- {
- pMD->MotorRampUpCount = 0;
- pMD->MotorTargetSpeed--;
- }
- }
- }
- }
- }
- if (pMD->MotorSetSpeed > 0)
- {
- if ((pMD->CurrentCaptureCount - pMD->MotorRampTachoCountStart) >= (pMD->MotorTachoCountToRun - pMD->MotorRampTachoCountStart))
- {
- pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- pMD->MotorRunState = MOTOR_RUN_STATE_IDLE;
- }
- }
- else
- {
- if ((pMD->CurrentCaptureCount + pMD->MotorRampTachoCountStart) <= (pMD->MotorTachoCountToRun + pMD->MotorRampTachoCountStart))
- {
- pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- pMD->MotorRunState = MOTOR_RUN_STATE_IDLE;
- }
- }
- if (pMD->MotorSetSpeed > 0)
- {
- if (pMD->MotorTargetSpeed > pMD->MotorSetSpeed)
- {
- pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- }
- }
- else
- {
- if (pMD->MotorTargetSpeed < pMD->MotorSetSpeed)
- {
- pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- }
- }
- if (pMD->RegulationMode == REGSTATE_IDLE)
- {
- pMD->MotorActualSpeed = pMD->MotorTargetSpeed;
- }
-}
-
-/* Function used for controlling the Ramp-down periode */
-/* Ramp-down is done with 1 decrement in speed every X number of TachoCount, where X depend on duration of the periode and the wanted speed */
-void dOutputRampDownFunction(UBYTE MotorNr)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if (pMD->MotorRampDownIncrement == 0)
- {
- if (pMD->MotorTargetSpeed > 0)
- {
- if ((pMD->MotorTargetSpeed > MIN_MOVEMENT_POWER) && (pMD->MotorSetSpeed == 0))
- {
- pMD->MotorRampDownIncrement = ((pMD->MotorTachoCountToRun - pMD->CurrentCaptureCount) / ((pMD->MotorTargetSpeed - pMD->MotorSetSpeed) - MIN_MOVEMENT_POWER));
- }
- else
- {
- pMD->MotorRampDownIncrement = ((pMD->MotorTachoCountToRun - pMD->CurrentCaptureCount) / (pMD->MotorTargetSpeed - pMD->MotorSetSpeed));
- }
- }
- else
- {
- if ((pMD->MotorTargetSpeed < -MIN_MOVEMENT_POWER) && (pMD->MotorSetSpeed == 0))
- {
- pMD->MotorRampDownIncrement = (-((pMD->MotorTachoCountToRun - pMD->CurrentCaptureCount) / ((pMD->MotorTargetSpeed - pMD->MotorSetSpeed) + MIN_MOVEMENT_POWER)));
- }
- else
- {
- pMD->MotorRampDownIncrement = (-((pMD->MotorTachoCountToRun - pMD->CurrentCaptureCount) / (pMD->MotorTargetSpeed - pMD->MotorSetSpeed)));
- }
- }
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- }
- if (pMD->MotorTargetSpeed > 0)
- {
- if (pMD->CurrentCaptureCount > (pMD->MotorRampTachoCountOld + (SLONG)pMD->MotorRampDownIncrement))
- {
- pMD->MotorTargetSpeed--;
- if (pMD->MotorTargetSpeed < MIN_MOVEMENT_POWER)
- {
- pMD->MotorTargetSpeed = MIN_MOVEMENT_POWER;
- }
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- pMD->MotorRampDownCount = 0;
- dOutputRampDownSynch(MotorNr);
- }
- else
- {
- if (!(pMD->RegulationMode & REGSTATE_REGULATED))
- {
- pMD->MotorRampDownCount++;
- if (pMD->MotorRampDownCount > (UWORD)(30 * pMD->MotorRampDownIncrement))
- {
- pMD->MotorRampDownCount = (UWORD)(20 * pMD->MotorRampDownIncrement);
- pMD->MotorTargetSpeed++;
- }
- }
- }
- }
- else
- {
- if (pMD->CurrentCaptureCount < (pMD->MotorRampTachoCountOld + (SLONG)pMD->MotorRampDownIncrement))
- {
- pMD->MotorTargetSpeed++;
- if (pMD->MotorTargetSpeed > -MIN_MOVEMENT_POWER)
- {
- pMD->MotorTargetSpeed = -MIN_MOVEMENT_POWER;
- }
- pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
- pMD->MotorRampDownCount = 0;
- dOutputRampDownSynch(MotorNr);
- }
- else
- {
- if (!(pMD->RegulationMode & REGSTATE_REGULATED))
- {
- pMD->MotorRampDownCount++;
- if (pMD->MotorRampDownCount > (UWORD)(30 * (-pMD->MotorRampDownIncrement)))
- {
- pMD->MotorRampDownCount = (UWORD)(20 * (-pMD->MotorRampDownIncrement));
- pMD->MotorTargetSpeed--;
- }
- }
- }
- }
- if ((pMD->RegulationMode & REGSTATE_SYNCHRONE) && (pMD->TurnParameter != 0))
- {
- dOutputSyncTachoLimitControl(MotorNr);
- if (pMD->MotorRunState == MOTOR_RUN_STATE_IDLE)
- {
- dOutputMotorReachedTachoLimit(MotorNr);
- }
- }
- else
- {
- if (pMD->MotorTargetSpeed > 0)
- {
- if (pMD->CurrentCaptureCount >= pMD->MotorTachoCountToRun)
- {
- dOutputMotorReachedTachoLimit(MotorNr);
- }
- }
- else
- {
- if (pMD->CurrentCaptureCount <= pMD->MotorTachoCountToRun)
- {
- dOutputMotorReachedTachoLimit(MotorNr);
- }
- }
- }
- if (pMD->RegulationMode == REGSTATE_IDLE)
- {
- pMD->MotorActualSpeed = pMD->MotorTargetSpeed;
- }
-}
-
-/* Function used to tell whether the wanted position is obtained */
-void dOutputTachoLimitControl(UBYTE MotorNr)
-{
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if (pMD->RegulationMode & REGSTATE_POSITION)
- {
- /* No limit when doing absolute position regulation. */
- return;
- }
- if (pMD->MotorRunForever == 0)
- {
- if (pMD->RegulationMode & REGSTATE_SYNCHRONE)
- {
- dOutputSyncTachoLimitControl(MotorNr);
- }
- else
- {
- if (pMD->MotorSetSpeed > 0)
- {
- if ((pMD->CurrentCaptureCount >= pMD->MotorTachoCountToRun))
- {
- pMD->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pMD->RegulationMode = REGSTATE_IDLE;
- }
- }
- else
- {
- if (pMD->MotorSetSpeed < 0)
- {
- if (pMD->CurrentCaptureCount <= pMD->MotorTachoCountToRun)
- {
- pMD->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pMD->RegulationMode = REGSTATE_IDLE;
- }
- }
- }
- }
- }
- else
- {
- if (pMD->CurrentCaptureCount > MAX_COUNT_TO_RUN)
- {
- pMD->CurrentCaptureCount = 0;
- }
- if (pMD->MotorTargetSpeed != 0)
- {
- pMD->MotorTachoCountToRun = pMD->CurrentCaptureCount;
- }
- }
- if (pMD->RegulationMode == REGSTATE_IDLE)
- {
- pMD->MotorActualSpeed = pMD->MotorTargetSpeed;
- }
-}
-
-/* Function used to decrease speed slowly when the motor is set to idle */
-void dOutputMotorIdleControl(UBYTE MotorNr)
-{
- INSERTMode(MotorNr, COAST_MOTOR_MODE);
-
- MOTORDATA * pMD = &(MotorData[MotorNr]);
-
- if (pMD->MotorActualSpeed != 0)
- {
- if (pMD->MotorActualSpeed > 0)
- {
- pMD->MotorActualSpeed--;
- }
- else
- {
- pMD->MotorActualSpeed++;
- }
- }
-
- if (pMD->MotorTargetSpeed != 0)
- {
- if (pMD->MotorTargetSpeed > 0)
- {
- pMD->MotorTargetSpeed--;
- }
- else
- {
- pMD->MotorTargetSpeed++;
- }
- }
-
- if (pMD->MotorSetSpeed != 0)
- {
- if (pMD->MotorSetSpeed > 0)
- {
- pMD->MotorSetSpeed--;
- }
- else
- {
- pMD->MotorSetSpeed++;
- }
- }
-}
-
-/* Check if Value is between [-Limit:Limit], and change it if it is not the case. */
-SLONG dOutputBound(SLONG Value, SLONG Limit)
-{
- if (Value > Limit)
- return Limit;
- else if (Value < -Limit)
- return -Limit;
- else
- return Value;
-}
-
-/* Function called to evaluate which regulation princip that need to run and which MotorNr to use (I.E.: Which motors are synched together)*/
-void dOutputRegulateMotor(UBYTE MotorNr)
-{
- UBYTE SyncMotorOne;
- UBYTE SyncMotorTwo;
-
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if (pMD->RegulationMode & REGSTATE_POSITION)
- {
- dOutputAbsolutePositionRegulation(MotorNr);
- }
- else if (pMD->RegulationMode & REGSTATE_REGULATED)
- {
- dOutputCalculateMotorPosition(MotorNr);
- }
- else
- {
- if (pMD->RegulationMode & REGSTATE_SYNCHRONE)
- {
- dOutputMotorSyncStatus(MotorNr, &SyncMotorOne, &SyncMotorTwo);
-
- if ((SyncMotorOne != 0xFF) &&(SyncMotorTwo != 0xFF))
- {
- dOutputSyncMotorPosition(SyncMotorOne, SyncMotorTwo);
- }
- }
- }
-}
-
-/* Compute PID regulation result for a given error. */
-SLONG dOutputPIDRegulation(UBYTE MotorNr, SLONG PositionError)
-{
- SLONG PValue, DValue, IValue, TotalRegValue;
-
- MOTORDATA *pMD = &MotorData[MotorNr];
-
- PositionError = dOutputBound (PositionError, 32000);
-
- PValue = PositionError * (pMD->RegPParameter/REG_CONST_DIV);
-
- DValue = (PositionError - pMD->OldPositionError) * (pMD->RegDParameter/REG_CONST_DIV);
- pMD->OldPositionError = PositionError;
-
- pMD->AccError = (pMD->AccError * 3 + PositionError) / 4;
- pMD->AccError = dOutputBound (pMD->AccError, 800);
-
- IValue = pMD->AccError * (pMD->RegIParameter/REG_CONST_DIV);
-
- if (!(RegulationOptions & REGOPTION_NO_SATURATION))
- {
- PValue = dOutputBound (PValue, REG_MAX_VALUE);
- IValue = dOutputBound (IValue, REG_MAX_VALUE);
- }
-
- TotalRegValue = (PValue + IValue + DValue) / 2;
-
- if (TotalRegValue > MAXIMUM_SPEED_FW)
- {
- TotalRegValue = MAXIMUM_SPEED_FW;
- pMD->MotorOverloaded = 1;
- }
- else if (TotalRegValue < MAXIMUM_SPEED_RW)
- {
- TotalRegValue = MAXIMUM_SPEED_RW;
- pMD->MotorOverloaded = 1;
- }
-
- return TotalRegValue;
-}
-
-/* Compute integer change for this regulation step, according to value and
- * previous fractional error.
- * Used for values which are expressed as "per SPEED_TIME" to translate them
- * in "per RegulationTime".*/
-SLONG dOutputFractionalChange(SLONG Value, SWORD *FracError)
-{
- SLONG IntegerChange;
-
- /* Apply fractional change in case RegulationTime is different from
- * SPEED_TIME. In this case, fractional part is accumulated until it reach
- * one half (with "one" being SPEED_TIME). This is use the same principle
- * as the Bresenham algorithm. */
- IntegerChange = Value * RegulationTime / SPEED_TIME;
- *FracError += Value * RegulationTime % SPEED_TIME;
- if (*FracError > SPEED_TIME / 2)
- {
- *FracError -= SPEED_TIME;
- IntegerChange++;
- }
- else if (*FracError < -SPEED_TIME / 2)
- {
- *FracError += SPEED_TIME;
- IntegerChange--;
- }
-
- return IntegerChange;
-}
-
-/* Filter speed according to motor maximum speed and acceleration. */
-void dOutputSpeedFilter(UBYTE MotorNr, SLONG PositionDiff)
-{
- /* Inputs:
- * - PositionDiff: difference between current position and position to reach.
- * - MotorMaxAcceleration: maximum speed change per regulation period (or 0 for unlimited).
- * - MotorMaxSpeed: maximum motor speed (can not be zero, or do not call this function).
- * Output:
- * - MotorTargetSpeed: speed to regulate on motor.
- */
- MOTORDATA *pMD = &MotorData[MotorNr];
- SLONG IdealSpeed;
- SLONG PositionDiffAbs = ABS (PositionDiff);
- /* Should be able to brake on time. */
- if (pMD->MotorMaxAcceleration
- && PositionDiffAbs < MAXIMUM_SPEED_FW * MAXIMUM_SPEED_FW / 2)
- {
- IdealSpeed = sqrtf (2 * PositionDiffAbs * pMD->MotorMaxAcceleration);
- IdealSpeed = dOutputBound (IdealSpeed, pMD->MotorMaxSpeed);
- }
- else
- {
- /* Do not go past consign. */
- IdealSpeed = MIN (PositionDiffAbs, pMD->MotorMaxSpeed);
- }
- /* Apply sign. */
- if (PositionDiff < 0)
- {
- IdealSpeed = -IdealSpeed;
- }
- /* Check max acceleration. */
- SLONG SpeedDiff = IdealSpeed - pMD->MotorTargetSpeed;
- if (pMD->MotorMaxAcceleration)
- {
- SLONG MaxSpeedChange = dOutputFractionalChange (pMD->MotorMaxAcceleration, &pMD->SpeedFracError);
- SpeedDiff = dOutputBound (SpeedDiff, MaxSpeedChange);
- }
- pMD->MotorTargetSpeed += SpeedDiff;
-}
-
-/* Absolute position regulation. */
-void dOutputAbsolutePositionRegulation(UBYTE MotorNr)
-{
- /* Inputs:
- * - CurrentCaptureCount: current motor position.
- * - MotorTachoCountToRun: wanted position, filtered with speed and acceleration.
- *
- * Outputs:
- * - MotorActualSpeed: power to be applied to motor.
- * - MotorOverloaded: set if MotorActualSpeed reached maximum.
- */
- SLONG PositionChange;
- SLONG PositionError;
- SLONG TotalRegValue;
-
- MOTORDATA *pMD = &MotorData[MotorNr];
-
- /* Position update. */
- if (pMD->MotorMaxSpeed)
- {
- dOutputSpeedFilter (MotorNr, pMD->MotorTachoCountToRun - pMD->MotorTachoCountTarget);
- PositionChange = dOutputFractionalChange (pMD->MotorTargetSpeed * MAX_CAPTURE_COUNT / INPUT_SCALE_FACTOR, &pMD->PositionFracError);
- pMD->MotorTachoCountTarget += PositionChange;
- }
- else
- {
- pMD->MotorTachoCountTarget = pMD->MotorTachoCountToRun;
- }
-
- /* Regulation. */
- PositionError = pMD->MotorTachoCountTarget - pMD->CurrentCaptureCount;
- TotalRegValue = dOutputPIDRegulation (MotorNr, PositionError);
-
- pMD->MotorActualSpeed = TotalRegValue;
-}
-
-/* Regulation function used when Position regulation is enabled */
-/* The regulation form only control one motor at a time */
-void dOutputCalculateMotorPosition(UBYTE MotorNr)
-{
- SLONG PositionError;
- SLONG TotalRegValue;
- SLONG PositionChange;
-
- MOTORDATA * pMD = &(MotorData[MotorNr]);
-
- PositionChange = dOutputFractionalChange (pMD->MotorTargetSpeed * MAX_CAPTURE_COUNT / INPUT_SCALE_FACTOR, &pMD->PositionFracError);
-
- PositionError = (pMD->OldPositionError - pMD->DeltaCaptureCount) + PositionChange;
-
- TotalRegValue = dOutputPIDRegulation (MotorNr, PositionError);
-
- pMD->MotorActualSpeed = (SBYTE)TotalRegValue;
-}
-
-/* Regulation function used when syncrhonization regulation is enabled */
-/* The regulation form controls two motors at a time */
-void dOutputSyncMotorPosition(UBYTE MotorOne, UBYTE MotorTwo)
-{
- SLONG TempTurnParameter;
- SLONG PValue;
- SLONG IValue;
- SLONG DValue;
- SLONG CorrectionValue;
- SLONG MotorSpeed;
-
- MOTORDATA * pOne = &(MotorData[MotorOne]);
- MOTORDATA * pTwo = &(MotorData[MotorTwo]);
- SyncData.SyncTachoDif = (SLONG)((pOne->MotorBlockTachoCount) - (pTwo->MotorBlockTachoCount));
-
- if (pOne->TurnParameter != 0)
- {
- if ((pOne->MotorBlockTachoCount != 0) || (pTwo->MotorBlockTachoCount != 0))
- {
- if (pOne->MotorTargetSpeed >= 0)
- {
- if (pOne->TurnParameter > 0)
- {
- TempTurnParameter = (SLONG)(((SLONG)pTwo->TurnParameter * (SLONG)pTwo->MotorTargetSpeed)/100);
- }
- else
- {
- TempTurnParameter = (SLONG)(((SLONG)pOne->TurnParameter * (SLONG)pOne->MotorTargetSpeed)/100);
- }
- }
- else
- {
- if (pOne->TurnParameter > 0)
- {
- TempTurnParameter = (SLONG)(((SLONG)pOne->TurnParameter * (-(SLONG)pOne->MotorTargetSpeed))/100);
- }
- else
- {
- TempTurnParameter = (SLONG)(((SLONG)pTwo->TurnParameter * (-(SLONG)pTwo->MotorTargetSpeed))/100);
- }
- }
- }
- else
- {
- TempTurnParameter = pOne->TurnParameter;
- }
- }
- else
- {
- TempTurnParameter = 0;
- }
-
- SyncData.SyncTurnParameter += (SLONG)(((TempTurnParameter * (MAX_CAPTURE_COUNT))/INPUT_SCALE_FACTOR)*2);
- //SyncTurnParameter should ophold difference between the two motors.
-
- SyncData.SyncTachoDif += SyncData.SyncTurnParameter;
- SyncData.SyncTachoDif = dOutputBound (SyncData.SyncTachoDif, 500);
-
- PValue = SyncData.SyncTachoDif * (pOne->RegPParameter/REG_CONST_DIV);
-
- DValue = (SyncData.SyncTachoDif - SyncData.SyncOldError) * (pOne->RegDParameter/REG_CONST_DIV);
- SyncData.SyncOldError = (SWORD)SyncData.SyncTachoDif;
-
- SyncData.SyncAccError += (SWORD)SyncData.SyncTachoDif;
- SyncData.SyncAccError = dOutputBound (SyncData.SyncAccError, 900);
-
- IValue = SyncData.SyncAccError * (pOne->RegIParameter/REG_CONST_DIV);
-
- CorrectionValue = (PValue + IValue + DValue) / 4;
-
- MotorSpeed = pOne->MotorTargetSpeed - CorrectionValue;
- MotorSpeed = dOutputBound (MotorSpeed, MAXIMUM_SPEED_FW);
-
- if (pOne->TurnParameter != 0)
- {
- if (pOne->MotorTargetSpeed > 0)
- {
- MotorSpeed = dOutputBound (MotorSpeed, pOne->MotorTargetSpeed);
- }
- else
- {
- MotorSpeed = dOutputBound (MotorSpeed, -pOne->MotorTargetSpeed);
- }
- }
- pOne->MotorActualSpeed = (SBYTE)MotorSpeed;
-
- MotorSpeed = pTwo->MotorTargetSpeed + CorrectionValue;
- MotorSpeed = dOutputBound (MotorSpeed, MAXIMUM_SPEED_FW);
-
- if (pOne->TurnParameter != 0)
- {
- if (pTwo->MotorTargetSpeed > 0)
- {
- MotorSpeed = dOutputBound (MotorSpeed, pTwo->MotorTargetSpeed);
- }
- else
- {
- MotorSpeed = dOutputBound (MotorSpeed, -pTwo->MotorTargetSpeed);
- }
- }
- pTwo->MotorActualSpeed = (SBYTE)MotorSpeed;
-}
-
-//Called when the motor is ramping down
-void dOutputMotorReachedTachoLimit(UBYTE MotorNr)
-{
- MOTORDATA * pOne = &(MotorData[MotorNr]);
- if (pOne->RegulationMode & REGSTATE_SYNCHRONE)
- {
- UBYTE MotorOne, MotorTwo;
- MotorOne = MotorNr;
- MotorTwo = 0xFF;
- UBYTE i;
- for(i = MOTOR_A; i <= MOTOR_C; i++) {
- if (i == MotorOne)
- continue;
- if (MotorData[i].RegulationMode & REGSTATE_SYNCHRONE) {
- MotorTwo = i;
- break;
- }
- }
- pOne->MotorSetSpeed = 0;
- pOne->MotorTargetSpeed = 0;
- pOne->MotorActualSpeed = 0;
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pOne->RegulationMode = REGSTATE_IDLE;
- if (MotorTwo != 0xFF) {
- MOTORDATA * pTwo = &(MotorData[MotorTwo]);
- pTwo->MotorSetSpeed = 0;
- pTwo->MotorTargetSpeed = 0;
- pTwo->MotorActualSpeed = 0;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->RegulationMode = REGSTATE_IDLE;
- }
- }
- else
- {
- if (pOne->MotorSetSpeed == 0)
- {
- pOne->MotorTargetSpeed = 0;
- pOne->MotorActualSpeed = 0;
- }
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pOne->RegulationMode = REGSTATE_IDLE;
- }
-}
-
-/* Function used for control tacho limit when motors are synchronised */
-/* Special control is needed when the motor are turning */
-void dOutputSyncTachoLimitControl(UBYTE MotorNr)
-{
- UBYTE MotorOne, MotorTwo;
-
- MotorOne = MotorNr;
- MotorTwo = 0xFF;
- // Synchronisation is done two times, as this function is called for each
- // motor. This is the same behaviour as previous code.
- UBYTE i;
- for(i = MOTOR_A; i <= MOTOR_C; i++) {
- if (i == MotorOne)
- continue;
- if (MotorData[i].RegulationMode & REGSTATE_SYNCHRONE) {
- MotorTwo = i;
- break;
- }
- }
- if (MotorTwo == 0xFF)
- MotorOne = 0xFF;
-
- if ((MotorOne != 0xFF) && (MotorTwo != 0xFF))
- {
- MOTORDATA * pOne = &(MotorData[MotorOne]);
- MOTORDATA * pTwo = &(MotorData[MotorTwo]);
- if (pOne->TurnParameter != 0)
- {
- if (pOne->TurnParameter > 0)
- {
- if (pTwo->MotorTargetSpeed >= 0)
- {
- if ((SLONG)(pTwo->CurrentCaptureCount >= pTwo->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
-
- pOne->CurrentCaptureCount = pTwo->CurrentCaptureCount;
- pOne->MotorTachoCountToRun = pTwo->MotorTachoCountToRun;
- }
- }
- else
- {
- if ((SLONG)(pOne->CurrentCaptureCount <= pOne->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
-
- pTwo->CurrentCaptureCount = pOne->CurrentCaptureCount;
- pTwo->MotorTachoCountToRun = pOne->MotorTachoCountToRun;
- }
- }
- }
- else
- {
- if (pOne->MotorTargetSpeed >= 0)
- {
- if ((SLONG)(pOne->CurrentCaptureCount >= pOne->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
-
- pTwo->CurrentCaptureCount = pOne->CurrentCaptureCount;
- pTwo->MotorTachoCountToRun = pOne->MotorTachoCountToRun;
- }
- }
- else
- {
- if ((SLONG)(pTwo->CurrentCaptureCount <= pTwo->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
-
- pOne->CurrentCaptureCount = pTwo->CurrentCaptureCount;
- pOne->MotorTachoCountToRun = pTwo->MotorTachoCountToRun;
- }
- }
- }
- }
- else
- {
- if (pOne->MotorSetSpeed > 0)
- {
- if ((pOne->CurrentCaptureCount >= pOne->MotorTachoCountToRun) || (pTwo->CurrentCaptureCount >= pTwo->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
- }
- }
- else
- {
- if (pOne->MotorSetSpeed < 0)
- {
- if ((pOne->CurrentCaptureCount <= pOne->MotorTachoCountToRun) || (pTwo->CurrentCaptureCount <= pTwo->MotorTachoCountToRun))
- {
- pOne->MotorRunState = MOTOR_RUN_STATE_IDLE;
- pTwo->MotorRunState = MOTOR_RUN_STATE_IDLE;
- }
- }
- }
- }
- }
-}
-
-/* Function which can evaluate which motor are synched */
-void dOutputMotorSyncStatus(UBYTE MotorNr, UBYTE *SyncMotorOne, UBYTE *SyncMotorTwo)
-{
- if (MotorNr < MOTOR_C)
- {
- if (MotorNr == MOTOR_A)
- {
- *SyncMotorOne = MotorNr;
- *SyncMotorTwo = *SyncMotorOne + 1;
- if (MotorData[*SyncMotorTwo].RegulationMode & REGSTATE_SYNCHRONE)
- {
- //Synchronise motor A & B
- }
- else
- {
- *SyncMotorTwo = *SyncMotorOne + 2;
- if (MotorData[*SyncMotorTwo].RegulationMode & REGSTATE_SYNCHRONE)
- {
- //Synchronise motor A & C
- }
- else
- {
- //Only Motor A has Sync setting => Do nothing, treat motor as motor without regulation
- *SyncMotorTwo = 0xFF;
- }
- }
- }
- if (MotorNr == MOTOR_B)
- {
- *SyncMotorOne = MotorNr;
- *SyncMotorTwo = *SyncMotorOne + 1;
- if (MotorData[*SyncMotorTwo].RegulationMode & REGSTATE_SYNCHRONE)
- {
- if (!(MotorData[MOTOR_A].RegulationMode & REGSTATE_SYNCHRONE))
- {
- //Synchronise motor B & C
- }
- }
- else
- {
- //Only Motor B has Sync settings or Motor is sync. with Motor A and has therefore already been called
- *SyncMotorTwo = 0xFF;
- }
- }
- }
- else
- {
- *SyncMotorOne = 0xFF;
- *SyncMotorTwo = 0xFF;
- }
-}
-/* Function which is called when motors are synchronized and the motor position is reset */
-void dOutputResetSyncMotors(UBYTE MotorNr)
-{
- UBYTE MotorOne, MotorTwo;
-
- MotorOne = MotorNr;
- MotorTwo = 0xFF;
- UBYTE i;
- for(i = MOTOR_A; i <= MOTOR_C; i++) {
- if (i == MotorOne)
- continue;
- if (MotorData[i].RegulationMode & REGSTATE_SYNCHRONE) {
- MotorTwo = i;
- break;
- }
- }
- if (MotorTwo == 0xFF)
- MotorOne = 0xFF;
-
- MOTORDATA * pMD = &(MotorData[MotorNr]);
- if ((MotorOne != 0xFF) && (MotorTwo != 0xFF))
- {
- MOTORDATA * pTwo = &(MotorData[MotorTwo]);
- pMD->CurrentCaptureCount = 0;
- pMD->MotorTachoCountToRun = 0;
- pMD->MotorTachoCountTarget = 0;
- pTwo->CurrentCaptureCount = 0;
- pTwo->MotorTachoCountToRun = 0;
- pTwo->MotorTachoCountTarget = 0;
- }
- else
- {
- pMD->CurrentCaptureCount = 0;
- pMD->MotorTachoCountToRun = 0;
- pMD->MotorTachoCountTarget = 0;
- }
-}
-
-/* Function which is called when motors are synchronized and motor is ramping down */
-void dOutputRampDownSynch(UBYTE MotorNr)
-{
- UBYTE MotorOne, MotorTwo;
-
- MotorOne = MotorNr;
- MotorTwo = 0xFF;
- UBYTE i;
- for(i = MOTOR_A; i <= MOTOR_C; i++) {
- if (i == MotorOne)
- continue;
- if (MotorData[i].RegulationMode & REGSTATE_SYNCHRONE) {
- MotorTwo = i;
- break;
- }
- }
- if (MotorTwo == 0xFF)
- MotorOne = 0xFF;
-
- if ((MotorOne != 0xFF) && (MotorTwo != 0xFF))
- {
- MOTORDATA * pOne = &(MotorData[MotorOne]);
- MOTORDATA * pTwo = &(MotorData[MotorTwo]);
- if (pOne->TurnParameter != 0)
- {
- if (pOne->TurnParameter > 0)
- {
- if (pOne->MotorTargetSpeed >= 0)
- {
- if (pTwo->MotorActualSpeed < 0)
- {
- pTwo->MotorTargetSpeed--;
- }
- }
- else
- {
- if (pTwo->MotorActualSpeed > 0)
- {
- pTwo->MotorTargetSpeed++;
- }
- }
- }
- else
- {
- if (pOne->MotorTargetSpeed >= 0)
- {
- if (pTwo->MotorActualSpeed < 0)
- {
- pTwo->MotorTargetSpeed--;
- }
- }
- else
- {
- if (pTwo->MotorActualSpeed > 0)
- {
- pTwo->MotorTargetSpeed++;
- }
- }
- }
- }
- }
-}
-
diff --git a/AT91SAM7S256/Source/d_output.h b/AT91SAM7S256/Source/d_output.h
deleted file mode 100644
index 4d5189b..0000000
--- a/AT91SAM7S256/Source/d_output.h
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_output.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_outp $
-//
-// Platform C
-//
-
-#ifndef D_OUTPUT
-#define D_OUTPUT
-
-#define NEW_MOTOR
-
-#ifdef NEW_MOTOR
-
-//Constant reffering to new motor
-#define REG_CONST_DIV 32 // Constant which the PID constants value will be divided with
-#define DEFAULT_P_GAIN_FACTOR 96//3
-#define DEFAULT_I_GAIN_FACTOR 32//1
-#define DEFAULT_D_GAIN_FACTOR 32//1
-#define MIN_MOVEMENT_POWER 10
-#define MAX_CAPTURE_COUNT 100
-
-#else
-
-//Constant reffering to Old motor
-#define REG_CONST_DIV 1 // Constant which the PID constants value will be divided with
-#define DEFAULT_P_GAIN_FACTOR 3
-#define DEFAULT_I_GAIN_FACTOR 1
-#define DEFAULT_D_GAIN_FACTOR 1
-#define MIN_MOVEMENT_POWER 30
-#define MAX_CAPTURE_COUNT 80
-
-#endif
-
-#define DEFAULT_MAX_SPEED 80
-#define DEFAULT_MAX_ACCELERATION 20
-
-#define REGULATION_TIME 100 // Measured in 1 mS, regulation interval
-
-//Constant reffering to RegMode parameter
-#define REGSTATE_IDLE 0x00
-#define REGSTATE_REGULATED 0x01
-#define REGSTATE_SYNCHRONE 0x02
-#define REGSTATE_POSITION 0x04
-
-//Constant reffering to RunState parameter
-#define MOTOR_RUN_STATE_IDLE 0x00
-#define MOTOR_RUN_STATE_RAMPUP 0x10
-#define MOTOR_RUN_STATE_RUNNING 0x20
-#define MOTOR_RUN_STATE_RAMPDOWN 0x40
-#define MOTOR_RUN_STATE_HOLD 0x60
-
-// Constants related to Regulation Options
-#define REGOPTION_NO_SATURATION 0x01 // Do not limit intermediary regulation results
-
-
-enum
-{
- MOTOR_A,
- MOTOR_B,
- MOTOR_C
-};
-
-void dOutputInit(void);
-void dOutputExit(void);
-
-void dOutputCtrl(void);
-void dOutputGetMotorParameters(UBYTE *CurrentMotorSpeed, SLONG *TachoCount, SLONG *BlockTachoCount, UBYTE *RunState, UBYTE *MotorOverloaded, SLONG *RotationCount);
-void dOutputSetMode(UBYTE MotorNr, UBYTE Mode);
-void dOutputSetSpeed (UBYTE MotorNr, UBYTE NewMotorRunState, SBYTE Speed, SBYTE TurnParameter);
-void dOutputEnableRegulation(UBYTE MotorNr, UBYTE RegulationMode);
-void dOutputDisableRegulation(UBYTE MotorNr);
-void dOutputSetTachoLimit(UBYTE MotorNr, ULONG TachoCntToTravel);
-void dOutputResetTachoLimit(UBYTE MotorNr);
-void dOutputResetBlockTachoLimit(UBYTE MotorNr);
-void dOutputResetRotationCaptureCount(UBYTE MotorNr);
-void dOutputSetPIDParameters(UBYTE MotorNr, UBYTE NewRegPParameter, UBYTE NewRegIParameter, UBYTE NewRegDParameter);
-void dOutputSetMax(UBYTE MotorNr, SBYTE NewMaxSpeed, SBYTE NewMaxAcceleration);
-void dOutputSetRegulationTime(UBYTE NewRegulationTime);
-void dOutputSetRegulationOptions(UBYTE NewRegulationOptions);
-
-void dOutputRegulateMotor(UBYTE MotorNr);
-void dOutputCalculateRampUpParameter(UBYTE MotorNr, ULONG NewTachoLimit);
-void dOutputRampDownFunction(UBYTE MotorNr);
-void dOutputRampUpFunction(UBYTE MotorNr);
-void dOutputTachoLimitControl(UBYTE MotorNr);
-void dOutputAbsolutePositionRegulation(UBYTE MotorNr);
-void dOutputCalculateMotorPosition(UBYTE MotorNr);
-void dOutputSyncMotorPosition(UBYTE MotorOne, UBYTE MotorTwo);
-void dOutputMotorReachedTachoLimit(UBYTE MotorNr);
-void dOutputMotorIdleControl(UBYTE MotorNr);
-void dOutputSyncTachoLimitControl(UBYTE MotorNr);
-void dOutputMotorSyncStatus(UBYTE MotorNr, UBYTE *SyncMotorOne, UBYTE *SyncMotorTwo);
-void dOutputResetSyncMotors(UBYTE MotorNr);
-
-#endif
diff --git a/AT91SAM7S256/Source/d_output.r b/AT91SAM7S256/Source/d_output.r
deleted file mode 100644
index 1a30c5f..0000000
--- a/AT91SAM7S256/Source/d_output.r
+++ /dev/null
@@ -1,306 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_output.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_outp $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define MOTOR_A_DIR AT91C_PIO_PA1
-#define MOTOR_A_INT AT91C_PIO_PA15
-
-#define MOTOR_B_DIR AT91C_PIO_PA9
-#define MOTOR_B_INT AT91C_PIO_PA26
-
-#define MOTOR_C_DIR AT91C_PIO_PA8
-#define MOTOR_C_INT AT91C_PIO_PA0
-
-#else
-
-#define MOTOR_A_DIR AT91C_PIO_PA1
-#define MOTOR_A_INT AT91C_PIO_PA15
-
-#define MOTOR_B_DIR AT91C_PIO_PA9
-#define MOTOR_B_INT AT91C_PIO_PA26
-
-#define MOTOR_C_DIR AT91C_PIO_PA8
-#define MOTOR_C_INT AT91C_PIO_PA27
-
-#endif
-
-#define FORWARD 0x01
-#define REVERSE -0x01
-
-#define TIMER_0_ID12 (1L << AT91C_ID_TC0)
-#define TIMER_1_ID13 (1L << AT91C_ID_TC1)
-#define TIMER_2_ID14 (1L << AT91C_ID_TC2)
-
-typedef struct
-{
- SLONG TachoCountTable;
- SLONG TachoCountTableOld;
- SBYTE MotorDirection;
-}TACHOPARAMETERS;
-
-static TACHOPARAMETERS MotorTachoValue[3];
-
-#define OUTPUTInit {\
- UBYTE Tmp;\
- for (Tmp = 0; Tmp < NOS_OF_AVR_OUTPUTS; Tmp++)\
- {\
- IoToAvr.PwmValue[Tmp] = 0;\
- }\
- IoToAvr.OutputMode = 0x00;\
- IoToAvr.PwmFreq = 8;\
- }
-
-#define INSERTSpeed(Motor, Speed) IoToAvr.PwmValue[Motor] = Speed
-
-#define INSERTMode(Motor, Mode) if (Mode & 0x02)\
- {\
- IoToAvr.OutputMode |= (0x01 << Motor);\
- }\
- else\
- {\
- IoToAvr.OutputMode &= ~(0x01 << Motor);\
- }
-
-#define ENABLEDebugOutput {\
- *AT91C_PIOA_PER = 0x20000000; /* Enable PIO on PA029 */\
- *AT91C_PIOA_OER = 0x20000000; /* PA029 set to Output */\
- }
-
-#define SETDebugOutputHigh *AT91C_PIOA_SODR = 0x20000000
-
-#define SETDebugOutputLow *AT91C_PIOA_CODR = 0x20000000
-
-#define ENABLECaptureMotorA {\
- *AT91C_PIOA_PDR = MOTOR_A_INT; /* Disable PIO on PA15 */\
- *AT91C_PIOA_BSR = MOTOR_A_INT; /* Enable Peripheral B on PA15 */\
- *AT91C_PIOA_PPUDR = MOTOR_A_INT | MOTOR_A_DIR; /* Disable Pull Up resistor on PA15 & PA1 */\
- *AT91C_PIOA_PER = MOTOR_A_DIR; /* Enable PIO on PA1 */\
- *AT91C_PIOA_ODR = MOTOR_A_DIR; /* PA1 set to input */\
- *AT91C_PIOA_IFER = MOTOR_A_INT | MOTOR_A_DIR; /* Enable filter on PA15 & PA1 */\
- *AT91C_PMC_PCER = TIMER_1_ID13; /* Enable clock for TC1*/\
- *AT91C_TCB_BMR = AT91C_TCB_TC1XC1S_NONE; /* No external clock signal XC2 */\
- *AT91C_TCB_BCR = 0x0; /* Clear SYNC */\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR & 0X00000000; /* Clear all bits in TC1_CMR */\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR & 0xFFFF7FFF; /* Enable capture mode */\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR | AT91C_TC_CLKS_TIMER_DIV5_CLOCK; /* Set clock for timer to Clock5 = div 1024*/\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR | AT91C_TC_ABETRG; /* Use external trigger for TIO1*/\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR | AT91C_TC_EEVTEDG_BOTH; /* Trigger on both edges */\
- *AT91C_TC1_CMR = *AT91C_TC1_CMR | AT91C_TC_LDRA_RISING; /* RA loading register set */\
- *AT91C_AIC_IDCR = TIMER_1_ID13; /* Irq controller setup */\
- AT91C_AIC_SVR[13] = (unsigned int)CaptureAInt; \
- AT91C_AIC_SMR[13] = 0x05; /* Enable trigger on level */\
- *AT91C_AIC_ICCR = TIMER_1_ID13; /* Clear interrupt register PID13*/\
- *AT91C_TC1_IDR = 0xFF; /* Disable all interrupt from TC1 */\
- *AT91C_TC1_IER = 0x80; /* Enable interrupt from external trigger */\
- *AT91C_AIC_IECR = TIMER_1_ID13; /* Enable interrupt from TC1 */\
- *AT91C_TC1_CCR = 0x00; /* Clear registers before setting */\
- *AT91C_TC1_CCR = AT91C_TC_CLKEN; /* Enable clock */\
- }
-
-#define ENABLECaptureMotorB {\
- *AT91C_PIOA_PDR = MOTOR_B_INT; /* Disable PIO on PA26 */\
- *AT91C_PIOA_BSR = MOTOR_B_INT; /* Enable Peripheral B on PA26 */\
- *AT91C_PIOA_PER = MOTOR_B_DIR; /* Enable PIO on PA09 */\
- *AT91C_PIOA_PPUDR = MOTOR_B_INT | MOTOR_B_DIR; /* Disable Pull Up resistor on PA26 & PA09 */\
- *AT91C_PIOA_ODR = MOTOR_B_DIR; /* PA09 set to input */\
- *AT91C_PIOA_IFER = MOTOR_B_INT | MOTOR_B_DIR; /* Enable filter on PA26 & PA09 */\
- *AT91C_PMC_PCER = TIMER_2_ID14; /* Enable clock for TC2*/\
- *AT91C_TCB_BMR = AT91C_TCB_TC2XC2S_NONE; /* No external clock signal */\
- *AT91C_TCB_BCR = 0x0; /* Clear SYNC */\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR & 0X00000000; /* Clear all bits in TC1_CMR */\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR & 0xFFFF7FFF; /* Enable capture mode */\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR | AT91C_TC_CLKS_TIMER_DIV5_CLOCK; /* Set clock for timer to Clock5 = div 1024*/\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR | AT91C_TC_ABETRG; /* Use external trigger for TIO2*/\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR | AT91C_TC_EEVTEDG_BOTH; /* Trigger on both edges */\
- *AT91C_TC2_CMR = *AT91C_TC2_CMR | AT91C_TC_LDRA_RISING; /* RA loading register set */\
- *AT91C_AIC_IDCR = TIMER_2_ID14; /* Irq controller setup */\
- AT91C_AIC_SVR[14] = (unsigned int)CaptureBInt; \
- AT91C_AIC_SMR[14] = 0x05; /* Enable trigger on level */\
- *AT91C_AIC_ICCR = TIMER_2_ID14; /* Clear interrupt register PID14*/\
- *AT91C_TC2_IDR = 0xFF; /* Disable all interrupt from TC2 */\
- *AT91C_TC2_IER = 0x80; /* Enable interrupts from external trigger */\
- *AT91C_AIC_IECR = TIMER_2_ID14; /* Enable interrupt from TC2 */\
- *AT91C_TC2_CCR = 0x00; /* Clear registers before setting */\
- *AT91C_TC2_CCR = AT91C_TC_CLKEN; /* Enable clock */\
- }
-
- #define ENABLECaptureMotorC {\
- *AT91C_PIOA_PDR = MOTOR_C_INT; /* Disable PIO on PA0 */\
- *AT91C_PIOA_BSR = MOTOR_C_INT; /* Enable Peripheral B on PA0 */\
- *AT91C_PIOA_PER = MOTOR_C_DIR; /* Enable PIO on PA08 */\
- *AT91C_PIOA_PPUDR = MOTOR_C_INT | MOTOR_C_DIR; /* Disable Pull Up resistor on PA0 & PA08 */\
- *AT91C_PIOA_ODR = MOTOR_C_DIR; /* PA08 set to input */\
- *AT91C_PIOA_IFER = MOTOR_C_INT | MOTOR_C_DIR; /* Enable filter on PA26 & PA09 */\
- *AT91C_PMC_PCER = TIMER_0_ID12; /* Enable clock for TC0*/\
- *AT91C_TCB_BMR = AT91C_TCB_TC0XC0S_NONE; /* No external clock signal */\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR & 0X00000000; /* Clear all bits in TC0_CMR */\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR & 0xFFFF7FFF; /* Enable capture mode */\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR | AT91C_TC_CLKS_TIMER_DIV5_CLOCK; /* Set clock for timer to Clock5 = div 1024*/\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR | AT91C_TC_ABETRG; /* Use external trigger for TI0*/\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR | AT91C_TC_EEVTEDG_BOTH; /* Trigger on both edges */\
- *AT91C_TC0_CMR = *AT91C_TC0_CMR | AT91C_TC_LDRA_RISING; /* RA loading register set */\
- *AT91C_AIC_IDCR = TIMER_0_ID12; /* Disable interrupt */\
- AT91C_AIC_SVR[12] = (unsigned int)CaptureCInt; \
- AT91C_AIC_SMR[12] = 0x05; /* Enable trigger on level */\
- *AT91C_AIC_ICCR = TIMER_0_ID12; /* Clear interrupt register PID12*/\
- *AT91C_TC0_IDR = 0xFF; /* Disable all interrupt from TC0 */\
- *AT91C_TC0_IER = 0x80; /* Enable interrupts from external trigger */\
- *AT91C_AIC_IECR = TIMER_0_ID12; /* Enable interrupt from TC0 */\
- *AT91C_TC0_CCR = 0x00; /* Clear registers before setting */\
- *AT91C_TC0_CCR = AT91C_TC_CLKEN; /* Enable clock */\
- }
-
-__ramfunc void CaptureAInt(void)
-{
- if (*AT91C_TC1_SR & AT91C_TC_MTIOA)
- {
- if (*AT91C_PIOA_PDSR & MOTOR_A_DIR)
- {
- MotorTachoValue[0].MotorDirection = REVERSE; //Motor is running reverse
- MotorTachoValue[0].TachoCountTable--;
- }
- else
- {
- MotorTachoValue[0].MotorDirection = FORWARD; //Motor is running forward
- MotorTachoValue[0].TachoCountTable++;
- }
- }
- else
- {
- if (*AT91C_PIOA_PDSR & MOTOR_A_DIR)
- {
- MotorTachoValue[0].MotorDirection = FORWARD;
- MotorTachoValue[0].TachoCountTable++;
- }
- else
- {
- MotorTachoValue[0].MotorDirection = REVERSE;
- MotorTachoValue[0].TachoCountTable--;
- }
- }
-}
-
-__ramfunc void CaptureBInt(void)
-{
- if (*AT91C_TC2_SR & AT91C_TC_MTIOA)
- {
- if (*AT91C_PIOA_PDSR & MOTOR_B_DIR)
- {
- MotorTachoValue[1].MotorDirection = REVERSE; //Motor is running reverse
- MotorTachoValue[1].TachoCountTable--;
- }
- else
- {
- MotorTachoValue[1].MotorDirection = FORWARD; //Motor is running forward
- MotorTachoValue[1].TachoCountTable++;
- }
- }
- else
- {
- if (*AT91C_PIOA_PDSR & MOTOR_B_DIR)
- {
- MotorTachoValue[1].MotorDirection = FORWARD;
- MotorTachoValue[1].TachoCountTable++;
- }
- else
- {
- MotorTachoValue[1].MotorDirection = REVERSE;
- MotorTachoValue[1].TachoCountTable--;
- }
- }
-}
-
-
-//__ramfunc void CaptureBInt(void)
-//{
-// if (((bool)(*AT91C_TC2_SR & AT91C_TC_MTIOA))==((bool)(*AT91C_PIOA_PDSR & MOTOR_B_DIR)))
-// {
-// MotorTachoValue[1].MotorDirection = REVERSE; //Motor is running reverse
-// MotorTachoValue[1].TachoCountTable--;
-// }
-// else
-// {
-// MotorTachoValue[1].MotorDirection = FORWARD; //Motor is running reverse
-// MotorTachoValue[1].TachoCountTable++;
-// }
-//}
-
-
-__ramfunc void CaptureCInt(void)
-{
- if (*AT91C_TC0_SR & AT91C_TC_MTIOA)
- {
- if (*AT91C_PIOA_PDSR & MOTOR_C_DIR)
- {
- MotorTachoValue[2].MotorDirection = REVERSE; //Motor is running reverse
- MotorTachoValue[2].TachoCountTable--;
- }
- else
- {
- MotorTachoValue[2].MotorDirection = FORWARD; //Motor is running forward
- MotorTachoValue[2].TachoCountTable++;
- }
- }
- else
- {
- if (*AT91C_PIOA_PDSR & MOTOR_C_DIR)
- {
- MotorTachoValue[2].MotorDirection = FORWARD;
- MotorTachoValue[2].TachoCountTable++;
- }
- else
- {
- MotorTachoValue[2].MotorDirection = REVERSE;
- MotorTachoValue[2].TachoCountTable--;
- }
- }
-}
-
-#define OUTPUTExit {\
- *AT91C_AIC_IDCR = TIMER_0_ID12 | TIMER_1_ID13 | TIMER_2_ID14; /* Disable interrupts for the timers */\
- *AT91C_AIC_ICCR = TIMER_0_ID12 | TIMER_1_ID13 | TIMER_2_ID14; /* Clear penting interrupt register for timers*/\
- *AT91C_PMC_PCDR = TIMER_0_ID12 | TIMER_1_ID13 | TIMER_2_ID14; /* Disable the clock for each of the timers*/\
- *AT91C_PIOA_PER = MOTOR_A_DIR | MOTOR_A_INT | MOTOR_B_DIR | MOTOR_B_INT | MOTOR_C_DIR | MOTOR_C_INT; /* Enable PIO on PA15, PA11, PA26, PA09, PA27 & PA08 */\
- *AT91C_PIOA_ODR = MOTOR_A_DIR | MOTOR_A_INT | MOTOR_B_DIR | MOTOR_B_INT | MOTOR_C_DIR | MOTOR_C_INT; /* Set to input PA15, PA11, PA26, PA09, PA27 & PA08 */\
- *AT91C_PIOA_PPUDR = MOTOR_A_DIR | MOTOR_A_INT | MOTOR_B_DIR | MOTOR_B_INT | MOTOR_C_DIR | MOTOR_C_INT; /* Enable Pullup on PA15, PA11, PA26, PA09, PA27 & PA08 */\
- }
-
-
-#define TACHOCountReset(MotorNr) {\
- MotorTachoValue[MotorNr].TachoCountTable = 0;\
- MotorTachoValue[MotorNr].TachoCountTableOld = 0;\
- }
-
-#define TACHOCaptureReadResetAll(MotorDataA,MotorDataB,MotorDataC){\
- MotorDataA = (MotorTachoValue[MOTOR_A].TachoCountTable - MotorTachoValue[MOTOR_A].TachoCountTableOld);\
- MotorTachoValue[MOTOR_A].TachoCountTableOld = MotorTachoValue[MOTOR_A].TachoCountTable;\
- MotorDataB = (MotorTachoValue[MOTOR_B].TachoCountTable - MotorTachoValue[MOTOR_B].TachoCountTableOld);\
- MotorTachoValue[MOTOR_B].TachoCountTableOld = MotorTachoValue[MOTOR_B].TachoCountTable;\
- MotorDataC = (MotorTachoValue[MOTOR_C].TachoCountTable - MotorTachoValue[MOTOR_C].TachoCountTableOld);\
- MotorTachoValue[MOTOR_C].TachoCountTableOld = MotorTachoValue[MOTOR_C].TachoCountTable;\
- }
-
-
-
-
-#define GetMotorDirection(MotorNr) MotorTachoValue[MotorNr].MotorDirection
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/d_sound.c b/AT91SAM7S256/Source/d_sound.c
deleted file mode 100644
index 72dfb60..0000000
--- a/AT91SAM7S256/Source/d_sound.c
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_sound.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_soun $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_sound.h"
-#include "d_sound.r"
-
-
-void dSoundInit(void)
-{
- SOUNDInit;
-}
-
-
-void dSoundVolume(UBYTE Step)
-{
- SOUNDVolume(Step);
-}
-
-
-UBYTE dSoundReady(void)
-{
- return (SOUNDReady);
-}
-
-
-UBYTE dSoundStart(UBYTE *pSound,UWORD Length,UWORD SampleRate, UBYTE FileType)
-{
- return (SOUNDStart(pSound,Length,SampleRate,FileType));
-}
-
-
-UBYTE dSoundStop(void)
-{
- return (SOUNDStop);
-}
-
-
-UBYTE dSoundTone(UBYTE *pMelody,UWORD Length,UBYTE Volume)
-{
- return (SOUNDTone(pMelody,Length,Volume));
-}
-
-
-void dSoundFreq(UWORD Hz,UWORD mS,UBYTE Volume)
-{
- SOUNDFreq(Hz,mS,Volume);
-}
-
-
-void dSoundExit(void)
-{
- SOUNDExit;
-}
diff --git a/AT91SAM7S256/Source/d_sound.h b/AT91SAM7S256/Source/d_sound.h
deleted file mode 100644
index c580342..0000000
--- a/AT91SAM7S256/Source/d_sound.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_sound.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_soun $
-//
-// Platform C
-//
-
-
-#ifndef D_SOUND
-#define D_SOUND
-
-void dSoundInit(void);
-void dSoundVolume(UBYTE Step);
-UBYTE dSoundReady(void);
-UBYTE dSoundStart(UBYTE *pSound,UWORD Length,UWORD SampleRate, UBYTE FileFormat);
-UBYTE dSoundStop(void);
-UBYTE dSoundTone(UBYTE *pMelody,UWORD Length,UBYTE Volume);
-void dSoundFreq(UWORD Hz,UWORD mS,UBYTE Volume);
-void dSoundExit(void);
-
-#define SOUNDVOLUMESTEPS 4
-
-#define DURATION_MIN 10 // [mS]
-#define FREQUENCY_MIN 220 // [Hz]
-#define FREQUENCY_MAX 14080 // [Hz]
-
-#define SAMPLERATE_MIN 2000 // Min sample rate [sps]
-#define SAMPLERATE_DEFAULT 8000 // Default sample rate [sps]
-#define SAMPLERATE_MAX 16000 // Max sample rate [sps]
-
-#endif
diff --git a/AT91SAM7S256/Source/d_sound.r b/AT91SAM7S256/Source/d_sound.r
deleted file mode 100644
index 4851253..0000000
--- a/AT91SAM7S256/Source/d_sound.r
+++ /dev/null
@@ -1,515 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_sound.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_soun $
-//
-// Platform C
-//
-
-#include "d_sound_adpcm.r"
-
-#ifdef SAM7S256
-
-#define SAMPLEMIN 0 // Must be zero (no pwm/interrupt)
-#define SAMPLEMAX 256 // Must be 256 (8 bit wave format)
-#define SAMPLECENTER (((SAMPLEMAX - SAMPLEMIN) / 2) + SAMPLEMIN)
-
-#define SAMPLEWORD ULONG
-#define SAMPLEWORDS 8
-#define SAMPLEWORDBITS (sizeof(SAMPLEWORD) * 8)
-#define SAMPLEBITS (SAMPLEWORDS * SAMPLEWORDBITS)
-#define SAMPLECONSTANT 3 // >> == (SAMPLEMAX / SAMPLEWORDBITS)
-
-#define SAMPLETONENO 16 // No of tone samples
-
-#define SAMPLEBUFFERS 2
-
-#define INIT_PREV_VAL_ADPCM 0x7F
-#define INIT_INDEX_ADPCM 20
-
-SAMPLEWORD SampleBuffer[SAMPLEBUFFERS][SAMPLEWORDS];
-SAMPLEWORD ToneBuffer[SAMPLETONENO];
-
-const SAMPLEWORD TonePattern[SOUNDVOLUMESTEPS + 1][SAMPLETONENO] =
-{
- {
- 0xF0F0F0F0,0xF0F0F0F0, // Step 0 = silence
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0
- },
- {
- 0xF0F0F0F0,0xF0F0F0F0, // Step 1 = 1/512
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F8,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0
- },
- {
- 0xF0F0F0F0,0xF0F0F0F0, // Step 2 = 0,+3,+4,+3,0,-3,-4,-3
- 0xF0F0F0F0,0xF0F8F8F8,
- 0xF0F0F8F8,0xF8F8F0F0,
- 0xF8F8F8F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xF0F0F0F0,0xF0E0E0E0,
- 0xF0F0E0E0,0xE0E0F0F0,
- 0xE0E0E0F0,0xF0F0F0F0
- },
- {
- 0xF0F0F0F0,0xF0F0F0F0, // Step 3 = 0,+10,+14,+10,0,-10,-14,-10
- 0xF8F8F8F8,0xF8F8FCFC,
- 0xF8F8FCFC,0xFCFCFCFC,
- 0xFCFCF8F8,0xF8F8F8F8,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xE0E0E0E0,0xE0E0C0C0,
- 0xE0E0C0C0,0xC0C0C0C0,
- 0xC0C0E0E0,0xE0E0E0E0
- },
- {
- 0xF0F0F0F0,0xF0F0F0F0, // Step 4 = 0,+22,+32,+22,0,-22,-32,-22
- 0xFCFCFCFC,0xFCFCFDFD,
- 0xFFFFFFFF,0xFFFFFFFF,
- 0xFDFDFCFC,0xFCFCFCFC,
- 0xF0F0F0F0,0xF0F0F0F0,
- 0xC0C0C0C0,0xC0C08080,
- 0x00000000,0x00000000,
- 0x8080C0C0,0xC0C0C0C0
- }
-};
-
-__ramdata
-UBYTE FractionPattern[SAMPLEWORDS] =
-{
- 0x00, // 0 -> 00000000
- 0x10, // 1 -> 00010000
- 0x22, // 2 -> 00100010
- 0x4A, // 3 -> 01001010
- 0x55, // 4 -> 01010101
- 0x6D, // 5 -> 01101101
- 0x77, // 6 -> 01110111
- 0x7F, // 7 -> 01111111
-};
-
-typedef struct
-{
- SWORD Valprev; // Previous output value
- SWORD Index; // Index into stepsize table
-}ADPCM_State;
-
-ULONG ToneCycles; // No of tone cycles
-ULONG ToneCyclesReady; // No of tone cycles for ready
-ULONG ClockNext; // Serial clock for next buffer
-
-UBYTE *pSoundPointer; // Pointer to sample in actual sound buffer
-UBYTE *pSoundPointerNext; // Pointer to sample in next sound buffer
-
-UWORD SoundSamplesLeft; // Number of samples left on actual sound buffer
-UWORD SoundSamplesLeftNext; // Number of samples left on next sound buffer
-
-UBYTE SampleBufferNo; // Sample buffer no in use
-
-UBYTE SoundReady; // Sound channel ready (idle)
-UBYTE SoundDivider; // Volume
-
-UWORD MelodyPointer;
-UBYTE CurrentFileFormat; // Hold current playing file type
-
-UBYTE Outdata[2]; // Output buffer used within the ADPCM algorithm
-ADPCM_State State; // Struct holding ADPCM state
-
-#define SOUNDIntEnable {\
- *AT91C_SSC_IER = AT91C_SSC_ENDTX;\
- }
-
-#define SOUNDIntDisable {\
- *AT91C_SSC_IDR = AT91C_SSC_ENDTX;\
- }
-
-#define SOUNDEnable {\
- *AT91C_PIOA_PDR = AT91C_PA17_TD; /* Enable TD on PA17 */\
- }
-
-#define SOUNDDisable {\
- *AT91C_PIOA_PER = AT91C_PA17_TD; /* Disable TD on PA17 */\
- }
-
-ULONG SoundSampleRate(UWORD Rate)
-{
- ULONG Result;
-
- if (Rate > SAMPLERATE_MAX)
- {
- Rate = SAMPLERATE_MAX;
- }
- if (Rate < SAMPLERATE_MIN)
- {
- Rate = SAMPLERATE_MIN;
- }
- Result = ((OSC / (2 * SAMPLEBITS)) / Rate) + 1;
-
- return (Result);
-}
-
-__ramfunc void CalculateBitstream(SAMPLEWORD *pSampleBuffer,UBYTE Sample)
-{
- ULONG IntegerMask;
- ULONG FractionMask;
- UBYTE Integer;
- UBYTE Fraction;
- UBYTE Mask;
- UBYTE Tmp;
- SWORD STmp;
-
- if (SoundDivider)
- {
- STmp = Sample;
- STmp &= 0xFF;
- STmp -= SAMPLECENTER;
- STmp >>= (SOUNDVOLUMESTEPS - SoundDivider);
- STmp += SAMPLECENTER;
- Sample = (UBYTE)STmp;
- SOUNDEnable;
- }
- else
- {
- SOUNDDisable;
- }
-
- Tmp = 0;
- IntegerMask = 0xFFFF0000;
- Integer = Sample >> SAMPLECONSTANT;
- Fraction = Sample - (Integer << SAMPLECONSTANT);
- IntegerMask = 0xFFFFFFFF << (SAMPLEWORDBITS - Integer);
- FractionMask = (IntegerMask >> 1) | IntegerMask;
- Mask = FractionPattern[Fraction];
- while (Tmp < SAMPLEWORDS)
- {
- if ((Mask & (0x01 << Tmp)))
- {
- *pSampleBuffer = FractionMask;
- }
- else
- {
- *pSampleBuffer = IntegerMask;
- }
- pSampleBuffer++;
- Tmp++;
- }
-}
-
-__ramfunc void SscHandler(void)
-{
- static UBYTE ByteCnt = 0;
-
- if (SoundSamplesLeft)
- {
- if (0 == CurrentFileFormat)
- {
- CalculateBitstream(SampleBuffer[SampleBufferNo],*pSoundPointer);
- *AT91C_SSC_TNPR = (unsigned int)SampleBuffer[SampleBufferNo];
- *AT91C_SSC_TNCR = SAMPLEWORDS;
-
- pSoundPointer++;
- SoundSamplesLeft--;
- if (!SoundSamplesLeft)
- {
- pSoundPointer = pSoundPointerNext;
- SoundSamplesLeft = SoundSamplesLeftNext;
- *AT91C_SSC_CMR = ClockNext;
- SoundSamplesLeftNext = 0;
- }
-
- if (++SampleBufferNo >= SAMPLEBUFFERS)
- {
- SampleBufferNo = 0;
- }
- }
- else
- {
- if (0 == ByteCnt)
- {
- SoundADPCMDecoder(*pSoundPointer, Outdata, &State.Valprev, &State.Index);
- CalculateBitstream(SampleBuffer[SampleBufferNo],Outdata[0]);
- *AT91C_SSC_TNPR = (unsigned int)SampleBuffer[SampleBufferNo];
- *AT91C_SSC_TNCR = SAMPLEWORDS;
-
- if (++SampleBufferNo >= SAMPLEBUFFERS)
- {
- SampleBufferNo = 0;
- }
-
- ByteCnt++;
- }
- else
- {
- CalculateBitstream(SampleBuffer[SampleBufferNo],Outdata[1]);
- *AT91C_SSC_TNPR = (unsigned int)SampleBuffer[SampleBufferNo];
- *AT91C_SSC_TNCR = SAMPLEWORDS;
-
- pSoundPointer++;
- SoundSamplesLeft--;
- if (!SoundSamplesLeft)
- {
- pSoundPointer = pSoundPointerNext;
- SoundSamplesLeft = SoundSamplesLeftNext;
- *AT91C_SSC_CMR = ClockNext;
- SoundSamplesLeftNext = 0;
- }
-
- if (++SampleBufferNo >= SAMPLEBUFFERS)
- {
- SampleBufferNo = 0;
- }
- ByteCnt = 0;
- }
- }
- }
- else
- {
- if (ToneCycles)
- {
- ToneCycles--;
- if (ToneCycles < ToneCyclesReady)
- {
- SoundReady = TRUE;
- }
- *AT91C_SSC_TNPR = (unsigned int)ToneBuffer;
- *AT91C_SSC_TNCR = SAMPLETONENO;
- if (SoundDivider)
- {
- SOUNDEnable;
- }
- else
- {
- SOUNDDisable;
- }
- }
- else
- {
- SoundReady = TRUE;
- SOUNDDisable;
- SOUNDIntDisable;
- }
- }
-}
-
-UBYTE SoundStart(UBYTE *Sound,UWORD Length,UWORD SampleRate, UBYTE NewFileFormat)
-{
- UBYTE Result = FALSE;
-
- if (SoundReady == TRUE)
- {
- if (Length > 1)
- {
- CurrentFileFormat = NewFileFormat;
- *AT91C_SSC_CMR = SoundSampleRate(SampleRate);
- pSoundPointer = Sound;
- SoundSamplesLeft = Length;
-
- if (0 == CurrentFileFormat)
- {
- CalculateBitstream(SampleBuffer[0],*pSoundPointer);
- *AT91C_SSC_TPR = (unsigned int)SampleBuffer[0];
- *AT91C_SSC_TCR = SAMPLEWORDS;
- pSoundPointer++;
- SoundSamplesLeft--;
- CalculateBitstream(SampleBuffer[1],*pSoundPointer);
- *AT91C_SSC_TNPR = (unsigned int)SampleBuffer[1];
- *AT91C_SSC_TNCR = SAMPLEWORDS;
- pSoundPointer++;
- SoundSamplesLeft--;
- }
- else
- {
- State.Valprev = INIT_PREV_VAL_ADPCM;
- State.Index = INIT_INDEX_ADPCM;
- SoundADPCMDecoder(*pSoundPointer, Outdata, &State.Valprev, &State.Index);
- CalculateBitstream(SampleBuffer[0],Outdata[0]);
- *AT91C_SSC_TPR = (unsigned int)SampleBuffer[0];
- *AT91C_SSC_TCR = SAMPLEWORDS;
- pSoundPointer++;
- SoundSamplesLeft--;
- CalculateBitstream(SampleBuffer[1],Outdata[1]);
- *AT91C_SSC_TNPR = (unsigned int)SampleBuffer[1];
- *AT91C_SSC_TNCR = SAMPLEWORDS;
- }
- SampleBufferNo = 0;
- SoundReady = FALSE;
- SOUNDIntEnable;
- *AT91C_SSC_PTCR = AT91C_PDC_TXTEN;
- }
- Result = TRUE;
- }
- else
- {
- if (!ToneCycles)
- {
- if (!SoundSamplesLeftNext)
- {
- CurrentFileFormat = NewFileFormat;
- ClockNext = SoundSampleRate(SampleRate);
- pSoundPointerNext = Sound;
- SoundSamplesLeftNext = Length;
- Result = TRUE;
- }
- }
- }
-
- return (Result);
-}
-
-UBYTE SoundStop(void)
-{
- ToneCycles = 0;
- SOUNDIntDisable;
- SOUNDDisable;
- SoundReady = TRUE;
- SoundSamplesLeft = 0;
- SoundSamplesLeftNext = 0;
- MelodyPointer = 0;
-
- return (TRUE);
-}
-
-void SoundVolume(UBYTE Step)
-{
- if (Step > SOUNDVOLUMESTEPS)
- {
- Step = SOUNDVOLUMESTEPS;
- }
- SoundDivider = Step;
-}
-
-void SoundFreq(UWORD Freq,UWORD mS,UBYTE Step)
-{
- UBYTE Tmp;
-
- if (mS < DURATION_MIN)
- {
- mS = DURATION_MIN;
- }
- if (Freq)
- {
- if (Freq < FREQUENCY_MIN)
- {
- Freq = FREQUENCY_MIN;
- }
- if (Freq > FREQUENCY_MAX)
- {
- Freq = FREQUENCY_MAX;
- }
- if (Step > SOUNDVOLUMESTEPS)
- {
- Step = SOUNDVOLUMESTEPS;
- }
- }
- else
- {
- Step = 0;
- Freq = 1000;
- }
- SoundDivider = Step;
- SoundSamplesLeft = 0;
- SoundSamplesLeftNext = 0;
- for (Tmp = 0;Tmp < SAMPLETONENO;Tmp++)
- {
- ToneBuffer[Tmp] = TonePattern[Step][Tmp];
- }
-
- *AT91C_SSC_CMR = (((ULONG)OSC / (2L * 512L)) / ((ULONG)Freq)) + 1L;
- ToneCycles = ((ULONG)Freq * (ULONG)mS) / 1000L - 1L;
- ToneCyclesReady = ((ULONG)Freq * (ULONG)2L) / 1000L + 1L;
-
- *AT91C_SSC_TNPR = (unsigned int)ToneBuffer;
- *AT91C_SSC_TNCR = SAMPLETONENO;
- *AT91C_SSC_PTCR = AT91C_PDC_TXTEN;
- SoundReady = FALSE;
- SOUNDIntEnable;
-}
-
-UBYTE SoundTone(UBYTE *pMel,UWORD Length,UBYTE Step)
-{
- UBYTE Result = FALSE;
- UWORD Freq;
- UWORD mS;
-
- if ((SoundReady == TRUE))
- {
- if (MelodyPointer <= (Length - 4))
- {
- Freq = (UWORD)pMel[MelodyPointer++] << 8;
- Freq += (UWORD)pMel[MelodyPointer++];
- mS = (UWORD)pMel[MelodyPointer++] << 8;
- mS += (UWORD)pMel[MelodyPointer++];
- SoundFreq(Freq,mS,Step);
- }
- else
- {
- MelodyPointer = 0;
- Result = TRUE;
- }
- }
-
- return (Result);
-}
-
-#define SOUNDInit {\
- SOUNDIntDisable;\
- SoundReady = TRUE;\
- MelodyPointer = 0;\
- *AT91C_PMC_PCER = (1L << AT91C_ID_SSC); /* Enable MCK clock */\
- *AT91C_PIOA_PER = AT91C_PA17_TD; /* Disable TD on PA17 */\
- *AT91C_PIOA_ODR = AT91C_PA17_TD;\
- *AT91C_PIOA_OWDR = AT91C_PA17_TD;\
- *AT91C_PIOA_MDDR = AT91C_PA17_TD;\
- *AT91C_PIOA_PPUDR = AT91C_PA17_TD;\
- *AT91C_PIOA_IFDR = AT91C_PA17_TD;\
- *AT91C_PIOA_CODR = AT91C_PA17_TD;\
- *AT91C_PIOA_IDR = AT91C_PA17_TD;\
- *AT91C_SSC_CR = AT91C_SSC_SWRST;\
- AT91C_AIC_SVR[AT91C_ID_SSC] = (unsigned int)SscHandler;\
- AT91C_AIC_SMR[AT91C_ID_SSC] = AT91C_AIC_PRIOR_LOWEST | AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED; /* Set priority */\
- *AT91C_SSC_TCMR = AT91C_SSC_CKS_DIV + AT91C_SSC_CKO_CONTINOUS + AT91C_SSC_START_CONTINOUS;\
- *AT91C_SSC_TFMR = (SAMPLEWORDBITS - 1) + ((SAMPLEWORDS & 0xF) << 8) + AT91C_SSC_MSBF;\
- *AT91C_SSC_CR = AT91C_SSC_TXEN; /* TX enable */\
- *AT91C_AIC_ICCR = (1L << AT91C_ID_SSC); /* Clear interrupt */\
- *AT91C_AIC_IECR = (1L << AT91C_ID_SSC); /* Enable int. controller */\
- }
-
-#define SOUNDVolume(V) SoundVolume((UBYTE)V)
-
-#define SOUNDReady SoundReady
-
-#define SOUNDStart(pSnd,Lng,SR,FT) SoundStart(pSnd,Lng,SR,FT)
-
-#define SOUNDStop SoundStop()
-
-#define SOUNDTone(pMel,Lng,Vol) SoundTone(pMel,Lng,Vol)
-
-#define SOUNDFreq(Freq,Duration,Vol) SoundFreq(Freq,Duration,Vol)
-
-#define SOUNDExit {\
- SOUNDIntDisable;\
- SOUNDDisable;\
- *AT91C_AIC_IDCR = (1L << AT91C_ID_SSC);\
- }
-
-
-#endif
diff --git a/AT91SAM7S256/Source/d_sound_adpcm.r b/AT91SAM7S256/Source/d_sound_adpcm.r
deleted file mode 100644
index f04a760..0000000
--- a/AT91SAM7S256/Source/d_sound_adpcm.r
+++ /dev/null
@@ -1,158 +0,0 @@
-//Playback of compressed sound files. This additional feature is being brought to you under the following license.
-//Please adhere to its terms.
-//The original code includes minor changes to function correctly within the LEGO MINDSTORMS NXT embedded system,
-//but the main architecture are implemented as within the original code.
-
-//***********************************************************
-//Copyright 1992 by Stichting Mathematisch Centrum, Amsterdam, The
-//Netherlands.
-//
-// All Rights Reserved
-//
-//Permission to use, copy, modify, and distribute this software and its
-//documentation for any purpose and without fee is hereby granted,
-//provided that the above copyright notice appear in all copies and that
-//both that copyright notice and this permission notice appear in
-//supporting documentation, and that the names of Stichting Mathematisch
-//Centrum or CWI not be used in advertising or publicity pertaining to
-//distribution of the software without specific, written prior permission.
-//
-//STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-//THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-//FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-//FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-//WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-//ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-//OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-//
-//******************************************************************/
-
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_sound_adpcm.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_sound_adpc $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-__ramdata
-static SWORD IndexTable[16] =
-{
- -1, -1, -1, -1, 2, 4, 6, 8,
- -1, -1, -1, -1, 2, 4, 6, 8,
-};
-
-__ramdata
-static SWORD StepsizeTable[89] =
-{
- 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
- 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
- 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
- 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
- 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
- 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
- 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
- 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
-};
-
-__ramfunc void SoundADPCMDecoder(UBYTE Indata, UBYTE *Outdata, SWORD *pStateValprev, SWORD *pStateIndex)
-{
- SWORD Step; // Stepsize
- SWORD Valprev; // Virtual previous output value
- SWORD Vpdiff; // Current change to valprev
- SWORD Index; // Current step change index
- UBYTE *pOut; // Output buffer pointer
- UBYTE Sign; // Current adpcm sign bit
- UBYTE Delta; // Current adpcm output value
- UBYTE Bufferstep; // Toggle between High og Low nibble
- UBYTE Len; // Nibble Counter
-
- pOut = Outdata;
-
- Valprev = *pStateValprev;
- Index = *pStateIndex;
- Step = StepsizeTable[Index];
-
- Bufferstep = 0;
- Len = 2;
-
- for (; Len > 0 ; Len--) //Step 1 - get the delta value and compute next index
- {
- if(Bufferstep)
- {
- Delta = Indata & 0x0F;
- }
- else
- {
- Delta = (Indata >> 4) & 0x0F;
- }
- Bufferstep = !Bufferstep;
-
- Index += IndexTable[Delta]; //Step 2 - Find new index value (for later)
- if (Index < 0)
- {
- Index = 0;
- }
- else
- {
- if (Index > 88)
- {
- Index = 88;
- }
- }
-
- Sign = Delta & 8; //Step 3 - Separate sign and magnitude
- Delta = Delta & 7;
-
- Vpdiff = Step >> 3; //Step 4 - Compute difference and new predicted value
-
- if (Delta & 4)
- {
- Vpdiff += Step;
- }
- if (Delta & 2)
- {
- Vpdiff += Step>>1;
- }
- if (Delta & 1)
- {
- Vpdiff += Step>>2;
- }
-
- if (Sign)
- Valprev -= Vpdiff;
- else
- Valprev += Vpdiff;
-
- if (Valprev > 255) //Step 5 - clamp output value
- {
- Valprev = 255;
- }
- else
- {
- if (Valprev < 0)
- {
- Valprev = 0;
- }
- }
- Step = StepsizeTable[Index]; //Step 6 - Update step value
- *pOut++ = (UBYTE)Valprev; //Step 7 - Output value
- }
- *pStateValprev = Valprev; //State.Valprev = Valprev;
- *pStateIndex = Index; //State.Index = Index;
-}
-
-#endif
diff --git a/AT91SAM7S256/Source/d_timer.c b/AT91SAM7S256/Source/d_timer.c
deleted file mode 100644
index cba73d0..0000000
--- a/AT91SAM7S256/Source/d_timer.c
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 23-04-08 11:15 $
-//
-// Filename $Workfile:: d_timer.c $
-//
-// Version $Revision: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_time $
-//
-// Platform C
-//
-
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_timer.h"
-#include "d_timer.r"
-
-
-void dTimerInit(void)
-{
- TIMERInit;
-}
-
-
-ULONG dTimerRead(void)
-{
- ULONG V;
-
- TIMERReadAlt(V)
- return (V);
-}
-
-ULONG dTimerReadNoPoll(void)
-{
- return (Timer1mS);
-}
-
-ULONG dTimerReadHiRes(void)
-{
-
-// return ((*AT91C_PITC_PIIR)/3); following code is equivalent and about five times faster, see Hacker's Delight or exact division
- ULONG tmp= ((*AT91C_PITC_PIIR)*2863311531);
- if(tmp > 2863311531)
- return tmp - 2863311531;
- else if(tmp > 1431655766)
- return tmp - 1431655766;
- else
- return tmp;
-}
-
-ULONG dTimerGetNextMSTickCnt(void) {
- return NextTimerValue;
-}
-
-void dTimerExit(void)
-{
- TIMERExit;
-}
-
diff --git a/AT91SAM7S256/Source/d_timer.h b/AT91SAM7S256/Source/d_timer.h
deleted file mode 100644
index 9d7eadb..0000000
--- a/AT91SAM7S256/Source/d_timer.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date: 23-04-08 11:15 $
-//
-// Filename $Workfile:: d_timer.h $
-//
-// Version $Revision: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_time $
-//
-// Platform C
-//
-
-
-#ifndef D_TIMER
-#define D_TIMER
-
-void dTimerInit(void);
-ULONG dTimerRead(void);
-ULONG dTimerReadNoPoll(void);
-ULONG dTimerReadHiRes(void);
-
-ULONG dTimerGetNextMSTickCnt(void);
-#define dTimerReadTicks() (*AT91C_PITC_PIIR)
-
-void dTimerExit(void);
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/d_timer.r b/AT91SAM7S256/Source/d_timer.r
deleted file mode 100644
index 93c3a3b..0000000
--- a/AT91SAM7S256/Source/d_timer.r
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 23-04-08 11:15 $
-//
-// Filename $Workfile:: d_timer.r $
-//
-// Version $Revision:: 2 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_time $
-//
-// Platform C
-//
-
-
-#ifdef SAM7S256
-
-
-#define MS_1_TIME ((OSC/16)/1000)
-
-static ULONG TimerValue;
-static ULONG NextTimerValue;
-static ULONG Timer1mS;
-
-/* PIT timer is used as main timer - timer interval is 1mS */
-
-#define TIMERInit TimerValue = ((*AT91C_PITC_PIIR) & AT91C_PITC_CPIV);\
- NextTimerValue = (((*AT91C_PITC_PIIR) + MS_1_TIME) & AT91C_PITC_CPIV);\
- Timer1mS = 0
-
-#define TIMERRead(V) if (MS_1_TIME < ((((*AT91C_PITC_PIIR) & AT91C_PITC_CPIV) - TimerValue) & AT91C_PITC_CPIV))\
- {\
- TimerValue += MS_1_TIME;\
- TimerValue &= AT91C_PITC_CPIV;\
- Timer1mS++;\
- }\
- V = Timer1mS
-
-#define TIMERReadAlt(V) if((SLONG)((*AT91C_PITC_PIIR) - NextTimerValue) >= 0)\
- {\
- Timer1mS ++;\
- NextTimerValue += MS_1_TIME;\
- }\
- V = Timer1mS;\
-
-#define TIMERReadSkip(V) diff= (((*AT91C_PITC_PIIR)) - NextTimerValue);\
- if (diff >= 0)\
- {\
- diff /= MS_1_TIME;\
- diff += 1;\
- Timer1mS += diff;\
- diff *= MS_1_TIME;\
- NextTimerValue += diff;\
- }\
- V = Timer1mS;\
-
-#define TIMERExit
-
-
-
-#endif //SAM7S256
-
-
-
-#ifdef _WINDOWS
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#define TIMERInit timeBeginPeriod(1);
-
-#define TIMERRead(V) (V) = timeGetTime();
-
-#define TIMERExit timeEndPeriod(1);
-
-#endif //_WINDOWS
diff --git a/AT91SAM7S256/Source/d_usb.c b/AT91SAM7S256/Source/d_usb.c
deleted file mode 100644
index 0caf317..0000000
--- a/AT91SAM7S256/Source/d_usb.c
+++ /dev/null
@@ -1,946 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_usb.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_usb. $
-//
-// Platform C
-//
-
-#include "stdconst.h"
-#include "m_sched.h"
-#include "d_usb.h"
-#include "d_usb.r"
-
-#define ENDPOINT_OUT 1 // HOST write
-#define ENDPOINT_OUT_SIZE 64
-#define ENDPOINT_IN 2 // HOST read
-#define ENDPOINT_IN_SIZE 64
-
-#define AT91C_UDP_ISR ((AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register
-#define AT91C_RSTC_URSTEN ((unsigned int) 0x1 << 0) // (RSTC) User Reset Enable
-
- // Endpoint Control and Status Registers
-#define AT91C_UDP_CSR0 ((AT91_REG *) 0xFFFB0030) // Endpoint 0 Control and Status Register
-#define AT91C_UDP_CSR1 ((AT91_REG *) 0xFFFB0034) // Endpoint 1 Control and Status Register
-#define AT91C_UDP_CSR2 ((AT91_REG *) 0xFFFB0038) // Endpoint 2 Control and Status Register
-#define AT91C_UDP_CSR3 ((AT91_REG *) 0xFFFB003C) // Endpoint 3 Control and Status Register
-
- // Endpoint FIFO Data Registers
-#define AT91C_UDP_FDR0 ((AT91_REG *) 0xFFFB0050) // Endpoint 0 FIFO Data Register
-#define AT91C_UDP_FDR1 ((AT91_REG *) 0xFFFB0054) // Endpoint 1 FIFO Data Register
-#define AT91C_UDP_FDR2 ((AT91_REG *) 0xFFFB0058) // Endpoint 2 FIFO Data Register
-#define AT91C_UDP_FDR3 ((AT91_REG *) 0xFFFB005C) // Endpoint 3 FIFO Data Register
-
-const UBYTE DeviceDescriptor[] = {
- /* Device descriptor */
- 0x12, // bLength, size of this descriptor = 18 entries
- 0x01, // bDescriptorType = 1 = DEVICE
- 0x00, // bcdUSBL, USB spec. vers. 2.0
- 0x02, // bcdUSBH, -
- 0x00, // bDeviceClass
- 0x00, // bDeviceSubclass
- 0x00, // bDeviceProtocol
- 0x08, // bMaxPacketSize0, EndPointZero packet size = 8
- 0x94, // idVendorL, LEGO Group
- 0x06, // idVendorH, -
- 0x02, // idProductL, LEGO USB IR Tower = 0x01
- 0x00, // idProductH, -
- 0x00, // bcdDeviceL, device is version (zero)
- 0x00, // bcdDeviceH, -
- 0x00, // iManufacturer, index of string descriptor describing manufacturer
- 0x00, // iProduct, index of string descriptor describing product
- 0x01, // iSerialNumber, index of string descriptor describing the device's
- // serial no.
- 0x01 // bNumConfigs, number of possible configurations (only one)
-};
-
-/* USB standard request codes */
-
-#define STD_GET_STATUS_ZERO 0x0080
-#define STD_GET_STATUS_INTERFACE 0x0081
-#define STD_GET_STATUS_ENDPOINT 0x0082
-
-#define STD_CLEAR_FEATURE_ZERO 0x0100
-#define STD_CLEAR_FEATURE_INTERFACE 0x0101
-#define STD_CLEAR_FEATURE_ENDPOINT 0x0102
-
-#define STD_SET_FEATURE_ZERO 0x0300
-#define STD_SET_FEATURE_INTERFACE 0x0301
-#define STD_SET_FEATURE_ENDPOINT 0x0302
-
-#define STD_SET_ADDRESS 0x0500
-#define STD_GET_DESCRIPTOR 0x0680
-#define STD_SET_DESCRIPTOR 0x0700
-#define STD_GET_CONFIGURATION 0x0880
-#define STD_SET_CONFIGURATION 0x0900
-#define STD_GET_INTERFACE 0x0A81
-#define STD_SET_INTERFACE 0x0B01
-#define STD_SYNCH_FRAME 0x0C82
-
-/* USB constants, masks etc. */
-
-#define END_OF_BUS_RESET ((unsigned int) 0x1 << 12)
-#define SUSPEND_INT ((unsigned int) 0x1 << 8)
-#define SUSPEND_RESUME ((unsigned int) 0x1 << 9)
-#define WAKEUP ((unsigned int) 0x1 << 13)
-
-//USB spec allows 500ms for control transfers
-#define USB_MAX_TIMEOUT 500
-
-static UBYTE UsbHandleList[MAX_HANDLES];
-static UBYTE UsbHandleCnt;
-static UWORD RequestedData;
-static UBYTE BrickNameKnown;
-enum
-{
- USB_NOT_CONFIGURED,
- USB_CONFIGURED,
- USB_CONFIGURED_BUT_SUSPENDED
-};
-static UBYTE UsbConnectionStates;
-
-
-const UBYTE ConfigurationDescriptor[] = {
- /* ============== CONFIGURATION 1 =========== */
- /* Configuration 1 descriptor */
- 0x09, // bLength, descriptor size in bytes
- 0x02, // bDescriptorType, The constant Configuration
- 0x20, // wTotalLengthL for 2 EP + Control
- 0x00, // wTotalLengthH -
- 0x01, // bNumInterfaces, Number of interfaces in the configuration
- 0x01, // bConfigurationValue, Identifier for
- // Set_Configuration and Get_Configuration requests
- 0x00, // iConfiguration, Index of string descriptor for the configuration
- 0xC0, // bmAttributes, Bit 7 shall always be set. See e.g. page 108 in the book:
- // "USB Complete" by Jan Axelson. June 2001
- // Self powered only bit 6 = 1 (zero = buspowered USB 1.1 and up)
- 0x00, // MaxPower, power required (mA./2) We're SELF-POWERED, so ZERO
-
- /* Interface Descriptor */
- 0x09, // bLength, descriptor size in bytes
- 0x04, // bDescriptorType, the constant 0x04 = "INTERFACE"
- 0x00, // bInterfaceNumber, No. identifying this interface
- 0x00, // bAlternateSetting, value used to get an alternative interface
- 0x02, // bNumEndpoints, No. of supported endpoints in addition to endpoint 0
- 0xFF, // bInterfaceClass, Specifies the class code = VENDOR Specific
- 0xFF, // bInterfaceSubclass, Specifies the subclass code = VENDOR Specific
- 0xFF, // bInterfaceProtocol, protocol code = VENDOR Specific
- 0x00, // iInterface, index of string descriptor for the interface
-
- /* Endpoint 1 descriptor */
- 0x07, // bLength, descriptor length incl. this = 7
- 0x05, // bDescriptorType
- 0x01, // bEndpointAddress, Endpoint 01 - OUT
- 0x02, // bmAttributes BULK
- ENDPOINT_OUT_SIZE, // wMaxPacketSize
- 0x00, // -
- 0x00, // bInterval
-
- /* Endpoint 2 descriptor */
- 0x07, // bLength, descriptor length incl. this = 7
- 0x05, // bDescriptorType
- 0x82, // bEndpointAddress, Endpoint 02 - IN
- 0x02, // bmAttributes BULK
- ENDPOINT_IN_SIZE, // wMaxPacketSize
- 0x00, // -
- 0x00 // bInterval
-};
-
-UBYTE SerialNumberDescriptor[] =
-{
- 0x1A, // bLength, descriptor length incl. this = 16 bytes
- 0x03, // bDescriptorType
-
- 0x31, 0x00, // MSD of Lap (Lap[2,3]) in UNICode
- 0x32, 0x00, // Lap[4,5]
- 0x33, 0x00, // Lap[6,7]
- 0x34, 0x00, // Lap[8,9]
- 0x35, 0x00, // Lap[10,11]
- 0x36, 0x00, // Lap[12,13]
- 0x37, 0x00, // Lap[14,15]
- 0x38, 0x00, // LSD of Lap (Lap[16,17]) in UNICode
-
- 0x30, 0x00, // MSD of Nap (Nap[18,19]) in UNICode
- 0x30, 0x00, // LSD of Nap (Nap[20,21]) in UNICode
-
- 0x39, 0x00, // MSD of Uap in UNICode
- 0x30, 0x00 // LSD of Uap in UNICode
-};
-
-const UBYTE LangIdDescriptor[] =
-{
- 0x04, // Length
- 0x03, // Type, 3 = CONSTANT String
- 0x09, // English
- 0x04 // subcode = U.S. English
-};
-
-static UCHAR CurrentConfiguration; // Configured or not. We've only 1 conf. so... Boolean
-static ULONG CurrentReceiveBank; // Used for keep track of the PING-PONG buffers
-
-ULONG g_UsbTimeoutCounter;
-
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-void dUsbDisconnect(void)
-{
- USBDisconnect;
-}
-
-void dUsbConnect(void)
-{
- USBConnect;
-}
-
-void dUsbStartTimeoutTimer(void)
-{
- g_UsbTimeoutCounter = 0;
-
- USBGetActualTime;
-}
-
-// A longer version of the USB timer.
-// Table 7-14 of the USB 2.0 spec allows up to 500ms for standard request completion.
-UBYTE dUsbTimedOut(void)
-{
- if(USBTimedOut)
- {
- g_UsbTimeoutCounter++;
-
- USBGetActualTime;
- }
-
- return (g_UsbTimeoutCounter >= USB_MAX_TIMEOUT) ? TRUE : FALSE;
-}
-
-
-UBYTE ConvertHighToHex(UBYTE TempChar)
-{
- TempChar = (TempChar >> 4) & 0x0F;
- if (TempChar > 0x09)
- TempChar += 0x37;
- else
- TempChar += 0x30;
- return TempChar;
-}
-
-UBYTE ConvertLowToHex(UBYTE TempChar)
-{
- TempChar &= 0x0F;
- if (TempChar > 0x09)
- TempChar += 0x37;
- else
- TempChar += 0x30;
- return TempChar;
-}
-
-void dUsbStoreBtAddress(UBYTE *pBtAddress)
-{
- UBYTE NoToConvert;
-
- // make the Lap human readable (hmmm Hexadecimal)
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[2] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[4] = ConvertLowToHex(NoToConvert);
-
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[6] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[8] = ConvertLowToHex(NoToConvert);
-
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[10] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[12] = ConvertLowToHex(NoToConvert);
-
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[14] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[16] = ConvertLowToHex(NoToConvert);
-
- // make the Uap human readable (hmmm Hexadecimal)
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[18] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[20] = ConvertLowToHex(NoToConvert);
-
- // make the Nap human readable (hmmm Hexadecimal)
- NoToConvert = *pBtAddress++;
- SerialNumberDescriptor[22] = ConvertHighToHex(NoToConvert);
- SerialNumberDescriptor[24] = ConvertLowToHex(NoToConvert);
-
- USBConnect; // We're ready to participate in the real world
- BrickNameKnown = TRUE; // OK for referencing :-)
-}
-
-
-ULONG dUsbRead(UBYTE *pData, ULONG Length)
-{
- ULONG PacketSize, NumberOfBytesReceived;
-
- NumberOfBytesReceived = 0;
-
- while (Length) // Wished read size from user (Max length)
- {
- if ( !(BrickNameKnown)) // Right Brick???
- break;
-
- if ( !(dUsbIsConfigured()) )
- break; // Not configured - no time to waste
-
- if ( (*AT91C_UDP_CSR1) & CurrentReceiveBank ) // Data packet rx'ed in Current bank?
- {
-
- PacketSize = MIN((*AT91C_UDP_CSR1) >> 16, Length); // Normalize number of bytes available in FIFO
- Length -= PacketSize; // Rest of data to receive
-
- if (PacketSize < ENDPOINT_OUT_SIZE) // If data less, we only have one loop
- Length = 0;
-
- while(PacketSize--) // While more data in this very packet...
- pData[NumberOfBytesReceived++] = *AT91C_UDP_FDR1; // Fill in buffer
-
- *AT91C_UDP_CSR1 &= ~(CurrentReceiveBank); // Reset current bank pointer
-
- if (CurrentReceiveBank == AT91C_UDP_RX_DATA_BK0) // Current Receive Bank 0?
- CurrentReceiveBank = AT91C_UDP_RX_DATA_BK1; // We better use Bank 1
- else
- CurrentReceiveBank = AT91C_UDP_RX_DATA_BK0; // Okay, go for Bank 0 :-)
-
- }
-
- else Length = 0; // Leave and let's use the CPU cycles in a better way
-
- }
-
- return NumberOfBytesReceived; // Size of actually received stuff
-
-}
-
-ULONG dUsbWrite( const UBYTE *pData, ULONG Length)
-{
- ULONG CharsEachTx = 0;
-
- // Send the very first (or only) packet
- CharsEachTx = MIN(Length, ENDPOINT_IN_SIZE); // First transmission size
- Length -= CharsEachTx; // Adjust the rest of transmission size
-
- while (CharsEachTx--) // While more chars in this chunk
- *AT91C_UDP_FDR2 = *pData++; // Get rid off it one by one
- // Pushing the data into the UDP TX-fifo
- *AT91C_UDP_CSR2 |= AT91C_UDP_TXPKTRDY; // Signal "DO THE TX" the stuff is delivered...
-
- while (Length) // While more bytes (I.e. packets) ín total transmission
- { // Start filling the second bank
-
- CharsEachTx = MIN(Length, ENDPOINT_IN_SIZE);
- Length -= CharsEachTx; // Adjust total length
-
- while (CharsEachTx--) // While more chars in this chunk
- *AT91C_UDP_FDR2 = *pData++;
-
- dUsbStartTimeoutTimer();
- while ( !((*AT91C_UDP_CSR2) & AT91C_UDP_TXCOMP) ) // Wait for the the first bank to be sent
- if (dUsbTimedOut() || !(dUsbIsConfigured()) ) // Communication down..... Bail out
- return Length; // Invalid function - return job length not done
-
- (*AT91C_UDP_CSR2) &= ~(AT91C_UDP_TXCOMP); // Reset transmit interrupt flag
-
- while ((*AT91C_UDP_CSR2) & AT91C_UDP_TXCOMP); // Wait until flag (H/W) is reset
-
- (*AT91C_UDP_CSR2) |= AT91C_UDP_TXPKTRDY; // We're ready to send next bank
-
- } // Loop while bytes to tx
-
- dUsbStartTimeoutTimer(); // Arm the timeout timing
- while ( !((*AT91C_UDP_CSR2) & AT91C_UDP_TXCOMP) ) // Wait for transmission to complete
- if ( !(dUsbIsConfigured()) || dUsbTimedOut()) // Communication down..... Bail out
- return Length; // Invalid function - return job length not done
-
- (*AT91C_UDP_CSR2) &= ~(AT91C_UDP_TXCOMP); // Reset Interrupt flag
-
- while ((*AT91C_UDP_CSR2) & AT91C_UDP_TXCOMP); // Wait for H/W to settle.....
-
- return Length; // Return byte count NOT x-ferred
-
-}
-
-static void dUsbSendStall(void)
-{
- (*AT91C_UDP_CSR0) |= AT91C_UDP_FORCESTALL; // Set STALL condition
- while ( !((*AT91C_UDP_CSR0) & AT91C_UDP_ISOERROR) ); // Wait until stall ack'ed
-
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR); // Reset again
- while ((*AT91C_UDP_CSR0) & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR)); // Wait until H/W really reset
-}
-
-static void dUsbSendZeroLengthPackage(void)
-{
- // Signal that buffer is ready to send
- (*AT91C_UDP_CSR0) |= AT91C_UDP_TXPKTRDY;
-
- dUsbStartTimeoutTimer();
-
- // Wait for ACK handshake from host
- while ( !((*AT91C_UDP_CSR0) & AT91C_UDP_TXCOMP) && !dUsbTimedOut());
- // Clear handshake flag
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_TXCOMP);
- while ((*AT91C_UDP_CSR0) & AT91C_UDP_TXCOMP);
-}
-
-static void dUsbSendViaControl(const UBYTE *pData, ULONG Length)
-{
- ULONG BytesToTx = 0;
- AT91_REG Temp_Csr;
- UBYTE HaveToTxZeroLength = FALSE;
- UBYTE ZeroCouldBeNeeded = FALSE;
-
- // If the amount of data requested is more than what can be sent, a 0-length
- // packet may be required
- if (RequestedData > Length)
- {
- ZeroCouldBeNeeded = TRUE; // Exact same size would be interpreted as EOP @ host
- }
-
- do
- {
- // The endpoint size is 8 bytes. Limit each data phase to 8 bytes.
-
- BytesToTx = MIN(Length, 8);
- Length -= BytesToTx;
-
- // If this is the last data phase containing data, but the host requested
- // more, a 0-byte packet will be needed to terminate the data phase.
- if(ZeroCouldBeNeeded && (Length == 0) && (BytesToTx == 8))
- {
- HaveToTxZeroLength = TRUE;
- }
-
- // Copy data to endpoint buffer
- while (BytesToTx--)
- {
- (*AT91C_UDP_FDR0) = *pData++;
- }
-
- // Signal that buffer is ready to send
- (*AT91C_UDP_CSR0) |= AT91C_UDP_TXPKTRDY;
-
- dUsbStartTimeoutTimer();
-
- // Wait for ACK handshake from host
- do
- {
- Temp_Csr = (*AT91C_UDP_CSR0);
-
- // Return if the status phase occurs before the packet is accepted
- if (Temp_Csr & AT91C_UDP_RX_DATA_BK0)
- {
- // Clear the PKTRDY flag
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_TXPKTRDY);
- // Clear the status phase flag
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_RX_DATA_BK0);
- return;
- }
- }
- while (!(Temp_Csr & AT91C_UDP_TXCOMP) && !dUsbTimedOut());
-
- // Clear handshake flag
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_TXCOMP);
-
- while ((*AT91C_UDP_CSR0) & AT91C_UDP_TXCOMP);
-
- } while (Length);
-
- if(HaveToTxZeroLength)
- {
- dUsbSendZeroLengthPackage();
- }
-
- dUsbStartTimeoutTimer();
-
- // Wait for Status Phase
- while(!((*AT91C_UDP_CSR0) & AT91C_UDP_RX_DATA_BK0) && !dUsbTimedOut());
- // Clear flag
- (*AT91C_UDP_CSR0) &= ~(AT91C_UDP_RX_DATA_BK0);
-}
-
-static void dUsbEnumerate(void)
-{
- UBYTE bmRequestType, bRequest;
- UWORD wValue, wIndex, wLength, wStatus;
-
- if ( !((*AT91C_UDP_CSR0) & AT91C_UDP_RXSETUP) ) // No setup package available
- return;
- // Bytes are popped from the FIFO one by one
-
- bmRequestType = *AT91C_UDP_FDR0;
- bRequest = *AT91C_UDP_FDR0;
- wValue = ((*AT91C_UDP_FDR0) & 0xFF);
- wValue |= ((*AT91C_UDP_FDR0) << 8);
- wIndex = ((*AT91C_UDP_FDR0) & 0xFF);
- wIndex |= ((*AT91C_UDP_FDR0) << 8);
- wLength = ((*AT91C_UDP_FDR0) & 0xFF);
- wLength |= ((*AT91C_UDP_FDR0) << 8);
-
- if (bmRequestType & 0x80) // If a DEVICE-TO-HOST request
- {
- *AT91C_UDP_CSR0 |= AT91C_UDP_DIR; // Enables data IN transaction in the control data stage
- while ( !((*AT91C_UDP_CSR0) & AT91C_UDP_DIR) ); // Repeat until the DIR bit is set
- }
-
- *AT91C_UDP_CSR0 &= ~AT91C_UDP_RXSETUP; // Device firmware has read the setup data in FIFO
- while ( ((*AT91C_UDP_CSR0) & AT91C_UDP_RXSETUP) ); // Wait until bit cleared
-
- // Handle supported standard device request from Table 9-3 in USB specification Rev 2.0
-
- switch ((bRequest << 8) | bmRequestType)
- {
- case STD_GET_DESCRIPTOR:
-
- RequestedData = wLength;
-
- if (wValue == 0x100) // Return Device Descriptor
- {
- if (sizeof(DeviceDescriptor) > wLength)
- {
- dUsbSendViaControl(DeviceDescriptor, wLength);
- }
- else
- {
- dUsbSendViaControl(DeviceDescriptor, sizeof(DeviceDescriptor));
- }
- }
- else if (wValue == 0x200) // Return Configuration Descriptor
- {
- if (sizeof(ConfigurationDescriptor) > wLength)
- {
- dUsbSendViaControl(ConfigurationDescriptor, wLength);
- }
- else
- {
- dUsbSendViaControl(ConfigurationDescriptor, sizeof(ConfigurationDescriptor));
- }
- }
- else if ((wValue & 0xF00) == 0x300)
- {
- switch(wValue & 0xFF)
- {
- case 0x00:
- if ((sizeof(LangIdDescriptor)) > wLength)
- {
- dUsbSendViaControl(LangIdDescriptor, wLength);
- }
- else
- {
- dUsbSendViaControl(LangIdDescriptor, sizeof(LangIdDescriptor));
- }
- break;
-
- case 0x01:
- if ((sizeof(SerialNumberDescriptor)) > wLength)
- {
- dUsbSendViaControl(SerialNumberDescriptor, wLength);
- }
- else
- {
- dUsbSendViaControl(SerialNumberDescriptor, sizeof(SerialNumberDescriptor));
- }
- break;
-
- default:
- dUsbSendStall(); // Illegal request :-(
- break;
- }
- }
- else
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- case STD_SET_ADDRESS:
-
- // Status IN transfer
- (*AT91C_UDP_CSR0) |= AT91C_UDP_TXPKTRDY;
-
- dUsbStartTimeoutTimer();
-
- while((*AT91C_UDP_CSR0) & AT91C_UDP_TXPKTRDY && !dUsbTimedOut());
-
- *AT91C_UDP_FADDR = (AT91C_UDP_FEN | wValue); // Set device address. No check for invalid address.
- // Function endpoint enabled.
- *AT91C_UDP_GLBSTATE = (wValue) ? AT91C_UDP_FADDEN : 0; // If Device address != 0 then flag device
- // in ADDRESS STATE
- break;
-
- case STD_SET_CONFIGURATION:
-
- CurrentConfiguration = wValue; // Low byte of wValue = wanted configuration
- UsbConnectionStates = USB_CONFIGURED;
- dUsbSendZeroLengthPackage(); // Signal request processed OK
-
- *AT91C_UDP_GLBSTATE = (wValue) ? AT91C_UDP_CONFG : AT91C_UDP_FADDEN; // If wanted configuration != 0
-
- *AT91C_UDP_CSR1 = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0; // Endpoint 1 enabled and set as BULK OUT
- *AT91C_UDP_CSR2 = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN) : 0; // Endpoint 2 enabled and set as BULK IN
- *AT91C_UDP_CSR3 = (wValue) ? (AT91C_UDP_EPTYPE_INT_IN) : 0; // Endpoint 3 disabled and set as INTERRUPT IN
-
- break;
-
- case STD_GET_CONFIGURATION: // The actual configuration value is sent to HOST
-
- RequestedData = sizeof(CurrentConfiguration);
-
- dUsbSendViaControl((UBYTE *) &(CurrentConfiguration), sizeof(CurrentConfiguration));
-
- break;
-
- case STD_GET_STATUS_ZERO:
-
- wStatus = 0x01; // Atmel has a 0x00, but we're not BUS-powered
- RequestedData = sizeof(wStatus);
-
- dUsbSendViaControl((UBYTE *) &wStatus, sizeof(wStatus));
-
- break;
-
- case STD_GET_STATUS_INTERFACE: // Everything reset to zero (reserved)
-
- wStatus = 0;
- RequestedData = sizeof(wStatus);
-
- dUsbSendViaControl((UBYTE *) &wStatus, sizeof(wStatus));
-
- break;
-
- case STD_GET_STATUS_ENDPOINT:
-
- wStatus = 0;
- RequestedData = sizeof(wStatus);
- wIndex &= 0x0F; // Mask the endpoint #
-
- if (((*AT91C_UDP_GLBSTATE) & AT91C_UDP_CONFG) && (wIndex <= 3)) // If device in CONFIGURED state
- { // and ENDPOINT selected in valid range
-
- switch (wIndex)
- {
-
- case 1: wStatus = ((*AT91C_UDP_CSR1) & AT91C_UDP_EPEDS) ? 0 : 1; // If an endpoint is halted, the HALT
- // feature is set to 1, else reset
- break;
-
- case 2: wStatus = ((*AT91C_UDP_CSR2) & AT91C_UDP_EPEDS) ? 0 : 1;
-
- break;
-
- case 3: wStatus = ((*AT91C_UDP_CSR3) & AT91C_UDP_EPEDS) ? 0 : 1;
-
- break;
- default:
- // We'll never come here, but we'll never say never.......
- break;
- }
-
- dUsbSendViaControl((UBYTE *) &wStatus, sizeof(wStatus));
-
- }
-
- else if (((*AT91C_UDP_GLBSTATE) & AT91C_UDP_FADDEN) && (wIndex == 0))
- {
- wStatus = ((*AT91C_UDP_CSR0) & AT91C_UDP_EPEDS) ? 0 : 1; // Return 1 if device in ADRESSED state
-
- dUsbSendViaControl((UBYTE *) &wStatus, sizeof(wStatus));
- }
- else
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- case STD_SET_FEATURE_ZERO:
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- case STD_SET_FEATURE_INTERFACE:
-
- dUsbSendZeroLengthPackage(); // TextBook
-
- break;
-
- case STD_SET_FEATURE_ENDPOINT:
-
- wIndex &= 0x0F;
-
- if ((wValue == 0) && wIndex && (wIndex <= 3)) // Feature Selector = 0 ENDPOINT HALT and
- { // endpoint isolated and validated
-
- switch (wIndex)
- {
-
- case 1: (*AT91C_UDP_CSR1) = 0;
-
- break;
-
- case 2: (*AT91C_UDP_CSR2) = 0;
-
- break;
-
- case 3: (*AT91C_UDP_CSR3) = 0;
-
- break;
-
- default:
- // We'll never come here, but we'll never say never.......
- break;
-
- }
-
- dUsbSendZeroLengthPackage();
-
- }
- else
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- case STD_CLEAR_FEATURE_ZERO:
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- case STD_CLEAR_FEATURE_INTERFACE:
-
- dUsbSendZeroLengthPackage(); // No special
-
- break;
-
- case STD_CLEAR_FEATURE_ENDPOINT:
-
- wIndex &= 0x0F;
-
- if ((wValue == 0) && wIndex && (wIndex <= 3)) // Feature Selector = 0 => ENABLE A HALTED endpoint
- { // and endpoint isolated and validated
-
- if (wIndex == 1)
- (*AT91C_UDP_CSR1) = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT); // On duty again
- else if (wIndex == 2)
- (*AT91C_UDP_CSR2) = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN); // -
- else if (wIndex == 3)
- (*AT91C_UDP_CSR3) = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN); // -
-
- dUsbSendZeroLengthPackage();
-
- }
- else
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
-
- default:
-
- dUsbSendStall(); // Illegal request :-(
-
- break;
- }
-}
-
-UBYTE dUsbIsConfigured(void)
-{
-
- if (*AT91C_UDP_ISR & END_OF_BUS_RESET) // If "End Of Bus Reset Interrupt"
- { // Somebody fallen in the wire? ;-)
-
-
- *AT91C_UDP_ICR = END_OF_BUS_RESET; // Reset "End Of Bus Reset Interrupt"
- *AT91C_UDP_ICR = SUSPEND_RESUME; // State unknown after reset, so we better clear
- *AT91C_UDP_ICR = WAKEUP; // As above
-
- CurrentConfiguration = 0; // We're new and ready
- UsbConnectionStates = USB_NOT_CONFIGURED;
-
- *AT91C_UDP_RSTEP = 0xFFFFFFFF; // Reset all implemented endpoints "and a few more"
- *AT91C_UDP_RSTEP = 0x0; // Restored as zeroes
- // Below our main crash thing, if it is missing ;-)
- CurrentReceiveBank = AT91C_UDP_RX_DATA_BK0; // Start the PING-PONG buffers at a known state and order
-
- *AT91C_UDP_FADDR = AT91C_UDP_FEN; // Set FEN in the Function Address Register
- // USB device is able to receive and transfer data
-
- *AT91C_UDP_CSR0 = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL); // Configure endpoint 0
- // AT91C_UDP_EPEDS = Endpoint enable
- // AT91C_UDP_EPTYPE_CTRL = Endpoint type CONTROL
- }
-
- else if (*AT91C_UDP_ISR & SUSPEND_INT)
- {
- if (UsbConnectionStates == USB_CONFIGURED)
- {
- UsbConnectionStates = USB_CONFIGURED_BUT_SUSPENDED;
- }
- else
- {
- UsbConnectionStates = USB_NOT_CONFIGURED;
- }
-
- *AT91C_UDP_ICR = SUSPEND_INT;
- CurrentReceiveBank = AT91C_UDP_RX_DATA_BK0; // Start the PING-PONG buffers at a known state and order
- }
-
- else if (*AT91C_UDP_ISR & SUSPEND_RESUME)
- {
- if (UsbConnectionStates == USB_CONFIGURED_BUT_SUSPENDED)
- {
- UsbConnectionStates = USB_CONFIGURED;
- }
- else
- {
- UsbConnectionStates = USB_NOT_CONFIGURED;
- }
-
- *AT91C_UDP_ICR = WAKEUP;
- *AT91C_UDP_ICR = SUSPEND_RESUME;
- }
-
- else if (*AT91C_UDP_ISR & AT91C_UDP_EPINT0) // If "Endpoint 0 Interrupt"
- {
- *AT91C_UDP_ICR = AT91C_UDP_EPINT0; // Reset "Endpoint 0 Interrupt"
- if (BrickNameKnown)
- dUsbEnumerate(); // Let's date & exchange "personal data"
- }
-
- if (UsbConnectionStates == USB_CONFIGURED)
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-
-}
-
-
-void dUsbInsertHandle(UBYTE Handle)
-{
- UBYTE Tmp;
-
- Tmp = 0;
- while((UsbHandleList[Tmp] != MAX_HANDLES) && (Tmp < MAX_HANDLES))
- {
- Tmp++;
- }
- UsbHandleList[Tmp] = Handle;
-}
-
-void dUsbRemoveHandle(UBYTE Handle)
-{
- UBYTE Tmp;
-
- Tmp = 0;
- while (Tmp < MAX_HANDLES)
- {
- if (Handle == UsbHandleList[Tmp])
- {
- UsbHandleList[Tmp] = MAX_HANDLES;
- }
- Tmp++;
- }
-}
-
-UWORD dUsbGetFirstHandle(void)
-{
- UWORD RtnVal;
-
- UsbHandleCnt = 0;
- RtnVal = dUsbGetNextHandle();
-
- return(RtnVal);
-}
-
-UWORD dUsbGetNextHandle(void)
-{
- UBYTE Tmp;
- UWORD RtnVal;
-
- RtnVal = 0;
- Tmp = UsbHandleCnt;
- while((Tmp < MAX_HANDLES) && (MAX_HANDLES == UsbHandleList[Tmp]))
- {
- Tmp++;
- }
- UsbHandleCnt = Tmp + 1;
-
- if (Tmp < MAX_HANDLES)
- {
- RtnVal |= UsbHandleList[Tmp];
- }
- else
- {
- RtnVal = 0x8100;
- }
-
- return(RtnVal);
-}
-
-UWORD dUsbCheckConnection(void)
-{
- UWORD ADValue;
- UWORD Return;
-
- Return = FALSE;
- USBReadADCValue(&ADValue);
-
- if (ADValue > 512)
- {
- Return = TRUE;
- }
- return(Return);
-}
-
-void dUsbInit(void)
-{
- UBYTE Tmp;
-
- // We could come from a SAMBA session and then we need
- // to "introduce ourself in a polite way for the PNP manager
- // We will pull the carpet and start a new session by removing
- // the pull up of the D+ wire
-
- BrickNameKnown = FALSE;
- dUsbStartTimeoutTimer(); // Let H/W settle
- dUsbDisconnect(); // Pull the carpet
- while(!USBTimedOut); // wait 1 mS.
-
- USBHwInit; // New session
-
- CurrentConfiguration = 0; // We're new born
- UsbConnectionStates = USB_NOT_CONFIGURED;
- CurrentReceiveBank = AT91C_UDP_RX_DATA_BK0; // Always start from Bank 0
- RequestedData = 0;
-
- for(Tmp = 0; Tmp < MAX_HANDLES; Tmp++)
- {
- UsbHandleList[Tmp] = MAX_HANDLES;
- }
-}
-
-void dUsbResetConfig(void)
-{
- CurrentConfiguration = 0; // We've lost the connection
- UsbConnectionStates = USB_NOT_CONFIGURED;
-}
-
-void dUsbExit(void)
-{
-// USBExit;
-}
diff --git a/AT91SAM7S256/Source/d_usb.h b/AT91SAM7S256/Source/d_usb.h
deleted file mode 100644
index b8e78c4..0000000
--- a/AT91SAM7S256/Source/d_usb.h
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_usb.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_usb. $
-//
-// Platform C
-//
-
-#ifndef D_USB
-#define D_USB
-
-//* public constants
-
-// LOW level commands
-
-#define OPENFILEWRITE 0x01
-#define OPENFILEREAD 0x02
-#define WRITEFILE 0x03
-#define CLOSEFILE 0x04
-
-// Low level direct command escape
-
-#define DIRECTCOMMAND 0x80 // Escape sent to the Loader
-#define USB_TIMEOUT 0x0BB8 // Equals approx. 1 mS. Used for recover a "broken" cable situation
-
-//* external function description
-
-void dUsbInit(void);
-void dUsbExit(void);
-ULONG dUsbRead(UBYTE *pData, ULONG Length);
-ULONG dUsbWrite( const UBYTE *pData, ULONG Length);
-UBYTE dUsbIsConfigured(void);
-
-void dUsbInsertHandle(UBYTE Handle);
-void dUsbRemoveHandle(UBYTE Handle);
-UWORD dUsbGetFirstHandle(void);
-UWORD dUsbGetNextHandle(void);
-UWORD dUsbCheckConnection(void);
-void dUsbResetConfig(void);
-void dUsbStoreBtAddress(UBYTE *pBtAddress);
-#endif
diff --git a/AT91SAM7S256/Source/d_usb.r b/AT91SAM7S256/Source/d_usb.r
deleted file mode 100644
index 6c7a0c3..0000000
--- a/AT91SAM7S256/Source/d_usb.r
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: d_usb.r $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_usb. $
-//
-// Platform C
-//
-
-#ifdef SAM7S256
-
-#ifdef PROTOTYPE_PCB_3
-#define ENABLEUsbPU *AT91C_PIOA_PER = AT91C_PIO_PA16; /* PIO allowed to control bit 16 */\
- *AT91C_PIOA_OER = AT91C_PIO_PA16; /* Output pin 16 enabled */\
- *AT91C_PIOA_SODR = AT91C_PIO_PA16 /* Pin 16 set = enable USB pull-up */
-#endif
-
-#ifdef PROTOTYPE_PCB_4
-#define ENABLEUsbPU *AT91C_PIOA_PER = AT91C_PIO_PA16; /* PIO allowed to control bit 16 */\
- *AT91C_PIOA_OER = AT91C_PIO_PA16; /* Output pin 16 enabled */\
- *AT91C_PIOA_CODR = AT91C_PIO_PA16 /* Pin 16 clear = enable USB pull-up */
-
-#define DISABLEUsbPU *AT91C_PIOA_PER = AT91C_PIO_PA16; /* PIO allowed to control bit 16 */\
- *AT91C_PIOA_OER = AT91C_PIO_PA16; /* Output pin 16 enabled */\
- *AT91C_PIOA_SODR = AT91C_PIO_PA16 /* Pin 16 set = disable USB pull-up */
-#endif
-
-
-#define USBHwInit *AT91C_CKGR_PLLR |= AT91C_CKGR_USBDIV_1; /* Set the PLL USB Divider (96MHz/2) */\
- *AT91C_PMC_SCER = AT91C_PMC_UDP; /* WRITE-ONLY REG! Enables the 48MHz USB clock UDPCK (SysClk) */\
- *AT91C_PMC_PCER = (1 << AT91C_ID_UDP); /* WRITE-ONLY REG! Enable USB clock (Peripheral Clock) */\
- \
- /* Enable UDP PullUp (USB_DP_PUP) : enable & Clear of the corresponding PIO */ \
- \
- /* Removed 22022006 14:20 pc ENABLEUsbPU BlueCore delay , No pull up before OK serial-no rec. from B.C.*/
-
-
-static ULONG USBTimeOut;
-
-#define USBTimedOut (USB_TIMEOUT < ((((*AT91C_PITC_PIIR) & AT91C_PITC_CPIV) - USBTimeOut) & AT91C_PITC_CPIV))
-
-#define USBGetActualTime USBTimeOut = ((*AT91C_PITC_PIIR) & AT91C_PITC_CPIV)
-
-#define USBReadADCValue(ADValue) *ADValue = *AT91C_ADC_CDR4
-
-#define USBExit
-
-#define USBDisconnect DISABLEUsbPU
-
-#define USBConnect ENABLEUsbPU
-
-#endif
-
-#ifdef PCWIN
-
-#endif
diff --git a/AT91SAM7S256/Source/m_sched.c b/AT91SAM7S256/Source/m_sched.c
deleted file mode 100644
index 7c69551..0000000
--- a/AT91SAM7S256/Source/m_sched.c
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: m_sched.c $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/m_sche $
-//
-// Platform C
-//
-
-
-#define INCLUDE_OS
-
-#define MODULEHEADERS 32
-
-#include "stdconst.h"
-#include "modules.h"
-#include "m_sched.h"
-
-#include "c_comm.h"
-#include "c_input.h"
-#include "c_button.h"
-#include "c_loader.h"
-#include "c_sound.h"
-#include "c_display.h"
-#include "c_lowspeed.h"
-#include "c_output.h"
-#include "c_cmd.h"
-#include "c_cmd.iom"
-#include "c_ioctrl.h"
-#include "c_ui.h"
-
-
-static const HEADER* pModuleHeaders[MODULEHEADERS] =
-{
- &cComm,
- &cInput,
- &cButton,
- &cDisplay,
- &cLoader,
- &cLowSpeed,
- &cOutput,
- &cSound,
- &cIOCtrl,
- &cCmd,
- &cUi,
- 0
-};
-
-
-void mSchedInit(void)
-{
- UWORD Tmp;
-
- Tmp = 0;
- while(pModuleHeaders[Tmp])
- {
- (*pModuleHeaders[Tmp]).cInit((void*) pModuleHeaders);
- Tmp++;
- }
-}
-
-
-UBYTE mSchedCtrl(void)
-{
- UWORD Tmp;
-
- Tmp = 0;
- while(pModuleHeaders[Tmp])
- {
- (*pModuleHeaders[Tmp]).cCtrl();
- Tmp++;
- }
-
- return(((IOMAPCMD*)(pModuleHeaders[ENTRY_CMD]->pIOMap))->Awake);
-}
-
-
-void mSchedExit(void)
-{
- UWORD Tmp;
-
- Tmp = 0;
- while(pModuleHeaders[Tmp])
- {
- (*pModuleHeaders[Tmp]).cExit();
- Tmp++;
- }
-}
-
diff --git a/AT91SAM7S256/Source/m_sched.h b/AT91SAM7S256/Source/m_sched.h
deleted file mode 100644
index b3bb27e..0000000
--- a/AT91SAM7S256/Source/m_sched.h
+++ /dev/null
@@ -1,135 +0,0 @@
-//
-// Date init 14.12.2004
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: m_sched.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/m_sche $
-//
-// Platform C
-//
-
-
-
-#define APPNAME "LMS01"
-
-#define COPYRIGHTSTRING "Let's samba nxt arm in arm, (c)LEGO System A/S"
-
-#define COPYRIGHTSTRINGLENGTH 46 /* Number of bytes checked in COPYRIGHTSTRING */
-
-
-#ifndef _WINDOWS
-
-#define SAM7SXX
-
-#ifdef SAM7SXX
-
- //
- // Platform ATMEL ARM7
- //
- //
-
-#define OSC 48054850L
-#define SYSFREQ 1000
-
-
-#include "../SAM7S256/Include/sam7s256.h"
-
-#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
-
-#define TSTPin AT91C_PIO_PA27
-
-#else
-
-#define TSTPin AT91C_PIO_PA31
-
-#endif
-
-#define TSTInit {\
- *AT91C_PIOA_PER = TSTPin;\
- *AT91C_PIOA_OER = TSTPin;\
- }
-
-#define TSTOn {\
- *AT91C_PIOA_SODR = TSTPin;\
- }
-
-#define TSTOff {\
- *AT91C_PIOA_CODR = TSTPin;\
- }
-
-#define TSTExit {\
- *AT91C_PIOA_ODR = TSTPin;\
- *AT91C_PIOA_CODR = TSTPin;\
- }
-
-/* Defines related to loader */
-#define MAX_HANDLES 16
-
-
-/* Defines related to I2c */
-#define BYTES_TO_TX 8
-#define BYTES_TO_RX 12
-
-enum
-{
- NOS_OF_AVR_OUTPUTS = 4,
- NOS_OF_AVR_BTNS = 4,
- NOS_OF_AVR_INPUTS = 4
-};
-
-typedef struct
-{
- UWORD AdValue[NOS_OF_AVR_INPUTS];
- UWORD Buttons;
- UWORD Battery;
-}IOFROMAVR;
-
-typedef struct
-{
- UBYTE Power;
- UBYTE PwmFreq;
- SBYTE PwmValue[NOS_OF_AVR_OUTPUTS];
- UBYTE OutputMode;
- UBYTE InputPower;
-}IOTOAVR;
-
-extern IOTOAVR IoToAvr;
-extern IOFROMAVR IoFromAvr;
-
-#ifdef INCLUDE_OS
-
-#include "../SAM7S256/Include/sam7s256.c"
-
-IOTOAVR IoToAvr;
-IOFROMAVR IoFromAvr;
-
-#endif
-
-#endif
-
-#else
-
- //
- // Platform PCWIN
- //
- //
-
-#define OSC 1192000L
-#define SYSFREQ 1000
-
-#include "Pcwin.h"
-
-#ifdef INCLUDE_OS
-
-#include "Pcwin.c"
-
-#endif
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/modules.h b/AT91SAM7S256/Source/modules.h
deleted file mode 100644
index a5f3bb1..0000000
--- a/AT91SAM7S256/Source/modules.h
+++ /dev/null
@@ -1,338 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dktochpe $
-//
-// Revision date $Date:: 19-02-08 8:15 $
-//
-// Filename $Workfile:: modules.h $
-//
-// Version $Revision:: 4 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/module $
-//
-// Platform C
-//
-
-#ifndef MODULE_HEADER
-#define MODULE_HEADER
-
-#define FILENAME_LENGTH 19 // zero termination not included
-#define FILEHEADER_LENGTH 8 // all simple file headers
-#define DISPLAYLINE_LENGTH 16 // zero termination not included
-#define ON_BRICK_PROGRAMSTEPS 5 // no of on brick program steps
-#define STATUSTEXT_SIZE 8 // zero termination not included
-
-#define TXT_SOUND_EXT "rso" // Sound filename extension
-#define TXT_LMS_EXT "rxe" // Mindstorms program filename extension
-#define TXT_NXT_EXT "rpg" // Program filename extension
-#define TXT_TRYME_EXT "rtm" // Try me program filename extension
-#define TXT_DATA_EXT "log" // Datalog filename extension
-#define TXT_SYS_EXT "sys" // System filename extension (hidden)
-#define TXT_TMP_EXT "tmp" // Temporary filename extension (hidden)
-
-
-/* Error codes from then Loader */
-enum
-{
- SUCCESS = 0x0000,
- INPROGRESS = 0x0001,
- REQPIN = 0x0002,
- NOMOREHANDLES = 0x8100,
- NOSPACE = 0x8200,
- NOMOREFILES = 0x8300,
- EOFEXSPECTED = 0x8400,
- ENDOFFILE = 0x8500,
- NOTLINEARFILE = 0x8600,
- FILENOTFOUND = 0x8700,
- HANDLEALREADYCLOSED = 0x8800,
- NOLINEARSPACE = 0x8900,
- UNDEFINEDERROR = 0x8A00,
- FILEISBUSY = 0x8B00,
- NOWRITEBUFFERS = 0x8C00,
- APPENDNOTPOSSIBLE = 0x8D00,
- FILEISFULL = 0x8E00,
- FILEEXISTS = 0x8F00,
- MODULENOTFOUND = 0x9000,
- OUTOFBOUNDERY = 0x9100,
- ILLEGALFILENAME = 0x9200,
- ILLEGALHANDLE = 0x9300,
- BTBUSY = 0x9400,
- BTCONNECTFAIL = 0x9500,
- BTTIMEOUT = 0x9600,
- FILETX_TIMEOUT = 0x9700,
- FILETX_DSTEXISTS = 0x9800,
- FILETX_SRCMISSING = 0x9900,
- FILETX_STREAMERROR = 0x9A00,
- FILETX_CLOSEERROR = 0x9B00
-};
-
-
-/* interface between comm and BC4 */
-enum
-{
- MSG_BEGIN_INQUIRY,
- MSG_CANCEL_INQUIRY,
- MSG_CONNECT,
- MSG_OPEN_PORT,
- MSG_LOOKUP_NAME,
- MSG_ADD_DEVICE,
- MSG_REMOVE_DEVICE,
- MSG_DUMP_LIST,
- MSG_CLOSE_CONNECTION,
- MSG_ACCEPT_CONNECTION,
- MSG_PIN_CODE,
- MSG_OPEN_STREAM,
- MSG_START_HEART,
- MSG_HEARTBEAT,
- MSG_INQUIRY_RUNNING,
- MSG_INQUIRY_RESULT,
- MSG_INQUIRY_STOPPED,
- MSG_LOOKUP_NAME_RESULT,
- MSG_LOOKUP_NAME_FAILURE,
- MSG_CONNECT_RESULT,
- MSG_RESET_INDICATION,
- MSG_REQUEST_PIN_CODE,
- MSG_REQUEST_CONNECTION,
- MSG_LIST_RESULT,
- MSG_LIST_ITEM,
- MSG_LIST_DUMP_STOPPED,
- MSG_CLOSE_CONNECTION_RESULT,
- MSG_PORT_OPEN_RESULT,
- MSG_SET_DISCOVERABLE,
- MSG_CLOSE_PORT,
- MSG_CLOSE_PORT_RESULT,
- MSG_PIN_CODE_ACK,
- MSG_DISCOVERABLE_ACK,
- MSG_SET_FRIENDLY_NAME,
- MSG_SET_FRIENDLY_NAME_ACK,
- MSG_GET_LINK_QUALITY,
- MSG_LINK_QUALITY_RESULT,
- MSG_SET_FACTORY_SETTINGS,
- MSG_SET_FACTORY_SETTINGS_ACK,
- MSG_GET_LOCAL_ADDR,
- MSG_GET_LOCAL_ADDR_RESULT,
- MSG_GET_FRIENDLY_NAME,
- MSG_GET_DISCOVERABLE,
- MSG_GET_PORT_OPEN,
- MSG_GET_FRIENDLY_NAME_RESULT,
- MSG_GET_DISCOVERABLE_RESULT,
- MSG_GET_PORT_OPEN_RESULT,
- MSG_GET_VERSION,
- MSG_GET_VERSION_RESULT,
- MSG_GET_BRICK_STATUSBYTE_RESULT,
- MSG_SET_BRICK_STATUSBYTE_RESULT,
- MSG_GET_BRICK_STATUSBYTE,
- MSG_SET_BRICK_STATUSBYTE
-};
-
-#define SIZE_OF_BT_NAME 16
-#define SIZE_OF_BRICK_NAME 8
-#define SIZE_OF_CLASS_OF_DEVICE 4
-#define SIZE_OF_BT_PINCODE 16
-#define SIZE_OF_BDADDR 7
-
-
-enum
-{
- ENTRY_COMM,
- ENTRY_INPUT,
- ENTRY_BUTTON,
- ENTRY_DISPLAY,
- ENTRY_LOADER,
- ENTRY_LOWSPEED,
- ENTRY_OUTPUT,
- ENTRY_SOUND,
- ENTRY_IOCTRL,
- ENTRY_CMD,
- ENTRY_UI,
- ENTRY_FREE2,
- ENTRY_FREE3,
- ENTRY_FREE4,
- ENTRY_FREE5
-};
-
-typedef struct
-{
- ULONG ModuleID;
- UBYTE ModuleName[FILENAME_LENGTH + 1];
- void (*cInit)(void* pHeader);
- void (*cCtrl)(void);
- void (*cExit)(void);
- void *pIOMap;
- void *pVars;
- UWORD IOMapSize;
- UWORD VarsSize;
- UWORD ModuleSize;
-}HEADER;
-
-enum
-{
- FILEFORMAT_SOUND = 0x0100, // rso
- FILEFORMAT_SOUND_COMPRESSED = 0x0101, // rso
- FILEFORMAT_BITMAP = 0x0200,
- FILEFORMAT_FONT = 0x0300,
- FILEFORMAT_ICON = 0x0400,
- FILEFORMAT_TEXT = 0x0500,
- FILEFORMAT_MELODY = 0x0600,
- FILEFORMAT_MENU = 0x0700, // rms
- FILEFORMAT_PROGRAM = 0x0800, // rpg
- FILEFORMAT_DATALOG = 0x0900 // rdt
-};
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DateBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE SampleRateMsb;
- UBYTE SampleRateLsb;
- UBYTE PlayModeMsb;
- UBYTE PlayModeLsb;
- UBYTE Data[];
-}
-SOUND;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DateBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE StartX;
- UBYTE StartY;
- UBYTE PixelsX;
- UBYTE PixelsY;
- UBYTE Data[];
-}
-BMPMAP;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE ItemsX;
- UBYTE ItemsY;
- UBYTE ItemPixelsX;
- UBYTE ItemPixelsY;
- UBYTE Data[];
-}
-FONT;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE ItemsX;
- UBYTE ItemsY;
- UBYTE ItemPixelsX;
- UBYTE ItemPixelsY;
- UBYTE Data[];
-}
-ICON;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE ItemsX;
- UBYTE ItemsY;
- UBYTE ItemCharsX;
- UBYTE ItemCharsY;
- UBYTE Data[];
-}
-TXT;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DateBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE TonesMsb;
- UBYTE TonesLsb;
- UBYTE PlayModeMsb;
- UBYTE PlayModeLsb;
- UBYTE Data[]; // Data[0] = FreqMsb, Data[1] = FreqLsb, Data[2] = DurationMsb, Data[3] = DurationLsb ....
-}
-MELODY;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE Steps;
- UBYTE NotUsed1;
- UBYTE NotUsed2;
- UBYTE NotUsed3;
- UBYTE Data[];
-}
-PROGRAM;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE TotalTime3;
- UBYTE TotalTime2;
- UBYTE TotalTime1;
- UBYTE TotalTime0;
- UBYTE Data[];
-}
-DATALOG;
-
-#define ICON_TEXTLNG 15 // 15 characters
-#define ICON_IMAGESIZE 72 // 24 x 24 pixels
-#define MAX_MENUITEMS 256
-
-typedef struct
-{
- UBYTE ItemId67; // Menu item id
- UBYTE ItemId45; // Menu item id
- UBYTE ItemId23; // Menu item id
- UBYTE ItemId01; // Menu item id
- UBYTE SpecialMask3; // Menu item special mask (TBD)
- UBYTE SpecialMask2; // Menu item special mask (TBD)
- UBYTE SpecialMask1; // Menu item special mask (TBD)
- UBYTE SpecialMask0; // Menu item special mask (TBD)
- UBYTE FunctionIndex; // Menu item enter function call index
- UBYTE FunctionParameter; // Menu item enter function parameter
- UBYTE FileLoadNo; // Menu item enter menu file load no
- UBYTE NextMenu; // Menu item enter next level menu no
- UBYTE IconText[ICON_TEXTLNG + 1]; // Menu item icon text string
- UBYTE IconImageNo; // Menu item icon image number
-}MENUITEM;
-
-typedef struct
-{
- UBYTE FormatMsb;
- UBYTE FormatLsb;
- UBYTE DataBytesMsb;
- UBYTE DataBytesLsb;
- UBYTE ItemSize;
- UBYTE Items;
- UBYTE ItemPixelsX;
- UBYTE ItemPixelsY;
- MENUITEM Data[MAX_MENUITEMS];
-}
-MENU;
-
-typedef UBYTE (*FUNCTION)(UBYTE); // Menu function type
-
-#endif
-
-
-
diff --git a/AT91SAM7S256/Source/stdconst.h b/AT91SAM7S256/Source/stdconst.h
deleted file mode 100644
index 6c08175..0000000
--- a/AT91SAM7S256/Source/stdconst.h
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Programmer
-//
-// Date init 14.12.2004
-//
-// Reviser $Author:: Dkandlun $
-//
-// Revision date $Date:: 14-11-07 12:40 $
-//
-// Filename $Workfile:: stdconst.h $
-//
-// Version $Revision:: 1 $
-//
-// Archive $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/stdcon $
-//
-// Platform C
-//
-
-
-#ifndef STDCONST
-#define STDCONST
-
-#include "config.h"
-
-#ifndef NULL
-#define NULL ((void *)0)
-#endif
-
-#define TRUE 1
-#define FALSE 0
-
-typedef unsigned char UCHAR;
-typedef unsigned short USHORT;
-
-typedef unsigned char UBYTE;
-typedef signed char SBYTE;
-typedef unsigned short int UWORD;
-typedef signed short int SWORD;
-typedef unsigned long ULONG;
-typedef signed long SLONG;
-
-typedef ULONG* PULONG;
-typedef USHORT* PUSHORT;
-typedef UCHAR* PUCHAR;
-typedef char* PSZ;
-
-#define BASETYPES
-
-#ifdef __GNUC__
-#define DEFINE_DATA(type, name) \
- extern const type name ## _; \
- const type * const name = &name ## _; \
- const type name ## _
-#define BEGIN_DATA {
-#define END_DATA }
-#define POINTER_TO_DATA(name) (&name ## _)
-#define SIZEOF_DATA(name) (sizeof_ ## name)
-#else
-#define DEFINE_DATA(type, name) \
- const type name[]
-#define BEGIN_DATA
-#define END_DATA
-#define POINTER_TO_DATA(name) (name)
-#define SIZEOF_DATA(name) (sizeof (name))
-#endif
-
-#ifdef __GNUC__
-#define __ramfunc __attribute__ ((section (".fastrun"), optimize ("no-jump-tables")))
-#define __ramdata __attribute__ ((section (".data")))
-#else
-#define __ramdata
-#endif
-
-#endif