secs-gem에서 사용하는 메시지 item type code 를 보면 아래와 같다.

[ 타입 코드 ]
 
enum SECS_MSG_ITEM_CODE
{
   MIC_LIST = 0x00,
   MIC_BINARY = 0x08,
   MIC_BOOL = 0x09,
   MIC_ASC = 0x10,
   MIC_JIS = 0x11,
   MIC_I8 = 0x18,
   MIC_I1 = 0x19,
   MIC_I2 = 0x1A,
   MIC_I4 = 0x1C,
   MIC_F8 = 0x20,
   MIC_F4 = 0x24,
   MIC_U8 = 0x28,
   MIC_U1 = 0x29,
   MIC_U2 = 0x2A,
   MIC_U4 = 0x2C,
};
     


각각의 타입에 대한 데이터 크기를 리턴하는 함수를 만들어야 하는데
귀찮아서 아래와 같이 대충 각각의 타입으로 swich .. case 문을 이용해서 만들었다.

[아이템 크기 리턴하는 함수 ]
 
int GetMsgItemSize(SECS_MSG_ITEM_CODE code )
{
   switch (code)
   {
   case MIC_LIST :   return 0;
   case MIC_BINARY : return 1;
   case MIC_BOOL :   return 1;
   case MIC_ASC :    return 1;
   case MIC_JIS :    return 1;
   case MIC_I8 :     return 8;
   case MIC_I1 :     return 1;
   case MIC_I2 :     return 2;
   case MIC_I4 :     return 4;
   case MIC_F8 :     return 8;
   case MIC_F4 :     return 4;
   case MIC_U8 :     return 8;
   case MIC_U1 :     return 1;
   case MIC_U2 :     return 2;
   case MIC_U4 :     return 4;
   default :
      return 0;
   }


}
     




하지만 아이템 type enum 값에서 볼 수 있듯이 각각의 타입이
enum으로 0부터 1씩 순차적으로 증가하는것이 아니고 특정 값을 가지고 있다.
비슷한 타입끼리 비슷한 범위로 모아져 있는데 무슨 의미인지는
16진수로 되어 있는것을 8진수로 바꾸어 보면 알 수 있다.

예를들어 정수형 4가지를 8진수로 바꾸어보면 다음과 같다.
I1 = 0x19 = 8진수 31
i2 = 0x1A = 8진수 32
i4 = 0x1C = 8진수 34
i8 = 0x18 = 8진수 30


SECS-GEM 원본 스펙 문서가 없기 때문에 대충 보고 추측하면서 진행하고 있다.
8진수에서 각각 두자리가 나오는데 8비트의 상위 숫자(3)는 타입을 표시하고
하위 숫자(1,2,4,0)은 데이터의 바이트 크기를 나타냄을 알수 있다.
8진수에서 8이란 숫자는 표시 할 수 없기 때문에 I8의 경우에는 하위 숫자를 0으로 표시하였다.

데이터 타입 상수를 만들때도 창제원리를 가지고 만들어 놓은것 같다.

하지만.. GetMsgItemSize() 함수를  만들때는 대충 swich case 문으로 만들었다는거..

이유는 간단하다.
8진수 연산을 한 다음에 하위 숫자를 이용하면 코드는 줄겠지만
다른 사람이 소스를 봤을때 8진수에 의미가 있다는 것까지 이해하고 볼 필요는 없기 때문이다.
쉽게쉽게 가자~~~



  1. 김성동 2009.10.13 21:34

    앗... 회사 블로그도 있었네요...? 사장님께서 직접 관리하고 계신 듯 하군요...
    안녕하세요... 지난 번에 사무실에 찾아가서 한번 뵈었었는데 기억하실 지...

    SECS 드라이버를 개발하고 계신것 같은데 스펙 문서는 네이버 카페( http://cafe.naver.com/secscom.cafe )에 들어가 보시면 있을 겁니다.
    제가 만든 것( SemiOn - http://www.acrosoft.pe.kr/board/so_intro )도 있는데 한번 참고해 보시지요...^^

    • 크레브 2009.10.14 00:51

      블로그 만든지는 얼마 안됐습니다. 김성동님은 secs-gem을 벌써 다 만들어보셨군요 SECS-GEM하다가 궁금하것 있으면 문의드리겠습니다. ^^

  2. 김성동 2009.10.14 17:55

    네... 귀찮아서 저도 GEM까지는 만들지 않았습니다...^^ 저도 잘은 모르지만 제가 아는 한도내에서는 얼마든지요..

+ Recent posts