blob: fb9aaa25c551398e8f6d9db789f8d45aabcddc67 [file] [log] [blame]
// 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_