#ifndef _PROTOCOL_H
#define _PROTOCOL_H
#include <stdbool.h>
#include "config.h"
#include "can.h"
typedef struct {
bool command;
uint8_t id;
uint16_t key;
uint8_t sensor;
union {
float float_data;
uint8_t byte_data[4];
} data;
} protocol_message_t;
typedef enum {
ESTOP = 0x00,
SILENCE_BUS = 0x01,
SET_OUTPUT = 0X10,
GET_DATA = 0x11,
CONFIG = 0x12,
CALIBRATE = 0x13,
} protocol_command_t;
typedef enum {
NONE = 0x0000,
DIGITAL_INPUT = 0x0001,
FREQ_INPUT = 0x0002,
ANALOG_INPUT = 0x0003,
DIGITAL_OUTPUT = 0x0004,
FREQ_OUTPUT = 0x0005,
ANALOG_OUTPUT = 0x0006,
AIR_TEMP = 0x0007,
AIR_HUMIDITY = 0x0008,
AIR_PRESSURE = 0x0009,
AMBIENT_LIGHT = 0x000A,
WATER_TEMP = 0x000B,
WATER_LEVEL = 0x000C,
WATER_CONDUCTIVITY = 0x000D,
WATER_PH = 0x000E,
CAN_ID = 0x0100,
DATA_RATE = 0x0101,
GPIO = 0x0102,
LED_BRIGHTNESS = 0x0103,
} protocol_data_key_t;
bool protocol_receive_message(CanRxMsgTypeDef* can_message);
bool protocol_send_message(protocol_message_t* message);
bool protocol_process_message(protocol_message_t* message);
__weak bool protocol_estop(bool value);
__weak bool protocol_set_output(protocol_message_t* message);
__weak bool protocol_get_data(protocol_message_t* message);
__weak bool protocol_config(protocol_message_t* message);
#endif //_PROTOCOL_H