Skip to content

Commit 3d33df8

Browse files
Merge pull request #396 from kojo1/pico
wolfSSL on R-Pi Pico-W
2 parents 57e641e + 69bf4a8 commit 3d33df8

20 files changed

Lines changed: 1874 additions & 0 deletions

RPi-Pico/CMakeLists.txt

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
3+
# Pull in Pico and FreeRTOS
4+
include(pico_sdk_import.cmake)
5+
include(pico_extras_import_optional.cmake)
6+
#include($ENV{FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)
7+
8+
9+
if(PICO_SDK_VERSION_STRING VERSION_LESS "1.3.0")
10+
message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.3.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
11+
endif()
12+
13+
project(wolf_pico_examples C CXX ASM)
14+
set(CMAKE_C_STANDARD 11)
15+
set(CMAKE_CXX_STANDARD 17)
16+
17+
# Initialize the SDK
18+
pico_sdk_init()
19+
20+
21+
### Global Include Path
22+
include_directories(config)
23+
include_directories(include)
24+
include_directories(${PICO_SDK_PATH}/src/rp2_common/pico_lwip/include)
25+
include_directories(${PICO_SDK_PATH}/lib/lwip/contrib/ports/freertos/include)
26+
include_directories(${PICO_SDK_PATH}/lib/lwip/src/include)
27+
include_directories(${PICO_SDK_PATH}/src/rp2_common/pico_async_context/include)
28+
29+
set(WOLFSSL_ROOT $ENV{WOLFSSL_ROOT})
30+
include_directories(${WOLFSSL_ROOT})
31+
### End of Global Include Path
32+
33+
34+
### wolfSSL/wolfCrypt library
35+
file(GLOB_RECURSE WOLFSSL_SRC
36+
"${WOLFSSL_ROOT}/src/*.c"
37+
"${WOLFSSL_ROOT}/wolfcrypt/src/*.c"
38+
)
39+
list(REMOVE_ITEM WOLFSSL_SRC EXCLUDE REGEX
40+
"${WOLFSSL_ROOT}/src/bio.c"
41+
"${WOLFSSL_ROOT}/src/conf.c"
42+
"${WOLFSSL_ROOT}/src/pk.c"
43+
"${WOLFSSL_ROOT}/src/ssl_asn1.c"
44+
"${WOLFSSL_ROOT}/src/ssl_bn.c"
45+
"${WOLFSSL_ROOT}/src/ssl_misc.c"
46+
"${WOLFSSL_ROOT}/src/x509.c"
47+
"${WOLFSSL_ROOT}/src/x509_str.c"
48+
"${WOLFSSL_ROOT}/wolfcrypt/src/evp.c"
49+
"${WOLFSSL_ROOT}/wolfcrypt/src/misc.c"
50+
)
51+
52+
add_library(wolfssl STATIC
53+
${WOLFSSL_SRC}
54+
)
55+
56+
target_compile_definitions(wolfssl PUBLIC
57+
WOLFSSL_USER_SETTINGS
58+
)
59+
### End of wolfSSL/wolfCrypt library
60+
61+
62+
### Test wolfCrypt algorithms
63+
add_executable(testwolfcrypt
64+
src/test_main.c
65+
src/blink.c
66+
${WOLFSSL_ROOT}/wolfcrypt/test/test.c
67+
)
68+
69+
target_link_libraries(testwolfcrypt
70+
wolfssl
71+
pico_stdlib
72+
pico_cyw43_arch_none
73+
pico_rand
74+
)
75+
76+
pico_enable_stdio_usb(testwolfcrypt 1)
77+
pico_enable_stdio_uart(testwolfcrypt 0)
78+
79+
pico_add_extra_outputs(testwolfcrypt)
80+
### End of Test wolfCrypt algorithms
81+
82+
83+
### Benchmark wolfCrypt algorithms
84+
add_executable(benchmark
85+
src/bench_main.c
86+
src/blink.c
87+
${WOLFSSL_ROOT}/wolfcrypt/benchmark/benchmark.c
88+
)
89+
90+
target_link_libraries(benchmark
91+
wolfssl
92+
pico_stdlib
93+
pico_cyw43_arch_none
94+
pico_rand
95+
)
96+
97+
pico_enable_stdio_usb(benchmark 1)
98+
pico_enable_stdio_uart(benchmark 0)
99+
100+
pico_add_extra_outputs(benchmark)
101+
### End of Benchmark wolfCrypt algorithms
102+
103+
104+
### Wifi connection
105+
add_executable(Wifi
106+
src/blink.c
107+
src/wifi.c
108+
src/Wifi_main.c
109+
)
110+
111+
target_compile_definitions(Wifi PRIVATE
112+
WIFI_SSID=\"${WIFI_SSID}\"
113+
WIFI_PASSWORD=\"${WIFI_PASSWORD}\"
114+
PICO_CYW43_ARCH_POLL
115+
NO_SYS=1
116+
)
117+
118+
target_link_libraries(Wifi
119+
pico_stdlib
120+
pico_rand
121+
pico_lwip
122+
pico_cyw43_arch
123+
pico_lwip_nosys
124+
pico_async_context_poll
125+
)
126+
127+
128+
pico_enable_stdio_usb(Wifi 1)
129+
pico_enable_stdio_uart(Wifi 0)
130+
131+
pico_add_extra_outputs(Wifi)
132+
### End of Wifi connection
133+
134+
135+
### TCP Client
136+
add_executable(tcp_Client
137+
src/blink.c
138+
src/wifi.c
139+
src/tcp.c
140+
src/tcpClient_main.c
141+
)
142+
143+
target_compile_definitions(tcp_Client PRIVATE
144+
WIFI_SSID=\"${WIFI_SSID}\"
145+
WIFI_PASSWORD=\"${WIFI_PASSWORD}\"
146+
TEST_TCP_SERVER_IP=\"${TEST_TCP_SERVER_IP}\"
147+
PICO_CYW43_ARCH_POLL
148+
NO_SYS=1
149+
)
150+
151+
target_link_libraries(tcp_Client
152+
pico_stdlib
153+
pico_rand
154+
pico_lwip
155+
pico_cyw43_arch
156+
pico_lwip_nosys
157+
pico_async_context_poll
158+
)
159+
160+
161+
pico_enable_stdio_usb(tcp_Client 1)
162+
pico_enable_stdio_uart(tcp_Client 0)
163+
164+
pico_add_extra_outputs(tcp_Client)
165+
### End of TCP Client
166+
167+
168+
### TLS Client
169+
add_executable(tls_Client
170+
src/blink.c
171+
src/wifi.c
172+
src/tcp.c
173+
src/tlsClient_main.c
174+
)
175+
176+
target_compile_definitions(tls_Client PRIVATE
177+
WIFI_SSID=\"${WIFI_SSID}\"
178+
WIFI_PASSWORD=\"${WIFI_PASSWORD}\"
179+
TEST_TCP_SERVER_IP=\"${TEST_TCP_SERVER_IP}\"
180+
PICO_CYW43_ARCH_POLL
181+
NO_SYS=1
182+
)
183+
184+
target_link_libraries(tls_Client
185+
pico_stdlib
186+
pico_rand
187+
pico_lwip
188+
pico_cyw43_arch
189+
pico_lwip_nosys
190+
pico_async_context_poll
191+
wolfssl
192+
)
193+
194+
pico_enable_stdio_usb(tls_Client 1)
195+
pico_enable_stdio_uart(tls_Client 0)
196+
197+
pico_add_extra_outputs(tls_Client)
198+
### End of TLS Client

