Browse Source
- rename flight tasks to use camelCase - add core tasks to flight tasks cmake - add additional tasks in targets (TODO) - add templates - generate hpp and cpp which contain all specified taskssbg
7 changed files with 280 additions and 138 deletions
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* Copyright (c) 2018 PX4 Development Team. All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in |
||||
* the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* 3. Neither the name PX4 nor the names of its contributors may be |
||||
* used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
/** |
||||
* @@file FlightTasks_generated.cpp |
||||
* |
||||
* Generated file to switch between all required flight tasks |
||||
* |
||||
* @@author Christoph Tobler <christoph@@px4.io> |
||||
*/ |
||||
|
||||
#include "FlightTasks.hpp" |
||||
#include "FlightTasks_generated.hpp" |
||||
|
||||
int FlightTasks::_initTask(FlightTaskIndex task_index) |
||||
{ |
||||
|
||||
// disable the old task if there is any |
||||
if (_current_task.task) { |
||||
_current_task.task->~FlightTask(); |
||||
_current_task.task = nullptr; |
||||
_current_task.index = FlightTaskIndex::None; |
||||
} |
||||
|
||||
switch (task_index) { |
||||
case FlightTaskIndex::None: |
||||
// already disabled task |
||||
break; |
||||
|
||||
@# loop through all requested tasks |
||||
@[if tasks]@ |
||||
@[for task in tasks]@ |
||||
@{ |
||||
firstLowercase = lambda s: s[:1].lower() + s[1:] if s else '' |
||||
}@ |
||||
case FlightTaskIndex::@(task): |
||||
_current_task.task = new (&_task_union.@(firstLowercase(task))) FlightTask@(task)(); |
||||
break; |
||||
|
||||
@[end for]@ |
||||
@[end if]@ |
||||
default: |
||||
// invalid task |
||||
return 1; |
||||
} |
||||
|
||||
// task construction succeeded |
||||
_current_task.index = task_index; |
||||
return 0; |
||||
} |
||||
|
||||
FlightTaskIndex FlightTasks::switchVehicleCommand(const int command) |
||||
{ |
||||
switch (command) { |
||||
@# loop through all additional tasks |
||||
@[if tasks_add]@ |
||||
@[for task in tasks_add]@ |
||||
@{ |
||||
upperCase = lambda s: s[:].upper() if s else '' |
||||
}@ |
||||
case vehicle_command_s::VEHICLE_CMD_DO_@(upperCase(task)) : |
||||
return FlightTaskIndex::@(task); |
||||
break; |
||||
|
||||
@[end for]@ |
||||
@[end if]@ |
||||
// ignore all unkown commands |
||||
default : return FlightTaskIndex::None; |
||||
} |
||||
} |
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* Copyright (c) 2018 PX4 Development Team. All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in |
||||
* the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* 3. Neither the name PX4 nor the names of its contributors may be |
||||
* used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
/** |
||||
* @@file FlightTasks_generated.hpp |
||||
* |
||||
* Generated Header to list all required flight tasks |
||||
* |
||||
* @@author Christoph Tobler <christoph@@px4.io> |
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
// include all required headers |
||||
#include "FlightTasks.hpp" |
||||
@# loop through all requested tasks |
||||
@[if tasks]@ |
||||
@[for task in tasks]@ |
||||
#include "FlightTask@(task).hpp" |
||||
@[end for]@ |
||||
@[end if]@ |
||||
|
||||
enum class FlightTaskIndex : int { |
||||
None = -1, |
||||
@# loop through all requested tasks |
||||
@[if tasks]@ |
||||
@[for task in tasks]@ |
||||
@(task), |
||||
@[end for]@ |
||||
@[end if]@ |
||||
|
||||
Count // number of tasks |
||||
}; |
||||
|
||||
union TaskUnion { |
||||
TaskUnion() {} |
||||
~TaskUnion() {} |
||||
|
||||
@# loop through all requested tasks |
||||
@[if tasks]@ |
||||
@{ |
||||
firstLowercase = lambda s: s[:1].lower() + s[1:] if s else '' |
||||
}@ |
||||
@[for task in tasks]@ |
||||
FlightTask@(task) @(firstLowercase(task)); |
||||
@[end for]@ |
||||
@[end if]@ |
||||
}; |
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env python |
||||
|
||||
import em |
||||
import os |
||||
import argparse |
||||
|
||||
parser = argparse.ArgumentParser() |
||||
parser.add_argument("-t", "--tasks", dest='tasks_all', nargs='+', required=True, help="All tasks to be generated") |
||||
parser.add_argument("-s", "--tasks_additional", dest='tasks_add', nargs='+', help="Additional tasks to be generated (on top of the core)") |
||||
parser.add_argument("-i", "--input_directory", dest='directory_in', required=True, help="Output directory") |
||||
parser.add_argument("-o", "--output_directory", dest='directory_out', required=True, help="Input directory") |
||||
parser.add_argument("-f", "--files", dest='gen_files', nargs='+', required=True, help="Files to generate") |
||||
|
||||
# Parse arguments |
||||
args = parser.parse_args() |
||||
|
||||
for gen_file in args.gen_files: |
||||
ofile = args.directory_out + "/" + gen_file |
||||
output_file = open(ofile, 'w') |
||||
# need to specify the em_globals inside the loop -> em.Error: interpreter globals collision |
||||
em_globals = { |
||||
"tasks": args.tasks_all, |
||||
"tasks_add": args.tasks_add, |
||||
} |
||||
interpreter = em.Interpreter(output=output_file, globals=em_globals) |
||||
interpreter.file(open(args.directory_in + "/" + gen_file + ".template")) |
||||
interpreter.shutdown() |
Loading…
Reference in new issue