# E2E Verification Plan: E2EPW way ###### tags: `Clarify Issue` `E2E` `Verification Plan` `E2EPW` :::info Note ID: C0103 ::: ## Version | Version | Direction | Result | |:------- |:------------- |:------ | | V1 | CANoe -> SWC | ok | | V2 | CANoe <-> SWC | ok | ## Observation : Sender Behavior (on V2) > Based on E2EPW Write diagram ### E2EPW Write Diagram ```mermaid flowchart TB subgraph direction TB subgraph E2E_P02Protect direction TB Crc_CalculateCRC8H2F -->|twice| Crc_CalculateCRC8H2F end Initialization --> E2EPW_Marshal_SG_ID114 --> E2E_P02Protect --> AssignE2EOutput --> Rte_Write_SG_ID114_SG_ID114 end ``` ### E2EPW config - Target variable: `ConfigVal_SG_ID114_SG_ID114` | Variable | Type | Value | |:---------------------- |:------------------ |:---------------------------------------------------------------- | | DataLength | unsigned short | 0x0040 | | DataIDList | unsigned char [16] | ![](https://i.imgur.com/hHYg46g.png)| | MaxDeltaCounterInit | unsigned char | 0x01 | | MaxNoNewOrRepeatedData | unsigned char | 0x10 | | SyncCounterInit | unsigned char | 0x00 | | Offset | unsigned short | 0 | | | | | ### Marshal function ```cpp= /*Usage*/ E2EPW_Marshal_SG_ID114 (AppData, ppa_SG_ID114_SG_ID114_au8 ); /*Definition*/ FUNC (void, E2EPW_CODE) E2EPW_Marshal_SG_ID113 ( P2CONST (SG_ID113, AUTOMATIC, E2EPW_APPL_DATA) pde , P2VAR (uint8, AUTOMATIC, E2EPW_APPL_VAR) ppa ) { P2CONST (uint8, AUTOMATIC, E2EPW_APPL_DATA) src; /* packing signal Mot_Req_Torque_M */ src = (P2CONST (uint8, AUTOMATIC, E2EPW_APPL_DATA)) &(pde->Mot_Req_Torque_M); ppa[2] = src[0]; ppa[3] = src[1]; ppa[4] = src[2]; ppa[5] = src[3]; /* fill unused areas */ ppa[1] &= 0x0f; ppa[6] = 0x00; ppa[7] = 0x00; } ``` Rewrite by using C ```c= /*Definition with normal c*/ long Req_Torque = 0x0000012C; long* Req_Torque_Ptr = &(Req_Torque); uint8_t* src; uint8_t* ppa; src = (uint8_t*)Req_Torque_Ptr; ppa[0] = 0x00; ppa[2] = src[0]; ppa[3] = src[1]; ppa[4] = src[2]; ppa[5] = src[3]; ppa[1] &= 0x0f; ppa[6] = 0x00; ppa[7] = 0x00; ``` | Parameter | Context | |:------------------------- |:------------------------------------ | | AppData | ![](https://i.imgur.com/fozxycJ.png) | | ppa_SG_ID114_SG_ID114_au8 | ![](https://i.imgur.com/m4FnCHi.png) | ### E2E Protection function ```cpp= E2E_P02Protect( Config_SG_ID114_SG_ID114 , State_SG_ID114_SG_ID114 , ppa_SG_ID114_SG_ID114_au8 ); ``` | Parameter | Context | |:------------------------- |:------------------------------------ | | Config_SG_ID114_SG_ID114 | Shows above | | State_SG_ID114_SG_ID114 | ![](https://i.imgur.com/UIo35MY.png) | | ppa_SG_ID114_SG_ID114_au8 | Shows above | ### E2E CRC Function ```cpp= /* #40 Compute CRC */ ComputedCRC = E2E_P02ComputeCRC ( DataPtr /* SBSW_E2E_03 */ , ConfigPtr->DataLength >> 3u , CRCOffset , ConfigPtr->DataIDList [StatePtr->Counter] ); /* #50 Write computed CRC to position in DataPtr, CRCOffset is pointing to */ DataPtr[CRCOffset] = ComputedCRC; /* SBSW_E2E_03 */ ``` | Parameter | Context | |:----------------------------------------- |:---------------------------------- | | DataPtr | Same as Config_SG_ID114_SG_ID114 | | ConfigPtr->DataLength >> 3u | `0x0040 >> 3u` | | CRCOffset | `ConfigPtr->Offset (0x0000) >> 3u` | | ConfigPtr->DataIDList [StatePtr->Counter] | Depends on the counter | ### E2E output - Checksum: `AppData->ID114_No_Cs_M` - Counter: `AppData->ID114_No_Cnt_M` - Assignment: ```cpp= uint16 offset_u16 = Config_SG_ID114_SG_ID114->Offset >> 3u; AppData->ID114_No_Cs_M = ppa_SG_ID114_SG_ID114_au8[offset_u16 + 0]; /*0xFA*/ AppData->ID114_No_Cnt_M = (ppa_SG_ID114_SG_ID114_au8[offset_u16+ 1u] & 0x0F); /*0x01*/ ``` ### Conclusion (An Example) ++Initialization++ - AppData - (*(AppData)).ID114_No_Cs_M : 0x00 - (*(AppData)).ID114_No_Cnt_M : 0x00 - (*(AppData)).Mot_Trq_Est_M : 0x0000012C - ConfigVal_SG_ID114_SG_ID114 - (ConfigVal_SG_ID114_SG_ID114).DataLength : 0x0040 - (ConfigVal_SG_ID114_SG_ID114).DataIDList : - [0] : 0x03 - [1] : 0x04 - [2] : 0x13 - [3] : 0xFF - [4] : 0x0B - [5] : 0x0C - [6] : 0x02 - [7] : 0xAC - [8] : 0x08 - [9] : 0x05 - [10] : 0x09 - [11] : 0x07 - [12] : 0x0A - [13] : 0x0F - [14] : 0x0D - [15] : 0xAB ` - State_SG_ID114_SG_ID114 - (*(State_SG_ID114_SG_ID114)).Counter : 0x00 - ppa_SG_ID114_SG_ID114_au8 - All 0x00 ++After Marshal++ - ppa_SG_ID114_SG_ID114_au8 - ![](https://i.imgur.com/9h6506L.png) ++After E2E_P02ComputeCRC++ - State_SG_ID114_SG_ID114 - (*(State_SG_ID114_SG_ID114)).Counter : 0x01 - ppa_SG_ID114_SG_ID114_au8 - [0] : 0xFA - [1] : 0x01 - [2] : 0x2C - [3] : 0x01 - [4] : 0x00 - [5] : 0x00 - [6] : 0x00 - [7] : 0x00 ++Output++ - AppData - (*(AppData)).ID114_No_Cs_M : 0xFA - (*(AppData)).ID114_No_Cnt_M : 0x01 - (*(AppData)).Mot_Trq_Est_M : 0x0000012C