Compare commits

..

No commits in common. "9402cd779dd6898fb952e411b7249c0ac20271a8" and "19e6ccb292a8c9d769dcdcd92c4167ffdc3841f1" have entirely different histories.

20 changed files with 384 additions and 470 deletions

1
.gitignore vendored
View file

@ -10,4 +10,3 @@ build/cmake_install.cmake
build/compile_commands.json build/compile_commands.json
.cache/clangd/index .cache/clangd/index
build/.cache/clangd/index build/.cache/clangd/index
tags

View file

@ -11,10 +11,6 @@ MODULE_DIR="${TEMPLATE_FILES}/modules"
CHIP="ch32v003" CHIP="ch32v003"
generate_tags_file () { generate_tags_file () {
echo "generate_tags_file()"
# Saving current directory
#CUR_DIR=$(pwd)
uctags --recurse=yes \ uctags --recurse=yes \
--languages=C,C++,Asm \ --languages=C,C++,Asm \
--extras=+q \ --extras=+q \
@ -23,7 +19,7 @@ generate_tags_file () {
--exclude=build \ --exclude=build \
--exclude=.git \ --exclude=.git \
--exclude=.template_files \ --exclude=.template_files \
./ .
} }
format_source_code () { format_source_code () {
@ -291,7 +287,7 @@ flash_microcontroller () {
} }
run_c_tests () { run_c_tests () {
generate_tags_file generate_tags_file()
format_source_code format_source_code
clear_cmake_cache clear_cmake_cache
cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../

View file

@ -1,232 +1,61 @@
/* /*
* Author: Jake G * Author: username
* Date: 2025 * Date: 2024
* filename: RegEdit.c * filename: RegEdit.c
* description: Provides a register editing interface. * description: module_purpose
*/ */
#include "RegEdit.h" #include "RegEdit.h"
// For 64-Bit systems and register access. void RegEdit_SetRegister(void *reg)
void RegEdit_u64_SetRegister(void *reg)
{
uint64_t *reg_ptr = (uint64_t *)reg;
//*reg_ptr = 0xFFFFFFFFFFFFFFFF;
*reg_ptr = UINT64_MAX;
}
void RegEdit_u64_ClearRegister(void *reg)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr = 0;
}
void RegEdit_u64_SetBit(void *reg, uint8_t bit_num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr |= (uint64_t)(1 << bit_num);
}
void RegEdit_u64_ClearBit(void *reg, uint8_t bit_num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr &= ~(1 << bit_num);
}
bool RegEdit_u64_IsBitSet(void *reg, uint8_t bit_num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
return *reg_ptr & (1 << bit_num);
}
void RegEdit_u64_OR_Num(void *reg, uint64_t num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr |= num;
}
void RegEdit_u64_AND_Num(void *reg, uint64_t num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr &= num;
}
void RegEdit_u64_SetNum(void *reg, uint64_t num)
{
uint64_t *reg_ptr = (uint64_t *)reg;
*reg_ptr = num;
}
uint64_t RegEdit_u64_ReadReg(void *reg)
{
uint64_t *reg_ptr = (uint64_t *)reg;
return *reg_ptr;
}
// For 32-Bit systems and register access.
void RegEdit_u32_SetRegister(void *reg)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr = UINT32_MAX;
}
void RegEdit_u32_ClearRegister(void *reg)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr = 0;
}
void RegEdit_u32_SetBit(void *reg, uint8_t bit_num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr |= (uint32_t)(1 << bit_num);
}
void RegEdit_u32_ClearBit(void *reg, uint8_t bit_num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr &= ~(1 << bit_num);
}
bool RegEdit_u32_IsBitSet(void *reg, uint8_t bit_num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
return *reg_ptr & (1 << bit_num);
}
void RegEdit_u32_OR_Num(void *reg, uint32_t num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr |= num;
}
void RegEdit_u32_AND_Num(void *reg, uint32_t num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr &= num;
}
void RegEdit_u32_SetNum(void *reg, uint32_t num)
{
uint32_t *reg_ptr = (uint32_t *)reg;
*reg_ptr = num;
}
uint32_t RegEdit_u32_ReadReg(void *reg)
{
uint32_t *reg_ptr = (uint32_t *)reg;
return *reg_ptr;
}
// For 16-Bit systems and register access.
void RegEdit_u16_SetRegister(void *reg)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr = UINT16_MAX;
}
void RegEdit_u16_ClearRegister(void *reg)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr = 0;
}
void RegEdit_u16_SetBit(void *reg, uint8_t bit_num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr |= (uint16_t)(1 << bit_num);
}
void RegEdit_u16_ClearBit(void *reg, uint8_t bit_num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr &= ~(1 << bit_num);
}
bool RegEdit_u16_IsBitSet(void *reg, uint8_t bit_num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
return *reg_ptr & (1 << bit_num);
}
void RegEdit_u16_OR_Num(void *reg, uint16_t num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr |= num;
}
void RegEdit_u16_AND_Num(void *reg, uint16_t num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr &= num;
}
void RegEdit_u16_SetNum(void *reg, uint16_t num)
{
uint16_t *reg_ptr = (uint16_t *)reg;
*reg_ptr = num;
}
uint16_t RegEdit_u16_ReadReg(void *reg)
{
uint16_t *reg_ptr = (uint16_t *)reg;
return *reg_ptr;
}
// For 8-Bit systems and register access.
void RegEdit_u8_SetRegister(void *reg)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr = UINT8_MAX; *reg_ptr = 0xFF;
} }
void RegEdit_u8_ClearRegister(void *reg) void RegEdit_ClearRegister(void *reg)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr = 0; *reg_ptr = 0x00;
} }
void RegEdit_u8_SetBit(void *reg, uint8_t bit_num) void RegEdit_SetBit(void *reg, uint8_t bit_num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr |= (uint8_t)(1 << bit_num); *reg_ptr |= (uint8_t)(1 << bit_num);
} }
void RegEdit_u8_ClearBit(void *reg, uint8_t bit_num) void RegEdit_ClearBit(void *reg, uint8_t bit_num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr &= ~(1 << bit_num); *reg_ptr &= ~(1 << bit_num);
} }
bool RegEdit_u8_IsBitSet(void *reg, uint8_t bit_num) bool RegEdit_IsBitSet(void *reg, uint8_t bit_num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
return *reg_ptr & (1 << bit_num); return *reg_ptr & (1 << bit_num);
} }
void RegEdit_u8_OR_Num(void *reg, uint8_t num) void RegEdit_OR_Num(void *reg, uint8_t num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr |= num; *reg_ptr |= num;
} }
void RegEdit_u8_AND_Num(void *reg, uint8_t num) void RegEdit_AND_Num(void *reg, uint8_t num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr &= num; *reg_ptr &= num;
} }
void RegEdit_u8_SetNum(void *reg, uint8_t num) void RegEdit_SetNum(void *reg, uint8_t num)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr = num; *reg_ptr = num;
} }
uint8_t RegEdit_u8_ReadReg(void *reg) uint8_t RegEdit_ReadReg(void *reg)
{ {
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
return *reg_ptr; return *reg_ptr;

View file

@ -11,85 +11,67 @@
#define REGEDIT_H #define REGEDIT_H
#include <stdbool.h> #include <stdbool.h>
#include <stddef.h>
#include <stdint.h> #include <stdint.h>
// Template of function signitures.
// XX: RegEdit_uxx
// REGTYPE: fixed width type.
/*
void XX_SetRegister(void *reg);
void XX_ClearRegister(void *reg);
void XX_SetBit(void *reg, uint8_t bit_num);
void XX_ClearBit(void *reg, uint8_t bit_num);
bool XX_IsBitSet(void *reg, uint8_t bit_num);
void XX_OR_Num(void *reg, REGTYPE num);
void XX_AND_Num(void *reg, REGTYPE num);
void XX_SetNum(void *reg, REGTYPE num);
REGTYPE XX_ReadReg(void *reg);
*/
// For 64-Bit systems and register access.
/** /**
* @brief Sets all the bits in pointed register. *
* @param reg The register address. * @param reg The register address.
*/ */
void RegEdit_u64_SetRegister(void *reg); void RegEdit_SetRegister(void *reg);
/** /**
* @brief Clears all the bits in pointed register. *
* @param reg The register address. * @param reg The register address.
*/ */
void RegEdit_u64_ClearRegister(void *reg); void RegEdit_ClearRegister(void *reg);
/** /**
* @brief Set's a specific bit in a register. *
* @param reg The register address. * @param reg The register address.
* @param bit_num The bit location. * @param bit_num The bit location.
*/ */
void RegEdit_u64_SetBit(void *reg, uint8_t bit_num); void RegEdit_SetBit(void *reg, uint8_t bit_num);
void RegEdit_u64_ClearBit(void *reg, uint8_t bit_num);
bool RegEdit_u64_IsBitSet(void *reg, uint8_t bit_num);
void RegEdit_u64_OR_Num(void *reg, uint64_t num);
void RegEdit_u64_AND_Num(void *reg, uint64_t num);
void RegEdit_u64_SetNum(void *reg, uint64_t num);
uint64_t RegEdit_u64_ReadReg(void *reg);
// For 32-Bit systems and register access. /**
*
* @param reg The register address.
* @param bit_num The bit location.
*/
void RegEdit_ClearBit(void *reg, uint8_t bit_num);
void RegEdit_u32_SetRegister(void *reg); /**
void RegEdit_u32_ClearRegister(void *reg); *
void RegEdit_u32_SetBit(void *reg, uint8_t bit_num); * @param reg The register address.
void RegEdit_u32_ClearBit(void *reg, uint8_t bit_num); * @param bit_num The bit location.
bool RegEdit_u32_IsBitSet(void *reg, uint8_t bit_num); * @return
void RegEdit_u32_OR_Num(void *reg, uint32_t num); */
void RegEdit_u32_AND_Num(void *reg, uint32_t num); bool RegEdit_IsBitSet(void *reg, uint8_t bit_num);
void RegEdit_u32_SetNum(void *reg, uint32_t num);
uint32_t RegEdit_u32_ReadReg(void *reg);
// For 16-Bit systems and register access. /**
*
* @param reg The register address.
* @param num The bit location.
*/
void RegEdit_OR_Num(void *reg, uint8_t num);
void RegEdit_u16_SetRegister(void *reg); /**
void RegEdit_u16_ClearRegister(void *reg); *
void RegEdit_u16_SetBit(void *reg, uint8_t bit_num); * @param reg The register address.
void RegEdit_u16_ClearBit(void *reg, uint8_t bit_num); * @param num The bit location.
bool RegEdit_u16_IsBitSet(void *reg, uint8_t bit_num); */
void RegEdit_u16_OR_Num(void *reg, uint16_t num); void RegEdit_AND_Num(void *reg, uint8_t num);
void RegEdit_u16_AND_Num(void *reg, uint16_t num);
void RegEdit_u16_SetNum(void *reg, uint16_t num);
uint16_t RegEdit_u16_ReadReg(void *reg);
// For 8-Bit systems and register access. /**
*
* @param reg The register address.
* @param num The bit location.
*/
void RegEdit_SetNum(void *reg, uint8_t num);
void RegEdit_u8_SetRegister(void *reg); /**
void RegEdit_u8_ClearRegister(void *reg); *
void RegEdit_u8_SetBit(void *reg, uint8_t bit_num); * @param reg The register address.
void RegEdit_u8_ClearBit(void *reg, uint8_t bit_num); */
bool RegEdit_u8_IsBitSet(void *reg, uint8_t bit_num); uint8_t RegEdit_ReadReg(void *reg);
void RegEdit_u8_OR_Num(void *reg, uint8_t num);
void RegEdit_u8_AND_Num(void *reg, uint8_t num);
void RegEdit_u8_SetNum(void *reg, uint8_t num);
uint8_t RegEdit_u8_ReadReg(void *reg);
#endif // REGEDIT_H #endif // REGEDIT_H

View file

@ -8,8 +8,6 @@
#ifndef BLINK_H #ifndef BLINK_H
#define BLINK_H #define BLINK_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h> #include <stdint.h>
extern volatile uint32_t *GPIO_PORT_BSHR; extern volatile uint32_t *GPIO_PORT_BSHR;

View file

@ -11,19 +11,22 @@
extern "C" extern "C"
{ {
#include "ADC.h"
#include "ch32v003hw.h" #include "ch32v003hw.h"
#include "ADC.h"
} }
TEST_GROUP(test_ADC){ TEST_GROUP(test_ADC)
void setup(){ {
void setup()
{
} void teardown(){ }
void teardown()
{
mock().checkExpectations(); mock().checkExpectations();
mock().clear(); mock().clear();
} }
} };
;
TEST(test_ADC, FirstTest) TEST(test_ADC, FirstTest)
{ {
@ -33,13 +36,16 @@ TEST(test_ADC, FirstTest)
TEST(test_ADC, ADC_PowerOnTest) TEST(test_ADC, ADC_PowerOnTest)
{ {
// The ADCON bit should be high in the ADC_CTRL2 register. // The ADCON bit should be high in the ADC_CTRL2 register.
mock().expectOneCall("RegEdit_SetBit").withPointerParameter("reg", (void *)&ADC1->CTLR2).withUnsignedIntParameter("bit_num", ADC_ADON); mock().expectOneCall("RegEdit_SetBit")
.withPointerParameter("reg", (void *) &ADC1->CTLR2)
.withUnsignedIntParameter("bit_num", ADC_ADON);
ADC_PowerOn(); ADC_PowerOn();
} }
TEST(test_ADC, ADC_SetupSetsRegisters) TEST(test_ADC, ADC_SetupSetsRegisters)
{ {
//R32_GPIOD_CFGLR --> 0x40011400 //R32_GPIOD_CFGLR --> 0x40011400
//DESC: PD port configuration register low //DESC: PD port configuration register low
//RESET VALUE--> 0x44444444 //RESET VALUE--> 0x44444444
@ -58,8 +64,11 @@ TEST(test_ADC, ADC_SetupSetsRegisters)
//Setup the ADC clock and divider. The internal HSI-XC is 24MHz. //Setup the ADC clock and divider. The internal HSI-XC is 24MHz.
//Setup PORTD pin(s) as analog input. //Setup PORTD pin(s) as analog input.
/* /*
//Clears control register A for ADC0 //Clears control register A for ADC0
mock().expectOneCall("RegEdit_SetNum") mock().expectOneCall("RegEdit_SetNum")
@ -157,6 +166,7 @@ TEST(test_ADC, ADC_EnablePasses)
*/ */
ADC_Enable(); ADC_Enable();
} }
TEST(test_ADC, ADC_DisablePasses) TEST(test_ADC, ADC_DisablePasses)
@ -185,26 +195,30 @@ TEST(test_ADC, ADC_SetPinSetsRightRegisters)
ADC_SetPin(4); ADC_SetPin(4);
} }
TEST(test_ADC, ADC_SetPinFailsOnInvalidPin) TEST(test_ADC, ADC_SetPinFailsOnInvalidPin)
{ {
ADC_SetPin(8); ADC_SetPin(8);
} }
static uint16_t ADC_ReadValueFake(uint8_t pin_num) static uint16_t ADC_ReadValueFake(uint8_t pin_num)
{ {
return 512; return 512;
} }
TEST_GROUP(test_ADCRead){ TEST_GROUP(test_ADCRead)
void setup(){ {
void setup()
{
UT_PTR_SET(ADC_ReadValue, ADC_ReadValueFake); UT_PTR_SET(ADC_ReadValue, ADC_ReadValueFake);
} }
void teardown() void teardown()
{ {
} }
} };
;
TEST(test_ADCRead, FunctionPointerSwapWorks) TEST(test_ADCRead, FunctionPointerSwapWorks)
{ {
@ -212,3 +226,4 @@ TEST(test_ADCRead, FunctionPointerSwapWorks)
LONGS_EQUAL(512, value); LONGS_EQUAL(512, value);
} }

View file

@ -1,5 +1,6 @@
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
//ImportTestGroups //ImportTestGroups
IMPORT_TEST_GROUP(simple_test); IMPORT_TEST_GROUP(simple_test);
IMPORT_TEST_GROUP(test_ADC); IMPORT_TEST_GROUP(test_ADC);

View file

@ -14,19 +14,23 @@ extern "C"
#include "MockADC.h" #include "MockADC.h"
} }
TEST_GROUP(test_MockADC){ TEST_GROUP(test_MockADC)
void setup(){ {
void setup()
{
} void teardown(){ }
void teardown()
{
mock().checkExpectations(); mock().checkExpectations();
mock().clear(); mock().clear();
} }
} };
;
TEST(test_MockADC, ADC_InitExpects) TEST(test_MockADC, ADC_InitExpects)
{ {
mock().expectOneCall("ADC_Init").withUnsignedIntParameter("pin_num", 7); mock().expectOneCall("ADC_Init")
.withUnsignedIntParameter("pin_num", 7);
ADC_Init(7); ADC_Init(7);
} }
@ -38,6 +42,7 @@ TEST(test_MockADC, ADC_EnableExpects)
ADC_Enable(); ADC_Enable();
} }
TEST(test_MockADC, ADC_DisableExpect) TEST(test_MockADC, ADC_DisableExpect)
{ {
mock().expectOneCall("ADC_Disable"); mock().expectOneCall("ADC_Disable");
@ -50,17 +55,21 @@ TEST(test_MockADC, ADC_ReadValue)
MockADC_ZeroIndex(); MockADC_ZeroIndex();
MockADC_PushValue(512); MockADC_PushValue(512);
mock().expectOneCall("ADC_ReadValue_Impl").withUnsignedIntParameter("pin_num", 0x2); mock().expectOneCall("ADC_ReadValue_Impl")
.withUnsignedIntParameter("pin_num", 0x2);
uint16_t val = ADC_ReadValue(0x2); uint16_t val = ADC_ReadValue(0x2);
LONGS_EQUAL(512, val); LONGS_EQUAL(512, val);
} }
TEST(test_MockADC, ADC_ReadValueReturnsZeroOnEmptyBuffer) TEST(test_MockADC, ADC_ReadValueReturnsZeroOnEmptyBuffer)
{ {
MockADC_ZeroIndex(); MockADC_ZeroIndex();
mock().expectOneCall("ADC_ReadValue_Impl").withUnsignedIntParameter("pin_num", 0x2).andReturnValue(0x0000); mock().expectOneCall("ADC_ReadValue_Impl")
.withUnsignedIntParameter("pin_num", 0x2)
.andReturnValue(0x0000);
uint16_t val = ADC_ReadValue(0x2); uint16_t val = ADC_ReadValue(0x2);
LONGS_EQUAL(0, val); LONGS_EQUAL(0, val);
@ -69,8 +78,7 @@ TEST(test_MockADC, ADC_ReadValueReturnsZeroOnEmptyBuffer)
TEST(test_MockADC, MockADC_PushValueDoesntOverflowArray) TEST(test_MockADC, MockADC_PushValueDoesntOverflowArray)
{ {
MockADC_ZeroIndex(); MockADC_ZeroIndex();
for (int i = 0; i < 257; i++) for(int i = 0; i < 257; i++){
{
MockADC_PushValue(512+i); MockADC_PushValue(512+i);
CHECK_TRUE(MockADC_GetIndex() <= 255); CHECK_TRUE(MockADC_GetIndex() <= 255);
} }

View file

@ -14,55 +14,75 @@ extern "C"
#include "MockRegEdit.h" #include "MockRegEdit.h"
} }
TEST_GROUP(test_MockRegEdit){
void setup(){} void teardown(){
TEST_GROUP(test_MockRegEdit)
{
void setup()
{
}
void teardown()
{
mock().clear(); mock().clear();
} }
} };
;
TEST(test_MockRegEdit, RegEdit_ClearRegisterExpectedCallPasses) TEST(test_MockRegEdit, RegEdit_ClearRegisterExpectedCallPasses)
{ {
uint8_t a; uint8_t a;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_ClearRegister").withPointerParameter("reg", b); mock().expectOneCall("RegEdit_ClearRegister")
.withPointerParameter("reg", b);
RegEdit_ClearRegister(b); RegEdit_ClearRegister(b);
mock().checkExpectations(); mock().checkExpectations();
} }
TEST(test_MockRegEdit, RegEdit_SetRegisterExpectedCallPasses) TEST(test_MockRegEdit, RegEdit_SetRegisterExpectedCallPasses)
{ {
uint8_t a; uint8_t a;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_SetRegister").withPointerParameter("reg", b); mock().expectOneCall("RegEdit_SetRegister")
.withPointerParameter("reg", b);
RegEdit_SetRegister(b); RegEdit_SetRegister(b);
mock().checkExpectations(); mock().checkExpectations();
} }
TEST(test_MockRegEdit, RegEdit_SetBitExpectedCallPasses) TEST(test_MockRegEdit, RegEdit_SetBitExpectedCallPasses)
{ {
uint8_t a; uint8_t a;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_SetBit").withPointerParameter("reg", b).withUnsignedIntParameter("bit_num", 5); mock().expectOneCall("RegEdit_SetBit")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("bit_num", 5);
RegEdit_SetBit(b, 5); RegEdit_SetBit(b, 5);
mock().checkExpectations(); mock().checkExpectations();
} }
TEST(test_MockRegEdit, RegEdit_ClearBitExpectedCallPasses) TEST(test_MockRegEdit, RegEdit_ClearBitExpectedCallPasses)
{ {
uint8_t a; uint8_t a;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_ClearBit").withPointerParameter("reg", b).withUnsignedIntParameter("bit_num", 5); mock().expectOneCall("RegEdit_ClearBit")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("bit_num", 5);
RegEdit_ClearBit(b, 5); RegEdit_ClearBit(b, 5);
@ -74,19 +94,26 @@ TEST(test_MockRegEdit, RegEdit_IsBitSetExpectedCallPasses)
uint8_t a = 0xFF; uint8_t a = 0xFF;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_IsBitSet").withPointerParameter("reg", b).withUnsignedIntParameter("bit_num", 5).andReturnValue(true); mock().expectOneCall("RegEdit_IsBitSet")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("bit_num", 5)
.andReturnValue(true);
CHECK_TRUE(RegEdit_IsBitSet(b, 5)); CHECK_TRUE(RegEdit_IsBitSet(b, 5));
mock().checkExpectations(); mock().checkExpectations();
} }
TEST(test_MockRegEdit, RegEdit_IsBitSetExpectedCallPassesWithFalse) TEST(test_MockRegEdit, RegEdit_IsBitSetExpectedCallPassesWithFalse)
{ {
uint8_t a = 0xFF; uint8_t a = 0xFF;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_IsBitSet").withPointerParameter("reg", b).withUnsignedIntParameter("bit_num", 5).andReturnValue(false); mock().expectOneCall("RegEdit_IsBitSet")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("bit_num", 5)
.andReturnValue(false);
CHECK_FALSE(RegEdit_IsBitSet(b, 5)); CHECK_FALSE(RegEdit_IsBitSet(b, 5));
@ -98,11 +125,16 @@ TEST(test_MockRegEdit, RegEdit_OR_NumExpectedWorks)
uint8_t a = 0xFF; uint8_t a = 0xFF;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_OR_Num").withPointerParameter("reg", b).withUnsignedIntParameter("num", 0x4).andReturnValue(false); mock().expectOneCall("RegEdit_OR_Num")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("num", 0x4)
.andReturnValue(false);
RegEdit_OR_Num(b, 0x4); RegEdit_OR_Num(b, 0x4);
mock().checkExpectations(); mock().checkExpectations();
} }
TEST(test_MockRegEdit, RegEdit_SetNumPasses) TEST(test_MockRegEdit, RegEdit_SetNumPasses)
@ -110,7 +142,10 @@ TEST(test_MockRegEdit, RegEdit_SetNumPasses)
uint32_t a = 0xFFFFFFFF; uint32_t a = 0xFFFFFFFF;
uint32_t *b = &a; uint32_t *b = &a;
mock().expectOneCall("RegEdit_SetNum").withPointerParameter("reg", b).withUnsignedIntParameter("num", 0x4).andReturnValue(false); mock().expectOneCall("RegEdit_SetNum")
.withPointerParameter("reg", b)
.withUnsignedIntParameter("num", 0x4)
.andReturnValue(false);
RegEdit_SetNum(b, 0x4); RegEdit_SetNum(b, 0x4);
@ -122,7 +157,9 @@ TEST(test_MockRegEdit, RegEdit_ReadRegPasses)
uint8_t a = 0xFF; uint8_t a = 0xFF;
uint8_t *b = &a; uint8_t *b = &a;
mock().expectOneCall("RegEdit_ReadReg").withPointerParameter("reg", b).andReturnValue(0xFF); mock().expectOneCall("RegEdit_ReadReg")
.withPointerParameter("reg", b)
.andReturnValue(0xFF);
uint8_t reg_val = RegEdit_ReadReg(b); uint8_t reg_val = RegEdit_ReadReg(b);
LONGS_EQUAL(0xFF, reg_val); LONGS_EQUAL(0xFF, reg_val);

View file

@ -1,5 +1,6 @@
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
//ImportTestGroups //ImportTestGroups
IMPORT_TEST_GROUP(test_MockRegEdit); IMPORT_TEST_GROUP(test_MockRegEdit);
IMPORT_TEST_GROUP(test_MockADC); IMPORT_TEST_GROUP(test_MockADC);

View file

@ -12,15 +12,21 @@ extern "C"
#include "RegEdit.h" #include "RegEdit.h"
} }
TEST_GROUP(test_RegEdit){ TEST_GROUP(test_RegEdit)
void setup(){ {
void setup()
{
} void teardown(){ }
void teardown()
{
}}; }
};
TEST(test_RegEdit, FirstTest) TEST(test_RegEdit, FirstTest)
{ {
//FAIL("Fail me!"); //FAIL("Fail me!");
CHECK(true); CHECK(true);
} }

