[XMC1300 EVM] Simple Embedded Web Server Test
XMC1300과 W5200을 이용하여 TCP/IP 통신이 테스트 되었기 때문에 활용 방안으로 간단히 임베디드 웹서버응 테스트 해 보았다
XMC1300은 저렴한 MCU이지만 16Kbyte의 램과 200Kbyte의 플래시 메모리를 가지고 있기 때문에 웹페이지를 저장 할 수 있는 공간이 충분하다. 웹서버는 이러한 XMC1300의 장점을 잘 살릴 수 있는 어플리 케이션이다
XMC1300 EVM을 이용한 임베디드 웹서버 테스트 동영상
XMC1300 Embedded WebServer 테스트 소스코드
간한히 테스트 하기 위해 코드를 최대한 단순하게 작성하였다.
void ProcessTCPS(unsigned int sock)
{
int i;
int len;
unsigned int port = MY_LISTEN_PORT;
int wait_send=0;
switch (getSn_SR(SOCK_TCPS))
{
case SOCK_ESTABLISHED:
if(m_SokStatus1==1)
{
DebugPrint("%d : Connected by %s(%u)\r\n");
m_SokStatus1 = 2;
}
if ((len = getSn_RX_RSR(sock)) > 0)
{
if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
len = recv(sock, data_buf, len);
U0_PutBuf(data_buf, len);
//LED 제어 처리
if(strstr(data_buf, "ledr_on.jpg"))
{
for(i=0;i<(IMG_BUF_SIZE/TX_RX_MAX_BUF_SIZE);i++)
{
send(sock, &img_buf[i*TX_RX_MAX_BUF_SIZE], TX_RX_MAX_BUF_SIZE, 0);
}
send(sock, &img_buf[i*TX_RX_MAX_BUF_SIZE], IMG_BUF_SIZE%TX_RX_MAX_BUF_SIZE, 0);
}
else if(strstr(data_buf, "ledr_of.jpg"))
{
for(i=0;i<(IMG_BUF_SIZE2/TX_RX_MAX_BUF_SIZE);i++)
{
send(sock, &img_buf2[i*TX_RX_MAX_BUF_SIZE], TX_RX_MAX_BUF_SIZE, 0);
}
send(sock, &img_buf2[i*TX_RX_MAX_BUF_SIZE], IMG_BUF_SIZE2%TX_RX_MAX_BUF_SIZE, 0);
}
else if(strstr(data_buf, "led_off.html"))
{
send(sock, str_msg3, strlen(str_msg3), 0);
Led1Off();
Led2Off();
DebugPrint("led off\r\n");
}
else if(strstr(data_buf, "led_on.html"))
{
send(sock, str_msg, strlen(str_msg), 0);
Led1On();
Led2On();
DebugPrint("led on\r\n");
}
else if(strstr(data_buf, "index.html"))
{
send(sock, str_msg, strlen(str_msg), 0);
DebugPrint("main\r\n");
}
else
{
if(led_flag == 0)
{
led_flag = 1;
send(sock, str_msg, strlen(str_msg), 0);
DebugPrint("main\r\n");
}
}
while(getSn_TX_FSR(sock)!= getIINCHIP_TxMAX(sock))
{
if(wait_send++ > 1500)
{
DebugPrint( "HTTP Response send fail");
break;
}
Delay(1);
}
disconnect(sock);
DebugPrint("closed\r\n");
}
break;
case SOCK_CLOSE_WAIT:
disconnect(sock);
m_SokStatus1 = 0;
break;
case SOCK_CLOSED:
if(!m_SokStatus1)
{
DebugPrint("[%d] : Web Server Started.",sock);
m_SokStatus1 = 1;
}
if(socket(sock, Sn_MR_TCP, DEFAULT_HTTP_PORT, 0x00) == 0)
{
DebugPrint("\a%d : Fail to create socket.",sock);
m_SokStatus1 = 0;
}
else listen(sock);
break;
default:
break;
}
}