Commit e3fc08ed authored by Rúben Soares Silva's avatar Rúben Soares Silva Committed by Robert Schmidt

Move DCI payload generation functions to new file

Create header file with DCI payload generation
functions in order for them to be available to
the remainder P7 unitary tests
parent 437149ae
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
*
* 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.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
#define OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
#include "nfapi/tests/nr_fapi_test.h"
void printbits(const uint64_t n, const uint8_t numBytesToPrint)
{
uint64_t i;
uint8_t counter = 0;
if (numBytesToPrint == 0) {
i = 1UL << (sizeof(n) * 8 - 1);
} else {
i = 1UL << (numBytesToPrint * 8 - 1);
}
while (i > 0) {
if (n & i)
printf("1");
else
printf("0");
i >>= 1;
counter++;
if (counter % 8 == 0) {
printf(" ");
}
}
}
/*! \brief Drops unwanted bits from a byte array, leaving only a specified number of payload bits
*
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
* \param payload[] A uint8_t array containing the payload bytes with random data
* \details This function creates a bitmask of payloadSizeBits width to truncate the data in payload[] to only have the specified
* number of payload bits\n
* For example, a payload of 39 bits needs 5 bytes, but on the last byte, the last bit is unused, this function makes sure that
* last bit is set to 0, allowing the payload to be then packed and unpacked and successfully compared with the original payload
*/
void truncate_unwanted_bits(uint8_t payloadSizeBits, uint8_t payload[])
{
uint8_t payloadSizeBytes = (payloadSizeBits + 7) / 8;
printf("Original Value:\t");
uint64_t t = 0;
memcpy(&t, payload, payloadSizeBytes);
printbits(t, payloadSizeBytes);
printf("\n");
uint64_t bitmask = 1;
for (int i = 0; i < payloadSizeBits - 1; i++) {
bitmask = bitmask << 1 | 1;
}
printf("Calculated Bitmask:\t");
printbits(bitmask, payloadSizeBytes);
printf("\n");
t = t & bitmask;
printf("Truncated Value:\t");
printbits(t, payloadSizeBytes);
printf("\n");
memcpy(payload, &t, payloadSizeBytes);
}
/*! \brief Generates a random payload payloadSizeBits long into payload[]
*
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
* \param payload[] A uint8_t array to contain the generated payload
* \details This function fills a uint8_t array with payloadSizeBits of random data, by first filling however many bytes are needed
* to contain payloadSizeBits with random data, and then truncating the excess bits
*/
void generate_payload(uint8_t payloadSizeBits, uint8_t payload[])
{
for (int i = 0; i < (payloadSizeBits + 7) / 8; ++i) {
payload[i] = rand8();
}
truncate_unwanted_bits(payloadSizeBits, payload);
}
#endif // OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
......@@ -18,75 +18,8 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "nfapi/tests/nr_fapi_test.h"
#include "dci_payload_utils.h"
#include "nr_fapi.h"
void printbits(uint64_t n, uint8_t numBytesToPrint)
{
uint64_t i;
uint8_t counter = 0;
if (numBytesToPrint == 0) {
i = 1UL << (sizeof(n) * 8 - 1);
} else {
i = 1UL << (numBytesToPrint * 8 - 1);
}
while (i > 0) {
if (n & i)
printf("1");
else
printf("0");
i >>= 1;
counter++;
if (counter % 8 == 0) {
printf(" ");
}
}
}
/*! \brief Drops unwanted bits from a byte array, leaving only a specified number of payload bits
*
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
* \param payload[] A uint8_t array containing the payload bytes with random data
* \details This function creates a bitmask of payloadSizeBits width to truncate the data in payload[] to only have the specified
* number of payload bits\n
* For example, a payload of 39 bits needs 5 bytes, but on the last byte, the last bit is unused, this function makes sure that
* last bit is set to 0, allowing the payload to be then packed and unpacked and successfully compared with the original payload
*/
void truncate_unwanted_bits(uint8_t payloadSizeBits, uint8_t payload[])
{
uint8_t payloadSizeBytes = (payloadSizeBits + 7) / 8;
printf("Original Value:\t");
uint64_t t = 0;
memcpy(&t, payload, payloadSizeBytes);
printbits(t, payloadSizeBytes);
printf("\n");
uint64_t bitmask = 1;
for (int i = 0; i < payloadSizeBits - 1; i++) {
bitmask = bitmask << 1 | 1;
}
printf("Calculated Bitmask:\t");
printbits(bitmask, payloadSizeBytes);
printf("\n");
t = t & bitmask;
printf("Truncated Value:\t");
printbits(t, payloadSizeBytes);
printf("\n");
memcpy(payload, &t, payloadSizeBytes);
}
/*! \brief Generates a random payload payloadSizeBits long into payload[]
*
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
* \param payload[] A uint8_t array to contain the generated payload
* \details This function fills a uint8_t array with payloadSizeBits of random data, by first filling however many bytes are needed
* to contain payloadSizeBits with random data, and then truncating the excess bits
*/
void generate_payload(uint8_t payloadSizeBits, uint8_t payload[])
{
for (int i = 0; i < (payloadSizeBits + 7) / 8; ++i) {
payload[i] = rand8();
}
truncate_unwanted_bits(payloadSizeBits, payload);
}
void test_pack_payload(uint8_t payloadSizeBits, uint8_t payload[])
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment