Skip to content

Implement (de)serialization for Feature::ArDrone3 #20

@elpiel

Description

@elpiel

Implement Feature::ArDrone3

Most of these ArDrone3 features still need implementing. They all have references to the C SDK that need to be tracked down in order to know what they contain and how to (de)serialize them.

Some features already have more information taken from the official C SDK, PyParrot Python SDK or even received Frames during testing that are Unknown and need implementing.

ArDrone3 can be found here:

#[derive(Debug, Clone, Eq, PartialEq)]
/// u8
pub enum ArDrone3 {
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PILOTING = 0
Piloting(Piloting),
/// ARCOMMANDS_ID_ARDRONE3_CLASS_CAMERA = 1
Camera,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PILOTINGSETTINGS = 2
PilotingSettings,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIARECORDEVENT = 3
MediaRecordEvent,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PILOTINGSTATE = 4
PilotingState(PilotingState),
/// ARCOMMANDS_ID_ARDRONE3_CLASS_ANIMATIONS = 5
Animations,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PILOTINGSETTINGSSTATE = 6
PilotingSettingsState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIARECORD = 7
MediaRecord,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIARECORDSTATE = 8
MediaRecordState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_NETWORKSETTINGS = 9
NetworkSettings,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_NETWORKSETTINGSSTATE = 10
NetworkSettingsState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_SPEEDSETTINGS = 11
SpeedSettings,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_SPEEDSETTINGSSTATE = 12
SpeedSettingsState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_NETWORK = 13
Network,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_NETWORKSTATE = 14
NetworkState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_SETTINGSSTATE = 16
SettingsState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PICTURESETTINGS = 19
PictureSettings,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PICTURESETTINGSSTATE = 20
PictureSettingsState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIASTREAMING = 21
MediaStreaming(MediaStreaming),
/// ARCOMMANDS_ID_ARDRONE3_CLASS_MEDIASTREAMINGSTATE = 22
///
/// TODO: More info on this command
/// On how to start the video stream, look at:
/// arsdk-native/packages/libARController/Sources/ARCONTROLLER_Stream.c:219
///
/// Possible values:
/// - ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_ENABLED
/// Starts stream
/// - ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_DISABLED
///
/// ```c
/// /**
/// * @brief Current video streaming status.
/// */
/// typedef enum
/// {
/// ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_ENABLED = 0, ///< Video streaming is enabled.
/// ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_DISABLED = 1, ///< Video streaming is disabled.
/// ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_ERROR = 2, ///< Video streaming failed to start.
/// ARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED_MAX
/// } eARCOMMANDS_ARDRONE3_MEDIASTREAMINGSTATE_VIDEOENABLECHANGED_ENABLED;
/// ```
MediaStreamingState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_GPSSETTINGS = 23
GPSSettings,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_GPSSETTINGSSTATE = 24
GPSSettingsState,
/// Frame { frame_type: Data, buffer_id: DCNavdata, sequence_id: 69,
/// feature: Some(Unknown { feature: 1, data: [25, 0, 0, 243, 0] }) }
/// ARCOMMANDS_ID_ARDRONE3_CLASS_CAMERASTATE = 25
/// 1. u16:
/// - ARCOMMANDS_ID_ARDRONE3_CAMERASTATE_CMD_ORIENTATION = 0,
/// * _tilt: u8
/// * _pan: u8
/// - ARCOMMANDS_ID_ARDRONE3_CAMERASTATE_CMD_DEFAULTCAMERAORIENTATION = 1,
/// - ARCOMMANDS_ID_ARDRONE3_CAMERASTATE_CMD_ORIENTATIONV2 = 2,
/// * _tilt: float?!
/// * _pan: float?!
/// See also `ARCOMMANDS_ReadWrite_AddFloatToBuffer`:
/// > // Add a float to the buffer
/// > // Returns -1 if the buffer is not big enough
/// > // Returns the new offset in the buffer on success
/// > int32_t ARCOMMANDS_ReadWrite_AddFloatToBuffer (uint8_t *buffer, float newVal, int32_t oldOffset, int32_t buffCap)
/// > {
/// > union {
/// > float f;
/// > uint32_t u32;
/// > } val = { .f = newVal };
/// > return ARCOMMANDS_ReadWrite_AddU32ToBuffer (buffer, val.u32, oldOffset, buffCap);
/// > }
/// - ARCOMMANDS_ID_ARDRONE3_CAMERASTATE_CMD_DEFAULTCAMERAORIENTATIONV2 = 3,
/// - ARCOMMANDS_ID_ARDRONE3_CAMERASTATE_CMD_VELOCITYRANGE = 4,
///
/// 2. _tilt - u8
/// 3. _pan - u8
CameraState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_ANTIFLICKERING = 29
AntiFlickering,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_ANTIFLICKERINGSTATE = 30
AntiFlickeringState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_GPSSTATE = 31
/// TODO: use the GPSState struct
GPSState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PROSTATE = 32
ProState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_ACCESSORYSTATE = 33
AccessoryState,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_PILOTINGEVENT = 34
PilotingEvent,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_SOUND = 35
Sound,
/// ARCOMMANDS_ID_ARDRONE3_CLASS_SOUNDSTATE = 36
SoundState,
Unknown {
ardrone3: u8,
data: Vec<u8>,
},
}

For each ArDrone3 feature there must be implementations of:

  • impl TryFromCtx
  • impl TryIntoCtx

TODOs:

  • ArDrone3::Piloting
  • ArDrone3::Camera
  • ArDrone3::PilotingSettings
  • ArDrone3::MediaRecordEvent
  • ArDrone3::PilotingState
  • ArDrone3::Animations
  • ArDrone3::PilotingSettingsState
  • ArDrone3::MediaRecord
  • ArDrone3::MediaRecordState
  • ArDrone3::NetworkSettings
  • ArDrone3::NetworkSettingsState
  • ArDrone3::SpeedSettings
  • ArDrone3::SpeedSettingsState
  • ArDrone3::Network
  • ArDrone3::NetworkState
  • ArDrone3::SettingsState
  • ArDrone3::PictureSettings
  • ArDrone3::PictureSettingsState
  • ArDrone3::MediaStreaming
  • ArDrone3::MediaStreamingState
  • ArDrone3::GPSSettings
  • ArDrone3::GPSSettingsState
  • ArDrone3::CameraState
  • ArDrone3::AntiFlickering
  • ArDrone3::AntiFlickeringState
  • ArDrone3::GPSState Implement (de)serialization for Ardrone3::GPSState #13
  • ArDrone3::ProState
  • ArDrone3::AccessoryState
  • ArDrone3::PilotingEvent
  • ArDrone3::Sound
  • ArDrone3::SoundState

Resources

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions