aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hansen2011-01-27 20:00:43 +0100
committerNicolas Schodet2011-01-27 20:00:43 +0100
commit43549170a241b509cdc00f1c629c9d541ff2588d (patch)
tree2a0244d308d21507826c262db2d0974307b7e591
parentea4e008921f457d8111ed237f25b710817c6b34c (diff)
add output options
Imported from NXT Enhanced Firmware.
-rw-r--r--AT91SAM7S256/Source/c_cmd.c5
-rw-r--r--AT91SAM7S256/Source/c_cmd.h5
-rw-r--r--AT91SAM7S256/Source/c_output.c1
-rw-r--r--AT91SAM7S256/Source/c_output.iom2
4 files changed, 10 insertions, 3 deletions
diff --git a/AT91SAM7S256/Source/c_cmd.c b/AT91SAM7S256/Source/c_cmd.c
index 6f562ca..5370652 100644
--- a/AT91SAM7S256/Source/c_cmd.c
+++ b/AT91SAM7S256/Source/c_cmd.c
@@ -266,6 +266,7 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] =
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
//IO_OUT1
TC_UBYTE, //IO_OUT_FLAGS
@@ -283,6 +284,7 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] =
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
//IO_OUT2
TC_UBYTE, //IO_OUT_FLAGS
@@ -300,6 +302,7 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] =
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
};
@@ -486,6 +489,7 @@ UWORD cCmdHandleRemoteCommands(UBYTE * pInBuf, UBYTE * pOutBuf, UBYTE * pLen)
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;
@@ -1107,6 +1111,7 @@ void cCmdInit(void* pHeader)
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);
}
//Initialize IO_PTRS_IN
diff --git a/AT91SAM7S256/Source/c_cmd.h b/AT91SAM7S256/Source/c_cmd.h
index e9227eb..acd8676 100644
--- a/AT91SAM7S256/Source/c_cmd.h
+++ b/AT91SAM7S256/Source/c_cmd.h
@@ -194,10 +194,11 @@ enum
IO_OUT_REG_I_VAL,
IO_OUT_REG_D_VAL,
IO_OUT_BLOCK_TACH_COUNT,
- IO_OUT_ROTATION_COUNT
+ IO_OUT_ROTATION_COUNT,
+ IO_OUT_OPTIONS,
};
-#define IO_OUT_FPP 15
+#define IO_OUT_FPP 16
#define IO_OUT_FIELD_COUNT (IO_OUT_FPP * NO_OF_OUTPUTS)
//
diff --git a/AT91SAM7S256/Source/c_output.c b/AT91SAM7S256/Source/c_output.c
index e2115a7..4601ff3 100644
--- a/AT91SAM7S256/Source/c_output.c
+++ b/AT91SAM7S256/Source/c_output.c
@@ -55,6 +55,7 @@ void cOutputInit(void* pHeader)
pOut->RegPParameter = DEFAULT_P_GAIN_FACTOR;
pOut->RegIParameter = DEFAULT_I_GAIN_FACTOR;
pOut->RegDParameter = DEFAULT_D_GAIN_FACTOR;
+ pOut->Options = 0x00;
}
VarsOutput.TimeCnt = 0;
dOutputInit();
diff --git a/AT91SAM7S256/Source/c_output.iom b/AT91SAM7S256/Source/c_output.iom
index 80e35de..fc26efd 100644
--- a/AT91SAM7S256/Source/c_output.iom
+++ b/AT91SAM7S256/Source/c_output.iom
@@ -72,7 +72,7 @@ typedef struct
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 SpareOne;
+ UBYTE Options;
UBYTE SpareTwo;
UBYTE SpareThree;
}OUTPUT;