CPC#

Modules#

sl_cpc_endpoint_handle_t

sl_cpc_endpoint_debug_counters_t

sl_cpc_core_debug_counters_t

sl_cpc_mem_pool_handle_t

sl_cpc_debug_memory_t

Enumerations#

enum
SL_CPC_ENDPOINT_USER_ID_0 = 90
SL_CPC_ENDPOINT_USER_ID_1 = 91
SL_CPC_ENDPOINT_USER_ID_2 = 92
SL_CPC_ENDPOINT_USER_ID_3 = 93
SL_CPC_ENDPOINT_USER_ID_4 = 94
SL_CPC_ENDPOINT_USER_ID_5 = 95
SL_CPC_ENDPOINT_USER_ID_6 = 96
SL_CPC_ENDPOINT_USER_ID_7 = 97
SL_CPC_ENDPOINT_USER_ID_8 = 98
SL_CPC_ENDPOINT_USER_ID_9 = 99
}

Enumeration representing user endpoint.

enum
SL_CPC_STATE_FREED = 0
SL_CPC_STATE_OPEN
SL_CPC_STATE_CLOSED
SL_CPC_STATE_CLOSING
SL_CPC_STATE_CONNECTING
SL_CPC_STATE_CONNECTED
SL_CPC_STATE_SHUTTING_DOWN
SL_CPC_STATE_SHUTDOWN
SL_CPC_STATE_REMOTE_SHUTDOWN
SL_CPC_STATE_DISCONNECTED
SL_CPC_STATE_ERROR_DESTINATION_UNREACHABLE
SL_CPC_STATE_ERROR_SECURITY_INCIDENT
SL_CPC_STATE_ERROR_FAULT
}

Enumeration representing the possible endpoint state.

enum
SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE = 0
SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE_ARG
SL_CPC_ENDPOINT_ON_IFRAME_WRITE_COMPLETED
SL_CPC_ENDPOINT_ON_ERROR
SL_CPC_ENDPOINT_ON_ERROR_ARG
SL_CPC_ENDPOINT_ON_CONNECT
SL_CPC_ENDPOINT_ON_CONNECT_ARG
SL_CPC_ENDPOINT_SHUTDOWN_TIMEOUT
SL_CPC_ENDPOINT_WRITE_TIMEOUT
SL_CPC_ENDPOINT_ON_UFRAME_RECEIVE
SL_CPC_ENDPOINT_ON_UFRAME_RECEIVE_ARG
SL_CPC_ENDPOINT_ON_UFRAME_WRITE_COMPLETED
SL_CPC_ENDPOINT_ON_POLL
SL_CPC_ENDPOINT_ON_POLL_ARG
SL_CPC_ENDPOINT_ON_FINAL
SL_CPC_ENDPOINT_ON_FINAL_ARG
}

Enumeration representing the possible configurable options for an endpoint.

Typedefs#

typedef void(*
sl_cpc_on_write_completed_t)(sl_cpc_user_endpoint_id_t endpoint_id, void *buffer, void *arg, sl_status_t status)

Typedef for the user - supplied callback function which is called when CPC is done with the provided buffer.

typedef void(*
sl_cpc_on_data_reception_t)(uint8_t endpoint_id, void *arg)

Typedef for the user - supplied callback function which is called when CPC receive data on an endpoint.

typedef void(*
sl_cpc_on_error_callback_t)(uint8_t endpoint_id, void *arg)

Typedef for the user-supplied callback function which is called when CPC detects a fatal error on an endpoint.

typedef void(*
sl_cpc_on_connect_callback_t)(uint8_t endpoint_id, void *arg, sl_status_t status)

Typedef for the user-supplied callback function which is called when CPC connection to a secondary completes, successfully or not.

Functions#

sl_status_t

Global variable that contains the core debug information.

sl_status_t
sl_cpc_init_user_endpoint(sl_cpc_endpoint_handle_t *endpoint_handle, sl_cpc_user_endpoint_id_t id, uint8_t flags)

The bare metal process action function.

sl_status_t
sl_cpc_set_endpoint_option(sl_cpc_endpoint_handle_t *endpoint_handle, sl_cpc_endpoint_option_t option, void *value)

Set endpoint option.

