summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorXANTRONIX Development2022-03-16 00:10:55 -0400
committerXANTRONIX Development2022-03-16 00:10:55 -0400
commitcd1f89fade802c48c92680f1ddbadfbd0d04017d (patch)
tree89b8f620a0e1380a72652ef69dcec6059be11f2d /src
parent87d8e756713e67f3932a94f7d2e3f0ca596e3131 (diff)
downloadxas-cd1f89fade802c48c92680f1ddbadfbd0d04017d.tar.gz
xas-cd1f89fade802c48c92680f1ddbadfbd0d04017d.tar.bz2
xas-cd1f89fade802c48c92680f1ddbadfbd0d04017d.zip
Add optional callbacks to xas_object
Changes: * Implement xas_object_init() to initialise an object call table to all null values * Rework dispatch methods to fail gracefully if no pointer value is provided for a given callback entry Additional changes: * Add callbacks for changing bank and frequency
Diffstat (limited to 'src')
-rw-r--r--src/object.c55
1 files changed, 54 insertions, 1 deletions
diff --git a/src/object.c b/src/object.c
index 7aaaa6e..4526bc5 100644
--- a/src/object.c
+++ b/src/object.c
@@ -1,21 +1,74 @@
+#include <string.h>
+#include <errno.h>
+
#include <xas/object.h>
+void xas_object_init(xas_object *object) {
+ memset(object, '\0', sizeof(xas_object));
+}
+
int xas_object_start(xas_object *object) {
+ if (object->start == NULL) {
+ errno = ENOSYS;
+
+ return -1;
+ }
+
return object->start(object);
}
int xas_object_stop(xas_object *object) {
+ if (object->stop == NULL) {
+ errno = ENOSYS;
+
+ return -1;
+ }
+
return object->stop(object);
}
int xas_object_set_gain(xas_object *object, float gain) {
+ if (object->set_gain == NULL) {
+ errno = ENOSYS;
+
+ return -1;
+ }
+
return object->set_gain(object, gain);
}
+int xas_object_set_bank(xas_object *object, size_t bank) {
+ if (object->set_bank == NULL) {
+ errno = ENOSYS;
+
+ return -1;
+ }
+
+ return object->set_bank(object, bank);
+}
+
+int xas_object_set_freq(xas_object *object, size_t freq) {
+ if (object->set_freq == NULL) {
+ errno = ENOSYS;
+
+ return -1;
+ }
+
+ return object->set_freq(object, freq);
+}
+
xas_audio_stream *xas_object_stream_new(xas_object *object) {
+ if (object->stream_new == NULL) {
+ errno = ENOSYS;
+
+ return NULL;
+ }
+
return object->stream_new(object);
}
void xas_object_destroy(xas_object *object) {
- object->destroy(object);
+ if (object->destroy) {
+ object->destroy(object);
+ }
}