diff --git a/protocol.h b/protocol.h new file mode 100644 --- /dev/null +++ b/protocol.h @@ -0,0 +1,61 @@ +#ifndef _PROTOCOL_H +#define _PROTOCOL_H + +#include + +#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