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 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* 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 @@ |
|||||||
|
/**************************************************************************** |
||||||
|
* |
||||||
|
* 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 @@ |
|||||||
|
#!/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