| // Copyright 2018 The Fuchsia 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 GARNET_EXAMPLES_MEDIA_TONES_MIDI_KEYBOARD_H_ |
| #define GARNET_EXAMPLES_MEDIA_TONES_MIDI_KEYBOARD_H_ |
| |
| #include <memory> |
| |
| #include "lib/fsl/tasks/fd_waiter.h" |
| #include "lib/fxl/files/unique_fd.h" |
| |
| namespace examples { |
| |
| class Tones; |
| |
| class MidiKeyboard { |
| public: |
| // Attempt open and use the first MIDI event source we encounter. |
| static std::unique_ptr<MidiKeyboard> Create(Tones* owner); |
| |
| private: |
| friend std::unique_ptr<MidiKeyboard>::deleter_type; |
| |
| MidiKeyboard(Tones* owner, fxl::UniqueFD dev) |
| : owner_(owner), dev_(std::move(dev)) {} |
| ~MidiKeyboard(); |
| |
| void Wait(); |
| void HandleEvent(); |
| |
| Tones* const owner_; |
| const fxl::UniqueFD dev_; |
| fsl::FDWaiter fd_waiter_; |
| bool waiting_ = false; |
| }; |
| |
| } // namespace examples |
| |
| #endif // GARNET_EXAMPLES_MEDIA_TONES_MIDI_KEYBOARD_H_ |