1e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/* 2e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Copyright (C) 2016 The Android Open Source Project 3e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 4e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 5e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * you may not use this file except in compliance with the License. 6e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * You may obtain a copy of the License at 7e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 8e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * http://www.apache.org/licenses/LICENSE-2.0 9e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 10e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Unless required by applicable law or agreed to in writing, software 11e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 12e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * See the License for the specific language governing permissions and 14e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * limitations under the License. 15e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 16e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 17e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#ifndef CHRE_CORE_EVENT_H_ 18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_CORE_EVENT_H_ 19e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre_api/chre/event.h" 21b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol#include "chre/platform/assert.h" 22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/util/non_copyable.h" 23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include <cstdint> 25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddienamespace chre { 27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 28161e2e84682b0b70467f96d572565149c292592eBrian Duddie//! Instance ID used for events sent by the system 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieconstexpr uint32_t kSystemInstanceId = 0; 30161e2e84682b0b70467f96d572565149c292592eBrian Duddie 31161e2e84682b0b70467f96d572565149c292592eBrian Duddie//! Target instance ID used to deliver a message to all nanoapps registered for 32161e2e84682b0b70467f96d572565149c292592eBrian Duddie//! the event 33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieconstexpr uint32_t kBroadcastInstanceId = UINT32_MAX; 34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 35161e2e84682b0b70467f96d572565149c292592eBrian Duddie//! This value can be used in a nanoapp's own instance ID to indicate that the 36161e2e84682b0b70467f96d572565149c292592eBrian Duddie//! ID is invalid/not assigned yet 37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieconstexpr uint32_t kInvalidInstanceId = kBroadcastInstanceId; 38e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 39e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieclass Event : public NonCopyable { 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie public: 41161e2e84682b0b70467f96d572565149c292592eBrian Duddie Event(uint16_t eventType, void *eventData, 42161e2e84682b0b70467f96d572565149c292592eBrian Duddie chreEventCompleteFunction *freeCallback, 43161e2e84682b0b70467f96d572565149c292592eBrian Duddie uint32_t senderInstanceId = kSystemInstanceId, 44161e2e84682b0b70467f96d572565149c292592eBrian Duddie uint32_t targetInstanceId = kBroadcastInstanceId); 45161e2e84682b0b70467f96d572565149c292592eBrian Duddie 46b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol void incrementRefCount() { 47b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol mRefCount++; 48b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol CHRE_ASSERT(mRefCount != 0); 49b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol } 50b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol 51b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol void decrementRefCount() { 52b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol CHRE_ASSERT(mRefCount > 0); 53b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol mRefCount--; 54b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol } 55b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol 56b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol bool isUnreferenced() const { 57b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol return (mRefCount == 0); 58b75315a3e185b4559d73c69eea3b30679239fac1Andrew Rossignol } 59e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 60e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie const uint16_t eventType; 61e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie void * const eventData; 62926f1b91231f88c3669f10dec8f56e24ae16b957Andrew Rossignol chreEventCompleteFunction * const freeCallback; 63e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie const uint32_t senderInstanceId; 64e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie const uint32_t targetInstanceId; 65e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 66e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie private: 67e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie size_t mRefCount = 0; 68e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie}; 69e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 70e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 71e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 72e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif // CHRE_CORE_EVENT_H_ 73