114 lines
3.9 KiB
C
114 lines
3.9 KiB
C
#ifndef MIGHTYWATT_CONTROLLER_H
|
|
#define MIGHTYWATT_CONTROLLER_H
|
|
|
|
#include "mightywatt_app.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define MW_CONTROLLER_PORT_PATH_MAX 255
|
|
#define MW_CONTROLLER_ERROR_MAX 255
|
|
|
|
typedef struct mw_controller mw_controller;
|
|
|
|
typedef enum {
|
|
MW_CONTROLLER_STOPPED = 0,
|
|
MW_CONTROLLER_CONNECTING = 1,
|
|
MW_CONTROLLER_CONNECTED = 2,
|
|
MW_CONTROLLER_RECONNECT_WAIT = 3,
|
|
} mw_controller_connection_state;
|
|
|
|
typedef enum {
|
|
MW_CTRL_CMD_NONE = 0,
|
|
MW_CTRL_CMD_SET_TARGET,
|
|
MW_CTRL_CMD_LOAD_ON,
|
|
MW_CTRL_CMD_LOAD_OFF,
|
|
MW_CTRL_CMD_RESTORE_TARGET,
|
|
MW_CTRL_CMD_SAFE,
|
|
MW_CTRL_CMD_SET_REMOTE,
|
|
MW_CTRL_CMD_SET_SERIES_RESISTANCE,
|
|
MW_CTRL_CMD_REFRESH_CAPABILITIES,
|
|
MW_CTRL_CMD_GET_SERIES_RESISTANCE,
|
|
} mw_controller_command_kind;
|
|
|
|
typedef struct {
|
|
const char *port_path;
|
|
int settle_ms;
|
|
int poll_interval_ms;
|
|
int reconnect_ms;
|
|
size_t queue_capacity;
|
|
bool safe_on_shutdown;
|
|
} mw_controller_config;
|
|
|
|
typedef struct {
|
|
bool running;
|
|
bool connected;
|
|
mw_controller_connection_state connection_state;
|
|
uint64_t snapshot_seq;
|
|
uint64_t connect_attempts;
|
|
uint64_t reconnect_count;
|
|
uint64_t poll_success_count;
|
|
uint64_t poll_error_count;
|
|
uint64_t command_success_count;
|
|
uint64_t command_error_count;
|
|
uint64_t last_queued_command_id;
|
|
uint64_t last_completed_command_id;
|
|
int last_completed_result;
|
|
mw_controller_command_kind last_completed_kind;
|
|
size_t pending_commands;
|
|
char port_path[MW_CONTROLLER_PORT_PATH_MAX + 1];
|
|
char last_error[MW_CONTROLLER_ERROR_MAX + 1];
|
|
char last_completed_error[MW_CONTROLLER_ERROR_MAX + 1];
|
|
bool app_state_valid;
|
|
mw_app_state app_state;
|
|
bool series_resistance_valid;
|
|
uint16_t series_resistance_milliohm;
|
|
} mw_controller_snapshot;
|
|
|
|
void mw_controller_config_init(mw_controller_config *config);
|
|
|
|
int mw_controller_start(mw_controller **out_controller, const mw_controller_config *config);
|
|
void mw_controller_stop(mw_controller *controller);
|
|
|
|
int mw_controller_get_snapshot(mw_controller *controller, mw_controller_snapshot *out_snapshot);
|
|
int mw_controller_wait_for_update(mw_controller *controller,
|
|
uint64_t last_seen_snapshot_seq,
|
|
int timeout_ms,
|
|
uint64_t *out_snapshot_seq);
|
|
|
|
int mw_controller_queue_set_target(mw_controller *controller,
|
|
mw_mode mode,
|
|
uint32_t milli_units,
|
|
uint64_t *out_command_id);
|
|
int mw_controller_queue_load_on(mw_controller *controller,
|
|
mw_mode mode,
|
|
uint32_t milli_units,
|
|
uint64_t *out_command_id);
|
|
int mw_controller_queue_load_off(mw_controller *controller, uint64_t *out_command_id);
|
|
int mw_controller_queue_restore_target(mw_controller *controller, uint64_t *out_command_id);
|
|
int mw_controller_queue_safe(mw_controller *controller, uint64_t *out_command_id);
|
|
int mw_controller_queue_set_remote(mw_controller *controller,
|
|
bool enable,
|
|
uint64_t *out_command_id);
|
|
int mw_controller_queue_set_series_resistance(mw_controller *controller,
|
|
uint16_t milliohm,
|
|
uint64_t *out_command_id);
|
|
int mw_controller_queue_refresh_capabilities(mw_controller *controller,
|
|
uint64_t *out_command_id);
|
|
int mw_controller_queue_get_series_resistance(mw_controller *controller,
|
|
uint64_t *out_command_id);
|
|
|
|
const char *mw_controller_connection_state_name(mw_controller_connection_state state);
|
|
const char *mw_controller_command_kind_name(mw_controller_command_kind kind);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|