MeshX 0.4
This repository provides an implementation for Bluetooth Low Energy (BLE) Mesh network nodes. The project allows you to create BLE mesh nodes that can communicate with each other, enabling the development of smart home solutions or other IoT-based applications.
Loading...
Searching...
No Matches
meshx_serial.h File Reference

MeshX Serial Protocol (MXSP) Definitions. More...

#include "meshx_common.h"
#include "meshx_api.h"

Go to the source code of this file.

Data Structures

struct  mxsp_gpio_cmd_payload_t
 GPIO Command Payload (Host -> Engine). More...
struct  mxsp_gpio_rsp_payload_t
 GPIO Response Payload (Engine -> Host). More...
struct  mxsp_gpio_evt_payload_t
 GPIO Event Payload (Engine -> Host, async). More...
struct  mxsp_frame_t
 MXSP Frame structure. More...

Macros

#define MXSP_SOF   0xFE
#define MXSP_EOF   0xEF
#define MXSP_PAYLOAD_MAX_SIZE   255

Enumerations

enum  mxsp_msg_type_t {
  MXSP_MSG_TYPE_SYS_EVT_NOTIFY = 0xB1 ,
  MXSP_MSG_TYPE_DATA_EVT_NOTIFY = 0xB2 ,
  MXSP_MSG_TYPE_EL_CMD_SEND = 0xC1 ,
  MXSP_MSG_TYPE_SYS_CMD_SEND = 0xC2 ,
  MXSP_MSG_TYPE_HOSTED_MODE = 0x03 ,
  MXSP_MSG_TYPE_GPIO_CMD = 0xD1 ,
  MXSP_MSG_TYPE_GPIO_RSP = 0xD2 ,
  MXSP_MSG_TYPE_GPIO_EVT = 0xD3
}
enum  mxsp_gpio_cmd_t {
  MXSP_GPIO_CMD_SET_LEVEL = 0x01 ,
  MXSP_GPIO_CMD_GET_LEVEL = 0x02 ,
  MXSP_GPIO_CMD_TOGGLE = 0x03 ,
  MXSP_GPIO_CMD_SET_PWM_DUTY = 0x04 ,
  MXSP_GPIO_CMD_SET_PWM_FREQ = 0x05 ,
  MXSP_GPIO_CMD_INTR_ENABLE = 0x06 ,
  MXSP_GPIO_CMD_INTR_DISABLE = 0x07 ,
  MXSP_GPIO_CMD_GET_CONFIG = 0x08 ,
  MXSP_GPIO_CMD_GET_STATE = 0x09
}
 GPIO Command Types (Host -> Engine). More...
enum  mxsp_gpio_evt_t {
  MXSP_GPIO_EVT_LEVEL_CHANGE = 0x01 ,
  MXSP_GPIO_EVT_INTERRUPT = 0x02 ,
  MXSP_GPIO_EVT_MODE_CHANGE = 0x03 ,
  MXSP_GPIO_EVT_ERROR = 0xFF
}
 GPIO Event Types (Engine -> Host, async). More...

Functions

void meshx_serial_set_hosted_mode (bool enabled)
 Set the hosted mode state.
bool meshx_serial_is_hosted_mode_enabled (void)
 Check if hosted mode is enabled.
meshx_err_t meshx_serial_init (void)
 Initialize the MeshX Serial Protocol handler.
void meshx_serial_parse_byte (uint8_t data)
 Parse incoming byte stream for MXSP frames.
meshx_err_t mxsp_send_ctrl_event (const meshx_ctrl_msg_header_t *evt_header, const meshx_ctrl_payload_t *payload)
 Send a control event via MXSP.
meshx_err_t mxsp_send_data_event (const meshx_app_element_msg_header_t *msg_hdr, const meshx_data_payload_t *payload)
 Send data event via MXSP.
meshx_err_t mxsp_send_gpio_rsp (uint8_t cmd, uint8_t logical_pin, uint8_t status, const uint8_t *response, uint8_t response_len)
 Send GPIO response via MXSP.
meshx_err_t mxsp_send_gpio_evt (uint8_t event_type, uint8_t logical_pin, uint8_t value)
 Send GPIO async event via MXSP.

Detailed Description

MeshX Serial Protocol (MXSP) Definitions.

This file defines the frame structure and APIs for the MeshX Serial Protocol, used for communication between the Mesh engine and an external Host MCU.

Macro Definition Documentation

◆ MXSP_EOF

#define MXSP_EOF   0xEF

