diff options
-rw-r--r-- | include/hardware/fingerprint.h | 82 | ||||
-rw-r--r-- | modules/Android.mk | 2 | ||||
-rw-r--r-- | modules/fingerprint/Android.mk | 25 | ||||
-rw-r--r-- | modules/fingerprint/fingerprint.c | 93 | ||||
-rw-r--r-- | tests/fingerprint/Android.mk | 19 | ||||
-rw-r--r-- | tests/fingerprint/fingerprint_test_fixtures.h | 75 | ||||
-rw-r--r-- | tests/fingerprint/fingerprint_tests.cpp | 37 |
7 files changed, 332 insertions, 1 deletions
diff --git a/include/hardware/fingerprint.h b/include/hardware/fingerprint.h new file mode 100644 index 0000000..be2f9e2 --- /dev/null +++ b/include/hardware/fingerprint.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_INCLUDE_HARDWARE_FINGERPRINT_H +#define ANDROID_INCLUDE_HARDWARE_FINGERPRINT_H + +#define FINGERPRINT_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0) +#define FINGERPRINT_HARDWARE_MODULE_ID "fingerprint" + +typedef enum fingerprint_msg { + FINGERPRINT_ERROR = -1, + FINGERPRINT_NO_MATCH = 0, + FINGERPRINT_MATCH = 1, + FINGERPRINT_TEMPLATE_COLLECTING = 2, + FINGERPRINT_TEMPLATE_REGISTERED = 3, + FINGERPRINT_TEMPLATE_DELETED = 4 +} fingerprint_msg_t; + +typedef enum fingerprint_error { + FINGERPRINT_ERROR_HW_UNAVAILABLE = 1, + FINGERPRINT_ERROR_BAD_CAPTURE = 2 +} fingerprint_error_t; + +/* Synchronous operation */ +typedef struct fingerprint_device { + struct hw_device_t common; + + /* + * Figerprint enroll request: records and stores a fingerprint template. + * Timeout after temeout_sec seconds. + * + * Function return: + * - Machine state: error, collected or registered. + * - Data is interpreted as error code, collection percentage + * or fingerprint id. + */ + fingerprint_msg_t (*enroll)(unsigned timeout_sec, unsigned *data); + + /* + * Figerprint remove request: deletes a fingerprint template. + * + * Function return: + * - Delete result: error or success. + */ + fingerprint_msg_t (*remove)(unsigned fingerprint_id); + + /* + * Figerprint match request: Collect a fingerprint and + * match against stored template with fingerprint_id. + * Timeout after temeout_sec seconds. + * + * Function return: + * - Match, no match or error. + */ + fingerprint_msg_t (*match)(unsigned fingerprint_id, unsigned timeout_sec); + + /* Reserved for future use. Must be NULL. */ + void* reserved[8 - 3]; +} fingerprint_device_t; + +typedef struct fingerprint_module { + struct hw_module_t common; +} fingerprint_module_t; + +/* For asyncronous mode - as a possible API model +typedef void (*fingerprint_callback)(int request_id, fingerprint_msg msg, data); +*/ + +#endif /* ANDROID_INCLUDE_HARDWARE_FINGERPRINT_H */ diff --git a/modules/Android.mk b/modules/Android.mk index 5f1de32..c903eee 100644 --- a/modules/Android.mk +++ b/modules/Android.mk @@ -1,4 +1,4 @@ hardware_modules := gralloc hwcomposer audio nfc nfc-nci local_time \ power usbaudio audio_remote_submix camera consumerir sensors vibrator \ - mcu tv_input + mcu tv_input fingerprint include $(call all-named-subdir-makefiles,$(hardware_modules)) diff --git a/modules/fingerprint/Android.mk b/modules/fingerprint/Android.mk new file mode 100644 index 0000000..58c0a83 --- /dev/null +++ b/modules/fingerprint/Android.mk @@ -0,0 +1,25 @@ +# Copyright (C) 2013 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := fingerprint.default +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SRC_FILES := fingerprint.c +LOCAL_SHARED_LIBRARIES := liblog +LOCAL_MODULE_TAGS := optional + +include $(BUILD_SHARED_LIBRARY) diff --git a/modules/fingerprint/fingerprint.c b/modules/fingerprint/fingerprint.c new file mode 100644 index 0000000..3bdcdab --- /dev/null +++ b/modules/fingerprint/fingerprint.c @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#define LOG_TAG "FingerprintHal" + +#include <errno.h> +#include <string.h> +#include <cutils/log.h> +#include <hardware/hardware.h> +#include <hardware/fingerprint.h> + +static int fingerprint_close(hw_device_t *dev) +{ + if (dev) { + free(dev); + return 0; + } else { + return -1; + } +} + +static fingerprint_msg_t fingerprint_enroll(unsigned timeout_sec, + unsigned *data) { + (void)timeout_sec; + (void)data; + return FINGERPRINT_ERROR; +} + +static fingerprint_msg_t fingerprint_remove(unsigned fingerprint_id) { + (void)fingerprint_id; + return FINGERPRINT_ERROR; +} + +static fingerprint_msg_t fingerprint_match(unsigned fingerprint_id, + unsigned timeout_sec) { + (void)fingerprint_id; + (void)timeout_sec; + return FINGERPRINT_ERROR; +} + +static int fingerprint_open(const hw_module_t* module, const char* id, + hw_device_t** device) +{ + (void)id; + + if (device == NULL) { + ALOGE("NULL device on open"); + return -EINVAL; + } + + fingerprint_device_t *dev = malloc(sizeof(fingerprint_device_t)); + memset(dev, 0, sizeof(fingerprint_device_t)); + + dev->common.tag = HARDWARE_DEVICE_TAG; + dev->common.version = 0; + dev->common.module = (struct hw_module_t*) module; + dev->common.close = fingerprint_close; + + dev->enroll = fingerprint_enroll; + dev->remove = fingerprint_remove; + dev->match = fingerprint_match; + + *device = (hw_device_t*) dev; + return 0; +} + +static struct hw_module_methods_t fingerprint_module_methods = { + .open = fingerprint_open, +}; + +fingerprint_module_t HAL_MODULE_INFO_SYM = { + .common = { + .tag = HARDWARE_MODULE_TAG, + .module_api_version = FINGERPRINT_MODULE_API_VERSION_1_0, + .hal_api_version = HARDWARE_HAL_API_VERSION, + .id = FINGERPRINT_HARDWARE_MODULE_ID, + .name = "Demo Fingerprint HAL", + .author = "The Android Open Source Project", + .methods = &fingerprint_module_methods, + }, +}; diff --git a/tests/fingerprint/Android.mk b/tests/fingerprint/Android.mk new file mode 100644 index 0000000..4f03c39 --- /dev/null +++ b/tests/fingerprint/Android.mk @@ -0,0 +1,19 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + fingerprint_tests.cpp \ + +LOCAL_SHARED_LIBRARIES := \ + liblog \ + libhardware \ + +#LOCAL_C_INCLUDES += \ +# system/media/camera/include \ + +LOCAL_CFLAGS += -Wall -Wextra + +LOCAL_MODULE:= fingerprint_tests +LOCAL_MODULE_TAGS := tests + +include $(BUILD_NATIVE_TEST) diff --git a/tests/fingerprint/fingerprint_test_fixtures.h b/tests/fingerprint/fingerprint_test_fixtures.h new file mode 100644 index 0000000..a526203 --- /dev/null +++ b/tests/fingerprint/fingerprint_test_fixtures.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __ANDROID_HAL_FINGERPRINT_TEST_COMMON__ +#define __ANDROID_HAL_FINGERPRINT_TEST_COMMON__ + +#include <gtest/gtest.h> +#include <hardware/hardware.h> +#include <hardware/fingerprint.h> + +namespace tests { + +static const uint16_t kVersion = HARDWARE_MODULE_API_VERSION(1, 0); + +class FingerprintModule : public testing::Test { + public: + FingerprintModule() : + fp_module_(NULL) {} + ~FingerprintModule() {} + protected: + virtual void SetUp() { + const hw_module_t *hw_module = NULL; + ASSERT_EQ(0, hw_get_module(FINGERPRINT_HARDWARE_MODULE_ID, &hw_module)) + << "Can't get fingerprint module"; + ASSERT_TRUE(NULL != hw_module) + << "hw_get_module didn't return a valid fingerprint module"; + + fp_module_ = reinterpret_cast<const fingerprint_module_t*>(hw_module); + } + const fingerprint_module_t* fp_module() { return fp_module_; } + private: + const fingerprint_module_t *fp_module_; +}; + +class FingerprintDevice : public FingerprintModule { + public: + FingerprintDevice() : + fp_device_(NULL) {} + ~FingerprintDevice() {} + protected: + virtual void SetUp() { + FingerprintModule::SetUp(); + hw_device_t *device = NULL; + ASSERT_TRUE(NULL != fp_module()->common.methods->open) + << "Fingerprint open() is unimplemented"; + ASSERT_EQ(0, fp_module()->common.methods->open( + (const hw_module_t*)fp_module(), NULL, &device)) + << "Can't open fingerprint device"; + ASSERT_TRUE(NULL != device) + << "Fingerprint open() returned a NULL device"; + ASSERT_EQ(kVersion, device->version) + << "Unsupported version"; + fp_device_ = reinterpret_cast<fingerprint_device_t*>(device); + } + fingerprint_device_t* fp_device() { return fp_device_; } + private: + fingerprint_device_t *fp_device_; +}; + +} // namespace tests + +#endif // __ANDROID_HAL_FINGERPRINT_TEST_COMMON__ diff --git a/tests/fingerprint/fingerprint_tests.cpp b/tests/fingerprint/fingerprint_tests.cpp new file mode 100644 index 0000000..ad6e1dd --- /dev/null +++ b/tests/fingerprint/fingerprint_tests.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <gtest/gtest.h> +#include "fingerprint_test_fixtures.h" + +namespace tests { + +TEST_F(FingerprintDevice, isThereEnroll) { + ASSERT_TRUE(NULL != fp_device()->enroll) + << "Enroll function is not implemented"; +} + +TEST_F(FingerprintDevice, isThereRemove) { + ASSERT_TRUE(NULL != fp_device()->remove) + << "Remove function is not implemented"; +} + +TEST_F(FingerprintDevice, isThereMatch) { + ASSERT_TRUE(NULL != fp_device()->match) + << "Match function is not implemented"; +} + +} // namespace tests |