aboutsummaryrefslogtreecommitdiffhomepage
path: root/midimonster.h
diff options
context:
space:
mode:
Diffstat (limited to 'midimonster.h')
-rw-r--r--midimonster.h37
1 files changed, 29 insertions, 8 deletions
diff --git a/midimonster.h b/midimonster.h
index 1192d6a..5844bb9 100644
--- a/midimonster.h
+++ b/midimonster.h
@@ -5,6 +5,16 @@
#include <stdint.h>
#include <inttypes.h>
+/* Core version unless set by the build process */
+#ifndef MIDIMONSTER_VERSION
+ #define MIDIMONSTER_VERSION "v0.3-dist"
+#endif
+
+/* Set backend name if unset */
+#ifndef BACKEND_NAME
+ #define BACKEND_NAME "unspec"
+#endif
+
/* API call attributes and visibilities */
#ifndef MM_API
#ifdef _WIN32
@@ -32,13 +42,15 @@
/* Debug messages only compile in when DEBUG is set */
#ifdef DEBUG
- #define DBGPF(format, ...) fprintf(stderr, (format), __VA_ARGS__)
- #define DBG(message) fprintf(stderr, "%s", (message))
+ #define DBGPF(format, ...) fprintf(stderr, "debug/%s\t" format "\n", (BACKEND_NAME), __VA_ARGS__)
#else
#define DBGPF(format, ...)
- #define DBG(message)
#endif
+/* Log messages should be routed through these macros to ensure interoperability with different core implementations */
+#define LOGPF(format, ...) fprintf(stderr, "%s\t" format "\n", (BACKEND_NAME), __VA_ARGS__)
+#define LOG(message) fprintf(stderr, "%s\t%s\n", (BACKEND_NAME), (message))
+
/* Stop compilation if the build system reports an error */
#ifdef BUILD_ERROR
#error The build system reported an error, compilation stopped. Refer to the invocation for this compilation unit for more information.
@@ -87,8 +99,11 @@ struct _managed_fd;
* Parse instance configuration from the user-supplied configuration
* file. Returning a non-zero value fails config parsing.
* * mmbackend_channel
- * Parse a channel-spec to be mapped to/from. Returning NULL signals an
- * out-of-memory condition and terminates the program.
+ * Parse a channel-spec to be mapped to/from. The `flags` parameter supplies
+ * additional information to the parser, such as whether the channel is being
+ * queried for use as input (to the MIDIMonster core) and/or output
+ * (from the MIDIMonster core) channel (on a per-query basis).
+ * Returning NULL signals an out-of-memory condition and terminates the program.
* * mmbackend_start
* Called after all instances have been created and all mappings
* have been set up. Only backends for which instances have been configured
@@ -121,14 +136,20 @@ struct _managed_fd;
*/
typedef int (*mmbackend_handle_event)(struct _backend_instance* inst, size_t channels, struct _backend_channel** c, struct _channel_value* v);
typedef struct _backend_instance* (*mmbackend_create_instance)();
-typedef struct _backend_channel* (*mmbackend_parse_channel)(struct _backend_instance* instance, char* spec);
+typedef struct _backend_channel* (*mmbackend_parse_channel)(struct _backend_instance* instance, char* spec, uint8_t flags);
typedef void (*mmbackend_free_channel)(struct _backend_channel* c);
typedef int (*mmbackend_configure)(char* option, char* value);
typedef int (*mmbackend_configure_instance)(struct _backend_instance* instance, char* option, char* value);
typedef int (*mmbackend_process_fd)(size_t nfds, struct _managed_fd* fds);
-typedef int (*mmbackend_start)();
+typedef int (*mmbackend_start)(size_t ninstances, struct _backend_instance** inst);
typedef uint32_t (*mmbackend_interval)();
-typedef int (*mmbackend_shutdown)();
+typedef int (*mmbackend_shutdown)(size_t ninstances, struct _backend_instance** inst);
+
+/* Bit masks for the `flags` parameter to mmbackend_parse_channel */
+typedef enum {
+ mmchannel_input = 0x1,
+ mmchannel_output = 0x2
+} mmbe_channel_flags;
/* Channel event value, .normalised is used by backends to determine channel values */
typedef struct _channel_value {