/* * Copyright (C) 2015 The Android Open Source Project * * 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. */ #ifndef ANDROID_RADIO_METADATA_HIDDEN_H #define ANDROID_RADIO_METADATA_HIDDEN_H #include <stdbool.h> #include <system/radio.h> #include <system/radio_metadata.h> /* default size allocated for a metadata buffer in 32 bits units */ #define RADIO_METADATA_DEFAULT_SIZE 64 /* maximum size allocated for a metadata buffer in 32 bits units */ #define RADIO_METADATA_MAX_SIZE (RADIO_METADATA_DEFAULT_SIZE << 12) /* meta data entry in a meta data buffer */ typedef struct radio_metadata_entry { radio_metadata_key_t key; radio_metadata_type_t type; unsigned int size; unsigned char data[]; } radio_metadata_entry_t; /** * meta data buffer layout: * * | <--- 32 bit ---> | * |---------------------------| * | channel | * |---------------------------| * | sub_channel | * |---------------------------| * | size_int | total size in 32 bit units including header and index * |---------------------------| * | count | number of entries * |---------------------------|<--+ * | first entry | | * | | | * |---------------------------|<+ | * | second entry | | | * | | | | * | | | | * |---------------------------| | | * | : | | | * |---------------------------| | | \ * | offset of next free space | | | | * |---------------------------| | | | * | : | | | | * |---------------------------| | | > index * | offset of second entry |-+ | | * |---------------------------| | | * | offset of first entry |---+ | * |---------------------------| / * * A radio meta data buffer is allocated with radio_metadata_allocate() and released with * radio_metadata_deallocate(). * Meta data entries are added with radio_metadata_add_xxx() where xxx is int, text or raw. * The buffer is allocated with a default size (RADIO_METADATA_DEFAULT_SIZE entries) * by radio_metadata_allocate() and reallocated if needed by radio_metadata_add_xxx() */ /* Radio meta data buffer header */ typedef struct radio_metadata_buffer { unsigned int channel; /* channel (frequency) this meta data is associated with */ unsigned int sub_channel; /* sub channel this meta data is associated with */ unsigned int size_int; /* Total size in 32 bit word units */ unsigned int count; /* number of meta data entries */ } radio_metadata_buffer_t; #endif // ANDROID_RADIO_METADATA_HIDDEN_H