blob: 0128d65f07b3064193f676fb204c9d1b593f6556 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BIOD_FP_FRAME_COMMAND_H_
#define BIOD_FP_FRAME_COMMAND_H_
#include <array>
#include <vector>
#include "biod/ec_command.h"
namespace biod {
// Upper bound of the host command packet transfer size.
constexpr static int kMaxPacketSize = 544;
using FpFramePacket = std::array<uint8_t, kMaxPacketSize>;
class FpFrameCommand
: public EcCommand<struct ec_params_fp_frame, FpFramePacket> {
public:
FpFrameCommand(int index, uint32_t frame_size, ssize_t max_read_size)
: EcCommand(EC_CMD_FP_FRAME),
frame_index_(index),
max_read_size_(max_read_size),
frame_data_(frame_size) {}
~FpFrameCommand() override = default;
bool Run(int fd) override;
const std::vector<uint8_t>& frame() const;
protected:
virtual bool EcCommandRun(int fd);
private:
constexpr static int kMaxRetries = 50;
constexpr static int kRetryDelayMs = 100;
int frame_index_ = 0;
ssize_t max_read_size_ = 0;
std::vector<uint8_t> frame_data_;
};
static_assert(!std::is_copy_constructible<FpFrameCommand>::value,
"EcCommands are not copyable by default");
static_assert(!std::is_copy_assignable<FpFrameCommand>::value,
"EcCommands are not copy-assignable by default");
} // namespace biod
#endif // BIOD_FP_FRAME_COMMAND_H_