View file

@ -22,16 +22,19 @@ void fake_delay(unsigned int ms)
return; return;
} }
TEST_GROUP(test_blink){ TEST_GROUP(test_blink)
void setup(){ {
void setup()
{
fake_bshr_reg = 0; fake_bshr_reg = 0;
called = 0; called = 0;
} }
void teardown() void teardown()
{ {
} }
} };
;
TEST(test_blink, UninitializedFuncPointer) TEST(test_blink, UninitializedFuncPointer)
{ {
@ -54,3 +57,5 @@ TEST(test_blink, BlinkChangesReg)
//Unset function pointer //Unset function pointer
delay_ms = 0; delay_ms = 0;
} }

View file

@ -15,6 +15,8 @@ int fake_index = 0;
static bool is_setup = false; static bool is_setup = false;
void ADC_SetPin(uint8_t pin_num) void ADC_SetPin(uint8_t pin_num)
{ {
return; return;
@ -28,7 +30,8 @@ void ADC_Setup(void)
void ADC_Init(uint8_t pin_num) void ADC_Init(uint8_t pin_num)
{ {
mock_c()->actualCall("ADC_Init")->withUnsignedIntParameters("pin_num", pin_num); mock_c()->actualCall("ADC_Init")
->withUnsignedIntParameters("pin_num", pin_num);
} }
void ADC_Enable(void) void ADC_Enable(void)
@ -43,10 +46,10 @@ void ADC_Disable(void)
uint16_t ADC_ReadValue_Impl(uint8_t pin_num) uint16_t ADC_ReadValue_Impl(uint8_t pin_num)
{ {
mock_c()->actualCall("ADC_ReadValue_Impl")->withUnsignedIntParameters("pin_num", pin_num); mock_c()->actualCall("ADC_ReadValue_Impl")
->withUnsignedIntParameters("pin_num", pin_num);
if (fake_index == 0) if(fake_index == 0){
{
return 0; return 0;
} }
return fake_data[--fake_index]; return fake_data[--fake_index];
@ -54,25 +57,27 @@ uint16_t ADC_ReadValue_Impl(uint8_t pin_num)
uint16_t (*ADC_ReadValue)(uint8_t pin_num) = ADC_ReadValue_Impl; uint16_t (*ADC_ReadValue)(uint8_t pin_num) = ADC_ReadValue_Impl;
void MockADC_PushValue(uint16_t value)
{ void MockADC_PushValue(uint16_t value){
if (fake_index >= FAKESIZE - 1) if(fake_index >= FAKESIZE - 1){
{
return; return;
} }
fake_data[fake_index++] = value; fake_data[fake_index++] = value;
} }
void MockADC_ZeroIndex(void) void MockADC_ZeroIndex(void)
{ {
fake_index = 0; fake_index = 0;
} }
int MockADC_GetIndex(void) int MockADC_GetIndex(void)
{ {
return fake_index; return fake_index;
} }
bool MockADC_IsSetup(void) bool MockADC_IsSetup(void)
{ {
return is_setup; return is_setup;

View file

@ -10,8 +10,9 @@
#ifndef MOCKADC_H #ifndef MOCKADC_H
#define MOCKADC_H #define MOCKADC_H
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
void ADC_Setup(void); void ADC_Setup(void);
void ADC_SetPin(uint8_t pin_num); void ADC_SetPin(uint8_t pin_num);

View file

@ -8,52 +8,78 @@
#include "MockRegEdit.h" #include "MockRegEdit.h"
#include "CppUTestExt/MockSupport_c.h" #include "CppUTestExt/MockSupport_c.h"
void RegEdit_SetRegister(void *reg) void RegEdit_SetRegister(void *reg)
{ {
mock_c()->actualCall("RegEdit_SetRegister")->withPointerParameters("reg", reg); mock_c()->actualCall("RegEdit_SetRegister")
->withPointerParameters("reg", reg);
} }
void RegEdit_ClearRegister(void *reg) void RegEdit_ClearRegister(void *reg)
{ {
mock_c()->actualCall("RegEdit_ClearRegister")->withPointerParameters("reg", reg); mock_c()->actualCall("RegEdit_ClearRegister")
->withPointerParameters("reg", reg);
} }
void RegEdit_SetBit(void *reg, uint8_t bit_num) void RegEdit_SetBit(void *reg, uint8_t bit_num)
{ {
mock_c()->actualCall("RegEdit_SetBit")->withPointerParameters("reg", reg)->withUnsignedIntParameters("bit_num", bit_num); mock_c()->actualCall("RegEdit_SetBit")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("bit_num", bit_num);
} }
void RegEdit_ClearBit(void *reg, uint8_t bit_num) void RegEdit_ClearBit(void *reg, uint8_t bit_num)
{ {
mock_c()->actualCall("RegEdit_ClearBit")->withPointerParameters("reg", reg)->withUnsignedIntParameters("bit_num", bit_num); mock_c()->actualCall("RegEdit_ClearBit")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("bit_num", bit_num);
} }
bool RegEdit_IsBitSet(void *reg, uint8_t bit_num) bool RegEdit_IsBitSet(void *reg, uint8_t bit_num)
{ {
return mock_c()->actualCall("RegEdit_IsBitSet")->withPointerParameters("reg", reg)->withUnsignedIntParameters("bit_num", bit_num)->returnBoolValueOrDefault(true);
return mock_c()->actualCall("RegEdit_IsBitSet")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("bit_num", bit_num)
->returnBoolValueOrDefault(true);
//return mock_c()->returnBoolValueOrDefault(true); //return mock_c()->returnBoolValueOrDefault(true);
} }
void RegEdit_OR_Num(void *reg, uint32_t num) void RegEdit_OR_Num(void *reg, uint32_t num)
{ {
mock_c()->actualCall("RegEdit_OR_Num")->withPointerParameters("reg", reg)->withUnsignedIntParameters("num", num); mock_c()->actualCall("RegEdit_OR_Num")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("num", num);
} }
void RegEdit_AND_Num(void *reg, uint32_t num) void RegEdit_AND_Num(void *reg, uint32_t num)
{ {
mock_c()->actualCall("RegEdit_AND_Num")->withPointerParameters("reg", reg)->withUnsignedIntParameters("num", num); mock_c()->actualCall("RegEdit_AND_Num")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("num", num);
} }
void RegEdit_SetNum(void *reg, uint32_t num) void RegEdit_SetNum(void *reg, uint32_t num)
{ {
mock_c()->actualCall("RegEdit_SetNum")->withPointerParameters("reg", reg)->withUnsignedIntParameters("num", num); mock_c()->actualCall("RegEdit_SetNum")
->withPointerParameters("reg", reg)
->withUnsignedIntParameters("num", num);
} }
uint8_t RegEdit_ReadReg(void *reg) uint8_t RegEdit_ReadReg(void *reg)
{ {
uint8_t value = *(uint8_t *)reg; uint8_t value = *(uint8_t *)reg;
mock_c()->actualCall("RegEdit_ReadReg")->withPointerParameters("reg", reg)->returnUnsignedIntValueOrDefault(value); mock_c()->actualCall("RegEdit_ReadReg")
->withPointerParameters("reg", reg)
->returnUnsignedIntValueOrDefault(value);
return value; return value;
} }

View file

@ -10,8 +10,9 @@
#ifndef MOCKREGEDIT_H #ifndef MOCKREGEDIT_H
#define MOCKREGEDIT_H #define MOCKREGEDIT_H
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
void RegEdit_SetRegister(void *reg); void RegEdit_SetRegister(void *reg);
void RegEdit_ClearRegister(void *reg); void RegEdit_ClearRegister(void *reg);

View file

@ -16,15 +16,13 @@ public:
}; };
*/ */
bool UInt8PointerComparator::isEqual(const void *object1, const void *object2) bool UInt8PointerComparator::isEqual(const void* object1, const void* object2) {
{
const uint8_t* ptr1 = reinterpret_cast<const uint8_t*>(object1); const uint8_t* ptr1 = reinterpret_cast<const uint8_t*>(object1);
const uint8_t* ptr2 = reinterpret_cast<const uint8_t*>(object2); const uint8_t* ptr2 = reinterpret_cast<const uint8_t*>(object2);
return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0; return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0;
} }
SimpleString UInt8PointerComparator::valueToString(const void *object) SimpleString UInt8PointerComparator::valueToString(const void* object) {
{
const uint8_t* ptr = reinterpret_cast<const uint8_t*>(object); const uint8_t* ptr = reinterpret_cast<const uint8_t*>(object);
return StringFromFormat("0x%02x", *ptr); return StringFromFormat("0x%02x", *ptr);
} }
@ -42,13 +40,11 @@ SimpleString UInt8PointerComparator::valueToString(const void* object) const {
} }
*/ */
bool UInt8Comparator::isEqual(const void *object1, const void *object2) bool UInt8Comparator::isEqual(const void* object1, const void* object2) {
{
return (uint8_t*)object1 == (uint8_t *)object2; return (uint8_t*)object1 == (uint8_t *)object2;
} }
SimpleString UInt8Comparator::valueToString(const void *object) SimpleString UInt8Comparator::valueToString(const void* object) {
{
//uint8_t value = reinterpret_cast<uint8_t>(object); //uint8_t value = reinterpret_cast<uint8_t>(object);
const uint8_t *ptr = reinterpret_cast<const uint8_t*>(object); const uint8_t *ptr = reinterpret_cast<const uint8_t*>(object);
return StringFromFormat("0x%02x", *ptr); return StringFromFormat("0x%02x", *ptr);

View file

@ -6,8 +6,8 @@
*/ */
#include "TimerMock.h" #include "TimerMock.h"
#include "CppUTestExt/MockSupport_c.h"
#include <stdbool.h> #include <stdbool.h>
#include "CppUTestExt/MockSupport_c.h"
static bool timer_started = false; static bool timer_started = false;
@ -26,5 +26,6 @@ void Timer_Stop(void)
uint16_t Timer_GetOverflowCount(void) uint16_t Timer_GetOverflowCount(void)
{ {
uint16_t time = 0xAAAA; uint16_t time = 0xAAAA;
return mock_c()->actualCall("Timer_GetOverflowCount")->returnUnsignedIntValueOrDefault(time); return mock_c()->actualCall("Timer_GetOverflowCount")
->returnUnsignedIntValueOrDefault(time);
} }

View file

@ -22,4 +22,5 @@ void Timer_Stop(void);
uint16_t Timer_GetOverflowCount(void); uint16_t Timer_GetOverflowCount(void);
#endif //TIMER_MOCK_H #endif //TIMER_MOCK_H

View file

@ -7,12 +7,18 @@ extern C
} }
*/ */
TEST_GROUP(simple_test){
void setup(){
} void teardown(){ TEST_GROUP(simple_test)
{
void setup()
{
}}; }
void teardown()
{
}
};
TEST(simple_test, passing_test) TEST(simple_test, passing_test)
{ {