chore: httpd
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -58,3 +58,4 @@ dkms.conf
|
|||||||
main.lst
|
main.lst
|
||||||
main_ext.bin
|
main_ext.bin
|
||||||
main.bin
|
main.bin
|
||||||
|
bin/
|
||||||
|
|||||||
8
Makefile
8
Makefile
@@ -20,10 +20,8 @@ LWIP_C_FILES :=
|
|||||||
LWIP_C_FILES += $(COREFILES)
|
LWIP_C_FILES += $(COREFILES)
|
||||||
LWIP_C_FILES += $(CORE4FILES)
|
LWIP_C_FILES += $(CORE4FILES)
|
||||||
LWIP_C_FILES += $(NETIFFILES)
|
LWIP_C_FILES += $(NETIFFILES)
|
||||||
# Add APIFILES if you are using the Netconn/Socket API
|
LWIP_C_FILES += $(HTTPFILES)
|
||||||
# ifeq ($(USE_API), 1)
|
|
||||||
# LWIP_C_FILES += $(APIFILES)
|
|
||||||
# endif
|
|
||||||
LWIP_C_FILES_WITH_PATH := $(LWIP_C_FILES)
|
LWIP_C_FILES_WITH_PATH := $(LWIP_C_FILES)
|
||||||
LWIP_PORT_FILES := $(wildcard $(PORT_DIR)/*.c)
|
LWIP_PORT_FILES := $(wildcard $(PORT_DIR)/*.c)
|
||||||
|
|
||||||
@@ -32,7 +30,7 @@ INCLUDE_DIRS ?= \
|
|||||||
-I$(LWIP_DIR)/src/include \
|
-I$(LWIP_DIR)/src/include \
|
||||||
-I$(PORT_DIR)
|
-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 :=
|
LIB_C_FILES :=
|
||||||
|
|
||||||
# Add all lwIP sources to the main build variable
|
# Add all lwIP sources to the main build variable
|
||||||
|
|||||||
BIN
bin/makefsdata
Executable file
BIN
bin/makefsdata
Executable file
Binary file not shown.
104
fsdata_custom.c
Normal file
104
fsdata_custom.c
Normal file
@@ -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
|
||||||
|
|
||||||
35
main.c
35
main.c
@@ -3,6 +3,7 @@
|
|||||||
#include "ch32fun.h"
|
#include "ch32fun.h"
|
||||||
#include "ch32v20xhw.h"
|
#include "ch32v20xhw.h"
|
||||||
#include "ethernetif.h"
|
#include "ethernetif.h"
|
||||||
|
#include "lwip/apps/httpd.h"
|
||||||
#include "lwip/dhcp.h"
|
#include "lwip/dhcp.h"
|
||||||
#include "lwip/init.h"
|
#include "lwip/init.h"
|
||||||
#include "lwip/netif.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);
|
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) {
|
void lwip_stack_init(void) {
|
||||||
ip_addr_t ipaddr, netmask, gw;
|
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,
|
netif_add(&g_netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init,
|
||||||
ðernet_input);
|
ðernet_input);
|
||||||
|
|
||||||
|
netif_set_status_callback(&g_netif, netif_status_callback);
|
||||||
|
|
||||||
netif_set_default(&g_netif);
|
netif_set_default(&g_netif);
|
||||||
netif_set_up(&g_netif);
|
netif_set_up(&g_netif);
|
||||||
|
|
||||||
@@ -107,18 +130,16 @@ int main() {
|
|||||||
uint32_t last_led_toggle_time = 0;
|
uint32_t last_led_toggle_time = 0;
|
||||||
uint32_t last_link_poll_time = 0;
|
uint32_t last_link_poll_time = 0;
|
||||||
int led_state = 0;
|
int led_state = 0;
|
||||||
int ip_address_printed = 0;
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
ethernetif_input(&g_netif);
|
ethernetif_input(&g_netif);
|
||||||
|
sys_check_timeouts();
|
||||||
|
|
||||||
if (millis() - last_link_poll_time > LINK_POLL_INTERVAL_MS) {
|
if (millis() - last_link_poll_time > LINK_POLL_INTERVAL_MS) {
|
||||||
ethernetif_link_poll(&g_netif);
|
ethernetif_link_poll(&g_netif);
|
||||||
last_link_poll_time = millis();
|
last_link_poll_time = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
sys_check_timeouts();
|
|
||||||
|
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
if (now - last_led_toggle_time > LED_TOGGLE_INTERVAL_MS) {
|
if (now - last_led_toggle_time > LED_TOGGLE_INTERVAL_MS) {
|
||||||
if (led_state) {
|
if (led_state) {
|
||||||
@@ -129,13 +150,5 @@ int main() {
|
|||||||
led_state = !led_state;
|
led_state = !led_state;
|
||||||
last_led_toggle_time = now;
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
// #define UDP_DEBUG LWIP_DBG_ON
|
// #define UDP_DEBUG LWIP_DBG_ON
|
||||||
// #define IP_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 NETIF_DEBUG LWIP_DBG_ON
|
||||||
// #define ETHARP_DEBUG LWIP_DBG_ON
|
// #define ETHARP_DEBUG LWIP_DBG_ON
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
// Memory options
|
// Memory options
|
||||||
#define MEM_ALIGNMENT 4
|
#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
|
// Pbuf options
|
||||||
#define PBUF_POOL_SIZE 8
|
#define PBUF_POOL_SIZE 8
|
||||||
@@ -52,6 +52,14 @@
|
|||||||
// Statistics
|
// Statistics
|
||||||
#define LWIP_STATS 0
|
#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_LINK_CALLBACK 1
|
||||||
|
#define LWIP_NETIF_STATUS_CALLBACK 1
|
||||||
|
|
||||||
#endif /* __LWIPOPTS_H__ */
|
#endif /* __LWIPOPTS_H__ */
|
||||||
|
|||||||
24
web_content/index.html
Normal file
24
web_content/index.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Hello from CH32V208</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello World</h1>
|
||||||
|
<p>This page is served from CH32V208 using lwIP.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user