|
|
@@ -16,7 +16,6 @@
|
|
|
|
|
|
#define MAX_SIZE 4096
|
|
|
|
|
|
-
|
|
|
static err_t tcp_accept_handle(void *arg, struct tcp_pcb *pcb, err_t err);
|
|
|
static err_t tcp_recv_handle(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
|
|
|
err_t err);
|
|
|
@@ -25,14 +24,20 @@ err_t tcp_send_data(struct tcp_pcb *pcb, struct pbuf *p);
|
|
|
err_t queue_send_data(struct pbuf *p);
|
|
|
|
|
|
static struct udp_pcb *gui_udp_pcb;
|
|
|
-static struct tcp_pcb *tcp_server_pcb ;
|
|
|
+static struct tcp_pcb *tcp_server_pcb;
|
|
|
static struct tcp_pcb *cur_conn = NULL; // 当前连接
|
|
|
-
|
|
|
+static unsigned int ipAddr = 0;
|
|
|
+void init_ip(void);
|
|
|
void lwip_device_init(void)
|
|
|
{
|
|
|
- unsigned char macArray[6] = MAC_ADDRESS;
|
|
|
EthernetInit(); //以太网外设配置
|
|
|
- unsigned int ipAddr = 0;
|
|
|
+ init_ip();
|
|
|
+ //udp_bind(gui_udp_pcb, IP_ADDR_ANY, 3000);
|
|
|
+}
|
|
|
+
|
|
|
+void init_ip(void)
|
|
|
+{
|
|
|
+ unsigned char macArray[6] = MAC_ADDRESS;
|
|
|
unsigned int retry_count = 0;
|
|
|
while (ipAddr == 0)
|
|
|
{
|
|
|
@@ -40,7 +45,7 @@ void lwip_device_init(void)
|
|
|
ipAddr = lwIPInit(0, macArray, STATIC_IP_ADDRESS, STATIC_NET_MASK, 0,
|
|
|
IPADDR_USE_STATIC);
|
|
|
#else
|
|
|
- ipAddr = lwIPInit(0, macArray, 0, 0, 0, IPADDR_USE_DHCP);
|
|
|
+ ipAddr = lwIPInit(0, macArray, 0, 0, 0, IPADDR_USE_DHCP);
|
|
|
#endif
|
|
|
if (retry_count++ > 5)
|
|
|
{
|
|
|
@@ -48,14 +53,24 @@ void lwip_device_init(void)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
ConsolePrintf("lwIP HostIP:%d.%d.%d.%d\n", (ipAddr >> (0 * 8)) & 0xFF,
|
|
|
(ipAddr >> (1 * 8)) & 0xFF, (ipAddr >> (2 * 8)) & 0xFF,
|
|
|
(ipAddr >> (3 * 8)) & 0xFF);
|
|
|
+ if (ipAddr != 0)
|
|
|
+ {
|
|
|
+ if (gui_udp_pcb == NULL)
|
|
|
+ {
|
|
|
+ gui_udp_pcb = udp_new();
|
|
|
+ lwip_udp_connect(gui_udp_pcb, UI_IP_ADDRESS, UI_UDP_PORT);
|
|
|
+ }
|
|
|
+ if (tcp_server_pcb == NULL)
|
|
|
+ {
|
|
|
+ tcp_server_pcb = tcp_new();
|
|
|
+ lwip_tcp_init(TCP_SERVER_PORT);
|
|
|
+ }
|
|
|
|
|
|
- gui_udp_pcb = udp_new();
|
|
|
- udp_bind(gui_udp_pcb, IP_ADDR_ANY, 3000);
|
|
|
- lwip_udp_connect(gui_udp_pcb, UI_IP_ADDRESS, UI_UDP_PORT);
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -66,33 +81,34 @@ err_t lwip_tcp_init(int port)
|
|
|
err_t err;
|
|
|
//struct tcp_pcb *pcb;
|
|
|
|
|
|
- tcp_server_pcb = tcp_new();
|
|
|
- if (tcp_server_pcb == NULL) {
|
|
|
- ConsolePuts("tcp new 空间不足", -1);
|
|
|
- return ERR_MEM; // 内存不足
|
|
|
+ if (tcp_server_pcb == NULL)
|
|
|
+ {
|
|
|
+ ConsolePuts("tcp new 空间不足", -1);
|
|
|
+ return ERR_MEM; // 内存不足
|
|
|
}
|
|
|
- err = tcp_bind(tcp_server_pcb , IP_ADDR_ANY, port);
|
|
|
- if (err != ERR_OK) {
|
|
|
- ConsolePuts("tcp 绑定断开失败", -1);
|
|
|
- return err;
|
|
|
+ err = tcp_bind(tcp_server_pcb, IP_ADDR_ANY, port);
|
|
|
+ if (err != ERR_OK)
|
|
|
+ {
|
|
|
+ ConsolePuts("tcp 绑定断开失败", -1);
|
|
|
+ return err;
|
|
|
}
|
|
|
- tcp_server_pcb = tcp_listen(tcp_server_pcb );
|
|
|
- if(tcp_server_pcb == NULL)
|
|
|
+ tcp_server_pcb = tcp_listen(tcp_server_pcb);
|
|
|
+ if (tcp_server_pcb == NULL)
|
|
|
{
|
|
|
ConsolePuts("tcp 监听失败", -1);
|
|
|
}
|
|
|
/* initialize callback arg and accept callback */
|
|
|
- tcp_arg(tcp_server_pcb , NULL);
|
|
|
- tcp_accept(tcp_server_pcb , tcp_accept_handle);
|
|
|
+ tcp_arg(tcp_server_pcb, NULL);
|
|
|
+ tcp_accept(tcp_server_pcb, tcp_accept_handle);
|
|
|
return ERR_OK;
|
|
|
}
|
|
|
|
|
|
// 连接错误回调(可选)
|
|
|
-static void tcp_server_conn_err(void *arg, err_t err) {
|
|
|
- ConsolePrintf("TCP 连接错误:%s\n", lwip_strerr(err));
|
|
|
+static void tcp_server_conn_err(void *arg, err_t err)
|
|
|
+{
|
|
|
+ ConsolePrintf("TCP 连接错误:%s\n", lwip_strerr(err));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 链接监听函数.
|
|
|
*/
|
|
|
@@ -139,7 +155,7 @@ static err_t tcp_recv_handle(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
|
|
|
}
|
|
|
cur_conn = pcb;
|
|
|
//tcp_send_data(pcb ,p);
|
|
|
- if(p!=NULL)
|
|
|
+ if (p != NULL)
|
|
|
{
|
|
|
err_send = queue_send_data(p);
|
|
|
}
|
|
|
@@ -184,7 +200,8 @@ err_t tcp_send_data(struct tcp_pcb *pcb, struct pbuf *p)
|
|
|
len = p->len;
|
|
|
for (i = 0, j = 0; i < len; i++, j++, cnt++)
|
|
|
{
|
|
|
- if(cnt>=MAX_SIZE) break;
|
|
|
+ if (cnt >= MAX_SIZE)
|
|
|
+ break;
|
|
|
mydata[cnt] = data[j];
|
|
|
}
|
|
|
p = p->next;
|
|
|
@@ -199,13 +216,13 @@ err_t tcp_send_data(struct tcp_pcb *pcb, struct pbuf *p)
|
|
|
*send the data in buffer over network with
|
|
|
* tcp header attached
|
|
|
*/
|
|
|
- err = tcp_write(pcb, mydata, tot_len , TCP_WRITE_FLAG_COPY);
|
|
|
+ err = tcp_write(pcb, mydata, tot_len, TCP_WRITE_FLAG_COPY);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
void lwip_tcp_send_gui(unsigned char *data, int len)
|
|
|
{
|
|
|
- tcp_write(cur_conn, data, len , TCP_WRITE_FLAG_COPY);
|
|
|
+ tcp_write(cur_conn, data, len, TCP_WRITE_FLAG_COPY);
|
|
|
tcp_output(cur_conn);
|
|
|
}
|
|
|
|
|
|
@@ -218,10 +235,10 @@ err_t queue_send_data(struct pbuf *p)
|
|
|
unsigned int len = 0;
|
|
|
do
|
|
|
{
|
|
|
- char* data = (char*) p->payload;
|
|
|
+ char *data = (char*) p->payload;
|
|
|
len = p->len;
|
|
|
ConsolePuts("\r\ntcp rec data:\r\n", -1);
|
|
|
- if(len>0)
|
|
|
+ if (len > 0)
|
|
|
{
|
|
|
ConsolePutsHexStr(data, len);
|
|
|
enqueueFromEthernet(data, len);
|
|
|
@@ -276,8 +293,7 @@ void lwip_udp_sendto(struct udp_pcb *pcb, unsigned int ip, int port,
|
|
|
|
|
|
void lwip_udp_send_gui(unsigned char *data, int len)
|
|
|
{
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, len,
|
|
|
- PBUF_REF);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_REF);
|
|
|
pbuf->payload = data;
|
|
|
udp_send(gui_udp_pcb, pbuf);
|
|
|
pbuf_free(pbuf);
|
|
|
@@ -289,18 +305,17 @@ void lwip_udp_send_gui(unsigned char *data, int len)
|
|
|
*/
|
|
|
void lwip_udp_send_gui_signal(float *data, int flen, char channelFlag)
|
|
|
{
|
|
|
- unsigned char head[8]={'T','R',1,3,1,1};
|
|
|
- int clen = sizeof(float)*flen;
|
|
|
+ unsigned char head[8] = { 'T', 'R', 1, 3, 1, 1 };
|
|
|
+ int clen = sizeof(float) * flen;
|
|
|
int head_len = sizeof(head);
|
|
|
- int total_len = head_len+1+clen;
|
|
|
- head[6] = total_len>>8;
|
|
|
+ int total_len = head_len + 1 + clen;
|
|
|
+ head[6] = total_len >> 8;
|
|
|
head[7] = total_len;
|
|
|
- unsigned char* fdata = malloc(total_len);
|
|
|
- memcpy(fdata,&head,head_len);
|
|
|
+ unsigned char *fdata = malloc(total_len);
|
|
|
+ memcpy(fdata, &head, head_len);
|
|
|
fdata[head_len] = channelFlag;
|
|
|
- memcpy(fdata+head_len+1,data,clen);
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, total_len,
|
|
|
- PBUF_REF);
|
|
|
+ memcpy(fdata + head_len + 1, data, clen);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, total_len, PBUF_REF);
|
|
|
pbuf->payload = fdata;
|
|
|
udp_send(gui_udp_pcb, pbuf);
|
|
|
pbuf_free(pbuf);
|
|
|
@@ -311,29 +326,29 @@ void lwip_udp_send_gui_signal(float *data, int flen, char channelFlag)
|
|
|
* udp 向gui发送数据
|
|
|
* data 浮点数据指针, len 数据数量, channelFlag 有效通道
|
|
|
*/
|
|
|
-void lwip_udp_send_gui_signal2(float *data1,float *data2,float *data3,float *data4, char channelFlag, int len)
|
|
|
+void lwip_udp_send_gui_signal2(float *data1, float *data2, float *data3,
|
|
|
+ float *data4, char channelFlag, int len)
|
|
|
{
|
|
|
- unsigned char head[8]={'T','R',1,3,1,1};
|
|
|
- int clen = sizeof(float)*len*4;
|
|
|
+ unsigned char head[8] = { 'T', 'R', 1, 3, 1, 1 };
|
|
|
+ int clen = sizeof(float) * len * 4;
|
|
|
int head_len = sizeof(head);
|
|
|
- int total_len = head_len+1+clen;
|
|
|
- head[6] = total_len>>8;
|
|
|
+ int total_len = head_len + 1 + clen;
|
|
|
+ head[6] = total_len >> 8;
|
|
|
head[7] = total_len;
|
|
|
- unsigned char* const fdata = malloc(total_len);
|
|
|
- memcpy(fdata,&head,head_len);
|
|
|
+ unsigned char *const fdata = malloc(total_len);
|
|
|
+ memcpy(fdata, &head, head_len);
|
|
|
fdata[head_len] = channelFlag;
|
|
|
- unsigned char* cp = fdata+head_len+1;
|
|
|
+ unsigned char *cp = fdata + head_len + 1;
|
|
|
int i = 0;
|
|
|
- for(i=0; i<len; i++)
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
{
|
|
|
- memcpy(cp+(i*sizeof(float)*4),data1++,sizeof(float));
|
|
|
- memcpy(cp+(i*sizeof(float)*4)+4,data2++,sizeof(float));
|
|
|
- memcpy(cp+(i*sizeof(float)*4)+8,data3++,sizeof(float));
|
|
|
- memcpy(cp+(i*sizeof(float)*4)+12,data4++,sizeof(float));
|
|
|
+ memcpy(cp + (i * sizeof(float) * 4), data1++, sizeof(float));
|
|
|
+ memcpy(cp + (i * sizeof(float) * 4) + 4, data2++, sizeof(float));
|
|
|
+ memcpy(cp + (i * sizeof(float) * 4) + 8, data3++, sizeof(float));
|
|
|
+ memcpy(cp + (i * sizeof(float) * 4) + 12, data4++, sizeof(float));
|
|
|
}
|
|
|
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, total_len,
|
|
|
- PBUF_REF);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, total_len, PBUF_REF);
|
|
|
pbuf->payload = fdata;
|
|
|
// ConsolePuts("signal data:\n", -1);
|
|
|
// ConsolePutsHexStr(pbuf->payload, total_len);
|
|
|
@@ -349,17 +364,16 @@ void lwip_udp_send_gui_signal2(float *data1,float *data2,float *data3,float *dat
|
|
|
void lwip_udp_send_vofa(float *data, int len)
|
|
|
{
|
|
|
int i = 0;
|
|
|
- char tail[4] = {0x00, 0x00, 0x80, 0x7f};
|
|
|
- int flen = (sizeof(float)+4)*len;
|
|
|
- unsigned char* fdata = malloc(flen);
|
|
|
- for(i=0;i<len;i++)
|
|
|
+ char tail[4] = { 0x00, 0x00, 0x80, 0x7f };
|
|
|
+ int flen = (sizeof(float) + 4) * len;
|
|
|
+ unsigned char *fdata = malloc(flen);
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
{
|
|
|
- memcpy(fdata+(i*(sizeof(float)+4)),data,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)+4))+4,tail,sizeof(tail));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) + 4)), data, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) + 4)) + 4, tail, sizeof(tail));
|
|
|
data++;
|
|
|
}
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen,
|
|
|
- PBUF_REF);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen, PBUF_REF);
|
|
|
pbuf->payload = fdata;
|
|
|
ConsolePuts("signal data2:\n", -1);
|
|
|
ConsolePutsHexStr(pbuf->payload, flen);
|
|
|
@@ -376,19 +390,18 @@ void lwip_udp_send_vofa2(float *data1, float *data2, int len)
|
|
|
{
|
|
|
ConsolePuts("lwip send data", -1);
|
|
|
int i = 0;
|
|
|
- char tail[4] = {0x00, 0x00, 0x80, 0x7f};
|
|
|
- int flen = (sizeof(float)*2+4)*len;
|
|
|
- unsigned char* fdata = malloc(flen);
|
|
|
- for(i=0;i<len;i++)
|
|
|
+ char tail[4] = { 0x00, 0x00, 0x80, 0x7f };
|
|
|
+ int flen = (sizeof(float) * 2 + 4) * len;
|
|
|
+ unsigned char *fdata = malloc(flen);
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
{
|
|
|
- memcpy(fdata+(i*(sizeof(float)*2+4)),data1,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*2+4))+4,data2,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*2+4))+8,tail,sizeof(tail));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 2 + 4)), data1, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 2 + 4)) + 4, data2, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 2 + 4)) + 8, tail, sizeof(tail));
|
|
|
data1++;
|
|
|
data2++;
|
|
|
}
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen,
|
|
|
- PBUF_REF);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen, PBUF_REF);
|
|
|
|
|
|
pbuf->payload = fdata;
|
|
|
udp_send(gui_udp_pcb, pbuf);
|
|
|
@@ -400,26 +413,26 @@ void lwip_udp_send_vofa2(float *data1, float *data2, int len)
|
|
|
* udp 向波形模拟器VOFA发送数据 四通道
|
|
|
* data1 要发送的通道1数据,data1 要发送的通道2数据,len float数组长度
|
|
|
*/
|
|
|
-void lwip_udp_send_vofa4(float *data1, float *data2,float *data3, float *data4, int len)
|
|
|
+void lwip_udp_send_vofa4(float *data1, float *data2, float *data3, float *data4,
|
|
|
+ int len)
|
|
|
{
|
|
|
int i = 0;
|
|
|
- char tail[4] = {0x00, 0x00, 0x80, 0x7f};
|
|
|
- int flen = (sizeof(float)*4+4)*len;
|
|
|
- unsigned char* fdata = malloc(flen);
|
|
|
- for(i=0;i<len;i++)
|
|
|
+ char tail[4] = { 0x00, 0x00, 0x80, 0x7f };
|
|
|
+ int flen = (sizeof(float) * 4 + 4) * len;
|
|
|
+ unsigned char *fdata = malloc(flen);
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
{
|
|
|
- memcpy(fdata+(i*(sizeof(float)*4+4)),data1,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*4+4))+4,data2,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*4+4))+8,data3,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*4+4))+12,data4,sizeof(float));
|
|
|
- memcpy(fdata+(i*(sizeof(float)*4+4))+16,tail,sizeof(tail));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 4 + 4)), data1, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 4 + 4)) + 4, data2, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 4 + 4)) + 8, data3, sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 4 + 4)) + 12, data4,sizeof(float));
|
|
|
+ memcpy(fdata + (i * (sizeof(float) * 4 + 4)) + 16, tail, sizeof(tail));
|
|
|
data1++;
|
|
|
data2++;
|
|
|
data3++;
|
|
|
data4++;
|
|
|
}
|
|
|
- struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen,
|
|
|
- PBUF_REF);
|
|
|
+ struct pbuf *pbuf = pbuf_alloc(PBUF_TRANSPORT, flen, PBUF_REF);
|
|
|
pbuf->payload = fdata;
|
|
|
// ConsolePuts("\nsignal data2:\n", -1);
|
|
|
// ConsolePutsHexStr(pbuf->payload, flen);
|