diff options
author | Stewart Miles <smiles@google.com> | 2014-05-01 09:03:27 -0700 |
---|---|---|
committer | Stewart Miles <smiles@google.com> | 2014-05-12 12:35:37 -0700 |
commit | 84d35492b145cebc000f8fd72818eb25b8e65c04 (patch) | |
tree | 0a7adfd3f93de27984377aa1e210685540891ff8 /include/hardware/audio.h | |
parent | 4c847f2b79d99b1fecf487b167dd5bbe3ea7da06 (diff) | |
download | hardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.zip hardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.tar.gz hardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.tar.bz2 |
Described restrictions for common HAL object methods.
Inheritance of HAL object is performed by composing a child structure of a
single parent structure located at offset 0 followed by new data members
and function pointers in the child structure.
For example,
struct child {
struct parent common;
int a_data_member;
void (*a_method)(struct child *c, int v);
};
HAL code assumes this layout when accessing child structures given a pointer
to a parent structure such that users write code like the following...
void child_method(struct *parent, int v) {
struct child * c = (struct child*)parent;
// do stuff with c
}
Code above will break if a member is added before "common" in "struct child".
This change adds comments that describe the restriction on the location of
parent HAL objects within a derived HAL object. HAL objects that already
have comments that describe the required location of parent objects are not
modified.
Change-Id: Ibe4300275286ef275b2097534c84f1029d761d87
Diffstat (limited to 'include/hardware/audio.h')
-rw-r--r-- | include/hardware/audio.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/hardware/audio.h b/include/hardware/audio.h index b53cbff..6c28def 100644 --- a/include/hardware/audio.h +++ b/include/hardware/audio.h @@ -260,6 +260,11 @@ typedef enum { */ struct audio_stream_out { + /** + * Common methods of the audio stream out. This *must* be the first member of audio_stream_out + * as users of this structure will cast a audio_stream to audio_stream_out pointer in contexts + * where it's known the audio_stream references an audio_stream_out. + */ struct audio_stream common; /** @@ -383,6 +388,11 @@ struct audio_stream_out { typedef struct audio_stream_out audio_stream_out_t; struct audio_stream_in { + /** + * Common methods of the audio stream in. This *must* be the first member of audio_stream_in + * as users of this structure will cast a audio_stream to audio_stream_in pointer in contexts + * where it's known the audio_stream references an audio_stream_in. + */ struct audio_stream common; /** set the input gain for the audio driver. This method is for @@ -439,6 +449,11 @@ struct audio_module { }; struct audio_hw_device { + /** + * Common methods of the audio device. This *must* be the first member of audio_hw_device + * as users of this structure will cast a hw_device_t to audio_hw_device pointer in contexts + * where it's known the hw_device_t references an audio_hw_device. + */ struct hw_device_t common; /** |