# 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] | |
| 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 |  |
| ppa_SG_ID114_SG_ID114_au8 |  |
### 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 |  |
| 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
- 
++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