Skip to content

Commit

Permalink
Added advanced assert, added to_base64 functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
falkkyburz committed Feb 25, 2023
1 parent 02a83d9 commit 28b54fe
Show file tree
Hide file tree
Showing 13 changed files with 365 additions and 55 deletions.
7 changes: 4 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@
"pdsp_math.h": "c",
"pdsp_types.h": "c",
"pdsp_cfg.h": "c",
"math.h": "c",
"corecrt_math.h": "c"
"pdsp.h": "c",
"pdsp_inline.h": "c",
"pdsp_macro.h": "c",
"pdsp_assert.h": "c"
}

}
10 changes: 7 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,27 @@ TARGET=pdsp_test
CC=gcc
SIZE=size
OBJDUMP=objdump
CFLAGS=-Wall -O0
INC=-I .
CFLAGS=-Wall -O0 -Werror -Wextra
INC=-I./

.PHONY: all
all: clean prepare $(BUILD)/$(TARGET) info help run

prepare: clean
mkdir $(BUILD)

$(BUILD)/$(TARGET): $(BUILD)/pdsp.o $(BUILD)/pdsp_test.o
$(BUILD)/$(TARGET): $(BUILD)/pdsp.o $(BUILD)/pdsp_test.o $(BUILD)/pdsp_assert.o
$(info Link target:)
$(CC) $(CFLAGS) -o $@ $^

$(BUILD)/pdsp.o: $(SRC)/pdsp.c
$(info Compile pdsp.c:)
$(CC) $(CFLAGS) $(INC) -c -o $@ $<

$(BUILD)/pdsp_assert.o: $(SRC)/pdsp_assert.c
$(info Compile pdsp_assert.c:)
$(CC) $(CFLAGS) $(INC) -c -o $@ $<

$(BUILD)/pdsp_test.o: $(TEST)/pdsp_test.c
$(info Compile ./test/pdsp_test.c:)
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
Expand Down
76 changes: 57 additions & 19 deletions pdsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,20 @@
INCLUDE FILES
=============================================================================*/
#include "pdsp.h"
#include "pdsp_assert.h"
#include "pdsp_cfg.h"
#include "pdsp_types.h"
#include <math.h>
#include <stdbool.h>
#include <stddef.h>

/*==============================================================================
GLOBAL CONSTANTS
=============================================================================*/
#ifdef PDSP_ASSERT_LIST
static pdsp_char_t *pdsp_assert_filename = "pdsp.c";
#endif

static const pdsp_u16_t pdsp_mask_i16[16] = {
0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,
0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF};
Expand All @@ -49,6 +56,13 @@ static pdsp_char_t pdsp_base16_map[16] = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F'};

static pdsp_char_t pdsp_base64_map[64] = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};

/*==============================================================================
PRIVATE FUNCTION PROTOTYPES
=============================================================================*/
Expand Down Expand Up @@ -88,13 +102,13 @@ pdsp_extern pdsp_u32_t pdsp_stopwatch_stop(const pdsp_stopwatch_t *ps_data,

pdsp_extern pdsp_i16_t pdsp_call_i16_func(const pdsp_pi16_func_t apf_list[],
pdsp_size_t s_size,
pdsp_i16_t i16_idx,
pdsp_u16_t u16_idx,
pdsp_i16_t *i16_out)
{
PDSP_ASSERT((apf_list != NULL) && (i16_out != NULL) && s_size);
if ((apf_list[i16_idx] != PDSP_NULL) && (i16_idx < s_size))
if ((apf_list[u16_idx] != PDSP_NULL) && (u16_idx < s_size))
{
*i16_out = apf_list[i16_idx]();
*i16_out = apf_list[u16_idx]();
return PDSP_OK;
}
return PDSP_ILLEGAL;
Expand Down Expand Up @@ -275,22 +289,46 @@ pdsp_extern pdsp_char_t *pdsp_u32_to_base16(pdsp_char_t *dest, pdsp_u32_t src)
pdsp_extern pdsp_char_t *pdsp_u64_to_base16(pdsp_char_t *dest, pdsp_u64_t src)
{
PDSP_ASSERT(dest != NULL);
*dest++ = pdsp_base16_map[((src >> 60) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 56) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 52) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 48) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 44) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 40) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 36) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 32) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 28) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 24) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 20) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 16) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 12) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 8) & 0xF)];
*dest++ = pdsp_base16_map[((src >> 4) & 0xF)];
*dest++ = pdsp_base16_map[(src & 0xF)];
dest = pdsp_u32_to_base16(dest, (src >> 32) & 0xFFFFFFFF);
dest = pdsp_u32_to_base16(dest, src & 0xFFFFFFFF);
return dest;
}

pdsp_extern pdsp_char_t *pdsp_u16_to_base64(pdsp_char_t *dest, pdsp_u16_t src)
{
PDSP_ASSERT(dest != NULL);
*dest++ = pdsp_base64_map[((src >> 10) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 4) & 0x3F)];
*dest++ = pdsp_base64_map[((src << 2) & 0x3F)];
return dest;
}

pdsp_extern pdsp_char_t *pdsp_u32_to_base64(pdsp_char_t *dest, pdsp_u32_t src)
{
PDSP_ASSERT(dest != NULL);
*dest++ = pdsp_base64_map[((src >> 26) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 20) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 14) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 8) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 2) & 0x3F)];
*dest++ = pdsp_base64_map[((src << 4) & 0x3F)];
return dest;
}

pdsp_extern pdsp_char_t *pdsp_u64_to_base64(pdsp_char_t *dest, pdsp_u64_t src)
{
PDSP_ASSERT(dest != NULL);
*dest++ = pdsp_base64_map[((src >> 58) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 52) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 46) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 40) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 34) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 28) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 22) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 16) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 10) & 0x3F)];
*dest++ = pdsp_base64_map[((src >> 4) & 0x3F)];
*dest++ = pdsp_base64_map[((src << 2) & 0x3F)];
return dest;
}

Expand Down
38 changes: 31 additions & 7 deletions pdsp.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
INCLUDE FILES
=============================================================================*/
#include "pdsp_cfg.h"
#include "pdsp_math.h"
#include "pdsp_types.h"
#include "pdsp_math.h"
#include <math.h>

/*==============================================================================
Expand Down Expand Up @@ -1186,14 +1186,14 @@ pdsp_extern pdsp_u32_t pdsp_stopwatch_stop(const pdsp_stopwatch_t *ps_data,
*
* @param apf_list List of function pointers.
* @param s_size Array size.
* @param i16_idx Index for the function pointer array.
* @param u16_idx Index for the function pointer array.
* @param i16_out Return value of the called function.
* @return pdsp_i16_t Returns PDSP_OK, except if the table entry was NULL or the
* index is out or range, then PDSP_ILLEGAL is returned.
*/
pdsp_extern pdsp_i16_t pdsp_call_i16_func(const pdsp_pi16_func_t apf_list[],
pdsp_size_t s_size,
pdsp_i16_t i16_idx,
pdsp_u16_t u16_idx,
pdsp_i16_t *i16_out);

/**
Expand Down Expand Up @@ -1225,7 +1225,7 @@ pdsp_extern pdsp_char_t *pdsp_i16_to_string(pdsp_i16_t i16_in,
pdsp_char_t *a6c_out);

/**
* @brief Convert u8 data into base16 hex.
* @brief Convert u8 data into base16.
* @param dest Destination buffer.
* @param src Source buffer.
* @param size_src Source buffer size.
Expand All @@ -1235,29 +1235,53 @@ pdsp_extern pdsp_char_t *
pdsp_u8_to_base16(pdsp_char_t *dest, const pdsp_u8_t *src, size_t size_src);

/**
* @brief Convert u16 data into base16 hex.
* @brief Convert u16 data into base16.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u16_to_base16(pdsp_char_t *dest, pdsp_u16_t src);

/**
* @brief Convert u32 data into base16 hex.
* @brief Convert u32 data into base16.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u32_to_base16(pdsp_char_t *dest, pdsp_u32_t src);

/**
* @brief Convert u64 data into base16 hex.
* @brief Convert u64 data into base16.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u64_to_base16(pdsp_char_t *dest, pdsp_u64_t src);

/**
* @brief Convert u16 data into base64.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u16_to_base64(pdsp_char_t *dest, pdsp_u16_t src);

/**
* @brief Convert u32 data into base64.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u32_to_base64(pdsp_char_t *dest, pdsp_u32_t src);

/**
* @brief Convert u64 data into base64.
* @param dest Destination buffer.
* @param src Source buffer.
* @return pdsp_char_t*
*/
pdsp_extern pdsp_char_t *pdsp_u64_to_base64(pdsp_char_t *dest, pdsp_u64_t src);

/**
* @brief Convert the number u16_in to a hex string.
* @param u16_in Input number.
Expand Down
74 changes: 74 additions & 0 deletions pdsp_assert.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/** @file pdsp_assert.c
*
* @author Falk Kyburz
* @brief On board charger power train control module.
*
* @copyright
* This is free and unencumbered software released into the public domain.
*
* Anyone is free to copy, modify, publish, use, compile, sell, or
* distribute this software, either in source code form or as a compiled
* binary, for any purpose, commercial or non-commercial, and by any
* means.
*
* In jurisdictions that recognize copyright laws, the author or authors
* of this software dedicate any and all copyright interest in the
* software to the public domain. We make this dedication for the benefit
* of the public at large and to the detriment of our heirs and
* successors. We intend this dedication to be an overt act of
* relinquishment in perpetuity of all present and future rights to this
* software under copyright law.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* For more information, please refer to <https://unlicense.org>
*/

/*==============================================================================
INCLUDE FILES
=============================================================================*/
#include "pdsp_cfg.h"
#include "pdsp_types.h"
#include "pdsp_assert.h"



/*==============================================================================
GLOBAL CONSTANTS
=============================================================================*/
#ifdef PDSP_ASSERT_LIST
pdsp_assert_t pdsp_assert_list[PDSP_ASSERT_LIST_SIZE];
pdsp_u16_t pdsp_assert_idx;
#endif /* PDSP_ASSERT_LIST */

/*==============================================================================
PRIVATE FUNCTIOS PROTOTYPES
=============================================================================*/


/*==============================================================================
PRIVATE FUNCTIO PROTOTYPES
=============================================================================*/


/*==============================================================================
GLOBAL FUNCTIOS
=============================================================================*/

#ifdef PDSP_ASSERT_LIST
void pdsp_assert_list_print(void)
{
pdsp_i16_t i = 0;
for (i = 0; i < pdsp_assert_idx; i++)
{
printf(" #%i File: %s Line: %i", i, pdsp_assert_list[i].file,
pdsp_assert_list[i].line);
}
}
#endif /* PDSP_ASSERT_LIST */
Loading

0 comments on commit 28b54fe

Please sign in to comment.