仓库迁移
This commit is contained in:
92
source/task/udp.c
Normal file
92
source/task/udp.c
Normal file
@@ -0,0 +1,92 @@
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/api.h"
|
||||
#include "debug.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "board.h"
|
||||
#include "udp.h"
|
||||
#include "dev_flash.h"
|
||||
|
||||
|
||||
typedef struct{
|
||||
struct netconn *conn;
|
||||
struct netbuf *buf;// 接收的数据
|
||||
ip_addr_t dst_ip;
|
||||
int dst_port;
|
||||
}self_def;
|
||||
|
||||
|
||||
void *tappend(void *p,void *del);
|
||||
|
||||
|
||||
|
||||
|
||||
static void udp_thread(void *arg)
|
||||
{
|
||||
self_def *s=arg;
|
||||
err_t err;
|
||||
LWIP_UNUSED_ARG(arg);
|
||||
ip_addr_t dst;
|
||||
const sys_param_def *par=sys_param();
|
||||
IP4_ADDR(&dst,par->host_ip[0],par->host_ip[1],par->host_ip[2],par->host_ip[3]);
|
||||
|
||||
while (1) {
|
||||
|
||||
s->conn = netconn_new(NETCONN_UDP);
|
||||
err=netconn_bind(s->conn, IP_ADDR_ANY, 7777);
|
||||
if (err == ERR_OK) {
|
||||
void *data;
|
||||
u16_t len;
|
||||
while ((err = netconn_recv(s->conn, &s->buf)) == ERR_OK) {
|
||||
do {
|
||||
netbuf_data(s->buf, &data, &len);
|
||||
s->dst_ip=*netbuf_fromaddr(s->buf);
|
||||
s->dst_port=netbuf_fromport(s->buf);
|
||||
array_def *arr=arr_creat();
|
||||
arr_appends(arr,data,len);
|
||||
arr_append(arr,0);
|
||||
// 字符数据命令字为0
|
||||
emit udp_recv_signal(s,0,arr_temp(arr),"ok");
|
||||
} while (netbuf_next(s->buf) >= 0);
|
||||
netbuf_delete(s->buf);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG_LOG("udp:err=%d",err);
|
||||
}
|
||||
netconn_close(s->conn);
|
||||
netconn_delete(s->conn);
|
||||
sys_msleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int myudp_init(void)
|
||||
{
|
||||
self_def *s=calloc(1,sizeof(self_def));
|
||||
sys_thread_new("udp_thread", udp_thread, s, 2048, 29);
|
||||
app_variable("udp",s,0);
|
||||
return 0;
|
||||
}
|
||||
app_init_export(myudp_init)
|
||||
|
||||
|
||||
|
||||
void udp_reply_call(void *obj,uint8_t cmd,array_def *data)
|
||||
{
|
||||
self_def *s=obj;
|
||||
err_t err;
|
||||
if(s->dst_port!=0){
|
||||
struct netbuf *sbuf=netbuf_new();
|
||||
netbuf_ref(sbuf,arr_data(data),arr_length(data));
|
||||
err=netconn_sendto(s->conn,sbuf,&s->dst_ip,s->dst_port);
|
||||
netbuf_delete(sbuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user