|
|
||
|---|---|---|
| README.md | ||
| lwftpc.c | ||
| lwftpc.h | ||
README.md
LwFTP Client
A lightweight FTP client using FreeRTOS and the Netconn API from LwIP, designed for STM32 H7.
About The Project
This project aims to provide a simple FTP client for embedded systems, enabling file operations over a network. It's built for systems running FreeRTOS and uses the Netconn API from LwIP for network communication.
Prerequisites:
- STM32 H7 microcontroller
- An FTP Server (tested with Windows IIS Server Manager)
- FreeRTOS
- LwIP with Netconn API (requires RTOS mode)
- This repository
Initialization
To initialize the LwFTP client, follow these steps:
-
Add the following declarations in the
/* USER CODE BEGIN PV */sections/* USER CODE BEGIN PV */ static lwftp_session_t s; uint8_t CLI_IP[4] = { 192, 168, 0, 120 }; // Client IP address uint8_t SVR_IP[4] = { 192, 168, 0, 100 }; // Server IP address u16_t SVR_PORT = 21; // FTP server port, typically 21 char *USER = "anonymous"; // FTP login username char *PASS = "email@example.com"; // FTP login password /* USER CODE END PV */ -
Declare
lwftp_init()in the main fileexample:
void lwftp_init(void) { IP4_ADDR(&s.cli_ip, CLI_IP[0], CLI_IP[1], CLI_IP[2], CLI_IP[3]); IP4_ADDR(&s.svr_ip, SVR_IP[0], SVR_IP[1], SVR_IP[2], SVR_IP[3]); s.svr_port = SVR_PORT; s.user = USER; s.pass = PASS; debugPrint("\n>> lwftp: cli ip: %d.%d.%d.%d\r\n", CLI_IP[0], CLI_IP[1], CLI_IP[2], CLI_IP[3]); debugPrint(">> lwftp: svr ip: %d.%d.%d.%d\r\n", SVR_IP[0], SVR_IP[1], SVR_IP[2], SVR_IP[3]); debugPrint(">> lwftp: svr port: %d\r\n", s.svr_port); debugPrint(">> lwftp: username: %s\r\n", s.user); debugPrint(">> lwftp: password: %s\r\n\n", s.pass); // Initialize threads for FTP connections sys_thread_new("lwftp_ctrl_thread", lwftp_ctrl_thread, (void*) &s, DEFAULT_THREAD_STACKSIZE, osPriorityNormal); sys_thread_new("lwftp_data_thread", lwftp_data_thread, (void*) &s, DEFAULT_THREAD_STACKSIZE, osPriorityNormal); } -
Call
lwftp_init()from the user code area ofStartDefaultTask()inmain.c, right afterMX_LWIP_Init()example:
void StartDefaultTask(void const * argument) { /* init code for LWIP */ MX_LWIP_Init(); /* USER CODE BEGIN 5 */ lwftp_init(); /* Infinite loop */ for (;;) { osDelay(1); } /* USER CODE END 5 */ }
Main Features & Limitations
-
Storing Files:
err = lwftp_store(&s, <filename.extension>, <data>);- Under development: A feature to prevent overwriting duplicate files.
-
Retrieving Files:
err = lwftp_retrieve(&s, <filename.extension>);- Limitation: May omit excessively long content. This issue is pending resolution.
-
Listing Files:
err = lwftp_list(&s, fileList);- To retrieve a list of files from the server's root directory, declare a character array (e.g.,
char *fileList[500];) and pass it as an argument. - Note: Path specification is not implemented.
- Note: The output format of the file list may vary between servers, requiring careful parsing.
- To retrieve a list of files from the server's root directory, declare a character array (e.g.,
-
Closing Connection:
err = lwftp_close(&s);- closes the FTP connection.
Features for debugging
-
Enabling LwFTP Debugging Output
To enable verbose debugging output for LwFTP, modify the
LWFTP_DEBUGcomment value inlwftp.h.