Converted to hybrid between MPLABX and Cmake for test harness.
This commit is contained in:
		
							parent
							
								
									0a2c8b1dab
								
							
						
					
					
						commit
						f80f61c9ff
					
				
					 93 changed files with 8124 additions and 41 deletions
				
			
		| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/RegEdit.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/ADC.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/TriacOut.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/main.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/RegEdit.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/zero_cross_detection.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/main.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/ADC.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/TriacOut.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/zero_cross_detection.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/load.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
 $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c  -D__DEBUG=1 -g -DDEBUG  -gdwarf-2  -x c -D__$(MP_PROCESSOR_OPTION)__   -mdfp="${DFP_DIR}/xc8"  -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -Wall -DXPRJ_attiny404=$(CND_CONF)  $(COMPARISON_BUILD)  -gdwarf-3 -mno-const-data-in-progmem    /home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/load.c
 | 
			
		||||
							
								
								
									
										7
									
								
								.template_files/.template_files/modules/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.template_files/.template_files/modules/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(module_name STATIC
 | 
			
		||||
    module_name.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(module_name PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										10
									
								
								.template_files/.template_files/modules/TestCMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.template_files/.template_files/modules/TestCMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_module_name
 | 
			
		||||
    test_module_name.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_module_name
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    module_name
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										16
									
								
								.template_files/.template_files/modules/module_name.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.template_files/.template_files/modules/module_name.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: module_name.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "module_name.h"
 | 
			
		||||
 | 
			
		||||
// dumb test function
 | 
			
		||||
int add_two(int a)
 | 
			
		||||
{
 | 
			
		||||
    int b = a;
 | 
			
		||||
    b += 2;
 | 
			
		||||
    return b;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								.template_files/.template_files/modules/module_name.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.template_files/.template_files/modules/module_name.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date
 | 
			
		||||
 * filename: module_name.h
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef module_name
 | 
			
		||||
#define module_name
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int add_two(int a);
 | 
			
		||||
 | 
			
		||||
#endif //module_name   
 | 
			
		||||
							
								
								
									
										0
									
								
								.template_files/.template_files/modules/modules_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.template_files/.template_files/modules/modules_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										38
									
								
								.template_files/.template_files/modules/test_module_name.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.template_files/.template_files/modules/test_module_name.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_module_name.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "module_name.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(FirstTestGroup)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(FirstTestGroup, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   FAIL("Fail me!");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(FirstTestGroup, SecondTest)
 | 
			
		||||
{
 | 
			
		||||
   STRCMP_EQUAL("hello", "world");
 | 
			
		||||
   LONGS_EQUAL(1, 2);
 | 
			
		||||
   CHECK(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										0
									
								
								.template_files/.template_files_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.template_files/.template_files_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										7
									
								
								.template_files/modules/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.template_files/modules/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(module_name STATIC
 | 
			
		||||
    module_name.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(module_name PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										10
									
								
								.template_files/modules/TestCMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.template_files/modules/TestCMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_module_name
 | 
			
		||||
    test_module_name.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_module_name
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    module_name
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										16
									
								
								.template_files/modules/module_name.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.template_files/modules/module_name.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: module_name.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "module_name.h"
 | 
			
		||||
 | 
			
		||||
// dumb test function
 | 
			
		||||
int add_two(int a)
 | 
			
		||||
{
 | 
			
		||||
    int b = a;
 | 
			
		||||
    b += 2;
 | 
			
		||||
    return b;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								.template_files/modules/module_name.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.template_files/modules/module_name.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief PUT_TEXT_HERE
 | 
			
		||||
 * @details This file is...
 | 
			
		||||
 * @author username
 | 
			
		||||
 * @date todays_date
 | 
			
		||||
 * @copyright None
 | 
			
		||||
 * @file module_name.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef module_name
 | 
			
		||||
#define module_name
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A function that adds two to a number
 | 
			
		||||
 * @param a The first argument
 | 
			
		||||
 */
 | 
			
		||||
int add_two(int a);
 | 
			
		||||
 | 
			
		||||
#endif //module_name   
 | 
			
		||||
							
								
								
									
										0
									
								
								.template_files/modules/modules_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.template_files/modules/modules_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										38
									
								
								.template_files/modules/test_module_name.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.template_files/modules/test_module_name.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_module_name.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "module_name.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_module_name)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_module_name, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   FAIL("Fail me!");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_module_name, SecondTest)
 | 
			
		||||
{
 | 
			
		||||
   STRCMP_EQUAL("hello", "world");
 | 
			
		||||
   LONGS_EQUAL(1, 2);
 | 
			
		||||
   CHECK(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										76
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,76 @@
 | 
			
		|||
cmake_minimum_required(VERSION 3.20)
 | 
			
		||||
 | 
			
		||||
# Use the fancy version substitution
 | 
			
		||||
project(main
 | 
			
		||||
    VERSION 1.0
 | 
			
		||||
    DESCRIPTION "template for cmake + cpputest"
 | 
			
		||||
    LANGUAGES   C CXX
 | 
			
		||||
)
 | 
			
		||||
enable_testing()
 | 
			
		||||
 | 
			
		||||
set(TARGET_GROUP production CACHE STRING "Group to build")
 | 
			
		||||
 | 
			
		||||
if(MSVC OR MSYS OR MINGW)
 | 
			
		||||
    message("### SETUP FOR WINDOWS ###")
 | 
			
		||||
    add_definitions(-DWINDOWS)
 | 
			
		||||
else()
 | 
			
		||||
    message("### SETUP FOR UNIX ###")
 | 
			
		||||
    add_definitions(-DUNIX)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# For being able to used LSP
 | 
			
		||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 | 
			
		||||
 | 
			
		||||
# Request C 17 standard features
 | 
			
		||||
set(CMAKE_C_STANDARD 11)
 | 
			
		||||
set(CMAKE_C_STANDARD_REQUIRED True)
 | 
			
		||||
# set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")
 | 
			
		||||
 | 
			
		||||
# SETUP THE CXX flags for .cpp
 | 
			
		||||
set(CMAKE_CXX_STANDARD 11)
 | 
			
		||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# #######################################
 | 
			
		||||
# TESTING STUFF 
 | 
			
		||||
# #######################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if (UNIT_TESTING)
 | 
			
		||||
    add_definitions(-DUNIT_TESTING)
 | 
			
		||||
    if(DEFINED ENV{CPPUTEST_HOME})
 | 
			
		||||
        message(STATUS "Using CppUTest home: $ENV{CPPUTEST_HOME}")
 | 
			
		||||
        set(CPPUTEST_INCLUDE_DIRS $ENV{CPPUTEST_HOME}/include)
 | 
			
		||||
        set(CPPUTEST_LIBRARIES $ENV{CPPUTEST_HOME}/lib)
 | 
			
		||||
        set(CPPUTEST_LDFLAGS CppUTest CppUTestExt)
 | 
			
		||||
    else()
 | 
			
		||||
        find_package(PkgConfig REQUIRED)
 | 
			
		||||
        pkg_search_module(CPPUTEST REQUIRED cpputest>=3.8)
 | 
			
		||||
        message(STATUS "Found CppUTest version ${CPPUTEST_VERSION}")
 | 
			
		||||
    endif()
 | 
			
		||||
    
 | 
			
		||||
    include_directories(
 | 
			
		||||
        ${CPPUTEST_INCLUDE_DIRS}
 | 
			
		||||
        /usr/include/c++/11/
 | 
			
		||||
        ./inc
 | 
			
		||||
        ./mocks
 | 
			
		||||
        )
 | 
			
		||||
    link_directories(${CPPUTEST_LIBRARIES})
 | 
			
		||||
    
 | 
			
		||||
    add_subdirectory(mocks)
 | 
			
		||||
    add_subdirectory(tests)
 | 
			
		||||
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# #######################################
 | 
			
		||||
# PROJECT SPECIFIC 
 | 
			
		||||
# #######################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
include_directories(
 | 
			
		||||
    /usr/local/avr/avr/include
 | 
			
		||||
    ./inc
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_subdirectory(src)
 | 
			
		||||
							
								
								
									
										2
									
								
								Doxyfile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Doxyfile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -949,7 +949,7 @@ WARN_LOGFILE           =
 | 
			
		|||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
 | 
			
		||||
# Note: If this tag is empty the current directory is searched.
 | 
			
		||||
 | 
			
		||||
INPUT                  = ./README.md ./
 | 
			
		||||
INPUT                  = ./README.md ./src/ ./inc/
 | 
			
		||||
 | 
			
		||||
# This tag can be used to specify the character encoding of the source files
 | 
			
		||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										65
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										65
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
# FG004_A(Test Mode)
 | 
			
		||||
# FG004_A(Triac Testing)
 | 
			
		||||
 | 
			
		||||
## Description
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,12 +38,44 @@ RST:: Reset pin
 | 
			
		|||
 | 
			
		||||
## Project Layout
 | 
			
		||||
 | 
			
		||||
**Tree -L 1, output**
 | 
			
		||||
```
 | 
			
		||||
.
 | 
			
		||||
├── avr-gcc-toolchain.cmake
 | 
			
		||||
├── build
 | 
			
		||||
├── CMakeLists.txt
 | 
			
		||||
├── compile_commands.json -> ./build/compile_commands.json
 | 
			
		||||
├── docs
 | 
			
		||||
├── Doxyfile
 | 
			
		||||
├── inc
 | 
			
		||||
├── mocks
 | 
			
		||||
├── otto.sh
 | 
			
		||||
├── README.md
 | 
			
		||||
├── setup.sh
 | 
			
		||||
├── src
 | 
			
		||||
└── tests
 | 
			
		||||
 | 
			
		||||
6 directories, 7 files
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The source code required to run/build the project is in the `/src` directory, 
 | 
			
		||||
with the headers residing inside the `/inc` directory for most public modules.
 | 
			
		||||
 | 
			
		||||
All other directories are for supporting the development cycle and are used for
 | 
			
		||||
testitng the code base to ensure accuracy and quality. These are contained in
 | 
			
		||||
the `tests` and `mocks` directories.
 | 
			
		||||
 | 
			
		||||
Documentation that has been generated is inside the docs folder which contains
 | 
			
		||||
the html output that can be browswed via your regular web browser.
 | 
			
		||||
 | 
			
		||||
PDF genreation from the doumentaiton is also possible if enabled through the
 | 
			
		||||
`Doxyfile` inside the projects root directory.
 | 
			
		||||
 | 
			
		||||
The build directory contains the output and makefiles genrerated automatically
 | 
			
		||||
when using CMake.
 | 
			
		||||
 | 
			
		||||
This build directory also holds the bin files genreated along with the hex and
 | 
			
		||||
elf files.
 | 
			
		||||
 | 
			
		||||
## Build Requirements
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,3 +93,34 @@ PDF genreation from the doumentaiton is also possible if enabled through the
 | 
			
		|||
- cpputest(Unit testing harness.)
 | 
			
		||||
- Doxygen(For documentation) 
 | 
			
		||||
- Git(For version control)
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
## Running Unit Tests
 | 
			
		||||
 | 
			
		||||
To run the cppunit tests you can use the included shell script inside a bash
 | 
			
		||||
shell.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
echo "1" | ./otto.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The command runs the otto script which automates parts of the development cycle
 | 
			
		||||
such as running and building tests, compiling hex files and flashing the code
 | 
			
		||||
to a micro-controller using arvdude.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Roadmap
 | 
			
		||||
 | 
			
		||||
Some stuff that still needs done.
 | 
			
		||||
 | 
			
		||||
- [X] Add ADC Mocked interface.
 | 
			
		||||
- [X] Write tests for ADC Mock
 | 
			
		||||
- [X] Write ZCD using ADC Mock.
 | 
			
		||||
- [ ] Write ADC version for devboard(328p)
 | 
			
		||||
- [ ] Write ADC version for ATtiny404
 | 
			
		||||
- [ ] Add GPIO mock?
 | 
			
		||||
- [ ] Add GPIO mock tests.
 | 
			
		||||
- [ ] Add GPIO module.
 | 
			
		||||
- [ ] Add Triac module.
 | 
			
		||||
- [ ] Add Triac tests.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										57
									
								
								avr-gcc-toolchain.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								avr-gcc-toolchain.cmake
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
# ###############################
 | 
			
		||||
# AVR-GCC toolchain file 
 | 
			
		||||
# ###############################
 | 
			
		||||
 | 
			
		||||
# Specify the cross-compiler
 | 
			
		||||
set(CMAKE_SYSTEM_NAME Generic)
 | 
			
		||||
set(CMAKE_SYSTEM_VERSION 1)
 | 
			
		||||
set(CMAKE_SYSTEM_PROCESSOR avr)
 | 
			
		||||
 | 
			
		||||
# Without this flag, CMake is unable to pass the test compilation check
 | 
			
		||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
 | 
			
		||||
 | 
			
		||||
# Specify the compiler and linker
 | 
			
		||||
#set(AVR_MCU atmega328p) # The old Classic
 | 
			
		||||
#set(AVR_MCU attiny85) # The older ATtiny series, avr25
 | 
			
		||||
set(AVR_MCU attiny404) # this is the avrxmega3 series
 | 
			
		||||
#set(AVR_MCU avr64dd28) # Newer DX series, avrxmega2
 | 
			
		||||
 | 
			
		||||
# The default frequency of an 328p devboard using the external crystal.
 | 
			
		||||
#set(F_CPU 16000000UL)
 | 
			
		||||
set(F_CPU 20000000UL)
 | 
			
		||||
#set(F_CPU 8000000)
 | 
			
		||||
#set(F_PER 3333333)
 | 
			
		||||
add_compile_definitions(F_CPU=${F_CPU})
 | 
			
		||||
# add_compile_definitions(MCU=atmega328p)
 | 
			
		||||
#add_compile_definitions(__AVR_ATmega328P__)
 | 
			
		||||
add_compile_definitions(__AVR_ATtiny404__)
 | 
			
		||||
 | 
			
		||||
# Set up the programmer for it
 | 
			
		||||
#set(PROGRAMMER usbasp-clone)
 | 
			
		||||
#set(PROGRAMMER arduino)
 | 
			
		||||
set(PROGRAMMER serialupdi)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Set the Port for the programmer
 | 
			
		||||
set(PORT /dev/ttyUSB0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define the toolchain executables
 | 
			
		||||
set(CMAKE_C_COMPILER avr-gcc)
 | 
			
		||||
set(CMAKE_CXX_COMPILER avr-g++)
 | 
			
		||||
set(CMAKE_ASM_COMPILER avr-gcc)
 | 
			
		||||
set(CMAKE_LINKER avr-ld)
 | 
			
		||||
set(CMAKE_OBJCOPY avr-objcopy)
 | 
			
		||||
set(CMAKE_SIZE avr-size)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define compile options
 | 
			
		||||
set(CMAKE_C_FLAGS " -Os -mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
 | 
			
		||||
set(CMAKE_CXX_FLAGS "-mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-mmcu=${AVR_MCU}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Define the archiver and other tools
 | 
			
		||||
set(CMAKE_AR avr-ar)
 | 
			
		||||
set(CMAKE_RANLIB avr-ranlib)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								compile_commands.json
									
										
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								compile_commands.json
									
										
									
									
									
										Symbolic link
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
./build/compile_commands.json
 | 
			
		||||
							
								
								
									
										0
									
								
								inc/.git_dir
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								inc/.git_dir
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										71
									
								
								inc/RegEdit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								inc/RegEdit.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief Module/Interface for editing AVR registers 
 | 
			
		||||
 * @details This file is an interface to AVR registers or the avr/io.h
 | 
			
		||||
 * @author Jake G 
 | 
			
		||||
 * @date 2024 
 | 
			
		||||
 * @copyright None
 | 
			
		||||
 * @file RegEdit.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef REGEDIT_H
 | 
			
		||||
#define REGEDIT_H
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sets the value of the register to 0xFF.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_SetRegister(void *reg);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sets the value of the register to 0x00. 
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_ClearRegister(void *reg);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sets a single bit in the register.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_SetBit(void *reg, uint8_t bit_num);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Clears a single bit in the register.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_ClearBit(void *reg, uint8_t bit_num);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Checks if a single bit is set in the register.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
bool RegEdit_IsBitSet(void *reg, uint8_t bit_num);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Preforms logical OR Equals with the passed num.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_OR_Num(void *reg, uint8_t num);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Preforms logical AND Equals with the passed num.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_AND_Num(void *reg, uint8_t num);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sets the register to the passed number value.
 | 
			
		||||
 * @param reg A pointer to a register 
 | 
			
		||||
 * @param The bit's index or number in the register
 | 
			
		||||
 */
 | 
			
		||||
void RegEdit_SetNum(void *reg, uint8_t num);
 | 
			
		||||
 | 
			
		||||
#endif //REGEDIT_H
 | 
			
		||||
							
								
								
									
										4713
									
								
								inc/iotn404.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4713
									
								
								inc/iotn404.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										0
									
								
								mocks/.mocks_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								mocks/.mocks_git_dir
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										5
									
								
								mocks/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								mocks/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
add_subdirectory(MockRegEdit)
 | 
			
		||||
add_subdirectory(MockADC)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								mocks/MockADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mocks/MockADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(MockADC STATIC
 | 
			
		||||
    MockADC.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(MockADC PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										64
									
								
								mocks/MockADC/MockADC.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								mocks/MockADC/MockADC.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: 2024 
 | 
			
		||||
 * filename: MockADC.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "MockADC.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport_c.h"
 | 
			
		||||
 | 
			
		||||
#define FAKESIZE 256
 | 
			
		||||
 | 
			
		||||
uint16_t fake_data[FAKESIZE];
 | 
			
		||||
int fake_index = 0;
 | 
			
		||||
 | 
			
		||||
void ADC_Init(uint8_t pin_num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("ADC_Init")
 | 
			
		||||
        ->withUnsignedIntParameters("pin_num", pin_num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ADC_Enable(uint8_t pin_num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("ADC_Enable")
 | 
			
		||||
        ->withUnsignedIntParameters("pin_num", pin_num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ADC_Disable()
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("ADC_Disable"); 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t ADC_ReadValue_Impl(uint8_t pin_num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("ADC_ReadValue_Impl")
 | 
			
		||||
        ->withUnsignedIntParameters("pin_num", pin_num);
 | 
			
		||||
 | 
			
		||||
    if(fake_index == 0){
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return fake_data[--fake_index];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t (*ADC_ReadValue)(uint8_t pin_num) = ADC_ReadValue_Impl;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void MockADC_PushValue(uint16_t value){
 | 
			
		||||
    if(fake_index >= FAKESIZE - 1){
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    fake_data[fake_index++] = value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void MockADC_ZeroIndex(void)
 | 
			
		||||
{
 | 
			
		||||
    fake_index = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int MockADC_GetIndex(void)
 | 
			
		||||
{
 | 
			
		||||
    return fake_index;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								mocks/MockADC/MockADC.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								mocks/MockADC/MockADC.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief PUT_TEXT_HERE
 | 
			
		||||
 * @details This file is...
 | 
			
		||||
 * @author username
 | 
			
		||||
 * @date todays_date
 | 
			
		||||
 * @copyright None
 | 
			
		||||
 * @file MOCKADC.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MOCKADC_H
 | 
			
		||||
#define MOCKADC_H
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A function that adds two to a number
 | 
			
		||||
 * @param a The first argument
 | 
			
		||||
 */
 | 
			
		||||
void ADC_Init(uint8_t pin_num);
 | 
			
		||||
void ADC_Enable(uint8_t pin_num);
 | 
			
		||||
void ADC_Disable();
 | 
			
		||||
 | 
			
		||||
extern uint16_t (*ADC_ReadValue)(uint8_t pin_num);
 | 
			
		||||
 | 
			
		||||
void MockADC_PushValue(uint16_t value);
 | 
			
		||||
void MockADC_ZeroIndex(void);
 | 
			
		||||
int MockADC_GetIndex(void);
 | 
			
		||||
 | 
			
		||||
#endif //MOCKADC_H
 | 
			
		||||
							
								
								
									
										7
									
								
								mocks/MockRegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								mocks/MockRegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(MockRegEdit STATIC
 | 
			
		||||
    MockRegEdit.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(MockRegEdit PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										73
									
								
								mocks/MockRegEdit/MockRegEdit.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								mocks/MockRegEdit/MockRegEdit.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: 2024 
 | 
			
		||||
 * filename: MockRegEdit.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "MockRegEdit.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport_c.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void RegEdit_SetRegister(void *reg)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_SetRegister")
 | 
			
		||||
        ->withPointerParameters("reg", reg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegEdit_ClearRegister(void *reg)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_ClearRegister")
 | 
			
		||||
        ->withPointerParameters("reg", reg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void RegEdit_SetBit(void *reg, uint8_t bit_num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_SetBit")
 | 
			
		||||
        ->withPointerParameters("reg", reg)
 | 
			
		||||
        ->withUnsignedIntParameters("bit_num", bit_num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void RegEdit_ClearBit(void *reg, uint8_t bit_num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_ClearBit")
 | 
			
		||||
        ->withPointerParameters("reg", reg)
 | 
			
		||||
        ->withUnsignedIntParameters("bit_num", 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()->returnBoolValueOrDefault(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegEdit_OR_Num(void *reg, uint8_t num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_OR_Num")
 | 
			
		||||
        ->withPointerParameters("reg", reg)
 | 
			
		||||
        ->withUnsignedIntParameters("num", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void RegEdit_AND_Num(void *reg, uint8_t num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_AND_Num")
 | 
			
		||||
        ->withPointerParameters("reg", reg)
 | 
			
		||||
        ->withUnsignedIntParameters("num", num);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void RegEdit_SetNum(void *reg, uint8_t num)
 | 
			
		||||
{
 | 
			
		||||
    mock_c()->actualCall("RegEdit_SetNum")
 | 
			
		||||
        ->withPointerParameters("reg", reg)
 | 
			
		||||
        ->withUnsignedIntParameters("num", num);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								mocks/MockRegEdit/MockRegEdit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								mocks/MockRegEdit/MockRegEdit.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief PUT_TEXT_HERE
 | 
			
		||||
 * @details This file is...
 | 
			
		||||
 * @author username
 | 
			
		||||
 * @date todays_date
 | 
			
		||||
 * @copyright None
 | 
			
		||||
 * @file MockRegEdit.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MOCKREGEDIT_H
 | 
			
		||||
#define MOCKREGEDIT_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
void RegEdit_SetRegister(void *reg);
 | 
			
		||||
void RegEdit_ClearRegister(void *reg);
 | 
			
		||||
void RegEdit_SetBit(void *reg, uint8_t bit_num);
 | 
			
		||||
void RegEdit_ClearBit(void *reg, uint8_t bit_num);
 | 
			
		||||
bool RegEdit_IsBitSet(void *reg, uint8_t bit_num);
 | 
			
		||||
 | 
			
		||||
void RegEdit_OR_Num(void *reg, uint8_t num);
 | 
			
		||||
void RegEdit_AND_Num(void *reg, uint8_t num);
 | 
			
		||||
 | 
			
		||||
void RegEdit_SetNum(void *reg, uint8_t num);
 | 
			
		||||
 | 
			
		||||
#endif //MOCKREGEDIT_H
 | 
			
		||||
							
								
								
									
										51
									
								
								mocks/MockRegEdit/u8_comparator.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								mocks/MockRegEdit/u8_comparator.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
#include "u8_comparator.hpp"
 | 
			
		||||
#include "CppUTest/SimpleString.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
class MyTypeComparator : public MockNamedValueComparator
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    virtual bool isEqual(const void* object1, const void* object2)
 | 
			
		||||
    {
 | 
			
		||||
        return object1 == object2;
 | 
			
		||||
    }
 | 
			
		||||
    virtual SimpleString valueToString(const void* object)
 | 
			
		||||
    {
 | 
			
		||||
        return StringFrom(object);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
bool UInt8PointerComparator::isEqual(const void* object1, const void* object2) {
 | 
			
		||||
    const uint8_t* ptr1 = reinterpret_cast<const uint8_t*>(object1);
 | 
			
		||||
    const uint8_t* ptr2 = reinterpret_cast<const uint8_t*>(object2);
 | 
			
		||||
    return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SimpleString UInt8PointerComparator::valueToString(const void* object) {
 | 
			
		||||
    const uint8_t* ptr = reinterpret_cast<const uint8_t*>(object);
 | 
			
		||||
    return StringFromFormat("0x%02x", *ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
bool UInt8PointerComparator::isEqual(const void* object1, const void* object2) const {
 | 
			
		||||
    const uint8_t* ptr1 = static_cast<const uint8_t*>(object1);
 | 
			
		||||
    const uint8_t* ptr2 = static_cast<const uint8_t*>(object2);
 | 
			
		||||
    return std::memcmp(ptr1, ptr2, sizeof(uint8_t)) == 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SimpleString UInt8PointerComparator::valueToString(const void* object) const {
 | 
			
		||||
    const uint8_t* ptr = static_cast<const uint8_t*>(object);
 | 
			
		||||
    return StringFromFormat("0x%02x", *ptr);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
bool UInt8Comparator::isEqual(const void* object1, const void* object2) {
 | 
			
		||||
    return (uint8_t*)object1 == (uint8_t *)object2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SimpleString UInt8Comparator::valueToString(const void* object) {
 | 
			
		||||
    //uint8_t value = reinterpret_cast<uint8_t>(object);
 | 
			
		||||
    const uint8_t *ptr = reinterpret_cast<const uint8_t*>(object);
 | 
			
		||||
    return StringFromFormat("0x%02x", *ptr);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								mocks/MockRegEdit/u8_comparator.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mocks/MockRegEdit/u8_comparator.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
#ifndef U8_COMPARATOR_H
 | 
			
		||||
#define U8_COMPARATOR_H
 | 
			
		||||
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <CppUTestExt/MockSupport.h>
 | 
			
		||||
 | 
			
		||||
class UInt8PointerComparator : public MockNamedValueComparator {
 | 
			
		||||
public:
 | 
			
		||||
    virtual bool isEqual(const void* object1, const void* object2) override;
 | 
			
		||||
    SimpleString valueToString(const void* object) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class UInt8Comparator : public MockNamedValueComparator {
 | 
			
		||||
    public:
 | 
			
		||||
        virtual bool isEqual(const void* object1, const void* object2) override;
 | 
			
		||||
        SimpleString valueToString(const void* object) override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //U8_COMPARATOR_H
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
#
 | 
			
		||||
#Wed Jul 10 08:03:09 PDT 2024
 | 
			
		||||
#Thu Jul 11 11:31:51 PDT 2024
 | 
			
		||||
attiny404.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=8ed9aa4326bfc0c1a849e697826741b7
 | 
			
		||||
attiny404.languagetoolchain.version=2.46
 | 
			
		||||
attiny404.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d
 | 
			
		||||
conf.ids=,attiny404
 | 
			
		||||
host.id=2ov5-ff4p-rv
 | 
			
		||||
configurations-xml=a2902459fa41badc4b7c9fbc5e9c3988
 | 
			
		||||
attiny404.platformTool.md5=null
 | 
			
		||||
configurations-xml=a8df58f0d8aebafa503466e35cdcf228
 | 
			
		||||
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321
 | 
			
		||||
attiny404.languagetoolchain.dir=/opt/microchip/xc8/v2.46/bin
 | 
			
		||||
proj.dir=/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,7 +314,7 @@
 | 
			
		|||
        <targetDevice>ATtiny404</targetDevice>
 | 
			
		||||
        <targetHeader></targetHeader>
 | 
			
		||||
        <targetPluginBoard></targetPluginBoard>
 | 
			
		||||
        <platformTool>noID</platformTool>
 | 
			
		||||
        <platformTool>PK5Tool</platformTool>
 | 
			
		||||
        <languageToolchain>XC8</languageToolchain>
 | 
			
		||||
        <languageToolchainVersion>2.46</languageToolchainVersion>
 | 
			
		||||
        <platform>2</platform>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,7 @@
 | 
			
		|||
      </runprofile>
 | 
			
		||||
    </conf>
 | 
			
		||||
    <conf name="attiny404" type="2">
 | 
			
		||||
      <platformToolSN>noToolString</platformToolSN>
 | 
			
		||||
      <platformToolSN>:=MPLABComm-USB-Microchip:=<vid>04D8:=<pid>9036:=<rev>0100:=<man>Microchip Technology Incorporated:=<prod>MPLAB PICkit 5:=<sn>020026702RYN031742:=<drv>x:=<xpt>b:=end</platformToolSN>
 | 
			
		||||
      <languageToolchainDir>/opt/microchip/xc8/v2.46/bin</languageToolchainDir>
 | 
			
		||||
      <mdbdebugger version="1">
 | 
			
		||||
        <placeholder1>place holder 1</placeholder1>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,6 @@
 | 
			
		|||
    <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
 | 
			
		||||
        <group>
 | 
			
		||||
            <file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/main.c</file>
 | 
			
		||||
            <file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/config.h</file>
 | 
			
		||||
        </group>
 | 
			
		||||
    </open-files>
 | 
			
		||||
</project-private>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										335
									
								
								otto.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								otto.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,335 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# Author: Jake Goodwin
 | 
			
		||||
# Date: 2024
 | 
			
		||||
# Filename: otto.sh
 | 
			
		||||
 | 
			
		||||
AVR_TC="$(pwd)/avr-gcc-toolchain.cmake"
 | 
			
		||||
CMAKE_VERBOSE="ON"
 | 
			
		||||
CROSS_COMPILE=1
 | 
			
		||||
TEMPLATE_FILES=".template_files"
 | 
			
		||||
MODULE_DIR="${TEMPLATE_FILES}/modules"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_compile_commands () {
 | 
			
		||||
    if [ -f ./compile_commands.json ]; then
 | 
			
		||||
        echo "compile_commands.json already exists!\n"
 | 
			
		||||
    else
 | 
			
		||||
        echo "Creating new symlink for compile commands!\n"
 | 
			
		||||
        ln -s ./build/compile_commands.json ./compile_commands.json
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
clear_cmake_cache () {
 | 
			
		||||
    cd ./build
 | 
			
		||||
    rm -rf CMakeCache.txt CMakeFiles/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
does_module_exist () {
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
    
 | 
			
		||||
    if [ -d "src/${basename}" ]; then
 | 
			
		||||
        echo "1"
 | 
			
		||||
    else
 | 
			
		||||
        echo "0"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
does_mock_exist () {
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
    
 | 
			
		||||
    if [ -d "mocks/${basename}" ]; then
 | 
			
		||||
        echo "1"
 | 
			
		||||
    else
 | 
			
		||||
        echo "0"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_module_to_cmakes () {
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
    
 | 
			
		||||
    echo "add_subdirectory(${basename})" >> ./src/CMakeLists.txt
 | 
			
		||||
    
 | 
			
		||||
    # Tests cmake file needs to be edited in place.
 | 
			
		||||
    sed -i'' "s/# TEST_DIRS.*$/# TEST_DIRS\r\nadd_subdirectory(${basename})/g" ./tests/CMakeLists.txt
 | 
			
		||||
    sed -i'' "s/# TEST_LINKS.*$/# TEST_LINKS\r\n\ttest_${basename}/g" ./tests/CMakeLists.txt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
remove_module_from_cmakes () {
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
 | 
			
		||||
    sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./src/CMakeLists.txt
 | 
			
		||||
    sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./tests/CMakeLists.txt
 | 
			
		||||
    sed -i'' "s/^.*test_${basename}.*$//g" ./tests/CMakeLists.txt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
git_add_module () {
 | 
			
		||||
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
    
 | 
			
		||||
    read -p "Auto add to git?(y/n):" CHOICE
 | 
			
		||||
    if [ "${CHOICE}" = "n" ]; then
 | 
			
		||||
        echo "not being added!"
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    modsrc_dir="./src/${basename}"
 | 
			
		||||
    modtest_dir="./tests/${basename}"
 | 
			
		||||
 | 
			
		||||
    # Now we add the new files to the git tracked files
 | 
			
		||||
    git add ${modsrc_dir}/*
 | 
			
		||||
    git add ${modsrc_dir}
 | 
			
		||||
    git add ${modtest_dir}/*
 | 
			
		||||
    git add ${modtest_dir}
 | 
			
		||||
    git add ./src/CMakeLists.txt
 | 
			
		||||
    git add ./tests/CMakeLists.txt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
git_remove_module () {
 | 
			
		||||
    local basename="$1"
 | 
			
		||||
    
 | 
			
		||||
    read -p "Auto del from git?(y/n):" CHOICE
 | 
			
		||||
    if [ "${CHOICE}" -eq "n" ]; then
 | 
			
		||||
        echo "not being removed!"
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    modsrc_dir="./src/${basename}"
 | 
			
		||||
    modtest_dir="./tests/${basename}"
 | 
			
		||||
 | 
			
		||||
    # Now we add the new files to the git tracked files
 | 
			
		||||
    git rm -r ${modsrc_dir}/*
 | 
			
		||||
    git rm -r ${modsrc_dir}
 | 
			
		||||
    git rm -r ${modtest_dir}/*
 | 
			
		||||
    git rm -r ${modtest_dir}
 | 
			
		||||
    git rm -r ./src/CMakeLists.txt
 | 
			
		||||
    git rm -r ./tests/CMakeLists.txt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
add_mock_module () {
 | 
			
		||||
    read -p "Enter the name of the module:" modname
 | 
			
		||||
    result=$(does_mock_exist "$modname")
 | 
			
		||||
 | 
			
		||||
    if [ "${result}"  -eq "1" ]; then
 | 
			
		||||
        echo "Module already exists!"
 | 
			
		||||
        echo "Exiting without changing anything"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    modname_cap=$(echo $modname | sed 's/[a-z]/\U&/g')
 | 
			
		||||
    modsrc_dir="./mocks/${modname}"
 | 
			
		||||
    modtest_dir="./tests/${modname}"
 | 
			
		||||
 | 
			
		||||
    echo "creating: ${modsrc_dir}, ${modtest_dir}"
 | 
			
		||||
    mkdir $modsrc_dir
 | 
			
		||||
    mkdir $modtest_dir
 | 
			
		||||
    
 | 
			
		||||
    #copy the template files.
 | 
			
		||||
    echo "copying & customizing template files..."
 | 
			
		||||
    
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/module_name.c >  $modsrc_dir/${modname}.c
 | 
			
		||||
    sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h  
 | 
			
		||||
    sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.h
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/CMakeLists.txt > $modsrc_dir/CMakeLists.txt
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/test_module_name.cpp > $modtest_dir/test_${modname}.cpp
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/TestCMakeLists.txt > $modtest_dir/CMakeLists.txt
 | 
			
		||||
   
 | 
			
		||||
    # Add the module to the cmake lists files.
 | 
			
		||||
    add_module_to_cmakes "${modname}" 
 | 
			
		||||
 | 
			
		||||
    echo "Resulting files/dirs:"
 | 
			
		||||
    tree -L 2 $modsrc_dir
 | 
			
		||||
    tree -L 2 $modtest_dir
 | 
			
		||||
    
 | 
			
		||||
    # Now we add the new files to the git tracked files
 | 
			
		||||
    git_add_module "${modname}" 
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
add_new_module () {
 | 
			
		||||
    read -p "Enter the name of the module:" modname
 | 
			
		||||
   
 | 
			
		||||
    result=$(does_module_exist "$modname")
 | 
			
		||||
 | 
			
		||||
    if [ "${result}"  -eq "1" ]; then
 | 
			
		||||
        echo "Module already exists!"
 | 
			
		||||
        echo "Exiting without changing anything"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    modname_cap=$(echo $modname | sed 's/[a-z]/\U&/g')
 | 
			
		||||
    modsrc_dir="./src/${modname}"
 | 
			
		||||
    modtest_dir="./tests/${modname}"
 | 
			
		||||
 | 
			
		||||
    echo "creating: ${modsrc_dir}, ${modtest_dir}"
 | 
			
		||||
    mkdir $modsrc_dir
 | 
			
		||||
    mkdir $modtest_dir
 | 
			
		||||
    
 | 
			
		||||
    #copy the template files.
 | 
			
		||||
    echo "copying & customizing template files..."
 | 
			
		||||
    
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/module_name.c >  $modsrc_dir/${modname}.c
 | 
			
		||||
    sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h  
 | 
			
		||||
    sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.h
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/CMakeLists.txt > $modsrc_dir/CMakeLists.txt
 | 
			
		||||
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/test_module_name.cpp > $modtest_dir/test_${modname}.cpp
 | 
			
		||||
    sed "s/module_name/${modname}/" $MODULE_DIR/TestCMakeLists.txt > $modtest_dir/CMakeLists.txt
 | 
			
		||||
   
 | 
			
		||||
    # Add the module to the cmake lists files.
 | 
			
		||||
    add_module_to_cmakes "${modname}" 
 | 
			
		||||
 | 
			
		||||
    echo "Resulting files/dirs:"
 | 
			
		||||
    tree -L 2 $modsrc_dir
 | 
			
		||||
    tree -L 2 $modtest_dir
 | 
			
		||||
    
 | 
			
		||||
    # Now we add the new files to the git tracked files
 | 
			
		||||
    git_add_module "${modname}" 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
del_module () {
 | 
			
		||||
    read -p "Enter the name of the module:" modname
 | 
			
		||||
    
 | 
			
		||||
    rm -r ./tests/${modname}
 | 
			
		||||
    rm -r ./src/${modname} 
 | 
			
		||||
    remove_module_from_cmakes "${modname}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cross_compile () {
 | 
			
		||||
    echo "ERROR: Currently no toolchain / target!"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_release() {
 | 
			
		||||
    clear_cmake_cache 
 | 
			
		||||
    cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ 
 | 
			
		||||
    make 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_main () {
 | 
			
		||||
    clear_cmake_cache
 | 
			
		||||
    cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
 | 
			
		||||
    make main
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_hex () {
 | 
			
		||||
    clear_cmake_cache
 | 
			
		||||
    
 | 
			
		||||
    CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
 | 
			
		||||
    CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
 | 
			
		||||
 | 
			
		||||
    cmake ${CMAKE_ARGS} ../
 | 
			
		||||
    make all
 | 
			
		||||
    make hex 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build_hex_optimized () {
 | 
			
		||||
    clear_cmake_cache
 | 
			
		||||
    
 | 
			
		||||
    CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
 | 
			
		||||
    CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
 | 
			
		||||
    
 | 
			
		||||
    cmake ${CMAKE_ARGS} ../
 | 
			
		||||
    make all
 | 
			
		||||
    make hex-release
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
flash_avr () {
 | 
			
		||||
    build_hex_optimized
 | 
			
		||||
    make upload
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
run_c_tests () {
 | 
			
		||||
    clear_cmake_cache
 | 
			
		||||
    cmake -DUNIT_TESTING=ON  -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
 | 
			
		||||
    make AllTests 
 | 
			
		||||
    make Mock_Tests
 | 
			
		||||
    make TriacTests
 | 
			
		||||
    ./tests/AllTests -v -c 
 | 
			
		||||
    ./tests/Mock_Tests -v -c
 | 
			
		||||
    ./tests/TriacTests -v -c
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_menu () {
 | 
			
		||||
    echo "BUILD MENU:"
 | 
			
		||||
    echo "0. Add Mock Module"
 | 
			
		||||
    echo "1. Run Tests"
 | 
			
		||||
    echo "2. Build Project(hex)"
 | 
			
		||||
    echo "3. Build for release(hex)"
 | 
			
		||||
    echo "4. Flash to AVR"
 | 
			
		||||
    echo "5. Add new module to project"
 | 
			
		||||
    echo "6. Delete module from project"
 | 
			
		||||
    echo "7. Exit"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
main() {
 | 
			
		||||
    add_compile_commands 
 | 
			
		||||
    valid_choice=false
 | 
			
		||||
    
 | 
			
		||||
    while [ "$valid_choice" != true ]; do
 | 
			
		||||
        print_menu
 | 
			
		||||
        read -p "Enter your choice: " choice
 | 
			
		||||
 | 
			
		||||
        case $choice in
 | 
			
		||||
            0)
 | 
			
		||||
                echo "You selected Option 0"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                add_mock_module 
 | 
			
		||||
                ;;
 | 
			
		||||
 
 | 
			
		||||
            1)
 | 
			
		||||
                echo "You selected Option 1"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                run_c_tests
 | 
			
		||||
                ;;
 | 
			
		||||
            2)
 | 
			
		||||
                echo "You selected Option 2"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                build_hex 
 | 
			
		||||
                ;;
 | 
			
		||||
            3)
 | 
			
		||||
                echo "You selected Option 3"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                build_hex_optimized 
 | 
			
		||||
                ;;
 | 
			
		||||
            4)
 | 
			
		||||
                echo "You selected Option 4"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                flash_avr 
 | 
			
		||||
                ;;
 | 
			
		||||
            5)
 | 
			
		||||
                echo "You selected Option 5"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                add_new_module 
 | 
			
		||||
                ;;
 | 
			
		||||
            6)
 | 
			
		||||
                echo "You selected Option 6"
 | 
			
		||||
                valid_choice=true
 | 
			
		||||
                del_module 
 | 
			
		||||
                ;;
 | 
			
		||||
            7)
 | 
			
		||||
                echo "Exiting..."
 | 
			
		||||
                exit 0
 | 
			
		||||
                ;;
 | 
			
		||||
            *)
 | 
			
		||||
                echo "Invalid choice. Please select a valid option."
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										86
									
								
								setup.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								setup.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#Author: Jake G
 | 
			
		||||
#Date: 2024
 | 
			
		||||
#Filename: setup.sh
 | 
			
		||||
 | 
			
		||||
PKG_MNGR=""
 | 
			
		||||
DEBIAN=0
 | 
			
		||||
FBSD=0
 | 
			
		||||
SYSINSTALL=0
 | 
			
		||||
DEV_UTILS="vim tmux fzf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
install_dev_utils () {
 | 
			
		||||
    ICMD=""
 | 
			
		||||
    if [ $DEBIAN -eq 1 ]; then
 | 
			
		||||
        ICMD="sudo apt install"
 | 
			
		||||
    elif [ $FBSD -eq 1 ]; then
 | 
			
		||||
        ICMD="sudo pkg install"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for util in $DEV_UTILS
 | 
			
		||||
    do
 | 
			
		||||
        ${ICMD} ${util}
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
check_os () {
 | 
			
		||||
     if [ -f /etc/debian_version ]; then
 | 
			
		||||
        DEBIAN=1
 | 
			
		||||
    elif [ -f /etc/freebsd-update.conf ]; then
 | 
			
		||||
        FBSD=1
 | 
			
		||||
    fi  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
remove_template_examples () {
 | 
			
		||||
    echo "does nothing right now"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
install_needed_dependencies () {
 | 
			
		||||
    # Check the OS
 | 
			
		||||
    echo "checking the OS..."
 | 
			
		||||
    # If it's debian based then apt install
 | 
			
		||||
    
 | 
			
		||||
    # If it's freeBSD then pkg
 | 
			
		||||
    
 | 
			
		||||
    # If it's windows....you're SOL
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
create_project_symlinks () {
 | 
			
		||||
    # Allows the clangd LSP to find it.
 | 
			
		||||
    ln -s ./build/compile_commands.json ./compile_commands.json
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
build_cpputest () {
 | 
			
		||||
    git submodule add https://github.com/cpputest/cpputest.git
 | 
			
		||||
    git sumodule status
 | 
			
		||||
    cd ./cpputest/build
 | 
			
		||||
    cmake ../
 | 
			
		||||
    
 | 
			
		||||
    if [ SYSINSTALL -eq 1]; then
 | 
			
		||||
        make install
 | 
			
		||||
    else
 | 
			
		||||
        make
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The default setup stuff.
 | 
			
		||||
default () {
 | 
			
		||||
    remove_template_examples
 | 
			
		||||
    install_needed_dependencies
 | 
			
		||||
    create_project_symlinks
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setup() {
 | 
			
		||||
    echo "Setting up env"
 | 
			
		||||
    check_os
 | 
			
		||||
    install_dev_utils 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setup
 | 
			
		||||
							
								
								
									
										22
									
								
								src/ADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/ADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
if(UNIT_TESTING)
 | 
			
		||||
    add_library(ADC STATIC
 | 
			
		||||
        ADC.c
 | 
			
		||||
    )
 | 
			
		||||
    target_include_directories(ADC PUBLIC
 | 
			
		||||
        ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
    )
 | 
			
		||||
    target_link_libraries(ADC
 | 
			
		||||
        MockRegEdit
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
    add_library(ADC STATIC
 | 
			
		||||
        ADC.c
 | 
			
		||||
    )
 | 
			
		||||
    target_include_directories(ADC PUBLIC
 | 
			
		||||
        ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
    )
 | 
			
		||||
    target_link_libraries(ADC
 | 
			
		||||
        RegEdit 
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										56
									
								
								src/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
add_executable(${PROJECT_NAME}
 | 
			
		||||
    main.c    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(${PROJECT_NAME}
 | 
			
		||||
    RegEdit
 | 
			
		||||
    ADC
 | 
			
		||||
    TriacOut
 | 
			
		||||
    zero_cross_detection 
 | 
			
		||||
    load
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Ensure the build rules are defined
 | 
			
		||||
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
 | 
			
		||||
 | 
			
		||||
if(NOT TARGET size)
 | 
			
		||||
# Set the size utility to display the size of the final binary
 | 
			
		||||
add_custom_target(size ALL
 | 
			
		||||
    COMMAND ${CMAKE_SIZE} --format=avr --mcu=${AVR_MCU} ${CMAKE_PROJECT_NAME}.elf
 | 
			
		||||
    DEPENDS ${CMAKE_PROJECT_NAME}.elf
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if(NOT TARGET hex)
 | 
			
		||||
# Define how to convert ELF to HEX
 | 
			
		||||
add_custom_target(hex ALL
 | 
			
		||||
    COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex
 | 
			
		||||
    DEPENDS ${CMAKE_PROJECT_NAME}.elf
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(NOT TARGET bin)
 | 
			
		||||
# Define how to convert ELF to BIN
 | 
			
		||||
add_custom_target(bin ALL
 | 
			
		||||
    COMMAND ${CMAKE_OBJCOPY} -O binary -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin
 | 
			
		||||
    DEPENDS ${CMAKE_PROJECT_NAME}.elf
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if(NOT TARGET upload)
 | 
			
		||||
# Upload command (adjust according to your programmer)
 | 
			
		||||
add_custom_target(upload ALL
 | 
			
		||||
    COMMAND avrdude -c ${PROGRAMMER} -P ${PORT} -p ${AVR_MCU} -U flash:w:${CMAKE_PROJECT_NAME}.hex
 | 
			
		||||
    DEPENDS hex
 | 
			
		||||
)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_subdirectory(zero_cross_detection)
 | 
			
		||||
add_subdirectory(ADC)
 | 
			
		||||
add_subdirectory(RegEdit)
 | 
			
		||||
add_subdirectory(usart)
 | 
			
		||||
add_subdirectory(TriacOut)
 | 
			
		||||
add_subdirectory(load)
 | 
			
		||||
							
								
								
									
										7
									
								
								src/RegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/RegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(RegEdit STATIC
 | 
			
		||||
    RegEdit.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(RegEdit PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										17
									
								
								src/TriacOut/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/TriacOut/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
add_library(TriacOut STATIC
 | 
			
		||||
    TriacOut.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(TriacOut PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(UNIT_TESTING)
 | 
			
		||||
    target_link_libraries(TriacOut
 | 
			
		||||
        MockRegEdit    
 | 
			
		||||
    )
 | 
			
		||||
else()
 | 
			
		||||
    target_link_libraries(TriacOut
 | 
			
		||||
        RegEdit    
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										22
									
								
								src/load/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/load/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
if(UNIT_TESTING)
 | 
			
		||||
    add_library(load STATIC
 | 
			
		||||
        load.c
 | 
			
		||||
    )
 | 
			
		||||
    target_include_directories(load PUBLIC
 | 
			
		||||
        ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
    )
 | 
			
		||||
    target_link_libraries(load
 | 
			
		||||
        MockRegEdit
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
else()
 | 
			
		||||
    add_library(load STATIC
 | 
			
		||||
        load.c
 | 
			
		||||
    )
 | 
			
		||||
    target_include_directories(load PUBLIC
 | 
			
		||||
        ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
    )
 | 
			
		||||
    target_link_libraries(load
 | 
			
		||||
        RegEdit 
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										7
									
								
								src/usart/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/usart/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
add_library(usart STATIC
 | 
			
		||||
    usart.c
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_include_directories(usart PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										64
									
								
								src/usart/usart.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/usart/usart.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: 2024 
 | 
			
		||||
 * filename: usart.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "usart.h"
 | 
			
		||||
#include <avr/io.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define F_PER F_CPU / 6
 | 
			
		||||
#define USART0_BAUD_RATE(BAUD_RATE) ((float)(F_PER * 64 / (16 * (float)BAUD_RATE)) + 0.5)
 | 
			
		||||
 | 
			
		||||
//RX PIN6, TX PIN7
 | 
			
		||||
//ALT: RX PIN12 TX PIN11
 | 
			
		||||
void USART0_init(void)
 | 
			
		||||
{
 | 
			
		||||
    //Config TxD as output, and rx as input?
 | 
			
		||||
    PORTB.DIR &= ~(1<<3);
 | 
			
		||||
    PORTB.DIR |= (1<<2);
 | 
			
		||||
    
 | 
			
		||||
    //setup Alternate pints on PA1 and PA2
 | 
			
		||||
    /*
 | 
			
		||||
    PORTMUX.CTRLB |= PORTMUX_USART0_ALTERNATE_gc;
 | 
			
		||||
    PORTA.DIRSET |= (1<<1);
 | 
			
		||||
    PORTA.DIRSET &= ~(1<<2);
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    //It says to set the TX pin high?
 | 
			
		||||
    //PORTB.OUT |= (1<<2);
 | 
			
		||||
    //PORTA.OUT |= (1<<11);
 | 
			
		||||
 | 
			
		||||
    //set buad rate.
 | 
			
		||||
    USART0.BAUD = (uint16_t)USART0_BAUD_RATE(9600);
 | 
			
		||||
 | 
			
		||||
    //set the frame format.
 | 
			
		||||
    USART0.CTRLC = 0x3;   //setting 8-bit mode.
 | 
			
		||||
 | 
			
		||||
    //Enable transmitter and receiver (USARTn.CTRLB)
 | 
			
		||||
    //USART0.CTRLB |= (1<<7)|(1<<6);
 | 
			
		||||
    USART0.CTRLB |= USART_TXEN_bm; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void USART0_sendChar(char c)
 | 
			
		||||
{
 | 
			
		||||
    while (!(USART0.STATUS & USART_DREIF_bm)){
 | 
			
		||||
        ;
 | 
			
		||||
    }
 | 
			
		||||
    USART0.TXDATAL = c;
 | 
			
		||||
    USART0.TXDATAH = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void USART0_sendString(char *str)
 | 
			
		||||
{
 | 
			
		||||
    for(size_t i = 0; i < strlen(str); i++)
 | 
			
		||||
    {
 | 
			
		||||
        USART0_sendChar(str[i]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										33
									
								
								src/usart/usart.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/usart/usart.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @brief Universal Asynchronout Serial library. 
 | 
			
		||||
 * @details This file contains the functions for using the avr usart0 periph. 
 | 
			
		||||
 * @author Jake G 
 | 
			
		||||
 * @date 2024
 | 
			
		||||
 * @copyright None
 | 
			
		||||
 * @file USART.h
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef USART_H
 | 
			
		||||
#define USART_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Initializes the USART0 peripheral. 
 | 
			
		||||
 */
 | 
			
		||||
void USART0_init(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sends a single char type variable over usart0.
 | 
			
		||||
 * @param c The charecter to be sent over usart0. 
 | 
			
		||||
 */
 | 
			
		||||
void USART0_sendChar(char c);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sends string over usart0
 | 
			
		||||
 * @param str A C-style string.
 | 
			
		||||
 */
 | 
			
		||||
void USART0_sendString(char *str);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif //USART_H
 | 
			
		||||
							
								
								
									
										17
									
								
								src/zero_cross_detection/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/zero_cross_detection/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
add_library(zero_cross_detection STATIC
 | 
			
		||||
    zero_cross_detection.c
 | 
			
		||||
)
 | 
			
		||||
target_include_directories(zero_cross_detection PUBLIC
 | 
			
		||||
    ${CMAKE_CURRENT_LIST_DIR}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if(UNIT_TESTING)
 | 
			
		||||
    target_link_libraries(zero_cross_detection 
 | 
			
		||||
        MockADC 
 | 
			
		||||
    )
 | 
			
		||||
else()
 | 
			
		||||
    target_link_libraries(zero_cross_detection 
 | 
			
		||||
        ADC 
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										49
									
								
								src/zero_cross_detection/zero_cross_detection.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/zero_cross_detection/zero_cross_detection.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file zero_cross_detection.h
 | 
			
		||||
 * @author Jake G
 | 
			
		||||
 * @date 16 June 2024
 | 
			
		||||
 * @brief File contains the zero cross detection functions 
 | 
			
		||||
 *
 | 
			
		||||
 * This file holds all the code/functions needed to read the value of the AC
 | 
			
		||||
 * waveform. It uses the trigger value from the `config.h` file to evaluate the
 | 
			
		||||
 * state.
 | 
			
		||||
 *
 | 
			
		||||
 * This module depends on the ADC.h module to get readings from the ADC 
 | 
			
		||||
 * hardware.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ZERO_CROSS_DETECTION
 | 
			
		||||
#define ZERO_CROSS_DETECTION
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Zero Cross Detection Setup
 | 
			
		||||
 *
 | 
			
		||||
 * Sets up the hardware to read the values coming from the AC input waveform.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void ZCD_Setup(void);
 | 
			
		||||
//int ZCD_Setup(volatile uint8_t *ddrx, uint8_t *port, uint8_t pin);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Checks if ZCD should trigger on value
 | 
			
		||||
 *
 | 
			
		||||
 * The function checks for a positive edge first using the ZCD_IsPositiveEdge
 | 
			
		||||
 * function. If a positive edge was found, then it takes an addition set of 
 | 
			
		||||
 * samples and averages them; only triggering(returning true) in the case 
 | 
			
		||||
 * that the average is higher than the previous sample. 
 | 
			
		||||
 */
 | 
			
		||||
bool ZCD_IsTriggered(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Function blocks execution until ZCD is triggered. 
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void ZCD_Poll(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif //ZERO_CROSS_DETECTION   
 | 
			
		||||
							
								
								
									
										17
									
								
								tests/ADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								tests/ADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_ADC
 | 
			
		||||
    test_ADC.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_ADC
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    ADC
 | 
			
		||||
    MockRegEdit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
#Needed for the tests to function
 | 
			
		||||
include_directories(
 | 
			
		||||
    /usr/local/avr/include/avr
 | 
			
		||||
    #/usr/lib/avr/include/avr
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										175
									
								
								tests/ADC/test_ADC.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								tests/ADC/test_ADC.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,175 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: Jake G 
 | 
			
		||||
 * Date: 2024 
 | 
			
		||||
 * filename: test_ADC.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport.h"
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
//This define allows us to dircetly include the device header without error.
 | 
			
		||||
#define _AVR_IO_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include <iotn404.h> //ATtiny404 header fille.
 | 
			
		||||
#include "ADC.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_ADC)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
        mock().checkExpectations();
 | 
			
		||||
        mock().clear();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   CHECK(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_InitPortAPin7UsesCorrectRegisters)
 | 
			
		||||
{
 | 
			
		||||
    //Check for setting the direction to input.
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.DIRCLR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 7);
 | 
			
		||||
 
 | 
			
		||||
    //Check that the pullup is off 
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.OUTCLR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 7);
 | 
			
		||||
 | 
			
		||||
    //Set the ISC(input sense config) to disable digital input
 | 
			
		||||
    //buffering and reduce the noise on ADC usage.
 | 
			
		||||
    mock().expectOneCall("RegEdit_OR_Num")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.PIN7CTRL)
 | 
			
		||||
        .withUnsignedIntParameter("num", 0x4);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //check that the resolusion is selected
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLA)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 2);
 | 
			
		||||
 | 
			
		||||
    //check for the seleceted refernce voltage
 | 
			
		||||
    //we leave the adc prescaler alone mostly.
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLC)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 4);
 | 
			
		||||
 | 
			
		||||
    ADC_Init(7);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_InitPortAPin0UsesCorrectRegisters)
 | 
			
		||||
{
 | 
			
		||||
    //Check for setting the direction to input.
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.DIRCLR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 0);
 | 
			
		||||
 
 | 
			
		||||
    //Check that the pullup is off 
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.OUTCLR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 0);
 | 
			
		||||
 | 
			
		||||
    //Set the ISC(input sense config) to disable digital input
 | 
			
		||||
    //buffering and reduce the noise on ADC usage.
 | 
			
		||||
    mock().expectOneCall("RegEdit_OR_Num")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.PIN0CTRL)
 | 
			
		||||
        .withUnsignedIntParameter("num", 0x4);
 | 
			
		||||
 | 
			
		||||
    //check that the resolusion is selected
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLA)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 2);
 | 
			
		||||
 | 
			
		||||
    //check for the seleceted refernce voltage
 | 
			
		||||
    //we leave the adc prescaler alone mostly.
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLC)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 4);
 | 
			
		||||
 | 
			
		||||
    ADC_Init(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_InitDoesNothingOnHighPinNumbers)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectNoCall("RegEdit_SetBit");
 | 
			
		||||
    ADC_Init(8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_EnableSuccessOnPin7)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //Set the MUXPOS or the ADC pin stuff.
 | 
			
		||||
    mock().expectOneCall("RegEdit_OR_Num")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.MUXPOS)
 | 
			
		||||
        .withUnsignedIntParameter("num", ADC_MUXPOS_AIN7_gc);
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLA)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 0);
 | 
			
		||||
 | 
			
		||||
    ADC_Enable(7);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_EnableNothingOnHighPinNumbers)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectNoCall("RegEdit_SetBit");
 | 
			
		||||
    ADC_Enable(8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_ADC, ADC_DisablePasses)
 | 
			
		||||
{
 | 
			
		||||
    //Clears the muxpos register     
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearRegister")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.MUXPOS);
 | 
			
		||||
    
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &ADC0.CTRLA)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 0);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ADC_Disable();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static uint16_t ADC_ReadValueFake(uint8_t pin_num)
 | 
			
		||||
{
 | 
			
		||||
    return 512;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_ADCRead)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
        UT_PTR_SET(ADC_ReadValue, ADC_ReadValueFake);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_ADCRead, FunctionPointerSwapWorks)
 | 
			
		||||
{
 | 
			
		||||
    uint16_t value = ADC_ReadValue(0);
 | 
			
		||||
    
 | 
			
		||||
    LONGS_EQUAL(512, value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								tests/AllTests.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/AllTests.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//ImportTestGroups
 | 
			
		||||
IMPORT_TEST_GROUP(simple_test);
 | 
			
		||||
IMPORT_TEST_GROUP(test_ADC);
 | 
			
		||||
IMPORT_TEST_GROUP(test_RegEdit);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//START: main
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    return RUN_ALL_TESTS(argc, argv);
 | 
			
		||||
}
 | 
			
		||||
//END: main
 | 
			
		||||
							
								
								
									
										48
									
								
								tests/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tests/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
project(Tests)
 | 
			
		||||
 | 
			
		||||
# TEST_DIRS
 | 
			
		||||
#add_subdirectory(usart)
 | 
			
		||||
add_subdirectory(MockADC)
 | 
			
		||||
add_subdirectory(ADC)
 | 
			
		||||
add_subdirectory(MockRegEdit)
 | 
			
		||||
add_subdirectory(RegEdit)
 | 
			
		||||
add_subdirectory(simple_test)
 | 
			
		||||
add_subdirectory(zero_cross_detection)
 | 
			
		||||
add_subdirectory(TriacOut)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# TEST_RUNNER
 | 
			
		||||
add_executable(AllTests
 | 
			
		||||
    AllTests.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(AllTests
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    # TEST_LINKS
 | 
			
		||||
    test_ADC
 | 
			
		||||
    test_RegEdit
 | 
			
		||||
    simple_test
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_executable(Mock_Tests
 | 
			
		||||
    MockTests.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(Mock_Tests
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
	test_MockRegEdit
 | 
			
		||||
	test_MockADC
 | 
			
		||||
	test_zero_cross_detection
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_executable(TriacTests
 | 
			
		||||
    TriacTests.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(TriacTests
 | 
			
		||||
    test_TriacOut
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										10
									
								
								tests/MockADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/MockADC/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_MockADC
 | 
			
		||||
    test_MockADC.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_MockADC
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    MockADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										86
									
								
								tests/MockADC/test_MockADC.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								tests/MockADC/test_MockADC.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: Jake G 
 | 
			
		||||
 * Date: 2024 
 | 
			
		||||
 * filename: test_MockADC.c
 | 
			
		||||
 * description: 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport.h"
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "MockADC.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_MockADC)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
        mock().checkExpectations();
 | 
			
		||||
        mock().clear();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, ADC_InitExpects)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectOneCall("ADC_Init")
 | 
			
		||||
       .withUnsignedIntParameter("pin_num", 0x2); 
 | 
			
		||||
 | 
			
		||||
    ADC_Init(0x2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, ADC_EnableExpects)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectOneCall("ADC_Enable")
 | 
			
		||||
       .withUnsignedIntParameter("pin_num", 0x2); 
 | 
			
		||||
 | 
			
		||||
    ADC_Enable(0x2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, ADC_DisableExpect)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectOneCall("ADC_Disable");
 | 
			
		||||
 | 
			
		||||
    ADC_Disable();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, ADC_ReadValue)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
    MockADC_PushValue(512);
 | 
			
		||||
 
 | 
			
		||||
    mock().expectOneCall("ADC_ReadValue_Impl")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 0x2);
 | 
			
		||||
 | 
			
		||||
    uint16_t val = ADC_ReadValue(0x2);
 | 
			
		||||
    LONGS_EQUAL(512, val);
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, ADC_ReadValueReturnsZeroOnEmptyBuffer)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
    
 | 
			
		||||
    mock().expectOneCall("ADC_ReadValue_Impl")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 0x2)
 | 
			
		||||
        .andReturnValue(0x0000);
 | 
			
		||||
 | 
			
		||||
    uint16_t val = ADC_ReadValue(0x2);
 | 
			
		||||
    LONGS_EQUAL(0, val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockADC, MockADC_PushValueDoesntOverflowArray)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
    for(int i = 0; i < 257; i++){
 | 
			
		||||
        MockADC_PushValue(512+i); 
 | 
			
		||||
        CHECK_TRUE(MockADC_GetIndex() <= 255);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								tests/MockRegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/MockRegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_MockRegEdit
 | 
			
		||||
    test_MockRegEdit.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_MockRegEdit
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    MockRegEdit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										153
									
								
								tests/MockRegEdit/test_MockRegEdit.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								tests/MockRegEdit/test_MockRegEdit.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,153 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_MockRegEdit.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport.h"
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "MockRegEdit.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_MockRegEdit)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
        mock().clear();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_ClearRegisterExpectedCallPasses)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t a;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearRegister")
 | 
			
		||||
        .withPointerParameter("reg", b);
 | 
			
		||||
 | 
			
		||||
    RegEdit_ClearRegister(b);
 | 
			
		||||
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_SetRegisterExpectedCallPasses)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    uint8_t a;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetRegister")
 | 
			
		||||
        .withPointerParameter("reg", b);
 | 
			
		||||
    
 | 
			
		||||
    RegEdit_SetRegister(b);
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_SetBitExpectedCallPasses)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    uint8_t a;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 5);
 | 
			
		||||
    
 | 
			
		||||
    RegEdit_SetBit(b, 5);
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_ClearBitExpectedCallPasses)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    uint8_t a;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 5);
 | 
			
		||||
    
 | 
			
		||||
    RegEdit_ClearBit(b, 5);
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_IsBitSetExpectedCallPasses)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t a = 0xFF;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_IsBitSet")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 5)
 | 
			
		||||
        .andReturnValue(true);
 | 
			
		||||
    
 | 
			
		||||
    CHECK_TRUE(RegEdit_IsBitSet(b, 5));
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_IsBitSetExpectedCallPassesWithFalse)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t a = 0xFF;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_IsBitSet")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", 5)
 | 
			
		||||
        .andReturnValue(false);
 | 
			
		||||
    
 | 
			
		||||
    CHECK_FALSE(RegEdit_IsBitSet(b, 5));
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_OR_NumExpectedWorks)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t a = 0xFF;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_OR_Num")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("num", 0x4)
 | 
			
		||||
        .andReturnValue(false);
 | 
			
		||||
    
 | 
			
		||||
    RegEdit_OR_Num(b, 0x4);
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_MockRegEdit, RegEdit_SetNumPasses)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t a = 0xFF;
 | 
			
		||||
    uint8_t *b = &a;
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetNum")
 | 
			
		||||
        .withPointerParameter("reg", b)
 | 
			
		||||
        .withUnsignedIntParameter("num", 0x4)
 | 
			
		||||
        .andReturnValue(false);
 | 
			
		||||
    
 | 
			
		||||
    RegEdit_SetNum(b, 0x4);
 | 
			
		||||
    
 | 
			
		||||
    mock().checkExpectations();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								tests/MockTests.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tests/MockTests.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//ImportTestGroups
 | 
			
		||||
IMPORT_TEST_GROUP(test_MockRegEdit);
 | 
			
		||||
IMPORT_TEST_GROUP(test_MockADC);
 | 
			
		||||
IMPORT_TEST_GROUP(test_zero_cross_detection);
 | 
			
		||||
 | 
			
		||||
//START: main
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    return RUN_ALL_TESTS(argc, argv);
 | 
			
		||||
}
 | 
			
		||||
//END: main
 | 
			
		||||
							
								
								
									
										10
									
								
								tests/RegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/RegEdit/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_RegEdit
 | 
			
		||||
    test_RegEdit.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_RegEdit
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    RegEdit
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										32
									
								
								tests/RegEdit/test_RegEdit.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								tests/RegEdit/test_RegEdit.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_RegEdit.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "RegEdit.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_RegEdit)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_RegEdit, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   //FAIL("Fail me!");
 | 
			
		||||
   CHECK(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								tests/TriacOut/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/TriacOut/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_TriacOut
 | 
			
		||||
    test_TriacOut.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_TriacOut
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    MockRegEdit
 | 
			
		||||
    TriacOut
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										119
									
								
								tests/TriacOut/test_TriacOut.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								tests/TriacOut/test_TriacOut.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,119 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_TriacOut.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport.h"
 | 
			
		||||
 | 
			
		||||
//This define allows us to dircetly include the device header without error.
 | 
			
		||||
#define _AVR_IO_H_
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include <iotn404.h>
 | 
			
		||||
#include "TriacOut.h"
 | 
			
		||||
#include "MockRegEdit.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_TriacOut)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
        mock().checkExpectations();
 | 
			
		||||
        mock().clear();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_TriacOut, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   //FAIL("Fail me!");
 | 
			
		||||
   CHECK(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_TriacOut, TriacOut_SetupPins)
 | 
			
		||||
{
 | 
			
		||||
    //Expect that pin PA1 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.DIR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<1));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB3 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.DIR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<3));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB2 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.DIR)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<2));
 | 
			
		||||
 | 
			
		||||
    TriacOut_SetupPins();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
TEST(test_TriacOut, TriacOut_SetAllHigh)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PA1 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<1));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB3 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<3));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB2 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_SetBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<2));
 | 
			
		||||
 | 
			
		||||
    TriacOut_SetAllHigh();
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
TEST(test_TriacOut, TriacOut_InitTimerA)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FakeDelay(double us)
 | 
			
		||||
{
 | 
			
		||||
    //do Nothing.
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
TEST(test_TriacOut, TriacOut_PulsePins)
 | 
			
		||||
{
 | 
			
		||||
    UT_PTR_SET(Delay_MicroSeconds, FakeDelay);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PA1 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTA.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<1));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB3 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<3));
 | 
			
		||||
 | 
			
		||||
    //Expect that pin PB2 is set to output
 | 
			
		||||
    mock().expectOneCall("RegEdit_ClearBit")
 | 
			
		||||
        .withPointerParameter("reg", (void *) &PORTB.OUT)
 | 
			
		||||
        .withUnsignedIntParameter("bit_num", (1<<2));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    TriacOut_PulsePins(1000);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
							
								
								
									
										11
									
								
								tests/TriacTests.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/TriacTests.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
IMPORT_TEST_GROUP(test_TriacOut);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//START: main
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    return RUN_ALL_TESTS(argc, argv);
 | 
			
		||||
}
 | 
			
		||||
//END: main
 | 
			
		||||
							
								
								
									
										11
									
								
								tests/simple_test/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/simple_test/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
 | 
			
		||||
# TEST_RUNNER
 | 
			
		||||
add_library(simple_test 
 | 
			
		||||
    simple_test.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(simple_test
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								tests/simple_test/simple_test.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								tests/simple_test/simple_test.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
#include "CppUTest/TestHarness.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
extern C 
 | 
			
		||||
{
 | 
			
		||||
#include "simple.h"
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(simple_test)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(simple_test, passing_test)
 | 
			
		||||
{
 | 
			
		||||
    CHECK_TRUE(1);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								tests/usart/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/usart/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_usart
 | 
			
		||||
    test_usart.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_usart
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    usart
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										38
									
								
								tests/usart/test_usart.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								tests/usart/test_usart.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_usart.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "usart.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_usart)
 | 
			
		||||
{
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_usart, FirstTest)
 | 
			
		||||
{
 | 
			
		||||
   FAIL("Fail me!");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_usart, SecondTest)
 | 
			
		||||
{
 | 
			
		||||
   STRCMP_EQUAL("hello", "world");
 | 
			
		||||
   LONGS_EQUAL(1, 2);
 | 
			
		||||
   CHECK(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								tests/zero_cross_detection/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/zero_cross_detection/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
# TEST_RUNNER
 | 
			
		||||
add_library(test_zero_cross_detection
 | 
			
		||||
    test_zero_cross_detection.cpp    
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test_zero_cross_detection
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTest.a
 | 
			
		||||
    ${CPPUTEST_LIBRARIES}/libCppUTestExt.a
 | 
			
		||||
    zero_cross_detection
 | 
			
		||||
    MockADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										88
									
								
								tests/zero_cross_detection/test_zero_cross_detection.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								tests/zero_cross_detection/test_zero_cross_detection.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Author: username
 | 
			
		||||
 * Date: todays_date 
 | 
			
		||||
 * filename: test_zero_cross_detection.c
 | 
			
		||||
 * description: module_purpose
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "CppUTest/CommandLineTestRunner.h"
 | 
			
		||||
#include "CppUTest/TestFailure.h"
 | 
			
		||||
#include "CppUTest/TestPlugin.h"
 | 
			
		||||
#include "CppUTest/UtestMacros.h"
 | 
			
		||||
#include "CppUTestExt/MockSupport.h"
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
#include "MockADC.h"
 | 
			
		||||
#include "zero_cross_detection.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_GROUP(test_zero_cross_detection)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    void setup()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    void teardown()
 | 
			
		||||
    {
 | 
			
		||||
        mock().checkExpectations();
 | 
			
		||||
        mock().clear();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST(test_zero_cross_detection, ZCD_SetupCallsCorrectFuncs)
 | 
			
		||||
{
 | 
			
		||||
    mock().expectOneCall("ADC_Init")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 7);
 | 
			
		||||
 | 
			
		||||
    mock().expectOneCall("ADC_Enable")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 7);
 | 
			
		||||
 | 
			
		||||
    ZCD_Setup();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(test_zero_cross_detection, ZCD_IsTriggeredCallsCorrectFunctions)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
    
 | 
			
		||||
    mock().expectNCalls(2, "ADC_ReadValue_Impl")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 7);
 | 
			
		||||
 | 
			
		||||
    CHECK_FALSE(ZCD_IsTriggered());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_zero_cross_detection, ZCD_IsTriggerdTrueWhenRising)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
    MockADC_PushValue(512);
 | 
			
		||||
    MockADC_PushValue(450);
 | 
			
		||||
 | 
			
		||||
    mock().expectNCalls(2, "ADC_ReadValue_Impl")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 7)
 | 
			
		||||
        .ignoreOtherParameters();
 | 
			
		||||
 | 
			
		||||
    CHECK_TRUE(ZCD_IsTriggered()); 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST(test_zero_cross_detection, ZCD_PollWorksAfterCalls)
 | 
			
		||||
{
 | 
			
		||||
    MockADC_ZeroIndex();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    MockADC_PushValue(512);
 | 
			
		||||
    MockADC_PushValue(450);
 | 
			
		||||
    MockADC_PushValue(50);
 | 
			
		||||
    MockADC_PushValue(50);
 | 
			
		||||
 | 
			
		||||
    mock().expectNCalls(4, "ADC_ReadValue_Impl")
 | 
			
		||||
        .withUnsignedIntParameter("pin_num", 7)
 | 
			
		||||
        .ignoreOtherParameters();
 | 
			
		||||
 | 
			
		||||
    ZCD_Poll();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue