PER Firmware
Loading...
Searching...
No Matches
amk.h
Go to the documentation of this file.
1
10#ifndef AMK_H
11#define AMK_H
12
13#include "common/can_library/generated/MCAN.h"
14#include <stdint.h>
15
16typedef enum : uint8_t {
17 AMK_STATE_OFF = 0,
18 AMK_STATE_STARTING = 1,
19 AMK_STATE_RUNNING = 2,
20 AMK_STATE_RECOVERING = 3,
21 AMK_STATE_FATAL = 4
22} AMK_motor_state_t;
23
24typedef struct {
25 // Flush functions
26 // ! must not be an inline function
27 void (*set_function)(void);
28
29 // Direct pointers to CAN library data structures
30 // ! cast all motor objects to INVA
31 INVA_SET_data_t *set;
32 INVA_CRIT_data_t *crit;
33 INVA_INFO_data_t *info;
34 INVA_TEMPS_data_t *temps;
35 INVA_ERR_1_data_t *err1;
36 INVA_ERR_2_data_t *err2;
37
38 // Internal state
39 AMK_motor_state_t state;
40 AMK_motor_state_t next_state;
41 bool *precharge_ptr; // owned pointer to precharge status from car module
42} AMK_t;
43
44void AMK_init(
45 AMK_t *amk,
46 void (*set_func)(void),
47 INVA_SET_data_t *set,
48 INVA_CRIT_data_t *crit,
49 INVA_INFO_data_t *info,
50 INVA_TEMPS_data_t *temps,
51 INVA_ERR_1_data_t *err1,
52 INVA_ERR_2_data_t *err2,
53 bool *precharge_ptr
54);
55
56void AMK_reset(AMK_t* amk);
57void AMK_set_torque(AMK_t* amk, int16_t torque_percent);
58void AMK_periodic(AMK_t* amk);
59
60#endif // AMK_H
Definition amk.h:24