
//[구동선택]{****
//[ ]맷돌가상구동
//[v]맷돌직접연결
//}************

//[설명]{-----------------------------------------------------------------
//
//통신포트 수신이벤트 실험.
//
//COM0 로 1 바이트가 수신될때마다 LED 가 연결된 P0 포트에 출력.
//
//PC 쪽에서 통신포트로 <제트카 LED> 를 보여주기 위한 1바이트 자료열을 계속 전송하고
//맷돌(G.MTDL.X)에서 이 자료열을 수신시 마다 LED 에 출력하는 것으로 <제트카 LED> 구현.
//마치 맷돌(G.MTDL.X)을 PC 의 외부 I/O 처럼 사용하는 것.
//
//2012.03.19.월
//기계닉스 첨단 대장장이 김갑철(金甲哲)
//}----------------------------------------------------------------------

//[방법]{--------------------------------------------------------------------
//
//1) "[v]맷돌직접연결" 설정.
//1) 맷돌(G.MTDL.X)에 예제로 만들어진 가상기계 설치.
//2) 맷돌(G.MTDL.X) 재기동.
//3) "[ ]맷돌직접연결" 해제.
//
//4) 맷돌(G.MTDL.X):통신포트에 연결된 G.CO.RS232.XV 케이블을 분리하여 맷돌(G.MTDL.X)의
//   COM0 에 연결.
//5) { 설계묶음->가상기계->기계닉스->제트카 LED.gvms } 실행.
//6) [제어상자] 에서 통신포트를 열고 [제트카 LED 전송] 실행.
//   LED 이동 속도 조정 가능.
//
//7) LED 이동 확인.
//}-------------------------------------------------------------------------


//[함수묶음] 에 등록된 API 를 사용하기 위한것.
#include "함수묶음.h"

//[내부정의]
//{
    #define  true     1
    #define  false    0

    //I/O 포트번호 정의.
    #define  P0       0
    #define  P1       1
    #define  P2       2

    //통신포트번호 정의.
    #define  COM0     0
    #define  COM1     1

//}

//[VAR]
//{
    //알림문 저장소 선언(1 개는 무효).
    unsigned char   알림문저장소[256];

    //수신저장소로 사용할 공간 선언(1 개는 무효).
    unsigned char   수신저장소[256];

//}

void event(void)
{
  //[설명]{-----------------------------------------------------------
  //이벤트 발생시 여기서 [알림문 저장소] 에 저장된 [알림문] 을 꺼내 해당 처리 함수를
  //호출하거나 직접 처리.
  //이 함수는 [이벤트] 처리를 위한 고정이름함수.
  //}----------------------------------------------------------------

  //[VAR]
  //{
      //[알림문] 은 한개당 1 바이트 크기.
      unsigned char   알림문;

      unsigned char   수신바이트;

      unsigned short  읽은개수;

  //}

  //[<알림문> 한개 꺼내기]
  //{
      //[알림문 저장소] 에서 가장 처음 [알림문] 꺼내기.
      알림문 = _MsgQ_읽기_();

  //}

  switch(알림문)
  {
    case d_EvtMsg_Com0Rx :  //COM0 수신 이벤트.
    {
      //수신된 1 바이트 읽기.
      _Com_읽기_(0, &수신바이트, 1, &읽은개수);

      //[LED 에 출력]
      //{
          //LED 가 연결된 P0 포트에 수신된 1 바이트 값 출력.
          _Gpio_출력_(P0, 수신바이트);

      //}

    } break;

    //다른 알림문도 처리 가능.

  }

}

void main(void)
{
  //[VAR]
  //{
      int  i;

  //}

  //[알림문 저장소 설정]
  //{
      //[알림문 저장소] 를 사용자 정의 크기로 생성.
      //실제 [선언한 저장소크기] 로 설정.
      _MsgQ_생성_(알림문저장소, 256);

  //}

  //[COM0 설정]
  //{
      //[수신] 만 사용, 115200BPS 로 통신.
      //실제 [선언한 저장소크기] 로 설정.
      _Com_열기_(COM0, false, true, 수신저장소, 256, 115200);

      //1 바이트 마다 이벤트 발생 설정.
      //------------------v
      _Com_수신이벤트_(COM0, 1, true);

  //}

  //[포트 설정]
  //{
      //[!]{------------------------
      //LED 가 연결돼 있는 P0 포트 설정.
      //}---------------------------

      //초기에 모든 LED 가 꺼진채로 시작하게 사용할 포트의 모든 핀에 1 출력.
      //1(LED 끄기), 0(LED 켜기).
      _Gpio_출력_(P0, 0xff);

      //LED 가 연결돼 있는 P0 포트핀을 전부 [출력] 으로 설정.
      //1(출력), 0(이전설정유지).
      _Gpio_포트출력설정_(P0, 0xff);

  //}

  //[전체 이벤트 허용]
  //{
      _Event_전체_(true);

  //}

  //이벤트 대기.
  while(1);

}

