big refactoring: J1939, log output, state machine bug fixes
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
#ifndef SERIAL_CONTROL_H
|
||||
#define SERIAL_CONTROL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "main.h"
|
||||
#include "connector.h"
|
||||
|
||||
/* Read-only commands */
|
||||
#define CMD_GET_INFO 0x01
|
||||
#define CMD_ISOLATION_STATUS 0x01 /* UART5 isolation block packet */
|
||||
#define CMD_GET_GBT_STATUS 0x02
|
||||
#define CMD_GET_CCS_STATUS 0x03
|
||||
#define CMD_GET_LOG 0x50
|
||||
#define CMD_GET_LOG_CONTINUE 0x51
|
||||
|
||||
/* GBT control commands */
|
||||
#define CMD_GBT_CC_ENABLE 0x10
|
||||
#define CMD_GBT_STOP 0x11
|
||||
#define CMD_GBT_SET_SOC 0x12
|
||||
#define CMD_GBT_SET_REQUEST 0x13
|
||||
#define CMD_GBT_SET_VIN 0x18
|
||||
|
||||
/* CCS control commands */
|
||||
#define CMD_CCS_SET_STATE 0x20
|
||||
#define CMD_CCS_ENABLE_LOAD 0x24
|
||||
|
||||
/* Response codes */
|
||||
#define RESP_SUCCESS 0x12
|
||||
#define RESP_FAILED 0x13
|
||||
#define RESP_INVALID 0x14
|
||||
|
||||
#define MAX_TX_BUFFER_SIZE 256
|
||||
#define MAX_RX_BUFFER_SIZE 256
|
||||
#define CRC32_POLYNOMIAL ((uint32_t)0xEDB88320)
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t command;
|
||||
uint8_t argument_length;
|
||||
void *argument;
|
||||
} ReceivedCommand_t;
|
||||
|
||||
typedef enum {
|
||||
SC_SOURCE_UART2 = 0,
|
||||
SC_SOURCE_UART5 = 1,
|
||||
} SC_Source_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t isolationStatus;
|
||||
uint16_t isolationResistance;
|
||||
int16_t voltageHigh;
|
||||
int16_t voltageLow;
|
||||
int16_t voltageComm;
|
||||
} IsolationStatusPacket_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint16_t requestedVoltage; /* 1V/bit */
|
||||
uint16_t requestedCurrent; /* 0.1A/bit */
|
||||
} EvSetLimits_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint16_t measuredVoltage; /* 1V/bit */
|
||||
uint16_t measuredCurrent; /* 0.1A/bit */
|
||||
} EvSetMeasured_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t connector_type; /* 0x01 (GBT) */
|
||||
uint16_t requestedVoltage; /* V */
|
||||
uint16_t requestedCurrent; /* 0.1A/bit */
|
||||
uint16_t measuredVoltageSE; /* V */
|
||||
uint16_t measuredCurrentSE; /* 0.1A/bit */
|
||||
uint16_t measuredVoltage; /* 1V/bit */
|
||||
uint16_t measuredCurrent; /* 0.1A/bit */
|
||||
uint8_t cc_enabled;
|
||||
uint8_t contactorEnabled;
|
||||
CONN_Error_t chargingError;
|
||||
uint8_t EvseConnected;
|
||||
uint8_t soc; /* % */
|
||||
uint8_t vin[17];
|
||||
uint8_t cc_state;
|
||||
uint8_t logs_available;
|
||||
CONN_State_t connState;
|
||||
} GBT_MonitorPacket_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t connector_type; /* 0x02 (CCS) */
|
||||
uint16_t measuredVoltage; /* 1V/bit */
|
||||
uint16_t measuredCurrent; /* 0.1A/bit */
|
||||
uint8_t cp_enabled;
|
||||
uint8_t contactorEnabled;
|
||||
CONN_Error_t chargingError;
|
||||
uint8_t EvseConnected;
|
||||
uint8_t soc; /* % */
|
||||
uint8_t cp_state; /* A/B/C/D/E/... enum value */
|
||||
uint8_t cp_pwm_duty; /* % */
|
||||
CONN_State_t connState;
|
||||
} CCS_MonitorPacket_t;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint16_t serialNumber;
|
||||
uint8_t boardVersion;
|
||||
uint8_t stationType;
|
||||
uint16_t fw_version_major;
|
||||
uint16_t fw_version_minor;
|
||||
uint16_t fw_version_patch;
|
||||
} InfoPacket_t;
|
||||
|
||||
typedef struct SerialControl_t SerialControl_t;
|
||||
struct SerialControl_t {
|
||||
uint8_t tx_buffer[MAX_TX_BUFFER_SIZE];
|
||||
uint8_t rx_buffer[MAX_RX_BUFFER_SIZE];
|
||||
volatile ReceivedCommand_t received_command;
|
||||
volatile uint8_t command_ready;
|
||||
volatile uint8_t response_pending;
|
||||
volatile uint8_t response_code;
|
||||
volatile uint32_t tx_tick;
|
||||
};
|
||||
|
||||
void SC_Init(void);
|
||||
void SC_Task(void);
|
||||
void SC_SendPacket(const uint8_t *payload, uint16_t payload_len, uint8_t response_code);
|
||||
void SC_CommandHandler(ReceivedCommand_t *cmd);
|
||||
|
||||
extern SerialControl_t serial_control;
|
||||
extern GBT_MonitorPacket_t gbtMonitorPacket;
|
||||
extern CCS_MonitorPacket_t ccsMonitorPacket;
|
||||
extern InfoPacket_t infoPacket;
|
||||
extern IsolationStatusPacket_t ISO;
|
||||
extern volatile SC_Source_t g_sc_command_source;
|
||||
|
||||
#endif /* SERIAL_CONTROL_H */
|
||||
Reference in New Issue
Block a user