sl_status_t
sl_cpc_shutdown_endpoint(sl_cpc_endpoint_handle_t *endpoint_handle, uint8_t flags)

Shutdown endpoint connection.

sl_status_t
sl_cpc_terminate_endpoint(sl_cpc_endpoint_handle_t *endpoint_handle, uint8_t flags)

Terminate an endpoint, effectively dropping any pending TX and RX frame.

sl_status_t
sl_cpc_free_endpoint(sl_cpc_endpoint_handle_t *endpoint_handle)

Free the memory associated to an endpoint so it can be reused.

sl_status_t
sl_cpc_abort_read(sl_cpc_endpoint_handle_t *endpoint_handle)

Abort read; Allow unblocking task in blocked by a read.

sl_status_t
sl_cpc_read(sl_cpc_endpoint_handle_t *endpoint_handle, void **data, uint16_t *data_length, uint32_t timeout, uint8_t flags)

Read data.

sl_status_t
sl_cpc_write(sl_cpc_endpoint_handle_t *endpoint_handle, void *data, uint16_t data_length, uint8_t flag, void *on_write_completed_arg)

Write data.

sl_cpc_get_endpoint_state(sl_cpc_endpoint_handle_t *endpoint_handle)

Get endpoint state.

bool
sl_cpc_get_endpoint_encryption(sl_cpc_endpoint_handle_t *endpoint_handle)

Get endpoint encryption state.

sl_status_t

Free buffer returned by sl_cpc_read().

uint16_t
sl_cpc_get_tx_max_payload_length(sl_cpc_endpoint_handle_t *endpoint_handle)

Get the maximum payload length that the remote can receive.

Macros#

#define
SL_CPC_ENDPOINT_FLAG_NONE 0

sl cpc open endpoint flag none

#define
SL_CPC_ENDPOINT_FLAG_DISABLE_ENCRYPTION (0x01 << 3)

sl cpc open endpoint flag disable encryption

#define
SL_CPC_OPEN_ENDPOINT_FLAG_NONE SL_CPC_ENDPOINT_FLAG_NONE
#define
SL_CPC_OPEN_ENDPOINT_FLAG_DISABLE_ENCRYPTION SL_CPC_ENDPOINT_FLAG_DISABLE_ENCRYPTION
#define
SL_CPC_USER_ENDPOINT_ID_START ((uint8_t)SL_CPC_ENDPOINT_USER_ID_0)

Struct representing a core debug.

#define
SL_CPC_USER_ENDPOINT_ID_END ((uint8_t)(SL_CPC_ENDPOINT_USER_ID_0 + SL_CPC_USER_ENDPOINT_MAX_COUNT - 1))

sl cpc user endpoint id end.

#define
SL_CPC_FLAG_NO_BLOCK 0x01

sl cpc flag no block.

#define
SLI_CPC_SECURITY_TAG_LENGTH 8

sli cpc security tag length.

#define
SLI_CPC_LDMA_DESCRIPTOR_MAX_SIZE 2048

sli cpc ldma desciptor max size.

#define
SLI_CPC_HEADER_SIZE 7

sli cpc header size.

#define
SLI_CPC_PAYLOAD_CRC_SIZE 2

sli cpc payload crc size.

#define
SL_CPC_TX_PAYLOAD_MAX_LENGTH ((2 * SLI_CPC_LDMA_DESCRIPTOR_MAX_SIZE) - SLI_CPC_HEADER_SIZE - SLI_CPC_PAYLOAD_CRC_SIZE)

sl cpc tx payload max length.

#define
SL_CPC_TX_PAYLOAD_MAX_LENGTH_WITH_SECURITY (SL_CPC_TX_PAYLOAD_MAX_LENGTH - SLI_CPC_SECURITY_TAG_LENGTH)

sl cpc tx payload max lenght with security.

#define
SL_CPC_TRANSMIT_WINDOW_MIN_SIZE 1

sl cpc transmit window min size.

#define
SL_CPC_TRANSMIT_WINDOW_MAX_SIZE 1

sl cpc transmit window max size.

Enumeration Documentation#

sl_cpc_user_endpoint_id_t#

sl_cpc_user_endpoint_id_t

Enumeration representing user endpoint.

