İşlevler

Bir HIDL arayüzündeki işlevler, otomatik olarak oluşturulan IFoo C++ sınıfı bildirimi. Her işlevin adı C++'ta aynıdır; Aşağıdaki bölümlerde HIDL bağımsız değişkenlerinin ve değerleri C++ diline çevrilir.

İşlev parametreleri

.hal dosyasında listelenen bağımsız değişkenler C++ veri türleriyle eşlenir. Temel bir C++ türüyle eşlenmeyen bağımsız değişkenler const tarafından iletilir bir referans noktası olarak kabul edilir.

Döndürülen değeri olan (generates olan) her HIDL işlevi için ifadesiyle birlikte), söz konusu işlevin C++ parametre listesinde ek bir bağımsız değişken vardır: HIDL işlevinin döndürülen değerleriyle çağrılan bir geri çağırma işlevi. Bir istisna vardır: generates koşulu doğrudan bir C++ temel bileşeni, geri çağırma ile eşlenen tek bir parametre içerir elision kullanılır (geri çağırma kaldırılır ve döndürülen değer normal bir return deyimiyle işlevden döndürülmesi gerekir.)

İşlev dönüş değerleri

Aşağıdaki işlevlerin dönüş değerleri var.

Taşıma hataları ve iade türü

generates ifadesi, üç tür işlevle sonuçlanabilir imzalar:

  • Yalnızca C++ temel öğesi olan bir döndürülen değer için generates işlevinden elde edilen değer, Return<T> nesne algılandı.
  • Daha karmaşık durumlarda generates değeri işlev çağrısının kendisiyle birlikte sağlanan geri çağırma parametresi aracılığıyla döndürülür. ve işlev Return<void> değerini döndürür.
  • generates ifadesi olmadığında işlev, Return<void>.

RPC çağrıları zaman zaman aktarım hatalarıyla (ör. sunucu ne zaman Ulaşım kaynakları aramayı tamamlamak için yeterli olmadığında ya da iletilen parametreler aramanın tamamlanmasına izin vermiyordur (örneğin, gerekli geri çağırma işlevi) kullandığınızdan emin olun. Return nesne deposu aktarım hatası bir T değeri ( Return<void>).

İstemci tarafı ve sunucu tarafı işlevleri aynı imzaya sahip olduğundan sunucu tarafı işlevi bir Return türü döndürmelidir uygulanması aktarım hatalarına işaret etmez. Return<T>. nesneler Return(myTValue) ile oluşturulur (veya dolaylı olarak mTValue parametresinden oluşturulmuştur (örneğin, return) ifadeleri) ve Return<void> nesne Void().

Return<T> nesne arasında örtülü dönüşüm var T değeri. Return nesnesinin içerip içermediği kontrol edilebilir aktarım hatalarının isOk() yöntemini çağırarak. Bu kontrol zorunlu; bununla birlikte, bir hata oluşursa ve Return nesne kaldırıldı veya T değer dönüşümü kaldırıldı istemci işlemi sonlandırılır ve bir hata kaydedilir. Eğer isOk(), aktarım hatasını veya mantık nedeniyle yaşanan bir arama hatasını gösteriyor geliştirici kodunda hata (nullptr öğesini eşzamanlı olarak iletme gibi) geri çağırma), ardından description() nesnesine Geri dön işlevinde günlük kaydına uygun bir dize döndürür. Bu tür durumlarda, sonucunda, sunucuda ne kadar kodun yürütülebileceğini başarısız çağrı. isDeadObject() yöntemi de sağlanır. Bu yöntemi, !isOk() işlevinin uzak nesnenin kilitlendi veya artık mevcut değil. isDeadObject() her zaman anlamına gelir !isOk().

Değere göre döndürme

generates ifadesi tek bir C++ temel öğesine eşleniyorsa hayır geri çağırma parametresi, parametre listesindedir. Bunun yerine bir uygulama Return<T> nesnesinde T değerini döndürür. T temel türünden dolaylı olarak oluşturulabilir. Örneğin, örnek:

Return<uint32_t> someMethod() {
    uint32_t return_data = ...; // Compute return_data
    return return_data;
};

Return<*>::withDefault yöntemi de sağlanır. Bu yöntemi, döndürülen değerin !isOk() olduğu durumlarda bir değer sağlar. Bu yöntem ayrıca, döndürme nesnesini otomatik olarak uygun şekilde işaretler. iptal edilmez.

Geri çağırma parametresini kullanarak geri dön

Geri çağırma, HIDL işlevinin döndürülen değerini arayana geri iletebilir. Geri çağırma prototipi, std::function C++ ile eşlenen parametreler (generates ifadesinden alınır) bulunur. Döndürülen değer geçersizdir. Geri çağırmanın kendisi bir değer döndürmez.

Geri çağırma parametresine sahip bir C++ işlevinin döndürülen değeri şu türde olmalıdır: Return<void> Sunucu uygulaması yalnızca geri dönüşüm değerini sağlamalısınız. Döndürülen değerler zaten aktarıldığından geri çağırma kullanıldığında T şablon parametresi void olur:

Return<void> someMethod(someMethod_cb _cb);

Sunucu uygulamaları, C++ uygulamasından Bu, Void() değeri döndüren statik satır içi işlevdir. Return<void> nesne algılandı. Tipik bir sunucu yöntemi örneği geri çağırma parametresiyle uygulama:

Return<void> someMethod(someMethod_cb _cb) {
    // Do some processing, then call callback with return data
    hidl_vec<uint32_t> vec = ...
    _cb(vec);
    return Void();
};

Döndürülen değeri olmayan işlevler

generates ifadesi olmayan bir işlevin C++ imzası parametre listesinde geri çağırma parametresi olmaz. Dönüş türü, Return<void>. olmalıdır

Tek yön işlevleri

oneway anahtar kelimesiyle işaretlenen işlevler eşzamansızdır işlevleri (istemciler yürütmelerini engellemez) ve dönüşü yoktur değerler. Bir oneway işlevinin C++ imzası geri çağırma parametresini içerir ve C++ dönüş değeri şöyle olur: Return<void>.