From c3ff51060cc0e769327f5b6be60526a258bebf27 Mon Sep 17 00:00:00 2001 From: John Hansen Date: Wed, 3 Nov 2010 13:03:21 +0000 Subject: motor control and rs485 changes git-svn-id: https://mindboards.svn.sourceforge.net/svnroot/mindboards/lms_nbcnxc/branches/version_131@28 c9361245-7fe8-9947-84e8-057757c4e366 --- AT91SAM7S256/Source/Functions.inl | 31 +++++++++++++--- AT91SAM7S256/Source/c_cmd.c | 43 ++++++++++++++--------- AT91SAM7S256/Source/c_comm.c | 12 +++++-- AT91SAM7S256/Source/c_ui.c | 21 +++++++++-- AT91SAM7S256/Source/c_ui.h | 12 +++++-- AT91SAM7S256/Source/c_ui.iom | 4 +++ AT91SAM7S256/Source/d_output.c | 74 +++++++++++++++++++++++---------------- 7 files changed, 139 insertions(+), 58 deletions(-) (limited to 'AT91SAM7S256/Source') 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); -- cgit v1.2.3