/* * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include typedef struct AppInboxConsumerInfo AppInboxConsumerInfo; //! @param data Pointer to the available data. //! @param length The length of the available data. //! @param consumer_info Opaque context object to be passed into app_inbox_consume(). It is NOT //! mandatory for the handler to call app_inbox_consume(). typedef void (*AppInboxMessageHandler)(const uint8_t *data, size_t length, AppInboxConsumerInfo *consumer_info); typedef void (*AppInboxDroppedHandler)(uint32_t num_dropped_messages); //! Opaque reference to an app inbox. typedef struct AppInbox AppInbox; //! @param min_num_messages The minimum number of messages that the inbox should be able to hold //! if the total payload size is exactly buffer_size. This is used to calculate how much additional //! buffer space has to be allocated for message header overhead. //! @param message_handler The callback that will handle received messages (required). //! @param dropped_handler The callback that will handle dropped messages (optional, use NULL if //! not needed). //! @note The system only allows certain handlers, see prv_tag_for_event_handlers() //! in app_inbox_service.c. //! @return An opaque value that can be used with app_inbox_destroy_and_deregister, or NULL //! if the process failed. AppInbox *app_inbox_create_and_register(size_t buffer_size, uint32_t min_num_messages, AppInboxMessageHandler message_handler, AppInboxDroppedHandler dropped_handler); //! @param app_inbox_ref The app inbox to destroy, pass in the value that //! app_inbox_create_and_register returned. //! @return The number of messages that were dropped, plus the ones that were still waiting //! to be consumed. uint32_t app_inbox_destroy_and_deregister(AppInbox *app_inbox_ref); //! Call this function from a AppInboxMessageHandler to immediately consume the message and free //! up the space in the buffer that was occupied by the message. //! @param consume_info The opaque context object as passed into the AppInboxMessageHandler. void app_inbox_consume(AppInboxConsumerInfo *consume_info);