summaryrefslogtreecommitdiffstats
path: root/include/hardware/fingerprint.h
diff options
context:
space:
mode:
authorStewart Miles <smiles@google.com>2014-05-01 09:03:27 -0700
committerStewart Miles <smiles@google.com>2014-05-12 12:35:37 -0700
commit84d35492b145cebc000f8fd72818eb25b8e65c04 (patch)
tree0a7adfd3f93de27984377aa1e210685540891ff8 /include/hardware/fingerprint.h
parent4c847f2b79d99b1fecf487b167dd5bbe3ea7da06 (diff)
downloadhardware_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/fingerprint.h')
-rw-r--r--include/hardware/fingerprint.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/hardware/fingerprint.h b/include/hardware/fingerprint.h
index b295ebb..c1e29ef 100644
--- a/include/hardware/fingerprint.h
+++ b/include/hardware/fingerprint.h
@@ -69,6 +69,12 @@ typedef void (*fingerprint_notify_t)(fingerprint_msg_t msg);
/* Synchronous operation */
typedef struct fingerprint_device {
+ /**
+ * Common methods of the fingerprint device. This *must* be the first member of
+ * fingerprint_device as users of this structure will cast a hw_device_t to
+ * fingerprint_device pointer in contexts where it's known the hw_device_t references a
+ * fingerprint_device.
+ */
struct hw_device_t common;
/*
@@ -121,6 +127,12 @@ typedef struct fingerprint_device {
} fingerprint_device_t;
typedef struct fingerprint_module {
+ /**
+ * Common methods of the fingerprint module. This *must* be the first member of
+ * fingerprint_module as users of this structure will cast a hw_module_t to
+ * fingerprint_module pointer in contexts where it's known the hw_module_t references a
+ * fingerprint_module.
+ */
struct hw_module_t common;
} fingerprint_module_t;