]> rtime.felk.cvut.cz Git - arc.git/blobdiff - communication/Com/Com_Com.c
COM protection
[arc.git] / communication / Com / Com_Com.c
index 467383bcd0b4b9009425f2040a2fc05f6e7d8af6..463a0120ee0d597cdccdb6c542210e9864db5e54 100644 (file)
@@ -46,8 +46,9 @@ uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {
        }\r
        //DEBUG(DEBUG_LOW, "Com_SendSignal: id %d, nBytes %d, BitPosition %d, intVal %d\n", SignalId, nBytes, signal->ComBitPosition, (uint32)*(uint8 *)SignalDataPtr);\r
 \r
-       // TODO: CopyData\r
-       // Com_CopyData(IPdu->ComIPduDataPtr, dataPtr, Signal->ComBitSize, Signal->ComBitPosition, 0);\r
+       imask_t irq_state;\r
+\r
+       Irq_Save(irq_state);\r
        Com_WriteSignalDataToPdu(Signal->ComHandleId, SignalDataPtr);\r
 \r
        // If the signal has an update bit. Set it!\r
@@ -61,6 +62,8 @@ uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {
        if (Signal->ComTransferProperty == TRIGGERED) {\r
                Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduNumberOfRepetitionsLeft = IPdu->ComTxIPdu.ComTxModeTrue.ComTxModeNumberOfRepetitions + 1;\r
        }\r
+       Irq_Restore(irq_state);\r
+\r
        return E_OK;\r
 }\r
 \r
@@ -74,12 +77,8 @@ uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {
                return COM_BUSY;\r
        }\r
 \r
-       // Com_CopyFromSignal(&ComConfig->ComSignal[SignalId], SignalDataPtr);\r
        Com_ReadSignalDataFromPdu(SignalId, SignalDataPtr);\r
 \r
-       //uint16 val = *(uint16 *)SignalDataPtr;\r
-       //val = bswap16(val);\r
-       // Sign extend!\r
        return E_OK;\r
 }\r
 \r
@@ -87,17 +86,23 @@ uint8 Com_ReceiveDynSignal(Com_SignalIdType SignalId, void* SignalDataPtr, uint1
        const ComSignal_type * Signal = GET_Signal(SignalId);\r
        Com_Arc_IPdu_type    *Arc_IPdu   = GET_ArcIPdu(Signal->ComIPduHandleId);\r
        const ComIPdu_type   *IPdu       = GET_IPdu(Signal->ComIPduHandleId);\r
+    imask_t state;\r
 \r
        Com_SignalType signalType = Signal->ComSignalType;\r
        if (signalType != UINT8_DYN || isPduBufferLocked(getPduId(IPdu))) {\r
                return COM_SERVICE_NOT_AVAILABLE;\r
        }\r
 \r
+    Irq_Save(state);\r
+\r
        if (*Length > Arc_IPdu->Com_Arc_DynSignalLength) {\r
                *Length = Arc_IPdu->Com_Arc_DynSignalLength;\r
        }\r
        uint8 startFromPduByte = (Signal->ComBitPosition) / 8;\r
        memcpy(SignalDataPtr, IPdu->ComIPduDataPtr + startFromPduByte, *Length);\r
+\r
+    Irq_Restore(state);\r
+\r
        return E_OK;\r
 }\r
 \r
