
#ifndef comport_h
#define comport_h


#include <windows.h>
        

class COMPORT
{
  //[2009.04.21.화][생성!!!]{------------------------------------------------
  //직접 [통신포트] 에 API 로 접근하기 위하여 틀을 만든다.
  //이는 이전처럼 CPort 를 사용하지 않고 파일처럼 통신포트에 바로 소스상에서
  //접근하기 위한 것이다.
  //
  //확인 결과 아주 잘 동작 된다.
  //}------------------------------------------------------------------------

  public:

  //[VAR]
  //{
      //[전체 환경설정 관련]
      //{
          //[2009.06.05.금][추가!!!]{-----------------
          //통신포트번호나 상태등을 알기 위한 것이다.
          //}-----------------------------------------

          struct  IDE_OPTION   *_ide_option;

      //}

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

      //}

      //[통신포트 구분]
      //{
          //[2009.10.01.목][추가!!!]{-------------------------------------------------------
          //생성된 통신포트를 구분하기 위한 ID 를 가진다.
          //현재 맷돌과의 통신을 위한 0 번과, 알림창에 수신된 문자열을 표시하기 위한 1번
          //두개가 존재한다.
          //이는 각각 상태를 알려주는 LED 의 종류와 배치가 다르기 때문에 적용이 불가피하다.
          //}-------------------------------------------------------------------------------

          #define  d_ComportID_Vmos     0  //맷돌과 통신을 위한것(기본).
          #define  d_ComportID_Debug    1  //알림창에 수신된 문자열을 표시하기 위한것.

          int  _comID;

      //}

      //[수신 저장소]
      //{
          //[2009.10.01.목][수정!!!]{------------
          //크기를 동적생성하는 것으로 수정한다.
          //}------------------------------------

          //unsigned char  _rxBuf[10 + 1024];
          unsigned char  *_rxBuf;

          //저장소 자체 크기(이 정보는 Open() 의 SetupComm() 에서 사용된다).
          //TxdBuf_Create() 함수로 저장소를 생성할때 자동으로 값이 채워진다.
          int             _rxBufSize;

          //실제 저장된 크기.
          unsigned long   _rxCount;

      //}

      //[송신 저장소]
      //{
          //[2009.10.01.목][수정!!!]
          //크기를 동적생성하는 것으로 수정한다.

          //unsigned char  _txBuf[10 + 1024];
          unsigned char  *_txBuf;

          //저장소 자체 크기(이 정보는 Open() 의 SetupComm() 에서 사용된다).
          //TxdBuf_Create() 함수로 저장소를 생성할때 자동으로 값이 채워진다.
          int             _txBufSize;

          unsigned long   _txCount;

      //}

      //[2009.07.30.목][추가!!!]{----------------------------------
      //사용중인 경우는 <true> 로 설정한다(읽기/쓰기 만 설정한다).
      bool  _use_ing; //(BASE : false)
      //}----------------------------------------------------------


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

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

          //<Open()> 함수 사용시의 [통신율] 저장.
          DWORD  _comBaud;

      //}


  //}

  //[함수]
  //{
      //[2012.09.28.금][완료!!!]
      __fastcall COMPORT(void);

      
      //[2015.01.13.목][완료!!!]
      bool __fastcall Open(//"COM1" 또는 "COM2" 와 같은 [문자열] 로 사용된다.
                           LPTSTR  pPortNumStr,
                           //CBR_38400 과 같은 정의상수를 사용한다.
                           DWORD   pBaud);

      //[2009.10.02.금][완료!!!]
      bool __fastcall Close(void);

      //[2012.09.29.토][완료!!!]
      bool __fastcall ReOpen(void);


      //[2009.10.02.금][완료!!!]
      //int __fastcall RxCount(void);

      //[2010.09.28.화][완료!!!]
      bool __fastcall Read(int  pReadSize);

      //[2009.08.09.일][완료!!!]
      bool __fastcall Write(int  pWriteSize);

      //[2009.07.30.목][완료!!!]
      bool __fastcall Clear_TxdBuf(void);

      //[2009.07.30.목][완료!!!]
      bool __fastcall Clear_RxdBuf(void);

      //[2009.10.01.목][완료!!!]
      void __fastcall TxdBuf_Create(int  pSize);

      //[2009.10.01.목][완료!!!]
      void __fastcall RxdBuf_Create(int  pSize);

      //[2011.08.21.일][완료!!!]
      int __fastcall Get_RxCount(void);

  //}

};

//[Comport]
//{
    //[2009.10.01.목][완료!!!]
    void __fastcall COMPORT_Create(void);

    //[2009.10.01.목][완료!!!]
    void __fastcall COMPORT_Delete(void);

//}

//[ComportDebug]
//{
    //[2009.10.01.목][완료!!!]
    void __fastcall ComPortDebug_Create(void);

    //[2009.10.01.목][완료!!!]
    void __fastcall ComPortDebug_Delete(void);

//}

//[2009.10.01.목][완료!!!]
void __fastcall COMPORT_GetPtr(//통신포트 구분 ID.
                               int   pComID,
                               //통신포트를 반환할 포인터.
                               class COMPORT **rComPortPtr);





#endif





