修改测试

This commit is contained in:
2026-07-22 11:14:22 +08:00
parent c646df5c2a
commit a7f367f6a3
77 changed files with 1691 additions and 950 deletions

View File

@@ -182,14 +182,13 @@ static int receive_file(int socket, const char *path)
return -1;
}
static unsigned char s_recv_buf[4096];
int bufsize = 4096;
unsigned char buffer[1024];
int err;
int total = 0;
while ((err = lftpd_inet_read(socket, s_recv_buf, bufsize)) > 0) {
while ((err = lftpd_inet_read(socket, buffer, sizeof(buffer))) > 0) {
total += err;
if (lftpd_io_write(fh, s_recv_buf, err) != err) {
if (lftpd_io_write(fh, buffer, err) != err) {
err = -1;
break;
}

View File

@@ -107,7 +107,8 @@ int net_init(const char *ip, const char *mask, const char *gateway) {
ch395f_reset();
DBG_INFO("net_init: set_fun_para...");
/* CH395F 超时/DISCONNECT 后不要自动关闭 Socket由软件手动管理 */
/* 启用单连接模式 + 手动关闭 Socketbit3=1, bit1=0
* bit3=1: DISCONNECT/TIMEOUT 时不自动清空缓冲区,由软件排空数据后手动关闭 */
ch395f_set_fun_para(0x08);
DBG_INFO("net_init: set_tcp_mss...");
@@ -776,6 +777,11 @@ int net_connect(int sockfd, const struct net_sockaddr *addr, int addrlen) {
return 0;
}
/*
* SPI DMA 单次事务最大有效载荷(取 CH395F 驱动公开常量)
*/
#define NET_DMA_MAX_PAYLOAD ((int)CH395F_SPI_DMA_MAX_PAYLOAD)
/*
* 函数功能:发送数据(内部锁定版本,必须在 netTask 上下文调用)
*/
@@ -798,8 +804,8 @@ static int net_send_locked(net_sock_t *p_sock, const void *buf, int len) {
while (sent < len) {
int chunk = len - sent;
if (chunk > NET_SEND_BUF_SIZE) {
chunk = NET_SEND_BUF_SIZE;
if (chunk > NET_DMA_MAX_PAYLOAD) {
chunk = NET_DMA_MAX_PAYLOAD;
}
if (!p_sock->send_ready) {
@@ -869,8 +875,18 @@ static int net_recv_locked(net_sock_t *p_sock, void *buf, int len, int flags) {
return -1;
}
if (p_sock->state == NET_SOCK_STATE_TCP_ACCEPT ||
p_sock->state == NET_SOCK_STATE_CLOSED) {
if (p_sock->state == NET_SOCK_STATE_TCP_ACCEPT) {
return 0;
}
if (p_sock->state == NET_SOCK_STATE_CLOSED) {
/* 断开前尝试排空 CH395F 接收缓冲区Trap 13FIN 可能比数据先到) */
uint16_t rem = ch395f_get_recv_len(sockfd);
if (rem > 0) {
int rd = (rem > (uint16_t)len) ? len : (int)rem;
ch395f_read_recv_buf(sockfd, (uint8_t *)buf, (uint16_t)rd);
p_sock->recv_bytes += (uint32_t)rd;
return rd;
}
return 0;
}
}
@@ -1188,9 +1204,9 @@ int net_recvfrom(int sockfd, void *buf, int len, int flags,
/* 读取数据 */
if (recv_len > 0) {
int read_len = (recv_len > (uint16_t)len) ? len : (int)recv_len;
ch395f_read_recv_buf(sockfd, (uint8_t *)buf, (uint16_t)read_len);
p_sock->recv_bytes += (uint32_t)read_len;
return read_len;
ch395f_read_recv_buf(sockfd, (uint8_t *)buf, (uint16_t)read_len);
p_sock->recv_bytes += (uint32_t)read_len;
return read_len;
}
}
@@ -1481,11 +1497,9 @@ static void handle_disconnect_event(net_sock_t *p_sock) {
}
else if (p_sock->state == NET_SOCK_STATE_ESTABLISHED) {
if (p_sock->standalone_accept) {
/* 独立监听模式PASV 数据通道):通知断开但不释放 Socket
* 留给传输命令STOR/LIST的 accept 检测 CLOSED 状态后统一清理。
* 但必须先关闭 CH395F 硬件 Socket否则后续 ch395f_open_socket 失败 */
/* 独立监听模式:先不关 CH395F Socket
* 留给 net_recv_locked 把剩余数据读出来再关 */
DBG_INFO("sock%d DISCONNECTED, releasing", p_sock->ch395_sock);
ch395f_close_socket(p_sock->ch395_sock);
p_sock->state = NET_SOCK_STATE_CLOSED;
fire_event(p_sock, NET_EVENT_DISCONNECTED);
} else {
@@ -1512,11 +1526,9 @@ static void handle_disconnect_event(net_sock_t *p_sock) {
/*
* 函数功能处理数据接收事<E694B6>? */
static void handle_recv_event(net_sock_t *p_sock) {
uint16_t recv_len = ch395f_get_recv_len(p_sock->ch395_sock);
if (recv_len > 0) {
fire_event(p_sock, NET_EVENT_DATA_RECEIVED);
}
/* RECV_OK 中断已触发,直接通知上层。不在此读 recv_len
* 避免和 net_recv_locked 里面的 ch395f_get_recv_len 冲突Trap 13 */
fire_event(p_sock, NET_EVENT_DATA_RECEIVED);
}
/*
@@ -1534,12 +1546,8 @@ static void handle_timeout_event(net_sock_t *p_sock) {
p_sock->state = NET_SOCK_STATE_CREATED;
}
else if (p_sock->state == NET_SOCK_STATE_ESTABLISHED) {
if (p_sock->standalone_accept) {
DBG_INFO("sock%d TIMEOUT (ignored)", p_sock->ch395_sock);
} else {
DBG_ERROR("sock%d TIMEOUT", p_sock->ch395_sock);
p_sock->state = NET_SOCK_STATE_TCP_ACCEPT;
}
DBG_ERROR("sock%d TIMEOUT", p_sock->ch395_sock);
p_sock->state = p_sock->standalone_accept ? NET_SOCK_STATE_CLOSED : NET_SOCK_STATE_TCP_ACCEPT;
}
else if (p_sock->state == NET_SOCK_STATE_LISTENING) {
/* 监听超时(异常情况) */