SerialAPI#

Modules#

cmd_handler_map_t

_transport_t

comm_interface_frame_ptr

important_device_t

host_sleep_context_t

Enumerations#

enum
TRANSPORT_TYPE_UART
TRANSPORT_TYPE_SPI
TRANSPORT_TYPE_ETHERNET
TRANSPORT_TYPE_UART
TRANSPORT_TYPE_SPI
TRANSPORT_TYPE_ETHERNET
}
enum
PARSE_IDLE
PARSE_FRAME_RECEIVED
PARSE_FRAME_SENT
PARSE_FRAME_ERROR
PARSE_RX_TIMEOUT
PARSE_TX_TIMEOUT
PARSE_IDLE
PARSE_FRAME_RECEIVED
PARSE_FRAME_SENT
PARSE_FRAME_ERROR
PARSE_RX_TIMEOUT
PARSE_TX_TIMEOUT
}
enum
IMPORTANT_DEVICES_LIST_SUCCESS = 0
IMPORTANT_DEVICES_LIST_UNKNOWN_NODE_ID = 1
IMPORTANT_DEVICES_LIST_NODE_ID_ALREADY_EXISTS = 2
IMPORTANT_DEVICES_LIST_NOT_ENOUGH_DEVICES = 3
IMPORTANT_DEVICES_LIST_WRONG_FRAME_INDEX = 4
IMPORTANT_DEVICES_LIST_WRONG_TOTAL_FRAME_COUNT = 5
IMPORTANT_DEVICES_LIST_TOO_MANY_DEVICES = 6
}

Typedefs#

typedef void(*
cmd_handler_t)(const comm_interface_frame_ptr)
typedef bool(*
cmd_foreach_callback_t)(cmd_handler_map_t const *const p_cmd_entry, uint8_t *supported_cmds_mask)
typedef void *
typedef void(*
transmit_done_cb_t)(transport_handle_t transport)

Functions#

bool
invoke_cmd_handler(const comm_interface_frame_ptr frame)

Invoke command handler.

void
cmd_foreach(cmd_foreach_callback_t callback, uint8_t *supported_cmds_mask)

Invokes callback for each registered command.

uint8_t
frame_payload_len(const comm_interface_frame_ptr frame)
void
comm_interface_transmit_frame(uint8_t cmd, uint8_t type, const uint8_t *payload, uint8_t len, transmit_done_cb_t cb)

Macros#

#define
CMD_HANDLER_SECTION "zw_cmd_handlers"
#define
#define

Non-payload overhead sizes for Send Data like commands.

#define
FRAME_LENGTH_MAX RECEIVE_BUFFER_SIZE
#define
ZW_MAX_IMPORTANT_DEVICES SL_HOST_HIBERNATION_DEVICE_TABLE_SIZE
#define
MAX_DEVICE_COUNT_PER_FRAME ((RECEIVE_BUFFER_SIZE - 8) / 4)

Each frame can contains up to 173 bytes of payload (RECEIVE_BUFFER_SIZE - 8) | SOF | LEN | TYPE | CMD ID | TOTAL_FRAME_COUNT | FRAME_INDEX | LIST_LENGTH | ... | CHECKSUM | each node need 2 bytes for node_id and 2 bytes for keep_alive_min so each frame can contains up to (RECEIVE_BUFFER_SIZE - 8) / 4 nodes so the max frame count is ZW_MAX_IMPORTANT_DEVICES / ((RECEIVE_BUFFER_SIZE - 8) / 4)

#define
S2_MSG_COUNT_ENTRIES_PER_FRAME ((BUF_SIZE_TX - 3) / 4)

Max entries per response frame: 3 bytes overhead (subcommand + length + more_to_follow), each entry is 4 bytes (NodeID MSB, NodeID LSB, S2 Message Count, Last Sequence Number).

Enumeration Documentation#

transport_type_t#

transport_type_t
Enumerator
TRANSPORT_TYPE_UART
TRANSPORT_TYPE_SPI
TRANSPORT_TYPE_ETHERNET
TRANSPORT_TYPE_UART
TRANSPORT_TYPE_SPI
TRANSPORT_TYPE_ETHERNET

comm_interface_parse_result_t#

comm_interface_parse_result_t
Enumerator
PARSE_IDLE
PARSE_FRAME_RECEIVED
PARSE_FRAME_SENT
PARSE_FRAME_ERROR
PARSE_RX_TIMEOUT
PARSE_TX_TIMEOUT
PARSE_IDLE
PARSE_FRAME_RECEIVED
PARSE_FRAME_SENT
PARSE_FRAME_ERROR
PARSE_RX_TIMEOUT
PARSE_TX_TIMEOUT

important_devices_list_error_t#