◆ MXSP_PAYLOAD_MAX_SIZE

#define MXSP_PAYLOAD_MAX_SIZE   255

◆ MXSP_SOF

#define MXSP_SOF   0xFE

Enumeration Type Documentation

◆ mxsp_gpio_cmd_t

GPIO Command Types (Host -> Engine).

Enumerator
MXSP_GPIO_CMD_SET_LEVEL 0x01 

Set GPIO pin level

MXSP_GPIO_CMD_GET_LEVEL 0x02 

Get GPIO pin level

MXSP_GPIO_CMD_TOGGLE 0x03 

Toggle GPIO pin

MXSP_GPIO_CMD_SET_PWM_DUTY 0x04 

Set PWM duty cycle

MXSP_GPIO_CMD_SET_PWM_FREQ 0x05 

Set PWM frequency

MXSP_GPIO_CMD_INTR_ENABLE 0x06 

Enable/disable interrupt

MXSP_GPIO_CMD_INTR_DISABLE 0x07 

Disable interrupt

MXSP_GPIO_CMD_GET_CONFIG 0x08 

Get pin configuration

MXSP_GPIO_CMD_GET_STATE 0x09 

Get pin state

53 {
54 MXSP_GPIO_CMD_SET_LEVEL = 0x01, /**< Set GPIO pin level */
55 MXSP_GPIO_CMD_GET_LEVEL = 0x02, /**< Get GPIO pin level */
56 MXSP_GPIO_CMD_TOGGLE = 0x03, /**< Toggle GPIO pin */
57 MXSP_GPIO_CMD_SET_PWM_DUTY = 0x04, /**< Set PWM duty cycle */
58 MXSP_GPIO_CMD_SET_PWM_FREQ = 0x05, /**< Set PWM frequency */
59 MXSP_GPIO_CMD_INTR_ENABLE = 0x06, /**< Enable/disable interrupt */
60 MXSP_GPIO_CMD_INTR_DISABLE = 0x07, /**< Disable interrupt */
61 MXSP_GPIO_CMD_GET_CONFIG = 0x08, /**< Get pin configuration */
62 MXSP_GPIO_CMD_GET_STATE = 0x09, /**< Get pin state */
mxsp_gpio_cmd_t
GPIO Command Types (Host -> Engine).
Definition meshx_serial.h:53
@ MXSP_GPIO_CMD_SET_PWM_FREQ
Definition meshx_serial.h:58
@ MXSP_GPIO_CMD_GET_CONFIG
Definition meshx_serial.h:61
@ MXSP_GPIO_CMD_GET_STATE
Definition meshx_serial.h:62
@ MXSP_GPIO_CMD_INTR_ENABLE
Definition meshx_serial.h:59
@ MXSP_GPIO_CMD_TOGGLE
Definition meshx_serial.h:56
@ MXSP_GPIO_CMD_SET_LEVEL
Definition meshx_serial.h:54
@ MXSP_GPIO_CMD_GET_LEVEL
Definition meshx_serial.h:55
@ MXSP_GPIO_CMD_INTR_DISABLE
Definition meshx_serial.h:60
@ MXSP_GPIO_CMD_SET_PWM_DUTY
Definition meshx_serial.h:57

◆ mxsp_gpio_evt_t

GPIO Event Types (Engine -> Host, async).

Enumerator
MXSP_GPIO_EVT_LEVEL_CHANGE 0x01 

Pin level changed

MXSP_GPIO_EVT_INTERRUPT 0x02 

Interrupt triggered

MXSP_GPIO_EVT_MODE_CHANGE 0x03 

Mode changed

MXSP_GPIO_EVT_ERROR 0xFF 

Error event

68 {
69 MXSP_GPIO_EVT_LEVEL_CHANGE = 0x01, /**< Pin level changed */
70 MXSP_GPIO_EVT_INTERRUPT = 0x02, /**< Interrupt triggered */
71 MXSP_GPIO_EVT_MODE_CHANGE = 0x03, /**< Mode changed */
72 MXSP_GPIO_EVT_ERROR = 0xFF, /**< Error event */
mxsp_gpio_evt_t
GPIO Event Types (Engine -> Host, async).
Definition meshx_serial.h:68
@ MXSP_GPIO_EVT_MODE_CHANGE
Definition meshx_serial.h:71
@ MXSP_GPIO_EVT_INTERRUPT
Definition meshx_serial.h:70
@ MXSP_GPIO_EVT_ERROR
Definition meshx_serial.h:72
@ MXSP_GPIO_EVT_LEVEL_CHANGE
Definition meshx_serial.h:69

◆ mxsp_msg_type_t

Enumerator
MXSP_MSG_TYPE_SYS_EVT_NOTIFY 0xB1 
MXSP_MSG_TYPE_DATA_EVT_NOTIFY 0xB2 
MXSP_MSG_TYPE_EL_CMD_SEND 0xC1 
MXSP_MSG_TYPE_SYS_CMD_SEND 0xC2 
MXSP_MSG_TYPE_HOSTED_MODE 0x03 
MXSP_MSG_TYPE_GPIO_CMD 0xD1 
MXSP_MSG_TYPE_GPIO_RSP 0xD2 
MXSP_MSG_TYPE_GPIO_EVT 0xD3 
24 {
25 MXSP_MSG_TYPE_SYS_EVT_NOTIFY = 0xB1, // Engine -> Host (Control Path)
26 MXSP_MSG_TYPE_DATA_EVT_NOTIFY = 0xB2, // Engine -> Host (Data Path)
27 MXSP_MSG_TYPE_EL_CMD_SEND = 0xC1, // Host -> Engine (Command Path)
28 MXSP_MSG_TYPE_SYS_CMD_SEND = 0xC2, // Host -> Engine (System Command)
29 MXSP_MSG_TYPE_HOSTED_MODE = 0x03, // Internal/Setup
30 /* GPIO Hosted Mode Message Types */
31 MXSP_MSG_TYPE_GPIO_CMD = 0xD1, // Host -> Engine (GPIO Command)
32 MXSP_MSG_TYPE_GPIO_RSP = 0xD2, // Engine -> Host (GPIO Response)
33 MXSP_MSG_TYPE_GPIO_EVT = 0xD3, // Engine -> Host (GPIO Event - async)
mxsp_msg_type_t
Definition meshx_serial.h:24
@ MXSP_MSG_TYPE_GPIO_EVT
Definition meshx_serial.h:33
@ MXSP_MSG_TYPE_SYS_EVT_NOTIFY
Definition meshx_serial.h:25
@ MXSP_MSG_TYPE_GPIO_CMD
Definition meshx_serial.h:31
@ MXSP_MSG_TYPE_DATA_EVT_NOTIFY
Definition meshx_serial.h:26
@ MXSP_MSG_TYPE_SYS_CMD_SEND
Definition meshx_serial.h:28
@ MXSP_MSG_TYPE_EL_CMD_SEND
Definition meshx_serial.h:27
@ MXSP_MSG_TYPE_GPIO_RSP
Definition meshx_serial.h:32
@ MXSP_MSG_TYPE_HOSTED_MODE
Definition meshx_serial.h:29

Function Documentation

◆ meshx_serial_init()

meshx_err_t meshx_serial_init ( void )

Initialize the MeshX Serial Protocol handler.

Returns
meshx_err_t MESHX_SUCCESS on success

Initialize the MeshX Serial Protocol handler.

Returns
MESHX_SUCCESS on success, error code otherwise
518{
519 memset(&mxsp_ctx, 0, sizeof(mxsp_ctx));
520 mxsp_ctx.state = STATE_SOF;
521 mxsp_ctx.hosted_mode_enabled = false;
522
523 meshx_task_t uart_rx_task;
524 uart_rx_task.task_cb = mxsp_uart_rx_task;
525 uart_rx_task.task_name = "mxsp_uart_rx";
527 uart_rx_task.priority = MESHX_UART_RX_TASK_PRIO;
528 uart_rx_task.arg = NULL;
529 /* Create UART RX Task */
530 meshx_task_create(&uart_rx_task);
531
532 /* Register GPIO hosted event callback */
534
535 return MESHX_SUCCESS;
536}
meshx_err_t meshx_gpio_register_hosted_event_cb(meshx_gpio_hosted_event_cb_t callback)
Register callback function for hosted mode events.
Definition meshx_gpio.c:802
**This function is called by the parent element when a state change request *is received It validates the request and returns a result to the element not the model layer **return * MESHX_SUCCESS
Definition meshx_model_level.cpp:385
@ STATE_SOF
Definition meshx_serial.c:46
static struct @217313375257260000277136332076024345071273230342 mxsp_ctx
static void meshx_gpio_hosted_event_handler(const meshx_gpio_hosted_event_t *event)
GPIO hosted mode event callback.
Definition meshx_serial.c:481
#define MESHX_UART_RX_TASK_STACK_SIZE
Definition meshx_serial.c:30
static void mxsp_uart_rx_task(void *pvParameters)
UART RX task to parse incoming MXSP frames.
Definition meshx_serial.c:462
#define MESHX_UART_RX_TASK_PRIO
Priority level for the UART RX task.
Definition meshx_serial.c:35
struct meshx_task meshx_task_t
MeshX Task Structure.
meshx_err_t meshx_task_create(meshx_task_t *task_handle)
Create a MeshX Task.
const char * task_name
Definition meshx_task.h:34
size_t stack_size
Definition meshx_task.h:36
int priority
Definition meshx_task.h:37
void * arg
Definition meshx_task.h:35
meshx_task_cb_t task_cb
Definition meshx_task.h:38

◆ meshx_serial_is_hosted_mode_enabled()

bool meshx_serial_is_hosted_mode_enabled ( void )

Check if hosted mode is enabled.

Returns
true if enabled, false otherwise
455{
456 return mxsp_ctx.hosted_mode_enabled;
457}

◆ meshx_serial_parse_byte()

void meshx_serial_parse_byte ( uint8_t data)

Parse incoming byte stream for MXSP frames.

Parameters
dataByte to parse
363{
364 switch (mxsp_ctx.state) {
365 case STATE_SOF:
366 if (data == MXSP_SOF) {
367 mxsp_ctx.state = STATE_LEN;
368 mxsp_ctx.rx_ptr = 0;
369 }
370 break;
371 case STATE_LEN:
372 mxsp_ctx.rx_frame.len = data;
373 mxsp_ctx.state = STATE_TYPE;
374 break;
375 case STATE_TYPE:
376 mxsp_ctx.rx_frame.type = data;
377 if (mxsp_ctx.rx_frame.len == 0) {
378 mxsp_ctx.state = STATE_CHECKSUM;
379 } else {
380 mxsp_ctx.state = STATE_PAYLOAD;
381 }
382 break;
383 case STATE_PAYLOAD:
384 mxsp_ctx.rx_frame.payload[mxsp_ctx.rx_ptr++] = data;
385 if (mxsp_ctx.rx_ptr >= mxsp_ctx.rx_frame.len) {
386 mxsp_ctx.state = STATE_CHECKSUM;
387 }
388 break;
389 case STATE_CHECKSUM:
390 mxsp_ctx.rx_frame.checksum = data;
391 mxsp_ctx.state = STATE_EOF;
392 break;
393 case STATE_EOF:
394 if (data == MXSP_EOF) {
395 if (calculate_checksum(mxsp_ctx.rx_frame.len, mxsp_ctx.rx_frame.type, mxsp_ctx.rx_frame.payload) == mxsp_ctx.rx_frame.checksum) {
396 if (mxsp_ctx.rx_frame.type == MXSP_MSG_TYPE_EL_CMD_SEND) {
398 if (mxsp_ctx.rx_frame.len >= sizeof(hdr)) {
399 memcpy(&hdr, mxsp_ctx.rx_frame.payload, sizeof(hdr));
401 mxsp_ctx.rx_frame.len - sizeof(hdr),
402 &mxsp_ctx.rx_frame.payload[sizeof(hdr)]);
403 }
404 } else if (mxsp_ctx.rx_frame.type == MXSP_MSG_TYPE_SYS_CMD_SEND) {
406 if (mxsp_ctx.rx_frame.len >= sizeof(hdr)) {
407 memcpy(&hdr, mxsp_ctx.rx_frame.payload, sizeof(hdr));
410 }
411 }
412 } else if (mxsp_ctx.rx_frame.type == MXSP_MSG_TYPE_HOSTED_MODE) {
413 if (mxsp_ctx.rx_frame.len == 1) {
414 bool enabled = (mxsp_ctx.rx_frame.payload[0] != 0);
415 mxsp_ctx.hosted_mode_enabled = enabled;
416
417 /* Notify GPIO subsystem about hosted mode change */
418 meshx_gpio_hosted_mode_t gpio_mode = enabled ?
421 if (err != MESHX_SUCCESS) {
422 MESHX_LOGE(MODULE_ID_COMMON, "Failed to set GPIO hosted mode: %d", err);
423 }
424
425 MESHX_LOGI(MODULE_ID_COMMON, "Hosted mode %s via API TLV command",
426 enabled ? "enabled" : "disabled");
427 }
428 } else if (mxsp_ctx.rx_frame.type == MXSP_MSG_TYPE_GPIO_CMD) {
429 /* Handle GPIO command from host */
430 mxsp_handle_gpio_cmd(mxsp_ctx.rx_frame.payload, mxsp_ctx.rx_frame.len);
431 } else if (mxsp_ctx.rx_frame.type == MXSP_MSG_TYPE_GPIO_EVT) {
432 /* Handle GPIO event from host (interrupt notification) */
433 mxsp_handle_gpio_evt_from_host(mxsp_ctx.rx_frame.payload, mxsp_ctx.rx_frame.len);
434 }
435 } else {
436 MESHX_LOGE(MODULE_ID_COMMON, "Invalid MXSP frame checksum");
437 }
438 }
439 mxsp_ctx.state = STATE_SOF;
440 break;
441 }
442}
meshx_err_t meshx_send_msg_to_element(uint16_t element_id, uint16_t element_type, uint16_t func_id, uint16_t msg_len, const void *msg)
Sends a message to the element.
Definition meshx_api.c:182
struct meshx_ctrl_msg_header meshx_ctrl_msg_header_t
Structure for the BLE Mesh application control message header.
struct meshx_app_element_msg_header meshx_app_element_msg_header_t
Structure for the BLE Mesh application element message header.
@ MESHX_CTRL_EVT_NODE_RESET
Definition meshx_common.h:32
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43
meshx_err_t meshx_gpio_set_hosted_mode(meshx_gpio_hosted_mode_t mode)
Set hosted mode for GPIO subsystem.
Definition meshx_gpio.c:711
meshx_gpio_hosted_mode_t
Hosted Mode State.
Definition meshx_gpio_types.h:169
@ MESHX_GPIO_MODE_NON_HOSTED
Definition meshx_gpio_types.h:170
@ MESHX_GPIO_MODE_HOSTED
Definition meshx_gpio_types.h:171
#define MESHX_LOGI(module_id, format,...)
Definition meshx_log.h:126
#define MESHX_LOGE(module_id, format,...)
Definition meshx_log.h:114
static uint8_t calculate_checksum(uint8_t len, uint8_t type, const uint8_t *payload)
Calculate checksum for a given frame.
Definition meshx_serial.c:63
@ STATE_CHECKSUM
Definition meshx_serial.c:50
@ STATE_PAYLOAD
Definition meshx_serial.c:49
@ STATE_LEN
Definition meshx_serial.c:47
@ STATE_TYPE
Definition meshx_serial.c:48
@ STATE_EOF
Definition meshx_serial.c:51
static void mxsp_handle_gpio_cmd(const uint8_t *payload, uint8_t len)
Handle GPIO command from host.
Definition meshx_serial.c:198
static void mxsp_handle_gpio_evt_from_host(const uint8_t *payload, uint8_t len)
Handle GPIO event from host (interrupt notification).
Definition meshx_serial.c:345
void meshx_platform_reset(void)
Resets the MeshX platform. This function performs a system reset, restarting the platform.
Definition esp_platform.c:89
#define MXSP_SOF
Definition meshx_serial.h:19
#define MXSP_EOF
Definition meshx_serial.h:20
@ MODULE_ID_COMMON
Definition module_id.h:36
uint16_t element_id
Definition meshx_api.h:184
uint16_t func_id
Definition meshx_api.h:186
uint16_t element_type
Definition meshx_api.h:185
uint16_t evt_id
Definition meshx_api.h:198

◆ meshx_serial_set_hosted_mode()

void meshx_serial_set_hosted_mode ( bool enabled)

Set the hosted mode state.

Parameters
enabledTrue to enable, false to disable
445{
446 mxsp_ctx.hosted_mode_enabled = enabled;
447
448 /* Also update GPIO subsystem hosted mode */
449 meshx_gpio_hosted_mode_t gpio_mode = enabled ?
452}

◆ mxsp_send_ctrl_event()

meshx_err_t mxsp_send_ctrl_event ( const meshx_ctrl_msg_header_t * evt_header,
const meshx_ctrl_payload_t * payload )

Send a control event via MXSP.

Parameters
evt_headerControl message header
payloadControl message payload
Returns
meshx_err_t MESHX_SUCCESS on success
119{
120 if (!mxsp_ctx.hosted_mode_enabled) {
121 return MESHX_SUCCESS;
122 }
123 uint8_t buff[sizeof(meshx_ctrl_msg_header_t) + sizeof(meshx_ctrl_payload_t)];
124 uint8_t len = 0;
125
126 memcpy(&buff[len], evt_header, sizeof(meshx_ctrl_msg_header_t));
127 len += sizeof(meshx_ctrl_msg_header_t);
128
129 // For simplicity, we send the whole payload union. In optimization, we could send only active part.
130 memcpy(&buff[len], payload, sizeof(meshx_ctrl_payload_t));
131 len += sizeof(meshx_ctrl_payload_t);
132
134}
union meshx_ctrl_payload meshx_ctrl_payload_t
Structure defines the payload for meshx_ctrl_payload.
meshx_err_t mxsp_send_frame(mxsp_msg_type_t type, const uint8_t *payload, uint8_t len)
Definition meshx_serial.c:99

◆ mxsp_send_data_event()

meshx_err_t mxsp_send_data_event ( const meshx_app_element_msg_header_t * msg_hdr,
const meshx_data_payload_t * payload )

Send data event via MXSP.

Parameters
msg_hdrData message header
payloadData message payload
Returns
meshx_err_t MESHX_SUCCESS on success
137{
138 if (!mxsp_ctx.hosted_mode_enabled) {
139 return MESHX_SUCCESS;
140 }
141 uint8_t buff[sizeof(meshx_app_element_msg_header_t) + sizeof(meshx_data_payload_t)];
142 uint8_t len = 0;
143
144 memcpy(&buff[len], msg_hdr, sizeof(meshx_app_element_msg_header_t));
145 len += sizeof(meshx_app_element_msg_header_t);
146
147 memcpy(&buff[len], payload, sizeof(meshx_data_payload_t));
148 len += sizeof(meshx_data_payload_t);
149
151}
union meshx_data_payload meshx_data_payload_t
Structure for the BLE Mesh application control message.

◆ mxsp_send_gpio_evt()

meshx_err_t mxsp_send_gpio_evt ( uint8_t event_type,
uint8_t logical_pin,
uint8_t value )

Send GPIO async event via MXSP.

Parameters
event_typeEvent type (mxsp_gpio_evt_t)
logical_pinLogical pin number
valueEvent value
Returns
meshx_err_t MESHX_SUCCESS on success
175{
176 if (!mxsp_ctx.hosted_mode_enabled) {
177 return MESHX_SUCCESS;
178 }
179
181 memset(&evt, 0, sizeof(evt));
182
183 evt.event_type = event_type;
184 evt.logical_pin = logical_pin;
185 evt.value = value;
186 evt.reserved = 0;
188
189 return mxsp_send_frame(MXSP_MSG_TYPE_GPIO_EVT, (const uint8_t*)&evt, sizeof(evt));
190}
static uint32_t meshx_get_sys_time_ms(void)
Get system time in milliseconds.
Definition meshx_serial.c:92
GPIO Event Payload (Engine -> Host, async).
Definition meshx_serial.h:101
uint8_t event_type
Definition meshx_serial.h:102
uint8_t logical_pin
Definition meshx_serial.h:103
uint32_t timestamp
Definition meshx_serial.h:106
uint8_t value
Definition meshx_serial.h:104
uint8_t reserved
Definition meshx_serial.h:105

◆ mxsp_send_gpio_rsp()

meshx_err_t mxsp_send_gpio_rsp ( uint8_t cmd,
uint8_t logical_pin,
uint8_t status,
const uint8_t * response,
uint8_t response_len )

Send GPIO response via MXSP.

Parameters
cmdOriginal command type
logical_pinLogical pin number
statusStatus code (0 = success)
responseResponse data
response_lenResponse data length
Returns
meshx_err_t MESHX_SUCCESS on success
155{
156 if (!mxsp_ctx.hosted_mode_enabled) {
157 return MESHX_SUCCESS;
158 }
159
161 memset(&rsp, 0, sizeof(rsp));
162
163 rsp.cmd = cmd;
164 rsp.logical_pin = logical_pin;
165 rsp.status = status;
166 rsp.response_len = (response_len > 8) ? 8 : response_len;
167 if (response != NULL && rsp.response_len > 0) {
168 memcpy(rsp.response, response, rsp.response_len);
169 }
170
171 return mxsp_send_frame(MXSP_MSG_TYPE_GPIO_RSP, (const uint8_t*)&rsp, sizeof(rsp));
172}
GPIO Response Payload (Engine -> Host).
Definition meshx_serial.h:90
uint8_t response[8]
Definition meshx_serial.h:95
uint8_t status
Definition meshx_serial.h:93
uint8_t logical_pin
Definition meshx_serial.h:92
uint8_t cmd
Definition meshx_serial.h:91
uint8_t response_len
Definition meshx_serial.h:94