Commit bc66a5be authored by 18신대성's avatar 18신대성

First Commit

parents

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
SILENT="YES"
ifeq ($(SILENT), "YES")
SILENT_MAKE=@
REDIRECT_STDOUT=> /dev/null
REDIRECT_STDERR=2> /dev/null
endif
RELEASE_BUILD=yes
ifeq ($(RELEASE_BUILD),yes)
RELEASE_OPT="release"
else
RELEASE_OPT="debug"
endif
FFMPEG_CONFIG=both
FFMPEG_DIR_EXIST=$(shell bash -c "if [ -d ffmpeg ]; then echo \"YES\"; else echo \"NO\"; fi")
FFMPEG_ARCHIVE=$(shell bash -c "if [ -e ffmpeg-0.8.tar.bz2 ]; then echo \"ffmpeg-0.8.tar.bz2\"; else echo \"no_ffmpeg_archive_found\"; fi")
FFMPEG_ARCHIVE_ROOTDIR=$(shell tar tjf $(FFMPEG_ARCHIVE) $(REDIRECT_STDERR) | head -n 1)
ifeq "$(MAKECMDGOALS)" ""
MAKECMDGOALS=host
endif
all: extract build
$(SILENT_MAKE)echo "Build done."
extract:
ifneq "$(MAKECMDGOALS)" "clean"
ifeq ($(FFMPEG_DIR_EXIST),YES)
$(SILENT_MAKE)echo "Libs already extracted"
else
$(SILENT_MAKE)echo -n "Extracting libs ... "
$(SILENT_MAKE)tar xjf $(FFMPEG_ARCHIVE)
ifneq ($(FFMPEG_ARCHIVE_ROOTDIR), ffmpeg/)
$(SILENT_MAKE)mkdir ffmpeg $(REDIRECT_STDERR)
$(SILENT_MAKE)mv $(FFMPEG_ARCHIVE_ROOTDIR)* ffmpeg/
$(SILENT_MAKE)rm -rf $(FFMPEG_ARCHIVE_ROOTDIR)
endif
$(SILENT_MAKE)tar xzf parrot_ffmpeg_build_utils.tar.gz
$(SILENT_MAKE)echo "Done"
endif
endif
build:
ifneq "$(MAKECMDGOALS)" "clean"
$(SILENT_MAKE)echo "Building target $(MAKECMDGOALS)"
$(SILENT_MAKE)cd ffmpeg && ./autoConf.bash $(MAKECMDGOALS) $(RELEASE_OPT) $(FFMPEG_CONFIG) && cd - $(REDIRECT_STDOUT)
endif
clean:
ifeq ($(FFMPEG_DIR_EXIST),YES)
$(SILENT_MAKE)cd ffmpeg && ./autoConf.bash clean release $(REDIRECT_STDERR) ; cd - $(REDIRECT_STDOUT)
endif
$(SILENT_MAKE)rm -rf ffmpeg/
$(SILENT_MAKE)rm -rf Includes/
ifneq "$(MAKECMDGOALS)" "clean"
ifneq "$(MAKECMDGOALS)" "extract"
ifneq "$(MAKECMDGOALS)" "build"
$(MAKECMDGOALS): all
endif
endif
endif
GEN_CUSTOM_HEADER:=../Common/generated_custom.h
include custom.makefile
include config.makefile
GNUTOOLS_PATH=/usr/local/$(GNUTOOLS_VERSION)/bin
define ADD_RULE_TEMPLATE
TO_BUILD+=build_$(1)
endef
# Add rule for each target
$(foreach target,$(TARGETS),$(eval $(call ADD_RULE_TEMPLATE,$(target))))
.PHONY: linux_sample svn_update $(TO_BUILD) build_libs $(MAKECMDGOALS)
all: $(GEN_CUSTOM_HEADER) build_libs $(TO_BUILD)
$(GEN_CUSTOM_HEADER): custom.makefile
@echo "#ifndef _GENERATED_CUSTOM_CONFIGURATION_H_" > $@
@echo "#define _GENERATED_CUSTOM_CONFIGURATION_H_" >> $@
@echo >> $@
@echo "#if defined(BR2_PACKAGE_BCM4318_AP)" >> $@
@echo "# define AP" >> $@
@echo "#else" >> $@
@echo "# define STA" >> $@
@echo "#endif" >> $@
@echo "#define CURRENT_NUM_VERSION_SOFT \"$(MAJOR_VERSION).$(MINOR_VERSION).$(MODIF_VERSION)\"" >> $@
@echo "#define CURRENT_BUILD_DATE \"$(shell date +%F\ %H:%M)\"" >> $@
@echo >> $@
ifeq ("$(VIDEO_YUV)","yes")
@echo "#define USE_VIDEO_YUV" >> $@
endif
ifeq ("$(RECORD_VISION_DATA)","yes")
@echo "#define RECORD_VISION_DATA" >> $@
endif
@echo >> $@
@echo "#define WIFI_NETWORK_NAME \"$(WIFI_NETWORK_NAME)\"" >> $@
@echo "#define WIFI_BROADCAST \"$(WIFI_BROADCAST)\"" >> $@
@echo "#define WIFI_ARDRONE_IP \"$(WIFI_ARDRONE_IP)\"" >> $@
@echo >> $@
@echo "#if defined(__linux__) || defined(USE_MINGW32)" >> $@
@echo "# define WIFI_MOBILE_IP \"$(WIFI_MOBILE_IP)\"" >> $@
@echo "# define WIRED_ITFNAME \"$(WIRED_ITFNAME)\"" >> $@
@echo "#endif // ! __linux__" >> $@
@echo >> $@
@echo >> $@
@echo "#endif // ! _GENERATED_CUSTOM_CONFIGURATION_H_" >> $@
ifneq "$(MAKECMDGOALS)" ""
ifneq "$(MAKECMDGOALS)" "clean"
ifneq "$(MAKECMDGOALS)" "update"
$(MAKECMDGOALS):
@echo -e "\nCannot make what you ask me to do :-("
else
$(MAKECMDGOALS): svn_update
endif
endif
endif
$(MAKECMDGOALS): build_libs $(TO_BUILD)
checkpackages:
ifeq ($(IPHONE_MODE),yes)
sh $(shell pwd)/check_dependencies.sh iphone RELEASE_BUILD=$(RELEASE_BUILD) $(MAKECMDGOALS)
else
ifeq ($(USE_LINUX),yes)
sh $(shell pwd)/check_dependencies.sh static RELEASE_BUILD=$(RELEASE_BUILD) $(MAKECMDGOALS)
else
ifeq ($(USE_ANDROID),yes)
sh $(shell pwd)/check_dependencies.sh android_no_neon RELEASE_BUILD=$(RELEASE_BUILD) $(MAKECMDGOALS)
endif
endif
endif
define GENERIC_RULES_TEMPLATE
build_$(1):
@$(MAKE) -C $(1) $(MAKECMDGOALS)
endef
$(foreach target,$(TARGETS),$(eval $(call GENERIC_RULES_TEMPLATE,$(target))))
build_libs: checkpackages
@$(MAKE) PC_TARGET=yes USE_ARDRONE_TOOL=yes TARGET=pc_ USE_MINGW32=no -C ../Lib/Build $(MAKECMDGOALS)
@$(MAKE) PC_TARGET=yes USE_ARDRONE_TOOL=no TARGET=pc_ USE_MINGW32=no -C ../Lib/Build $(MAKECMDGOALS)
ifeq ("$(MINGW32_MODE)","yes")
ifeq ($(shell which i586-mingw32msvc-gcc 2> /dev/null),)
$(warning You need MinGW32 to compile My Ardrone lib for Windows if you want. (under Debian: apt-get install mingw32))
else
# @$(MAKE) PC_TARGET=yes TARGET=mingw32_ USE_MINGW32=yes TMP_SDK_FLAGS="USE_MINGW32=yes NO_COM=yes USE_BLUEZ=no" -C ../Lib/Build $(MAKECMDGOALS)
# @$(MAKE) PC_TARGET=yes TARGET=emb_mingw32_ USE_MINGW32=yes CONTROL_DLL=yes TMP_SDK_FLAGS="USE_MINGW32=yes NO_COM=yes USE_BLUEZ=no" -C ../Lib/Build $(MAKECMDGOALS)
endif
endif
ifeq ($(WIIMOTE_SUPPORT),yes)
# @$(MAKE) PC_TARGET=yes TARGET=pc_ TMP_SDK_FLAGS="USE_BLUEZ=yes" -C ../Lib/libcwiid $(MAKECMDGOALS)
endif
define svn_update_template
cd ../.. ; \
echo "Checking out tag $(1) of $(2) ..." ; \
if [ $(1) != head ] ; then \
svn co -r $(1) https://svn.ardrone.org/repo/ARDrone_API/$(2) ; \
else \
svn co https://svn.ardrone.org/repo/ARDrone_API/$(2) ; \
fi ; \
cd Soft/Build ;
endef
svn_update:
@-$(call svn_update_template,$(SDK_VERSION),ARDroneLib)
#!/bin/sh
## Author : stephane.piskorski@parrot.com
## Date : 19th,Oct. 2010
# Parameters :
# $1 : target : can be 'iphone (cross compile static libs for iPhone)', 'static (static library for the host)', 'host (shared library for the host)'
# $2 : RELEASE_BUILD=xxx
# $3 : 'clean' if we want to clean, or nothing
check()
{
if [ `cat $TEMPFILE | grep $1 | wc -l` -eq 0 ] ; then
echo " $1";
fi
}
verify()
{
p="$(check $1)";
if [ "$p" != "" ]; then
packages="$packages $p";
if [ "$2" != "" ];
then messages="$messages\n $p : $2";
else messages="$messages\n $p";
fi;
fi;
}
TEMPFILE=`mktemp`
if [ "$ALL_TARGETS" != "" ] ; then
TARGET_DIR=$ALL_TARGETS
else
TARGET_DIR=./targets_versions
fi
SDK_PATH=`echo $0 | sed "s:/Soft/Build/check_dependencies.sh::"`
if [ "$1" != "iphone" ] ; then
if [ "$3" = "cleanAll" ] ; then
make -C $SDK_PATH/FFMPEG clean
exit 0
elif [ "$3" = "clean" ] ; then
# do nothing here
echo "" > /dev/null
else
make -C $SDK_PATH/FFMPEG $1 $2
fi
fi
packages="";
messages="";
if [ `which apt-get` ] ; then
if [ "`apt-get -v | grep -o ubuntu`" != "" ] ; then
echo "\033[31mChecking required Ubuntu packages ...\033[0m";
dpkg -l > $TEMPFILE;
# To compile the AR.Drone project
verify "daemontools" "Mandatory to build the AR.Drone project on Ubuntu";
# To use the Wiimote in Navigation
#verify "libcwiid1-dev";
#verify "libbluetooth-dev";
# To compile Navigation
verify "libsdl1.2-dev";
verify "libgtk2.0-dev";
verify "libxml2-dev";
verify "libudev-dev";
verify "libiw-dev";
if [ "$packages" != "" ] ; then
echo "You should install the following packages to compile the AR.Drone SDK with Ubuntu:\n $messages \n";
echo "Do you want to install them now [y/n] ?";
read user_answer ;
if [ "$user_answer" = "y" ]; then
sudo apt-get install $packages;
fi
else
echo "ok.";
fi
fi
fi
#########################################################
# Common build definitions (CUSTOM)
#########################################################
RELEASE_BUILD = yes
QUIET_BUILD = yes
VPSDK_PARALLEL_BUILD = no
#########################################################
# System utility definitions (STATIC)
#########################################################
define CHECK_UNDEFINITION
ifdef $(1)
$$(warning ERROR : $(1) defined $(2))
ERROR=1
endif
endef
define EXIT_IF_ERROR
ifeq "$$(ERROR)" "1"
$$(error There has been some errors)
endif
endef
#########################################################
# Validity control (STATIC)
#########################################################
ifdef PC_TARGET
$(eval $(call CHECK_UNDEFINITION,CONSOLE_TARGET,(should not be defined when PC_TARGET is defined)))
endif
$(eval $(call EXIT_IF_ERROR))
#########################################################
# Common definitions (STATIC)
#########################################################
ifeq "$(QUIET_BUILD)" "yes"
export MAKEFLAGS+=-s --no-print-directory
endif
COMMON_DIR:=../Common
SDK_FLAGS:="NO_EXAMPLES=yes"
SDK_FLAGS+="USE_SDK=yes"
SDK_FLAGS+="QUIET_BUILD=$(QUIET_BUILD)"
SDK_FLAGS+="RELEASE_BUILD=$(RELEASE_BUILD)"
SDK_FLAGS+="SDK_VERSION=$(SDK_VERSION)"
ifeq ($(filter NO_COM=%,$(TMP_SDK_FLAGS)),)
SDK_FLAGS+="NO_COM=no"
endif
#########################################################
# PC_TARGET specific definitions (STATIC)
#########################################################
ifdef PC_TARGET
SDK_FLAGS+="NO_COM=no"
ifeq ("$(IPHONE_MODE)","yes")
OS_DEFINE=GNU_LINUX
else
ifeq ("$(USE_LINUX)","yes")
OS_DEFINE=GNU_LINUX
else
TARGET:=$(TARGET).exe
OS_DEFINE=WINDOW
endif
endif
GENERIC_CFLAGS+=-D_MOBILE
ifeq ($(RECORD_RAW_VIDEO),yes)
GENERIC_CFLAGS+=-DRECORD_RAW_VIDEO
endif
ifeq ($(RECORD_FFMPEG_VIDEO),yes)
GENERIC_CFLAGS+=-DRECORD_FFMPEG_VIDEO
endif
ifeq ($(RECORD_ENCODED_VIDEO),yes)
GENERIC_CFLAGS+=-DRECORD_ENCODED_VIDEO
endif
GENERIC_CFLAGS+=-D$(OS_DEFINE)
ifeq ("$(IPHONE_MODE)","yes")
ifeq ($(PLATFORM_NAME),iphoneos)
GENERIC_CFLAGS+=-DTARGET_OS_IPHONE
else
GENERIC_CFLAGS+=-DTARGET_IPHONE_SIMULATOR
endif
endif
ifneq ("$(USE_MINGW32)","yes")
GENERIC_CFLAGS+=$(shell pkg-config --cflags gtk+-2.0)
GENERIC_LIBS+=$(shell pkg-config --libs gtk+-2.0)
endif
ifeq ("$(USE_LINUX)","yes")
SDK_FLAGS+="USE_LINUX=yes"
else
SDK_FLAGS+="USE_LINUX=no"
endif
SDK_FLAGS+="USE_ELINUX=no"
ifeq ("$(IPHONE_MODE)","yes")
SDK_FLAGS+="USE_IPHONE=yes"
SDK_FLAGS+="FFMPEG_SUPPORT=yes"
SDK_FLAGS+="ITTIAM_SUPPORT=no"
SDK_FLAGS+="USE_VIDEO_TCP=yes"
SDK_FLAGS+="USE_VIDEO_HD=no"
else
SDK_FLAGS+="USE_IPHONE=no"
endif
ifeq ("$(USE_NDS)","yes")
SDK_FLAGS+="USE_NDS=yes"
SDK_FLAGS+="NDS_CPU=ARM7"
else
SDK_FLAGS+="USE_NDS=no"
endif
ifeq ("$(USE_ANDROID)","yes")
SDK_FLAGS+="USE_ANDROID=yes"
SDK_FLAGS+="TOOLCHAIN_VERSION=arm-linux-androideabi-4.6"
SDK_FLAGS+="NDK_PLATFORM_VERSION=android-8"
SDK_FLAGS+="FFMPEG_SUPPORT=yes"
SDK_FLAGS+="ITTIAM_SUPPORT=no"
SDK_FLAGS+="USE_VIDEO_TCP=yes"
SDK_FLAGS+="USE_VIDEO_HD=no"
else
SDK_FLAGS+="USE_ANDROID=no"
endif
ifeq ("$(USE_LINUX)","yes")
ifeq ("$(PROJECT)","ardrone")
SDK_FLAGS+="FFMPEG_SUPPORT=yes"
SDK_FLAGS+="ITTIAM_SUPPORT=no"
SDK_FLAGS+="USE_VIDEO_TCP=no"
SDK_FLAGS+="USE_VIDEO_HD=no"
else
SDK_FLAGS+="FFMPEG_SUPPORT=yes"
SDK_FLAGS+="ITTIAM_SUPPORT=no"
SDK_FLAGS+="USE_VIDEO_TCP=yes"
SDK_FLAGS+="USE_VIDEO_HD=no"
endif
endif
ifeq ($(filter USE_BLUEZ=%,$(TMP_SDK_FLAGS)),)
SDK_FLAGS+="USE_BLUEZ=no"
endif
SDK_FLAGS+="USE_VLIB=yes"
SDK_FLAGS+="USE_BONJOUR=no"
SDK_FLAGS+="USE_WIFI=yes"
SDK_FLAGS+="USE_BROADCOM=no"
SDK_FLAGS+="USE_IWLIB=no"
SDK_FLAGS+="FF_ARCH=Intel"
SDK_FLAGS+="USE_PARROTOS_CORE=no"
SDK_FLAGS+="USE_PARROTOS_DRIVERS=no"
SDK_FLAGS+="USE_PARROTOS_DEVS=no"
SDK_FLAGS+="USE_PARROTOS_CODEC=no"
SDK_FLAGS+="USE_ARDRONELIB=yes"
SDK_FLAGS+="USE_ARDRONE_VISION=yes"
SDK_FLAGS+="USE_ARDRONE_POLARIS=no"
SDK_FLAGS+="USE_ARDRONE_VICON=no"
SDK_FLAGS+="USE_ARDRONE_TEST_BENCHS=no"
SDK_FLAGS+="USE_ARDRONE_CALIBRATION=no"
endif
export SDK_FLAGS
export GENERIC_CFLAGS
export VPSDK_PARALLEL_BUILD
#########################################################
# Common definitions (CUSTOM)
#########################################################
ifndef IPHONE_MODE
IPHONE_MODE = no
endif
ifndef MINGW32_MODE
MINGW32_MODE = no
endif
ifndef USE_NDS
USE_NDS = no
endif
ifndef USE_ANDROID
USE_ANDROID = no
endif
ifndef USE_LINUX
USE_LINUX = no
endif
ifndef PROJECT
# set default to ardrone2 for video TCP com.
PROJECT = ardrone2
endif
MAJOR_VERSION = 0
MINOR_VERSION = 0
MODIF_VERSION = 0
#########################################################
# ARDroneTool options definitions
#########################################################
USE_ARDRONE_TOOL=yes
USE_CHECK_WIFI_CONFIG=no
################## Wifi Options ##################
# Name of the network you want to join or create
WIFI_NETWORK_NAME = "ardronenetwork"
WIFI_BROADCAST = "192.168.1.255"
################## Video Options ##################
# Tells if we want to record video on pc side
RECORD_ENCODED_VIDEO = yes
RECORD_RAW_VIDEO = no
RECORD_FFMPEG_VIDEO = no
# Tells if we want to add vision data to video stream (in raw mode)
# Vision data are saved into file only if we define RECORD_RAW_VIDEO too
RECORD_VISION_DATA = no
# If the yuv mode is choosen then video is displayed & recorded in color
# Otherwise only luminances are displayed & recorded
VIDEO_YUV = yes
#########################################################
# Embedded definitions (CUSTOM)
#########################################################
WIFI_ARDRONE_IP = "192.168.1.1"
#########################################################
# Linux definitions (CUSTOM)
#########################################################
WIFI_MOBILE_IP = "192.168.1.2"
//
// academy_common.h
// ARDroneEngine
//
// Created by Frédéric D'Haeyer on 2/28/12.
// Copyright (c) 2012 Parrot SA. All rights reserved.
//
#ifndef _ACADEMY_COMMON_H_
#define _ACADEMY_COMMON_H_
#include <VP_Os/vp_os_types.h>
#define ACADEMY_USERNAME_SIZE 64
#define ACADEMY_PASSWORD_SIZE 64
typedef enum _ACADEMY_RESULT_
{
ACADEMY_RESULT_NONE = 0,
ACADEMY_RESULT_OK,
ACADEMY_RESULT_FAILED,
} ACADEMY_RESULT;
typedef enum _ACADEMY_STATE_
{
ACADEMY_STATE_NONE = 0,
ACADEMY_STATE_CONNECTION,
ACADEMY_STATE_PREPARE_PROCESS,
ACADEMY_STATE_PROCESS,
ACADEMY_STATE_FINISH_PROCESS,
ACADEMY_STATE_DISCONNECTION,
ACADEMY_STATE_MAX
} ACADEMY_STATE;
typedef struct _academy_state_t_
{
ACADEMY_STATE state;
ACADEMY_RESULT result;
} academy_state_t;
typedef struct _academy_user_t_
{
char username[ACADEMY_USERNAME_SIZE];
char password[ACADEMY_PASSWORD_SIZE];
} academy_user_t;
typedef void (*academy_callback)(academy_state_t state);
typedef void (*academy_download_new_media)(const char *mediaPath, bool_t addToQueue);
#endif // _ACADEMY_COMMON_H_
This diff is collapsed.
/**
* \file ardrone_common_config.h
* \brief Ardrone Specific data for configuration
* \author Sylvain Gaeremynck <sylvain.gaeremynck@parrot.com>
* \version 1.0
*/
#ifndef _ARDRONE_COMMON_CONFIG_H_
#define _ARDRONE_COMMON_CONFIG_H_
#define CAMIF_NUM_BUFFERS 2
#define COM_INPUT_LANDING_TIME (2) /* Time drone is waiting for input before landing */
/**
* \enum print_mask_t
* \brief mask to choose where to syslog
*/
typedef enum {
UART_PRINT = 1,
WIFI_PRINT = 2,
FLASH_PRINT = 4
} print_mask_t;
/**
* \enum ADC_COMMANDS
* \brief ADC commands.
*/
typedef enum
{
ADC_CMD_STARTACQ = 1, /**< command to start acquisition with ADC **/
ADC_CMD_STOPACQ = 2, /**< command to stop acquisition with ADC **/
ADC_CMD_RESYNC = 3, /**< command to resync acquisition with ADC **/
ADC_CMD_TEST = 4, /**< command to ADC send a test frame (123456) **/
ADC_CMD_VERSION = 5, /**< command to ADC send his number : version (MSB) subversion (LSB) **/
ADC_CMD_SELECT_ULTRASOUND_22Hz = 7, /**set the ultrasound at 22,22Hz **/
ADC_CMD_SELECT_ULTRASOUND_25Hz = 8, /**set the ultrasound at 25Hz **/
ADC_CMD_SEND_CALIBRE = 13, /**command to ADC to send the calibration **/
ADC_CMD_RECEVED_CALIBRE = 14, /**command to ADC to receved a new calibration **/
ADC_CMD_GET_HARD_VERSION = 15, /**get the hard version of the navboard **/
ADC_CMD_ACTIVE_SEPARATION = 16, /**enabled the separation of sources ultrasound **/
ADC_CMD_STOP_SEPARATION = 17, /**disables the ultrasound source separation **/
ADC_CMD_SEND_PROD = 18, /**command to ADC to receved the prod data **/
ADC_CMD_RECEVED_PROD = 19, /**command to ADC to send the prod data **/
ADC_CMD_ACTIVE_ETALONAGE = 20, /**command to ADC to send PWM ultrasond in continue **/
ADC_CMD_ACTIVE_ULTRASON = 21, /**command to ADC to stop send PWM ultrasond in continue **/
ADC_CMD_ACTIVE_TEST_ULTRASON = 22, /**teste de la perturbation de l'ultrason par le wifi **/
ADC_CMD_GET_CALIBRATION_PRESSION = 23, /**command to ADC to send the pressure sensor calibration **/
ADC_CMD_GET_CALIBRATION_MAGNETO = 24, /**After this command, pic sends sensitivity magnetometer**/
ADC_CMD_AK8975_SELF_TEST = 25, /**used for test magnetometer**/
ADC_CMD_RESET_OCSTUN = 26, /**set ocstun to 0**/
ADC_CMD_SET_OCSTUN = 27, /**set ocstun to RC value sent**/
ADC_CMD_RESYNC_START = 28, /**resync start**/
ADC_CMD_RESYNC_STOP = 29, /**resync stop**/
} ADC_COMMANDS;
#endif // _ARDRONE_COMMON_CONFIG_H_
/**
* \file at_msgs.h
* \brief ATCodec messages declaration
* \author Aurelien Morelle <aurelien.morelle@parrot.com>
* \date 2007/04/03
* \version 1.0
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_RC_REF_EXE, "AT*REF=%d,%d\r", 0, at_rc_ref_exe, 3 )
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_PMODE_EXE, "AT*PMODE=%d,%d\r", 0, at_pmode_exe, 3 )
// old school
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_MISC_EXE, "AT*MISC=%d,%d,%d,%d,%d\r", 0, at_misc_exe, 3 )
// gains
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_GAIN_EXE, "AT*GAIN=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r", 0, at_gain_exe, 3 )
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_ANIM_EXE, "AT*ANIM=%d,%d,%d\r", 0, at_anim_exe, 3 )
// vision params
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_VISP_EXE, "AT*VISP=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r", 0, at_visp_exe, 3 )
// vision params
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_VISO_EXE, "AT*VISO=%d,%d\r", 0, at_viso_exe, 3 )
// capture params
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_RAWC_EXE, "AT*CAP=%d,%d,%d\r", 0, at_cap, 3 )
// zapper
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_ZAP_EXE, "AT*ZAP=%d,%d\r", 0, at_zap, 3 )
// Change camera for arwiz detection
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_CAD_EXE, "AT*CAD=%d,%d,%d\r", 0, at_cad, 3 )
// flat trim
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_FTRIM_EXE, "AT*FTRIM=%d\r", 0, at_flat_trim_exe, 3 )
// manual trims
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_MTRIM_EXE, "AT*MTRIM=%d,%d,%d,%d\r", 0, at_manual_trims_exe, 3 )
// send attitude
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_POLARIS_EXE, "AT*POL=%d,%d,%d,%d,%d,%d\r", 0, at_pol_exe, 3 )
// sends iphone command for all axes
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_PCMD_EXE, "AT*PCMD=%d,%d,%d,%d,%d,%d\r", 0, at_pcmd_exe, 3 )
// sends iphone command for all axes + device client agnetometer
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_PCMD_MAG_EXE, "AT*PCMD_MAG=%d,%d,%d,%d,%d,%d,%d,%d\r", 0, at_pcmd_mag_exe, 3 )
// sends Radiocommand values for all 4 axis.
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_CONFIG_EXE, "AT*CONFIG=%d,\"%s\",\"%s\"\r", 0, at_toy_configuration_exe, 3)
// control command
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_CONFIG_IDS, "AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", 0, at_toy_configuration_ids, 4)
// control command
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_CTRL_EXE, "AT*CTRL=%d,%d,%d\r", 0, at_control_exe, 3)
// led animation command
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_LED_EXE, "AT*LED=%d,%d,%d,%d\r", 0, at_led_animation_exe, 3)
// reset com watchdog
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_RESET_COM_WATCHDOG,"AT*COMWDG=%d\r", 0, at_reset_com_watchdog, 3)
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_PWM_EXE, "AT*PWM=%d,%d,%d,%d,%d\r", 0, at_pwm, 3)
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_AUTONOMOUS_FLIGHT_EXE, "AT*AFLIGHT=%d,%d\r", 0, at_autonomous_flight_exe, 3 )
// run instrument calibration
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_CALIB, "AT*CALIB=%d,%d\r", 0, at_calibration, 3 )
// Vicon information
ATCODEC_DEFINE_AT_CMD(AT_MSG_ATCMD_VICON_EXE, "AT*VICON=%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r", 0, at_vicon_exe, 3 )
/**
* \file at_msgs_ids.h
* \brief ids for ATCodec
* \author Aurelien Morelle <aurelien.morelle@parrot.com>
* \version 1.0
*/
#ifndef _AT_MSGS_IDS_H_
#define _AT_MSGS_IDS_H_
#include <ATcodec/ATcodec_api.h>
typedef struct _AT_CODEC_MSG_IDS_
{
# define ATCODEC_DEFINE_AT_CMD(ID,Str,From,Cb,Prio) AT_CODEC_MSG_ID ID;
# define ATCODEC_DEFINE_AT_RESU(ID,Str,From,Cb) AT_CODEC_MSG_ID ID;
AT_CODEC_MSG_ID AT_MSG_ATCMD_DEFAULT;
# include <at_msgs.h>
} AT_CODEC_MSG_IDS;
extern AT_CODEC_MSG_IDS ids;
#endif // _AT_MSGS_IDS_H_
This diff is collapsed.
This diff is collapsed.
/**
* \file control_states.h
* \brief Control states declaration for control loop & ihm display
* \author Sylvain Gaeremynck <sylvain.gaeremynck@parrot.com>
* \version 1.0
*/
#ifndef _CONTROL_STATES_H_
#define _CONTROL_STATES_H_
#ifdef CTRL_STATES_STRING
typedef char ctrl_string_t[32];
#endif
// Macros to customize preprocessing
// If this CTRL_STATES_STRING is not defined, this file declare several enumeration
// If user defines CTRL_STATES_STRING, this file will define several array of strings.
// Each string being equivalent to an enumeration entry
#ifdef CTRL_STATES_STRING
#define CVAR(a) #a /* Using # causes the first argument after the # to be returned as a string in quotes */
#define CVARZ(a) #a
#else
#define CVARZ(a) a = 0
#define CVAR(a) a
#endif
/**
* \enum CONTROL_STATE
* \brief control loop thread states.
* \brief this defines major states
*/
#ifndef DO_NOT_INCLUDE_MAJOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t ctrl_states[] = {
#else
typedef enum {
#endif
CVARZ( CTRL_DEFAULT ),
CVAR( CTRL_INIT ),
CVAR( CTRL_LANDED ),
CVAR( CTRL_FLYING ),
CVAR( CTRL_HOVERING ),
CVAR( CTRL_TEST ),
CVAR( CTRL_TRANS_TAKEOFF ),
CVAR( CTRL_TRANS_GOTOFIX ),
CVAR( CTRL_TRANS_LANDING ),
CVAR( CTRL_TRANS_LOOPING ),
//CVAR( CTRL_TRANS_NO_VISION ),
#ifndef CTRL_STATES_STRING
CTRL_NUM_STATES
} CTRL_STATES;
#else
};
#endif
#endif
/**
* \enum FLYING_STATES
* \brief flying states.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t flying_states[] = {
#else
typedef enum {
#endif
CVARZ( FLYING_OK ),
CVAR( FLYING_LOST_ALT ),
CVAR( FLYING_LOST_ALT_GO_DOWN ),
CVAR( FLYING_ALT_OUT_ZONE ),
CVAR( FLYING_COMBINED_YAW ),
CVAR( FLYING_BRAKE ),
CVAR( FLYING_NO_VISION ),
#ifndef CTRL_STATES_STRING
} FLYING_STATES;
#else
};
#endif
#endif
/**
* \enum HOVERING_STATES
* \brief flying states.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t hovering_states[] = {
#else
typedef enum {
#endif
CVARZ( HOVERING_OK ),
CVAR( HOVERING_YAW ),
CVAR( HOVERING_YAW_LOST_ALT),
CVAR( HOVERING_YAW_LOST_ALT_GO_DOWN),
CVAR( HOVERING_ALT_OUT_ZONE),
CVAR( HOVERING_YAW_ALT_OUT_ZONE),
CVAR( HOVERING_LOST_ALT ),
CVAR( HOVERING_LOST_ALT_GO_DOWN ),
CVAR( HOVERING_LOST_COM ),
CVAR( LOST_COM_LOST_ALT ),
CVAR( LOST_COM_LOST_ALT_TOO_LONG ),
CVAR( LOST_COM_ALT_OK ),
CVAR( HOVERING_MAGNETO_CALIB ),
CVAR( HOVERING_DEMO )
#ifndef CTRL_STATES_STRING
} HOVERING_STATES;
#else
};
#endif
#endif
/**
* \enum TAKEOFF_TRANS_STATES
* \brief take off states.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t takeoff_trans_states[] = {
#else
typedef enum {
#endif
CVARZ( TAKEOFF_GROUND ),
CVAR( TAKEOFF_AUTO ),
#ifndef CTRL_STATES_STRING
} TAKEOFF_TRANS_STATES;
#else
};
#endif
#endif
/**
* \enum GOTOFIX_TRANS_STATES
* \brief gotofix substates.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t gotofix_trans_states[] = {
#else
typedef enum {
#endif
CVARZ( GOTOFIX_OK ),
CVAR( GOTOFIX_LOST_ALT ),
CVAR( GOTOFIX_YAW ),
#ifndef CTRL_STATES_STRING
} GOTOFIX_TRANS_STATES;
#else
};
#endif
#endif
/**
* \enum LANDING_TRANS_STATES
* \brief landing states.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t landing_trans_states[] = {
#else
typedef enum {
#endif
CVARZ( LANDING_CLOSED_LOOP ),
CVAR( LANDING_OPEN_LOOP ),
CVAR( LANDING_OPEN_LOOP_FAST )
#ifndef CTRL_STATES_STRING
} LANDING_TRANS_STATES;
#else
};
#endif
#endif
/**
* \enum TAKEOFF_TRANS_STATES
* \brief take off states.
* \brief this is one of the minor state
*/
#ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
#ifdef CTRL_STATES_STRING
static ctrl_string_t looping_trans_states[] = {
#else
typedef enum {
#endif
CVARZ( LOOPING_IMPULSION),
CVAR( LOOPING_OPEN_LOOP_CTRL ),
CVAR( LOOPING_PLANIF_CTRL )
#ifndef CTRL_STATES_STRING
} LOOPING_TRANS_STATES;
#else
};
#endif
#endif
#ifdef CTRL_STATES_STRING
#ifndef DO_NOT_INCLUDE_CTRL_STATES_LINK
/**
* control link tates
* \brief This array is used to link minor states & major state's strings
*/
static ctrl_string_t* control_states_link[] = {
NULL,
NULL,
NULL,
flying_states,
hovering_states,
NULL,
takeoff_trans_states,
gotofix_trans_states,
landing_trans_states,
looping_trans_states
};
#endif
#endif
#endif // _CONTROL_STATES_H_
/******************************************************************************
* COPYRIGHT PARROT 2010
******************************************************************************
* PARROT MODULES
*---------------------------------------------------------------------------*/
/**
* @file leds_animation.h
* @date 25th February 2010
* @brief Data types and functions to communicate with the drone.
* @author Pierre Eline
*
******************************************************************************/
// LED_ANIMATION(#name, {#nb_cycle,#nb_state,{{#led_pattern1,#delay1},{#led_pattern2,#delay2},{...,...}}})
// #name = name, example : BLINK
// #nb_cycle = number of times the animation is played (0 means infinite), example : 3
// #nb_state = number of led patterns in the animation, example : 2
// #led_pattern = led bitfield (G1 | R1 | G2 | R2 | G3 | R3 | G4 | R4), example : 0xAA all green led turned on
// #delay = delay in ms for the associated led pattern, example : 500
LED_ANIMATION(BLINK_GREEN_RED, { 0,2, { {0x55,500},{0xAA,500} } } )
LED_ANIMATION(BLINK_GREEN, { 0,2, { {0x00,500},{0xAA,500} } } )
LED_ANIMATION(BLINK_RED, { 0,2, { {0x55,500},{0x00,500} } } )
LED_ANIMATION(BLINK_ORANGE, { 0,2, { {0xFF,500},{0x00,500} } } )
LED_ANIMATION(SNAKE_GREEN_RED, { 0,8, { {0x90,200},{0x48,200},{0x24,200},{0x12,200},{0x9,200},{0x84,200},{0x42,200},{0x21,200}}})
LED_ANIMATION(FIRE, { 0,2, { {0x35,50},{0xC5,50} } } )
LED_ANIMATION(STANDARD, { 1,1, { {0xA5,100} } } )
LED_ANIMATION(RED, { 1,1, { {0x55,100} } } )
LED_ANIMATION(GREEN, { 1,1, { {0xAA,100} } } )
LED_ANIMATION(RED_SNAKE, { 0,4, { {0x40,500},{0x10,500},{0x04,500},{0x01,500}}})
LED_ANIMATION(BLANK, { 1,1, { {0x00,100} } } )
LED_ANIMATION(RIGHT_MISSILE, { 1,5, { {0x00,500},{0x04,300},{0x1C,100},{0x30,300},{0x00,500}}})
LED_ANIMATION(LEFT_MISSILE, { 1,5, { {0x00,500},{0x01,300},{0x43,100},{0xC0,300},{0x00,500}}})
LED_ANIMATION(DOUBLE_MISSILE, { 1,5, { {0x00,500},{0x05,300},{0x5F,100},{0xF0,300},{0x00,500}}})
LED_ANIMATION(FRONT_LEFT_GREEN_OTHERS_RED, { 1,1, { {0x95,100} } } )
LED_ANIMATION(FRONT_RIGHT_GREEN_OTHERS_RED, { 1,1, { {0x65,100} } } )
LED_ANIMATION(REAR_RIGHT_GREEN_OTHERS_RED, { 1,1, { {0x59,100} } } )
LED_ANIMATION(REAR_LEFT_GREEN_OTHERS_RED, { 1,1, { {0x56,100} } } )
LED_ANIMATION(LEFT_GREEN_RIGHT_RED, { 1,1, { {0x96,100} } } )
LED_ANIMATION(LEFT_RED_RIGHT_GREEN, { 1,1, { {0x69,100} } } )
LED_ANIMATION(BLINK_STANDARD, { 0,2, { {0x00,500},{0xA5,500} } } )
This diff is collapsed.
#ifndef NAVDATA_OPTION_DEMO
#define NAVDATA_OPTION_DEMO(x,y,z)
#endif
#ifndef NAVDATA_OPTION
#define NAVDATA_OPTION(x,y,z)
#endif
#ifndef NAVDATA_OPTION_CKS
#define NAVDATA_OPTION_CKS(x,y,z)
#endif
NAVDATA_OPTION_DEMO ( navdata_demo_t , navdata_demo , NAVDATA_DEMO_TAG)
NAVDATA_OPTION( navdata_time_t, navdata_time , NAVDATA_TIME_TAG )
NAVDATA_OPTION( navdata_raw_measures_t, navdata_raw_measures , NAVDATA_RAW_MEASURES_TAG )
NAVDATA_OPTION( navdata_phys_measures_t, navdata_phys_measures , NAVDATA_PHYS_MEASURES_TAG )
NAVDATA_OPTION( navdata_gyros_offsets_t, navdata_gyros_offsets , NAVDATA_GYROS_OFFSETS_TAG )
NAVDATA_OPTION( navdata_euler_angles_t, navdata_euler_angles , NAVDATA_EULER_ANGLES_TAG )
NAVDATA_OPTION( navdata_references_t, navdata_references , NAVDATA_REFERENCES_TAG )
NAVDATA_OPTION( navdata_trims_t, navdata_trims , NAVDATA_TRIMS_TAG )
NAVDATA_OPTION( navdata_rc_references_t, navdata_rc_references , NAVDATA_RC_REFERENCES_TAG )
NAVDATA_OPTION( navdata_pwm_t, navdata_pwm , NAVDATA_PWM_TAG )
NAVDATA_OPTION( navdata_altitude_t, navdata_altitude , NAVDATA_ALTITUDE_TAG )
NAVDATA_OPTION( navdata_vision_raw_t, navdata_vision_raw , NAVDATA_VISION_RAW_TAG )
NAVDATA_OPTION( navdata_vision_of_t, navdata_vision_of , NAVDATA_VISION_OF_TAG )
NAVDATA_OPTION( navdata_vision_t, navdata_vision , NAVDATA_VISION_TAG )
NAVDATA_OPTION( navdata_vision_perf_t , navdata_vision_perf , NAVDATA_VISION_PERF_TAG )
NAVDATA_OPTION( navdata_trackers_send_t, navdata_trackers_send , NAVDATA_TRACKERS_SEND_TAG )
NAVDATA_OPTION( navdata_vision_detect_t, navdata_vision_detect , NAVDATA_VISION_DETECT_TAG )
NAVDATA_OPTION( navdata_watchdog_t , navdata_watchdog , NAVDATA_WATCHDOG_TAG )
NAVDATA_OPTION( navdata_adc_data_frame_t, navdata_adc_data_frame , NAVDATA_ADC_DATA_FRAME_TAG )
NAVDATA_OPTION( navdata_video_stream_t, navdata_video_stream , NAVDATA_VIDEO_STREAM_TAG )
NAVDATA_OPTION( navdata_games_t, navdata_games , NAVDATA_GAMES_TAG )
NAVDATA_OPTION( navdata_pressure_raw_t, navdata_pressure_raw , NAVDATA_PRESSURE_RAW_TAG )
NAVDATA_OPTION( navdata_magneto_t, navdata_magneto , NAVDATA_MAGNETO_TAG )
NAVDATA_OPTION( navdata_wind_speed_t, navdata_wind_speed , NAVDATA_WIND_TAG )
NAVDATA_OPTION( navdata_kalman_pressure_t,navdata_kalman_pressure , NAVDATA_KALMAN_PRESSURE_TAG )
NAVDATA_OPTION( navdata_hdvideo_stream_t ,navdata_hdvideo_stream , NAVDATA_HDVIDEO_STREAM_TAG )
NAVDATA_OPTION( navdata_wifi_t ,navdata_wifi , NAVDATA_WIFI_TAG )
// TODO: maybe navdata_zimmu_3000 coult be integrated into an existing navdata like navdata_adc_data_frame_t or ...
NAVDATA_OPTION( navdata_zimmu_3000_t, navdata_zimmu_3000 , NAVDATA_ZIMMU_3000_TAG )
NAVDATA_OPTION_CKS( navdata_cks_t, navdata_cks , NAVDATA_CKS_TAG )
#undef NAVDATA_OPTION_DEMO
#undef NAVDATA_OPTION
#undef NAVDATA_OPTION_CKS
#ifndef _PARROT_VIDEO_ENCAPSULATION_H_
#define _PARROT_VIDEO_ENCAPSULATION_H_
#include <VP_Os/vp_os_types.h>
typedef enum {
CODEC_UNKNNOWN=0,
CODEC_VLIB,
CODEC_P264,
CODEC_MPEG4_VISUAL,
CODEC_MPEG4_AVC
}parrot_video_encapsulation_codecs_t;
typedef enum {
FRAME_TYPE_UNKNNOWN=0,
FRAME_TYPE_IDR_FRAME, /* headers followed by I-frame */
FRAME_TYPE_I_FRAME,
FRAME_TYPE_P_FRAME,
FRAME_TYPE_HEADERS
}parrot_video_encapsulation_frametypes_t;
typedef enum {
PAVE_CTRL_FRAME_DATA =0, /* The PaVE is followed by video data */
PAVE_CTRL_FRAME_ADVERTISEMENT =(1<<0), /* The PaVE is not followed by any data. Used to announce a frame which will be sent on the other socket later. */
PAVE_CTRL_LAST_FRAME_IN_STREAM =(1<<1), /* Announces the position of the last frame in the current stream */
}parrot_video_encapsulation_control_t;
/* Please keep this structure size a multiple of 8 or 16 */
/*
* Please keep 16-bit words aligned on 16-bit boundaries
* and keep 32-bit words aligned on 32-bit boundaries
*/
/*
*/
#define PAVE_CURRENT_VERSION (2)
typedef struct {
/*00*/ uint8_t signature[4];
/*04*/ uint8_t version;
/*05*/ uint8_t video_codec;
/*06*/ uint16_t header_size;
/*08*/ uint32_t payload_size; /* Amount of data following this PaVE */
/*12*/ uint16_t encoded_stream_width; /* ex: 640 */
/*14*/ uint16_t encoded_stream_height; /* ex: 368 */
/*16*/ uint16_t display_width; /* ex: 640 */
/*18*/ uint16_t display_height; /* ex: 360 */
/*20*/ uint32_t frame_number; /* frame position inside the current stream */
/*24*/ uint32_t timestamp; /* in milliseconds */
/*28*/ uint8_t total_chuncks; /* number of UDP packets containing the current decodable payload */
/*29*/ uint8_t chunck_index ; /* position of the packet - first chunk is #0 */
/*30*/ uint8_t frame_type; /* I-frame, P-frame */
/*31*/ uint8_t control; /* Special commands like end-of-stream or advertised frames */
/*32*/ uint32_t stream_byte_position_lw; /* Byte position of the current payload in the encoded stream - lower 32-bit word */
/*36*/ uint32_t stream_byte_position_uw; /* Byte position of the current payload in the encoded stream - upper 32-bit word */
/*40*/ uint16_t stream_id; /* This ID indentifies packets that should be recorded together */
/*42*/ uint8_t total_slices; /* number of slices composing the current frame */
/*43*/ uint8_t slice_index ; /* position of the current slice in the frame */
/*44*/ uint8_t header1_size; /* H.264 only : size of SPS inside payload - no SPS present if value is zero */
/*45*/ uint8_t header2_size; /* H.264 only : size of PPS inside payload - no PPS present if value is zero */
/*46*/ uint8_t reserved2[2]; /* Padding to align on 48 bytes */
/*48*/ uint32_t advertised_size; /* Size of frames announced as advertised frames */
/*52*/ uint8_t reserved3[12]; /* Padding to align on 64 bytes */
} __attribute__ ((packed)) parrot_video_encapsulation_t;
/* PaVE signature represented as a 32-bit integer in little and big endian */
#define PAVE_INT32LE_SIGNATURE (0x45566150)
#define PAVE_INT32BE_SIGNATURE (0x50615645)
#define PAVE_CHECK(x) ( (*((uint32_t*)(x)))==PAVE_INT32LE_SIGNATURE )
typedef enum
{
PAVE_STREAM_ID_SUFFIX_MP4_360p = 0,
PAVE_STREAM_ID_SUFFIX_H264_360p = 1,
PAVE_STREAM_ID_SUFFIX_H264_720p = 2
}parrot_video_encapsulation_stream_id_suffixes_t;
C_RESULT init_parrot_video_encapsulation_header(parrot_video_encapsulation_t * header);
int pave_is_same_frame(parrot_video_encapsulation_t * header1 , parrot_video_encapsulation_t * header2 );
void dumpPave (parrot_video_encapsulation_t *PaVE);
#endif
#ifndef _VISION_COMMON_H_
#define _VISION_COMMON_H_
// NUMBER OF TRACKERS FOR EACH TRACKING
#define NB_CORNER_TRACKERS_WIDTH 5 /* number of trackers in width of current picture */
#define NB_CORNER_TRACKERS_HEIGHT 4 /* number of trackers in height of current picture */
#define DEFAULT_NB_TRACKERS_WIDTH (NB_CORNER_TRACKERS_WIDTH+1)// + NB_BLOCK_TRACKERS_WIDTH)
#define DEFAULT_NB_TRACKERS_HEIGHT (NB_CORNER_TRACKERS_HEIGHT+1)// + NB_BLOCK_TRACKERS_HEIGHT)
#define YBUF_OFFSET 0
// use by ihm/ihm_vision.c
#define DEFAULT_CS 1
#define DEFAULT_NB_PAIRS 1
#define DEFAULT_LOSS_PER 1
#define DEFAULT_SCALE 1
#define DEFAULT_TRANSLATION_MAX 1
#define DEFAULT_MAX_PAIR_DIST 1
#define DEFAULT_NOISE 1
typedef enum _CAMIF_CAMERA_ENUM_
{
CAMIF_CAMERA_LB=0,
CAMIF_CAMERA_CRESYN,
CAMIF_CAMERA_VS6524,
CAMIF_CAMERA_OV7710,
CAMIF_CAMERA_OV7720,
CAMIF_CAMERA_OVTRULY,
CAMIF_CAMERA_OVTRULY_UPSIDE_DOWN_ONE_BLOCKLINE_LESS,
CAMIF_CAMERA_FILE,
CAMIF_CAMERA_OV7670,
CAMIF_CAMERA_OV9740,
CAMIF_CAMERA_SOC1040,
CAMIF_CAMERA_UB
}
CAMIF_CAMERA;
#endif //_VISION_COMMON_H
NO_COLOR=\033[0m
OK_COLOR=\033[32;01m
ifdef ARDRONE_CUSTOM_CONFIG
ifdef ARDRONE_BUILD_CONFIG
include $(ARDRONE_CUSTOM_CONFIG)
include $(ARDRONE_BUILD_CONFIG)
else
include ../../Build/custom.makefile
include ../../Build/config.makefile
endif
else
include ../../Build/custom.makefile
include ../../Build/config.makefile
endif
LIB_ID=ardrone
ifeq ($(USE_ARDRONE_TOOL),no)
LIB_ID:=$(LIB_ID)_notool
endif
GENERIC_TARGET_LIBRARY:=lib$(TARGET)$(LIB_ID).a
GENERIC_CFLAGS+=-DAT_MESSAGES_HEADER="\"$(COMMON_DIR)/at_msgs.h\""
GENERIC_CFLAGS+=-DUSE_NEW_ATCODEC
ifeq ("$(USE_CHECK_WIFI_CONFIG)","yes")
GENERIC_CFLAGS+=-DCHECK_WIFI_CONFIG
endif
SDK_FLAGS+="USE_APP=no"
SDK_FLAGS+="USE_LIB=yes"
SDK_FLAGS+="LIB_ID=ardrone_lib"
MATHS_DIR=Maths
CONTROL_DIR=Control
ARDRONE_TOOL_DIR=ardrone_tool
UTILS_DIR=utils
INIPARSER_DIR=iniparser3.0b/src
LIBCALIBRATION_DIR=libCalibration
GENERIC_LIBRARY_SOURCE_FILES+= \
$(INIPARSER_DIR)/iniparser.c \
$(INIPARSER_DIR)/dictionary.c \
$(MATHS_DIR)/filter.c \
$(MATHS_DIR)/maths.c \
$(MATHS_DIR)/matrices.c \
$(MATHS_DIR)/matrix3d.c \
$(MATHS_DIR)/quaternions.c \
$(MATHS_DIR)/time.c \
$(MATHS_DIR)/vision_math.c \
$(ARDRONE_TOOL_DIR)/Navdata/navdata.c \
$(ARDRONE_TOOL_DIR)/config_keys.c \
$(ARDRONE_TOOL_DIR)/ardrone_version.c \
$(UTILS_DIR)/ardrone_time.c \
$(UTILS_DIR)/ardrone_date.c \
$(UTILS_DIR)/ardrone_crc_32.c \
$(UTILS_DIR)/ardrone_gen_ids.c \
$(UTILS_DIR)/ardrone_ftp.c \
$(ARDRONE_TOOL_DIR)/Video/video_encapsulation.c
# The following files are needed to record video on the drone's flash memory
GENERIC_LIBRARY_SOURCE_FILES+= \
$(UTILS_DIR)/ardrone_video_atoms.c \
$(UTILS_DIR)/ardrone_video_encapsuler.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_encoded_recorder.c
ifneq ($(ELINUX_TARGET),yes)
#Controller only files
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/Video/video_stage_tcp.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_merge_slices.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_latency_estimation.c \
$(UTILS_DIR)/ardrone_ftp.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_ffmpeg_recorder.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_ffmpeg_decoder.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_ittiam_decoder.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage_decoder.c \
$(ARDRONE_TOOL_DIR)/Video/video_recorder_pipeline.c \
$(ARDRONE_TOOL_DIR)/Video/video_stage.c
ifeq ($(USE_ANDROID),yes)
GENERIC_LIBRARY_SOURCE_FILES+= \
$(UTILS_DIR)/AR_Ftw.c
endif
endif
ifneq ($(CONTROL_DLL),yes)
ifeq ($(USE_ARDRONE_TOOL),yes)
ifeq ($(PC_USE_POLARIS),yes)
GENERIC_CFLAGS+=-DPC_USE_POLARIS
endif
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/AT/ardrone_at_mutex.c
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/Academy/academy.c \
$(ARDRONE_TOOL_DIR)/Academy/academy_download.c \
$(ARDRONE_TOOL_DIR)/Academy/academy_upload.c \
$(ARDRONE_TOOL_DIR)/Academy/academy_stage_recorder.c \
$(ARDRONE_TOOL_DIR)/Control/ardrone_control_configuration.c \
$(ARDRONE_TOOL_DIR)/Control/ardrone_control_ack.c \
$(ARDRONE_TOOL_DIR)/Navdata/ardrone_navdata_file.c \
$(ARDRONE_TOOL_DIR)/Navdata/ardrone_general_navdata.c \
$(ARDRONE_TOOL_DIR)/Navdata/ardrone_academy_navdata.c \
$(ARDRONE_TOOL_DIR)/UI/ardrone_input.c \
$(ARDRONE_TOOL_DIR)/ardrone_api.c \
$(ARDRONE_TOOL_DIR)/ardrone_tool_configuration.c \
$(ARDRONE_TOOL_DIR)/ardrone_tool.c \
$(ARDRONE_TOOL_DIR)/Com/config_wifi.c
ifneq ($(USE_MINGW32),yes)
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/Video/video_com_stage.c \
$(ARDRONE_TOOL_DIR)/Video/video_navdata_handler.c \
$(ARDRONE_TOOL_DIR)/Control/ardrone_control.c \
$(ARDRONE_TOOL_DIR)/Control/ardrone_navdata_control.c \
$(ARDRONE_TOOL_DIR)/Navdata/ardrone_navdata_client.c
ifeq ($(USE_IPHONE),no)
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/Com/config_serial.c
endif
ifeq ($(USE_ARDRONE_VICON),yes)
GENERIC_CFLAGS+=-DUSE_ARDRONE_VICON
endif
endif # USE_MINGW32
endif # USE_ARDRONE_TOOL
ifneq ($(USE_MINGW32),yes)
GENERIC_LIBRARY_SOURCE_FILES+= \
$(ARDRONE_TOOL_DIR)/Video/video_stage_recorder.c
endif
ifeq ($(USE_ELINUX),yes)
HARDWARE_ARDRONE:=$(SRC_PATH)/Soft/Toy/Sources/$(CARD_HARDWARE_DIR)
ifeq ($(USE_MINGW32),yes)
HARDWARE_ARDRONE_CALIBRATION:=c:/$(CARD_HARDWARE_DIR)
else
HARDWARE_ARDRONE_CALIBRATION:=$(HARDWARE_ARDRONE)
endif
GENERIC_CFLAGS+=-DHARDWARE_ARDRONE=\"$(HARDWARE_ARDRONE)\" \
-DHARDWARE_ARDRONE_CALIBRATION=\"$(HARDWARE_ARDRONE_CALIBRATION)\"
endif # USE_ELINUX
endif # neq CONTROL_DLL
BASE_RELATIVE_PATH_FROM_SDK=../../
GENERIC_INCLUDES+= \
-I$(BASE_RELATIVE_PATH_FROM_SDK)/Soft/Common \
-I$(BASE_RELATIVE_PATH_FROM_SDK) \
-I$(BASE_RELATIVE_PATH_FROM_SDK)/Soft/Lib
export GENERIC_INCLUDES
export GENERIC_LIBRARY_SOURCE_DIR=$(BASE_RELATIVE_PATH_FROM_SDK)/Soft/Lib
export GENERIC_BINARIES_SOURCE_DIR=$(BASE_RELATIVE_PATH_FROM_SDK)/Soft/Lib
export GENERIC_CFLAGS
export GENERIC_LIBS
export GENERIC_LIBRARY_SOURCE_FILES
export GENERIC_TARGET_LIBRARY
export GENERIC_BINARIES_COMMON_SOURCE_FILES=
export GENERIC_BINARIES_SOURCE_ENTRYPOINTS=
all $(MAKECMDGOALS):
@if [ '$(MAKECMDGOALS)' != 'clean' ]; then echo "$(OK_COLOR)Building ARDroneTool/Lib$(NO_COLOR)"; fi
@$(MAKE) -C ../../../VP_SDK/Build $(TMP_SDK_FLAGS) $(SDK_FLAGS) $(MAKECMDGOALS)
makefileverbose:
@echo "Dump compilation flags:"
@echo "GENERIC_CFLAGS : $(GENERIC_CFLAGS)"
@echo "GENERIC_LIBS : $(GENERIC_LIBS)"
@echo "GENERIC_LIB_PATHS : $(GENERIC_LIB_PATHS)"
@echo "GENERIC_INCLUDES : $(GENERIC_INCLUDES)"
@echo "GENERIC_BINARIES_SOURCE_DIR : $(GENERIC_BINARIES_SOURCE_DIR)"
@echo "GENERIC_BINARIES_COMMON_SOURCE_FILES : $(GENERIC_BINARIES_COMMON_SOURCE_FILES)"
@echo "GENERIC_TARGET_BINARIES_PREFIX : $(GENERIC_TARGET_BINARIES_PREFIX)"
@echo "GENERIC_TARGET_BINARIES_DIR : $(GENERIC_TARGET_BINARIES_DIR)"
@echo "GENERIC_BINARIES_SOURCE_ENTRYPOINTS : $(GENERIC_BINARIES_SOURCE_ENTRYPOINTS)"
@echo "TMP_SDK_FLAGS: $(TMP_SDK_FLAGS)"
@echo "SDK_FLAGS: $(SDK_FLAGS)"
@echo "Make cmd goals: $(MAKECMDGOALS)"
/**
* \file filter.c
* \brief 1st and 2nd order filter implementation
* \author Jean Baptiste Lanfrey <jean-baptiste.lanfrey@parrot.com>
* \version 1.0
*/
#define _XOPEN_SOURCE 600
#include <Maths/maths.h>
#include <Maths/filter.h>
#include <math.h>
void filter_init(uint32_t n, float32_t *old_input, float32_t initial_input, float32_t *old_output, float32_t initial_output)
{
uint32_t ii;
for (ii=0; ii<n ; ii++)
old_input[ii] = initial_input;
for (ii=0; ii<n; ii++)
old_output[ii] = initial_output;
}
float filter(uint32_t n, const float32_t *b, const float32_t *a, float32_t input, float32_t *old_input, float32_t *old_output)
{
uint32_t ii;
float32_t inno, past, output;
// innovation computation
inno = b[0] * input;
for (ii=1; ii<n+1; ii++)
inno += b[ii] * old_input[ii-1];
// past computation
past = 0.0;
for (ii=1; ii<n+1; ii++)
past -= a[ii] * old_output[ii-1];
// output = (inno + past) / a[0];
// We assume a[0] is always equal to 1
output = (inno + past);
// inputs and outputs shift
for (ii=n-1; ii>0; ii--)
old_input[ii] = old_input[ii-1];
old_input[0] = input;
for (ii=n-1; ii>0; ii--)
old_output[ii] = old_output[ii-1];
old_output[0] = output;
return output;
}
// Filtre du type Kd.p / (1+Td.p)
float32_t deriv(deriv_param_t *param, float32_t input)
{
static float32_t exp_1 = 0.3678794411714423412f; // expf(-1.0f);
float32_t exp;
float32_t td;
float32_t out;
if( f_is_zero( param->td ) )
{
// prevent from dividing by 0.
td = param->te;
exp = exp_1;
}
else
{
td = param->td;
// exp = expf(-param->te/td);
exp = exp_taylor(-param->te/td);
}
param->internal_state = exp * param->internal_state + td * (1 - exp) * param->old_input;
out = ( param->kd / td ) * ( input - param->internal_state / td );
param->old_input = input;
return out;
}
void delay_init(uint32_t m, float32_t *old_input, float32_t initial_input)
{
uint32_t ii;
for (ii=0; ii<m ; ii++)
old_input[ii] = initial_input;
}
float32_t delay(uint32_t m, float32_t input, float32_t *old_input)
{
uint32_t ii;
float32_t output;
output = old_input[m-1];
// inputs and shift
for (ii=m-1; ii>0; ii--)
old_input[ii] = old_input[ii-1];
old_input[0] = input;
return output;
}
float32_t rate_limiter(float32_t input, float32_t old_output, float32_t rate_max)
{
float32_t output;
float_or_int_t FOI_rate,FOI_rate_max;
FOI_rate.f = input - old_output;
FOI_rate_max.f = rate_max;
if( f_abs( FOI_rate ) > FOI_rate_max.f )
output = old_output + f_set_clamp( FOI_rate, FOI_rate_max );
else
output = input;
return output;
}
int32_t digitalsmooth(int32_t rawIn, int32_t *sensSmoothArray)
{
int32_t j, k, temp, top, bottom;
long total;
static int32_t i;
static int32_t sorted[filterSamples];
bool_t done;
i = (i + 1) % filterSamples;
sensSmoothArray[i] = rawIn;
for (j=0; j<filterSamples; j++)
{
sorted[j] = sensSmoothArray[j];
}
done = 0;
while(done != 1)
{
done = 1;
for (j = 0; j < (filterSamples - 1); j++)
{
if (sorted[j] > sorted[j + 1])
{
temp = sorted[j + 1];
sorted [j+1] = sorted[j] ;
sorted [j] = temp;
done = 0;
}
}
}
bottom = max(((filterSamples * 15) / 100), 1);
top = min((((filterSamples * 85) / 100) + 1 ), (filterSamples - 1));
k = 0;
total = 0;
for ( j = bottom; j< top; j++){
total += sorted[j];
k++;
}
return total / k;
}
//unwrapToPi
// takes pointer to the value of wrapped angle, pointer to the value of unwrapped angle, and the variation to add to both angles
void unwrapToPi(float32_t* former_wrapped_angle, float32_t* former_unwrapped_angle, float32_t variation)
{
if(fabsf(variation)<PI)
{
*former_unwrapped_angle += variation;
}
else
{
if(variation>=0)
{
*former_unwrapped_angle += variation - 2.0*PI;
}
else
{
*former_unwrapped_angle += variation + 2.0*PI;
}
}
wrapToPi(former_unwrapped_angle, former_wrapped_angle);
}
void wrapToPi(float32_t* input, float32_t* output)
{
*output = fmodf(*input + PI, 2*PI) - PI;
if((-PI)>(*input))
{
*output += 2*PI;
}
}
void filter64_init(uint32_t n, float64_t *old_input, float64_t initial_input, float64_t *old_output, float64_t initial_output)
{
uint32_t ii;
for (ii=0; ii<n ; ii++)
old_input[ii] = initial_input;
for (ii=0; ii<n; ii++)
old_output[ii] = initial_output;
}
float64_t filter64(uint32_t n, const float64_t *b, const float64_t *a, float64_t input, float64_t *old_input, float64_t *old_output)
{
uint32_t ii;
float64_t inno, past, output;
// innovation computation
inno = b[0] * input;
for (ii=1; ii<n+1; ii++)
inno += b[ii] * old_input[ii-1];
// past computation
past = 0.0;
for (ii=1; ii<n+1; ii++)
past -= a[ii] * old_output[ii-1];
// output = (inno + past) / a[0];
// We assume a[0] is always equal to 1
output = (inno + past);
// inputs and outputs shift
for (ii=n-1; ii>0; ii--)
old_input[ii] = old_input[ii-1];
old_input[0] = input;
for (ii=n-1; ii>0; ii--)
old_output[ii] = old_output[ii-1];
old_output[0] = output;
return output;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#ifndef _POINT3D_H_
#define _POINT3D_H_
typedef struct _point3d_t {
float32_t x;
float32_t y;
float32_t z;
float32_t w;
} point3d_t;
#endif // _POINT3D_H_
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment