]> rtime.felk.cvut.cz Git - arc.git/blobdiff - communication/Com/Com_misc.c
COM protection
[arc.git] / communication / Com / Com_misc.c
index c433347ddd064c540d6f957d45063a5a940056ee..7e67cead290dbc7580b622c3cdca2276f1813767 100644 (file)
 #include "debug.h"\r
 #include "Cpu.h"\r
 \r
+static void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput);\r
+\r
+static void Com_WriteDataSegment(uint8 *pdu, uint8 *pduSignalMask, const uint8 *signalDataPtr, uint8 destByteLength,\r
+               Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength);\r
 \r
 void Com_ReadSignalDataFromPdu(\r
                        const Com_SignalIdType signalId,\r
@@ -96,6 +101,8 @@ void Com_ReadSignalDataFromPduBuffer(
        uint8 signalDataBytesArray[8];\r
        const uint8 *pduBufferBytes = (const uint8 *)pduBuffer + (bitPosition/8);\r
        Com_BitPositionType startBitOffset = 0;\r
+       imask_t state;\r
+       Irq_Save(state);\r
 \r
        if (signalEndianess == COM_OPAQUE || signalType == UINT8_N) {\r
                // Aligned opaque data -> straight copy\r
@@ -144,6 +151,7 @@ void Com_ReadSignalDataFromPduBuffer(
                        assert(0);\r
                }\r
        }\r
+       Irq_Restore(state);\r
 }\r
 \r
 \r
@@ -218,6 +226,9 @@ void Com_WriteSignalDataToPduBuffer(
 \r
        uint8 signalDataBytesArray[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
        const uint8 *signalDataBytes = (const uint8 *)signalData;\r
+       imask_t irq_state;\r
+\r
+       Irq_Save(irq_state);\r
        if (endian == COM_OPAQUE || signalType == UINT8_N) {\r
                //assert(bitPosition % 8 == 0);\r
                //assert(bitSize % 8 == 0);\r
@@ -253,13 +264,10 @@ void Com_WriteSignalDataToPduBuffer(
                        // Straight copy into real pdu buffer (with mutex)\r
                        uint8 *pduBufferBytes = ((uint8 *)pduBuffer)+(bitPosition/8);\r
                        uint8 i;\r
-                       imask_t irq_state;\r
-                       Irq_Save(irq_state);\r
                        for (i = 0; i < 8; i++) {\r
                                pduBufferBytes[ i ]  &=        ~( pduSignalMask[ i ] );\r
                                pduBufferBytes[ i ]  |=  pduBufferBytesStraight[ i ];\r
                        }\r
-                       Irq_Restore(irq_state);\r
 \r
                } else {\r
                        uint8 startBitOffset = intelBitNrToPduOffset(bitPosition%8, bitSize, 64);\r
@@ -271,16 +279,14 @@ void Com_WriteSignalDataToPduBuffer(
                        // Swapped copy into real pdu buffer (with mutex)\r
                        uint8 *pduBufferBytes = ((uint8 *)pduBuffer)+(bitPosition/8);\r
                        uint8 i;\r
-                       imask_t irq_state;\r
-                       Irq_Save(irq_state);\r
                        // actually it is only necessary to iterate through the bytes that are written.\r
                        for (i = 0; i < 8; i++) {\r
                                pduBufferBytes[ i ]  &=       ~( pduSignalMask[ (8 - 1) - i ] );\r
                                pduBufferBytes[ i ]  |=  pduBufferBytesSwapped[ (8 - 1) - i ];\r
                        }\r
-                       Irq_Restore(irq_state);\r
                }\r
        }\r
+       Irq_Restore(irq_state);\r
 }\r
 \r
 \r
@@ -308,7 +314,7 @@ void Com_WriteSignalDataToPduBuffer(
  *    | -------- | -------A | BCDEFGHI | JKLMNOPQ |\r
  *\r
  */\r
-void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,\r
+static void Com_ReadDataSegment(uint8 *dest, const uint8 *source, uint8 destByteLength,\r
                Com_BitPositionType segmentStartBitOffset, uint8 segmentBitLength, boolean signedOutput) {\r
 \r
        Com_BitPositionType sourceEndBitOffset = segmentStartBitOffset + segmentBitLength - 1;\r