@@ -105,6 +110,7 @@ uint8 Com_SendDynSignal(Com_SignalIdType SignalId, const void* SignalDataPtr, ui
        const ComSignal_type * Signal = GET_Signal(SignalId);\r
        Com_Arc_IPdu_type    *Arc_IPdu   = GET_ArcIPdu(Signal->ComIPduHandleId);\r
        const ComIPdu_type   *IPdu       = GET_IPdu(Signal->ComIPduHandleId);\r
+    imask_t state;\r
 \r
        Com_SignalType signalType = Signal->ComSignalType;\r
        if (signalType != UINT8_DYN) {\r
@@ -119,6 +125,8 @@ uint8 Com_SendDynSignal(Com_SignalIdType SignalId, const void* SignalDataPtr, ui
                return E_NOT_OK;\r
        }\r
        uint8 startFromPduByte = bitPosition / 8;\r
+\r
+       Irq_Save(state);\r
        memcpy((void *)(IPdu->ComIPduDataPtr + startFromPduByte), SignalDataPtr, Length);\r
        Arc_IPdu->Com_Arc_DynSignalLength = Length;\r
        // If the signal has an update bit. Set it!\r
@@ -129,7 +137,9 @@ uint8 Com_SendDynSignal(Com_SignalIdType SignalId, const void* SignalDataPtr, ui
        if (Signal->ComTransferProperty == TRIGGERED) {\r
                Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduNumberOfRepetitionsLeft = IPdu->ComTxIPdu.ComTxModeTrue.ComTxModeNumberOfRepetitions + 1;\r
        }\r
-       return E_OK;\r
+    Irq_Restore(state);\r
+\r
+    return E_OK;\r
 }\r
 \r
 Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, PduInfoType *PduInfoPtr) {\r
@@ -144,7 +154,13 @@ Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, PduInfoType *PduInfoPtr
         */\r
        const ComIPdu_type *IPdu = GET_IPdu(ComTxPduId);\r
 \r
-       memcpy(PduInfoPtr->SduDataPtr, IPdu->ComIPduDataPtr, IPdu->ComIPduSize);\r
+    imask_t state;\r
+    Irq_Save(state);\r
+\r
+    memcpy(PduInfoPtr->SduDataPtr, IPdu->ComIPduDataPtr, IPdu->ComIPduSize);\r
+\r
+    Irq_Restore(state);\r
+\r
        PduInfoPtr->SduLength = IPdu->ComIPduSize;\r
        return E_OK;\r
 }\r
@@ -156,14 +172,13 @@ void Com_TriggerIPduSend(PduIdType ComTxPduId) {
 \r
        const ComIPdu_type *IPdu = GET_IPdu(ComTxPduId);\r
        Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(ComTxPduId);\r
+    imask_t state;\r
+    Irq_Save(state);\r
 \r
        // Is the IPdu ready for transmission?\r
        if (Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduMinimumDelayTimer == 0) {\r
 \r
-        imask_t state;\r
-\r
         //lint --e(725)        Suppress PC-Lint warning "Expected positive indentation...". What means?\r
-        Irq_Save(state);\r
                // Check callout status\r
                if (IPdu->ComIPduCallout != NULL) {\r
                        if (!IPdu->ComIPduCallout(ComTxPduId, IPdu->ComIPduDataPtr)) {\r
@@ -193,14 +208,13 @@ void Com_TriggerIPduSend(PduIdType ComTxPduId) {
                } else {\r
                        UnlockTpBuffer(getPduId(IPdu));\r
                }\r
-           Irq_Restore(state);\r
 \r
                // Reset miminum delay timer.\r
                Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduMinimumDelayTimer = IPdu->ComTxIPdu.ComTxIPduMinimumDelayFactor;\r
-\r
        } else {\r
                //DEBUG(DEBUG_MEDIUM, "failed (MDT)!\n", ComTxPduId);\r
        }\r
+    Irq_Restore(state);\r
 }\r
 \r
 //lint -esym(904, Com_RxIndication) //PC-Lint Exception of rule 14.7\r
@@ -209,9 +223,12 @@ void Com_RxIndication(PduIdType ComRxPduId, const PduInfoType* PduInfoPtr) {
 \r
        const ComIPdu_type *IPdu = GET_IPdu(ComRxPduId);\r
        Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(ComRxPduId);\r
+       imask_t state;\r
+       Irq_Save(state);\r
 \r
        // If Ipdu is stopped\r
        if (!Arc_IPdu->Com_Arc_IpduStarted) {\r
+               Irq_Restore(state);\r
                return;\r
        }\r
 \r
@@ -220,6 +237,7 @@ void Com_RxIndication(PduIdType ComRxPduId, const PduInfoType* PduInfoPtr) {
                if (!IPdu->ComIPduCallout(ComRxPduId, PduInfoPtr->SduDataPtr)) {\r
                        // TODO Report error to DET.\r
                        // Det_ReportError();\r
+                       Irq_Restore(state);\r
                        return;\r
                }\r
        }\r
@@ -229,6 +247,8 @@ void Com_RxIndication(PduIdType ComRxPduId, const PduInfoType* PduInfoPtr) {
 \r
        Com_RxProcessSignals(IPdu,Arc_IPdu);\r
 \r
+       Irq_Restore(state);\r
+\r
        return;\r
 }\r
 \r
@@ -237,24 +257,30 @@ void Com_TpRxIndication(PduIdType PduId, NotifResultType Result) {
 \r
        const ComIPdu_type *IPdu = GET_IPdu(PduId);\r
        Com_Arc_IPdu_type *Arc_IPdu = GET_ArcIPdu(PduId);\r
+       imask_t state;\r
+\r
+       Irq_Save(state);\r
 \r
        // If Ipdu is stopped\r
        if (!Arc_IPdu->Com_Arc_IpduStarted) {\r
+               Irq_Restore(state);\r
                return;\r
        }\r
+\r
        // unlock buffer\r
-       imask_t state;\r
-       Irq_Save(state);\r
        UnlockTpBuffer(getPduId(IPdu));\r
-       Irq_Restore(state);\r
 \r
        if (Result == NTFRSLT_OK) {\r
                Com_RxProcessSignals(IPdu,Arc_IPdu);\r
        }\r
+\r
+       Irq_Restore(state);\r
 }\r
+\r
 void Com_TpTxConfirmation(PduIdType PduId, NotifResultType Result) {\r
        PDU_ID_CHECK(PduId, 0x15);\r
        const ComIPdu_type *IPdu = GET_IPdu(PduId);\r
+       (void)Result; // touch\r
 \r
        imask_t state;\r
        Irq_Save(state);\r
@@ -280,10 +306,12 @@ Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {
 \r
        // Copy shadow buffer to Ipdu data space\r
        const ComGroupSignal_type *groupSignal;\r
+       imask_t irq_state;\r
+\r
+       Irq_Save(irq_state);\r
        for (uint8 i = 0; Signal->ComGroupSignal[i] != NULL; i++) {\r
                groupSignal = Signal->ComGroupSignal[i];\r
-               // TODO CopyData\r
-               // Com_CopyData(IPdu->ComIPduDataPtr, Arc_Signal->Com_Arc_ShadowBuffer,  groupSignal->ComBitSize, groupSignal->ComBitPosition, groupSignal->ComBitPosition);\r
+\r
                Com_WriteGroupSignalDataToPdu(Signal->ComHandleId, groupSignal->ComHandleId, Signal->Com_Arc_ShadowBuffer);\r
        }\r
 \r
@@ -292,12 +320,11 @@ Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {
                SETBIT(IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
        }\r
 \r
-       /*\r
-        * If signal has triggered transmit property, trigger a transmission!\r
-        */\r
+       // If signal has triggered transmit property, trigger a transmission!\r
        if (Signal->ComTransferProperty == TRIGGERED) {\r
                Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduNumberOfRepetitionsLeft = IPdu->ComTxIPdu.ComTxModeTrue.ComTxModeNumberOfRepetitions + 1;\r
        }\r
+       Irq_Restore(irq_state);\r
 \r
        return E_OK;\r
 }\r
@@ -313,13 +340,15 @@ Std_ReturnType Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId) {
        }\r
        // Copy Ipdu data buffer to shadow buffer.\r
        const ComGroupSignal_type *groupSignal;\r
+       imask_t irq_state;\r
+\r
+       Irq_Save(irq_state);\r
        for (uint8 i = 0; Signal->ComGroupSignal[i] != NULL; i++) {\r
                groupSignal = Signal->ComGroupSignal[i];\r
-               // TODO: CopyData\r
-               // Com_CopyData(Arc_Signal->Com_Arc_ShadowBuffer, IPdu->ComIPduDataPtr, groupSignal->ComBitSize, groupSignal->ComBitPosition, groupSignal->ComBitPosition);\r
+\r
                Com_ReadSignalDataFromPdu(groupSignal->ComHandleId, (void *)Signal->Com_Arc_ShadowBuffer);\r
        }\r
-\r
+       Irq_Restore(irq_state);\r
 \r
        return E_OK;\r
 }\r
@@ -327,16 +356,13 @@ Std_ReturnType Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId) {
 void Com_UpdateShadowSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
        Com_Arc_GroupSignal_type *Arc_GroupSignal = GET_ArcGroupSignal(SignalId);\r
 \r
-       // TODO: CopyData\r
-       // Com_CopyData(Arc_GroupSignal->Com_Arc_ShadowBuffer, SignalDataPtr, GroupSignal->ComBitSize, GroupSignal->ComBitPosition, 0);\r
        Com_WriteSignalDataToPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer, 8);\r
 }\r
 \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_Signal(SignalId)->ComIPduHandleId)->ComIPduSize;\r
-       // TODO: CopyData\r
-       // Com_CopyData(SignalDataPtr, Arc_GroupSignal->Com_Arc_ShadowBuffer, GroupSignal->ComBitSize, 0, GroupSignal->ComBitPosition);\r
+\r
        Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer,pduSize);\r
 }\r
 \r