E-DRIVE / Protocol / Definitions

Modified : 2019.7.26


E-DRIVE 에서 사용하고 있는 기본 정의들을 소개합니다.



Protocol::CommandType::Type

명령 타입

namespace Protocol
{
    namespace CommandType
    {
        enum Type
        {
            None                    = 0x00,     // 이벤트 없음

            Stop                    = 0x01,     // 정지
            ClearBias               = 0x02,     // 자이로/엑셀 바이어스 리셋(트림도 같이 초기화 됨)
            ClearTrim               = 0x03,     // 트림 초기화
            DriveEvent              = 0x04,     // 주행 이벤트 실행

            SetDefault              = 0x0F,     // 기본 설정으로 초기화

            // 통신[Bluetooth]
            BluetoothSystemEvent    = 0xB0,     // 블루투스 시스템 이벤트

            // LINK
            LinkSystemReset         = 0xE0,     // 시스템 재시작
            LinkDiscoverStart       = 0xE1,     // 장치 검색 시작
            LinkDiscoverStop        = 0xE2,     // 장치 검색 중단
            LinkConnect             = 0xE3,     // 지정한 인덱스의 장치 연결
            LinkDisconnect          = 0xE4,     // 연결 해제
            LinkRssiPollingStart    = 0xE5,     // RSSI 수집 시작
            LinkRssiPollingStop     = 0xE6,     // RSSI 수집 중단

            EndOfType
        };
    }
}



ModelNumber::Type

모델 번호

펌웨어 업데이트 시 제품 구분용 번호.

namespace ModelNumber
{
    enum Type
    {
        None = 0,

        //                          AAAABBCC, AAAA(Project Number), BB(Device Type), CC(Revision)
        Drone_3_Drone_P1        = 0x00031001,   // Drone_3_Drone_P1 (Lightrone / GD65 / HW2181 / Keil / 3.7v / barometer / RGB LED / Shaking binding)
        Drone_3_Drone_P2        = 0x00031002,   // Drone_3_Drone_P2 (Soccer Drone / HW2181 / Keil / 7.4v / barometer / RGB LED / Shaking binding)
        Drone_3_Drone_P3        = 0x00031003,   // Drone_3_Drone_P3 (GD240 / HW2181 / Keil / power button / u30 flow / 3.7v / geared motor / barometer)
        Drone_3_Drone_P4        = 0x00031004,   // Drone_3_Drone_P4 (GD50N / HW2181 / Keil / power button / 3.7v / barometer)
        Drone_3_Drone_P5        = 0x00031005,   // Drone_3_Drone_P5 (GD30 / HW2181 / Keil / 3.7v / nomal binding)
        Drone_3_Drone_P6        = 0x00031006,   // Drone_3_Drone_P6 (Soccer Drone 2 / HW2181 / Keil / 7.4v / barometer / RGB LED / Shaking binding)

        Drone_3_Controller_P1   = 0x00032001,   // Drone_3_Controller_P1 / small size
        Drone_3_Controller_P2   = 0x00032002,   // Drone_3_Controller_P2 / large size

        Drone_4_Drone_P4        = 0x00041004,   // Drone_4_Drone_P4
        Drone_4_Drone_P5        = 0x00041005,   // Drone_4_Drone_P5

        Drone_4_Controller_P1   = 0x00042001,   // Drone_4_Controller_P1
        Drone_4_Controller_P2   = 0x00042002,   // Drone_4_Controller_P2	// 진동 모터 회로 수정

        Drone_4_Link_P0         = 0x00043000,   // Drone_4_Link_P0

        Drone_4_Tester_P2       = 0x0004A002,   // Drone_4_Tester_P2
        Drone_4_Monitor_P2      = 0x0004A102,   // Drone_4_Monitor_P2

        Drone_7_Drone_P2        = 0x00071002,   // Drone_7_Drone_P2
        Drone_7_BleClient_P0    = 0x00073200,   // Drone_7_BleClient_P0
        Drone_7_BleServer_P2    = 0x00073302,   // Drone_7_BleServer_P2

        Drone_7_Tester_P4       = 0x0007A004,   // Drone_7_Tester_P4
        Drone_7_Monitor_P4      = 0x0007A104,   // Drone_7_Monitor_P4

        Drone_8_Drone_P0        = 0x00081000,   // Drone_8_Drone_P0
    };
}



Protocol::DeviceType::Type

장치 타입

namespace Protocol
{
    namespace DeviceType
    {
        enum Type
        {
            None = 0,

            Drone       = 0x10,     // 드론(Server)

            Controller  = 0x20,     // 조종기(Client)

