diff options
| -rw-r--r-- | include/xas/object.h | 12 | ||||
| -rw-r--r-- | src/object.c | 55 | 
2 files changed, 66 insertions, 1 deletions
| diff --git a/include/xas/object.h b/include/xas/object.h index a164277..4392892 100644 --- a/include/xas/object.h +++ b/include/xas/object.h @@ -11,6 +11,10 @@ typedef int (*xas_object_stop_callback)(xas_object *object);  typedef int (*xas_object_set_gain_callback)(xas_object *object, float gain); +typedef int (*xas_object_set_freq_callback)(xas_object *object, size_t freq); + +typedef int (*xas_object_set_bank_callback)(xas_object *object, size_t gain); +  typedef xas_audio_stream *(*xas_object_stream_new_callback)(xas_object *object);  typedef void (*xas_object_destroy_callback)(xas_object *object); @@ -19,16 +23,24 @@ struct _xas_object {      xas_object_start_callback      start;      xas_object_stop_callback       stop;      xas_object_set_gain_callback   set_gain; +    xas_object_set_bank_callback   set_bank; +    xas_object_set_freq_callback   set_freq;      xas_object_stream_new_callback stream_new;      xas_object_destroy_callback    destroy;  }; +void xas_object_init(xas_object *object); +  int xas_object_start(xas_object *object);  int xas_object_stop(xas_object *object);  int xas_object_set_gain(xas_object *object, float gain); +int xas_object_set_bank(xas_object *object, size_t bank); + +int xas_object_set_freq(xas_object *object, size_t freq); +  xas_audio_stream *xas_object_stream_new(xas_object *object);  void xas_object_destroy(xas_object *object); 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); +    }  } | 
 
    