Skip to content

hideakitai/HyperDeck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HyperDeck

BlackMagic Design HyperDeck controller for Arduino via TCP

Supported Platforms

Ethernet

  • ESP32
  • ESP8266
  • Almost all platforms without WiFi

WiFi

  • ESP32
  • ESP8266
  • Arduino Uno WiFi Rev2
  • Arduino MKR VIDOR 4000
  • Arduino MKR WiFi 1010
  • Arduino MKR WiFi 1000
  • Arduino Nano 33 IoT

Usage

#include <HyperDeck.h>

// Ethernet stuff
uint8_t mac[] = {0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45};
const IPAddress ip (192, 168, 0, 201);

// HyperDeck IP
const IPAddress hyperdeck_ip{192, 168, 0, 194};

HyperDeck::Controller deck;

void setup() {
    Serial.begin(115200);
    delay(2000);

    // Ethernet stuff
    Ethernet.begin(mac, ip);

    deck.connect(hyperdeck_ip);
}

void loop() {
    while (Serial.available()) {
        char c = Serial.read();
        if (c == 'p') {
            deck.play();
        } else if (c == 's') {
            deck.stop();
        } else if (c == 'n') {
            deck.goto_clip_forward(1);
        } else if (c == 'b') {
            deck.goto_clip_backward(1);
        }
    }
}

WiFi Support

To control HyperDeck via WiFi, please replace HyperDeck::Controller to HyperDeck::ControllerWiFi and initialize WiFi instead of Ethernet. Please see simple_wifi example for details.

HyperDeck::ControllerWiFi deck;

APIs

bool connect(const IPAddress& ip);
bool is_connected();

// void device_info(); // TODO: query
// void disk_list(); // TODO: query
// void disk_list(const size_t slot_id); // TODO: query
void quit();
void ping();
void preview(const bool b);
void play();
void play(const int speed);
void play_loop(const bool b);
void play_single_clip(const bool b);
// void play_range(); // TODO: query
void play_range(const size_t clip_id);
void play_range(const String& tc_in, const String& tc_out);
void play_range(const size_t frame_in, const size_t frame_out);
void play_range_clear();
// void play_on_startup(); // TODO: query
void play_on_startup(const bool b);
void play_on_startup_single_clip(const bool b);
// void play_option(); // TODO: query
void play_option(const StopMode mode);
void record();
void record(const String& name);
void record_spill();
void record_spill(const size_t slot_id);
void stop();
// void clips_count(); // TODO: query
// void clips_get(); // TODO: query
// void clips_get(const size_t clip_id); // TODO: query
// void clips_get(const size_t clip_id, const size_t count); // TODO: query
// void clips_get_version(const size_t version); // TODO: query
void clips_add(const String& name);
void clips_add(const size_t clip_id, const String& name);
void clips_add(const String& tc_in, const String& tc_out, const String& name);
void clips_remove(const size_t clip_id);
void clips_clear();
// void transport_info(); // TODO: query
// void slot_info(); // TODO: query
// void slot_info(const size_t slot_id); // TODO: query
void slot_select(const size_t slot_id);
// void slot_select(); // TODO:
void slot_unblock();
void slot_unblock(const size_t slot_id);
// void dynamic_range(); // TODO: query
// void notify(); // TODO: query
void notify_remote(const bool b);
void notify_transport(const bool b);
void notify_slot(const bool b);
void notify_configuration(const bool b);
void notify_drop_frames(const bool b);
void notify_display_timecode(const bool b);
void notify_timeline_position(const bool b);
void notify_playrange(const bool b);
void notify_dynamic_range(const bool b);
void goto_clip_start();
void goto_clip_end();
void goto_clip(const size_t n);
void goto_clip_forward(const size_t n);
void goto_clip_backward(const size_t n);
void goto_timeline_start();
void goto_timeline_end();
void goto_timeline(const size_t n);
void goto_timeline_forward(const size_t n);
void goto_timeline_backward(const size_t n);
void goto_timecode(const String& tc);
void goto_timecode_forward(const String& tc);
void goto_timecode_backward(const String& tc);
void goto_slot(const size_t slot_id);
void jog_timecode(const String& tc);
void jog_timecode_forward(const String& tc);
void jog_timecode_backward(const String& tc);
void shuttle(const int speed);
// void remote(); // TODO: query
void remote(const bool b);
void remote_override(const bool b);
// void configuration(); // TODO: query
void config_video_input(const VideoInput v_in);
void config_audio_input(const AudioInput a_in);
// void config_file_format(); // TODO:
void config_audio_codec(const AudioCodec codec);
void config_timecode_input(const TimecodeInput t_in);
void config_timecode_preset(const String& tc);
void config_audio_input_channels(const size_t ch);
void config_record_trigger(const RecordTrigger trig);
void config_record_prefix(const String& name);
void config_append_timestamp(const bool b);
// void uptiem(); // TODO: query
// void format_prepare(); // TODO:
// void format_confirm(); // TODO:
void identify(const bool b);
void watchdog_period(const size_t sec);

Configurations

namespace HyperDeck {
    enum class StopMode { LAST_FRAME, NEXT_FRAME, BLACK_SCREEN };
    enum class VideoInput { SDI, HDMI, COMPONENT };
    enum class AudioInput { EMBEDDED, XLR, RCA };
    enum class AudioCodec { PCM, AAC };
    enum class TimecodeInput { EXT, EMBEDDED, PRESET, CLIP };
    enum class RecordTrigger { NONE, RECORDBIT, TIMECODERUN};
}

Refernce

License

MIT

About

BlackMagic Design HyperDeck controller for Arduino via TCP

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages