Пример #1
0
/**
  * @brief  This function notify user about link status changement.
  * @param  netif: the network interface
  * @retval None
  */
void ethernetif_notify_conn_changed(struct netif *netif)
{
  struct ip_addr ipaddr;
  struct ip_addr netmask;
  struct ip_addr gw;

  if(netif_is_link_up(netif))
  {

    VNC_SERVER_LogMessage ("Cable is now connected.");

    /* Update DHCP state machine */
    VNC_State = VNC_LINK_UP;
    VNC_SERVER_StatusChanged(VNC_LINK_UP);
    netif_set_addr(netif, &ipaddr , &netmask, &gw);
    
    /* When the netif is fully configured this function must be called.*/
    netif_set_up(netif);     
  }
  else
  {
    /* Update DHCP state machine */
    VNC_State = VNC_LINK_DOWN;
   
    /*  When the netif link is down this function must be called.*/
    netif_set_down(netif);
    

    VNC_SERVER_LogMessage ("Cable is not connected.");
    closesocket(_Sock);
  }
}
Пример #2
0
/**
  * @brief  Initializes audio
  * @param  None.
  * @retval Audio state.
  */
void VNC_SERVER_Start (void)
{
 
  if(is_initialized == 0)
  {
    is_initialized = 1;
   
    /* Create tcp_ip stack thread */
    tcpip_init(NULL, NULL);
    
    /* Initialize the LwIP stack */
    Netif_Config();
    
    /* Check connection */
    if (netif_is_up(&gnetif))
    {
      /* Update VNC state machine */
      VNC_State = VNC_LINK_UP;
      VNC_SERVER_StatusChanged(VNC_LINK_UP);
    }
    else
    {  
      /* Update VNC state machine */
      VNC_State = VNC_LINK_DOWN;
      VNC_SERVER_LogMessage ("Cable is not connected \n");
      VNC_SERVER_StatusChanged(VNC_LINK_DOWN);
    } 
  }
  else if(VNC_State == VNC_INIT)
  {
    /* Check connection */
    if (netif_is_up(&gnetif))
    {
      /* Update VNC state machine */
      VNC_State = VNC_LINK_UP;
      VNC_SERVER_StatusChanged(VNC_LINK_UP);
    }
    else
    {  
      /* Update VNC state machine */
      VNC_State = VNC_LINK_DOWN;
      VNC_SERVER_LogMessage ("Cable is not connected \n");
      VNC_SERVER_StatusChanged(VNC_LINK_DOWN);
    } 
  }
  
  /* Start VNC Task */
  if(VNC_ThreadId == 0)
  {
    osThreadDef(VNC, VNC_Thread, osPriorityAboveNormal, 0, 1024);
    VNC_ThreadId = osThreadCreate (osThread(VNC), NULL);  
  }
}
Пример #3
0
/**
  * @brief  VNC server thread process
  * @param  argument: not used
  * @retval none
  */
static void VNC_Process( void)
{
  static int s;
  static uint8_t Is_SocketAssigned = 0;
  u32_t AddrLen;
  U16 Port;
  
  if(Is_SocketAssigned == 0)
  {
    Is_SocketAssigned = 1;
    /* Prepare socket (one time setup) 
    Default port for VNC is is 590x, where x is the 0-based layer index */
    Port = 5900 + _Context.ServerIndex; 
    
    /* Loop until we get a socket into listening state */
    do {
      s = _ListenAtTcpAddr(Port);
      if (s != -1) {
        break;
      }
      vTaskDelay(100); /* Try again */
    } while (1);
  }
  VNC_SERVER_StatusChanged(VNC_CONN_ESTABLISHED);
  /* Loop once per client and create a thread for the actual server */
  while (VNC_State == VNC_PROCESS) 
  {
    
    /* Wait for an incoming connection */
    AddrLen = sizeof(_Addr);
    Connection_accepted = 1;
    if ((_Sock = accept(s, (struct sockaddr*)&_Addr, &AddrLen)) < 1) {
      closesocket(_Sock);
      vTaskDelay(100);      
      continue; /* Error */
    }
    Connection_accepted = 0;
    VNC_SERVER_LogMessage ("Connected to VNC Client");
    GUI_VNC_Process(&_Context, _Send, _Recv, (void *)_Sock);
    VNC_SERVER_LogMessage ((char *)iptxt); 

    /* Close the connection */
    closesocket(_Sock);
  }
}
Пример #4
0
/**
  * @brief  Initializes audio
  * @param  None.
  * @retval Audio state.
  */
