aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/rtpmidi.h
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2018-03-25 23:17:15 +0200
committercbdev <cb@cbcdn.com>2018-03-25 23:17:15 +0200
commitcf889dd8bd983182534457b6778892ef0634e592 (patch)
treec48ae905f6f825b8935b8e64326ff5e772132726 /backends/rtpmidi.h
parent52cb34c88129145597984913b86321a940fc520a (diff)
downloadmidimonster-cf889dd8bd983182534457b6778892ef0634e592.tar.gz
midimonster-cf889dd8bd983182534457b6778892ef0634e592.tar.bz2
midimonster-cf889dd8bd983182534457b6778892ef0634e592.zip
Rough rtpmidi backend skeleton
Diffstat (limited to 'backends/rtpmidi.h')
-rw-r--r--backends/rtpmidi.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/backends/rtpmidi.h b/backends/rtpmidi.h
new file mode 100644
index 0000000..f14357f
--- /dev/null
+++ b/backends/rtpmidi.h
@@ -0,0 +1,94 @@
+#include <sys/socket.h>
+#include "midimonster.h"
+
+int init();
+static int rtpmidi_configure(char* option, char* value);
+static int rtpmidi_configure_instance(instance* instance, char* option, char* value);
+static instance* rtpmidi_instance();
+static channel* rtpmidi_channel(instance* instance, char* spec);
+static int rtpmidi_set(instance* inst, size_t num, channel** c, channel_value* v);
+static int rtpmidi_handle(size_t num, managed_fd* fds);
+static int rtpmidi_start();
+static int rtpmidi_shutdown();
+
+#define RTPMIDI_DEFAULT_PORTBASE "9001"
+#define RTPMIDI_RECV_BUF 4096
+
+#define RTPMIDI_COMMAND_LEN
+#define RTPMIDI_COMMAND_DATA_OFFSET
+#define RTPMIDI_HAS_JOURNAL
+#define RTPMIDI_IS_PHANTOM
+
+typedef enum /*_rtpmidi_peer_mode*/ {
+ peer_learned,
+ peer_invited,
+ peer_invited_by,
+ peer_sync,
+ peer_connect
+} rtpmidi_peer_mode;
+
+typedef struct /*_rtpmidi_peer*/ {
+ rtpmidi_peer_mode mode;
+ struct sockaddr_storage dest;
+ socklen_t dest_len;
+ uint32_t ssrc;
+} rtpmidi_peer;
+
+typedef struct /*_rtpmidi_fd*/ {
+ int data;
+ int control;
+} rtpmidi_fd;
+
+typedef struct /*_rtmidi_instance_data*/ {
+ size_t fd_index;
+ size_t npeers;
+ rtpmidi_peer* peers;
+ uint32_t ssrc;
+
+ //apple-midi config
+ char* session_name;
+ char* invite_peers;
+ char* invite_accept;
+
+ //generic mode config
+ uint8_t learn_peers;
+} rtpmidi_instance_data;
+
+#pragma pack(push, 1)
+typedef struct /*_apple_session_command*/ {
+ uint16_t res1;
+ uint8_t command[2];
+ uint32_t version;
+ uint32_t token;
+ uint32_t ssrc;
+ //char* name
+} apple_command;
+
+typedef struct /*_apple_session_sync*/ {
+ uint16_t res1;
+ uint8_t command[2];
+ uint32_t ssrc;
+ uint8_t count;
+ uint8_t res2[3];
+ uint64_t timestamp[3];
+} apple_sync;
+
+typedef struct /*_apple_session_feedback*/ {
+ uint16_t res1;
+ uint8_t command[2];
+ uint32_t ssrc;
+ uint32_t sequence;
+} apple_feedback;
+
+typedef struct /*_rtp_midi_header*/ {
+ uint16_t vpxccmpt; //this is really just an amalgamated constant value
+ uint16_t sequence;
+ uint32_t timestamp;
+ uint32_t ssrc;
+} rtpmidi_header;
+
+typedef struct /*_rtp_midi_command*/ {
+ uint8_t flags;
+ uint8_t additional_length;
+} rtpmidi_command;
+#pragma pack(pop)