            LinkClient  = 0x30,     // 링크 모듈(Client)
            LinkServer  = 0x31,     // 링크 모듈(Server)
            BleClient   = 0x32,     // BLE 클라이언트
            BleServer   = 0x33,     // BLE 서버

            Range       = 0x40,     // 거리 센서 모듈

            Base        = 0x70,     // 베이스

            ByScratch   = 0x80,     // 바이스크래치
            Scratch     = 0x81,     // 스크래치
            Entry       = 0x82,     // 네이버 엔트리

            Tester      = 0xA0,     // 테스터
            Monitor     = 0xA1,     // 모니터
            Updater     = 0xA2,     // 펌웨어 업데이트 도구
            Encrypter   = 0xA3,     // 암호화 도구

            EndOfType,

            Broadcasting = 0xFF
        };
    }
}



ErrorFlagsForSensor::Type

센서 오류 flag

namespace ErrorFlagsForSensor
{
    enum Type
    {
        None                    = 0x00000000,

        Motion_NoAnswer         = 0x00000001,   // Motion 응답 없음
        Motion_WrongValue       = 0x00000002,   // Motion 잘못된 값
        Motion_NotCalibrated    = 0x00000004,   // Gyro Bias 보정이 완료되지 않음
        Motion_Calibrating      = 0x00000008,   // Gyro Bias 보정 중
    };
}



ErrorFlagsForState::Type

상태 오류 flag

namespace ErrorFlagsForState
{
    enum Type
    {
        None                            = 0x00000000,

        NotRegistered                   = 0x00000001,   // 장치 등록이 안됨
        FlashReadLock_UnLocked          = 0x00000002,   // 플래시 메모리 읽기 Lock이 안 걸림
        BootloaderWriteLock_UnLocked    = 0x00000004,   // 부트로더 영역 쓰기 Lock이 안 걸림
    };
}



Mode::System::Type

시스템 동작 상태

namespace Mode
{
    namespace System
    {
        enum Type
        {
            None = 0,

            Boot,               // 부팅
            Start,              // 시작 코드 실행
            Running,            // 메인 코드 동작
            ReadyToReset,       // 리셋 대기(1초 뒤 리셋)
            Error,              // 오류

            EndOfType
        };
    }
    
}



Mode::Drone::Type

주행 제어기 동작 상태

namespace Mode
{
    namespace Drive
    {
        enum Type
        {
            None,           // 없음
            
            Drive,          // RemoteControl - 원격 조종
            Card,           // CardCoding - 카드 코딩
            LineTracer,     // LineTracer - 라인 트레이서
            Piano,          // Piano - 피아노 모드
            
            Link,           // Link - 중계기
            
            Error,          // 오류(문제로 인해 정상적인 동작을 할 수 없는 경우)
            
            EndOfType
        };
    }
    
}



Mode::Drive::Type

주행 제어기 동작 상태

namespace Mode
{
    namespace Drive
    {
        enum Type
        {
            None = 0,
            
            Ready           = 0x10,     // 준비
            
            Start,                      // 출발
            Drive,                      // 주행
            
            Stop            = 0x20,     // 강제 정지
            
            Accident        = 0x30,     // 사고 (Ready로 자동전환)
            Error,                      // 오류
            
            Test            = 0x40,     // 테스트 모드

            EndOfType
        };
    }
    
}



Mode::Update::Type

업데이트 상태

namespace Mode
{
    namespace Update
    {
        enum Type
        {
            None,

            Ready,              // 업데이트 가능 상태
            Update,             // 업데이트 중
            Complete,           // 업데이트 완료

            Failed,             // 업데이트 실패(업데이트 완료까지 갔으나 body의 CRC16이 일치하지 않는 경우 등)

            NotAvailable,       // 업데이트 불가능 상태(Debug 모드 등)
            RunApplication,     // 어플리케이션 동작 중
            NotRegistered,      // 등록되지 않은 장치

            EndOfType
        };
    }
}



ImageType::Type

펌웨어 이미지 타입(현재는 BLE 통신칩에만 사용)

namespace ImageType
{
    enum Type
    {
        None,
        
        // 현재 장치의 이미지
        ImageSingle             = 0x10,     // 실행 이미지
        ImageA                  = 0x11,
        ImageB                  = 0x12,
        
        // 펌웨어 이미지
        RawImageSingle          = 0x20,     // 업데이트 이미지, 헤더 포함
        RawImageA               = 0x21,
        RawImageB               = 0x22,
        
        // 암호화 된 이미지
        EncryptedImageSingle    = 0x30,     // 업데이트 이미지, 헤더 포함
        EncryptedImageA         = 0x31,
        EncryptedImageB         = 0x32,
        
