diff options
author | XANTRONIX Development | 2022-03-16 00:10:55 -0400 |
---|---|---|
committer | XANTRONIX Development | 2022-03-16 00:10:55 -0400 |
commit | cd1f89fade802c48c92680f1ddbadfbd0d04017d (patch) | |
tree | 89b8f620a0e1380a72652ef69dcec6059be11f2d /src | |
parent | 87d8e756713e67f3932a94f7d2e3f0ca596e3131 (diff) | |
download | xas-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.c | 55 |
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); + } } |