void VNC_SERVER_Stop (void)
{
  VNC_State = VNC_IDLE;
  if(!Connection_accepted)
  closesocket(_Sock);

  VNC_SERVER_StatusChanged(VNC_IDLE);
  VNC_SERVER_LogMessage ("VNC Connection OFF");
  
  if(VNC_ThreadId != 0)
  {
    osThreadTerminate(VNC_ThreadId);
    VNC_ThreadId = 0;
  }   
}
Пример #5
0
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int Id, NCode;
  
  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    
    hItem = BUTTON_CreateEx(420, 0, 60, 60, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_EXIT);
    WM_SetCallback(hItem, _cbButton_exit);   
    
    hItem = WM_GetDialogItem(pMsg->hWin, ID_VNC_CONNECTION);
    IMAGE_SetBitmap(hItem, &bmconnection_ko);
    
    hItem = BUTTON_CreateEx(315, 195, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, START_VNC);
    WM_SetCallback(hItem, _cbButton_start);
    
    hItem = BUTTON_CreateEx(380, 195, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, GO_BACKGROUND);
    WM_SetCallback(hItem, _cbButton_bg);
    
    hItem = BUTTON_CreateEx(245, 195, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, ID_LOCK);
    WM_SetCallback(hItem, _cbButton_lock); 
    
    hItem = WM_GetDialogItem(pMsg->hWin, GO_BACKGROUND);
    BUTTON_SetFont(hItem, &GUI_FontLubalGraph16B);    
    
    break;     
    
  case WM_PAINT:
    
    GUI_SetColor(GUI_STCOLOR_LIGHTBLUE);
    GUI_SetPenSize(5);
    GUI_DrawBitmap(&bmconnect, 7, 45);
    GUI_DrawCircle(332, 215, 40);
    GUI_AA_FillCircle(332, 215, 45);
    
    GUI_AA_FillRoundedRect(230, 182, 440, 250, 20);
    
    GUI_SetColor(GUI_WHITE);
    GUI_AA_FillCircle(332, 215, 42);
    GUI_SetBkColor(GUI_WHITE);
    GUI_AA_FillRoundedRect(233, 185, 437, 247, 20);
    
    GUI_SetColor(GUI_STCOLOR_LIGHTBLUE);
    GUI_AA_FillCircle(332, 215, 33);
    
    break;    

  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);    /* Id of widget */
    NCode = pMsg->Data.v;               /* Notification code */
    
    
    switch(Id) {  
      
    case START_VNC: /* Notifications sent by 'Start' */
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
        
        if((VNC_GetState() == VNC_IDLE)||
          (VNC_GetState() == VNC_INIT))
        {
          VNC_SERVER_LogMessage("Starting VNC connection...");
          hItem = WM_GetDialogItem(pMsg->hWin, ID_VNC_CONNECTION);
          IMAGE_SetBitmap(hItem, &bmno_connection);
          
          VNC_SetState (VNC_INIT);
          WM_Exec();
          VNC_SERVER_Start();
        }     
        else
        {
          VNC_SERVER_Stop();
        }
        break;
        
      case WM_NOTIFICATION_CLICKED:
        hItem = WM_GetDialogItem(pMsg->hWin, START_VNC);
        WM_InvalidateWindow(hItem);
        WM_Update(hItem);   
        break;
      }
      break;
    case GO_BACKGROUND: /* Notifications sent by 'Background' */
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
        WM_HideWindow(pMsg->hWin);
        module_prop[k_ModuleGetIndex(&vnc_server)].win_state = 1;
        ST_AnimatedIconView_SetItemText(hIcon,k_ModuleGetIndex(&vnc_server),"vnc server[B]");
        ST_AnimatedIconView_SetDualTextColor(hIcon, ICONVIEW_CI_SEL, GUI_STCOLOR_LIGHTBLUE, GUI_STCOLOR_DARKBLUE    ); 
        break;
      }
      break;
      
    case ID_BUTTON_EXIT: 
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
        if(VNC_GetState() != VNC_IDLE)
        {
          VNC_SERVER_Stop();
        }
        GUI_EndDialog(pMsg->hWin, 0);
        break;
      }
      break; 
      
    case ID_LOCK: 
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
        if(VNC_GetState() == VNC_IDLE)
        {
          if(VNC_GetLockState())
          {
            VNC_SetLockState(0);
          }
          else
          {
            VNC_SetLockState(1);
          }
        }
        break;
      }
      break; 
    }
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }      
}
Пример #6
0
/**
  * @brief  VNC Thread
* @param  argument: network interface
  * @retval None
  */
void VNC_Thread(void const * argument)
{

  for (;;)
  { 
    switch (VNC_State)
    {
    case VNC_LINK_UP:
      {
        gnetif.ip_addr.addr = 0;
        gnetif.netmask.addr = 0;
        gnetif.gw.addr = 0;
        dhcp_start(&gnetif);
        VNC_State = VNC_WAIT_FOR_ADDRESS;
        VNC_SERVER_LogMessage ("Waiting for DHCP server...\n");
        VNC_SERVER_StatusChanged(VNC_WAIT_FOR_ADDRESS);
      }
      break;
      
    case VNC_WAIT_FOR_ADDRESS:
      {        
        if (gnetif.ip_addr.addr!=0) 
        {
          dhcp_stop(&gnetif);
          VNC_State = VNC_START;
          VNC_SERVER_StatusChanged(VNC_START);          
        }
        else
        {
          /* DHCP timeout */
          if (gnetif.dhcp->tries > MAX_DHCP_TRIES)
          {
            VNC_State = VNC_ERROR;
            dhcp_stop(&gnetif);
            VNC_SERVER_LogMessage ("No reply from DHCP Server!\n");
          }
        }
      }
      break;
      
    case VNC_START: 
      
      sprintf((char*)iptxt, 
              "IP address : %d.%d.%d.%d\n", 
              (uint8_t)(gnetif.ip_addr.addr), 
              (uint8_t)((gnetif.ip_addr.addr) >> 8), 
              (uint8_t)((gnetif.ip_addr.addr) >> 16), 
              (uint8_t)((gnetif.ip_addr.addr) >> 24));       
      
      VNC_SERVER_LogMessage ((char *)iptxt);
      
      /* Init VNC context and attach to layer (so context is updated if the display-layer-contents change */
      GUI_VNC_AttachToLayer(&_Context, 0);
      _Context.ServerIndex = 0;
      GUI_VNC_SetProgName ("STM32 VNC Server");
      if(VNC_LockState)
      {
        GUI_VNC_SetPassword((U8 *)"STM32");
      }
      else
      {
        GUI_VNC_SetAuthentication(NULL);
      }
      VNC_State = VNC_PROCESS;
      break;
      
      
    case VNC_PROCESS: 
      VNC_Process();
      break;
      
    case VNC_IDLE:
      break;
      
    default: 
      break;
    }
    osDelay(250);
  }
}