blob: 6987ebb82312c110d04910bf8a03f8ee16496a40 [file] [log] [blame]
/*
* Copyright (C) 2020 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.
*/
// This file was automatically generated by chre_api_to_chpp.py
// Date: 2020-07-08 23:38:49 UTC
// Source: chre_api/include/chre_api/chre/wifi.h @ commit 3addfee7
// DO NOT modify this file directly, as those changes will be lost the next
// time the script is executed
#include "chpp/macros.h"
#include "chpp/memory.h"
#include "chpp/services/wifi_types.h"
#include <stddef.h>
#include <stdint.h>
#include <string.h>
//! @return number of bytes required to represent the given
//! chreWifiScanEvent along with the CHPP header as
//! struct ChppWifiScanEventWithHeader
static size_t chppWifiSizeOfScanEventFromChre(
const struct chreWifiScanEvent *scanEvent) {
size_t encodedSize = sizeof(struct ChppWifiScanEventWithHeader);
encodedSize += scanEvent->scannedFreqListLen * sizeof(uint32_t);
encodedSize += scanEvent->resultCount * sizeof(struct ChppWifiScanResult);
return encodedSize;
}
//! @return number of bytes required to represent the given
//! chreWifiScanParams along with the CHPP header as
//! struct ChppWifiScanParamsWithHeader
static size_t chppWifiSizeOfScanParamsFromChre(
const struct chreWifiScanParams *scanParams) {
size_t encodedSize = sizeof(struct ChppWifiScanParamsWithHeader);
encodedSize += scanParams->frequencyListLen * sizeof(uint32_t);
encodedSize += scanParams->ssidListLen * sizeof(struct ChppWifiSsidListItem);
return encodedSize;
}
static void chppWifiConvertScanResultFromChre(
const struct chreWifiScanResult *in, struct ChppWifiScanResult *out) {
out->ageMs = in->ageMs;
out->capabilityInfo = in->capabilityInfo;
out->ssidLen = in->ssidLen;
memcpy(out->ssid, in->ssid, sizeof(out->ssid));
memcpy(out->bssid, in->bssid, sizeof(out->bssid));
out->flags = in->flags;
out->rssi = in->rssi;
out->band = in->band;
out->primaryChannel = in->primaryChannel;
out->centerFreqPrimary = in->centerFreqPrimary;
out->centerFreqSecondary = in->centerFreqSecondary;
out->channelWidth = in->channelWidth;
out->securityMode = in->securityMode;
out->radioChain = in->radioChain;
out->rssiChain0 = in->rssiChain0;
out->rssiChain1 = in->rssiChain1;
memset(&out->reserved, 0, sizeof(out->reserved));
}
static void chppWifiConvertScanEventFromChre(const struct chreWifiScanEvent *in,
struct ChppWifiScanEvent *out,
uint8_t *payload,
size_t payloadSize,
uint16_t *vlaOffset) {
out->version = CHRE_WIFI_SCAN_EVENT_VERSION;
out->resultCount = in->resultCount;
out->resultTotal = in->resultTotal;
out->eventIndex = in->eventIndex;
out->scanType = in->scanType;
out->ssidSetSize = in->ssidSetSize;
out->scannedFreqListLen = in->scannedFreqListLen;
out->referenceTime = in->referenceTime;
uint32_t *scannedFreqList = (uint32_t *)&payload[*vlaOffset];
out->scannedFreqList.length = in->scannedFreqListLen * sizeof(uint32_t);
CHPP_ASSERT(*vlaOffset + out->scannedFreqList.length <= payloadSize);
if (out->scannedFreqList.length > 0 &&
*vlaOffset + out->scannedFreqList.length <= payloadSize) {
out->scannedFreqList.offset = *vlaOffset;
*vlaOffset += out->scannedFreqList.length;
for (size_t i = 0; i < in->scannedFreqListLen; i++) {
scannedFreqList[i] = in->scannedFreqList[i];
}
} else {
out->scannedFreqList.offset = 0;
}
struct ChppWifiScanResult *results =
(struct ChppWifiScanResult *)&payload[*vlaOffset];
out->results.length = in->resultCount * sizeof(struct ChppWifiScanResult);
CHPP_ASSERT(*vlaOffset + out->results.length <= payloadSize);
if (out->results.length > 0 &&
*vlaOffset + out->results.length <= payloadSize) {
out->results.offset = *vlaOffset;
*vlaOffset += out->results.length;
for (size_t i = 0; i < in->resultCount; i++) {
chppWifiConvertScanResultFromChre(&in->results[i], &results[i]);
}
} else {
out->results.offset = 0;
}
out->radioChainPref = in->radioChainPref;
}
static void chppWifiConvertSsidListItemFromChre(
const struct chreWifiSsidListItem *in, struct ChppWifiSsidListItem *out) {
out->ssidLen = in->ssidLen;
memcpy(out->ssid, in->ssid, sizeof(out->ssid));
}
static void chppWifiConvertScanParamsFromChre(
const struct chreWifiScanParams *in, struct ChppWifiScanParams *out,
uint8_t *payload, size_t payloadSize, uint16_t *vlaOffset) {
out->scanType = in->scanType;
out->maxScanAgeMs = in->maxScanAgeMs;
out->frequencyListLen = in->frequencyListLen;
uint32_t *frequencyList = (uint32_t *)&payload[*vlaOffset];
out->frequencyList.length = in->frequencyListLen * sizeof(uint32_t);
CHPP_ASSERT(*vlaOffset + out->frequencyList.length <= payloadSize);
if (out->frequencyList.length > 0 &&
*vlaOffset + out->frequencyList.length <= payloadSize) {
out->frequencyList.offset = *vlaOffset;
*vlaOffset += out->frequencyList.length;
for (size_t i = 0; i < in->frequencyListLen; i++) {
frequencyList[i] = in->frequencyList[i];
}
} else {
out->frequencyList.offset = 0;
}
out->ssidListLen = in->ssidListLen;
struct ChppWifiSsidListItem *ssidList =
(struct ChppWifiSsidListItem *)&payload[*vlaOffset];
out->ssidList.length = in->ssidListLen * sizeof(struct ChppWifiSsidListItem);
CHPP_ASSERT(*vlaOffset + out->ssidList.length <= payloadSize);
if (out->ssidList.length > 0 &&
*vlaOffset + out->ssidList.length <= payloadSize) {
out->ssidList.offset = *vlaOffset;
*vlaOffset += out->ssidList.length;
for (size_t i = 0; i < in->ssidListLen; i++) {
chppWifiConvertSsidListItemFromChre(&in->ssidList[i], &ssidList[i]);
}
} else {
out->ssidList.offset = 0;
}
out->radioChainPref = in->radioChainPref;
}
bool chppWifiScanEventFromChre(const struct chreWifiScanEvent *in,
struct ChppWifiScanEventWithHeader **out,
size_t *outSize) {
CHPP_NOT_NULL(out);
CHPP_NOT_NULL(outSize);
size_t payloadSize = chppWifiSizeOfScanEventFromChre(in);
*out = chppMalloc(payloadSize);
if (*out != NULL) {
uint8_t *payload = (uint8_t *)&(*out)->payload;
uint16_t vlaOffset = sizeof(struct ChppWifiScanEvent);
chppWifiConvertScanEventFromChre(in, &(*out)->payload, payload, payloadSize,
&vlaOffset);
*outSize = payloadSize;
return true;
}
return false;
}
bool chppWifiScanParamsFromChre(const struct chreWifiScanParams *in,
struct ChppWifiScanParamsWithHeader **out,
size_t *outSize) {
CHPP_NOT_NULL(out);
CHPP_NOT_NULL(outSize);
size_t payloadSize = chppWifiSizeOfScanParamsFromChre(in);
*out = chppMalloc(payloadSize);
if (*out != NULL) {
uint8_t *payload = (uint8_t *)&(*out)->payload;
uint16_t vlaOffset = sizeof(struct ChppWifiScanParams);
chppWifiConvertScanParamsFromChre(in, &(*out)->payload, payload,
payloadSize, &vlaOffset);
*outSize = payloadSize;
return true;
}
return false;
}