Enumerator
SL_CPC_ENDPOINT_USER_ID_0

User endpoint ID 0.

SL_CPC_ENDPOINT_USER_ID_1

User endpoint ID 1.

SL_CPC_ENDPOINT_USER_ID_2

User endpoint ID 2.

SL_CPC_ENDPOINT_USER_ID_3

User endpoint ID 3.

SL_CPC_ENDPOINT_USER_ID_4

User endpoint ID 4.

SL_CPC_ENDPOINT_USER_ID_5

User endpoint ID 5.

SL_CPC_ENDPOINT_USER_ID_6

User endpoint ID 6.

SL_CPC_ENDPOINT_USER_ID_7

User endpoint ID 7.

SL_CPC_ENDPOINT_USER_ID_8

User endpoint ID 8.

SL_CPC_ENDPOINT_USER_ID_9

User endpoint ID 9.


sl_cpc_endpoint_state_t#

sl_cpc_endpoint_state_t

Enumeration representing the possible endpoint state.

Enumerator
SL_CPC_STATE_FREED

State freed.

SL_CPC_STATE_OPEN

State open.

SL_CPC_STATE_CLOSED

State close.

SL_CPC_STATE_CLOSING

State closing.

SL_CPC_STATE_CONNECTING

Connecting to remote's endpoint.

SL_CPC_STATE_CONNECTED

Connected to remote's endpoint.

SL_CPC_STATE_SHUTTING_DOWN

Transmissions shutting down.

SL_CPC_STATE_SHUTDOWN

Transmissions shutdown.

SL_CPC_STATE_REMOTE_SHUTDOWN

Remote transmissions shutdown.

SL_CPC_STATE_DISCONNECTED

Connection terminated.

SL_CPC_STATE_ERROR_DESTINATION_UNREACHABLE

Error state, destination unreachable.

SL_CPC_STATE_ERROR_SECURITY_INCIDENT

Error state, security incident.

SL_CPC_STATE_ERROR_FAULT

Error state, fault.


sl_cpc_endpoint_option_t#

sl_cpc_endpoint_option_t

Enumeration representing the possible configurable options for an endpoint.

Enumerator
SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE

Set callback for iframe received notification.

SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE_ARG

Set callback argument for iframe received notification.

SL_CPC_ENDPOINT_ON_IFRAME_WRITE_COMPLETED

Set callback for write complete notification.

SL_CPC_ENDPOINT_ON_ERROR

Set callback for error notification.

SL_CPC_ENDPOINT_ON_ERROR_ARG

Set callback argument for error notification.

SL_CPC_ENDPOINT_ON_CONNECT

Set callback when host/primary connects to endpoint.

SL_CPC_ENDPOINT_ON_CONNECT_ARG

Set callback argument for connect notification.

SL_CPC_ENDPOINT_SHUTDOWN_TIMEOUT

Set shutdown timeout, in ticks.

SL_CPC_ENDPOINT_WRITE_TIMEOUT

Set the timeout time for blocking write in ticks.

SL_CPC_ENDPOINT_ON_UFRAME_RECEIVE

Set callback for uframe received notification.

SL_CPC_ENDPOINT_ON_UFRAME_RECEIVE_ARG

Set callback argument for uframe received notification.

SL_CPC_ENDPOINT_ON_UFRAME_WRITE_COMPLETED

Set callback for write complete notification.

SL_CPC_ENDPOINT_ON_POLL

Set callback for on poll notification.

SL_CPC_ENDPOINT_ON_POLL_ARG

Set callback argument for on poll notification.

SL_CPC_ENDPOINT_ON_FINAL

Set callback for on final notification.

SL_CPC_ENDPOINT_ON_FINAL_ARG

Set callback argument for on final notification.


Typedef Documentation#

sl_cpc_on_write_completed_t#

typedef void(* sl_cpc_on_write_completed_t) (sl_cpc_user_endpoint_id_t endpoint_id, void *buffer, void *arg, sl_status_t status) )(sl_cpc_user_endpoint_id_t endpoint_id, void *buffer, void *arg, sl_status_t status)

Typedef for the user - supplied callback function which is called when CPC is done with the provided buffer.

Parameters
TypeDirectionArgument NameDescription
N/Aendpoint_id

Endpoint ID

N/Abuffer

Pointer to data buffer.

N/Aarg

Transaction user's argument.

N/Astatus

Status indicating the transaction result: SL_STATUS_OK Remote should have receive the frame SL_STATUS_TRANSMIT_INCOMPLETE Remote has not received the frame.


sl_cpc_on_data_reception_t#

typedef void(* sl_cpc_on_data_reception_t) (uint8_t endpoint_id, void *arg) )(uint8_t endpoint_id, void *arg)

Typedef for the user - supplied callback function which is called when CPC receive data on an endpoint.

Parameters
TypeDirectionArgument NameDescription
N/Aendpoint_id

Endpoint ID

N/Aarg

User-specific argument .


sl_cpc_on_error_callback_t#

typedef void(* sl_cpc_on_error_callback_t) (uint8_t endpoint_id, void *arg) )(uint8_t endpoint_id, void *arg)

Typedef for the user-supplied callback function which is called when CPC detects a fatal error on an endpoint.

Parameters
TypeDirectionArgument NameDescription
N/Aendpoint_id

Endpoint ID

N/Aarg

User-specific argument .


sl_cpc_on_connect_callback_t#

typedef void(* sl_cpc_on_connect_callback_t) (uint8_t endpoint_id, void *arg, sl_status_t status) )(uint8_t endpoint_id, void *arg, sl_status_t status)

Typedef for the user-supplied callback function which is called when CPC connection to a secondary completes, successfully or not.

Parameters
TypeDirectionArgument NameDescription
N/Aendpoint_id

Endpoint ID

N/Aarg

User-specific argument.

N/Astatus

Indicate if the connection was successful or not: SL_STATUS_OK successfully connected SL_STATUS_TIMEOUT operation timed out SL_STATUS_NOT_READY secondary's endpoint is not ready

Note

  • If several users connect to the same endpoint on the host side, this callback will only be called only when the first connection occurs.


Function Documentation#

sl_cpc_init#

sl_status_t sl_cpc_init (void )

Global variable that contains the core debug information.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Initialize CPC module.


sl_cpc_init_user_endpoint#

sl_status_t sl_cpc_init_user_endpoint (sl_cpc_endpoint_handle_t * endpoint_handle, sl_cpc_user_endpoint_id_t id, uint8_t flags)

The bare metal process action function.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[inout]endpoint_handle

Endpoint handle.

sl_cpc_user_endpoint_id_t[in]id

Endpoint ID [90 to 99].

uint8_t[in]flags

Initialization flags. Reserved for future used

Initalize a user endpoint. Following the successful initialization of an endpoint, successive attempts to initialize an endpoint of the same ID will fail until the endpoint is freed.


sl_cpc_set_endpoint_option#

sl_status_t sl_cpc_set_endpoint_option (sl_cpc_endpoint_handle_t * endpoint_handle, sl_cpc_endpoint_option_t option, void * value)

Set endpoint option.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

sl_cpc_endpoint_option_t[in]option

Endpoint Option.

void *[in]value

Pointer to the option value.

Returns

  • Status code.

Return values

  • SL_STATUS_OK: Set endpoint option successfully.

  • Other: sl_status_t if error occurred.

Note

  • Public options are: SL_CPC_ENDPOINT_ON_CONNECT: Set a callback that will be called when connection is established with the remote.

SL_CPC_ENDPOINT_ON_CONNECT_ARG: Set an on connect argument.

SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE: Set an on iframe receive callback. value is a sl_cpc_on_data_reception_t type.

SL_CPC_ENDPOINT_ON_IFRAME_RECEIVE_ARG: Set an on iframe receive argument.

SL_CPC_ENDPOINT_ON_IFRAME_WRITE_COMPLETED: Set an on iframe write completed callback. value is a sl_cpc_on_write_completed_t type.

SL_CPC_ENDPOINT_ON_ERROR: Set an on error callback. value is a sl_cpc_on_error_callback_t type.

SL_CPC_ENDPOINT_ON_ERROR_ARG: Set an on error callback argument.

SL_CPC_ENDPOINT_SHUTDOWN_TIMEOUT: (RTOS Only) Set shutdown handshake timeout, in ticks.

