HAL uygulamasına hazırlanmak için temel ConfigStore oluşturabilirsiniz ve ihtiyaçlarınıza göre değiştirmeniz gerekir.
Arayüz kodu oluşturun
Arayüz için ortak kod oluşturmak üzere hidl-gen
komutunu çalıştırın.
Örneğin, surfaceflinger
için kod oluşturmak üzere:
hidl-gen -o hardware/interfaces/configstore/1.0/default \ -Lc++-impl \ -randroid.hardware:hardware/interfaces \ -randroid.hidl:system/libhidl/transport \ android.hardware.config@1.0::ISurfaceFlingerConfigs.
Android.mk'yi değiştir
Sonra, uygulama dosyasını eklemek için Android.mk
dosyasını değiştirin
(<modulename>Configs.cpp
) - LOCAL_SRC_FILES
ve
derleme işaretlerini makro tanımlarla eşlemek için kullanılır. Örneğin,
surfaceflinger
inç
hardware/interface/configstore/1.0/default/Android.mk
:
LOCAL_SRC_FILES += SurfaceFlingerConfigs.cpp ifneq ($(NUM_FRAMEBUFFER_SURFACE_BUFFERS),) LOCAL_CFLAGS += -DNUM_FRAMEBUFFER_SURFACE_BUFFERS=$(NUM_FRAMEBUFFER_SURFACE_BUFFERS) endif ifeq ($(TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK),true) LOCAL_CFLAGS += -DRUNNING_WITHOUT_SYNC_FRAMEWORK endif
Android.mk
birden fazla ifeq-endif
bloğu içeriyorsa
kodunuzu yeni bir dosyaya (yani,
surfaceflinger.mk
), ardından bu dosyayı
Android.mk
İşlevleri uygulama
HAL'yi uygulama işlevlerini doldurmak için
Farklı değerlere sahip _hidl_cb
işlevi (derlemeye göre koşullandırılmış)
bayrakları) tıklayın. Örneğin, surfaceflinger
için işlevleri doldurabilirsiniz
bir listesini oluştur:
hardware/interfaces/configstore/1.0/default/SurfaceFlingerConfigs.cpp
:
Return<void> SurfaceFlingerConfigs::numFramebufferSurfaceBuffers( numFramebufferSurfaceBuffers_cb _hidl_cb) { #if NUM_FRAMEBUFFER_SURFACE_BUFFERS 2 _hidl_cb(NumBuffers.TWO); #else if NUM_FRAMEBUFFER_SURFACE_BUFFERS 3 _hidl_cb(NumBuffers.THREE); #else _hidl_cb(NumBuffers.USE_DEFAULT); #endif } Return<void> SurfaceFlingerConfigs::runWithoutSyncFramework( runWithoutSyncFramework_cb _hidl_cb) { #ifdef RUNNING_WITHOUT_SYNC_FRAMEWORK _hidl_cb({true /* specified */, true /* value */}); #else // when macro not defined, we can give any value to the second argument. // It will simply be ignored in the framework side. _hidl_cb({false /* specified */, false /* value */}); #endif }
Uygulamanın şu adında bir işlev içermediğinden emin olun:
HIDL_FETCH_interface-name
(örneğin,
HIDL_FETCH_ISurfaceFlingerConfigs
) tıklayın. Bu işlev,
tarafından kullanılmayan (ve yasaklanan) HIDL geçiş modu
configstore
. ConfigStore her zaman birleştirilmiş modda çalışmalıdır.
Hizmet olarak kaydolun
Son olarak, tüm arayüz uygulamalarını
configstore
hizmeti. Örneğin, Google Haberler'de
surfaceflinger
uygulama
hardware/interfaces/configstore/1.0/default/service.cpp
:
configureRpcThreadpool(maxThreads, true); sp<ISurfaceFlingerConfigs> surfaceFlingerConfigs = new SurfaceFlingerConfigs; status_t status = surfaceFlingerConfigs->registerAsService(); sp<IBluetoothConfigs> bluetoothConfigs = new BluetoothConfigs; status = bluetoothConfigs->registerAsService(); // register more interfaces here joinRpcThreadpool();
Erken erişim sağlayın
Bir çerçeve modülünün HAL hizmetine erken erişim imkanı sağlamak için
config HAL hizmeti mümkün olan en kısa sürede, hemen sonra başlamalıdır
hwservicemanager
hazır. Yapılandırma HAL hizmeti
hazır olduğunda, hemen hazır olması beklenir.