#ifndef __APP_ZEDMON_USB_PROTO_H_
#define __APP_ZEDMON_USB_PROTO_H_

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

typedef enum {
    ZEDMON_USB_PACKET_QUERY             = 0x00,
    ZEDMON_USB_PACKET_QUERY_TIME        = 0x01,
    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_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);

#endif  // __APP_ZEDMON_USB_PROTO_H_

