/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#pragma once
#include
#include
#include
#ifndef HAL_EFI_ENABLED
#define HAL_EFI_ENABLED !HAL_MINIMIZE_FEATURES && BOARD_FLASH_SIZE > 1024
#endif
#if HAL_EFI_ENABLED
#include "AP_EFI_Backend.h"
#include "AP_EFI_State.h"
/*
* This library aims to read data from Electronic Fuel Injection
* or Engine Control units. It is focused around the generic
* internal combustion engine state message provided by the
* UAVCAN protocol due to its comprehensiveness, but is extensible
* to use other forms of data transfer besides UAVCAN.
*
*
*
* Authors: Sriram Sami and David Ingraham
* With direction from Andrew Tridgell, Robert Lefebvre, Francisco Ferreira and
* Pavel Kirienko.
* Thanks to Yonah, SpektreWorks Inc, and HFE International.
*/
class AP_EFI {
public:
friend class AP_EFI_Backend;
// For parameter initialization
AP_EFI();
// Initializes backend
void init(void);
// Requests backend to update the frontend. Should be called at 10Hz.
void update();
// Returns the RPM
uint32_t get_rpm() const { return state.engine_speed_rpm; }
// returns enabled state of EFI
bool enabled() const { return type != Type::NONE; }
bool is_healthy() const;
// return timestamp of last update
uint32_t get_last_update_ms(void) const {
return state.last_updated_ms;
}
// get a copy of state structure
void get_state(EFI_State &state);
// Parameter info
static const struct AP_Param::GroupInfo var_info[];
// Backend driver types
enum class Type : uint8_t {
NONE = 0,
MegaSquirt = 1,
NWPMU = 2,
Lutan = 3,
// LOWEHEISER = 4,
DroneCAN = 5,
};
static AP_EFI *get_singleton(void) {
return singleton;
}
// send EFI_STATUS
void send_mavlink_status(mavlink_channel_t chan);
protected:
// Back end Parameters
AP_Float coef1;
AP_Float coef2;
EFI_State state;
private:
// Front End Parameters
AP_Enum type;
// Tracking backends
AP_EFI_Backend *backend;
static AP_EFI *singleton;
// Semaphore for access to shared frontend data
HAL_Semaphore sem;
// write to log
void log_status();
};
namespace AP {
AP_EFI *EFI();
};
#endif // HAL_EFI_ENABLED