SL_CPC_ENDPOINT_WRITE_TIMEOUT: (RTOS Only) Set the timeout time for blocking write in ticks.


sl_cpc_shutdown_endpoint#

sl_status_t sl_cpc_shutdown_endpoint (sl_cpc_endpoint_handle_t * endpoint_handle, uint8_t flags)

Shutdown endpoint connection.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

uint8_t[in]flags

Optional flags: SL_CPC_FLAG_NO_BLOCK Cause the function to return SL_STATUS_IN_PROGRESS immediately in RTOS data still pending TX.

Any pending TX frame will attempt to be transmitted.

Note

  • In RTOS, this function is blocking by default. Use the SL_CPC_FLAG_NO_BLOCK flag to execute without blocking.


sl_cpc_terminate_endpoint#

sl_status_t sl_cpc_terminate_endpoint (sl_cpc_endpoint_handle_t * endpoint_handle, uint8_t flags)

Terminate an endpoint, effectively dropping any pending TX and RX frame.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

uint8_t[in]flags

Termination flags. Reserved for future use

In RTOS, this function will always block until all frames have been dropped.

Note

  • This function must be called before attempting to reconnect an endpoint to the remote.


sl_cpc_free_endpoint#

sl_status_t sl_cpc_free_endpoint (sl_cpc_endpoint_handle_t * endpoint_handle)

Free the memory associated to an endpoint so it can be reused.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.


sl_cpc_abort_read#

sl_status_t sl_cpc_abort_read (sl_cpc_endpoint_handle_t * endpoint_handle)

Abort read; Allow unblocking task in blocked by a read.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

Note

  • This function can be called from an ISR.


sl_cpc_read#

sl_status_t sl_cpc_read (sl_cpc_endpoint_handle_t * endpoint_handle, void ** data, uint16_t * data_length, uint32_t timeout, uint8_t flags)

Read data.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

void **[out]data

Address of the variable that will receive the data pointer.

uint16_t *[out]data_length

Length of the data contained in the buffer.

uint32_t[in]timeout

Timeout in ticks for the read operation. (Requires RTOS). Note: No effect if SL_CPC_FLAG_NO_BLOCK is provided as a flag

uint8_t[in]flags

Optional flags: SL_CPC_FLAG_NO_BLOCK Cause the function to return SL_STATUS_EMPTY immediately in RTOS if no data available.


sl_cpc_write#

sl_status_t sl_cpc_write (sl_cpc_endpoint_handle_t * endpoint_handle, void * data, uint16_t data_length, uint8_t flag, void * on_write_completed_arg)

Write data.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

void *[in]data

Pointer to data buffer.

uint16_t[in]data_length

Length of the data contained in the buffer.

uint8_t[in]flag

Internal flag, do not use.

void *[in]on_write_completed_arg

Argument that will be passed to on_write_completed().

Note

  • This function cannot be called from an ISR.

  • When the write buffer is encrypted, the original content is lost and replaced by its encrypted counterpart.


sl_cpc_get_endpoint_state#

sl_cpc_endpoint_state_t sl_cpc_get_endpoint_state (sl_cpc_endpoint_handle_t * endpoint_handle)

Get endpoint state.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

Returns

  • Endpoint state.


sl_cpc_get_endpoint_encryption#

bool sl_cpc_get_endpoint_encryption (sl_cpc_endpoint_handle_t * endpoint_handle)

Get endpoint encryption state.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

Returns

  • Endpoint encryption state.


sl_cpc_free_rx_buffer#

sl_status_t sl_cpc_free_rx_buffer (void * data)

Free buffer returned by sl_cpc_read().

Parameters
TypeDirectionArgument NameDescription
void *[in]data

Pointer to data buffer to free.


sl_cpc_get_tx_max_payload_length#

uint16_t sl_cpc_get_tx_max_payload_length (sl_cpc_endpoint_handle_t * endpoint_handle)

Get the maximum payload length that the remote can receive.

Parameters
TypeDirectionArgument NameDescription
sl_cpc_endpoint_handle_t *[in]endpoint_handle

Endpoint handle.

Returns

  • the maximum tx payload length in function of whether the encryption is enabled on the endpoint or not