From b313330e0ff8d4991df8781b3e581cf5944d598d Mon Sep 17 00:00:00 2001 From: ioacademy-jikim Date: Fri, 15 Jun 2018 17:07:15 +0900 Subject: [PATCH] 12 --- 04_day.pptx | Bin 85313 -> 106586 bytes 04_day/hal/a.out | Bin 0 -> 8384 bytes 04_day/hal/led.c | 19 +++++ 04_day/hal/led.o | Bin 0 -> 1952 bytes 04_day/hal/libled.a | Bin 0 -> 1842 bytes 04_day/hal/libled.so | Bin 0 -> 7968 bytes 04_day/hal/main.c | 19 +++++ 04_day/hidl/Android.bp | 7 ++ 04_day/hidl/client/Android.mk | 7 ++ 04_day/hidl/client/client.cpp | 20 ++++++ 04_day/hidl/client_light/Android.mk | 7 ++ 04_day/hidl/client_light/light_client.cpp | 38 ++++++++++ .../interfaces/samples/1.0/Android.bp | 66 ++++++++++++++++++ 04_day/hidl/server/Android.bp | 15 ++++ 04_day/hidl/server/Foo.cpp | 27 +++++++ 04_day/hidl/server/Foo.h | 39 +++++++++++ 04_day/hidl/server/service.cpp | 32 +++++++++ 17 files changed, 296 insertions(+) create mode 100644 04_day/hal/a.out create mode 100644 04_day/hal/led.c create mode 100644 04_day/hal/led.o create mode 100644 04_day/hal/libled.a create mode 100644 04_day/hal/libled.so create mode 100644 04_day/hal/main.c create mode 100644 04_day/hidl/Android.bp create mode 100644 04_day/hidl/client/Android.mk create mode 100644 04_day/hidl/client/client.cpp create mode 100644 04_day/hidl/client_light/Android.mk create mode 100644 04_day/hidl/client_light/light_client.cpp create mode 100644 04_day/hidl/server/.hardware/interfaces/samples/1.0/Android.bp create mode 100644 04_day/hidl/server/Android.bp create mode 100644 04_day/hidl/server/Foo.cpp create mode 100644 04_day/hidl/server/Foo.h create mode 100644 04_day/hidl/server/service.cpp diff --git a/04_day.pptx b/04_day.pptx index 726f2fa802dddfcd59d439f7cab99f15bf583e56..d2c3fcd880bd0a5a64c86f5f78bf950a5ae38376 100644 GIT binary patch delta 23541 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 diff --git a/04_day/hal/a.out b/04_day/hal/a.out new file mode 100644 index 0000000000000000000000000000000000000000..9553a8c0ac6d4fca308afbab811e58ce8f0c4590 GIT binary patch literal 8384 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 literal 0 HcmV?d00001 diff --git a/04_day/hal/led.c b/04_day/hal/led.c new file mode 100644 index 0000000..852de7f --- /dev/null +++ b/04_day/hal/led.c @@ -0,0 +1,19 @@ +#include + +typedef struct module +{ + void (*on)(); + void (*off)(); +} module_t; + +void ledOn() +{ + printf("ledOn()\n"); +} + +void ledOff() +{ + printf("ledOff()\n"); +} + +module_t HMI = { ledOn, ledOff }; diff --git a/04_day/hal/led.o b/04_day/hal/led.o new file mode 100644 index 0000000000000000000000000000000000000000..f862ed8314ab8a5276475249ea5ad5449cc69108 GIT binary patch literal 1952 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 N@!Sb26K}Xv{{ebVl@$O0 literal 0 HcmV?d00001 diff --git a/04_day/hal/main.c b/04_day/hal/main.c new file mode 100644 index 0000000..60ba085 --- /dev/null +++ b/04_day/hal/main.c @@ -0,0 +1,19 @@ +#include + +typedef struct module +{ + void (*on)(); + void (*off)(); +} module_t; + +int main() +{ + void *handle; + module_t *module; + handle = dlopen("libled.so", RTLD_NOW); + module = dlsym( handle, "HMI" ); + module->on(); + module->off(); + dlclose(handle); + return 0; +} diff --git a/04_day/hidl/Android.bp b/04_day/hidl/Android.bp new file mode 100644 index 0000000..aac1663 --- /dev/null +++ b/04_day/hidl/Android.bp @@ -0,0 +1,7 @@ +subdirs = [ + "server", +] + + + + diff --git a/04_day/hidl/client/Android.mk b/04_day/hidl/client/Android.mk new file mode 100644 index 0000000..36f52a0 --- /dev/null +++ b/04_day/hidl/client/Android.mk @@ -0,0 +1,7 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_SHARED_LIBRARIES = liblog libutils libhidlbase android.hardware.samples@1.0 +LOCAL_SRC_FILES := client.cpp +LOCAL_MODULE := my_client +include $(BUILD_EXECUTABLE) diff --git a/04_day/hidl/client/client.cpp b/04_day/hidl/client/client.cpp new file mode 100644 index 0000000..6da9226 --- /dev/null +++ b/04_day/hidl/client/client.cpp @@ -0,0 +1,20 @@ +#include +#include +#include +#include +#include + +using ::android::hardware::samples::V1_0::IFoo; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; + + +int main() +{ + sp foo; + foo = IFoo::getService(); + foo->foo(); + return 0; +} + diff --git a/04_day/hidl/client_light/Android.mk b/04_day/hidl/client_light/Android.mk new file mode 100644 index 0000000..0230931 --- /dev/null +++ b/04_day/hidl/client_light/Android.mk @@ -0,0 +1,7 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_SHARED_LIBRARIES = liblog libutils libhidlbase android.hardware.light@2.0 +LOCAL_SRC_FILES := light_client.cpp +LOCAL_MODULE := light_client +include $(BUILD_EXECUTABLE) diff --git a/04_day/hidl/client_light/light_client.cpp b/04_day/hidl/client_light/light_client.cpp new file mode 100644 index 0000000..8c1fead --- /dev/null +++ b/04_day/hidl/client_light/light_client.cpp @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include + +using ::android::hardware::light::V2_0::Brightness; +using ::android::hardware::light::V2_0::Flash; +using ::android::hardware::light::V2_0::ILight; +using ::android::hardware::light::V2_0::LightState; +using ::android::hardware::light::V2_0::Status; +using ::android::hardware::light::V2_0::Type; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; + + +const static LightState kWhite = { + .color = 0xFFFFFFFF, + .flashMode = Flash::TIMED, + .flashOnMs = 100, + .flashOffMs = 50, + .brightnessMode = Brightness::USER, +}; + +int main() +{ + sp light; + light = ILight::getService(); + Return ret = light->setLight( Type::BACKLIGHT, kWhite); + //if( ret.isOk() == false ) + // return -1; + //if( Status::SUCCESS == static_cast(ret) ) + // return 0; + return 0; +} + diff --git a/04_day/hidl/server/.hardware/interfaces/samples/1.0/Android.bp b/04_day/hidl/server/.hardware/interfaces/samples/1.0/Android.bp new file mode 100644 index 0000000..abbcb74 --- /dev/null +++ b/04_day/hidl/server/.hardware/interfaces/samples/1.0/Android.bp @@ -0,0 +1,66 @@ +// This file is autogenerated by hidl-gen. Do not edit manually. + +filegroup { + name: "android.hardware.samples@1.0_hal", + srcs: [ + "types.hal", + "IFoo.hal", + ], +} + +genrule { + name: "android.hardware.samples@1.0_genc++", + tools: ["hidl-gen"], + cmd: "$(location hidl-gen) -o $(genDir) -Lc++-sources -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.samples@1.0", + srcs: [ + ":android.hardware.samples@1.0_hal", + ], + out: [ + "android/hardware/samples/1.0/types.cpp", + "android/hardware/samples/1.0/FooAll.cpp", + ], +} + +genrule { + name: "android.hardware.samples@1.0_genc++_headers", + tools: ["hidl-gen"], + cmd: "$(location hidl-gen) -o $(genDir) -Lc++-headers -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.samples@1.0", + srcs: [ + ":android.hardware.samples@1.0_hal", + ], + out: [ + "android/hardware/samples/1.0/types.h", + "android/hardware/samples/1.0/hwtypes.h", + "android/hardware/samples/1.0/IFoo.h", + "android/hardware/samples/1.0/IHwFoo.h", + "android/hardware/samples/1.0/BnHwFoo.h", + "android/hardware/samples/1.0/BpHwFoo.h", + "android/hardware/samples/1.0/BsFoo.h", + ], +} + +cc_library { + name: "android.hardware.samples@1.0", + defaults: ["hidl-module-defaults"], + generated_sources: ["android.hardware.samples@1.0_genc++"], + generated_headers: ["android.hardware.samples@1.0_genc++_headers"], + export_generated_headers: ["android.hardware.samples@1.0_genc++_headers"], + vendor_available: true, + vndk: { + enabled: true, + }, + shared_libs: [ + "libhidlbase", + "libhidltransport", + "libhwbinder", + "liblog", + "libutils", + "libcutils", + ], + export_shared_lib_headers: [ + "libhidlbase", + "libhidltransport", + "libhwbinder", + "libutils", + ], +} diff --git a/04_day/hidl/server/Android.bp b/04_day/hidl/server/Android.bp new file mode 100644 index 0000000..3add764 --- /dev/null +++ b/04_day/hidl/server/Android.bp @@ -0,0 +1,15 @@ +cc_binary { + name: "android.hardware.samples@1.0-service", + relative_install_path: "hw", + proprietary: true, + srcs: [ + "Foo.cpp", + "service.cpp", + ], + shared_libs: [ + "libhidlbase", + "libhidltransport", + "libutils", + "android.hardware.samples@1.0", + ], +} diff --git a/04_day/hidl/server/Foo.cpp b/04_day/hidl/server/Foo.cpp new file mode 100644 index 0000000..70c51ec --- /dev/null +++ b/04_day/hidl/server/Foo.cpp @@ -0,0 +1,27 @@ +#include +#include "Foo.h" + +namespace android { +namespace hardware { +namespace samples { +namespace V1_0 { +namespace implementation { + +// Methods from IFoo follow. +Return Foo::foo() { + std::cout << "Foo::foo()" < +#include +#include + +namespace android { +namespace hardware { +namespace samples { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; + +struct Foo : public IFoo { + // Methods from IFoo follow. + Return foo() override; + + // Methods from ::android::hidl::base::V1_0::IBase follow. + +}; + +// FIXME: most likely delete, this is only for passthrough implementations +// extern "C" IFoo* HIDL_FETCH_IFoo(const char* name); + +} // namespace implementation +} // namespace V1_0 +} // namespace samples +} // namespace hardware +} // namespace android + +#endif // ANDROID_HARDWARE_SAMPLES_V1_0_FOO_H diff --git a/04_day/hidl/server/service.cpp b/04_day/hidl/server/service.cpp new file mode 100644 index 0000000..7ca1c5d --- /dev/null +++ b/04_day/hidl/server/service.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +#include "Foo.h" + +using android::sp; +using android::status_t; +using android::OK; + +// libhwbinder: +using android::hardware::configureRpcThreadpool; +using android::hardware::joinRpcThreadpool; + +// Generated HIDL files +using android::hardware::samples::V1_0::IFoo; +using android::hardware::samples::V1_0::implementation::Foo; + +int main() { + status_t status; + android::sp service = nullptr; + + service = new Foo(); + + configureRpcThreadpool(1, true); + service->registerAsService(); + std::cout << "Foo HAL Service is ready." << std::endl; + joinRpcThreadpool(); + return 0; +} +