// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBTOUCHRAW_TOUCHRAW_H_
#define LIBTOUCHRAW_TOUCHRAW_H_

#include <cstdint>
#include <memory>
#include <optional>
#include <vector>

namespace touchraw {

// Describe HID data received from the device.
struct HIDData {
  uint8_t report_id;
  std::vector<uint8_t> payload;
};

enum ReportType {
  kInvalid = 0,
  kFirst,
  kSubsequent,
};

// Describe a chunk of heatmap data from the input device.
// Please refer to go/cros-heatmap-external HID Descriptor Format for
// definitions.
struct HeatmapChunk {
  // Please refer to HID Usage Tables
  // https://www.usb.org/sites/default/files/hut1_4.pdf section 16.9.
  uint16_t vendor_id;
  uint16_t protocol_version;
  // Please refer to HID Usage Tables
  // https://www.usb.org/sites/default/files/hut1_4.pdf section 16.5.
  uint32_t scan_time;
  // Please refer to HID Usage Tables
  // https://www.usb.org/sites/default/files/hut1_4.pdf section 4.6.
  std::optional<uint32_t> byte_count;
  // Please refer to HID Usage Tables
  // https://www.usb.org/sites/default/files/hut1_4.pdf section 9.2.
  std::optional<uint16_t> sequence_id;
  ReportType report_type;
  // Please refer to HID Usage Tables
  // https://www.usb.org/sites/default/files/hut1_4.pdf section 16.9 Capacitive
  // Heat Map Frame Data.
  std::vector<uint8_t> payload;
};

enum EncodingType {
  kRawADC = 0,
  kDiffData,
  kRLE,
  kZeroRLE,
  kQuantizedRLE,
  kThresholdRLE,
};

// Describes one frame of heatmap data.
// Please refer to go/cros-heatmap-external Heatmap Data Format for details.
struct Heatmap {
  uint16_t vendor_id;
  uint16_t protocol_version;
  uint32_t scan_time;
  EncodingType encoding;
  uint8_t bit_depth;
  uint8_t height;
  uint8_t width;
  uint16_t threshold;
  uint16_t length;
  std::vector<uint8_t> payload;
};

}  // namespace touchraw

#endif  // LIBTOUCHRAW_TOUCHRAW_H_
