@@ -104,29 +104,142 @@ jobs:
104104 - name : wolfmqtt autogen
105105 working-directory : ./wolfmqtt
106106 run : ./autogen.sh
107- - name : wolfmqtt configure with TLS
107+ - name : wolfmqtt configure with Multi-threading
108108 working-directory : ./wolfmqtt
109- env :
110- WOLFMQTT_NO_EXTERNAL_BROKER_TESTS : 1
111- run : ./configure --enable-tls CPPFLAGS="-DTHREADX -DHAVE_NETX -DNO_MAIN_DRIVER -DWOLFSSL_USER_IO -I${{ github.workspace }}/netxduo_src/common/inc -I${{ github.workspace }}/netxduo_src/ports/linux/gnu/inc -I${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/inc" LDFLAGS="-L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/default_build_coverage/netxduo -L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/threadx" LIBS="-lnetxduo -lthreadx -lwolfssl"
109+ run : ./configure --enable-tls --enable-mt --disable-examples --disable-stdincap CPPFLAGS="-DTHREADX -DHAVE_NETX -DWOLFSSL_USER_IO -DNO_MAIN_DRIVER -I${{ github.workspace }}/netxduo_src/common/inc -I${{ github.workspace }}/netxduo_src/ports/linux/gnu/inc -I${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/inc" LDFLAGS="-L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/default_build_coverage/netxduo -L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/threadx" LIBS="-lnetxduo -lthreadx -lwolfssl"
112110 - name : wolfmqtt make
113111 working-directory : ./wolfmqtt
114- run : make
115- - name : wolfmqtt make check
116- working-directory : ./wolfmqtt
117- run : make check
112+ run : |
113+ make
114+ sudo make install
118115
119- - name : wolfmqtt configure with Multi-threading
116+ - name : Create ThreadX NetX test app source file
120117 working-directory : ./wolfmqtt
121- env :
122- WOLFMQTT_NO_EXTERNAL_BROKER_TESTS : 1
123- run : ./configure --enable-tls --enable-mt CPPFLAGS="-DTHREADX -DHAVE_NETX -DWOLFSSL_USER_IO -DNO_MAIN_DRIVER -I${{ github.workspace }}/netxduo_src/common/inc -I${{ github.workspace }}/netxduo_src/ports/linux/gnu/inc -I${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/inc" LDFLAGS="-L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/default_build_coverage/netxduo -L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/threadx" LIBS="-lnetxduo -lthreadx -lwolfssl"
124- - name : wolfmqtt make
125- working-directory : ./wolfmqtt
126- run : make
127- - name : wolfmqtt make check
118+ run : |
119+ cat > examples/threadx_netx_test.c <<'EOF'
120+ /* threadx_netx_test.c
121+ * Minimal ThreadX/NetX test app using NetConnect logic from mqttnet.c
122+ */
123+
124+ # include <stdio.h>
125+ # include "tx_api.h"
126+ # include "nx_api.h"
127+ # include "nxd_dns.h"
128+ # include "examples/mqttnet.h"
129+ # include "examples/mqttexample.h"
130+
131+ # define DEMO_STACK_SIZE 2048
132+ # define DEMO_IP_ADDRESS IP_ADDRESS(192,168,1,100)
133+ # define DEMO_NET_MASK 0xFFFFFF00
134+ # define DEMO_GATEWAY_ADDRESS IP_ADDRESS(192,168,1,1)
135+ # define DEMO_DNS_SERVER IP_ADDRESS(8,8,8,8)
136+ # define DEMO_HOSTNAME "test.mosquitto.org"
137+ # define DEMO_PORT 1883
138+ # define DEMO_TIMEOUT_MS 5000
139+
140+ /* ThreadX/NetX objects */
141+ TX_THREAD demo_thread;
142+ ULONG demo_thread_stack[DEMO_STACK_SIZE / sizeof(ULONG)];
143+ NX_PACKET_POOL pool_0;
144+ NX_IP ip_0;
145+ NX_DNS dns_0;
146+
147+ /* Forward declaration */
148+ void demo_thread_entry(ULONG thread_input);
149+
150+ void tx_application_define(void *first_unused_memory)
151+ {
152+ /* Create the main demo thread. */
153+ tx_thread_create(&demo_thread, "Demo Thread", demo_thread_entry, 0,
154+ demo_thread_stack, DEMO_STACK_SIZE,
155+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
156+ }
157+
158+ void demo_thread_entry(ULONG thread_input)
159+ {
160+ UINT status;
161+ NXD_ADDRESS dns_server;
162+ MQTTCtx mqttCtx;
163+ MqttNet net;
164+ SocketContext *sockCtx;
165+ int rc;
166+
167+ /* Initialize NetX system */
168+ nx_system_initialize();
169+
170+ /* Create a packet pool. */
171+ status = nx_packet_pool_create(&pool_0, "NetX Main Packet Pool",
172+ 1536, (UCHAR*)first_unused_memory, 16*1536);
173+ if (status != NX_SUCCESS) {
174+ printf("Packet pool create failed : %u\n", status);
175+ return;
176+ }
177+
178+ /* Create an IP instance. */
179+ status = nx_ip_create(&ip_0, "NetX IP Instance",
180+ DEMO_IP_ADDRESS, DEMO_NET_MASK,
181+ &pool_0, nx_driver_placeholder,
182+ (UCHAR*)first_unused_memory + 16*1536, 2048, 1);
183+ if (status != NX_SUCCESS) {
184+ printf("IP create failed : %u\n", status);
185+ return;
186+ }
187+
188+ /* Enable ARP, ICMP, TCP, UDP */
189+ nx_arp_enable(&ip_0, (UCHAR*)first_unused_memory + 16*1536 + 2048, 1024);
190+ nx_icmp_enable(&ip_0);
191+ nx_tcp_enable(&ip_0);
192+ nx_udp_enable(&ip_0);
193+
194+ /* Create DNS instance */
195+ status = nxd_dns_create(&dns_0, (UCHAR*)"DNS Client", &ip_0, (UCHAR*)first_unused_memory + 16*1536 + 2048 + 1024, 2048);
196+ if (status != NX_SUCCESS) {
197+ printf("DNS create failed : %u\n", status);
198+ return;
199+ }
200+ dns_server.nxd_ip_version = NX_IP_VERSION_V4;
201+ dns_server.nxd_ip_address.v4 = DEMO_DNS_SERVER;
202+ nxd_dns_server_add(&dns_0, &dns_server);
203+
204+ /* Initialize MQTT context and network */
205+ mqtt_init_ctx(&mqttCtx);
206+ MqttClientNet_Init(&net, &mqttCtx);
207+ sockCtx = (SocketContext*)net.context;
208+ sockCtx->ipPtr = &ip_0;
209+ sockCtx->dnsPtr = &dns_0;
210+
211+ /* Use NetConnect to connect to the MQTT broker */
212+ rc = net.connect(sockCtx, DEMO_HOSTNAME, DEMO_PORT, DEMO_TIMEOUT_MS);
213+ if (rc == 0) {
214+ printf("NetConnect succeeded!\n");
215+ net.disconnect(sockCtx);
216+ } else {
217+ printf("NetConnect failed : %d\n", rc);
218+ }
219+
220+ /* Cleanup (not strictly necessary in a demo) */
221+ nxd_dns_delete(&dns_0);
222+ nx_ip_delete(&ip_0);
223+ nx_packet_pool_delete(&pool_0);
224+ /* Thread exits */
225+ tx_thread_terminate(&demo_thread);
226+ }
227+
228+ /* Placeholder driver for demo purposes */
229+ void nx_driver_placeholder(NX_IP_DRIVER *driver_req)
230+ {
231+ NX_PARAMETER_NOT_USED(driver_req);
232+ }
233+ EOF
234+
235+ - name : Compile ThreadX NetX test app
128236 working-directory : ./wolfmqtt
129- run : make check
237+ run : |
238+ gcc -o threadx_netx_test examples/threadx_netx_test.c -I${{ github.workspace }}/netxduo_src/common/inc -I${{ github.workspace }}/netxduo_src/ports/linux/gnu/inc -I${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/inc -I${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/threadx -L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/default_build_coverage/netxduo -L${{ github.workspace }}/netxduo_src/test/cmake/netxduo64/build/libs/threadx -lnetxduo -lthreadx -lwolfssl -lwolfmqtt
239+
240+ - name : Run ThreadX NetX test app
241+ run : |
242+ ./threadx_netx_test
130243
131244 # capture logs on failure
132245 - name : Show logs on failure
0 commit comments