important_devices_list_error_t
Enumerator
IMPORTANT_DEVICES_LIST_SUCCESS
IMPORTANT_DEVICES_LIST_UNKNOWN_NODE_ID
IMPORTANT_DEVICES_LIST_NODE_ID_ALREADY_EXISTS
IMPORTANT_DEVICES_LIST_NOT_ENOUGH_DEVICES
IMPORTANT_DEVICES_LIST_WRONG_FRAME_INDEX
IMPORTANT_DEVICES_LIST_WRONG_TOTAL_FRAME_COUNT
IMPORTANT_DEVICES_LIST_TOO_MANY_DEVICES

Typedef Documentation#

cmd_handler_t#

typedef void(* cmd_handler_t) (const comm_interface_frame_ptr) )(const comm_interface_frame_ptr)

cmd_foreach_callback_t#

typedef bool(* cmd_foreach_callback_t) (cmd_handler_map_t const *const p_cmd_entry, uint8_t *supported_cmds_mask) )(cmd_handler_map_t const *const p_cmd_entry, uint8_t *supported_cmds_mask)

transport_handle_t#

typedef void* transport_handle_t

transmit_done_cb_t#

typedef void(* transmit_done_cb_t) (transport_handle_t transport) )(transport_handle_t transport)

transport_t#

typedef struct _transport_t transport_t

Variable Documentation#

serial_frame#

comm_interface_frame_ptr const serial_frame

Function Documentation#

invoke_cmd_handler#

bool invoke_cmd_handler (const comm_interface_frame_ptr frame)

Invoke command handler.

Parameters
TypeDirectionArgument NameDescription
const comm_interface_frame_ptr[in]frame

Frame

Returns

  • true if handler for given frame was invoked, false if no handler was found


cmd_foreach#

void cmd_foreach (cmd_foreach_callback_t callback, uint8_t * supported_cmds_mask)

Invokes callback for each registered command.

Parameters
TypeDirectionArgument NameDescription
cmd_foreach_callback_tN/Acallback

Callback function to invoke.

uint8_t *N/Asupported_cmds_mask

Bitmask of supported commands to pass to the callback function.

Will stop if the callback returns true.


frame_payload_len#

static uint8_t frame_payload_len (const comm_interface_frame_ptr frame)
Parameters
TypeDirectionArgument NameDescription
const comm_interface_frame_ptrN/Aframe

comm_interface_transmit_frame#

void comm_interface_transmit_frame (uint8_t cmd, uint8_t type, const uint8_t * payload, uint8_t len, transmit_done_cb_t cb)
Parameters
TypeDirectionArgument NameDescription
uint8_tN/Acmd
uint8_tN/Atype
const uint8_t *N/Apayload
uint8_tN/Alen
transmit_done_cb_tN/Acb

comm_interface_wait_transmit_done#

void comm_interface_wait_transmit_done (void )
Parameters
TypeDirectionArgument NameDescription
voidN/A

comm_interface_init#

void comm_interface_init (void )
Parameters
TypeDirectionArgument NameDescription
voidN/A

comm_interface_get_ack_timeout_ms#

uint32_t comm_interface_get_ack_timeout_ms (void )
Parameters
TypeDirectionArgument NameDescription
voidN/A

comm_interface_set_ack_timeout_ms#

void comm_interface_set_ack_timeout_ms (uint32_t t)
Parameters
TypeDirectionArgument NameDescription
uint32_tN/At

comm_interface_get_byte_timeout_ms#

uint32_t comm_interface_get_byte_timeout_ms (void )
Parameters
TypeDirectionArgument NameDescription
voidN/A

comm_interface_set_byte_timeout_ms#

void comm_interface_set_byte_timeout_ms (uint32_t t)
Parameters
TypeDirectionArgument NameDescription
uint32_tN/At

comm_interface_parse_data#

comm_interface_parse_result_t comm_interface_parse_data (bool ack)
Parameters
TypeDirectionArgument NameDescription
boolN/Aack

Macro Definition Documentation#

CMD_HANDLER_SECTION#

#define CMD_HANDLER_SECTION
Value:
"zw_cmd_handlers"

ZW_ADD_CMD#

#define ZW_ADD_CMD
Value:
static void cmd_handler_fcn_##cmd(__attribute__((unused)) const comm_interface_frame_ptr frame); /* Prototype */ \
static const cmd_handler_map_t cmd_handler_##cmd __attribute__((__used__, __section__(CMD_HANDLER_SECTION))) = { (cmd), cmd_handler_fcn_##cmd }; \
static void cmd_handler_fcn_##cmd(__attribute__((unused)) const comm_interface_frame_ptr frame)

SEND_DATA_FRAME_OVERHEAD#

#define SEND_DATA_FRAME_OVERHEAD
Value:
4

Non-payload overhead sizes for Send Data like commands.

Used to check that inside dataLength field is consistent with actual frame length.

The minimum required payload length for each command is: variable_offset + OVERHEAD + dataLength


SEND_DATA_EX_FRAME_OVERHEAD#

#define SEND_DATA_EX_FRAME_OVERHEAD
Value:
7

SEND_DATA_MULTI_FRAME_OVERHEAD#

#define SEND_DATA_MULTI_FRAME_OVERHEAD
Value:
4

SEND_DATA_MULTI_EX_FRAME_OVERHEAD#

#define SEND_DATA_MULTI_EX_FRAME_OVERHEAD
Value:
5

SEND_DATA_BRIDGE_FRAME_OVERHEAD#

#define SEND_DATA_BRIDGE_FRAME_OVERHEAD
Value:
9

SEND_DATA_MULTI_BRIDGE_FRAME_OVERHEAD#

#define SEND_DATA_MULTI_BRIDGE_FRAME_OVERHEAD
Value:
5

RECEIVE_BUFFER_SIZE#

#define RECEIVE_BUFFER_SIZE
Value:
180

FRAME_LENGTH_MIN#

#define FRAME_LENGTH_MIN
Value:
3

FRAME_LENGTH_MAX#

#define FRAME_LENGTH_MAX
Value:
RECEIVE_BUFFER_SIZE

ZW_MAX_IMPORTANT_DEVICES#

#define ZW_MAX_IMPORTANT_DEVICES
Value:
SL_HOST_HIBERNATION_DEVICE_TABLE_SIZE

MAX_DEVICE_COUNT_PER_FRAME#

#define MAX_DEVICE_COUNT_PER_FRAME
Value:
((RECEIVE_BUFFER_SIZE - 8) / 4)

Each frame can contains up to 173 bytes of payload (RECEIVE_BUFFER_SIZE - 8) | SOF | LEN | TYPE | CMD ID | TOTAL_FRAME_COUNT | FRAME_INDEX | LIST_LENGTH | ... | CHECKSUM | each node need 2 bytes for node_id and 2 bytes for keep_alive_min so each frame can contains up to (RECEIVE_BUFFER_SIZE - 8) / 4 nodes so the max frame count is ZW_MAX_IMPORTANT_DEVICES / ((RECEIVE_BUFFER_SIZE - 8) / 4)


S2_MSG_COUNT_ENTRIES_PER_FRAME#

#define S2_MSG_COUNT_ENTRIES_PER_FRAME
Value:
((BUF_SIZE_TX - 3) / 4)

Max entries per response frame: 3 bytes overhead (subcommand + length + more_to_follow), each entry is 4 bytes (NodeID MSB, NodeID LSB, S2 Message Count, Last Sequence Number).


HOST_SLEEP_SUBCOMMAND_LIST_IMPORTANT_DEVICES#

#define HOST_SLEEP_SUBCOMMAND_LIST_IMPORTANT_DEVICES
Value:
0x00

HOST_SLEEP_SUBCOMMAND_CLEAR_IMPORTANT_DEVICES_LIST#

#define HOST_SLEEP_SUBCOMMAND_CLEAR_IMPORTANT_DEVICES_LIST
Value:
0x01

HOST_SLEEP_SUBCOMMAND_NOTIFY_HOST_STATE#

#define HOST_SLEEP_SUBCOMMAND_NOTIFY_HOST_STATE
Value:
0x02

HOST_SLEEP_SUBCOMMAND_ZW_MODULE_CAPABILITIES_REPORT#

#define HOST_SLEEP_SUBCOMMAND_ZW_MODULE_CAPABILITIES_REPORT
Value:
0x03

HOST_SLEEP_SUBCOMMAND_REQUEST_WAKEUP_REPORT#

#define HOST_SLEEP_SUBCOMMAND_REQUEST_WAKEUP_REPORT
Value:
0x04

HOST_SLEEP_SUBCOMMAND_DEVICE_LOST_REPORT#

#define HOST_SLEEP_SUBCOMMAND_DEVICE_LOST_REPORT
Value:
0x05

HOST_SLEEP_SUBCOMMAND_REQUEST_S2_MESSAGE_COUNT#

#define HOST_SLEEP_SUBCOMMAND_REQUEST_S2_MESSAGE_COUNT
Value:
0x06

HOST_SLEEP_SUBCOMMAND_UNKNOWN#

#define HOST_SLEEP_SUBCOMMAND_UNKNOWN
Value:
0xFF

NOTIFY_HOST_STATE_AWAKE#

#define NOTIFY_HOST_STATE_AWAKE
Value:
0x00

NOTIFY_HOST_STATE_SLEEPING#

#define NOTIFY_HOST_STATE_SLEEPING
Value:
0x01

IMPORTANT_DEVICES_LIST_DEVICE_SIZE#

#define IMPORTANT_DEVICES_LIST_DEVICE_SIZE
Value:
4

IMPORTANT_DEVICES_LIST_HEADER_SIZE#

#define IMPORTANT_DEVICES_LIST_HEADER_SIZE
Value:
4