
#ifndef comport_h
#define comport_h


#include <windows.h>
        

class VCOMPORT
{
  //[2014.12.07.일][생성!!!]{----------------------------------------------------------
  //[VCOM] 을 구현하기 위한것.
  //일반 IDE 통신포트와 다르며,맷돌C 상에서 쉽게 PC 통신포트에 접근하기 위하여 필요.
  //[맷돌] 에 사용된 [COM] 처럼 [이벤트] 가 제공되지는 않으며, [IDE 통신포트] 와 같이
  //직접 처리 방식으로 거의 동일하게 처리하되, PC 에 존재하는 모든 [COM 포트] 에
  //접근할수 있도록 하는데 목적이 존재.
  //
  //정밀한 처리를 위한 것이 아니라, [기계닉스] 내부적으로만 사용하기 위한것.
  //
  //[중요!!!]--------------------------------------------------------------------------
  //별도의 [송/수신 저장소] 는 필요없으며 <SetupComm()> 으로 설정해 준 [PC:COM] 의
  //HW 적인 [저장소] 를 직접 사용한다.
  //
  //모든 처리의 시작은 [현재 수신개수 확인] 이므로, 이를 위한 함수가 가장 중요.
  //[이벤트] 가 제공되지 않기 때문에 [현재 수신개수] > 0 인 상태부터 모든 처리가 시작.
  //}----------------------------------------------------------------------------------

  public:

  //[VAR]
  //{
      //[통신포트:정보]
      //{
          //[2012.09.28.금][추가!!!]{---------------------------------
          //<API:_Ide_통신포트_재기동_()> 를 지원하기 위하여 추가.
          //<Open()> 함수로 통신포트를 열때 [번호/통신율] 을 관리하여
          //이 정보 대로 다시 열수 있도록 한다.
          //}---------------------------------------------------------

          //사용중인 포트번호.
          //PC 에서는 <COM1> 부터 시작하므로 0 으로 초기화. 
          unsigned int  _comNum; //<초기값:0>

          //내부적으로만 사용하는 것으로 한다.
          //<Open()> 함수에서 "COM1" 과 같은 문자열로 직접 열게 되므로
          //<Open()> 함수에서 바로 사용할수 있도록 문자열로 저장.
          char          _comNumStr[16];

          //<Open()> 함수 사용시의 [통신율] 저장.
          unsigned int  _comBaud; //<초기값:115200>
          
          //통신포트 개방 상태.
          //true  : 열려있음.
          //false : 닫혀있음.
          bool   _comEn; //<초기값:false>

          //[송/수신 저장소 크기]
          //{
              //[2014.12.15.월][추가!!!]{---------------------------------------
              //<SetupComm()> 으로 설정할 [PC:COM] HW 적인 [저장소] 크기를 직접
              //설정할수 있도록 수정.
              //이는 무조건 10K 로 할당하는 것 보다는 상황에 따라 유연하게 지정
              //하는 것이 메모리 낭비를 막을수 있다.
              //100K 정도 자료를 한번에 수신해야 하는 경우는 100K 이상으로 설정
              //하는 것이 더 유리.
              //이 정보는 VCOM [생성] 시에 지정.
              //}---------------------------------------------------------------

              unsigned int  _comRxBufSize; //<초기값:1024>

              unsigned int  _comTxBufSize; //<초기값:1024>

          //}

      //} 
  
      //[통신포트]
      //{
          //제어 대상이 되는 [통신포트] 자체 정보.
          HANDLE         _handle;
          DCB            _dcb;
          COMMTIMEOUTS   _timeout;

      //}

      //[송/수신 저장소]
      //{
          //[주의!!!]{-----------------------------------------------------------------
          //[VCOM] 구현을 위하여 [송/수신 저장소] 는 불필요.
          //[PC:COM] 자체에 <SetupComm()> 으로 [HW 저장소] 크기를 설정하므로
          //이 [송/수신 저장소] 를 직접 사용한다.
          //[이벤트] 를 구현하지 않기 때문에 [맷돌] 과 같은 별도의 [저장소] 는 불필요.
          //}--------------------------------------------------------------------------

      //}

      //[2009.07.30.목][추가!!!]{----------------------------------
      //사용중인 경우는 <true> 로 설정한다(읽기/쓰기 만 설정한다).
      //
      //[내부적으로만 사용] 하는것으로 그대로 둔다.
      bool  _use_ing; //<초기값:false>
      //}----------------------------------------------------------

  //}

  //[함수]
  //{
      __fastcall VCOMPORT(void);  //생성자.
      __fastcall ~VCOMPORT(void); //소멸자.


      //[2014.12.10.수][완료!!!]
      bool __fastcall Open(void);

      //[2014.12.07.일][완료!!!]
      bool __fastcall Close(void);

      //[2014.12.07.일][완료!!!]
      bool __fastcall ReOpen(void);

      //[2014.12.07.일][완료!!!]
      bool __fastcall Write(//전송할 자료가 있는 위치.
                            void          *pBuf_,
                            //전송할 크기.
                            unsigned int   pSize);

      //[2014.12.07.일][완료!!!]
      bool __fastcall Read(//읽어들인 자료 저장 위치.
                           void          *rBuf_,
                           //읽어들일 크기.
                           unsigned int   pSize);

      //[2014.12.07.일][완료!!!]
      bool __fastcall Clear_TxdBuf(void);

      //[2014.12.07.일][완료!!!]
      bool __fastcall Clear_RxdBuf(void);

      //[2014.12.10.수][완료!!!]
      unsigned int __fastcall Get_RxCount(void);

  //}

};

//[VCOMPORT]
//{
    //[2014.12.15.월][완료!!!]
    void __fastcall VCom_Create(//개체   [생성자].
                                void          *pPart_,
                                //VCOM 에 대응하는 실제 PC:COM 번호.
                                unsigned int   pPortNum,
                                //[수신저장소] 크기.
                                unsigned int   pRxBufSize,
                                //[송신저장소] 크기.
                                unsigned int   pTxBufSize,
                                //CBR_38400 과 같은 정의상수를 사용한다.
                                unsigned int   pBaud);

    //[2014.12.08.월][완료!!!]
    void __fastcall VCom_Delete(//개체 생성자.
                                void  *pPart_);



//}



#endif





