#ifndef MX_REMOTE_H
#define MX_REMOTE_H
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#define MXR_UID_STRING_LEN 36
#define MXR_FEATURE_IR_RX (1 << 0)
#define MXR_FEATURE_IR_TX (1 << 1)
#define MXR_FEATURE_CEC (1 << 2)
#define MXR_FEATURE_V2IP_SOURCE (1 << 3)
#define MXR_FEATURE_V2IP_SINK (1 << 4)
#define MXR_FEATURE_VIDEO_ROUTING (1 << 5)
#define MXR_FEATURE_AUDIO_ROUTING (1 << 6)
#define MXR_FEATURE_VOLUME_CONTROL (1 << 7)
#define MXR_FEATURE_AUDIO_RETURN (1 << 8)
#define MXR_FEATURE_REMOTE_CONTROL (1 << 9)
#define MXR_FEATURE_SETUP_COMPLETED (1 << 10)
#define MXR_FEATURE_MESH_MASTER (1 << 11)
#define MXR_FEATURE_STATUS_NOTIFY (1 << 12)
#define MXR_FEATURE_STATUS_WARNING (1 << 13)
#define MXR_FEATURE_STATUS_ERROR (1 << 14)
#define MXR_FEATURE_STATUS_REBOOT (1 << 15)
#define MXR_FEATURE_MESH_MEMBER (1 << 16)
#define MXR_FEATURE_AUDIO_AMPLIFIER (1 << 17)
#define MXR_FEATURE_BOOTING (1 << 18)
#define MXR_FEATURE_MANAGER (1 << 19)
#define MXR_FEATURE_STATUS_POWER_SAVE (1 << 20)
#define MXR_FEATURE_MESH (1 << 21)
#define MXR_FEATURE_MULTIVIEWER (1 << 22)
#define MXR_FEATURE_STATUS_CRASHED (1 << 23)
#define MXR_FEATURE_VIDEO_WALL (1 << 24)
#define MXR_FEATURE_CONFIG_INITIALISED (1 << 25)
#define MXR_FEATURE_BOOT_BIT (1 << 31)
#define MXR_BAY_HDMI_OUT (1 << 0)
#define MXR_BAY_HDMI_IN (1 << 1)
#define MXR_BAY_AUDIO_DIG_OUT (1 << 2)
#define MXR_BAY_AUDIO_DIG_IN (1 << 3)
#define MXR_BAY_AUDIO_ANA_OUT (1 << 4)
#define MXR_BAY_AUDIO_ANA_IN (1 << 5)
#define MXR_BAY_IR_IN (1 << 6)
#define MXR_BAY_IR_OUT (1 << 7)
#define MXR_BAY_AUDIO_AMP_OUT (1 << 8)
#define MXR_BAY_RC_OUT (1 << 9)
#define MXR_BAY_RC_IN (1 << 10)
#define MXR_BAY_DOLBY (1 << 11)
#define MXR_BAY_AUTO_OFF (1 << 12)
#define MXR_BAY_V2IP_SOURCE_REMOTE (1 << 13)
#define MXR_BAY_V2IP_SINK_REMOTE (1 << 14)
#define MXR_BAY_V2IP_SOURCE_LOCAL (1 << 15)
#define MXR_BAY_V2IP_SINK_LOCAL (1 << 16)
#define MXR_BAY_STATUS_FAULT (1 << 0)
#define MXR_BAY_STATUS_HIDDEN (1 << 1)
#define MXR_BAY_STATUS_POWERED (1 << 2)
#define MXR_BAY_STATUS_SIGNAL_DETECTED (1 << 3)
#define MXR_BAY_STATUS_HPD_DETECTED (1 << 4)
#define MXR_BAY_STATUS_SIGNAL_SCRAMBLE (1 << 5)
#define MXR_BAY_STATUS_HDBT_CONNECTED (1 << 6)
#define MXR_BAY_STATUS_CEC_DETECTED (1 << 7)
#define MXR_BAY_STATUS_POWERED_ON (1 << 8)
#define MXR_BAY_STATUS_POWERED_OFF (1 << 9)
#define MXR_BAY_STATUS_AUDIO_ARC_HDMI (1 << 10)
#define MXR_BAY_STATUS_AUDIO_ARC_OPTIC (1 << 11)
#define MXR_BAY_STATUS_AUDIO_ARC_ANALOG (1 << 12)
#define MXR_BAY_STATUS_OFFLINE (1 << 13)
#define MXR_BAY_STATUS_DECODER_DISABLE (1 << 14)
#define MXR_BAY_STATUS_ENCODER_DISABLE (1 << 15)
#define MXR_BAY_STATUS_CEC_DISABLED (1 << 20)
#define MXR_BAY_STATUS_ENCODER_ERROR (1 << 21)
#define MXR_AUDIO_INPUT (1 << 0)
#define MXR_AUDIO_OUTPUT (1 << 1)
#define MXR_AUDIO_V2IP_TX (1 << 2)
#define MXR_AUDIO_V2IP_RX (1 << 3)
#define MXR_AUDIO_HDMI (1 << 4)
#define MXR_AUDIO_RCA (1 << 5)
#define MXR_AUDIO_SPDIF (1 << 6)
#define MXR_AUDIO_TRIGGER (1 << 7)
#define MXR_AUDIO_MUTE (1 << 8)
#define MXR_AUDIO_ROUTE_INPUT (1 << 9)
#define MXR_AUDIO_ROUTE_OUTPUT (1 << 10)
#define MXR_AUDIO_ROUTE_IN_NONE (1 << 11)
#define MXR_AUDIO_AMP_OUTPUT (1 << 12)
#define MXR_AUDIO_VOLUME_CONTROL (1 << 13)
#define MXR_AUDIO_GAIN_CONTROL (1 << 14)
#define MXR_KEY_NUM0 0
#define MXR_KEY_NUM1 1
#define MXR_KEY_NUM2 2
#define MXR_KEY_NUM3 3
#define MXR_KEY_NUM4 4
#define MXR_KEY_NUM5 5
#define MXR_KEY_NUM6 6
#define MXR_KEY_NUM7 7
#define MXR_KEY_NUM8 8
#define MXR_KEY_NUM9 9
#define MXR_KEY_SELECT 10
#define MXR_KEY_BACK 11
#define MXR_KEY_UP 12
#define MXR_KEY_DOWN 13
#define MXR_KEY_LEFT 14
#define MXR_KEY_RIGHT 15
#define MXR_KEY_MENU 16
#define MXR_KEY_CONTENT_MENU 17
#define MXR_KEY_CHANNEL_UP 18
#define MXR_KEY_CHANNEL_DOWN 19
#define MXR_KEY_PLAY 20
#define MXR_KEY_PAUSE 21
#define MXR_KEY_STOP 22
#define MXR_KEY_RECORD 23
#define MXR_KEY_FAST_FORWARD 24
#define MXR_KEY_REWIND 25
#define MXR_KEY_RED 26
#define MXR_KEY_GREEN 27
#define MXR_KEY_YELLOW 28
#define MXR_KEY_BLUE 29
#define MXR_KEY_HELP 30
#define MXR_KEY_INFORMATION 31
#define MXR_KEY_TEXT 32
#define MXR_KEY_GUIDE 33
#define MXR_KEY_VIDEO_ON_DEMAND 34
#define MXR_KEY_PREVIOUS_CHANNEL 80
#define MXR_KEY_MODE_3D 81
#define MXR_KEY_SUBTITLE 82
#define MXR_KEY_SOUND_SELECT 83
#define MXR_KEY_INPUT_SELECT 84
#define MXR_KEY_EJECT 85
#define MXR_KEY_NEXT_CHAPTER 86
#define MXR_KEY_PREV_CHAPTER 87
#define MXR_KEY_INTERACTIVE 128
#define MXR_KEY_SEARCH 129
#define MXR_KEY_SKY 130
#define MXR_KEY_CUSTOM_CEC 1280
#define MXR_KEY_CUSTOM_SKY 2048
#define MXR_MV_VIEW_MODE_UNKNOWN 0
#define MXR_MV_VIEW_MODE_SINGLE 1
#define MXR_MV_VIEW_MODE_PIP 2
#define MXR_MV_VIEW_MODE_TWO_SCREEN_LARGE 3
#define MXR_MV_VIEW_MODE_TWO_SCREEN_SMALL 4
#define MXR_MV_VIEW_MODE_THREE_SCREEN_LARGE 5
#define MXR_MV_VIEW_MODE_THREE_SCREEN_SMALL 6
#define MXR_MV_VIEW_MODE_FOUR_SCREEN_EQUAL 7
#define MXR_MV_VIEW_MODE_FOUR_SCREEN_SMALL 8
#define MXR_MV_PIP_POSITION_UNKNOWN 0
#define MXR_MV_PIP_POSITION_LEFT_TOP 1
#define MXR_MV_PIP_POSITION_LEFT_BOTTOM 2
#define MXR_MV_PIP_POSITION_RIGHT_TOP 3
#define MXR_MV_PIP_POSITION_RIGHT_BOTTOM 4
#define MXR_MV_PIP_SIZE_UNKNOWN 0
#define MXR_MV_PIP_SIZE_SMALL 1
#define MXR_MV_PIP_SIZE_MEDIUM 2
#define MXR_MV_PIP_SIZE_LARGE 3
#define MXR_MV_OUTPUT_UNKNOWN 0
#define MXR_MV_OUTPUT_DCI4K_P60 1
#define MXR_MV_OUTPUT_DCI4K_P50 2
#define MXR_MV_OUTPUT_UHD_P60 3
#define MXR_MV_OUTPUT_UHD_P50 4
#define MXR_MV_OUTPUT_UHD_P30 5
#define MXR_MV_OUTPUT_UHD_P25 6
#define MXR_MV_OUTPUT_WUXGA_P60_RB 7
#define MXR_MV_OUTPUT_HD1080_P60 8
#define MXR_MV_OUTPUT_HD1080_P50 9
#define MXR_MV_OUTPUT_WXGA_P60 10
#define MXR_MV_OUTPUT_WXGA800_P60 11
#define MXR_MV_OUTPUT_HD720_P60 12
#define MXR_MV_OUTPUT_HD720_P50 13
#define MXR_MV_OUTPUT_XGA_P60 14
#define MXR_MV_HDCP_UNKNOWN 0
#define MXR_MV_HDCP_V14 1
#define MXR_MV_HDCP_V22 2
#define MXR_MV_HDCP_OFF 3
#define MXR_MV_EDID_UNKNOWN 0
#define MXR_MV_EDID_4K2K60_444_STEREO 1
#define MXR_MV_EDID_4K2K60_444_DOLBY_DTS_51 2
#define MXR_MV_EDID_4K2K60_444_HD_AUDIO_71 3
#define MXR_MV_EDID_4K2K30_444_STEREO 4
#define MXR_MV_EDID_4K2K30_444_DOLBY_DTS_51 5
#define MXR_MV_EDID_4K2K30_444_HD_AUDIO_71 6
#define MXR_MV_EDID_1080P_STEREO 7
#define MXR_MV_EDID_1080P_DOLBY_DTS_51 8
#define MXR_MV_EDID_1080P_HD_AUDIO_71 9
#define MXR_MV_EDID_1920X1200_STEREO 10
#define MXR_MV_EDID_1680X1050_STEREO 11
#define MXR_MV_EDID_1600X1200_STEREO 12
#define MXR_MV_EDID_1440X900_STEREO 13
#define MXR_MV_EDID_1360X768_STEREO 14
#define MXR_MV_EDID_1280X1024_STEREO 15
#define MXR_MV_EDID_1024X768_STEREO 16
#define MXR_MV_EDID_720P_STEREO 17
#define MXR_MV_EDID_COPY_OUTPUT 18
#define MXR_MV_EDID_CUSTOM 19
#define MXR_MV_ITC_UNKNOWN 0
#define MXR_MV_ITC_VIDEO 1
#define MXR_MV_ITC_PC 2
#define MXR_MV_ASPECT_UNKNOWN 0
#define MXR_MV_ASPECT_FULL 1
#define MXR_MV_ASPECT_RATIO_16_9 2
#define MXR_MV_BOOL_OFF 0
#define MXR_MV_BOOL_ON 1
#define MXR_MV_BOOL_UNKNOWN 255
#define MXR_MV_SOURCE_UNKNOWN 0
#define MXR_MV_SOURCE_INPUT_1 1
#define MXR_MV_SOURCE_INPUT_2 2
#define MXR_MV_SOURCE_INPUT_3 3
#define MXR_MV_SOURCE_INPUT_4 4
#define MXR_VIDEO_WALL_POS_ALIGN 64
#define MXR_VIDEO_WALL_WIDTH_ALIGN 4
#define MXR_VIDEO_WALL_MIN_SIZE 64
#define MXR_NAME_LEN 32
#define MXR_SERIAL_LEN 32
#define MXR_MODEL_LEN 48
#define MXR_VERSION_LEN 129
#define MXR_SIGNAL_TYPE_LEN 48
#define MXR_MESSAGE_LEN 128
#define MXR_AMP_EQ_BANDS 5
#define MXR_EDID_LEN 256
#define MXR_IP_STRING_LEN 16
#define MXR_MULTIVIEWER_INPUTS 4
#define MXR_UTP_PAIRS 4
#define MXR_SCALING_FLAG_MODE_VALID (1 << 0)
#define MXR_SCALING_FLAG_OPTIONS_VALID (1 << 1)
#define MXR_SCALING_FLAG_AUTO_SCALING (1 << 7)
enum mxr_arc_status_t
#ifdef __cplusplus
: int32_t
#endif {
MXR_ARC_INACTIVE = 0,
MXR_ARC_HDMI = 1,
MXR_ARC_OPTICAL = 2,
MXR_ARC_ANALOG = 3,
};
#ifndef __cplusplus
typedef int32_t mxr_arc_status_t;
#endif
enum mxr_device_status_t
#ifdef __cplusplus
: int32_t
#endif {
MXR_DEVICE_ONLINE = 0,
MXR_DEVICE_OFFLINE = 1,
MXR_DEVICE_REBOOTING = 2,
MXR_DEVICE_BOOTING = 3,
MXR_DEVICE_INACTIVE = 4,
};
#ifndef __cplusplus
typedef int32_t mxr_device_status_t;
#endif
enum mxr_power_status_t
#ifdef __cplusplus
: int32_t
#endif {
MXR_POWER_UNKNOWN = 0,
MXR_POWER_ON = 1,
MXR_POWER_OFF = 2,
};
#ifndef __cplusplus
typedef int32_t mxr_power_status_t;
#endif
enum mxr_result_t
#ifdef __cplusplus
: int32_t
#endif {
MXR_OK = 0,
MXR_ERR_INVALID_ARGUMENT = -1,
MXR_ERR_NOT_FOUND = -2,
MXR_ERR_PROTOCOL_TOO_OLD = -3,
MXR_ERR_NOT_CONNECTED = -4,
MXR_ERR_IO = -5,
MXR_ERR_UNSUPPORTED = -6,
MXR_ERR_NOT_REPORTED = -7,
MXR_ERR_PANIC = -8,
};
#ifndef __cplusplus
typedef int32_t mxr_result_t;
#endif
enum mxr_stream_kind_t
#ifdef __cplusplus
: int32_t
#endif {
MXR_STREAM_VIDEO = 0,
MXR_STREAM_AUDIO = 1,
MXR_STREAM_ANC = 2,
MXR_STREAM_ARC = 3,
};
#ifndef __cplusplus
typedef int32_t mxr_stream_kind_t;
#endif
enum mxr_tribool_t
#ifdef __cplusplus
: int8_t
#endif {
MXR_UNKNOWN = -1,
MXR_FALSE = 0,
MXR_TRUE = 1,
};
#ifndef __cplusplus
typedef int8_t mxr_tribool_t;
#endif
typedef struct mxr_remote_t mxr_remote_t;
typedef struct {
uint8_t bytes[16];
} mxr_uid_t;
typedef uint16_t mxr_signal_type_t;
typedef struct {
mxr_uid_t device;
uint16_t port;
} mxr_bay_uid_t;
typedef struct {
uint32_t sample_rate;
uint8_t channels;
} mxr_audio_format_t;
typedef struct {
const char *ip;
uint16_t port;
} mxr_stream_addr_t;
typedef struct {
mxr_stream_addr_t video;
mxr_stream_addr_t audio;
mxr_stream_addr_t anc;
} mxr_v2ip_route_t;
typedef struct {
uint8_t gain_left;
uint8_t gain_right;
uint8_t volume_min;
uint8_t volume_max;
uint8_t bass;
uint8_t treble;
uint8_t bridged;
uint8_t power_mode;
uint8_t power_level;
uint32_t delay_left;
uint32_t delay_right;
uint32_t power_timeout;
uint8_t eq_left[MXR_AMP_EQ_BANDS];
uint8_t eq_right[MXR_AMP_EQ_BANDS];
} mxr_amp_zone_settings_t;
typedef struct {
uint16_t pos_x;
uint16_t pos_y;
uint16_t width;
uint16_t height;
uint16_t raster_w;
uint16_t raster_h;
} mxr_video_wall_window_t;
typedef struct {
mxr_uid_t uid;
char name[MXR_NAME_LEN];
char serial[MXR_SERIAL_LEN];
char model[MXR_MODEL_LEN];
char version[MXR_VERSION_LEN];
uint16_t supported_protocol;
uint32_t features;
char address[MXR_IP_STRING_LEN];
mxr_device_status_t status;
bool online;
bool configuration_complete;
bool config_initialised;
mxr_uid_t mesh_master;
uint8_t hdbt_outputs;
mxr_tribool_t setup_done;
int32_t installer_id;
bool has_system_status;
uint16_t system_status;
char system_message[MXR_MESSAGE_LEN];
size_t temperature_count;
size_t bay_count;
} mxr_device_info_t;
typedef struct {
mxr_bay_uid_t uid;
char port_name[MXR_NAME_LEN];
char user_name[MXR_NAME_LEN];
uint8_t bay_num;
uint32_t features;
bool is_input;
bool is_output;
bool is_audio;
bool has_dolby;
bool is_local;
mxr_bay_uid_t video_source;
mxr_bay_uid_t audio_source;
mxr_power_status_t power_status;
mxr_tribool_t hidden;
mxr_tribool_t faulty;
mxr_tribool_t poe_powered;
mxr_tribool_t hdbt_connected;
mxr_tribool_t signal_detected;
mxr_tribool_t hpd_detected;
mxr_tribool_t cec_detected;
mxr_tribool_t encoder_disabled;
mxr_tribool_t decoder_disabled;
char signal_type[MXR_SIGNAL_TYPE_LEN];
mxr_signal_type_t signal_mode;
mxr_arc_status_t arc;
bool has_volume;
uint8_t volume;
mxr_tribool_t muted;
bool has_rc_type;
uint8_t rc_type;
bool has_edid_profile;
uint16_t edid_profile;
mxr_bay_uid_t mirror;
int16_t audio_endpoint;
mxr_bay_uid_t linked_bay;
mxr_uid_t v2ip_uid;
size_t filtered_count;
} mxr_bay_info_t;
typedef struct {
double frame_rate;
uint32_t tmds_clock;
uint32_t clock_rate;
uint32_t status;
mxr_signal_type_t scaling;
} mxr_signal_details_t;
typedef struct {
uint8_t format;
uint8_t channels;
uint32_t sample_rate;
bool has_coding;
uint8_t coding;
} mxr_audio_details_t;
typedef struct {
const char *target_ip;
uint16_t port;
bool broadcast;
const char *local_ip;
const char *interface;
const char *name;
const char *uid;
const char *uid_path;
} mxr_config_t;
typedef void (*mxr_device_cb)(void *userdata, mxr_uid_t device);
typedef void (*mxr_bay_cb)(void *userdata, mxr_bay_uid_t bay);
typedef void (*mxr_device_bool_cb)(void *userdata, mxr_uid_t device, bool value);
typedef void (*mxr_system_status_cb)(void *userdata,
mxr_uid_t device,
uint16_t status,
const char *message);
typedef void (*mxr_device_uid_cb)(void *userdata, mxr_uid_t device, mxr_uid_t other);
typedef void (*mxr_device_u16_cb)(void *userdata, mxr_uid_t device, uint16_t value);
typedef struct {
mxr_uid_t target;
uint8_t op;
const uint8_t *params;
size_t params_len;
} mxr_multiviewer_command_t;
typedef void (*mxr_multiviewer_command_cb)(void *userdata,
mxr_uid_t device,
const mxr_multiviewer_command_t *command);
typedef struct {
mxr_uid_t source_uid;
uint16_t source_id;
mxr_uid_t target_uid;
uint16_t target_id;
} mxr_audio_change_source_t;
typedef void (*mxr_audio_select_cb)(void *userdata,
mxr_uid_t device,
const mxr_audio_change_source_t *change);
typedef void (*mxr_endpoint_bool_cb)(void *userdata, mxr_uid_t device, uint16_t endpoint, bool value);
typedef void (*mxr_endpoint_u32_cb)(void *userdata,
mxr_uid_t device,
uint16_t endpoint,
uint32_t value);
typedef struct {
const char *serial;
uint16_t sink_bay;
uint16_t source_bay;
bool no_power_on;
bool audio_only;
} mxr_set_route_request_t;
typedef void (*mxr_set_route_cb)(void *userdata,
mxr_uid_t device,
const mxr_set_route_request_t *request);
typedef struct {
mxr_uid_t target;
bool output;
} mxr_edid_request_t;
typedef void (*mxr_edid_request_cb)(void *userdata,
mxr_uid_t device,
const mxr_edid_request_t *request);
typedef struct {
bool output;
const uint8_t *data;
size_t data_len;
} mxr_edid_record_t;
typedef void (*mxr_edid_record_cb)(void *userdata, mxr_uid_t device, const mxr_edid_record_t *record);
typedef struct {
mxr_uid_t target;
uint16_t port;
const char *name;
} mxr_bay_name_change_t;
typedef void (*mxr_bay_name_change_cb)(void *userdata,
mxr_uid_t device,
const mxr_bay_name_change_t *change);
typedef struct {
mxr_uid_t target;
uint16_t profile;
} mxr_edid_profile_change_t;
typedef void (*mxr_edid_profile_change_cb)(void *userdata,
mxr_uid_t device,
const mxr_edid_profile_change_t *change);
typedef struct {
bool all;
mxr_uid_t target;
} mxr_factory_reset_request_t;
typedef void (*mxr_factory_reset_cb)(void *userdata,
mxr_uid_t device,
const mxr_factory_reset_request_t *request);
typedef struct {
mxr_uid_t target;
bool enabled;
} mxr_power_save_request_t;
typedef void (*mxr_power_save_cb)(void *userdata,
mxr_uid_t device,
const mxr_power_save_request_t *request);
typedef struct {
mxr_uid_t target;
uint16_t local_bay;
uint16_t key;
} mxr_key_transmit_request_t;
typedef void (*mxr_key_transmit_cb)(void *userdata,
mxr_uid_t device,
const mxr_key_transmit_request_t *request);
typedef struct {
mxr_uid_t target;
uint16_t local_bay;
uint16_t action;
} mxr_action_transmit_request_t;
typedef void (*mxr_action_transmit_cb)(void *userdata,
mxr_uid_t device,
const mxr_action_transmit_request_t *request);
typedef struct {
uint16_t timer_resolution;
uint16_t frequency;
uint16_t nb_timings;
uint16_t repeat_offset;
uint8_t status;
} mxr_ir_meta_t;
typedef struct {
mxr_uid_t target;
uint8_t local_mode;
uint8_t local_bay;
uint32_t timestamp;
mxr_ir_meta_t meta;
const uint8_t *timings;
size_t timings_len;
} mxr_ir_transmit_request_t;
typedef void (*mxr_ir_transmit_cb)(void *userdata,
mxr_uid_t device,
const mxr_ir_transmit_request_t *request);
typedef struct {
mxr_uid_t target;
bool registered;
} mxr_blacklist_change_t;
typedef void (*mxr_blacklist_cb)(void *userdata,
mxr_uid_t device,
const mxr_blacklist_change_t *change);
typedef struct {
mxr_uid_t target;
uint16_t pos_x;
uint16_t pos_y;
uint16_t width;
uint16_t height;
uint16_t raster_w;
uint16_t raster_h;
uint8_t op;
} mxr_video_wall_command_t;
typedef void (*mxr_video_wall_cb)(void *userdata,
mxr_uid_t device,
const mxr_video_wall_command_t *command);
typedef void (*mxr_bay_bay_cb)(void *userdata, mxr_bay_uid_t bay, mxr_bay_uid_t other);
typedef void (*mxr_volume_cb)(void *userdata, mxr_bay_uid_t bay, uint8_t volume, mxr_tribool_t muted);
typedef void (*mxr_power_cb)(void *userdata, mxr_bay_uid_t bay, mxr_power_status_t power);
typedef void (*mxr_bay_str_cb)(void *userdata, mxr_bay_uid_t bay, const char *value);
typedef void (*mxr_bay_bool_cb)(void *userdata, mxr_bay_uid_t bay, bool value);
typedef void (*mxr_arc_cb)(void *userdata, mxr_bay_uid_t bay, mxr_arc_status_t arc);
typedef void (*mxr_bay_u16_cb)(void *userdata, mxr_bay_uid_t bay, uint16_t value);
typedef void (*mxr_bay_u8_cb)(void *userdata, mxr_bay_uid_t bay, uint8_t value);
typedef struct {
uint32_t timestamp;
uint32_t last_change;
mxr_ir_meta_t meta;
const uint8_t *timings;
size_t timings_len;
} mxr_ir_capture_t;
typedef void (*mxr_ir_capture_cb)(void *userdata, mxr_bay_uid_t bay, const mxr_ir_capture_t *capture);
typedef void (*mxr_bay_linked_cb)(void *userdata,
mxr_bay_uid_t bay,
const char *linked_serial,
const char *bay_name,
uint32_t features);
typedef void (*mxr_bay_unlinked_cb)(void *userdata,
mxr_bay_uid_t bay,
const char *linked_serial,
const char *bay_name);
typedef struct {
mxr_device_cb on_device_update;
mxr_bay_cb on_bay_update;
mxr_device_cb on_device_config_changed;
mxr_device_cb on_device_config_complete;
mxr_device_bool_cb on_device_online_changed;
mxr_device_cb on_device_temperature_changed;
mxr_device_cb on_firmware_version_changed;
mxr_system_status_cb on_system_status_changed;
mxr_device_cb on_network_status_changed;
mxr_device_cb on_v2ip_stats_changed;
mxr_device_cb on_v2ip_sources_changed;
mxr_device_cb on_v2ip_details_changed;
mxr_device_cb on_v2ip_sink_changed;
mxr_device_cb on_multiviewer_status_changed;
mxr_device_cb on_audio_endpoints_changed;
mxr_device_uid_cb on_mesh_master_changed;
mxr_device_cb on_topology_changed;
mxr_device_cb on_amp_dolby_settings_changed;
mxr_device_bool_cb on_setup_status_changed;
mxr_device_u16_cb on_installer_id_changed;
mxr_device_cb on_tiling_changed;
mxr_device_cb on_rc_settings_changed;
mxr_device_uid_cb on_v2ip_link_changed;
mxr_multiviewer_command_cb on_multiviewer_command;
mxr_audio_select_cb on_audio_select_input;
mxr_endpoint_bool_cb on_audio_endpoint_mute;
mxr_endpoint_bool_cb on_audio_endpoint_trigger;
mxr_endpoint_u32_cb on_audio_endpoint_volume;
mxr_device_cb on_discover_request;
mxr_set_route_cb on_set_route_requested;
mxr_edid_request_cb on_edid_requested;
mxr_edid_record_cb on_edid_received;
mxr_bay_name_change_cb on_bay_name_change_requested;
mxr_edid_profile_change_cb on_edid_profile_change_requested;
mxr_device_uid_cb on_reboot_requested;
mxr_factory_reset_cb on_factory_reset_requested;
mxr_device_cb on_monitoring_pulse;
mxr_device_cb on_upgrade_fpga_requested;
mxr_device_cb on_detect_bays_requested;
mxr_power_save_cb on_power_save_requested;
mxr_key_transmit_cb on_key_transmit_requested;
mxr_action_transmit_cb on_action_transmit_requested;
mxr_ir_transmit_cb on_ir_transmit_requested;
mxr_blacklist_cb on_blacklist_changed;
mxr_video_wall_cb on_video_wall_command;
mxr_bay_cb on_bay_registered;
mxr_bay_bay_cb on_video_source_changed;
mxr_bay_bay_cb on_audio_source_changed;
mxr_volume_cb on_volume_changed;
mxr_power_cb on_power_changed;
mxr_bay_str_cb on_name_changed;
mxr_bay_bool_cb on_signal_detected_changed;
mxr_bay_bool_cb on_faulty_changed;
mxr_bay_bool_cb on_hidden_changed;
mxr_bay_bool_cb on_poe_powered_changed;
mxr_bay_bool_cb on_hdbt_connected_changed;
mxr_bay_str_cb on_signal_type_changed;
mxr_bay_bool_cb on_hpd_detected_changed;
mxr_bay_bool_cb on_cec_detected_changed;
mxr_arc_cb on_arc_changed;
mxr_bay_u16_cb on_edid_profile_changed;
mxr_bay_u8_cb on_rc_type_changed;
mxr_bay_u16_cb on_key_pressed;
mxr_bay_u16_cb on_action_received;
mxr_bay_bay_cb on_mirror_status_changed;
mxr_bay_cb on_amp_zone_settings_changed;
mxr_bay_bool_cb on_volume_step;
mxr_bay_u8_cb on_audio_clip;
mxr_ir_capture_cb on_ir_captured;
mxr_bay_cb on_filtered_devices_changed;
mxr_bay_u8_cb on_audio_endpoint_changed;
mxr_bay_bool_cb on_encoder_disabled_changed;
mxr_bay_bool_cb on_decoder_disabled_changed;
mxr_bay_linked_cb on_bay_linked;
mxr_bay_unlinked_cb on_bay_unlinked;
} mxr_callbacks_t;
typedef struct {
uint32_t video;
uint32_t audio;
uint32_t anc;
uint32_t stream_down;
uint32_t overflow;
} mxr_v2ip_tx_stats_t;
typedef struct {
uint32_t video_total;
uint32_t video_dropped;
uint32_t video_seq_errors;
uint32_t wdt_timeout;
uint32_t audio_total;
uint32_t audio_dropped;
uint32_t audio_seq_errors;
uint32_t anc_total;
uint32_t anc_dropped;
uint32_t anc_seq_errors;
uint8_t decoder_state;
} mxr_v2ip_rx_stats_t;
typedef struct {
mxr_v2ip_tx_stats_t tx;
mxr_v2ip_tx_stats_t tx_per_minute;
mxr_v2ip_rx_stats_t rx;
mxr_v2ip_rx_stats_t rx_per_minute;
} mxr_v2ip_stats_t;
typedef struct {
mxr_stream_kind_t kind;
char ip[MXR_IP_STRING_LEN];
uint16_t port;
bool valid;
} mxr_stream_source_t;
typedef struct {
mxr_stream_source_t video;
mxr_stream_source_t audio;
mxr_stream_source_t anc;
mxr_stream_source_t arc;
int16_t tx_rate;
int16_t dscp_video;
int16_t dscp_audio;
int16_t dscp_anc;
uint16_t scaling_mode;
uint16_t scaling_refresh;
uint8_t scaling_flags;
} mxr_v2ip_details_t;
typedef struct {
mxr_uid_t uid;
mxr_stream_source_t video;
mxr_stream_source_t audio;
mxr_stream_source_t anc;
bool has_arc;
mxr_stream_source_t arc;
} mxr_stream_sources_t;
typedef struct {
mxr_stream_sources_t addresses;
bool has_audio_format;
mxr_audio_format_t audio_format;
} mxr_v2ip_sink_t;
typedef struct {
mxr_uid_t target;
uint16_t pos_x;
uint16_t pos_y;
uint16_t width;
uint16_t height;
} mxr_tiling_config_t;
typedef struct {
mxr_uid_t uid;
mxr_uid_t mappings[MXR_MULTIVIEWER_INPUTS];
char mcu_version[MXR_NAME_LEN];
char scaler_version[MXR_NAME_LEN];
uint8_t hw_view_mode;
uint8_t view_mode;
uint8_t pip_position;
uint8_t pip_size;
uint8_t output_mode;
uint8_t hdcp_mode;
uint8_t output_itc;
uint8_t edid_template;
uint8_t aspect_ratio;
uint8_t auto_switch;
uint8_t audio_source;
bool has_audio_volume;
uint8_t audio_volume;
uint8_t audio_muted;
uint8_t video_sources[MXR_MULTIVIEWER_INPUTS];
uint8_t remote_control;
} mxr_multiviewer_status_t;
typedef struct {
uint8_t mode;
bool pcm_upmix;
bool dolby_detected;
bool pcm_upmix_active;
} mxr_dolby_settings_t;
typedef struct {
mxr_uid_t target;
uint8_t rc_target;
char ip[MXR_IP_STRING_LEN];
bool cec_enabled;
bool cec_auto_on;
bool forward_rc;
bool forward_ir;
uint8_t rc_status;
char status_name[MXR_NAME_LEN];
} mxr_rc_settings_t;
typedef struct {
bool polarity;
uint8_t pair;
uint32_t skew;
uint32_t length;
} mxr_cable_status_t;
typedef struct {
uint16_t port;
char name[MXR_NAME_LEN];
uint8_t link_speed;
bool link_full_duplex;
char ip[MXR_IP_STRING_LEN];
char querier[MXR_IP_STRING_LEN];
bool has_mac_address;
uint8_t mac_address[6];
bool has_errors;
bool in_error;
bool in_fcs_error;
bool in_collision;
bool out_deferred;
bool out_excessive;
bool polarity_error;
bool skew_warning;
bool length_warning;
bool has_vct_status;
bool vct_warning[MXR_UTP_PAIRS];
size_t cable_status_count;
mxr_cable_status_t cable_status[MXR_UTP_PAIRS];
} mxr_network_port_t;
typedef struct {
mxr_uid_t uid;
uint32_t mask;
} mxr_topology_entry_t;
typedef struct {
uint8_t firmware_type;
uint32_t timestamp;
uint32_t hash;
char version[MXR_VERSION_LEN];
} mxr_firmware_version_t;
typedef struct {
uint8_t id;
uint32_t features;
bool has_address;
mxr_stream_source_t address;
int16_t parent;
size_t child_count;
bool has_inputs_available;
uint32_t inputs_available;
bool has_inputs_routed;
uint32_t inputs_routed;
mxr_uid_t linked_device;
int16_t linked_endpoint;
} mxr_audio_endpoint_t;
#ifdef __cplusplus
extern "C" {
#endif
const char *mxr_version(void);
const char *mxr_last_error(void);
bool mxr_uid_is_zero(mxr_uid_t uid);
mxr_result_t mxr_uid_to_string(mxr_uid_t uid, char *out, size_t cap);
mxr_result_t mxr_uid_from_string(const char *text, mxr_uid_t *out);
uint8_t mxr_bay_status_rc_type(uint32_t status);
uint8_t mxr_bay_status_hdcp(uint32_t status);
uint8_t mxr_signal_type_svd(mxr_signal_type_t signal_type);
uint8_t mxr_signal_type_colour_space(mxr_signal_type_t signal_type);
bool mxr_signal_type_non_integer(mxr_signal_type_t signal_type);
uint8_t mxr_signal_type_bpp(mxr_signal_type_t signal_type);
uint8_t mxr_signal_type_bpp_index(mxr_signal_type_t signal_type);
bool mxr_signal_type_is_set(mxr_signal_type_t signal_type);
mxr_result_t mxr_select_video_source(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
uint16_t source_port);
mxr_result_t mxr_select_audio_source(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
uint16_t source_port);
mxr_result_t mxr_select_video_source_by_name(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
const char *name);
mxr_result_t mxr_select_audio_source_by_name(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
const char *name,
const mxr_audio_format_t *format);
mxr_result_t mxr_select_audio_source_addr(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
const char *audio_ip,
uint16_t audio_port,
const mxr_audio_format_t *format);
mxr_result_t mxr_select_source_addr(const mxr_remote_t *remote,
mxr_bay_uid_t sink,
const mxr_v2ip_route_t *route,
const mxr_audio_format_t *format);
mxr_result_t mxr_set_bay_name(const mxr_remote_t *remote, mxr_bay_uid_t bay, const char *name);
mxr_result_t mxr_set_bay_hidden(const mxr_remote_t *remote, mxr_bay_uid_t bay, bool hidden);
mxr_result_t mxr_select_edid_profile(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
uint16_t profile);
mxr_result_t mxr_send_action(const mxr_remote_t *remote, mxr_bay_uid_t bay, uint16_t action);
mxr_result_t mxr_send_key(const mxr_remote_t *remote, mxr_bay_uid_t bay, uint16_t key);
mxr_result_t mxr_power_on(const mxr_remote_t *remote, mxr_bay_uid_t bay);
mxr_result_t mxr_power_off(const mxr_remote_t *remote, mxr_bay_uid_t bay);
mxr_result_t mxr_set_volume(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
uint8_t volume,
mxr_tribool_t muted);
mxr_result_t mxr_volume_up(const mxr_remote_t *remote, mxr_bay_uid_t bay);
mxr_result_t mxr_volume_down(const mxr_remote_t *remote, mxr_bay_uid_t bay);
mxr_result_t mxr_set_muted(const mxr_remote_t *remote, mxr_bay_uid_t bay, bool muted);
mxr_result_t mxr_set_amp_zone_settings(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
const mxr_amp_zone_settings_t *settings);
mxr_result_t mxr_set_audio_endpoint_muted(const mxr_remote_t *remote,
mxr_uid_t device,
uint16_t endpoint,
bool muted);
mxr_result_t mxr_set_audio_endpoint_trigger(const mxr_remote_t *remote,
mxr_uid_t device,
uint16_t endpoint,
bool active);
mxr_result_t mxr_set_audio_endpoint_volume(const mxr_remote_t *remote,
mxr_uid_t device,
uint16_t endpoint,
uint32_t volume);
mxr_result_t mxr_select_audio_endpoint_input(const mxr_remote_t *remote,
mxr_uid_t sink,
uint16_t sink_endpoint,
mxr_uid_t source,
uint16_t source_endpoint);
mxr_result_t mxr_request_edid(const mxr_remote_t *remote, mxr_uid_t device, bool output);
mxr_result_t mxr_request_signal_status(const mxr_remote_t *remote, mxr_uid_t device);
mxr_result_t mxr_subscribe_v2ip_stats(const mxr_remote_t *remote, mxr_uid_t device, bool subscribe);
mxr_result_t mxr_reboot(const mxr_remote_t *remote, mxr_uid_t device);
mxr_result_t mxr_send_monitoring_pulse(const mxr_remote_t *remote);
mxr_result_t mxr_preview_video_wall(const mxr_remote_t *remote,
mxr_uid_t sink,
const mxr_video_wall_window_t *window);
mxr_result_t mxr_store_video_wall(const mxr_remote_t *remote,
mxr_uid_t sink,
const mxr_video_wall_window_t *window);
mxr_result_t mxr_revert_video_wall(const mxr_remote_t *remote, mxr_uid_t sink);
mxr_result_t mxr_set_multiviewer_view_mode(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t mode);
mxr_result_t mxr_set_multiviewer_video_source(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t screen,
uint8_t source);
mxr_result_t mxr_set_multiviewer_audio_source(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t source);
mxr_result_t mxr_set_multiviewer_audio_volume(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t volume,
bool muted);
mxr_result_t mxr_set_multiviewer_edid_template(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t template_);
mxr_result_t mxr_set_multiviewer_remote_control(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t source);
mxr_result_t mxr_set_multiviewer_pip_size(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t size);
mxr_result_t mxr_set_multiviewer_pip_position(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t position);
mxr_result_t mxr_set_multiviewer_aspect_ratio(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t aspect);
mxr_result_t mxr_set_multiviewer_auto_switch(const mxr_remote_t *remote,
mxr_uid_t device,
bool enable);
mxr_result_t mxr_set_multiviewer_output_mode(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t mode);
mxr_result_t mxr_set_multiviewer_output_itc(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t mode);
mxr_result_t mxr_set_multiviewer_hdcp_mode(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t mode);
mxr_result_t mxr_set_multiviewer_input_source(const mxr_remote_t *remote,
mxr_uid_t device,
uint8_t input,
mxr_uid_t source);
mxr_result_t mxr_multiviewer_auto_route(const mxr_remote_t *remote, mxr_uid_t device);
mxr_result_t mxr_device(const mxr_remote_t *remote, mxr_uid_t uid, mxr_device_info_t *out);
mxr_result_t mxr_bay(const mxr_remote_t *remote, mxr_bay_uid_t bay, mxr_bay_info_t *out);
mxr_result_t mxr_bay_signal_details(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
mxr_signal_details_t *out);
mxr_result_t mxr_bay_audio_details(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
mxr_audio_details_t *out);
mxr_result_t mxr_device_edid(const mxr_remote_t *remote,
mxr_uid_t device,
bool output,
uint8_t *out,
size_t cap);
mxr_result_t mxr_bay_amp_settings(const mxr_remote_t *remote,
mxr_bay_uid_t bay,
mxr_amp_zone_settings_t *out);
size_t mxr_device_bays(const mxr_remote_t *remote, mxr_uid_t uid, mxr_bay_uid_t *out, size_t cap);
size_t mxr_device_temperatures(const mxr_remote_t *remote, mxr_uid_t uid, uint8_t *out, size_t cap);
size_t mxr_bay_filtered(const mxr_remote_t *remote, mxr_bay_uid_t bay, mxr_uid_t *out, size_t cap);
mxr_remote_t *mxr_remote_new(const mxr_config_t *config,
const mxr_callbacks_t *callbacks,
void *userdata);
mxr_result_t mxr_remote_start(const mxr_remote_t *remote);
void mxr_remote_close(const mxr_remote_t *remote);
void mxr_remote_free(mxr_remote_t *remote);
mxr_result_t mxr_remote_uid(const mxr_remote_t *remote, mxr_uid_t *out);
mxr_result_t mxr_remote_name(const mxr_remote_t *remote, char *out, size_t cap);
mxr_result_t mxr_remote_target(const mxr_remote_t *remote, char *ip, size_t cap, uint16_t *port);
mxr_result_t mxr_frames_received(const mxr_remote_t *remote, uint64_t *out);
size_t mxr_devices(const mxr_remote_t *remote, mxr_uid_t *out, size_t cap);
mxr_result_t mxr_device_by_serial(const mxr_remote_t *remote, const char *serial, mxr_uid_t *out);
mxr_result_t mxr_resolve_device(const mxr_remote_t *remote, const char *name, mxr_uid_t *out);
mxr_result_t mxr_bay_by_name(const mxr_remote_t *remote,
mxr_uid_t device,
const char *port_name,
mxr_bay_uid_t *out);
mxr_result_t mxr_bay_by_stream_ip(const mxr_remote_t *remote,
const char *ip,
bool audio,
mxr_bay_uid_t *out);
mxr_result_t mxr_remote_update_config(const mxr_remote_t *remote,
const char *local_ip,
bool broadcast);
mxr_result_t mxr_discover(const mxr_remote_t *remote);
mxr_result_t mxr_v2ip_stats(const mxr_remote_t *remote, mxr_uid_t uid, mxr_v2ip_stats_t *out);
mxr_result_t mxr_v2ip_details(const mxr_remote_t *remote, mxr_uid_t uid, mxr_v2ip_details_t *out);
mxr_result_t mxr_v2ip_sink(const mxr_remote_t *remote, mxr_uid_t uid, mxr_v2ip_sink_t *out);
mxr_result_t mxr_v2ip_tiling(const mxr_remote_t *remote, mxr_uid_t uid, mxr_tiling_config_t *out);
mxr_result_t mxr_multiviewer_status(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_multiviewer_status_t *out);
mxr_result_t mxr_dolby_settings(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_dolby_settings_t *out);
mxr_result_t mxr_rc_settings(const mxr_remote_t *remote, mxr_uid_t uid, mxr_rc_settings_t *out);
size_t mxr_v2ip_sources(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_stream_sources_t *out,
size_t cap);
size_t mxr_network_status(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_network_port_t *out,
size_t cap);
size_t mxr_topology(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_topology_entry_t *out,
size_t cap);
size_t mxr_device_firmware(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_firmware_version_t *out,
size_t cap);
size_t mxr_audio_endpoints(const mxr_remote_t *remote,
mxr_uid_t uid,
mxr_audio_endpoint_t *out,
size_t cap);
size_t mxr_audio_endpoint_children(const mxr_remote_t *remote,
mxr_uid_t uid,
uint8_t endpoint,
uint8_t *out,
size_t cap);
#ifdef __cplusplus
} #endif
#endif