1*4d7e907cSAndroid Build Coastguard Worker /* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_CONTEXTHUB_V1_0_CONTEXTHUB_H_ 18*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_CONTEXTHUB_V1_0_CONTEXTHUB_H_ 19*4d7e907cSAndroid Build Coastguard Worker 20*4d7e907cSAndroid Build Coastguard Worker #include <unordered_map> 21*4d7e907cSAndroid Build Coastguard Worker 22*4d7e907cSAndroid Build Coastguard Worker #include <android-base/macros.h> 23*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/contexthub/1.0/IContexthub.h> 24*4d7e907cSAndroid Build Coastguard Worker #include <hardware/context_hub.h> 25*4d7e907cSAndroid Build Coastguard Worker 26*4d7e907cSAndroid Build Coastguard Worker namespace android { 27*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 28*4d7e907cSAndroid Build Coastguard Worker namespace contexthub { 29*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 { 30*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 31*4d7e907cSAndroid Build Coastguard Worker 32*4d7e907cSAndroid Build Coastguard Worker struct Contexthub : public ::android::hardware::contexthub::V1_0::IContexthub { 33*4d7e907cSAndroid Build Coastguard Worker Contexthub(); 34*4d7e907cSAndroid Build Coastguard Worker 35*4d7e907cSAndroid Build Coastguard Worker Return<void> getHubs(getHubs_cb _hidl_cb) override; 36*4d7e907cSAndroid Build Coastguard Worker 37*4d7e907cSAndroid Build Coastguard Worker Return<Result> registerCallback(uint32_t hubId, 38*4d7e907cSAndroid Build Coastguard Worker const sp<IContexthubCallback> &cb) override; 39*4d7e907cSAndroid Build Coastguard Worker 40*4d7e907cSAndroid Build Coastguard Worker Return<Result> sendMessageToHub(uint32_t hubId, 41*4d7e907cSAndroid Build Coastguard Worker const ContextHubMsg &msg) override; 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Worker Return<Result> loadNanoApp(uint32_t hubId, 44*4d7e907cSAndroid Build Coastguard Worker const NanoAppBinary& appBinary, 45*4d7e907cSAndroid Build Coastguard Worker uint32_t transactionId) override; 46*4d7e907cSAndroid Build Coastguard Worker 47*4d7e907cSAndroid Build Coastguard Worker Return<Result> unloadNanoApp(uint32_t hubId, 48*4d7e907cSAndroid Build Coastguard Worker uint64_t appId, 49*4d7e907cSAndroid Build Coastguard Worker uint32_t transactionId) override; 50*4d7e907cSAndroid Build Coastguard Worker 51*4d7e907cSAndroid Build Coastguard Worker Return<Result> enableNanoApp(uint32_t hubId, 52*4d7e907cSAndroid Build Coastguard Worker uint64_t appId, 53*4d7e907cSAndroid Build Coastguard Worker uint32_t transactionId) override; 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker Return<Result> disableNanoApp(uint32_t hubId, 56*4d7e907cSAndroid Build Coastguard Worker uint64_t appId, 57*4d7e907cSAndroid Build Coastguard Worker uint32_t transactionId) override; 58*4d7e907cSAndroid Build Coastguard Worker 59*4d7e907cSAndroid Build Coastguard Worker Return<Result> queryApps(uint32_t hubId) override; 60*4d7e907cSAndroid Build Coastguard Worker 61*4d7e907cSAndroid Build Coastguard Worker Return<Result> reboot(uint32_t hubId); 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker bool isInitialized(); 64*4d7e907cSAndroid Build Coastguard Worker 65*4d7e907cSAndroid Build Coastguard Worker private: 66*4d7e907cSAndroid Build Coastguard Worker 67*4d7e907cSAndroid Build Coastguard Worker struct CachedHubInformation{ 68*4d7e907cSAndroid Build Coastguard Worker struct hub_app_name_t osAppName; 69*4d7e907cSAndroid Build Coastguard Worker sp<IContexthubCallback> callback; 70*4d7e907cSAndroid Build Coastguard Worker }; 71*4d7e907cSAndroid Build Coastguard Worker 72*4d7e907cSAndroid Build Coastguard Worker class DeathRecipient : public hidl_death_recipient { 73*4d7e907cSAndroid Build Coastguard Worker public: 74*4d7e907cSAndroid Build Coastguard Worker DeathRecipient(const sp<Contexthub> contexthub); 75*4d7e907cSAndroid Build Coastguard Worker 76*4d7e907cSAndroid Build Coastguard Worker void serviceDied( 77*4d7e907cSAndroid Build Coastguard Worker uint64_t cookie, 78*4d7e907cSAndroid Build Coastguard Worker const wp<::android::hidl::base::V1_0::IBase>& who) override; 79*4d7e907cSAndroid Build Coastguard Worker 80*4d7e907cSAndroid Build Coastguard Worker private: 81*4d7e907cSAndroid Build Coastguard Worker sp<Contexthub> mContexthub; 82*4d7e907cSAndroid Build Coastguard Worker }; 83*4d7e907cSAndroid Build Coastguard Worker 84*4d7e907cSAndroid Build Coastguard Worker status_t mInitCheck; 85*4d7e907cSAndroid Build Coastguard Worker const struct context_hub_module_t *mContextHubModule; 86*4d7e907cSAndroid Build Coastguard Worker std::unordered_map<uint32_t, CachedHubInformation> mCachedHubInfo; 87*4d7e907cSAndroid Build Coastguard Worker 88*4d7e907cSAndroid Build Coastguard Worker sp<DeathRecipient> mDeathRecipient; 89*4d7e907cSAndroid Build Coastguard Worker bool mIsTransactionPending; 90*4d7e907cSAndroid Build Coastguard Worker uint32_t mTransactionId; 91*4d7e907cSAndroid Build Coastguard Worker 92*4d7e907cSAndroid Build Coastguard Worker bool isValidHubId(uint32_t hubId); 93*4d7e907cSAndroid Build Coastguard Worker 94*4d7e907cSAndroid Build Coastguard Worker sp<IContexthubCallback> getCallBackForHubId(uint32_t hubId); 95*4d7e907cSAndroid Build Coastguard Worker 96*4d7e907cSAndroid Build Coastguard Worker int handleOsMessage(sp<IContexthubCallback> cb, 97*4d7e907cSAndroid Build Coastguard Worker uint32_t msgType, 98*4d7e907cSAndroid Build Coastguard Worker const uint8_t *msg, 99*4d7e907cSAndroid Build Coastguard Worker int msgLen); 100*4d7e907cSAndroid Build Coastguard Worker 101*4d7e907cSAndroid Build Coastguard Worker // Handle the case where the callback registered for the given hub ID dies 102*4d7e907cSAndroid Build Coastguard Worker void handleServiceDeath(uint32_t hubId); 103*4d7e907cSAndroid Build Coastguard Worker 104*4d7e907cSAndroid Build Coastguard Worker static int contextHubCb(uint32_t hubId, 105*4d7e907cSAndroid Build Coastguard Worker const struct hub_message_t *rxMsg, 106*4d7e907cSAndroid Build Coastguard Worker void *cookie); 107*4d7e907cSAndroid Build Coastguard Worker 108*4d7e907cSAndroid Build Coastguard Worker bool setOsAppAsDestination(hub_message_t *msg, int hubId); 109*4d7e907cSAndroid Build Coastguard Worker 110*4d7e907cSAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(Contexthub); 111*4d7e907cSAndroid Build Coastguard Worker }; 112*4d7e907cSAndroid Build Coastguard Worker 113*4d7e907cSAndroid Build Coastguard Worker extern "C" IContexthub *HIDL_FETCH_IContexthub(const char *name); 114*4d7e907cSAndroid Build Coastguard Worker 115*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 116*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0 117*4d7e907cSAndroid Build Coastguard Worker } // namespace contexthub 118*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 119*4d7e907cSAndroid Build Coastguard Worker } // namespace android 120*4d7e907cSAndroid Build Coastguard Worker 121*4d7e907cSAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_CONTEXTHUB_V1_0_CONTEXTHUB_H_ 122