From 686bccd0ce8c5a91432be29bc0597c92f810efc9 Mon Sep 17 00:00:00 2001 From: kuwoyuki Date: Sat, 8 Nov 2025 00:39:15 +0600 Subject: [PATCH] chore: httpd --- .gitignore | 1 + Makefile | 8 ++-- bin/makefsdata | Bin 0 -> 53368 bytes fsdata_custom.c | 104 +++++++++++++++++++++++++++++++++++++++++ main.c | 35 +++++++++----- port/lwipopts.h | 12 ++++- web_content/index.html | 24 ++++++++++ 7 files changed, 166 insertions(+), 18 deletions(-) create mode 100755 bin/makefsdata create mode 100644 fsdata_custom.c create mode 100644 web_content/index.html diff --git a/.gitignore b/.gitignore index bcb8f64..f494111 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ dkms.conf main.lst main_ext.bin main.bin +bin/ diff --git a/Makefile b/Makefile index 01726ab..1e91c25 100644 --- a/Makefile +++ b/Makefile @@ -20,10 +20,8 @@ LWIP_C_FILES := LWIP_C_FILES += $(COREFILES) LWIP_C_FILES += $(CORE4FILES) LWIP_C_FILES += $(NETIFFILES) -# Add APIFILES if you are using the Netconn/Socket API -# ifeq ($(USE_API), 1) -# LWIP_C_FILES += $(APIFILES) -# endif +LWIP_C_FILES += $(HTTPFILES) + LWIP_C_FILES_WITH_PATH := $(LWIP_C_FILES) LWIP_PORT_FILES := $(wildcard $(PORT_DIR)/*.c) @@ -32,7 +30,7 @@ INCLUDE_DIRS ?= \ -I$(LWIP_DIR)/src/include \ -I$(PORT_DIR) -PROJECT_C_FILES := $(filter-out ./main.c, $(wildcard ./*.c)) +PROJECT_C_FILES := $(filter-out ./main.c ./fsdata_custom.c, $(wildcard ./*.c)) LIB_C_FILES := # Add all lwIP sources to the main build variable diff --git a/bin/makefsdata b/bin/makefsdata new file mode 100755 index 0000000000000000000000000000000000000000..4a8499fc86f93acfe1f567dcb265ea56112acd23 GIT binary patch literal 53368 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 OuupJYVG*ztwf_Yu8mC+U literal 0 HcmV?d00001 diff --git a/fsdata_custom.c b/fsdata_custom.c new file mode 100644 index 0000000..197b1a7 --- /dev/null +++ b/fsdata_custom.c @@ -0,0 +1,104 @@ +#include "lwip/apps/fs.h" +#include "lwip/def.h" + + +#define file_NULL (struct fsdata_file *) NULL + + +#ifndef FS_FILE_FLAGS_HEADER_INCLUDED +#define FS_FILE_FLAGS_HEADER_INCLUDED 1 +#endif +#ifndef FS_FILE_FLAGS_HEADER_PERSISTENT +#define FS_FILE_FLAGS_HEADER_PERSISTENT 0 +#endif +/* FSDATA_FILE_ALIGNMENT: 0=off, 1=by variable, 2=by include */ +#ifndef FSDATA_FILE_ALIGNMENT +#define FSDATA_FILE_ALIGNMENT 0 +#endif +#ifndef FSDATA_ALIGN_PRE +#define FSDATA_ALIGN_PRE +#endif +#ifndef FSDATA_ALIGN_POST +#define FSDATA_ALIGN_POST +#endif +#if FSDATA_FILE_ALIGNMENT==2 +#include "fsdata_alignment.h" +#endif +#if FSDATA_FILE_ALIGNMENT==1 +static const unsigned int dummy_align__index_html = 0; +#endif +static const unsigned char FSDATA_ALIGN_PRE data__index_html[] FSDATA_ALIGN_POST = { +/* /index.html (12 chars) */ +0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00, + +/* HTTP header */ +/* "HTTP/1.0 200 OK +" (17 bytes) */ +0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d, +0x0a, +/* "Server: lwIP/2.2.2d (http://savannah.nongnu.org/projects/lwip) +" (64 bytes) */ +0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x32,0x2e,0x32, +0x2e,0x32,0x64,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61, +0x6e,0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f, +0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a, + +/* "Content-Length: 549 +" (18+ bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x4c,0x65,0x6e,0x67,0x74,0x68,0x3a,0x20, +0x35,0x34,0x39,0x0d,0x0a, +/* "Content-Type: text/html + +" (27 bytes) */ +0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,0x3a,0x20,0x74,0x65, +0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a, +/* raw file data (549 bytes) */ +0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x68,0x74,0x6d,0x6c,0x3e,0x0a, +0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x68,0x65,0x61,0x64, +0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,0x69,0x74,0x6c,0x65, +0x3e,0x48,0x65,0x6c,0x6c,0x6f,0x20,0x66,0x72,0x6f,0x6d,0x20,0x43,0x48,0x33,0x32, +0x56,0x32,0x30,0x38,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x3c,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0a,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x6f,0x64,0x79,0x20,0x7b,0x0a, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x66,0x6f,0x6e,0x74,0x2d,0x66,0x61,0x6d,0x69,0x6c,0x79,0x3a,0x20,0x73,0x61,0x6e, +0x73,0x2d,0x73,0x65,0x72,0x69,0x66,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x65,0x78,0x74,0x2d,0x61,0x6c, +0x69,0x67,0x6e,0x3a,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x3b,0x0a,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x61,0x63, +0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2d,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23, +0x66,0x30,0x66,0x30,0x66,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6d,0x61,0x72,0x67,0x69,0x6e,0x2d,0x74, +0x6f,0x70,0x3a,0x20,0x35,0x30,0x70,0x78,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x68,0x31,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20, +0x23,0x33,0x33,0x33,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x70,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x20,0x23,0x35,0x35,0x35,0x3b, +0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x73,0x74,0x79,0x6c,0x65,0x3e,0x0a, +0x20,0x20,0x20,0x20,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0a,0x20,0x20,0x20,0x20, +0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, +0x68,0x31,0x3e,0x48,0x65,0x6c,0x6c,0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x3c,0x2f, +0x68,0x31,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x3e,0x54, +0x68,0x69,0x73,0x20,0x70,0x61,0x67,0x65,0x20,0x69,0x73,0x20,0x73,0x65,0x72,0x76, +0x65,0x64,0x20,0x66,0x72,0x6f,0x6d,0x20,0x43,0x48,0x33,0x32,0x56,0x32,0x30,0x38, +0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x6c,0x77,0x49,0x50,0x2e,0x3c,0x2f,0x70,0x3e, +0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68, +0x74,0x6d,0x6c,0x3e,0x0a,}; + + + +const struct fsdata_file file__index_html[] = { { +file_NULL, +data__index_html, +data__index_html + 12, +sizeof(data__index_html) - 12, +FS_FILE_FLAGS_HEADER_INCLUDED | FS_FILE_FLAGS_HEADER_PERSISTENT, +}}; + +#define FS_ROOT file__index_html +#define FS_NUMFILES 1 + diff --git a/main.c b/main.c index 3ce88a0..d52b38e 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,7 @@ #include "ch32fun.h" #include "ch32v20xhw.h" #include "ethernetif.h" +#include "lwip/apps/httpd.h" #include "lwip/dhcp.h" #include "lwip/init.h" #include "lwip/netif.h" @@ -73,6 +74,26 @@ void led_init(void) { GPIOA->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP) << (4 * LED2_PIN); } +static void netif_status_callback(struct netif* netif) { + if (netif_is_up(netif) && !ip_addr_isany_val(*netif_ip4_addr(netif))) { + printf("netif UP\n"); + printf(" MAC : %02X:%02X:%02X:%02X:%02X:%02X\n", netif->hwaddr[0], + netif->hwaddr[1], netif->hwaddr[2], netif->hwaddr[3], + netif->hwaddr[4], netif->hwaddr[5]); + printf(" IP : %s\n", ip4addr_ntoa(netif_ip4_addr(netif))); + printf(" Mask : %s\n", ip4addr_ntoa(netif_ip4_netmask(netif))); + printf(" GW : %s\n", ip4addr_ntoa(netif_ip4_gw(netif))); + + httpd_init(); + printf("HTTP server init\n"); + GPIOA->BSHR = (1 << LED2_PIN); + + } else { + printf("netif DOWN or has no IP address\n"); + GPIOA->BSHR = (1 << (LED2_PIN + 16)); + } +} + void lwip_stack_init(void) { ip_addr_t ipaddr, netmask, gw; @@ -85,6 +106,8 @@ void lwip_stack_init(void) { netif_add(&g_netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input); + netif_set_status_callback(&g_netif, netif_status_callback); + netif_set_default(&g_netif); netif_set_up(&g_netif); @@ -107,18 +130,16 @@ int main() { uint32_t last_led_toggle_time = 0; uint32_t last_link_poll_time = 0; int led_state = 0; - int ip_address_printed = 0; while (1) { ethernetif_input(&g_netif); + sys_check_timeouts(); if (millis() - last_link_poll_time > LINK_POLL_INTERVAL_MS) { ethernetif_link_poll(&g_netif); last_link_poll_time = millis(); } - sys_check_timeouts(); - uint32_t now = millis(); if (now - last_led_toggle_time > LED_TOGGLE_INTERVAL_MS) { if (led_state) { @@ -129,13 +150,5 @@ int main() { led_state = !led_state; last_led_toggle_time = now; } - - if (!ip_address_printed && g_netif.ip_addr.addr != 0) { - printf("IP address assigned: %s\n", - ip4addr_ntoa(netif_ip4_addr(&g_netif))); - ip_address_printed = 1; - - GPIOA->BSHR = (1 << LED2_PIN); - } } } \ No newline at end of file diff --git a/port/lwipopts.h b/port/lwipopts.h index 25e3421..ee4765c 100644 --- a/port/lwipopts.h +++ b/port/lwipopts.h @@ -6,7 +6,7 @@ // #define UDP_DEBUG LWIP_DBG_ON // #define IP_DEBUG LWIP_DBG_ON -#define DHCP_DEBUG LWIP_DBG_ON +// #define DHCP_DEBUG LWIP_DBG_ON #define NETIF_DEBUG LWIP_DBG_ON // #define ETHARP_DEBUG LWIP_DBG_ON @@ -17,7 +17,7 @@ // Memory options #define MEM_ALIGNMENT 4 -#define MEM_SIZE (4 * 1024) // 4KB of RAM for lwIP heap +#define MEM_SIZE (10 * 1024) // 4KB of RAM for lwIP heap // Pbuf options #define PBUF_POOL_SIZE 8 @@ -52,6 +52,14 @@ // Statistics #define LWIP_STATS 0 +#define LWIP_HTTPD 1 +// Use a read-only filesystem populated by makefsdata +// #define HTTPD_FSDATA_FILE "fsdata_custom.c" +#define LWIP_HTTPD_FS_SUPPORT 1 +#define HTTPD_USE_CUSTOM_FSDATA 1 + +#define LWIP_NETIF_HOSTNAME 1 // #define LWIP_NETIF_LINK_CALLBACK 1 +#define LWIP_NETIF_STATUS_CALLBACK 1 #endif /* __LWIPOPTS_H__ */ diff --git a/web_content/index.html b/web_content/index.html new file mode 100644 index 0000000..9f25643 --- /dev/null +++ b/web_content/index.html @@ -0,0 +1,24 @@ + + + + Hello from CH32V208 + + + +

Hello World

+

This page is served from CH32V208 using lwIP.

+ +