W5500 личинка "web сервера"

Продолжая ковырять W5500 решил написать что то типа web сервера, т.к. чего то простого не нашел то решил написать сам и к предыдущему коду добавилось около десяти строк…

Собственно поменял порт на 80 в вызове loopback_tcps (проект к кокосу в приложении) и добавил пару проверок на GET и адрес, если зайти на "/test" то выдаст тупую страничку:

если что то иное то 404:



const char http_200_header[] =
	"HTTP/1.0 200 OK\r\n"
	"Content-Type: text/html; charset=windows-1251\r\n"
	"Server: STM32\r\n"
	"\r\n";


const char http_404_header[] =
	"HTTP/1.0 404 Not Found\r\n"
	"Content-Type: text/html;"
	"Server: STM32\r\n"
	"\r\n"
	"<pre>Page not found\r\n\r\n";

int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
{
   int32_t ret;
   uint16_t size = 0, sentsize=0;
   uint8_t *url;

   switch(getSn_SR(sn))
   {
      case SOCK_ESTABLISHED :
         if(getSn_IR(sn) & Sn_IR_CON)
         {
            printf("%d:Connected\r\n",sn);
            setSn_IR(sn,Sn_IR_CON);
         }
         if((size = getSn_RX_RSR(sn)) > 0)
         {
            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
            ret = recv(sn,buf,size);

            if(ret <= 0)
            return ret;

            sentsize = 0;



             //отсюда
            //проверяем что имеем GET запрос
            if(memcmp(buf, "GET ", 4)==0)
            {
             //выдираем URL - extract URL from request header
             url = buf + 4;

               //насыпем данных  - http data fill
               if(memcmp(url, "/test", 5)==0)
        	  {
               strcpy(buf,http_200_header);//хедеры от Лайфловер :)
               strcat(buf,"SIMPLE HTTP TEST PAGE FOR W5500!");
              }
              else
              {
               strcpy(buf,http_404_header);
              }
              size=strlen(buf);
          
            //вот посюда 


              //sending answer
              while(size != sentsize)
             {
              ret = send(sn,buf+sentsize,size-sentsize);
               if(ret < 0)
               {
                close(sn);
                return ret;
               }
               sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
             }
            }

            //вот и отваливаемся тоже добавилось
            //ending
            disconnect(sn);

         }
         break;
      case SOCK_CLOSE_WAIT :
         printf("%d:CloseWait\r\n",sn);
         if((ret=disconnect(sn)) != SOCK_OK) return ret;
         printf("%d:Closed\r\n",sn);
         break;
      case SOCK_INIT :
    	  printf("%d:Listen, port [%d]\r\n",sn, port);
         if( (ret = listen(sn)) != SOCK_OK) return ret;
         break;
      case SOCK_CLOSED:
         printf("%d:LBTStart\r\n",sn);
         if((ret=socket(sn,Sn_MR_TCP,port,0x00)) != sn)
            return ret;
         printf("%d:Opened\r\n",sn);
         break;
      default:
         break;
   }
   return 1;
}



Disclaimer: вы должны понимать что это конечно только личинка :)
p.s. не личинка we.easyelectronics.ru/GYUR22/w5500stm32sd-web-server.html

  • +1
  • 02 сентября 2014, 17:32
  • GYUR22
  • 1
Файлы в топике: WIZNET_simple_web_test.zip

Комментарии (12)

RSS свернуть / развернуть
со словом «личинка» какие то ассоциации неоднозначные…
+2
  • avatar
  • xar
  • 03 сентября 2014, 12:24
Ну афтар провокатор однако :)
зы щас допиливаю однопоточный, а там глядишь и нормальный со всеми сокетами нарисую
0
Клевая штука.сколько тока она жрет? xport 300 мА ест…
0
  • avatar
  • Dmi
  • 04 сентября 2014, 12:20
в датащите написано ~132мА при передаче на 100Mbit, она ощутимо менее горячая чем ENC28J60
0
отлично, икспорт и рядом не стоял. На ибее что то мало 5500-модулей, в основном 5100.
0
  • avatar
  • Dmi
  • 04 сентября 2014, 13:18
заказал еще один на али ~11USD
0
можно ссылочку пожалуйста?
0
  • avatar
  • Dmi
  • 05 сентября 2014, 12:03
0
спасибо! надо заказывать!
0
  • avatar
  • Dmi
  • 06 сентября 2014, 09:09
100 мбит у модуля — и 130 кб/сек пропускной способности ?!
0
Все правильно. А если обращаться к этому не по LAN с пингом менее миллисекунды, а по инету — и того хуже будет. Тут же ни окон TCP, ничего. Хм… Хотя последнее, быть может, в чипе и реализовано в каком-то виде.
0
  • avatar
  • Vga
  • 04 сентября 2014, 13:04
я писал что это может быть связано еще и с картой и низкой частотой spi — см. следующую статью
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.