Skip to content

Commit

Permalink
Fix SxI state-machine
Browse files Browse the repository at this point in the history
  • Loading branch information
christoph2 committed Jun 3, 2024
1 parent 5197166 commit 105a64a
Show file tree
Hide file tree
Showing 7 changed files with 266 additions and 98 deletions.
10 changes: 5 additions & 5 deletions inc/xcp_tl_timeout.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ extern "C" {

/*!!! END-INCLUDE-SECTION !!!*/

static void XcpTl_TimeoutInit(uint16_t timeout_value, void (*timeout_function)(void));
void XcpTl_TimeoutInit(uint16_t timeout_value, void (*timeout_function)(void));

static void XcpTl_TimeoutStart(void);
void XcpTl_TimeoutStart(void);

static void XcpTl_TimeoutStop(void);
void XcpTl_TimeoutStop(void);

static void XcpTl_TimeoutCheck(void);
void XcpTl_TimeoutCheck(void);

static void XcpTl_TimeoutReset(void);
void XcpTl_TimeoutReset(void);

#if XCP_ENABLE_EXTERN_C_GUARDS == XCP_ON
#if defined(__cplusplus)
Expand Down
4 changes: 2 additions & 2 deletions src/tl/sxi/xcp_tl.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,10 @@ void XcpTl_FeedReceiver(uint8_t octet) {
XcpTl_TimeoutReset();
XcpTl_Receiver.Remaining--;
if (XcpTl_Receiver.Remaining == 0u) {
XcpTl_ResetSM();
XcpTl_TimeoutStop();
Xcp_CtoIn.len = XcpTl_Receiver.Dlc;
Xcp_CtoIn.data = XcpTl_Receiver.Buffer + 4;
XcpTl_ResetSM();
XcpTl_TimeoutStop();
Xcp_DispatchCommand(&Xcp_CtoIn);
}
}
Expand Down
10 changes: 5 additions & 5 deletions src/tl/xcp_tl_timeout.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,22 +41,22 @@ static uint32_t XcpTl_TimeoutValue = 0UL;
static void_function XcpTl_TimeoutFunction = XCP_NULL;
static bool XcpTl_TimeoutRunning = XCP_FALSE;

static void XcpTl_TimeoutInit(uint16_t timeout_value, void (*timeout_function)(void)) {
void XcpTl_TimeoutInit(uint16_t timeout_value, void (*timeout_function)(void)) {
XcpTl_TimeoutValue = timeout_value;
XcpTl_TimeoutRunning = XCP_FALSE;
XcpTl_TimeoutFunction = timeout_function;
}

static void XcpTl_TimeoutStart(void) {
void XcpTl_TimeoutStart(void) {
XcpTl_TimeoutValue = XcpHw_GetTimerCounterMS();
XcpTl_TimeoutRunning = XCP_TRUE;
}

static void XcpTl_TimeoutStop(void) {
void XcpTl_TimeoutStop(void) {
XcpTl_TimeoutRunning = XCP_FALSE;
}

static void XcpTl_TimeoutCheck(void) {
void XcpTl_TimeoutCheck(void) {
if (!XcpTl_TimeoutRunning) {
return;
}
Expand All @@ -67,6 +67,6 @@ static void XcpTl_TimeoutCheck(void) {
}
}

static void XcpTl_TimeoutReset(void) {
void XcpTl_TimeoutReset(void) {
XcpTl_TimeoutValue = XcpHw_GetTimerCounterMS();
}
238 changes: 196 additions & 42 deletions tests/xcp_config.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* BlueParrot XCP
*
* (C) 2007-2021 by Christoph Schueler <github.com/Christoph2,
* (C) 2007-2024 by Christoph Schueler <github.com/Christoph2,
* [email protected]>
*
* All Rights Reserved
Expand Down Expand Up @@ -31,66 +31,218 @@
#if !defined(__XCP_CONFIG_H)
#define __XCP_CONFIG_H
#define XCP_TRANSPORT_LAYER XCP_ON_ETHERNET
/*
** General Options.
*/
#define TP_CAN
// #define TP_SXI

#define XCP_CAN_INTERFACE (XCP_CAN_IF_SEED_STUDIO_CAN_SHIELD)

#define XCP_GET_ID_0 "BlueParrot XCP tests"
#define XCP_GET_ID_1 "Example_Project"
#define XCP_GET_ID_0 "BlueParrot XCP running on Arduino"
#define XCP_GET_ID_1 "BlueParrot_XCP_on_Arduino"

// #define XCP_BUILD_TYPE XCP_RELEASE_BUILD
#define XCP_BUILD_TYPE XCP_DEBUG_BUILD

#define XCP_EXTERN_C_GUARDS XCP_OFF
#define XCP_ENABLE_EXTERN_C_GUARDS (XCP_OFF)

#define XCP_ENABLE_SLAVE_BLOCKMODE XCP_ON
#define XCP_ENABLE_MASTER_BLOCKMODE XCP_ON
#define XCP_ENABLE_SLAVE_BLOCKMODE (XCP_ON)
#define XCP_ENABLE_MASTER_BLOCKMODE (XCP_OFF)

#define XCP_ENABLE_STIM XCP_OFF
#define XCP_ENABLE_STIM (XCP_OFF)

#define XCP_CHECKSUM_METHOD XCP_CHECKSUM_METHOD_XCP_CRC_16_CITT
#define XCP_CHECKSUM_CHUNKED_CALCULATION XCP_ON
#define XCP_CHECKSUM_CHUNKED_CALCULATION (XCP_ON)
#define XCP_CHECKSUM_CHUNK_SIZE (64)
#define XCP_CHECKSUM_MAXIMUM_BLOCK_SIZE (0) /* 0 ==> unlimited */

#define XCP_BYTE_ORDER XCP_BYTE_ORDER_INTEL
#define XCP_ADDRESS_GRANULARITY XCP_ADDRESS_GRANULARITY_BYTE

#define XCP_MAX_CTO (8)
#define XCP_MAX_DTO (8)
#define XCP_ENABLE_STATISTICS (XCP_ON)

#define XCP_ENABLE_DAQ_COMMANDS XCP_OFF
#define XCP_MAX_BS (255)
#define XCP_MIN_ST (0)
#define XCP_QUEUE_SIZE (0)

#define XCP_ENABLE_DOWNLOAD_NEXT XCP_ON
#define XCP_ENABLE_DOWNLOAD_MAX XCP_ON
#define XCP_ENABLE_SHORT_DOWNLOAD XCP_ON
#define XCP_MAIN_FUNCTION_PERIOD (2000) /* Period in microseconds. */

/*
* ** DAQ Settings.
* */
** Resource Protection.
*/
#define XCP_PROTECT_CAL (XCP_OFF)
#define XCP_PROTECT_PAG (XCP_ON)
#define XCP_PROTECT_DAQ (XCP_OFF)
#define XCP_PROTECT_STIM (XCP_ON)
#define XCP_PROTECT_PGM (XCP_OFF)

/*
** DAQ Settings.
*/
#define XCP_DAQ_CONFIG_TYPE XCP_DAQ_CONFIG_TYPE_DYNAMIC
#define XCP_DAQ_DTO_BUFFER_SIZE (40)
#define XCP_DAQ_ENABLE_PREDEFINED_LISTS XCP_OFF
#define XCP_DAQ_TIMESTAMP_UNIT (XCP_DAQ_TIMESTAMP_UNIT_10US)
#define XCP_DAQ_ENABLE_PREDEFINED_LISTS (XCP_OFF)
#define XCP_DAQ_TIMESTAMP_UNIT (XCP_DAQ_TIMESTAMP_UNIT_1US)
#define XCP_DAQ_TIMESTAMP_SIZE (XCP_DAQ_TIMESTAMP_SIZE_4)
#define XCP_DAQ_ENABLE_PRESCALER XCP_OFF
#define XCP_DAQ_ENABLE_ADDR_EXT XCP_OFF
#define XCP_DAQ_ENABLE_BIT_OFFSET XCP_OFF
#define XCP_DAQ_ENABLE_PRIORITIZATION XCP_OFF
#define XCP_DAQ_ENABLE_ALTERNATING XCP_OFF
#define XCP_DAQ_ENABLE_CLOCK_ACCESS_ALWAYS XCP_ON
#define XCP_DAQ_ENABLE_WRITE_THROUGH XCP_ON
#define XCP_DAQ_MAX_DYNAMIC_ENTITIES (100)
#define XCP_DAQ_ENABLE_PRESCALER (XCP_OFF)
#define XCP_DAQ_ENABLE_ADDR_EXT (XCP_OFF)
#define XCP_DAQ_ENABLE_BIT_OFFSET (XCP_OFF)
#define XCP_DAQ_ENABLE_PRIORITIZATION (XCP_OFF)
#define XCP_DAQ_ENABLE_ALTERNATING (XCP_OFF)
#define XCP_DAQ_ENABLE_CLOCK_ACCESS_ALWAYS (XCP_ON)
#define XCP_DAQ_ENABLE_WRITE_THROUGH (XCP_OFF)
#define XCP_DAQ_MAX_DYNAMIC_ENTITIES (16)
#define XCP_DAQ_MAX_EVENT_CHANNEL (3)
#define XCP_DAQ_ENABLE_MULTIPLE_DAQ_LISTS_PER_EVENT XCP_OFF
#define XCP_DAQ_ENABLE_DYNAMIC_LISTS XCP_ON
#define XCP_DAQ_ENABLE_MULTIPLE_DAQ_LISTS_PER_EVENT (XCP_OFF)

/*
** PGM Settings.
*/
#define XCP_MAX_BS_PGM (0)
#define XCP_MIN_ST_PGM (0)

#define XCP_MAX_SECTOR_PGM UINT8(32)
#define XCP_PGM_PROPERIES XCP_PGM_ABSOLUTE_MODE

/*
** Optional Services.
*/
#define XCP_ENABLE_GET_COMM_MODE_INFO (XCP_ON)
#define XCP_ENABLE_GET_ID (XCP_ON)
#define XCP_ENABLE_SET_REQUEST (XCP_OFF)
#define XCP_ENABLE_GET_SEED (XCP_OFF)
#define XCP_ENABLE_UNLOCK (XCP_OFF)
#define XCP_ENABLE_SET_MTA (XCP_ON)
#define XCP_ENABLE_UPLOAD (XCP_ON)
#define XCP_ENABLE_SHORT_UPLOAD (XCP_ON)
#define XCP_ENABLE_BUILD_CHECKSUM (XCP_ON)
#define XCP_ENABLE_USER_CMD (XCP_OFF)

#define XCP_ENABLE_CAL_COMMANDS (XCP_ON)

#define XCP_ENABLE_DOWNLOAD_NEXT (XCP_OFF)
#define XCP_ENABLE_DOWNLOAD_MAX (XCP_ON)
#define XCP_ENABLE_SHORT_DOWNLOAD (XCP_ON)
#define XCP_ENABLE_MODIFY_BITS (XCP_ON)

#define XCP_ENABLE_PAG_COMMANDS (XCP_OFF)

#define XCP_ENABLE_GET_PAG_PROCESSOR_INFO (XCP_OFF)
#define XCP_ENABLE_GET_SEGMENT_INFO (XCP_OFF)
#define XCP_ENABLE_GET_PAGE_INFO (XCP_OFF)
#define XCP_ENABLE_SET_SEGMENT_MODE (XCP_OFF)
#define XCP_ENABLE_GET_SEGMENT_MODE (XCP_OFF)
#define XCP_ENABLE_COPY_CAL_PAGE (XCP_OFF)

#define XCP_ENABLE_DAQ_COMMANDS (XCP_ON)

#define XCP_ENABLE_GET_DAQ_CLOCK (XCP_ON)
#define XCP_ENABLE_READ_DAQ (XCP_OFF)
#define XCP_ENABLE_GET_DAQ_PROCESSOR_INFO (XCP_ON)
#define XCP_ENABLE_GET_DAQ_RESOLUTION_INFO (XCP_ON)
#define XCP_ENABLE_GET_DAQ_LIST_INFO (XCP_ON)
#define XCP_ENABLE_GET_DAQ_EVENT_INFO (XCP_ON)
#define XCP_ENABLE_FREE_DAQ (XCP_ON)
#define XCP_ENABLE_ALLOC_DAQ (XCP_ON)
#define XCP_ENABLE_ALLOC_ODT (XCP_ON)
#define XCP_ENABLE_ALLOC_ODT_ENTRY (XCP_ON)
#define XCP_ENABLE_WRITE_DAQ_MULTIPLE (XCP_OFF)

#define XCP_ENABLE_PGM_COMMANDS (XCP_ON)

#define XCP_ENABLE_GET_PGM_PROCESSOR_INFO (XCP_ON)
#define XCP_ENABLE_GET_SECTOR_INFO (XCP_ON)
#define XCP_ENABLE_PROGRAM_PREPARE (XCP_ON)
#define XCP_ENABLE_PROGRAM_FORMAT (XCP_OFF)
#define XCP_ENABLE_PROGRAM_NEXT (XCP_OFF)
#define XCP_ENABLE_PROGRAM_MAX (XCP_OFF)
#define XCP_ENABLE_PROGRAM_VERIFY (XCP_OFF)

#define XCP_ENABLE_EVENT_PACKET_API (XCP_ON)
#define XCP_ENABLE_SERVICE_REQUEST_API (XCP_OFF)

/*
* ** Platform Specific Options.
* */
#define XCP_ENTER_CRITICAL()
#define XCP_LEAVE_CRITICAL()
#define XCP_TL_ENTER_CRITICAL()
#define XCP_TL_LEAVE_CRITICAL()
#define XCP_DAQ_ENTER_CRITICAL()
#define XCP_DAQ_LEAVE_CRITICAL()
** Transport-Layer specific Options (may not apply to every Transport).
*/
#if defined(TP_CAN)
#define XCP_TRANSPORT_LAYER XCP_ON_CAN

#define XCP_ON_CAN_INBOUND_IDENTIFIER (0x300)
#define XCP_ON_CAN_OUTBOUND_IDENTIFIER (0x301)
#define XCP_ON_CAN_MAX_DLC_REQUIRED (XCP_OFF)
#define XCP_ON_CAN_BROADCAST_IDENTIFIER (0x222)

// Chip-Select- and Interrupt-Pins / SeeedStudio CAN Shield v2.
#define XCP_CAN_IF_MCP25XX_PIN_CS (9)
#define XCP_CAN_IF_MCP25XX_PIN_INT (2)

#define XCP_ON_CAN_FREQ (CAN_500KBPS)
#define XCP_ON_CAN_BTQ (16)
#define XCP_ON_CAN_TSEG1 (14)
#define XCP_ON_CAN_TSEG2 (2)
#define XCP_ON_CAN_SJW (2)
#define XCP_ON_CAN_NOSAMP (1)

/* Transport-Layer Commands. */
#define XCP_ENABLE_CAN_GET_SLAVE_ID (XCP_ON)
#define XCP_ENABLE_CAN_GET_DAQ_ID (XCP_ON)
#define XCP_ENABLE_CAN_SET_DAQ_ID (XCP_OFF)

#elif defined(TP_BLUETOOTH)
#define XCP_TRANSPORT_LAYER XCP_ON_BTH

#define XCP_MAX_CTO (64) // (16)
#define XCP_MAX_DTO (64)

#define XCP_TRANSPORT_LAYER_LENGTH_SIZE (2)
#define XCP_TRANSPORT_LAYER_COUNTER_SIZE (2)
#define XCP_TRANSPORT_LAYER_CHECKSUM_SIZE (0)
#elif defined(TP_ETHER)
#define XCP_TRANSPORT_LAYER XCP_ON_ETHERNET

#define XCP_MAX_CTO (64) // (16)
#define XCP_MAX_DTO (64)

#define XCP_TRANSPORT_LAYER_LENGTH_SIZE (2)
#define XCP_TRANSPORT_LAYER_COUNTER_SIZE (2)
#define XCP_TRANSPORT_LAYER_CHECKSUM_SIZE (0)
#elif defined(TP_SXI) || (XCP_TRANSPORT_LAYER == XCP_ON_SXI)
#define XCP_TRANSPORT_LAYER XCP_ON_SXI
#define XCP_MAX_CTO (64)
#define XCP_MAX_DTO (64)
#define XCP_TRANSPORT_LAYER_LENGTH_SIZE (2)
#define XCP_TRANSPORT_LAYER_COUNTER_SIZE (2)
#define XCP_TRANSPORT_LAYER_CHECKSUM_SIZE (2)
#else
#error "No transport-layer. please define either TP_ETHER, TP_CAN, or TP_BLUETOOTH."
#endif // KVASER_CAN

/*
** Customization Options.
*/
#define XCP_ENABLE_ADDRESS_MAPPER (XCP_OFF)
#define XCP_ENABLE_CHECK_MEMORY_ACCESS (XCP_OFF)
#define XCP_REPLACE_STD_COPY_MEMORY (XCP_OFF)
#define XCP_ENABLE_GET_ID_HOOK (XCP_OFF)

/*
**
** Arduino Specific Options.
**
*/

/*
** Platform Specific Function-like Macros.
*/
#define XCP_ENTER_CRITICAL() XcpHw_AcquireLock(XCP_HW_LOCK_XCP)
#define XCP_LEAVE_CRITICAL() XcpHw_ReleaseLock(XCP_HW_LOCK_XCP)
#define XCP_HW_ENTER_CRITICAL() XcpHw_AcquireLock(XCP_HW_LOCK_HW)
#define XCP_HW_LEAVE_CRITICAL() XcpHw_ReleaseLock(XCP_HW_LOCK_HW)
#define XCP_TL_ENTER_CRITICAL() XcpHw_AcquireLock(XCP_HW_LOCK_TL)
#define XCP_TL_LEAVE_CRITICAL() XcpHw_ReleaseLock(XCP_HW_LOCK_TL)
#define XCP_DAQ_ENTER_CRITICAL() XcpHw_AcquireLock(XCP_HW_LOCK_DAQ)
#define XCP_DAQ_LEAVE_CRITICAL() XcpHw_ReleaseLock(XCP_HW_LOCK_DAQ)
#define XCP_STIM_ENTER_CRITICAL()
#define XCP_STIM_LEAVE_CRITICAL()
#define XCP_PGM_ENTER_CRITICAL()
Expand All @@ -100,10 +252,12 @@
#define XCP_PAG_ENTER_CRITICAL()
#define XCP_PAG_LEAVE_CRITICAL()

#define XCP_TRANSPORT_LAYER_LENGTH_SIZE (2)
#define XCP_TRANSPORT_LAYER_COUNTER_SIZE (2)
#define XCP_TRANSPORT_LAYER_CHECKSUM_SIZE (0)

#define XCP_MAIN_FUNCTION_PERIOD (2000)
/*
** Application Settings.
*/
#define XCP_APP_TIMEBASE (10)
/* Applications gets called every 'n' milliseconds,
** 0 ==> free running.
*/

#endif /* __XCP_CONFIG_H */
4 changes: 2 additions & 2 deletions tools/arduino/hello_xcp/hello_xcp.ino
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ auto sin0 = SineWave(&triangle, 0xff, 100.0, true);
void loop() {
XcpTl_MainFunction();
Xcp_MainFunction();
#if 0
//#if 0
if ((millis() - startTime) >= 10) {
startTime = millis();
triangle.step();
Expand All @@ -195,5 +195,5 @@ void loop() {
sine_wave = sin0.get_float_value();
XcpDaq_TriggerEvent(0);
}
#endif
//#endif
}
Loading

0 comments on commit 105a64a

Please sign in to comment.