131 lines
2.4 KiB
C
131 lines
2.4 KiB
C
|
/**
|
|||
|
* @author R<EFBFBD>mi Heredero
|
|||
|
* @version 1.0.0
|
|||
|
* @date August 2023
|
|||
|
* @file drive.h
|
|||
|
*/
|
|||
|
#ifndef DRIVE_H
|
|||
|
#define DRIVE_H
|
|||
|
|
|||
|
#include "../xf/xf.h"
|
|||
|
#include "../middleware/alive.h"
|
|||
|
|
|||
|
typedef enum {
|
|||
|
STDR_INIT,
|
|||
|
STDR_WAIT,
|
|||
|
STDR_RUN,
|
|||
|
STDR_DEAD
|
|||
|
} DRIVE_STATES;
|
|||
|
|
|||
|
typedef enum {
|
|||
|
evDRinit = 100,
|
|||
|
evDRstart,
|
|||
|
evDRstop,
|
|||
|
evDRresurrect,
|
|||
|
evDRpollSpeed,
|
|||
|
evDRpollTorque
|
|||
|
} DRIVE_EVENTS;
|
|||
|
|
|||
|
typedef void (*DRIVE_CALLBACK_FUNCTION)(void*);
|
|||
|
typedef struct {
|
|||
|
DRIVE_CALLBACK_FUNCTION f; // function
|
|||
|
void* p; // param(s)
|
|||
|
} DRIVE_CALLBACK;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
DRIVE_STATES state;
|
|||
|
ALIVE myChecker;
|
|||
|
DRIVE_CALLBACK wait;
|
|||
|
DRIVE_CALLBACK run;
|
|||
|
DRIVE_CALLBACK dead;
|
|||
|
} DRIVE;
|
|||
|
|
|||
|
/**
|
|||
|
* Initialize the DRIVE
|
|||
|
* @param me the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_init(DRIVE* me);
|
|||
|
|
|||
|
/**
|
|||
|
* Start the DRIVE state machine
|
|||
|
* @param me the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_startBehaviour(DRIVE* me);
|
|||
|
|
|||
|
/**
|
|||
|
* Process the event
|
|||
|
* @param ev the event to process
|
|||
|
* @return true if the event is processed
|
|||
|
*/
|
|||
|
bool DRIVE_processEvent(Event* ev);
|
|||
|
|
|||
|
/*************
|
|||
|
* Callbacks *
|
|||
|
*************/
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the DRIVE is entering state wait
|
|||
|
* @param me the DRIVE itself
|
|||
|
* @param f the function to call
|
|||
|
* @param p the param(s) to pass to the function
|
|||
|
*/
|
|||
|
void DRIVE_onWait(DRIVE* me, DRIVE_CALLBACK_FUNCTION f, void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the DRIVE is entering state run
|
|||
|
* @param me the DRIVE itself
|
|||
|
* @param f the function to call
|
|||
|
* @param p the param(s) to pass to the function
|
|||
|
*/
|
|||
|
void DRIVE_onRun(DRIVE* me, DRIVE_CALLBACK_FUNCTION f, void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Set the callback function to call when the DRIVE is entering state dead
|
|||
|
* @param me the DRIVE itself
|
|||
|
* @param f the function to call
|
|||
|
* @param p the param(s) to pass to the function
|
|||
|
*/
|
|||
|
void DRIVE_onDead(DRIVE* me, DRIVE_CALLBACK_FUNCTION f, void* p);
|
|||
|
|
|||
|
/************
|
|||
|
* EMITTERS *
|
|||
|
************/
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the start event
|
|||
|
* @param p the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_emitStart(void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the stop event
|
|||
|
* @param p the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_emitStop(void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the resurrect event
|
|||
|
* @param p the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_emitResurrect(void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the pollSpeed event
|
|||
|
* @param p the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_emitPollSpeed(void* p);
|
|||
|
|
|||
|
/**
|
|||
|
* Emit the pollTorque event
|
|||
|
* @param p the DRIVE itself
|
|||
|
*/
|
|||
|
void DRIVE_emitPollTorque(DRIVE* me, uint16_t t, int64_t data);
|
|||
|
|
|||
|
/***********
|
|||
|
* SETTERS *
|
|||
|
***********/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|