RPi-Pico/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
## Getting Started
2+
3+
1. Put wolfSSL source files under this directory.
4+
RPi-Pico/wolfssl
5+
6+
2. Setup pico-sdk and set PICO_SDK_PATH
7+
export PICO_SDK_PATH=/your/pico-sdk/path
8+
9+
3. cmake and make
10+
$ cd RPi-Pico
11+
$ mkdir build
12+
$ cd build
13+
$ cmake -DPICO_BOARD=pico_w ..
14+
$ make
15+
16+
4. Output is to USB serial
17+
18+

RPi-Pico/config/lwipopts.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef _LWIPOPTS_H
2+
#define _LWIPOPTS_H
3+
4+
// Generally you would define your own explicit list of lwIP options
5+
// (see https://www.nongnu.org/lwip/2_1_x/group__lwip__opts.html)
6+
//
7+
// This example uses a common include to avoid repetition
8+
#include "lwipopts_examples_common.h"
9+
10+
#if !NO_SYS
11+
#define TCPIP_THREAD_STACKSIZE 1024
12+
#define DEFAULT_THREAD_STACKSIZE 1024
13+
#define DEFAULT_RAW_RECVMBOX_SIZE 8
14+
#define TCPIP_MBOX_SIZE 8
15+
#define LWIP_TIMEVAL_PRIVATE 0
16+
17+
// not necessary, can be done either way
18+
#define LWIP_TCPIP_CORE_LOCKING_INPUT 1
19+
20+
// ping_thread sets socket receive timeout, so enable this feature
21+
#define LWIP_SO_RCVTIMEO 1
22+
23+
#endif
24+
25+
26+
#define LWIP_TIMEVAL_PRIVATE 0
27+
#define LWIP_MPU_COMPATIBLE 0
28+
#define LWIP_PROVIDE_ERRNO
29+
#define LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX 1
30+
31+
/* wolfTCP config */
32+
#define WOLF_SOCKET 1
33+
34+
#endif
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#ifndef _LWIPOPTS_EXAMPLE_COMMONH_H
2+
#define _LWIPOPTS_EXAMPLE_COMMONH_H
3+
4+
// Common settings used in most of the pico_w examples
5+
// (see https://www.nongnu.org/lwip/2_1_x/group__lwip__opts.html for details)
6+
7+
// allow override in some examples
8+
#ifndef NO_SYS
9+
#define NO_SYS 0
10+
#endif
11+
// allow override in some examples
12+
#ifndef LWIP_SOCKET
13+
#define LWIP_SOCKET 0
14+
#endif
15+
#if PICO_CYW43_ARCH_POLL
16+
#define MEM_LIBC_MALLOC 1
17+
#else
18+
// MEM_LIBC_MALLOC is incompatible with non polling versions
19+
#define MEM_LIBC_MALLOC 0
20+
#endif
21+
#define MEM_ALIGNMENT 4
22+
#define MEM_SIZE 4000
23+
#define MEMP_NUM_TCP_SEG 32
24+
#define MEMP_NUM_ARP_QUEUE 10
25+
#define PBUF_POOL_SIZE 24
26+
#define LWIP_ARP 1
27+
#define LWIP_ETHERNET 1
28+
#define LWIP_ICMP 1
29+
#define LWIP_RAW 1
30+
#define TCP_WND (8 * TCP_MSS)
31+
#define TCP_MSS 1460
32+
#define TCP_SND_BUF (8 * TCP_MSS)
33+
#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1)) / (TCP_MSS))
34+
#define LWIP_NETIF_STATUS_CALLBACK 1
35+
#define LWIP_NETIF_LINK_CALLBACK 1
36+
#define LWIP_NETIF_HOSTNAME 1
37+
#define LWIP_NETCONN 0
38+
#define MEM_STATS 0
39+
#define SYS_STATS 0
40+
#define MEMP_STATS 0
41+
#define LINK_STATS 0
42+
// #define ETH_PAD_SIZE 2
43+
#define LWIP_CHKSUM_ALGORITHM 3
44+
#define LWIP_DHCP 1
45+
#define LWIP_IPV4 1
46+
#define LWIP_TCP 1
47+
#define LWIP_UDP 1
48+
#define LWIP_DNS 1
49+
#define LWIP_TCP_KEEPALIVE 1
50+
#define LWIP_NETIF_TX_SINGLE_PBUF 1
51+
#define DHCP_DOES_ARP_CHECK 0
52+
#define LWIP_DHCP_DOES_ACD_CHECK 0
53+
54+
#ifndef NDEBUG
55+
#define LWIP_DEBUG 1
56+
#define LWIP_STATS 1
57+
#define LWIP_STATS_DISPLAY 1
58+
#endif
59+
60+
#define ETHARP_DEBUG LWIP_DBG_OFF
61+
#define NETIF_DEBUG LWIP_DBG_OFF
62+
#define PBUF_DEBUG LWIP_DBG_OFF
63+
#define API_LIB_DEBUG LWIP_DBG_OFF
64+
#define API_MSG_DEBUG LWIP_DBG_OFF
65+
#define SOCKETS_DEBUG LWIP_DBG_OFF
66+
#define ICMP_DEBUG LWIP_DBG_OFF
67+
#define INET_DEBUG LWIP_DBG_OFF
68+
#define IP_DEBUG LWIP_DBG_OFF
69+
#define IP_REASS_DEBUG LWIP_DBG_OFF
70+
#define RAW_DEBUG LWIP_DBG_OFF
71+
#define MEM_DEBUG LWIP_DBG_OFF
72+
#define MEMP_DEBUG LWIP_DBG_OFF
73+
#define SYS_DEBUG LWIP_DBG_OFF
74+
#define TCP_DEBUG LWIP_DBG_OFF
75+
#define TCP_INPUT_DEBUG LWIP_DBG_OFF
76+
#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
77+
#define TCP_RTO_DEBUG LWIP_DBG_OFF
78+
#define TCP_CWND_DEBUG LWIP_DBG_OFF
79+
#define TCP_WND_DEBUG LWIP_DBG_OFF
80+
#define TCP_FR_DEBUG LWIP_DBG_OFF
81+
#define TCP_QLEN_DEBUG LWIP_DBG_OFF
82+
#define TCP_RST_DEBUG LWIP_DBG_OFF
83+
#define UDP_DEBUG LWIP_DBG_OFF
84+
#define TCPIP_DEBUG LWIP_DBG_OFF
85+
#define PPP_DEBUG LWIP_DBG_OFF
86+
#define SLIP_DEBUG LWIP_DBG_OFF
87+
#define DHCP_DEBUG LWIP_DBG_OFF
88+
89+
#endif /* __LWIPOPTS_H__ */

0 commit comments

Comments
 (0)