E-DRIVE / Protocol / Definitions

Modified : 2020.1.13


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



Protocol::CommandType::Type

명령 타입

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

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

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

            // 통신[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
        Drone_3_Drone_P2        = 0x00031002,   // Drone_3_Drone_P2
        Drone_3_Drone_P3        = 0x00031003,   // Drone_3_Drone_P3
        Drone_3_Drone_P4        = 0x00031004,   // Drone_3_Drone_P4
        Drone_3_Drone_P5        = 0x00031005,   // Drone_3_Drone_P5
        Drone_3_Drone_P6        = 0x00031006,   // Drone_3_Drone_P6
        Drone_3_Drone_P7        = 0x00031007,   // Drone_3_Drone_P7
        Drone_3_Drone_P8        = 0x00031008,   // Drone_3_Drone_P8

        Drone_3_Controller_P1   = 0x00032001,   // Drone_3_Controller_P1 / small size
        Drone_3_Controller_P2   = 0x00032002,   // Drone_3_Controller_P2 / large size
        Drone_3_Controller_P3   = 0x00032003,   // Drone_3_Controller_P3 / small size + USB

        Drone_4_Drone_P5        = 0x00041005,   // Drone_4_Drone_P5

        Drone_4_Controller_P2   = 0x00042002,   // Drone_4_Controller_P2

        Drone_4_Link_P0         = 0x00043000,   // Drone_4_Link_P0

        Drone_4_Tester_P4       = 0x0004A004,   // Drone_4_Tester_P4
        Drone_4_Monitor_P4      = 0x0004A104,   // Drone_4_Monitor_P4

        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_P5       = 0x0007A005,   // Drone_7_Tester_P5
        Drone_7_Monitor_P5      = 0x0007A105,   // Drone_7_Monitor_P5

        Drone_8_Drone_P1        = 0x00081001,   // Drone_8_Drone_P1

        Drone_8_Tester_P4       = 0x0008A004,   // Drone_8_Tester_P4
    };
}



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,

            Whispering      = 0xFE,     // 바로 인접한 장치까지만 전달(받은 장치는 자기 자신에게 보낸 것처럼 처리하고 타 장치에 전달하지 않음)
            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            = 0x10,     // 부팅
            Start,                      // 시작 코드 실행
            Running,                    // 메인 코드 동작
            ReadyToReset,               // 리셋 대기(1초 뒤 리셋)
            
            Error           = 0xA0,     // 오류
            
            EndOfType
        };
    }
    
}



Mode::Drone::Type

드론 모드

namespace Mode
{
    namespace Drone
    {
        enum Type
        {
            None,                       // 없음

            Drive           = 0x10,     // 원격 조종
            Card,                       // 카드 코딩
            Motion,                     // 모션 코딩
            Maze,                       // 미로 찾기(미구현)
            Random,                     // 랜덤(미구현)
            HandFollowing,              // 핸드 팔로잉
            LineTracer,                 // 라인 트레이서
            Piano,                      // 피아노 모드

            Link            = 0x80,     // 중계기

            Error           = 0xA0,     // 오류(문제로 인해 정상적인 동작을 할 수 없는 경우)

            EndOfType
        };
    }
}



Mode::Drive::Type

주행 모드

namespace Mode
{
    namespace Drive
    {
        enum Type
        {
            None        = 0x00,     // 없음

            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 Motor
{
    namespace Part
    {
        enum Type
        {
            Left,   // Left
            Right,  // Right

            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으로만 호출)

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

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

            HzInstantly       = 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,       // 시라시라
            Do5Sol5Do6,     // 도5솔5도6도5솔5도6
            Do6Sol5Do5,     // 도6솔5도5도6솔5도5
            
            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,     // C6
            BuzzSound2,     // C6, D6
            BuzzSound3,     // C6, D6, E6
            
            Button,
            Shot,
            
            Mode1,
            Mode2,
            Mode3,
            Mode4,
            Mode5,
            Mode6,
            Mode7,
            Mode8,
            
            EndOfType
        };
    }
}



E-DRIVE

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


Index