Compare commits
6 Commits
modifyFTPS
...
FIxedwiz_c
Author | SHA1 | Date | |
---|---|---|---|
a9141a7ade | |||
de18368e5d | |||
1fadc591bc | |||
18aeb30431 | |||
96857e86aa | |||
84f4b6d030 |
113
Application/multicast/multicast.c
Normal file
113
Application/multicast/multicast.c
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
#include "multicast.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "socket.h"
|
||||||
|
#include "wizchip_conf.h"
|
||||||
|
|
||||||
|
|
||||||
|
int32_t multicast_loopback(uint8_t sn, uint8_t* buf, uint8_t* multicast_ip, uint16_t multicast_port)
|
||||||
|
{
|
||||||
|
int32_t ret;
|
||||||
|
uint16_t size, sentsize;
|
||||||
|
uint8_t destip[4];
|
||||||
|
uint16_t destport, port=3000;
|
||||||
|
|
||||||
|
switch(getSn_SR(sn))
|
||||||
|
{
|
||||||
|
case SOCK_UDP :
|
||||||
|
if((size = getSn_RX_RSR(sn)) > 0)
|
||||||
|
{
|
||||||
|
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
|
||||||
|
ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);
|
||||||
|
if(ret <= 0)
|
||||||
|
{
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d: recvfrom error. %ld\r\n",sn,ret);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
size = (uint16_t) ret;
|
||||||
|
sentsize = 0;
|
||||||
|
while(sentsize != size)
|
||||||
|
{
|
||||||
|
ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport);
|
||||||
|
if(ret < 0)
|
||||||
|
{
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d: sendto error. %ld\r\n",sn,ret);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case SOCK_CLOSED:
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d:Multicast Loopback start\r\n",sn);
|
||||||
|
#endif
|
||||||
|
setSn_DIPR(0, multicast_ip);
|
||||||
|
setSn_DPORT(0, multicast_port);
|
||||||
|
if((ret = socket(sn, Sn_MR_UDP, port, Sn_MR_MULTI)) != sn)
|
||||||
|
return ret;
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d:Opened, UDP Multicast Socket\r\n", sn);
|
||||||
|
printf("%d:Multicast Group IP - %d.%d.%d.%d\r\n", sn, multicast_ip[0], multicast_ip[1], multicast_ip[2], multicast_ip[3]);
|
||||||
|
printf("%d:Multicast Group Port - %d\r\n", sn, multicast_port);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t multicast_recv(uint8_t sn, uint8_t* buf, uint8_t* multicast_ip, uint16_t multicast_port)
|
||||||
|
{
|
||||||
|
int32_t ret;
|
||||||
|
uint16_t size, port=3000;
|
||||||
|
uint8_t destip[4];
|
||||||
|
uint16_t destport;
|
||||||
|
|
||||||
|
switch(getSn_SR(sn))
|
||||||
|
{
|
||||||
|
case SOCK_UDP :
|
||||||
|
if((size = getSn_RX_RSR(sn)) > 0)
|
||||||
|
{
|
||||||
|
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
|
||||||
|
ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);
|
||||||
|
if(ret <= 0)
|
||||||
|
{
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d: recvfrom error. %ld\r\n",sn,ret);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
size = (uint16_t) ret;
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("\r\nrecv size : %d\r\n", size);
|
||||||
|
for(int i=0; i<size; i++)
|
||||||
|
printf("%c", buf[i]);
|
||||||
|
printf("\r\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SOCK_CLOSED:
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d:Multicast Recv start\r\n",sn);
|
||||||
|
#endif
|
||||||
|
setSn_DIPR(sn, multicast_ip);
|
||||||
|
setSn_DPORT(sn, multicast_port);
|
||||||
|
if((ret = socket(sn, Sn_MR_UDP, port, Sn_MR_MULTI)) != sn)
|
||||||
|
return ret;
|
||||||
|
#ifdef _MULTICAST_DEBUG_
|
||||||
|
printf("%d:Opened, UDP Multicast Socket\r\n", sn);
|
||||||
|
printf("%d:Multicast Group IP - %d.%d.%d.%d\r\n", sn, multicast_ip[0], multicast_ip[1], multicast_ip[2], multicast_ip[3]);
|
||||||
|
printf("%d:Multicast Group Port - %d\r\n", sn, multicast_port);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
28
Application/multicast/multicast.h
Normal file
28
Application/multicast/multicast.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef _MULTICAST_H_
|
||||||
|
#define _MULTICAST_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* Multicast test debug message printout enable */
|
||||||
|
#define _MULTICAST_DEBUG_
|
||||||
|
|
||||||
|
#ifndef DATA_BUF_SIZE
|
||||||
|
#define DATA_BUF_SIZE 2048
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* UDP Multicast Loopback test example */
|
||||||
|
int32_t multicast_loopback(uint8_t sn, uint8_t* buf, uint8_t* multicast_ip, uint16_t multicast_port);
|
||||||
|
|
||||||
|
/* UDP Multicast Recv test example */
|
||||||
|
int32_t multicast_recv(uint8_t sn, uint8_t* buf, uint8_t* multicast_ip, uint16_t multicast_port);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -117,6 +117,7 @@ int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag)
|
|||||||
uint32_t taddr;
|
uint32_t taddr;
|
||||||
getSIPR((uint8_t*)&taddr);
|
getSIPR((uint8_t*)&taddr);
|
||||||
if(taddr == 0) return SOCKERR_SOCKINIT;
|
if(taddr == 0) return SOCKERR_SOCKINIT;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case Sn_MR_UDP :
|
case Sn_MR_UDP :
|
||||||
case Sn_MR_MACRAW :
|
case Sn_MR_MACRAW :
|
||||||
|
@ -521,7 +521,12 @@ void wizchip_clrinterrupt(intr_kind intr)
|
|||||||
setIR( ((((uint16_t)ir) << 8) | (((uint16_t)sir) & 0x00FF)) );
|
setIR( ((((uint16_t)ir) << 8) | (((uint16_t)sir) & 0x00FF)) );
|
||||||
#else
|
#else
|
||||||
setIR(ir);
|
setIR(ir);
|
||||||
setSIR(sir);
|
//M20200227 : For clear
|
||||||
|
//setSIR(sir);
|
||||||
|
for(ir=0; ir<8; ir++){
|
||||||
|
if(sir & (0x01 <<ir) ) setSn_IR(ir, 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ void httpServer_run(uint8_t seqnum)
|
|||||||
|
|
||||||
gettime = get_httpServer_timecount();
|
gettime = get_httpServer_timecount();
|
||||||
// Check the TX socket buffer for End of HTTP response sends
|
// Check the TX socket buffer for End of HTTP response sends
|
||||||
while(getSn_TX_FSR(s) != (getSn_TXBUF_SIZE(s)*1024))
|
while(getSn_TX_FSR(s) != (getSn_TxMAX(s)))
|
||||||
{
|
{
|
||||||
if((get_httpServer_timecount() - gettime) > 3)
|
if((get_httpServer_timecount() - gettime) > 3)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user