Skip to content

Commit

Permalink
change internal memory transfer address type (MTA)
Browse files Browse the repository at this point in the history
  • Loading branch information
lmbsog0 committed Jul 26, 2022
1 parent 1fff745 commit e4c6780
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 79 deletions.
2 changes: 1 addition & 1 deletion interface/Xcp_Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ typedef struct
const boolean slaveBlockModeSupported; /* not part of the specification... */
const uint8 protectedResource; /* not part of the specification... */
const Xcp_ChecksumType checksumType; /* not part of the specification... */
uint32 (*const userDefinedChecksumFunction)(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult); /* not part of the specification... */
void *(*const userDefinedChecksumFunction)(void *lowerAddress, const void *upperAddress, uint32 *pResult); /* not part of the specification... */
uint8 (*const userCmdFunction)(const PduInfoType *pCtoPduInfo, PduInfoType *pResErrPduInfo); /* not part of the specification... */
const uint8 trailingValue;
} Xcp_GeneralType;
Expand Down
120 changes: 60 additions & 60 deletions source/Xcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ typedef struct {
uint16 current_index;
} key_slave;
struct {
uint32 address;
void *address;
uint8 extension;
} memory_transfer;
struct {
Expand Down Expand Up @@ -597,71 +597,71 @@ static uint8 Xcp_CTOCmdStdConnect(PduIdType rxPduId, const PduInfoType *pPduInfo
#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum11(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum11(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum12(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum12(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum14(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum14(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum22(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum22(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum24(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum24(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksum44(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksum44(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksumCRC16(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksumCRC16(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksumCRC16CITT(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksumCRC16CITT(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"

#define Xcp_START_SEC_CODE_FAST
#include "Xcp_MemMap.h"

static uint32 Xcp_BuildChecksumCRC32(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult);
static void *Xcp_BuildChecksumCRC32(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult);

#define Xcp_STOP_SEC_CODE_FAST
#include "Xcp_MemMap.h"
Expand Down Expand Up @@ -1587,7 +1587,7 @@ const uint32_least Xcp_CTOErrorMatrix[0x100u] = {
#define Xcp_START_SEC_CONST_UNSPECIFIED
#include "Xcp_MemMap.h"

static void(* const Xcp_ReadSlaveMemoryTable[])(uint32 address, uint8 extension, uint8 *pBuffer) = {
static void(* const Xcp_ReadSlaveMemoryTable[])(void *address, uint8 extension, uint8 *pBuffer) = {
Xcp_ReadSlaveMemoryU8,
Xcp_ReadSlaveMemoryU16,
Xcp_ReadSlaveMemoryU32
Expand Down Expand Up @@ -1752,7 +1752,7 @@ Xcp_RtType Xcp_Rt = {
0x00u
},
{
0x00000000u,
NULL_PTR,
0x00u
},
{
Expand Down Expand Up @@ -2345,11 +2345,11 @@ static uint8 Xcp_DTOCmdStdTransportLayerCmd(PduIdType rxPduId, const PduInfoType

static uint8 Xcp_DTOCmdStdBuildChecksum(PduIdType rxPduId, const PduInfoType *pPduInfo)
{
uint32_least upper_address;
void *upper_address;
uint32_least block_size;
uint8 checksum_type;
uint32 checksum;
uint32 (*checksum_function)(uint32, const uint32, uint32 *) = NULL_PTR;
void * (*checksum_function)(void *, const void *, uint32 *) = NULL_PTR;

uint8_least element_size = 0x00u;

Expand Down Expand Up @@ -2530,7 +2530,7 @@ static uint8 Xcp_DTOCmdStdShortUpload(PduIdType rxPduId, const PduInfoType *pPdu
for (idx = 0x00u; idx < pPduInfo->SduDataPtr[0x01u]; idx++)
{
Xcp_ReadSlaveMemoryTable[Xcp_Ptr->general->addressGranularity](
address,
(void *)address,
pPduInfo->SduDataPtr[0x03u],
&Xcp_Rt.cto_response.pdu_info.SduDataPtr[(idx + 0x01u) * element_size]);

Expand Down Expand Up @@ -3047,62 +3047,62 @@ static uint8 Xcp_CTOCmdStdConnect(PduIdType rxPduId, const PduInfoType *pPduInfo
return E_OK;
}

static uint32 Xcp_BuildChecksum11(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksum11(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint8 crc = 0x00u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

crc += Xcp_Rt.internal_buffer[0x00u];
}

*pResult = (uint32)crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksum12(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksum12(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint16 crc = 0x0000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

crc += Xcp_Rt.internal_buffer[0x00u];
}

*pResult = (uint32)crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksum14(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksum14(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint32 crc = 0x00000000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

crc += Xcp_Rt.internal_buffer[0x00u];
}

*pResult = (uint32)crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksum22(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
static void *Xcp_BuildChecksum22(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
uint16 u16_data;
uint32 current_address;
void *p_current_address;
uint16 crc = 0x0000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x10u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x10u)
{
Xcp_ReadSlaveMemoryU16(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU16(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

Xcp_CopyToU16WithOrder(&Xcp_Rt.internal_buffer[0x00u], &u16_data, Xcp_Ptr->general->byteOrder);

Expand All @@ -3111,17 +3111,17 @@ static uint32 Xcp_BuildChecksum22(uint32 lowerAddress, const uint32 upperAddress

*pResult = (uint32)crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksum24(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
static void *Xcp_BuildChecksum24(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
uint16 u16_data;
uint32 current_address;
void *p_current_address;
uint32 crc = 0x00000000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x10u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x10u)
{
Xcp_ReadSlaveMemoryU16(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU16(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

Xcp_CopyToU16WithOrder(&Xcp_Rt.internal_buffer[0x00u], &u16_data, Xcp_Ptr->general->byteOrder);

Expand All @@ -3130,17 +3130,17 @@ static uint32 Xcp_BuildChecksum24(uint32 lowerAddress, const uint32 upperAddress

*pResult = crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksum44(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
static void *Xcp_BuildChecksum44(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
uint32 u32_data;
uint32 current_address;
void *p_current_address;
uint32 crc = 0x00000000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x20u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x20u)
{
Xcp_ReadSlaveMemoryU32(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU32(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);

Xcp_CopyToU32WithOrder(&Xcp_Rt.internal_buffer[0x00u], &u32_data, Xcp_Ptr->general->byteOrder);

Expand All @@ -3149,58 +3149,58 @@ static uint32 Xcp_BuildChecksum44(uint32 lowerAddress, const uint32 upperAddress

*pResult = crc;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksumCRC16(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksumCRC16(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint16 remainder = 0x0000u;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
remainder = (remainder >> 0x08u) ^ Xcp_CRC16Table[(remainder ^ Xcp_Rt.internal_buffer[0x00u]) & 0xFFu];
}

remainder ^= 0x0000u;

*pResult = remainder;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksumCRC16CITT(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksumCRC16CITT(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint16 remainder = 0xFFFFu;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
remainder = (remainder << 0x08u) ^ Xcp_CRC16CITTTable[(remainder >> 0x08u) ^ Xcp_Rt.internal_buffer[0x00u]];
}

remainder ^= 0x0000u;

*pResult = remainder;

return current_address;
return p_current_address;
}

static uint32 Xcp_BuildChecksumCRC32(uint32 lowerAddress, const uint32 upperAddress, uint32 *pResult) {
uint32 current_address;
static void *Xcp_BuildChecksumCRC32(void *pLowerAddress, const void *pUpperAddress, uint32 *pResult) {
void *p_current_address;
uint32 remainder = 0xFFFFFFFFu;

for (current_address = lowerAddress; current_address < upperAddress; current_address+= 0x08u)
for (p_current_address = pLowerAddress; p_current_address < pUpperAddress; p_current_address += 0x08u)
{
Xcp_ReadSlaveMemoryU8(current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
Xcp_ReadSlaveMemoryU8(p_current_address, Xcp_Rt.memory_transfer.extension, &Xcp_Rt.internal_buffer[0x00u]);
remainder = (remainder >> 0x08u) ^ Xcp_CRC32Table[(remainder ^ Xcp_Rt.internal_buffer[0x00u]) & 0xFFu];
}

remainder ^= 0xFFFFFFFFu;

*pResult = remainder;

return current_address;
return p_current_address;
}

static void Xcp_CopyFromU16WithOrder(const uint16 src, uint8 *pDest, Xcp_ByteOrderType endianness)
Expand Down
16 changes: 8 additions & 8 deletions test/build_checksum_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,9 @@ def test_build_checksum_returns_expected_checksum_on_a_single_block(ag,
expected_block = generate_random_block_content(block_size, element_size, mta)
expected_block_generator = (v for v in expected_block)

def read_slave_memory(address, _extension, p_buffer):
def read_slave_memory(p_address, _extension, p_buffer):
expected_address, expected_value = next(expected_block_generator)
assert address == expected_address
assert int(handle.ffi.cast('uint32_t', p_address)) == expected_address
raw = expected_value.to_bytes(element_size, dict(BIG_ENDIAN='big', LITTLE_ENDIAN='little')[byte_order],
signed=False)
for i, b in enumerate(raw):
Expand Down Expand Up @@ -168,11 +168,11 @@ def test_build_checksum_user_defined_returns_expected_checksum_on_a_single_block

element_size = element_size_from_address_granularity(ag)

def xcp_user_defined_checksum_function(_lower_address, upper_address, p_checksum):
def xcp_user_defined_checksum_function(_p_lower_address, p_upper_address, p_checksum):
p_checksum[0] = int.from_bytes(bytearray((1, 2, 3, 4)),
dict(BIG_ENDIAN='big', LITTLE_ENDIAN='little')[byte_order],
signed=False)
return upper_address
return p_upper_address

handle.xcp_user_defined_checksum_function.side_effect = xcp_user_defined_checksum_function

Expand Down Expand Up @@ -216,7 +216,9 @@ def xcp_user_defined_checksum_function(_lower_address, upper_address, p_checksum
assert u32_from_array(bytearray(raw_data[4:8]), byte_order) == expected_checksum

# check checksum value.
handle.xcp_user_defined_checksum_function.assert_called_once_with(mta, mta + element_size * 8 * block_size, ANY)
handle.xcp_user_defined_checksum_function.assert_called_once_with(handle.ffi.cast('void *', mta),
handle.ffi.cast('void *', mta + element_size * 8 * block_size),
ANY)


def test_build_checksum_calls_the_det_with_err_param_pointer_if_checksum_function_is_null():
Expand Down Expand Up @@ -257,9 +259,7 @@ def test_build_checksum_returns_err_out_of_range_if_checksum_function_is_null():


def test_build_checksum_returns_err_out_of_range_if_checksum_type_is_out_of_range():
handle = XcpTest(DefaultConfig(channel_rx_pdu_ref=0x0001,
checksum_type=0xFF,
user_defined_checksum_function=None))
handle = XcpTest(DefaultConfig(channel_rx_pdu_ref=0x0001, checksum_type=0xFF, user_defined_checksum_function=None))

# CONNECT
handle.lib.Xcp_CanIfRxIndication(0x0001, handle.get_pdu_info((0xFF, 0x00)))
Expand Down
Loading

0 comments on commit e4c6780

Please sign in to comment.