This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

RL-ARM http-server

Hello!

I'm trying to run HTTP-server on my LPC1788 board. lwip stack works fine. But when I try to run http-server under RL-ARM programm doesn't start at all. I included to my project follow files: EMAC_LPC177x_8x.c, Net_Config.c, TCP_CM3.lib, TCPD_CM3.lib (and corresponding headers Net_Config.h, EMAC_LPC177x_8x.h). Here my program:

include "LPC177x_8x.h"
#include "debug_frmwrk.h"
#include "RTL.h"

int main (void)
{
   SystemInit();

        debug_frmwrk_init();
        _DBG_("Started!");

        init_TcpNet ();

   while (1)
   {
      main_TcpNet();
   }

}


I want just to try ping my board from my PC Ethernet. Do you mind to explain to me what is wrong?

Regards, Vasilij.

Parents
  • Finally I did it! Once again thanks a lot for your help! My code follow:

    void send_data (U8 tcp_soc)
    {
    
        U32 unMax;
        U8 *ucSendbuf;
                    U8 data[] = "HTTP/1.0 200 Ok\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n<html><head>Hello!</head><body> <h1>Nothing to see here</h1></body></html>\n";//
    
            if (tcp_check_send (tcp_soc))
            {
                                            unMax = tcp_max_dsize (sizeof(data));
              ucSendbuf = tcp_get_buf (unMax);
                                            memcpy(ucSendbuf, data, sizeof(data));
              tcp_send (tcp_soc, ucSendbuf, sizeof(data));
           }
    
     }
    
    static void timer_poll () {
      /* System tick timer running in poll mode */
      static U32 time;
    
      if (SysTick->CTRL & 0x10000) {
        time++;
        if (time == 10) {
          /* Timer tick every 100 ms */
          time = 0;
          timer_tick ();
        }
      }
    }
    
    //Opened socket-----
    static U8 socket_tcp;
    
    U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
    
      par = par;
    
      if (soc != socket_tcp) {
        return (0);
      }
    
      switch (evt) {
    
        case TCP_EVT_DATA:
    flag = 1;
          return (1);
    
        case TCP_EVT_CONREQ:
          return (1);
    
        case TCP_EVT_CONNECT:
          return (1);
    
        case TCP_EVT_ACK:
          return (1);
    
      }
      return (0);
    }
    
    void webServerTsk (void *pvParameters)
    {
            init_TcpNet ();
            socket_tcp = tcp_get_socket (TCP_TYPE_SERVER, 0, 10, tcp_callback);
            if (socket_tcp != 0) tcp_listen (socket_tcp, 80);//PORT_NUM
            for(;;)
            {
                    timer_poll ();
                    main_TcpNet ();
                    if(flag == 1)
                    {
                            //It works and sends data
                            send_data (socket_tcp);
    
                            //It doesn't work and doesn't send data
                            send_data (socket_tcp);
                            flag = 0;
                    }
                    portYIELD();
            }
    }
    

    But now I can't to send more than one TCP message. What I'm doing wrong?

Reply
  • Finally I did it! Once again thanks a lot for your help! My code follow:

    void send_data (U8 tcp_soc)
    {
    
        U32 unMax;
        U8 *ucSendbuf;
                    U8 data[] = "HTTP/1.0 200 Ok\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n<html><head>Hello!</head><body> <h1>Nothing to see here</h1></body></html>\n";//
    
            if (tcp_check_send (tcp_soc))
            {
                                            unMax = tcp_max_dsize (sizeof(data));
              ucSendbuf = tcp_get_buf (unMax);
                                            memcpy(ucSendbuf, data, sizeof(data));
              tcp_send (tcp_soc, ucSendbuf, sizeof(data));
           }
    
     }
    
    static void timer_poll () {
      /* System tick timer running in poll mode */
      static U32 time;
    
      if (SysTick->CTRL & 0x10000) {
        time++;
        if (time == 10) {
          /* Timer tick every 100 ms */
          time = 0;
          timer_tick ();
        }
      }
    }
    
    //Opened socket-----
    static U8 socket_tcp;
    
    U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
    
      par = par;
    
      if (soc != socket_tcp) {
        return (0);
      }
    
      switch (evt) {
    
        case TCP_EVT_DATA:
    flag = 1;
          return (1);
    
        case TCP_EVT_CONREQ:
          return (1);
    
        case TCP_EVT_CONNECT:
          return (1);
    
        case TCP_EVT_ACK:
          return (1);
    
      }
      return (0);
    }
    
    void webServerTsk (void *pvParameters)
    {
            init_TcpNet ();
            socket_tcp = tcp_get_socket (TCP_TYPE_SERVER, 0, 10, tcp_callback);
            if (socket_tcp != 0) tcp_listen (socket_tcp, 80);//PORT_NUM
            for(;;)
            {
                    timer_poll ();
                    main_TcpNet ();
                    if(flag == 1)
                    {
                            //It works and sends data
                            send_data (socket_tcp);
    
                            //It doesn't work and doesn't send data
                            send_data (socket_tcp);
                            flag = 0;
                    }
                    portYIELD();
            }
    }
    

    But now I can't to send more than one TCP message. What I'm doing wrong?

Children