Update README.md
This commit is contained in:
parent
eae6404f16
commit
3c7a4ec8e1
|
|
@ -0,0 +1,96 @@
|
||||||
|
# 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:
|
||||||
|
|
||||||
|
1. **Add the following declarations in the `/* USER CODE BEGIN PV */` sections**
|
||||||
|
```C
|
||||||
|
/* 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 */
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Declare `lwftp_init()` in the main file**
|
||||||
|
|
||||||
|
example:
|
||||||
|
|
||||||
|
```c
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Call `lwftp_init()` from the user code area** of `StartDefaultTask()` in `main.c`, right after `MX_LWIP_Init()`
|
||||||
|
|
||||||
|
example:
|
||||||
|
|
||||||
|
```c
|
||||||
|
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.
|
||||||
|
|
||||||
|
- **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_DEBUG` comment value in `lwftp.h`.
|
||||||
|
|
||||||
Loading…
Reference in New Issue