        EndOfType
    };
}



Direction::Type

방향

namespace Direction
{
    enum Type
    {
        None = 0,

        Left,
        Front,
        Right,
        Rear,

        Top,
        Bottom,

        Center,

        EndOfType
    };
}



Mode::Movement::Type

이동 상태

namespace Mode
{
    namespace Movement
    {
        enum Type
        {
            None            = 0x00,

            Ready           = 0x01,
            Moving          = 0x02,
            Stop            = 0x03
        };
    }
}



Rotation::Type

모터 회전 방향

E-DRONE에는 총 4개의 모터가 있으며, 왼쪽 앞 모터부터 각각 0, 1, 2, 3번으로 번호가 부여되어 있습니다.

드론 비행 시에 0번과 2번 모터는 시계 방향(Clockwise), 1번과 3번 모터는 반시계 방향(Counterclockwise)으로 회전합니다.

E-DRONE의 모터는 정해진 한 방향으로만 회전합니다.

namespace Rotation
{
    enum Type
    {
        None = 0,

        Clockwise,              // 시계 방향
        Counterclockwise,       // 반시계 방향

        EndOfType
    };
}



Motor::Part::Type

모터 번호

namespace Rotation
{
    namespace Part
    {
        enum Type
        {
            M1,     // Front Left
            M2,     // Front Right
            M3,     // Rear Right
            M4,     // Rear Left

            EndOfPart,

            All
        };
    }
}



DriveEvent::Type

주행 이벤트

namespace DriveEvent
{
    enum Type
    {
        None = 0,               // 없음

        Stop = 0x10,            // 정지

        Zigzag,
        Wave,
        LeftTornado,
        RightTornado,
        LeftCircle,
        RightCircle,

        EndOfType
    };
}



Button::Drone::ButtonType::Type

드론 버튼 플래그

namespace Button
{
    namespace Drone
    {
        namespace ButtonType
        {
            enum Type
            {
                None        = 0x0000,

                // 버튼
                Reset       = 0x0001
            };
        }
    }
}



Button::Event::Type

버튼 이벤트

namespace Button
{
    namespace Event
    {
        enum Type
        {
            None,

            Down,               // 누르기 시작
            Press,              // 누르는 중
            Up,                 // 뗌

            EndContinuePress    // 연속 입력 종료
        };
    }
}



Buzzer::Mode::Type

버저 모드

namespace Buzzer
{
    namespace Mode
    {
        enum Type
        {
            Stop                = 0,    // 정지(Mode에서의 Stop은 통신에서 받았을 때 Buzzer를 끄는 용도로 사용, set으로만 호출)

            MuteInstantally     = 1,    // 묵음 즉시 적용
            MuteContinually     = 2,    // 묵음 예약

            ScaleInstantally    = 3,    // 음계 즉시 적용
            ScaleContinually    = 4,    // 음계 예약

            HzInstantally       = 5,    // 주파수 즉시 적용
            HzContinually       = 6,    // 주파수 예약

            EndOfType
        };
    }
}



Buzzer::Scale::Type

버저 음계

namespace Buzzer
{
    namespace Scale
    {
        enum Type
        {
            C1, CS1, D1, DS1, E1, F1, FS1, G1, GS1, A1, AS1, B1,
            C2, CS2, D2, DS2, E2, F2, FS2, G2, GS2, A2, AS2, B2,
            C3, CS3, D3, DS3, E3, F3, FS3, G3, GS3, A3, AS3, B3,
            C4, CS4, D4, DS4, E4, F4, FS4, G4, GS4, A4, AS4, B4,

            C5, CS5, D5, DS5, E5, F5, FS5, G5, GS5, A5, AS5, B5,
            C6, CS6, D6, DS6, E6, F6, FS6, G6, GS6, A6, AS6, B6,
            C7, CS7, D7, DS7, E7, F7, FS7, G7, GS7, A7, AS7, B7,
            C8, CS8, D8, DS8, E8, F8, FS8, G8, GS8, A8, AS8, B8,

            EndOfType,

            Mute    = 0xEE,     // 묵음
            Fin     = 0xFF      // 악보의 끝
        };
    }
}



Buzzer::Melody::Type

버저 멜로디

namespace Buzzer
{
    namespace Melody
    {
        enum Type
        {
            Null,           // 무음(100ms)
            
            Melody1,        // 카드 코딩용 멜로디 1
            Melody2,        // 카드 코딩용 멜로디 2
            Melody3,        // 카드 코딩용 멜로디 3
            Melody4,        // 카드 코딩용 멜로디 4
            Melody5,        // 카드 코딩용 멜로디 5
            Melody6,        // 카드 코딩용 멜로디 6
            Melody7,        // 카드 코딩용 멜로디 7
            Melody8,        // 카드 코딩용 멜로디 8
            
            DoReMi,         // 도레미
            DoMiSol,        // 도미솔
            SolMiDo,        // 솔미도
            LaLa,           // 라라
            SiRaSiRa,       // 시라시라
            
            Warning1,       // 경고 1
            Warning2,       // 경고 2
            Warning3,       // 경고 3
            Warning4,       // 경고 4
            
            Du,             // Trim -
            DuDu,           // Trim - End
            DiDic,          // Trim Center
            DiDic2,         // Trim Center 2
            Di,             // Trim +
            DiDi,           // Trim + End
            
            BuzzSound1,
            BuzzSound2,
            BuzzSound3,

            EndOfType
        };
    }
}



CardNameColor::Type

카드 분류(색상)

// 카드 분류(색상)
namespace CardNameColor
{
    enum Type
    {
        None            = 0x00,

        WhiteWhite      = 0x11,
        WhiteRed        = 0x12,
        WhiteYellow     = 0x13,
        WhiteGreen      = 0x14,
        WhiteCyan       = 0x15,
        WhiteBlue       = 0x16,
        WhiteMagenta    = 0x17,
        WhiteBlack      = 0x18,

        RedWhite        = 0x21,
        RedRed          = 0x22,
        RedYellow       = 0x23,
        RedGreen        = 0x24,
        RedCyan         = 0x25,
        RedBlue         = 0x26,
        RedMagenta      = 0x27,
        RedBlack        = 0x28,

        YellowWhite     = 0x31,
        YellowRed       = 0x32,
        YellowYellow    = 0x33,
        YellowGreen     = 0x34,
        YellowCyan      = 0x35,
        YellowBlue      = 0x36,
        YellowMagenta   = 0x37,
        YellowBlack     = 0x38,

        GreenWhite      = 0x41,
        GreenRed        = 0x42,
        GreenYellow     = 0x43,
        GreenGreen      = 0x44,
        GreenCyan       = 0x45,
        GreenBlue       = 0x46,
        GreenMagenta    = 0x47,
        GreenBlack      = 0x48,

        CyanWhite       = 0x51,
        CyanRed         = 0x52,
        CyanYellow      = 0x53,
        CyanGreen       = 0x54,
        CyanCyan        = 0x55,
        CyanBlue        = 0x56,
        CyanMagenta     = 0x57,
        CyanBlack       = 0x58,

        BlueWhite       = 0x61,
        BlueRed         = 0x62,
        BlueYellow      = 0x63,
        BlueGreen       = 0x64,
        BlueCyan        = 0x65,
        BlueBlue        = 0x66,
        BlueMagenta     = 0x67,
        BlueBlack       = 0x68,

        MagentaWhite    = 0x71,
        MagentaRed      = 0x72,
        MagentaYellow   = 0x73,
        MagentaGreen    = 0x74,
        MagentaCyan     = 0x75,
        MagentaBlue     = 0x76,
        MagentaMagenta  = 0x77,
        MagentaBlack    = 0x78,

        BlackWhite      = 0x81,
        BlackRed        = 0x82,
        BlackYellow     = 0x83,
        BlackGreen      = 0x84,
        BlackCyan       = 0x85,
        BlackBlue       = 0x86,
        BlackMagenta    = 0x87,
        BlackBlack      = 0x88,

        EndOfType
    };
}



CardNameFunction::Type

카드 분류(기능)

// 카드 분류(기능)
namespace CardNameFunction
{
    enum Type
    {
        None                            = CardNameColor::None,

        // White - Mode
        RemoteControl               = CardNameColor::WhiteWhite,
        CardCodingStart             = CardNameColor::WhiteRed,      // 카드 입력 시작
        CardCodingEnd               = CardNameColor::WhiteYellow,   // 카드 입력 종료
        FunctionStart               = CardNameColor::WhiteGreen,    // 함수 입력 시작
        FunctionEnd                 = CardNameColor::WhiteCyan,     // 함수 입력 종료
        FunctionCall                = CardNameColor::WhiteBlue,     // 함수 호출
        LineTracer                  = CardNameColor::WhiteMagenta,  // 라인 트레이서 시작
        Piano                       = CardNameColor::WhiteBlack,    // 피아노 모드
        
        
        // Red - LightBody
        LightBodyWhite              = CardNameColor::RedWhite,
        LightBodyRed                = CardNameColor::RedRed,
        LightBodyYellow             = CardNameColor::RedYellow,
        LightBodyGreen              = CardNameColor::RedGreen,
        LightBodyCyan               = CardNameColor::RedCyan,
        LightBodyBlue               = CardNameColor::RedBlue,
        LightBodyMagenta            = CardNameColor::RedMagenta,
        LightBodyBlack              = CardNameColor::RedBlack,
        
