]> rtime.felk.cvut.cz Git - arc.git/commitdiff
fixes for com bit position > 63, see Ticket #1058
authornier <devnull@localhost>
Thu, 27 Oct 2011 09:08:20 +0000 (11:08 +0200)
committernier <devnull@localhost>
Thu, 27 Oct 2011 09:08:20 +0000 (11:08 +0200)
communication/Com/Com_Com.c
communication/Com/Com_misc.c
communication/Com/Com_misc.h

index 3773a626ab502e6ec0dc10413bc27822cea0e865..a653a6031b42b1311569c739e1675a3ae30811c7 100644 (file)
@@ -280,9 +280,10 @@ void Com_UpdateShadowSignal(Com_SignalIdType SignalId, const void *SignalDataPtr
 \r
 void Com_ReceiveShadowSignal(Com_SignalIdType SignalId, void *SignalDataPtr) {\r
        Com_Arc_GroupSignal_type *Arc_GroupSignal = GET_ArcGroupSignal(SignalId);\r
+       uint8 pduSize = GET_IPdu(GET_ArcSignal(SignalId)->ComIPduHandleId)->ComIPduSize;\r
        // TODO: CopyData\r
        // Com_CopyData(SignalDataPtr, Arc_GroupSignal->Com_Arc_ShadowBuffer, GroupSignal->ComBitSize, 0, GroupSignal->ComBitPosition);\r
-       Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
+       Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer,pduSize);\r
 }\r
 \r
 \r
