#ifndef __APP_ZEDMON_USB_PROTO_H_
#define __APP_ZEDMON_USB_PROTO_H_

#include <assert.h>
#include <stdint.h>

typedef enum {
    ZEDMON_USB_PACKET_QUERY_REPORT_FORMAT   = 0x00,
    ZEDMON_USB_PACKET_QUERY_TIME            = 0x01,
    ZEDMON_USB_PACKET_QUERY_PARAMETER_VALUE = 0x02,
    ZEDMON_USB_PACKET_ENABLE_REPORTING      = 0x10,
    ZEDMON_USB_PACKET_DISABLE_REPORTING     = 0x11,
    ZEDMON_USB_PACKET_SET_OUTPUT            = 0x20,
    ZEDMON_USB_PACKET_REPORT_FORMAT         = 0x80,
    ZEDMON_USB_PACKET_REPORT                = 0x81,
    ZEDMON_USB_PACKET_TIMESTAMP             = 0x82,
    ZEDMON_USB_PACKET_PARAMETER_VALUE       = 0x83,
} zedmon_usb_packet_type_t;

typedef enum {
    ZEDMON_USB_TYPE_UINT8   = 0x00,
    ZEDMON_USB_TYPE_UINT16  = 0x01,
    ZEDMON_USB_TYPE_UINT32  = 0x02,
    ZEDMON_USB_TYPE_UINT64  = 0x03,
    ZEDMON_USB_TYPE_INT8    = 0x10,
    ZEDMON_USB_TYPE_INT16   = 0x11,
    ZEDMON_USB_TYPE_INT32   = 0x12,
    ZEDMON_USB_TYPE_INT64   = 0x13,
    ZEDMON_USB_TYPE_FLOAT32 = 0x40,
} zedmon_usb_type_t;

typedef enum {
    ZEDMON_USB_UNIT_AMPERE = 0x00,
    ZEDMON_USB_UNIT_VOLTS  = 0x01,
} zedmon_usb_unit_t;

typedef struct {
    uint8_t packet_type;
    uint8_t index;
    uint8_t type;  // zedmon_usb_type_t
    uint8_t unit;  // zedmon_usb_unit_t
    float scale;
    char name[56];
} zedmon_usb_report_format_t;

static_assert(sizeof(zedmon_usb_report_format_t) == 64);
static_assert(offsetof(zedmon_usb_report_format_t, packet_type) == 0);
static_assert(offsetof(zedmon_usb_report_format_t, index) == 1);
static_assert(offsetof(zedmon_usb_report_format_t, type) == 2);
static_assert(offsetof(zedmon_usb_report_format_t, unit) == 3);
static_assert(offsetof(zedmon_usb_report_format_t, scale) == 4);
static_assert(offsetof(zedmon_usb_report_format_t, name) == 8);

typedef struct {
    uint8_t packet_type;  // zedmon_usb_packet_type_t
    char name[54];
    uint8_t data_type;  // zedmon_usb_type_t
    union {
        uint8_t bytes[8];
        float float_value;
    } data;
} zedmon_usb_parameter_value_t;

static_assert(sizeof(zedmon_usb_parameter_value_t) == 64);
static_assert(offsetof(zedmon_usb_parameter_value_t, packet_type) == 0);
static_assert(offsetof(zedmon_usb_parameter_value_t, name) == 1);
static_assert(offsetof(zedmon_usb_parameter_value_t, data_type) == 55);
static_assert(offsetof(zedmon_usb_parameter_value_t, data) == 56);

#endif  // __APP_ZEDMON_USB_PROTO_H_

