samples: net: mqtt: Add userspace support to mqtt_publisher
Allow mqtt_publisher sample application to be run in user mode. Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
parent
f08045f077
commit
6cec40e8cf
2 changed files with 72 additions and 26 deletions
|
@ -1,12 +1,15 @@
|
||||||
sample:
|
sample:
|
||||||
description: TBD
|
description: MQTT publisher sample application
|
||||||
name: TBD
|
name: MQTT publisher
|
||||||
|
common:
|
||||||
|
harness: net
|
||||||
|
tags: net mqtt
|
||||||
tests:
|
tests:
|
||||||
sample.net.mqtt_publisher:
|
sample.net.mqtt_publisher:
|
||||||
harness: net
|
|
||||||
platform_whitelist: frdm_k64f qemu_x86
|
platform_whitelist: frdm_k64f qemu_x86
|
||||||
tags: net mqtt
|
sample.net.mqtt_publisher.userspace:
|
||||||
|
platform_whitelist: frdm_k64f qemu_x86
|
||||||
|
extra_args: CONFIG_USERSPACE=y
|
||||||
sample.net.mqtt_publisher.bt:
|
sample.net.mqtt_publisher.bt:
|
||||||
harness: net
|
|
||||||
platform_whitelist: 96b_nitrogen
|
platform_whitelist: 96b_nitrogen
|
||||||
tags: net mqtt bluetooth
|
tags: net mqtt bluetooth
|
||||||
|
|
|
@ -16,32 +16,43 @@ LOG_MODULE_REGISTER(net_mqtt_publisher_sample, LOG_LEVEL_DBG);
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_USERSPACE)
|
||||||
|
#include <app_memory/app_memdomain.h>
|
||||||
|
K_APPMEM_PARTITION_DEFINE(app_partition);
|
||||||
|
struct k_mem_domain app_domain;
|
||||||
|
#define APP_BMEM K_APP_BMEM(app_partition)
|
||||||
|
#define APP_DMEM K_APP_DMEM(app_partition)
|
||||||
|
#else
|
||||||
|
#define APP_BMEM
|
||||||
|
#define APP_DMEM
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Buffers for MQTT client. */
|
/* Buffers for MQTT client. */
|
||||||
static uint8_t rx_buffer[APP_MQTT_BUFFER_SIZE];
|
static APP_BMEM uint8_t rx_buffer[APP_MQTT_BUFFER_SIZE];
|
||||||
static uint8_t tx_buffer[APP_MQTT_BUFFER_SIZE];
|
static APP_BMEM uint8_t tx_buffer[APP_MQTT_BUFFER_SIZE];
|
||||||
|
|
||||||
#if defined(CONFIG_MQTT_LIB_WEBSOCKET)
|
#if defined(CONFIG_MQTT_LIB_WEBSOCKET)
|
||||||
/* Making RX buffer large enough that the full IPv6 packet can fit into it */
|
/* Making RX buffer large enough that the full IPv6 packet can fit into it */
|
||||||
#define MQTT_LIB_WEBSOCKET_RECV_BUF_LEN 1280
|
#define MQTT_LIB_WEBSOCKET_RECV_BUF_LEN 1280
|
||||||
|
|
||||||
/* Websocket needs temporary buffer to store partial packets */
|
/* Websocket needs temporary buffer to store partial packets */
|
||||||
static uint8_t temp_ws_rx_buf[MQTT_LIB_WEBSOCKET_RECV_BUF_LEN];
|
static APP_BMEM uint8_t temp_ws_rx_buf[MQTT_LIB_WEBSOCKET_RECV_BUF_LEN];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The mqtt client struct */
|
/* The mqtt client struct */
|
||||||
static struct mqtt_client client_ctx;
|
static APP_BMEM struct mqtt_client client_ctx;
|
||||||
|
|
||||||
/* MQTT Broker details. */
|
/* MQTT Broker details. */
|
||||||
static struct sockaddr_storage broker;
|
static APP_BMEM struct sockaddr_storage broker;
|
||||||
|
|
||||||
#if defined(CONFIG_SOCKS)
|
#if defined(CONFIG_SOCKS)
|
||||||
static struct sockaddr socks5_proxy;
|
static APP_BMEM struct sockaddr socks5_proxy;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct pollfd fds[1];
|
static APP_BMEM struct pollfd fds[1];
|
||||||
static int nfds;
|
static APP_BMEM int nfds;
|
||||||
|
|
||||||
static bool connected;
|
static APP_BMEM bool connected;
|
||||||
|
|
||||||
#if defined(CONFIG_MQTT_LIB_TLS)
|
#if defined(CONFIG_MQTT_LIB_TLS)
|
||||||
|
|
||||||
|
@ -51,7 +62,7 @@ static bool connected;
|
||||||
#define APP_CA_CERT_TAG 1
|
#define APP_CA_CERT_TAG 1
|
||||||
#define APP_PSK_TAG 2
|
#define APP_PSK_TAG 2
|
||||||
|
|
||||||
static sec_tag_t m_sec_tags[] = {
|
static APP_DMEM sec_tag_t m_sec_tags[] = {
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C) || defined(CONFIG_NET_SOCKETS_OFFLOAD)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C) || defined(CONFIG_NET_SOCKETS_OFFLOAD)
|
||||||
APP_CA_CERT_TAG,
|
APP_CA_CERT_TAG,
|
||||||
#endif
|
#endif
|
||||||
|
@ -204,12 +215,12 @@ void mqtt_evt_handler(struct mqtt_client *const client,
|
||||||
static char *get_mqtt_payload(enum mqtt_qos qos)
|
static char *get_mqtt_payload(enum mqtt_qos qos)
|
||||||
{
|
{
|
||||||
#if APP_BLUEMIX_TOPIC
|
#if APP_BLUEMIX_TOPIC
|
||||||
static char payload[30];
|
static APP_BMEM char payload[30];
|
||||||
|
|
||||||
snprintk(payload, sizeof(payload), "{d:{temperature:%d}}",
|
snprintk(payload, sizeof(payload), "{d:{temperature:%d}}",
|
||||||
(uint8_t)sys_rand32_get());
|
(uint8_t)sys_rand32_get());
|
||||||
#else
|
#else
|
||||||
static char payload[] = "DOORS:OPEN_QoSx";
|
static APP_DMEM char payload[] = "DOORS:OPEN_QoSx";
|
||||||
|
|
||||||
payload[strlen(payload) - 1] = '0' + qos;
|
payload[strlen(payload) - 1] = '0' + qos;
|
||||||
#endif
|
#endif
|
||||||
|
@ -470,15 +481,9 @@ static int publisher(void)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void main(void)
|
static void start_app(void)
|
||||||
{
|
{
|
||||||
int r = 0, i = 0;
|
int r = 0, i = 0;
|
||||||
#if defined(CONFIG_MQTT_LIB_TLS)
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = tls_init();
|
|
||||||
PRINT_RESULT("tls_init", rc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while (!CONFIG_NET_SAMPLE_APP_MAX_CONNECTIONS ||
|
while (!CONFIG_NET_SAMPLE_APP_MAX_CONNECTIONS ||
|
||||||
i++ < CONFIG_NET_SAMPLE_APP_MAX_CONNECTIONS) {
|
i++ < CONFIG_NET_SAMPLE_APP_MAX_CONNECTIONS) {
|
||||||
|
@ -488,6 +493,44 @@ void main(void)
|
||||||
k_sleep(K_MSEC(5000));
|
k_sleep(K_MSEC(5000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
exit(r);
|
|
||||||
|
#if defined(CONFIG_USERSPACE)
|
||||||
|
#define STACK_SIZE 2048
|
||||||
|
#define THREAD_PRIORITY K_PRIO_COOP(8)
|
||||||
|
|
||||||
|
K_THREAD_DEFINE(app_thread, STACK_SIZE,
|
||||||
|
start_app, NULL, NULL, NULL,
|
||||||
|
THREAD_PRIORITY, K_USER, -1);
|
||||||
|
|
||||||
|
static K_MEM_POOL_DEFINE(app_mem_pool, sizeof(uintptr_t), 1024,
|
||||||
|
2, sizeof(uintptr_t));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
#if defined(CONFIG_MQTT_LIB_TLS)
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = tls_init();
|
||||||
|
PRINT_RESULT("tls_init", rc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_USERSPACE)
|
||||||
|
struct k_mem_partition *parts[] = {
|
||||||
|
#if Z_LIBC_PARTITION_EXISTS
|
||||||
|
&z_libc_partition,
|
||||||
|
#endif
|
||||||
|
&app_partition
|
||||||
|
};
|
||||||
|
|
||||||
|
k_mem_domain_init(&app_domain, ARRAY_SIZE(parts), parts);
|
||||||
|
k_mem_domain_add_thread(&app_domain, app_thread);
|
||||||
|
k_thread_resource_pool_assign(app_thread, &app_mem_pool);
|
||||||
|
|
||||||
|
k_thread_start(app_thread);
|
||||||
|
k_thread_join(app_thread, K_FOREVER);
|
||||||
|
#else
|
||||||
|
start_app();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue