19d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie/* 29d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * Copyright (C) 2017 The Android Open Source Project 39d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * 49d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 59d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * you may not use this file except in compliance with the License. 69d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * You may obtain a copy of the License at 79d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * 89d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * http://www.apache.org/licenses/LICENSE-2.0 99d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * 109d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * Unless required by applicable law or agreed to in writing, software 119d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 129d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * See the License for the specific language governing permissions and 149d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * limitations under the License. 159d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie */ 169d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie 179d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#ifndef CHRE_PLATFORM_LINUX_STATIC_NANOAPP_INIT_H_ 189d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#define CHRE_PLATFORM_LINUX_STATIC_NANOAPP_INIT_H_ 199d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie 209d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#include "chre/core/nanoapp.h" 219d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#include "chre/platform/fatal_error.h" 229d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#include "chre/util/unique_ptr.h" 239d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie 249d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie/** 259d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * Initializes a static nanoapp that is based on the Linux implementation of 269d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * PlatformNanoappBase. 279d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * 289d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * @param appName the name of the nanoapp. This will be prefixed by gNanoapp 299d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * when creating the global instance of the nanoapp. 309d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie * @param appId the app's unique 64-bit ID 319d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie */ 32fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol#define CHRE_STATIC_NANOAPP_INIT(appName, appId_, appVersion_) \ 33fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignolnamespace chre { \ 34fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol \ 35fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew RossignolUniquePtr<Nanoapp> initializeStaticNanoapp##appName() { \ 36fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol UniquePtr<Nanoapp> nanoapp = MakeUnique<Nanoapp>(); \ 37fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol static struct chreNslNanoappInfo appInfo; \ 38fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.magic = CHRE_NSL_NANOAPP_INFO_MAGIC; \ 39fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.structMinorVersion = \ 40fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol CHRE_NSL_NANOAPP_INFO_STRUCT_MINOR_VERSION; \ 41fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.targetApiVersion = CHRE_API_VERSION; \ 42fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.vendor = "Google"; /* TODO: make this configurable */ \ 43fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.name = #appName; \ 44fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.isSystemNanoapp = true; \ 45fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.isTcmNanoapp = false; \ 46fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.appId = appId_; \ 47fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.appVersion = appVersion_; \ 48fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.entryPoints.start = nanoappStart; \ 49fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.entryPoints.handleEvent = nanoappHandleEvent; \ 50fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol appInfo.entryPoints.end = nanoappEnd; \ 51fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol if (nanoapp.isNull()) { \ 52fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol FATAL_ERROR("Failed to allocate nanoapp " #appName); \ 53fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol } else { \ 54fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol nanoapp->loadStatic(&appInfo); \ 55fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol } \ 56fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol \ 57fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol return nanoapp; \ 58fc4d354a2ad34172f508a9017b49747b9193eaf8Andrew Rossignol} \ 599d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie} /* namespace chre */ 609d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie 619d5b500a223ef73560f0dce38f50b809bde5dd0dBrian Duddie#endif // CHRE_PLATFORM_LINUX_STATIC_NANOAPP_INIT_H_ 62