Structs
데이터 송수신 시에 사용하는 구조체들을 소개합니다.

Protocol::Header

헤더.
데이터 송수신 시에 사용하는 헤더입니다.
1
namespace Protocol
2
{
3
struct Header
4
{
5
u8 dataType; // 데이터의 형식
6
u8 length; // 데이터의 길이
7
u8 from; // 데이터를 전송하는 장치의 DeviceType
8
u8 to; // 데이터를 수신하는 장치의 DeviceType
9
10
};
11
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
dataType
Protocol::DataType::Type
1 Byte
-
데이터의 타입.
length
uint8_t
1 Byte
0 ~ 255
데이터의 길이.
from
Protocol::DeviceType::Type
1 Byte
-
데이터를 전송하는 장치.
to
Protocol::DeviceType::Type
1 Byte
-
데이터를 수신하는 장치.

Protocol::Ping

Ping
특정 장치가 존재하는지를 확인할 때 사용합니다. 응답은 Ack를 받습니다.
1
namespace Protocol
2
{
3
struct Ping
4
{
5
u64 systemTime; // Ping을 전송하는 장치의 시각
6
};
7
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
systemTime
uint64_t
8 Byte
-
시스템 시

Protocol::Ack

응답.
특정한 데이터를 요청하지 않은 경우에 Ack를 응답으로 전송합니다. 수신 받은 데이터의 crc16을 포함하여 돌려보내기 때문에 데이터를 전송한 측에서 정상적으로 데이터를 전송했는지 판별하는데 사용합니다.
1
namespace Protocol
2
{
3
struct Ack
4
{
5
u64 systemTime; // 수신 받은 시간
6
u8 dataType; // 수신 받은 데이터 타입
7
u16 crc16; // 수신 받은 데이터의 crc16
8
};
9
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
systemTime
uint64_t
8 Byte
-
시스템 시간.
dataType
Protocol::DataType::Type
1 Byte
-
수신 받은 데이터 타입.
crc16
uint16_t
2 Byte
-
수신 받은 헤더와 데이터의 CRC16 값.

Protocol::Error

오류.
드론에 문제가 생긴 경우 Error 구조체를 600ms에 한 번 RF를 통해 송신합니다. errorFlagsForSensor와 errorFlagsForState는 각각의 값에 해당하는 플래그를 조합하여 여러 오류들이 동시에 발생하는 것을 표시합니다. 문제가 완전히 없어진 경우 Error 플래그를 0으로 초기화하여 추가로 5회 전송 후 전송을 중단합니다.
1
namespace Protocol
2
{
3
struct Error
4
{
5
u64 systemTime; // 에러 메세지 송신 시각
6
u32 errorFlagsForSensor; // 센서 오류 플래그
7
u32 errorFlagsForState; // 상태 오류 플래그
8
};
9
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
systemTime
uint64_t
8 Byte
-
시스템 시간.
errorFlagsForSensor
ErrorFlagsForSensor::Type
4 Byte
-
센서 오류 플래그 조합.
errorFlagsForState
ErrorFlagsForState::Type
4 Byte
-
상태 오류 플래그 조합.

Protocol::Request

데이터 요청.
1
namespace Protocol
2
{
3
struct Request
4
{
5
u8 dataType; // 요청할 데이터 타입
6
};
7
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
dataType
Protocol::DataType::Type
1 Byte
-
요청할 데이터 타입.

Protocol::Address

장치 주소(고유번호).
1
namespace Protocol
2
{
3
struct Address
4
{
5
u8 address[16];
6
};
7
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
address
uint8_t Array
16 Byte
-
장치 주소.

Protocol::Information

펌웨어 정보.
1
namespace Protocol
2
{
3
struct Information
4
{
5
u8 modeUpdate; // 업데이트 모드
6
7
u32 modelNumber; // 모델 번호
8
u32 version; // 현재 펌웨어의 버전
9
10
u16 year; // 빌드 년
11
u8 month; // 빌드 월
12
u8 day; // 빌드 일
13
};
14
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
modeUpdate
Mode::Update::Type
1 Byte
-
업데이트 모드.
modelNumber
ModelNumber::Type
4 Byte
-
모델 번호.
version
Protocol::Version
4 Byte
-
펌웨어의 버전.
year
uint16_t
2 Byte
-
펌웨어 빌드 년.
month
uint8_t
1 Byte
-
펌웨어 빌드 월.
day
uint8_t
1 Byte
-
펌웨어 빌드 일.

Protocol::Version

펌웨어 버전.
버전 비교 시 v값으로 비교할 수 있도록 struct 내부의 변수 배치 순서를 다른 구조체들과 다르게 역순으로 배열하였습니다.
1
namespace Protocol
2
{
3
union Version
4
{
5
struct
6
{
7
u16 build; // Build Number
8
u8 minor; // Minor Number
9
u8 major; // Major Number
10
};
11
12
u32 v;
13
};
14
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
build
uint16_t
14 bit
0 ~ 65535
빌드 번호.
minor
uint8_t
1 Byte
0 ~ 255
부 번호.
major
uint8_t
1 Byte
0 ~ 255
주 번호.
v
uint32_t
4 Byte
-
build, minor, major를 하나로 묶은 것.

Control::Quad8

드론.
1
namespace Control
2
{
3
struct Quad8
4
{
5
s8 roll; // roll
6
s8 pitch; // pitch
7
s8 yaw; // yaw
8
s8 throttle; // throttle
9
};
10
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
음수 값(-)
양수 값(+)
roll
int8_t
1 Byte
-100 ~ 100
좌우.
좌측.
우측.
pitch
int8_t
1 Byte
-100 ~ 100
전후.
후방.
전방.
yaw
int8_t
1 Byte
-100 ~ 100
좌우 회전.
시계 방향.
반시계 방향.
throttle
int8_t
1 Byte
-100 ~ 100
승하강.
하강.
상승.

Control::Quad8AndRequestData

드론 조종 및 데이터 요청.
조종 명령 시 응답 데이터로 Ack 대신 요청한 데이터를 응답으로 보내게 합니다.
1
namespace Control
2
{
3
struct Quad8AndRequestData
4
{
5
s8 roll; // roll
6
s8 pitch; // pitch
7
s8 yaw; // yaw
8
s8 throttle; // throttle
9
10
u8 dataType; // DataType
11
};
12
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
음수 값(-)
양수 값(+)
roll
int8_t
1 Byte
-100 ~ 100
좌우.
좌측.
우측.
pitch
int8_t
1 Byte
-100 ~ 100
전후.
후방.
전방.
yaw
int8_t
1 Byte
-100 ~ 100
좌우 회전.
시계 방향.
반시계 방향.
throttle
int8_t
1 Byte
-100 ~ 100
승하강.
하강.
상승.
dataType
Protocol::DataType::Type
-
1 Byte
요청할 데이터
-
-

Control::Position16

드론 이동 .
드론에 이동 명령을 내리는 경우 사용합니다.
1
namespace Control
2
{
3
struct Position16
4
{
5
s16 positionX; // meter x 10
6
s16 positionY; // meter x 10
7
s16 positionZ; // meter x 10
8
s16 velocity; // m/s x 10
9
10
s16 heading; // degree
11
s16 rotationalVelocity; // deg/s
12
};
13
}
Copied!
변수 이름.
형식.
크기.
범위.
.
설명.
positionX
int16_t
2 Byte
-100 ~ 100(-10.0 ~ 10.0)
meter x 10
앞(+), 뒤(-)
positionY
int16_t
2 Byte
-100 ~ 100(-10.0 ~ 10.0)
meter x 10
좌(+), 우(-)
positionZ
int16_t
2 Byte
-100 ~ 100(-10.0 ~ 10.0)
meter x 10
위(+), 아래(-)
velocity
int16_t
2 Byte
0 ~ 50(0.0 ~ 5.0)
m/s x 10
이동 속도
heading
int16_t
2 Byte
-360 ~ 360
degree
반시계방향(+), 시계방향(-)
rotationalVelocity
int16_t
2 Byte
10 ~ 180
degree/s
좌우 회전 속도

Control::Position

드론 이동 명령.
드론에 이동 명령을 내리는 경우 사용합니.
1
namespace Control
2
{
3
struct Position
4
{
5
float positionX; // meter
6
float positionY; // meter
7
float positionZ; // meter
8
float velocity; // m/s
9
10
s16 heading; // degree
11
s16 rotationalVelocity; // deg/s
12
};
13
}
Copied!
변수 이름.
형식.
크기.
범위.
.
설명.
positionX
float
4 Byte
-10.0 ~ 10.0
meter
앞(+), 뒤(-)
positionY
float
4 Byte
-10.0 ~ 10.0
meter
좌(+), 우(-)
positionZ
float
4 Byte
-10.0 ~ 10.0
meter
위(+), 아래(-)
velocity
float
4 Byte
0.0 ~ 5.0
m/s
앞뒤 이동 속도
heading
float
2 Byte
-360 ~ 360
degree
반시계방향(+), 시계방향(-)
rotationalVelocity
float
2 Byte
10 ~ 180
degree/s
좌우 회전 속도

Protocol::Command::Command

설정 변경.
1
namespace Protocol
2
{
3
namespace Command
4
{
5
struct Command
6
{
7
u8 commandType; // 명령 타입
8
u8 option; // 명령에 대한 옵션
9
};
10
}
11
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
commandType
Protocol::CommandType::Type
1 Byte
-
명령 타입
option
Mode::Control::Flight::Type
1 Byte
-
좌(+), 우(-)
System::FlightEvent::Type
-
Headless::Type
-
System::Trim::Type
-
Mode::Controller::Type
-
uint8_t

Protocol::Command::LightEvent

설정 변경 + LED 이벤트.
1
namespace Protocol
2
{
3
namespace Command
4
{
5
struct LightEvent
6
{
7
Protocol::Command::Command command;
8
Protocol::Light::Event event;
9
};
10
}
11
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
command
Protocol::Command::Command
2 Byte
-
명령.
event
Protocol::Light::Event
4 Byte
-
LED 이벤트.

Protocol::Command::LightEventColor

설정 변경 + LED 이벤트(RGB)
1
namespace Protocol
2
{
3
namespace Command
4
{
5
struct LightEventColor
6
{
7
Protocol::Command::Command command;
8
Protocol::Light::Event event;
9
Light::Color color;
10
};
11
}
12
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
command
Protocol::Command::Command
2 Byte
-
명령.
event
Protocol::Light::Event
4 Byte
-
LED 이벤트.
color
Light::Color
3 Byte
-
LED RGB 색상.

Protocol::Command::LightEventColors

설정 변경 + LED 이벤트(Palette)
1
namespace Protocol
2
{
3
namespace Command
4
{
5
struct LightEventColors
6
{
7
Protocol::Command::Command command;
8
Protocol::Light::Event event;
9
u8 colors;
10
};
11
}
12
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
command
Protocol::Command::Command
2 Byte
-
명령.
event
Protocol::Light::Event
4 Byte
-
LED 이벤트.
color
Light::Color::Type
1 Byte
-
LED 팔레트 .

Protocol::Pairing

페어링.
장치의 페어링 정보를 확인하거나 변경할 때 사용합니다. address0, address1, address2를 모두 0으로 설정한 경우 RF 데이터 송신을 실행하지 않으며, 데이터 수신 시에도 해당 데이터를 무시합니다. channelArray에는 모두 4개의 채널이 들어가며, 주파수 호핑(FHSS) 동작 시 지정한 모든 채널을 사용하고, 주파수 고정 동작 시 배열의 첫 번째에 있는 채널을 사용합니다.
1
namespace Protocol
2
{
3
struct Pairing
4
{
5
u16 address0;
6
u16 address1;
7
u16 address2;
8
u8 scramble;
9
u8 channelArray[4];
10
};
11
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
address0
uint16_t
2 Byte
0x0000 ~ 0xFFFF
주소0
address1
uint16_t
2 Byte
0x0000 ~ 0xFFFF
주소1
address2
uint16_t
2 Byte
0x0000 ~ 0xFFFF
주소2
scramble
uint8_t
1 Byte
0x00 ~ 0x7F(0~127)
스크램블.
channelArray
uint8_t
4 Byte
0~81
채널.

Protocol::Rssi

RSSI
Received signal strength indication http://www.metageek.com/training/resources/understanding-rssi.html 현재 무선으로 연결된 장치의 신호 세기를 반환합니다.
1
namespace Protocol
2
{
3
struct Rssi
4
{
5
s8 Rssi;
6
};
7
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
rssi
int8_t
1 Byte
-100 ~ 0
신호 세기.

Protocol::RawMotion

Motion 센서 RAW 데이터.
1
namespace Protocol
2
{
3
struct RawMotion
4
{
5
s16 accX;
6
s16 accY;
7
s16 accZ;
8
9
s16 gyroRoll;
10
s16 gyroPitch;
11
s16 gyroYaw;
12
};
13
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
accelX
Int16
2 Byte
-32,768 ~ 32,767
가속도 X
accelY
Int16
2 Byte
-32,768 ~ 32,767
가속도 Y
accelZ
Int16
2 Byte
-32,768 ~ 32,767
가속도 Z
gyroRoll
Int16
2 Byte
-32,768 ~ 32,767
자이로 Roll
gyroPitch
Int16
2 Byte
-32,768 ~ 32,767
자이로 Pitch
gyroYaw
Int16
2 Byte
-32,768 ~ 32,767
자이로 Yaw

Protocol::RawFlow

Flow 센서 RAW 데이터.
1
namespace Protocol
2
{
3
struct RawFlow
4
{
5
f32 x;
6
f32 y;
7
};
8
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
x
float
4 Byte
-
X축.
y
float
4 Byte
-
Y축.

Protocol::State

드론의 현재 상태.
1
namespace Protocol
2
{
3
struct State
4
{
5
u8 modeSystem; // 시스템 모드
6
u8 modeFlight; // 비행 모드
7
8
u8 modeControlFlight; // 비행 제어 모드
9
u8 modeMovement; // 이동 상태
10
u8 headless; // 헤드리스 모드
11
u8 controlSpeed; // 제어 속도
12
u8 sensorOrientation; // 센서 방향
13
u8 battery; // 배터리량(0 ~ 100%)
14
};
15
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
modeSystem
Mode::System::Type
1 Byte
-
System 동작 모드.
modeFlight
Mode::Flight::Type
1 Byte
-
비행 제어기 동작 모드.
modeControlFlight
Mode::Control::Flight::Type
1 Byte
-
비행 제어 모드.
modeMovement
Mode::Movement::Type
1 Byte
-
이동 상태.
headless
Headless::Type
1 Byte
-
Headless 설정 상태.
controlSpeed
uint8_t
1 Byte
-
제어 속도(1,2,3)
sensorOrientation
SensorOrientation:Type
1 Byte
-
센서 방향
battery
uint8_t
1 Byte
0 ~ 100
드론 배터리 잔량.

Protocol::StateController

조종의 현재 상태.
1
namespace Protocol
2
{
3
struct StateController
4
{
5
u8 modeSystem; // 시스템 동작 모드
6
u8 modeController; // 조종기 동작 모드
7
u8 modeConnection; // 연결 모드
8
u8 deviceType; // 현재 장치의 타입
9
s8 rssi; // RSSI
10
11
u32 systemTime; // 시스템 시간(ms)
12
u32 timeConnected; // 연결된 이후부터의 시간(ms)
13
u32 timeLostConnection; // 연결이 끊어지고 나서의 시간(ms)
14
15
u8 countCycleTransferRF; // 1초당 전송 횟수 RF
16
u8 countCycleReceiveRF; // 1초당 수신 횟수 RF
17
u8 countCycleTransferExternal; // 1초당 전송 횟수 External
18
u8 countCycleReceiveExternal; // 1초당 수신 횟수 External
19
u8 countCycleTransferUSB; // 1초당 전송 횟수 USB
20
u8 countCycleReceiveUSB; // 1초당 수신 횟수 USB
21
};
22
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
modeSystem
Mode::System::Type
1 Byte
-
System 동작 모드.
modeController
Mode::Controller::Type
1 Byte
-
조종기 동작 모드.
modeConnection
Mode::Connection::Type
1 Byte
-
연결 모드.
deviceType
Protocol::DeviceType::Type
1 Byte
-
장치 타입.
rssi
int8_t
1 Byte
-
RSSI
systemTime
uint32_t
4 Byte
-
시스템 시간(ms)
timeConnected
uint32_t
4 Byte
-
연결된 이후부터의 시간(ms)
timeLostConnection
uint32_t
4 Byte
0 ~ 100
연결이 끊어지고 나서의 시간(ms)
countCycleTransferRF
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 RF
countCycleReceiveRF
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 RF
countCycleTransferExternal
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 External
countCycleReceiveExternal
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 External
countCycleTransferUSB
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 USB
countCycleReceiveUSB
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 USB

Protocol::StateLink

LINK 모듈의 현재 상태.
1
namespace Protocol
2
{
3
struct StateLink
4
{
5
u8 modeSystem; // 시스템 동작 모드
6
u8 modeConnection; // 연결 모드
7
u8 deviceType; // 현재 장치의 타입
8
s8 rssi; // RSSI
9
10
u32 systemTime; // 시스템 시간(ms)
11
u32 timeConnected; // 연결된 이후부터의 시간(ms)
12
u32 timeLostConnection; // 연결이 끊어지고 나서의 시간(ms)
13
14
u8 countCycleTransferRF; // 1초당 전송 횟수 RF
15
u8 countCycleReceiveRF; // 1초당 수신 횟수 RF
16
u8 countCycleTransferExternal; // 1초당 전송 횟수 External
17
u8 countCycleReceiveExternal; // 1초당 수신 횟수 External
18
u8 countCycleTransferUSB; // 1초당 전송 횟수 USB
19
u8 countCycleReceiveUSB; // 1초당 수신 횟수 USB
20
};
21
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
modeSystem
Mode::System::Type
1 Byte
-
System 동작 모드.
modeConnection
Mode::Connection::Type
1 Byte
-
연결 모.
deviceType
Protocol::DeviceType::Type
1 Byte
-
장치 타입.
rssi
int8_t
1 Byte
-
RSSI
systemTime
uint32_t
4 Byte
-
시스템 시간(ms)
timeConnected
uint32_t
4 Byte
-
연결된 이후부터의 시간(ms)
timeLostConnection
uint32_t
4 Byte
0 ~ 100
연결이 끊어지고 나서의 시간(ms)
countCycleTransferRF
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 RF
countCycleReceiveRF
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 RF
countCycleTransferExternal
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 External
countCycleReceiveExternal
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 External
countCycleTransferUSB
uint8_t
1 Byte
0 ~ 255
1초당 전송 횟수 USB
countCycleReceiveUSB
uint8_t
1 Byte
0 ~ 255
1초당 수신 횟수 USB

Protocol::Attitude

자세.
1
namespace Protocol
2
{
3
struct Attitude
4
{
5
s16 roll; // Roll
6
s16 pitch; // Pitch
7
s16 yaw; // Yaw
8
};
9
}
Copied!
변수 이름.
형식.
크기.
범위.
설명.
roll
int16_t
2 Byte
-32,768 ~ 32,767
Roll
pitch
int16_t
2 Byte
-32,768 ~ 32,767
Pitch
yaw
int16_t
2 Byte
-32,768 ~ 32,767
Yaw
드론의 자세를 확인할 때 값의 범위는 다음과 같습니다.
변수 이름.
형식.
크기.
범위.
설명.
roll
int16_t
2 Byte
-90 ~ 90