mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-28 02:33:58 -04:00
AP_Scripting: Create a thread and spin
This commit is contained in:
parent
3aed07a83a
commit
8049c64a5b
@ -13,12 +13,43 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if ENABLE_SCRIPTING
|
|
||||||
|
|
||||||
#include <AP_Scripting/AP_Scripting.h>
|
#include <AP_Scripting/AP_Scripting.h>
|
||||||
#include <AP_HAL/AP_HAL.h>
|
#include <AP_HAL/AP_HAL.h>
|
||||||
|
#include <GCS_MAVLink/GCS.h>
|
||||||
|
|
||||||
|
// ensure that we have a set of stack sizes, and enforce constraints around it
|
||||||
|
// except for the minimum size, these are allowed to be defined by the build system
|
||||||
|
#undef SCRIPTING_STACK_MIN_SIZE
|
||||||
|
#define SCRIPTING_STACK_MIN_SIZE 2048
|
||||||
|
|
||||||
|
#if !defined(SCRIPTING_STACK_SIZE)
|
||||||
|
#define SCRIPTING_STACK_SIZE 2048
|
||||||
|
#endif // !defined(SCRIPTING_STACK_SIZE)
|
||||||
|
|
||||||
|
#if !defined(SCRIPTING_STACK_MAX_SIZE)
|
||||||
|
#define SCRIPTING_STACK_MAX_SIZE 16384
|
||||||
|
#endif // !defined(SCRIPTING_STACK_MAX_SIZE)
|
||||||
|
|
||||||
|
static_assert(SCRIPTING_STACK_SIZE >= SCRIPTING_STACK_MIN_SIZE, "Scripting requires a larger minimum stack size");
|
||||||
|
static_assert(SCRIPTING_STACK_SIZE <= SCRIPTING_STACK_MAX_SIZE, "Scripting requires a smaller stack size");
|
||||||
|
|
||||||
|
extern const AP_HAL::HAL& hal;
|
||||||
|
|
||||||
|
const AP_Param::GroupInfo AP_Scripting::var_info[] = {
|
||||||
|
// @Param: ENABLE
|
||||||
|
// @DisplayName: Enable Scripting
|
||||||
|
// @Description: Controls if scripting is enabled
|
||||||
|
// @Values: 0:None,1:Lua Scripts
|
||||||
|
// @RebootRequired: True
|
||||||
|
// @User: Advanced
|
||||||
|
AP_GROUPINFO_FLAGS("ENABLE", 1, AP_Scripting, _enable, 1, AP_PARAM_FLAG_ENABLE),
|
||||||
|
|
||||||
|
AP_GROUPEND
|
||||||
|
};
|
||||||
|
|
||||||
AP_Scripting::AP_Scripting() {
|
AP_Scripting::AP_Scripting() {
|
||||||
|
AP_Param::setup_object_defaults(this, var_info);
|
||||||
|
|
||||||
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
|
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
|
||||||
if (_singleton != nullptr) {
|
if (_singleton != nullptr) {
|
||||||
AP_HAL::panic("Scripting must be a singleton");
|
AP_HAL::panic("Scripting must be a singleton");
|
||||||
@ -27,16 +58,32 @@ AP_Scripting::AP_Scripting() {
|
|||||||
_singleton = this;
|
_singleton = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AP_Scripting::init(void) {
|
||||||
|
if (!_enable) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hal.scheduler->thread_create(FUNCTOR_BIND_MEMBER(&AP_Scripting::thread, void),
|
||||||
|
"Scripting", SCRIPTING_STACK_SIZE, AP_HAL::Scheduler::PRIORITY_SCRIPTING, 0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_running = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AP_Scripting::thread(void) {
|
||||||
|
unsigned int loop = 0;
|
||||||
|
while (true) {
|
||||||
|
hal.scheduler->delay(1000);
|
||||||
|
gcs().send_text(MAV_SEVERITY_INFO, "Scripting Loop: %u", loop++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AP_Scripting *AP_Scripting::_singleton = nullptr;
|
AP_Scripting *AP_Scripting::_singleton = nullptr;
|
||||||
|
|
||||||
namespace AP {
|
namespace AP {
|
||||||
|
AP_Scripting *scripting() {
|
||||||
AP_Scripting *scripting() {
|
return AP_Scripting::get_singleton();
|
||||||
return AP_Scripting::get_singleton();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // ENABLE_SCRIPTING
|
|
||||||
|
@ -14,9 +14,10 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AP_Common/AP_Common.h>
|
#ifdef ENABLE_SCRIPTING
|
||||||
|
|
||||||
#if ENABLE_SCRIPTING
|
#include <AP_Common/AP_Common.h>
|
||||||
|
#include <AP_Param/AP_Param.h>
|
||||||
|
|
||||||
class AP_Scripting
|
class AP_Scripting
|
||||||
{
|
{
|
||||||
@ -27,16 +28,27 @@ public:
|
|||||||
AP_Scripting(const AP_Scripting &other) = delete;
|
AP_Scripting(const AP_Scripting &other) = delete;
|
||||||
AP_Scripting &operator=(const AP_Scripting&) = delete;
|
AP_Scripting &operator=(const AP_Scripting&) = delete;
|
||||||
|
|
||||||
static AP_Scripting * get_singleton() {
|
bool init(void);
|
||||||
return _singleton;
|
|
||||||
}
|
bool is_running(void) const { return _running; }
|
||||||
|
|
||||||
|
static AP_Scripting * get_singleton(void) { return _singleton; }
|
||||||
|
|
||||||
|
static const struct AP_Param::GroupInfo var_info[];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void thread(void); // main script execution thread
|
||||||
|
|
||||||
|
bool _running;
|
||||||
|
|
||||||
|
AP_Int8 _enable;
|
||||||
|
|
||||||
static AP_Scripting *_singleton;
|
static AP_Scripting *_singleton;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace AP {
|
namespace AP {
|
||||||
AP_Scripting * scripting();
|
AP_Scripting * scripting(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ENABLE_SCRIPTING
|
#endif // ENABLE_SCRIPTING
|
||||||
|
Loading…
Reference in New Issue
Block a user