        // Yellow - Light On
        LightOnHighBeam             = CardNameColor::YellowWhite,
        LightOnEmergencyLight       = CardNameColor::YellowRed,
        LightOnLowBeam              = CardNameColor::YellowYellow,
        LightOnLeftTurnSignal       = CardNameColor::YellowGreen,
        LightOnRightTurnSignal      = CardNameColor::YellowCyan,
        LightOnTailLight            = CardNameColor::YellowBlue,
        LightOffTailLight           = CardNameColor::YellowMagenta,
        LightOffLowBeam             = CardNameColor::YellowBlack,
        
        // Green - Move - Basic
        MoveForward                 = CardNameColor::GreenWhite,
        MoveForward1Block           = CardNameColor::GreenRed,
        MoveTurnLeft180Deg          = CardNameColor::GreenYellow,
        MoveTurnLeft90Deg           = CardNameColor::GreenGreen,
        MoveTurnRight90Deg          = CardNameColor::GreenCyan,
        MoveBackward1Block          = CardNameColor::GreenBlue,
        MoveBackward                = CardNameColor::GreenMagenta,
        MoveStop                    = CardNameColor::GreenBlack,
        
        // Cyan - If
        IfFindFrontObstacle         = CardNameColor::CyanWhite,         // Front Obstacle
        IfFindGroundRed             = CardNameColor::CyanRed,           // Ground Color Red
        IfFindGroundYellow          = CardNameColor::CyanYellow,        // Ground Color Yellow
        IfFindGroundGreen           = CardNameColor::CyanGreen,         // Ground Color Green
        IfFindGroundCyan            = CardNameColor::CyanCyan,          // Ground Color Cyan
        IfFindGroundBlue            = CardNameColor::CyanBlue,          // Ground Color Blue
        IfElse                      = CardNameColor::CyanMagenta,
        IfEnd                       = CardNameColor::CyanBlack,
        
        // Blue - Loop
        LoopStartInfinite           = CardNameColor::BlueWhite,
        LoopStart2                  = CardNameColor::BlueRed,
        LoopStart3                  = CardNameColor::BlueYellow,
        LoopStart4                  = CardNameColor::BlueGreen,
        LoopStart5                  = CardNameColor::BlueCyan,
        LoopStart10                 = CardNameColor::BlueBlue,
        LoopBreak                   = CardNameColor::BlueMagenta,
        LoopEnd                     = CardNameColor::BlueBlack,
        
        // Magenta - Preset
        presetYawing60Deg           = CardNameColor::MagentaWhite,      // 중앙, 왼쪽 30도, 오른쪽 60도, 왼쪽 30도 
        presetZigZag                = CardNameColor::MagentaRed,        // 중앙, 왼쪽 90도, 오른쪽 180도, 왼쪽 90도 
        presetWave                  = CardNameColor::MagentaYellow,
        presetTornadoLeft           = CardNameColor::MagentaGreen,
        presetTornadoRight          = CardNameColor::MagentaCyan,
        presetCircleLeft            = CardNameColor::MagentaBlue,
        presetCircleRight           = CardNameColor::MagentaMagenta,
        presetWait1Sec              = CardNameColor::MagentaBlack,      // 1초 기다림
        
        // Black - Melody
        Melody1                     = CardNameColor::BlackWhite,
        Melody2                     = CardNameColor::BlackRed,
        Melody3                     = CardNameColor::BlackYellow,
        Melody4                     = CardNameColor::BlackGreen,
        Melody5                     = CardNameColor::BlackCyan,
        Melody6                     = CardNameColor::BlackBlue,
        Melody7                     = CardNameColor::BlackMagenta,
        Melody8                     = CardNameColor::BlackBlack,
        
        EndOfType
    };
}



CardColor::Type

카드 색 분류

// 카드 색 분류
namespace CardColor
{
    enum Type
    {
        Unknown     = 0x00,
        White       = 0x01,
        Red         = 0x02,
        Yellow      = 0x03,
        Green       = 0x04,
        Cyan        = 0x05,
        Blue        = 0x06,
        Magenta     = 0x07,
        Black       = 0x08,
        Grey        = 0x09,

        EndOfType
    };
}



E-DRIVE

  1. Intro
  2. Typedef
  3. DataType
  4. Definitions
  5. Structs
  6. Structs - Light


Index