aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256/Source
diff options
context:
space:
mode:
Diffstat (limited to 'AT91SAM7S256/Source')
-rw-r--r--AT91SAM7S256/Source/Functions.inl31
-rw-r--r--AT91SAM7S256/Source/c_cmd.c43
-rw-r--r--AT91SAM7S256/Source/c_comm.c12
-rw-r--r--AT91SAM7S256/Source/c_ui.c21
-rw-r--r--AT91SAM7S256/Source/c_ui.h12
-rw-r--r--AT91SAM7S256/Source/c_ui.iom4
-rw-r--r--AT91SAM7S256/Source/d_output.c74
7 files changed, 139 insertions, 58 deletions
diff --git a/AT91SAM7S256/Source/Functions.inl b/AT91SAM7S256/Source/Functions.inl
index d12ebc0..3b9410b 100644
--- a/AT91SAM7S256/Source/Functions.inl
+++ b/AT91SAM7S256/Source/Functions.inl
@@ -19,11 +19,15 @@
//******* cUiBtTest **********************************************************
const UBYTE NONVOLATILE_NAME[] = UI_NONVOLATILE; // Non volatile filename without extention
+#ifdef INCLUDE_OBP
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
+#endif
+#ifdef INCLUDE_DATALOG
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
+#endif
const UBYTE DEFAULT_PIN_CODE[] = UI_PINCODE_DEFAULT; // Default blue tooth pin code
const UBYTE TXT_INVALID_SENSOR[] = "??????????????"; // Display invalid sensor data
@@ -226,6 +230,8 @@ UBYTE cUiReadLowspeed(UBYTE Port,UBYTE RxBytes,UWORD *Value)
void cUiUpdateSensor(SWORD Time)
{
+#ifdef INCLUDE_DATALOG
+
UBYTE Port;
UBYTE Sensor;
UBYTE Result;
@@ -368,6 +374,7 @@ void cUiUpdateSensor(SWORD Time)
VarsUi.SensorReset = FALSE;
}
+#endif
}
@@ -422,6 +429,7 @@ const UBYTE COLORNAME[COLORNAMES][10] =
void cUiPrintSensorInDisplayBuffer(UBYTE Port)
{
+#ifdef INCLUDE_DATALOG
UBYTE Sensor;
float Value;
SWORD Size;
@@ -451,6 +459,7 @@ void cUiPrintSensorInDisplayBuffer(UBYTE Port)
}
}
}
+#endif
}
@@ -1127,12 +1136,14 @@ UBYTE cUiVolume(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
{
VarsUi.Counter = VarsUi.NVData.VolumeStep + 1;
+#ifdef INCLUDE_OBP
VarsUi.pTmp = (UBYTE*)Cursor;
for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
{
VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
VarsUi.pTmp++;
}
+#endif
Action = MENU_DRAW;
}
break;
@@ -1175,9 +1186,11 @@ UBYTE cUiVolume(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
sprintf((char*)VarsUi.DisplayBuffer,"%u",(UWORD)VarsUi.Counter - 1);
pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;
+#ifdef INCLUDE_OBP
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
VarsUi.CursorTmp[4] = 46;
VarsUi.CursorTmp[5] = 24;
+#endif
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));
@@ -1475,6 +1488,7 @@ void cUiDrawPortNo(UBYTE *Bitmap,UBYTE MenuIconNo,UBYTE PortNo)
UBYTE cUiDataLogging(UBYTE Action)
{
+#ifdef INCLUDE_DATALOGGING
SBYTE TmpBuffer[DATALOGBUFFERSIZE + 1];
switch (Action)
@@ -2006,7 +2020,7 @@ UBYTE cUiDataLogging(UBYTE Action)
break;
}
-
+#endif
return (VarsUi.State);
}
@@ -2067,6 +2081,7 @@ void cUiRunning(UBYTE Action)
UBYTE cUiOnBrickProgramming(UBYTE Action) // On brick programming
{
+#ifdef INCLUDE_OBP
switch (Action)
{
case MENU_INIT : // Show motor / sensor text
@@ -2454,6 +2469,7 @@ UBYTE cUiOnBrickProgramming(UBYTE Action) // On brick programming
pMapDisplay->UpdateMask |= (SPECIAL_BIT(STEPLINE) | SPECIAL_BIT(TOPLINE));
}
+#endif
return (VarsUi.State);
}
@@ -2676,7 +2692,7 @@ UBYTE cUiFileRun(UBYTE Action) // Run selected file
}
}
break;
-
+#ifdef INCLUDE_OBP
case (FILETYPE_NXT * 10 + 0) :// Start Program file (*.prg)
{
VarsUi.TmpHandle = pMapLoader->pFunc(OPENREAD,VarsUi.SelectedFilename,NULL,&VarsUi.TmpLength);
@@ -2740,7 +2756,7 @@ UBYTE cUiFileRun(UBYTE Action) // Run selected file
}
}
break;
-
+#endif
case 99 : // Wait for display show time or user action
{
pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_LARGE);
@@ -2845,11 +2861,13 @@ UBYTE cUiView(UBYTE Action) // MENU_INIT
pMapDisplay->TextLinesCenterFlags |= TEXTLINE_BIT(TEXTLINE_3);
pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3);
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_SMALL);
+#ifdef INCLUDE_DATALOG
// Init ports
for (VarsUi.Tmp = 0;VarsUi.Tmp < DATALOGPORTS;VarsUi.Tmp++)
{
VarsUi.DatalogPort[VarsUi.Tmp] = MENU_SENSOR_EMPTY;
}
+#endif
}
break;
@@ -2862,8 +2880,9 @@ UBYTE cUiView(UBYTE Action) // MENU_INIT
if ((Action >= MENU_PORT_1) && (Action <= MENU_PORT_C))
{
VarsUi.SelectedPort = Action;
-
+#ifdef INCLUDE_DATALOG
VarsUi.DatalogPort[VarsUi.SelectedPort - MENU_PORT_1] = VarsUi.SelectedSensor;
+#endif
IOMapUi.Flags |= UI_BUSY;
pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_LARGE);
@@ -3966,12 +3985,14 @@ UBYTE cUiPowerOffTime(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_E
{
VarsUi.Counter = VarsUi.NVData.PowerdownCode + 1;
+#ifdef INCLUDE_OBP
VarsUi.pTmp = (UBYTE*)Cursor;
for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
{
VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
VarsUi.pTmp++;
}
+#endif
Action = MENU_DRAW;
}
break;
@@ -4013,9 +4034,11 @@ UBYTE cUiPowerOffTime(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_E
}
pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;
+#ifdef INCLUDE_OBP
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)VarsUi.CursorTmp;
VarsUi.CursorTmp[4] = 46;
VarsUi.CursorTmp[5] = 24;
+#endif
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));
diff --git a/AT91SAM7S256/Source/c_cmd.c b/AT91SAM7S256/Source/c_cmd.c
index 674960c..0e79d08 100644
--- a/AT91SAM7S256/Source/c_cmd.c
+++ b/AT91SAM7S256/Source/c_cmd.c
@@ -409,7 +409,12 @@ UBYTE cCmdBTGetDeviceType(UBYTE *pCOD)
return (Result);
}
-UBYTE CMD_RESPONSE_LENGTH[255] =
+void cCmdSetVMState(VM_STATE newState)
+{
+ VarsCmd.VMState = newState;
+}
+
+UBYTE CMD_RESPONSE_LENGTH[256] =
{
3, // DCStartProgram (x00)
3, // DCStopProgram (x01)
@@ -500,7 +505,8 @@ UBYTE CMD_RESPONSE_LENGTH[255] =
0, // SEEKFROMCURRENT = 0xD2,
0, // SEEKFROMEND = 0xD3
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // (xD4-xDF)
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // (xF0-xFF)
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // (xE0-xEF)
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // (xF0-xFF)
};
//cCmdHandleRemoteCommands is the registered handler for "direct" command protocol packets
@@ -1204,7 +1210,7 @@ UWORD cCmdHandleRemoteCommands(UBYTE * pInBuf, UBYTE * pOutBuf, UBYTE * pLen)
// don't change the VM state if the state is currently idle or resetting
if (VarsCmd.VMState > VM_IDLE && VarsCmd.VMState < VM_RESET1)
{
- VarsCmd.VMState = (VM_STATE)pInBuf[1];
+ cCmdSetVMState((VM_STATE)pInBuf[1]);
// setting the VM state turns on debugging
VarsCmd.Debugging = TRUE;
if (VarsCmd.VMState == VM_RESET1)
@@ -1328,7 +1334,12 @@ UWORD cCmdHandleRemoteCommands(UBYTE * pInBuf, UBYTE * pOutBuf, UBYTE * pLen)
//Unhandled reply telegram. Do nothing.
//!!! Could/should stash unhandled/all replies somewhere so a syscall could read them
VarsCmd.LastResponseLength = CMD_RESPONSE_LENGTH[pInBuf[0]];
- memcpy((PSZ)VarsCmd.LastResponseBuffer, (PSZ)(&pInBuf[0]), VarsCmd.LastResponseLength-1);
+ memset((PSZ)VarsCmd.LastResponseBuffer, 0, 64);
+ UBYTE len = VarsCmd.LastResponseLength - 1;
+ if (*pLen < len)
+ len = *pLen;
+ if (VarsCmd.LastResponseLength > 1)
+ memcpy((PSZ)VarsCmd.LastResponseBuffer, (PSZ)(&pInBuf[0]), len);
}
break;
};
@@ -1413,7 +1424,7 @@ void cCmdInit(void* pHeader)
VarsCmd.DirtyComm = FALSE;
VarsCmd.DirtyDisplay = FALSE;
- VarsCmd.VMState = VM_IDLE;
+ cCmdSetVMState(VM_IDLE);
#if defined (ARM_NXT)
//Make sure Pool is long-aligned
@@ -1480,7 +1491,7 @@ void cCmdCtrl(void)
pMapButton->State[BTN1] &= ~(pMapUi->AbortFlag);
//Go to VM_RESET1 state and report abort
- VarsCmd.VMState = VM_RESET1;
+ cCmdSetVMState(VM_RESET1);
IOMapCmd.ProgStatus = PROG_ABORT;
break;
}
@@ -1505,13 +1516,13 @@ void cCmdCtrl(void)
#endif
// automatically switch from RUN_SINGLE to RUN_PAUSE after a single step
if (VarsCmd.VMState == VM_RUN_SINGLE)
- VarsCmd.VMState = VM_RUN_PAUSE;
+ cCmdSetVMState(VM_RUN_PAUSE);
//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;
+ cCmdSetVMState(VM_RESET1);
IOMapCmd.ProgStatus = PROG_OK;
}
}
@@ -1529,13 +1540,13 @@ void cCmdCtrl(void)
else if (IS_ERR(Status)) // mem error is handled in InterpFromClump if possible
{
Continue = FALSE;
- VarsCmd.VMState = VM_RESET1;
+ cCmdSetVMState(VM_RESET1);
IOMapCmd.ProgStatus = Status;
}
else if (Status == STOP_REQ)
{
Continue = FALSE;
- VarsCmd.VMState = VM_RESET1;
+ cCmdSetVMState(VM_RESET1);
IOMapCmd.ProgStatus = PROG_OK;
}
else if (Status == BREAKOUT_REQ)
@@ -1572,12 +1583,12 @@ void cCmdCtrl(void)
if (IS_ERR(Status))
{
IOMapCmd.ProgStatus = Status;
- VarsCmd.VMState = VM_RESET1;
+ cCmdSetVMState(VM_RESET1);
}
//Else start running program
else
{
- VarsCmd.VMState = VM_RUN_FREE;
+ cCmdSetVMState(VM_RUN_FREE);
IOMapCmd.ProgStatus = PROG_RUNNING;
VarsCmd.StartTick = IOMapCmd.Tick;
@@ -1642,7 +1653,7 @@ void cCmdCtrl(void)
//Artificially set CommStatReset to BTBUSY to force at least one SETCMDMODE call (see VM_RESET2 case)
VarsCmd.CommStatReset = (SWORD)BTBUSY;
- VarsCmd.VMState = VM_RESET2;
+ cCmdSetVMState(VM_RESET2);
while (IOMapCmd.Tick == dTimerRead()); // delay until scheduled time
}
break;
@@ -1668,7 +1679,7 @@ void cCmdCtrl(void)
VarsCmd.DirtyComm = FALSE;
//Go to VM_IDLE state
- VarsCmd.VMState = VM_IDLE;
+ cCmdSetVMState(VM_IDLE);
IOMapCmd.ProgStatus = PROG_IDLE;
}
while (IOMapCmd.Tick == dTimerRead()); // delay until scheduled time
@@ -4581,7 +4592,7 @@ NXT_STATUS cCmdInterpFromClump()
if (pBreakpoints[j].Enabled &&
(pBreakpoints[j].Location == (CODE_INDEX)(pClumpRec->PC-pClumpRec->CodeStart)))
{
- VarsCmd.VMState = VM_RUN_PAUSE;
+ cCmdSetVMState(VM_RUN_PAUSE);
return BREAKOUT_REQ;
}
}
@@ -4590,7 +4601,7 @@ NXT_STATUS cCmdInterpFromClump()
((CODE_INDEX)(pClumpRec->PC-pClumpRec->CodeStart) == VarsCmd.PausePC))
{
// pause the VM
- VarsCmd.VMState = VM_RUN_PAUSE;
+ cCmdSetVMState(VM_RUN_PAUSE);
// and turn off the auto pause flags
VarsCmd.PauseClump = NOT_A_CLUMP;
VarsCmd.PausePC = 0xFFFF;
diff --git a/AT91SAM7S256/Source/c_comm.c b/AT91SAM7S256/Source/c_comm.c
index 1878108..5b5292d 100644
--- a/AT91SAM7S256/Source/c_comm.c
+++ b/AT91SAM7S256/Source/c_comm.c
@@ -440,6 +440,7 @@ UWORD cCommInterprete(UBYTE *pInBuf, UBYTE *pOutBuf, UBYTE *pLength, UBYTE C
// in the enhanced firmware all replies (system or direct) go to the RC Handler function
// since it stores the last response in VarsCmd.LastResponseBuffer field
+
// /* 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);
@@ -1532,11 +1533,14 @@ void cCommReceivedHiSpeedData(void)
{
// receiving hi-speed data in NXT mode
/* Copy the bytes into the IOMapBuffer */
- memcpy((IOMapComm.HsInBuf.Buf), (VarsComm.HsModuleInBuf.Buf), NumberOfBytes);
-
+ if (NumberOfBytes > SIZE_OF_HSBUF)
+ NumberOfBytes = SIZE_OF_HSBUF;
+ memcpy((PSZ)IOMapComm.HsInBuf.Buf, (PSZ)VarsComm.HsModuleInBuf.Buf, NumberOfBytes);
+ memset((PSZ)VarsComm.HsModuleInBuf.Buf, 0, 256);
/* Move the inptr ahead */
IOMapComm.HsInBuf.InPtr = NumberOfBytes;
+ IOMapComm.HsInBuf.OutPtr = 0;
/* using the outbuf inptr in order to get the number of bytes in the return answer at the right place*/
IOMapComm.HsOutBuf.InPtr = NumberOfBytes;
@@ -1547,8 +1551,10 @@ void cCommReceivedHiSpeedData(void)
/* if there is a reply to be sent then send it */
if (IOMapComm.HsOutBuf.InPtr)
{
- dHiSpeedSendData(IOMapComm.HsOutBuf.Buf, IOMapComm.HsOutBuf.InPtr);
+ cCommSendHiSpeedData();
+// dHiSpeedSendData(IOMapComm.HsOutBuf.Buf, IOMapComm.HsOutBuf.InPtr);
IOMapComm.HsOutBuf.InPtr = 0;
+ IOMapComm.HsOutBuf.OutPtr = 0;
}
}
}
diff --git a/AT91SAM7S256/Source/c_ui.c b/AT91SAM7S256/Source/c_ui.c
index b47813a..53c1f82 100644
--- a/AT91SAM7S256/Source/c_ui.c
+++ b/AT91SAM7S256/Source/c_ui.c
@@ -59,7 +59,9 @@ const HEADER cUi =
#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
+#ifdef INCLUDE_OBP
#include "Step.txt" // Bitmap used in On Brick Programming
+#endif
#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
@@ -69,6 +71,7 @@ const HEADER cUi =
#include "Info.txt" // Bitmap for feedback
#include "Icons.txt" // Icon collection used for menues
+#ifdef INCLUDE_INTRO
// ****** INTRO ANIMATION RESOURCES ******************************************
#include "RCXintro_1.txt" // Bitmap for picture 1 in the intro animation
@@ -107,6 +110,7 @@ const BMPMAP *Intro[NO_OF_INTROBITMAPS] = // Picture sequence for the intro
(BMPMAP*)RCXintro_15,
(BMPMAP*)RCXintro_16
};
+#endif
// ****** STATUS LINE GRAPHIC RESOURCES **************************************
@@ -1281,7 +1285,9 @@ void cUiCtrl(void)
VarsUi.CRPasskey++;
VarsUi.ButtonTimer++;
+#ifdef INCLUDE_OBP
VarsUi.OBPTimer++;
+#endif
switch (IOMapUi.State)
{
case INIT_DISPLAY : // Load font and icons
@@ -1301,7 +1307,9 @@ void cUiCtrl(void)
pMapDisplay->pFont = (FONT*)Font;
pMapDisplay->pStatusIcons = (ICON*)Status;
pMapDisplay->pStatusText = (UBYTE*)VarsUi.StatusText;
+#ifdef INCLUDE_OBP
pMapDisplay->pStepIcons = (ICON*)Step;
+#endif
VarsUi.State = 0;
VarsUi.Pointer = 0;
@@ -1320,7 +1328,9 @@ void cUiCtrl(void)
IOMapUi.State = INIT_INTRO;
pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_BACKGROUND);
+#ifdef INCLUDE_INTRO
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Intro[VarsUi.Pointer];
+#endif
pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1);
pMapDisplay->Flags |= DISPLAY_ON;
@@ -1336,7 +1346,9 @@ void cUiCtrl(void)
{
VarsUi.LowBattHasOccured = 2;
pMapDisplay->EraseMask = SCREEN_BIT(SCREEN_BACKGROUND);
+#ifdef INCLUDE_INTRO
pMapDisplay->pBitmaps[BITMAP_1] = (BMPMAP*)Intro[VarsUi.Pointer];
+#endif
pMapDisplay->UpdateMask = BITMAP_BIT(BITMAP_1);
IOMapUi.Flags &= ~UI_ENABLE_STATUS_UPDATE;
VarsUi.State = 0;
@@ -1368,6 +1380,7 @@ void cUiCtrl(void)
VarsUi.LowBattHasOccured = 1;
}
}
+#ifdef INCLUDE_INTRO
if (++VarsUi.Timer >= (INTRO_SHIFT_TIME))
{
switch (VarsUi.State)
@@ -1420,10 +1433,14 @@ void cUiCtrl(void)
}
}
+#else
+ pMapDisplay->EraseMask |= SCREEN_BIT(SCREEN_BACKGROUND);
+ IOMapUi.State = INIT_MENU;
+#endif
}
}
break;
-
+#ifdef INCLUDE_INTRO
case INIT_WAIT :
{
if (++VarsUi.Timer >= INTRO_STOP_TIME)
@@ -1433,7 +1450,7 @@ void cUiCtrl(void)
}
}
break;
-
+#endif
case INIT_MENU :
{
// Restart menu system
diff --git a/AT91SAM7S256/Source/c_ui.h b/AT91SAM7S256/Source/c_ui.h
index 08dc1d8..83d5a62 100644
--- a/AT91SAM7S256/Source/c_ui.h
+++ b/AT91SAM7S256/Source/c_ui.h
@@ -19,7 +19,11 @@
#ifndef C_UI
#define C_UI
+#ifdef INCLUDE_DATALOG
#define DATALOGENABLED 1 // 1 == Datalog enable
+#else
+#define DATALOGENABLED 0 // 0 == Datalog disabled
+#endif
#define NO_OF_FEEDBACK_CHARS 12 // Chars left when bitmap also showed
#define SIZE_OF_CURSOR 16 // Bitmap size of cursor (header + 8x8 pixels)
@@ -283,6 +287,7 @@ typedef struct
UBYTE FileRight; // File right
UBYTE NoOfFiles; // No of files
+#ifdef INCLUDE_OBP
// On brick programming menu
UBYTE ProgramSteps[ON_BRICK_PROGRAMSTEPS]; // On brick programming steps
UBYTE ProgramStepPointer; // On brick programming step pointer
@@ -290,7 +295,8 @@ typedef struct
UBYTE FileHeader[FILEHEADER_LENGTH]; // File header for programs
UBYTE *FeedBackText; // Program end text
UWORD OBPTimer; // Graphic update timer
-
+#endif
+
// BT search menu
UBYTE NoOfDevices; // BT search no of devices found
UBYTE NoOfNames; // BT search no of names found
@@ -337,6 +343,7 @@ typedef struct
SLONG ViewSampleValue; // Latch for sensor values
UBYTE ViewSampleValid; // Latch for sensor valid
+#ifdef INCLUDE_DATALOG
// Datalog
ULONG DatalogOldTick;
ULONG DatalogRTC; // Real time in mS
@@ -348,7 +355,8 @@ typedef struct
UWORD DatalogError; // Error code
UBYTE DatalogPort[DATALOGPORTS]; // Logging sensor
UBYTE Update; // Update icons flag
-
+#endif
+
// NV storage
ULONG NVTmpLength; // Non volatile filelength
SWORD NVTmpHandle; // Non volatile filehandle
diff --git a/AT91SAM7S256/Source/c_ui.iom b/AT91SAM7S256/Source/c_ui.iom
index a33505e..6adcbc0 100644
--- a/AT91SAM7S256/Source/c_ui.iom
+++ b/AT91SAM7S256/Source/c_ui.iom
@@ -31,12 +31,16 @@ enum
// Various filenames without extension
#define UI_NONVOLATILE "NVConfig" // Ui non volatile config filename
+#ifdef INCLUDE_OBP
#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
+#endif
+#ifdef INCLUDE_DATALOG
#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
+#endif
#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
diff --git a/AT91SAM7S256/Source/d_output.c b/AT91SAM7S256/Source/d_output.c
index e6de984..73719cc 100644
--- a/AT91SAM7S256/Source/d_output.c
+++ b/AT91SAM7S256/Source/d_output.c
@@ -83,6 +83,25 @@ static SYNCMOTORDATA SyncData;
static UBYTE RegTime;
+UBYTE dOutputRunStateAtLimit(MOTORDATA * pMD)
+{
+// return MOTOR_RUN_STATE_IDLE;
+ return pMD->RunStateAtLimit;
+}
+
+UBYTE dOutputRampDownToLimit(MOTORDATA * pMD)
+{
+// return 0;
+ return pMD->RampDownToLimit;
+}
+
+UBYTE dOutputRegModeAtLimit(MOTORDATA * pMD)
+{
+ if (dOutputRunStateAtLimit(pMD)==MOTOR_RUN_STATE_HOLD)
+ return REGSTATE_REGULATED;
+ return REGSTATE_IDLE;
+}
+
void dOutputInit(void)
{
UBYTE Temp;
@@ -164,7 +183,7 @@ void dOutputCtrl(void)
pMD->MotorTargetSpeed = 0;
pMD->RegulationTimeCount = 0;
pMD->DeltaCaptureCount = 0;
-// pMD->MotorRunState = MOTOR_RUN_STATE_RUNNING;
+ pMD->MotorRunState = MOTOR_RUN_STATE_RUNNING;
}
if (pMD->RegulationTimeCount > RegTime)
{
@@ -484,7 +503,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
{
if (pMD->CurrentCaptureCount > (pMD->MotorRampTachoCountOld + pMD->MotorRampUpIncrement))
{
- pMD->MotorTargetSpeed++;
+ pMD->MotorTargetSpeed += 1;
pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
pMD->MotorRampUpCount = 0;
}
@@ -493,7 +512,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
if (!(pMD->RegulationMode & REGSTATE_REGULATED))
{
pMD->MotorRampUpCount++;
- if (pMD->MotorRampUpCount > RegTime)
+ if (pMD->MotorRampUpCount > 100)
{
pMD->MotorRampUpCount = 0;
pMD->MotorTargetSpeed++;
@@ -505,7 +524,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
{
if (pMD->CurrentCaptureCount < (pMD->MotorRampTachoCountOld + pMD->MotorRampUpIncrement))
{
- pMD->MotorTargetSpeed--;
+ pMD->MotorTargetSpeed -= 1;
pMD->MotorRampTachoCountOld = pMD->CurrentCaptureCount;
pMD->MotorRampUpCount = 0;
}
@@ -514,7 +533,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
if (!(pMD->RegulationMode & REGSTATE_REGULATED))
{
pMD->MotorRampUpCount++;
- if (pMD->MotorRampUpCount > RegTime)
+ if (pMD->MotorRampUpCount > 100)
{
pMD->MotorRampUpCount = 0;
pMD->MotorTargetSpeed--;
@@ -528,7 +547,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
if ((pMD->CurrentCaptureCount - pMD->MotorRampTachoCountStart) >= (pMD->MotorTachoCountToRun - pMD->MotorRampTachoCountStart))
{
pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- pMD->MotorRunState = pMD->RunStateAtLimit;
+ pMD->MotorRunState = dOutputRunStateAtLimit(pMD);
}
}
else
@@ -536,7 +555,7 @@ void dOutputRampUpFunction(UBYTE MotorNr)
if ((pMD->CurrentCaptureCount + pMD->MotorRampTachoCountStart) <= (pMD->MotorTachoCountToRun + pMD->MotorRampTachoCountStart))
{
pMD->MotorTargetSpeed = pMD->MotorSetSpeed;
- pMD->MotorRunState = pMD->RunStateAtLimit;
+ pMD->MotorRunState = dOutputRunStateAtLimit(pMD);
}
}
if (pMD->MotorSetSpeed > 0)
@@ -645,7 +664,7 @@ void dOutputRampDownFunction(UBYTE MotorNr)
if ((pMD->RegulationMode & REGSTATE_SYNCHRONE) && (pMD->TurnParameter != 0))
{
dOutputSyncTachoLimitControl(MotorNr);
- if (pMD->MotorRunState == pMD->RunStateAtLimit)
+ if (pMD->MotorRunState == dOutputRunStateAtLimit(pMD))
{
dOutputMotorReachedTachoLimit(MotorNr);
}
@@ -673,13 +692,6 @@ void dOutputRampDownFunction(UBYTE MotorNr)
}
}
-UBYTE dOutputRegModeAtLimit(UBYTE RunStateAtLimit)
-{
- if (RunStateAtLimit==MOTOR_RUN_STATE_HOLD)
- return REGSTATE_REGULATED;
- return REGSTATE_IDLE;
-}
-
/* Function used to tell whether the wanted position is obtained */
void dOutputTachoLimitControl(UBYTE MotorNr)
{
@@ -692,14 +704,14 @@ void dOutputTachoLimitControl(UBYTE MotorNr)
}
else
{
- if (pMD->RampDownToLimit == 0)
+ if (dOutputRampDownToLimit(pMD) == 0)
{
if (pMD->MotorSetSpeed > 0)
{
if ((pMD->CurrentCaptureCount >= pMD->MotorTachoCountToRun))
{
- pMD->MotorRunState = pMD->RunStateAtLimit;
- pMD->RegulationMode = dOutputRegModeAtLimit(pMD->RunStateAtLimit);
+ pMD->MotorRunState = dOutputRunStateAtLimit(pMD);
+ pMD->RegulationMode = dOutputRegModeAtLimit(pMD);
}
}
else
@@ -708,8 +720,8 @@ void dOutputTachoLimitControl(UBYTE MotorNr)
{
if (pMD->CurrentCaptureCount <= pMD->MotorTachoCountToRun)
{
- pMD->MotorRunState = pMD->RunStateAtLimit;
- pMD->RegulationMode = dOutputRegModeAtLimit(pMD->RunStateAtLimit);
+ pMD->MotorRunState = dOutputRunStateAtLimit(pMD);
+ pMD->RegulationMode = dOutputRegModeAtLimit(pMD);
}
}
}
@@ -930,7 +942,7 @@ void dOutputSyncMotorPosition(UBYTE MotorOne, UBYTE MotorTwo)
if (pOne->TurnParameter != 0)
{
- if ((pOne->MotorBlockTachoCount != 0) || (pTwo->MotorBlockTachoCount != 0))
+ if ((pOne->MotorBlockTachoCount != 0) || (pTwo->MotorBlockTachoCount))
{
if (pOne->MotorTargetSpeed >= 0)
{
@@ -1124,15 +1136,15 @@ void dOutputMotorReachedTachoLimit(UBYTE MotorNr)
pOne->MotorSetSpeed = 0;
pOne->MotorTargetSpeed = 0;
pOne->MotorActualSpeed = 0;
- pOne->MotorRunState = pOne->RunStateAtLimit;
- pOne->RegulationMode = dOutputRegModeAtLimit(pOne->RunStateAtLimit);
+ pOne->MotorRunState = dOutputRunStateAtLimit(pOne);
+ pOne->RegulationMode = dOutputRegModeAtLimit(pOne);
if (MotorTwo != 0xFF) {
MOTORDATA * pTwo = &(MotorData[MotorTwo]);
pTwo->MotorSetSpeed = 0;
pTwo->MotorTargetSpeed = 0;
pTwo->MotorActualSpeed = 0;
- pTwo->MotorRunState = pTwo->RunStateAtLimit;
- pTwo->RegulationMode = dOutputRegModeAtLimit(pTwo->RunStateAtLimit);
+ pTwo->MotorRunState = dOutputRunStateAtLimit(pTwo);
+ pTwo->RegulationMode = dOutputRegModeAtLimit(pTwo);
}
}
else
@@ -1142,8 +1154,8 @@ void dOutputMotorReachedTachoLimit(UBYTE MotorNr)
pOne->MotorTargetSpeed = 0;
pOne->MotorActualSpeed = 0;
}
- pOne->MotorRunState = pOne->RunStateAtLimit;
- pOne->RegulationMode = dOutputRegModeAtLimit(pOne->RunStateAtLimit);
+ pOne->MotorRunState = dOutputRunStateAtLimit(pOne);
+ pOne->RegulationMode = dOutputRegModeAtLimit(pOne);
}
}
@@ -1171,14 +1183,14 @@ void dOutputSyncTachoLimitControl(UBYTE MotorNr)
MOTORDATA * pTwo = &(MotorData[MotorTwo]);
SLONG l1 = pOne->MotorTachoCountToRun;
SLONG l2 = pTwo->MotorTachoCountToRun;
- UBYTE NewRunState1 = pOne->RunStateAtLimit;
- UBYTE NewRunState2 = pTwo->RunStateAtLimit;
- if (pOne->RampDownToLimit == OPTION_RAMPDOWNTOLIMIT)
+ UBYTE NewRunState1 = dOutputRunStateAtLimit(pOne);
+ UBYTE NewRunState2 = dOutputRunStateAtLimit(pTwo);
+ if (dOutputRampDownToLimit(pOne) == OPTION_RAMPDOWNTOLIMIT)
{
NewRunState1 = MOTOR_RUN_STATE_RAMPDOWN;
l1 = (SLONG)((float)l1 * 0.80f);
}
- if (pTwo->RampDownToLimit == OPTION_RAMPDOWNTOLIMIT)
+ if (dOutputRampDownToLimit(pTwo) == OPTION_RAMPDOWNTOLIMIT)
{
NewRunState2 = MOTOR_RUN_STATE_RAMPDOWN;
l2 = (SLONG)((float)l2 * 0.80f);