본문 바로가기

Cortex-M/INFINEON

XMC1300 EVM - Simple Embedded Web Server Test

[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;

}

}




반응형