index 9ddae60589ee987b17e81d4acff943900e38a47f..e207b44ba405143d55b1822c72ca6b612429e69e 100644 (file)
@@ -35,13 +35,14 @@ void Com_ReadSignalDataFromPdu(
        const ComSignal_type * Signal = GET_Signal(signalId);\r
        Com_Arc_Signal_type * Arc_Signal = GET_ArcSignal(Signal->ComHandleId);\r
        Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
-\r
+       uint8 pduSize = GET_IPdu(Arc_Signal->ComIPduHandleId)->ComIPduSize;\r
        // Get data\r
        Com_ReadSignalDataFromPduBuffer(\r
                        signalId,\r
                        FALSE,\r
                        signalData,\r
-                       Arc_IPdu->ComIPduDataPtr);\r
+                       Arc_IPdu->ComIPduDataPtr,\r
+                       pduSize);\r
 }\r
 \r
 void Com_ReadGroupSignalDataFromPdu(\r
@@ -53,25 +54,27 @@ void Com_ReadGroupSignalDataFromPdu(
        const ComSignal_type * Signal = GET_Signal(parentSignalId);\r
        Com_Arc_Signal_type * Arc_Signal = GET_ArcSignal(Signal->ComHandleId);\r
        Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
-\r
+       uint8 pduSize = GET_IPdu(Arc_Signal->ComIPduHandleId)->ComIPduSize;\r
        // Get data\r
        Com_ReadSignalDataFromPduBuffer(\r
                        groupSignalId,\r
                        TRUE,\r
                        signalData,\r
-                       Arc_IPdu->ComIPduDataPtr);\r
+                       Arc_IPdu->ComIPduDataPtr,\r
+                       pduSize);\r
 }\r
 \r
 void Com_ReadSignalDataFromPduBuffer(\r
                const uint16 signalId,\r
                const boolean isGroupSignal,\r
                void *signalData,\r
-               const void *pduBuffer) {\r
+               const void *pduBuffer,\r
+               uint8 pduSize) {\r
 \r
        Com_SignalType signalType;\r
        ComSignalEndianess_type signalEndianess;\r
        uint8 signalLength;\r
-       uint8 bitPosition;\r
+       Com_BitPositionType bitPosition;\r
        uint8 bitSize;\r
 \r
        if (!isGroupSignal) {\r
@@ -96,16 +99,16 @@ void Com_ReadSignalDataFromPduBuffer(
        uint8 *signalDataBytes = (uint8 *)signalData;\r
        uint8 signalDataBytesArray[8];\r
        const uint8 *pduBufferBytes = (const uint8 *)pduBuffer;\r
-       uint8 startBitOffset = 0;\r
+       Com_BitPositionType startBitOffset = 0;\r
 \r
        if (signalEndianess == COM_LITTLE_ENDIAN) {\r
                // Swap source bytes before reading\r
                // TODO: Must adapt to larger PDUs!\r
-               uint8 pduBufferBytes_swap[8];\r
-               for (uint8 i = 0; i < 8; ++i) {\r
-                       pduBufferBytes_swap[i] = pduBufferBytes[7 - i];\r
+               uint8 pduBufferBytes_swap[pduSize];\r
+               for (uint8 i = 0; i < pduSize; ++i) {\r
+                       pduBufferBytes_swap[i] = pduBufferBytes[(pduSize-1) - i];\r
                }\r
-               startBitOffset = intelBitNrToPduOffset(bitPosition, bitSize, 64);\r
+               startBitOffset = intelBitNrToPduOffset(bitPosition, bitSize, pduSize*8);\r
                //lint -save -esym(960,12.5) PC-Lint Exception: OK. PC-Lint Wrong interpretation of MISRA rule 12.5.\r
                Com_ReadDataSegment(\r
                                signalDataBytesArray, pduBufferBytes_swap, destSize,\r
@@ -191,7 +194,7 @@ void Com_WriteSignalDataToPduBuffer(
 \r
        Com_SignalType signalType;\r
        uint8 signalLength;\r
-       uint8 bitPosition;\r
+       Com_BitPositionType bitPosition;\r
        uint8 bitSize;\r
        ComSignalEndianess_type endian;\r
 \r
@@ -212,7 +215,10 @@ void Com_WriteSignalDataToPduBuffer(
        }\r
 \r
        uint8 signalBufferSize = SignalTypeToSize(signalType, signalLength);\r
-       uint8 pduSignalMask[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+       uint8 pduSignalMask[pduSize];\r
+       for (uint8 i = 0; i < pduSize; i++) {\r
+               pduSignalMask[i] = 0x00;\r
+       }\r
 \r
        uint8 signalDataBytesArray[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
        const uint8 *signalDataBytes = (const uint8 *)signalData;\r
@@ -236,15 +242,17 @@ void Com_WriteSignalDataToPduBuffer(
 \r
        if (endian == COM_BIG_ENDIAN) {\r
                uint8 *pduBufferBytes = (uint8 *)pduBuffer;\r
-               uint8 startBitOffset = motorolaBitNrToPduOffset(bitPosition);\r
+               Com_BitPositionType startBitOffset = motorolaBitNrToPduOffset(bitPosition);\r
 \r
                Com_WriteDataSegment(pduBufferBytes, pduSignalMask,\r
                                signalDataBytesArray, signalBufferSize, startBitOffset, bitSize);\r
 \r
        } else {\r
-               uint8 startBitOffset = intelBitNrToPduOffset(bitPosition, bitSize, (uint8)(pduSize * 8));\r
-               uint8 pduBufferBytesSwapped[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
-\r
+               Com_BitPositionType startBitOffset = intelBitNrToPduOffset(bitPosition, bitSize, (Com_BitPositionType)(pduSize * 8));\r
+               uint8 pduBufferBytesSwapped[pduSize];\r
+               for (uint8 i = 0; i < pduSize; i++) {\r
+                       pduBufferBytesSwapped[i] = 0x00;\r
+               }\r
                Com_WriteDataSegment(pduBufferBytesSwapped, pduSignalMask,\r
                                signalDataBytesArray, signalBufferSize, startBitOffset, bitSize);\r
 \r
@@ -283,10 +291,10 @@ void Com_WriteSignalDataToPduBuffer(
  *\r
  */\r
 void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,\r
-               uint8 segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput) {\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput) {\r
 \r
-       uint8 sourceEndBitOffset = segmentStartBitOffset + segmentBitLength - 1;\r
-       uint8 sourceStartByte = segmentStartBitOffset / 8;\r
+       Com_BitPositionType sourceEndBitOffset = segmentStartBitOffset + segmentBitLength - 1;\r
+       Com_BitPositionType sourceStartByte = segmentStartBitOffset / 8;\r
        uint8 sourceEndByte = (sourceEndBitOffset) / 8;\r
        uint8 sourceByteLength = sourceEndByte - sourceStartByte;\r
 \r
@@ -374,8 +382,8 @@ void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,
  * signal is located in the <pdu>.\r
  */\r
 void Com_WriteDataSegment(uint8 *pdu, uint8 *pduSignalMask, const uint8 *signalDataPtr, uint8 destByteLength,\r
-               uint8 segmentStartBitOffset, uint8 segmentBitLength) {\r
-       uint8 pduEndBitOffset = segmentStartBitOffset + segmentBitLength - 1;\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength) {\r
+       Com_BitPositionType pduEndBitOffset = segmentStartBitOffset + segmentBitLength - 1;\r
        uint8 pduStartByte = segmentStartBitOffset / 8;\r
        uint8 pduEndByte = (pduEndBitOffset) / 8;\r
        uint8 pduByteLength = pduEndByte - pduStartByte;\r
@@ -445,11 +453,11 @@ void Com_WriteDataSegment(uint8 *pdu, uint8 *pduSignalMask, const uint8 *signalD
  *             motorolaBitNr:  7  6  5  4  3  2  1  0 15 14 13 12 ...\r
  *  motorolaBitNrToPduOffset:  0  1  2  3  4  5  6  7  8  9 10 11 ...\r
  */\r
-uint8 motorolaBitNrToPduOffset (uint8 motorolaBitNr) {\r
+Com_BitPositionType motorolaBitNrToPduOffset (Com_BitPositionType motorolaBitNr) {\r
        uint8 byte = motorolaBitNr / 8;\r
-       uint8 offsetToByteStart = (uint8) (byte * 8u);\r
-       uint8 offsetInsideByte = motorolaBitNr % 8;\r
-       return (uint8) (offsetToByteStart + (7u - offsetInsideByte));\r
+       Com_BitPositionType offsetToByteStart = (Com_BitPositionType) (byte * 8u);\r
+       Com_BitPositionType offsetInsideByte = motorolaBitNr % 8;\r
+       return (Com_BitPositionType) (offsetToByteStart + (7u - offsetInsideByte));\r
 }\r
 \r
 /*\r
@@ -459,7 +467,7 @@ uint8 motorolaBitNrToPduOffset (uint8 motorolaBitNr) {
  *  intelBitNr (after PDU byte-swap): 39 38 37 36 35 34 33 32 31 ...  3  2  1  0\r
  *             intelBitNrToPduOffset:  0  1  2  3  4  5  6  7  8 ... 36 37 38 39\r
  */\r
-uint8 intelBitNrToPduOffset (uint8 intelBitNr, uint8 segmentBitLength, uint8 pduBitLength) {\r
+Com_BitPositionType intelBitNrToPduOffset (Com_BitPositionType intelBitNr, Com_BitPositionType segmentBitLength, Com_BitPositionType pduBitLength) {\r
        return pduBitLength - (intelBitNr + segmentBitLength);\r
 }\r
 \r
index 1ed36c90aa46f0e8c8ac8dd61851fd8ec8ebb95c..1d9e8e600bbfca602c5d67cefce40356fe3c61f4 100644 (file)
@@ -40,7 +40,8 @@ void Com_ReadSignalDataFromPduBuffer(
                const uint16 signalId,\r
                const boolean isGroupSignal,\r
                void *signalData,\r
-               const void *pduBuffer);\r
+               const void *pduBuffer,\r
+               uint8 pduSize);\r
 \r
 // write data to PDU\r
 void Com_WriteSignalDataToPdu(\r
@@ -70,13 +71,13 @@ void Com_WriteSignalDataToPduBuffer(
 //void Com_CopyData2(char *dest, const char *source, uint8 destByteLength, uint8 segmentStartBitOffset, uint8 segmentBitLength);\r
 \r
 void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,\r
-               uint8 segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput);\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput);\r
 \r
 void Com_WriteDataSegment(uint8 *pdu, uint8 *pduSignalMask, const uint8 *signalDataPtr, uint8 destByteLength,\r
-               uint8 segmentStartBitOffset, uint8 segmentBitLength);\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength);\r
 \r
-uint8 motorolaBitNrToPduOffset (uint8 motorolaBitNr);\r
-uint8 intelBitNrToPduOffset (uint8 intelBitNr, uint8 segmentBitLength, uint8 pduBitLength);\r
+Com_BitPositionType motorolaBitNrToPduOffset (Com_BitPositionType motorolaBitNr);\r
+Com_BitPositionType intelBitNrToPduOffset (Com_BitPositionType intelBitNr, Com_BitPositionType segmentBitLength, Com_BitPositionType pduBitLength);\r
 void Com_RxProcessSignals(const ComIPdu_type *IPdu,Com_Arc_IPdu_type *Arc_IPdu);\r
 PduIdType getPduId(const ComIPdu_type* IPdu);\r
 \r