
//-----------------
//G.M.RC.BASiC 2.1 
//-----------------

//[설명]{-----------------------------------------------------------------------------
//G.M.RC.BASiC 을 C 언어로 제어 하는 경우 사용하면 됩니다.
//다른 언어 사용자는 그에 맞게 내용을 수정하여 사용 하십시요.
//
//기계닉스 첨단 대장간
//대장장이 김 갑철
//------------------------------------------------------------------------------------
//G.M.RC.BASiC 2.1 판 에 추가된 MSG_DegMemXT 명령을 지원하기 위한 함수가 추가 되었음.
//2008.08.25.월
//}-----------------------------------------------------------------------------------


#ifndef _GMRCBASIC_MSG_H_
#define _GMRCBASIC_MSG_H_


//[제어명령]
//{
    //[패킷] 수신 완료.
    #define  d_ACK     0xac

    //[완료보고] 값.
    #define  d_END     0xed

    //[전체대상]
    //모든 제어기를 대상으로 명령 전달.
    #define  d_DidAll  0xff
    
    //[속도종류]{------------------------    
    #define  d_AccelNo       1  //등속
    #define  d_Accel         2  //가감속
    #define  d_AccelUp       3  //가속
    #define  d_AccelDown     4  //감속
    //}----------------------------------

//}

//[컨트롤러명령]
//{
    //[전송 포맷]
    //{
        //-----------------------------------
        //항상 아래의 포멧을 따른다.
        //<count> + { <DID> +     ...      }
        //   ^------|<----이 byte 수------>|
        //-----------------------------------
    //}

    //[설정]
    //{
        //설정만 해 놓은 각도 속도를 전부다 즉시 반영한다.
        #define  d_MSG_MemSet               0x01
        //{
            //<2> + { <DID> + (MSG_MemSet) }
            //                               + <ACK>
        //} 
               
    //}
    
    //[각도관련]
    //{
        //각도를 설정하고 즉시 반영한다.
        #define  d_MSG_DegSet               0x10
        //{
            //<5> + { <DID> + (MSG_DegSet) + (SID) + (속도종류) + (각도) }
            //                                                             + <ACK>
        //}        
    
        //각도를 설정하되 반영하지는 않는다.
        #define  d_MSG_DegMem               0x11
        //{
            //<5> + { <DID> + (MSG_DegMem) + (SID) + (속도종류) + (각도) }
            //                                                             + <ACK>
        //}    
        
        //[각도] 설정 값 N개(최대 8개)를 동시에 설정한다.
        #define  d_MSG_DegMemX              0x12
        //{
            //<4 + N> + { <DID> + (MSG_DegMemX) + (N) + (속도종류) + (각도0) + ... + (각도(N-1)) }
            //                                                                                     + <ACK>
            // 1<= N <= 8
        //}
                
        //[각도] 설정 값 N개(최대 8개)를 동시에 설정하고 해당 각도 변화량에 따른 속도도 자동 설정한다.
        //즉, 시간적으로 완전히 서보의 동작을 동기화 하기 위한 고급 명령이다.
        #define  d_MSG_DegMemXT             0x14
        //{
            //<5 + N> + { <DID> + (MSG_DegMemXT) + (N) + (속도종류) + (속도) + (각도0) + ... + (각도(N-1)) }
            //                                                                                           + <ACK>
            // 1<= N <= 8
        //}

    //}

    //[속도 설정]
    //{
        //속도를 설정하고 즉시 반영한다.
        #define  d_MSG_SpdSet               0x20
        //{
            //<4> + { <DID> + (MSG_SpdSet) + (SID) + (속도) }
            //                                                + <ACK>
        //}
        
        //속도를 설정하나 반영하지는 않는다.
        #define  d_MSG_SpdMem               0x21
        //{
            //<4> + { <DID> + (MSG_SpdMem) + (SID) + (속도) }
            //                                                + <ACK>
        //}
        
        //[속도] 설정 값 N개(최대 8개)를 동시에 설정한다.
        #define  d_MSG_SpdMemX              0x22
        //{
            //<3 + N> + { <DID> + (MSG_SpdMemX) + (N) + (속도0) + ... + (속도(N-1)) }
            //                                                                        + <ACK>
            // 1<= N <= 8
        //}        

    //} 

    //[각도 + 속도 설정]
    //{
        //각도 속도를 설정하고 즉시 반영한다.
        #define  d_MSG_DegSpdSet            0x30
        //{
            //<6> + { <DID> + (MSG_DegSpdSet) + (SID) + (속도종류) + (각도) + (속도) }
            //                                                                         + <ACK>
        //}  
      
        //각도 속도를 설정하나 반영하지는 않는다.
        #define  d_MSG_DegSpdMem            0x31
        //{
            //<6> + { <DID> + (MSG_DegSpdMem) + (SID) + (속도종류) + (각도) + (속도) }
            //                                                                         + <ACK>
        //}
        
    //}    

    //[tick 관련]
    //{
        //[tick 으로 직접 설정]
        //{
            //서보를 미세 조정할때 사용하고 16bit 값을 가진다.
            #define  d_MSG_TickSet          0x40
            //{
                //<6> + { <DID> + (MSG_TickSet) + (SID) + (속도종류) +(tick-h) + (tick-l) }
                //                                                                          + <ACK>
            //}
            
        //} 
        
    //}
    
    //[완료보고 관련]
    //{
        //[각도 완료 보고]
        //{          
            //각도가 완료된 경우 [완료보고] 를 수행할것을 지시한다.
            #define  d_MSG_Report           0x50
            //{
                //<2> + { <DID> + (MSG_Report) }
                //                               + <ACK>
            //}

        //}
    
        //[완료보고시점 설정]
        //{
            //[완료보고비율] 값을 설정한다.
            #define  d_MSG_ReportTimeSet    0x51
            //{
                //<4> + { <DID> + (MSG_ReportTimeSet) + (SID) + (완료보고비율) }
                //                                                               + <ACK>
            //}
           
            //[완료보고비율] 값 N개(최대 8개)를 동시에 설정한다.
            #define  d_MSG_ReportTimeSetX   0x52
            //{
                //<3 + N> + { <DID> + (MSG_ReportTimeSetX) + (N) + (완료보고비율0) + ... + (완료보고비율(N-1)) }
                //                                                                                               + <ACK>
                // 1<= N <= 8
            //}

        //}
 
    //} 
    
    //[가감속 분할 상수 설정]
    //{       
        //[가감속 구간 분할 상수] 값을 설정한다.
        #define  d_MSG_AccelDivSet          0x60
        //{
            //<4> + { <DID> + (MSG_AccelDivSet) + (SID) + (DIV 값) }
            //                                                       + <ACK>
        //}
        
        //[가감속 구간 분할 상수] 값 N개(최대 8개)를 동시에 설정한다.
        #define  d_MSG_AccelDivSetX         0x61
        //{
            //<3 + N> + { <DID> + (MSG_AccelDivSetX) + (N) + (DIV0) + ... + (DIV(N-1)) }
            //                                                                           + <ACK>
            // 1<= N <= 8
        //}

    //}
    
    //[PWM]
    //{
        //[pwm 출력 시작]
        //{
            //pwm 출력을 다시 시작한다.
            //단, eeprom 에는 반영하지 않고 변수만 반영하며, 사용자가 설정한 eeprom 상의
            //pwm on/off 정보를 다시 반영해 주는 것이다. (즉, 이전 설정 정보로 다시 구동시킨다.)
            //즉, 이전에 on 으로 설정된 것만 다시 구동이 되는 것이다.
            #define  d_MSG_PwmStart         0x82
            //{
                //<2> + { <DID> + (MSG_PwmStart) }
                //                                 + <ACK>
            //}

        //}

        //[pwm 출력 중단]
        //{
            //pwm 출력을 중단한다.
            //eeprom 에는 반영하지 않고 변수에만 반영한다.
            #define  d_MSG_PwmStop          0x83
            //{
                //<2> + { <DID> + (MSG_PwmStop) }
                //                                + <ACK>
            //}

        //}

    //}
     
//}  


#endif
