본문 바로가기

[ST_MICRO]/STM32H7

[STM32H7-RP] W5300을 이용한 TCP 제어 서버 테스트

PC에서 전송되는 명령을 처리하는 부분은 ProcessCamTCPS() 함수에서 처리하고 있다.

TCP 통신으로 영상 전송 시작 및 종료나 카메라 제어와 같은 명령을 전송할수 있다.

 

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

	unsigned int cmd;
	unsigned int para;

   switch(getSn_SR(sn))
   {
      case SOCK_ESTABLISHED :
         if(getSn_IR(sn) & Sn_IR_CON)
         {
			setSn_IR(sn,Sn_IR_CON);
         }
         
         // Don't need to check SOCKERR_BUSY because it doesn't not occur.
		 if((size = getSn_RX_RSR(sn)) > 0) 
         {
			if(size > ETH_MAX_BUF_SIZE) size = ETH_MAX_BUF_SIZE;
			ret = recv(sn, buf, size);

			cmd = buf[0];
			para = buf[2]<<8 | buf[3];

            if(cmd == _CMD_LED)
            {
            	if(para == 0)
           		{
            		Led1Off();
           		}
            	else if(para == 1)
            	{
            		Led1On();
            	}
            }
            else if(cmd == _CMD_CAM_START)
            {
            	gImgTransferFlag = 1;
            	printf("Cam Stream Start\r\n");
            }
            else if(cmd == _CMD_CAM_STOP)
            {
            	gImgTransferFlag = 0;
            	printf("Cam Stream Stop\r\n");
            }

			//sendto(sock, data_buf, len, gDestip, dDestport);

			printf("rx size=%d	\r\n", size);
         }
         break;
      case SOCK_CLOSE_WAIT :

         if((ret = disconnect(sn)) != SOCK_OK) return ret;
         break;
      case SOCK_INIT :
         if( (ret = listen(sn)) != SOCK_OK) return ret;
         break;
      case SOCK_CLOSED:

         if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;

         break;
      default:
         break;
   }
   return 1;
}

 

 


PC 프로그램

 

제어 명령은 명령어 종류과 파라미터 값을 전송해서 다양한 처리를 할 수 있도록 하였다.

int CNetImagePlayDlg::SendCommand(unsigned int Cmd, unsigned int Para)
{
  CString str;
  unsigned char buf[4];

  buf[0] = Cmd;
  buf[1] = 0;
  buf[2] = Para >> 8;
  buf[3] = Para;

  m_ClientSocket.Send(buf, sizeof(buf));

  return 0;
}
반응형