Files

61 lines
1.5 KiB
C

/*
* kl_app.h
* Application layer: command dispatch, handlers, stream sender.
*/
#ifndef KL_APP_H
#define KL_APP_H
#include "kl_protocol.h"
/* ================================================================
* Application states
* ================================================================ */
typedef enum {
KL_APP_IDLE,
/* Single response: send response -> wait ACK -> send final ACK */
KL_APP_RESP_TX,
KL_APP_RESP_WAIT_TX,
KL_APP_RESP_WAIT_ACK,
KL_APP_RESP_FINAL_ACK,
KL_APP_RESP_FINAL_WAIT,
/* Stream response: send chunks -> wait ACK each -> final ACK */
KL_APP_STREAM_SEND,
KL_APP_STREAM_WAIT_TX,
KL_APP_STREAM_WAIT_ACK,
KL_APP_STREAM_FINAL_ACK,
KL_APP_STREAM_FINAL_WAIT,
/* Simple send (ACK/NAK with no follow-up) */
KL_APP_SIMPLE_WAIT_TX,
KL_APP_DONE
} KL_AppState;
/* ================================================================
* Fault code structure
* ================================================================ */
typedef struct {
uint8_t dtc;
uint8_t status;
uint8_t extra;
} KL_FaultCode;
/* ================================================================
* API
* ================================================================ */
void KL_App_Init(void);
void KL_App_Service(void);
void KL_App_Dispatch(const KL_Packet *cmd);
int KL_App_Busy(void);
int KL_App_Done(void);
void KL_App_ResetLocks(void);
void KL_App_Reset(void);
/* DTC list management */
void KL_App_SetDTCList(const KL_FaultCode *list, size_t count);
#endif /* KL_APP_H */