Compare commits

...

39 commits

Author SHA1 Message Date
jakeg00dwin
8eb5600499 removed the Delay_MicroSeconds_impl function and pointer set. 2024-07-27 11:04:30 -07:00
jakeg00dwin
a35b806299 removed unused comments and substituted bit shifts with constants 2024-07-27 09:56:03 -07:00
jakeg00dwin
077b265be2 Uncommented the SetAllHigh test and added the constatnts 2024-07-27 09:52:29 -07:00
jakeg00dwin
2e26507d76 whitespace change 2024-07-27 09:51:11 -07:00
jakeg00dwin
098d34c853 changed tests to not use magic numbers 2024-07-27 09:51:06 -07:00
jakeg00dwin
1a5324aef6 cleaned up tests a bit more by extracting duplication in helper function 2024-07-27 09:44:42 -07:00
jakeg00dwin
a061258669 Moved static helper function to top of tests. Extracted now uneeded expectations from tests. 2024-07-27 09:42:40 -07:00
jakeg00dwin
f10ed49eb4 extracted the expectations into helper func for ZCD poll function. 2024-07-27 09:39:20 -07:00
jakeg00dwin
d8403a4e82 Added call to helper function for ADC_INIT test 2024-07-27 09:28:29 -07:00
jakeg00dwin
a926cc3836 setup usage of the new ReadReg function. 2024-07-27 09:28:17 -07:00
jakeg00dwin
4ab57eb948 Created a helper function for the ADC storage testing 2024-07-27 09:23:36 -07:00
jakeg00dwin
7deea50e91 white space change 2024-07-27 09:23:15 -07:00
jakeg00dwin
4b44d364e0 fixed issue with mock causing a segmentation fault from pointer deref with lower type (void *) --> (uint8_t *) 2024-07-27 09:22:32 -07:00
jakeg00dwin
a92cdead2e fixed up ADC code + tests to make them pass 2024-07-27 09:06:23 -07:00
jakeg00dwin
5f547dd844 mplab change 2024-07-26 18:19:44 -07:00
jakeg00dwin
8117d3f890 fix of port storage 2024-07-26 18:19:36 -07:00
jakeg00dwin
6ecbe2f48a linking with the cpputest libs 2024-07-26 18:19:16 -07:00
jakeg00dwin
029b96aade Added two mock calls for the restore of the port state. 2024-07-26 18:19:05 -07:00
jakeg00dwin
ce68803cef removed empty whitespace 2024-07-26 18:18:36 -07:00
jakeg00dwin
f3c48ba643 Removed magic numbers from the Reading of the ZCD pin. 2024-07-26 18:18:23 -07:00
jakeg00dwin
b987d81827 Cleaned up comments in the TriacOut module 2024-07-26 18:18:09 -07:00
jakeg00dwin
29426ad4a5 Updated to follow the mocks 2024-07-26 18:17:53 -07:00
jakeg00dwin
f536024959 updated with new function for the RegEdit mock 2024-07-26 18:16:09 -07:00
jakeg00dwin
af3a041df8 ignoring the cache and build dir now 2024-07-26 18:15:33 -07:00
jakeg00dwin
c64fb08bec MPLABX config updates 2024-07-24 17:54:59 -07:00
jakeg00dwin
7c0fc29687 defined the F_CPU here 2024-07-24 17:54:41 -07:00
jakeg00dwin
437479b0b5 Commented out the unused function 2024-07-24 17:54:27 -07:00
jakeg00dwin
2be04980d1 Changed to using an initial value for u16. 2024-07-24 17:54:11 -07:00
jakeg00dwin
26993753fe Added more stuff to not track. 2024-07-24 17:21:57 -07:00
jakeg00dwin
f80f61c9ff Converted to hybrid between MPLABX and Cmake for test harness. 2024-07-24 17:21:29 -07:00
jakeg00dwin
0a2c8b1dab Changed to using the reset default clock divider of 6. More stable given variable voltage, also reduces power consumption of attiny404. 2024-07-10 09:40:56 -07:00
jakeg00dwin
c2424c47a8 updated new branch specifically for acting as the testing branch 2024-07-09 19:38:56 -07:00
jakeg00dwin
04a4bc4dea Updated to disable the main clock's pre-scaler. Allows it to run at full 20MHz 2024-07-09 18:47:16 -07:00
jakeg00dwin
eba8344e36 Implimented Load detection module that auto cuts G1, G2 and G3 if values on the ADC_LOAD pins is outside parameters. 2024-07-02 17:16:53 -07:00
jakeg00dwin
e4f19012b0 moved the threshold values into load.h as defines. 2024-07-02 15:43:49 -07:00
jakeg00dwin
fa1dd00965 updated the comments in the main.c filei. 2024-07-02 15:35:10 -07:00
jakeg00dwin
90a27d93d3 Updated the readme file 2024-07-02 15:32:58 -07:00
jakeg00dwin
da9bd19199 Updated the repo with the load.h and load.c files in order to impliment the Low Power Operation Mode. 2024-07-02 15:27:57 -07:00
jakeg00dwin
fc95e07e71 2024-07-02 11:04:06 -07:00
108 changed files with 8962 additions and 420 deletions

5
.gitignore vendored
View file

@ -1 +1,6 @@
/docs/ /docs/
build
dist/attiny404/production
.generated_files/flags/attiny404
.cache/clangd/index
build/default

View file

@ -0,0 +1,7 @@
add_library(module_name STATIC
module_name.c
)
target_include_directories(module_name PUBLIC
${CMAKE_CURRENT_LIST_DIR}
)

View 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
)

View 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;
}

View 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

View 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);
}

View file

View file

@ -0,0 +1,7 @@
add_library(module_name STATIC
module_name.c
)
target_include_directories(module_name PUBLIC
${CMAKE_CURRENT_LIST_DIR}
)

View 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
)

View 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;
}

View 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

View file

View 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
View 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)

View file

@ -949,7 +949,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched. # 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 # 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 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses

View file

@ -38,6 +38,33 @@ RST:: Reset pin
## Project Layout ## 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 Documentation that has been generated is inside the docs folder which contains
the html output that can be browswed via your regular web browser. the html output that can be browswed via your regular web browser.
@ -66,3 +93,34 @@ elf files.
- cpputest(Unit testing harness.) - cpputest(Unit testing harness.)
- Doxygen(For documentation) - Doxygen(For documentation)
- Git(For version control) - 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
View 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)

Binary file not shown.

View file

@ -1,50 +0,0 @@
build/default/debug/ADC.o.d build/default/debug/ADC.o: ADC.c ADC.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h \
RegEdit.h c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h
ADC.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h:
RegEdit.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h:

Binary file not shown.

View file

@ -1,19 +0,0 @@
build/default/debug/RegEdit.o.d build/default/debug/RegEdit.o: RegEdit.c \
RegEdit.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h
RegEdit.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h:

Binary file not shown.

View file

@ -1,52 +0,0 @@
build/default/debug/TriacOut.o.d build/default/debug/TriacOut.o: \
TriacOut.c \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h \
TriacOut.h RegEdit.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h:
TriacOut.h:
RegEdit.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h:

Binary file not shown.

View file

@ -1,67 +0,0 @@
build/default/debug/main.o.d build/default/debug/main.o: main.c config.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h \
RegEdit.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h \
zero_cross_detection.h ADC.h TriacOut.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\util\delay.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\util\delay_basic.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\math.h
config.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h:
RegEdit.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h:
zero_cross_detection.h:
ADC.h:
TriacOut.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\io.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\sfr_defs.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\inttypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\features.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/xc8/avr/include/avr/iotn404.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\portpins.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\common.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\xmega.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\fuse.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\avr\lock.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\util\delay.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\util\delay_basic.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\math.h:

View file

@ -1,23 +0,0 @@
build/default/debug/zero_cross_detection.o.d \
build/default/debug/zero_cross_detection.o: zero_cross_detection.c \
zero_cross_detection.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h \
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h \
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h \
ADC.h
zero_cross_detection.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\alltypes.h:
c:\program\ files\microchip\xc8\v2.46\avr\avr\include\bits\stdint.h:
c:\program\ files\microchip\xc8\v2.46\avr\lib\gcc\avr\5.4.0\include\stdbool.h:
ADC.h:

Binary file not shown.

View file

@ -1,29 +0,0 @@
build/default/production/ADC.o.d build/default/production/ADC.o: ADC.c \
ADC.h C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h \
C:/Program\ Files/avr-gcc/avr/include/stdint.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h RegEdit.h \
C:/Program\ Files/avr-gcc/avr/include/avr/io.h \
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h \
C:/Program\ Files/avr-gcc/avr/include/inttypes.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h \
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h \
C:/Program\ Files/avr-gcc/avr/include/avr/common.h \
C:/Program\ Files/avr-gcc/avr/include/avr/version.h \
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h \
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h \
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h
ADC.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h:
C:/Program\ Files/avr-gcc/avr/include/stdint.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h:
RegEdit.h:
C:/Program\ Files/avr-gcc/avr/include/avr/io.h:
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h:
C:/Program\ Files/avr-gcc/avr/include/inttypes.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h:
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h:
C:/Program\ Files/avr-gcc/avr/include/avr/common.h:
C:/Program\ Files/avr-gcc/avr/include/avr/version.h:
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h:
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h:
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h:

Binary file not shown.

View file

@ -1,9 +0,0 @@
build/default/production/RegEdit.o.d build/default/production/RegEdit.o: \
RegEdit.c RegEdit.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h \
C:/Program\ Files/avr-gcc/avr/include/stdint.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h
RegEdit.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h:
C:/Program\ Files/avr-gcc/avr/include/stdint.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h:

Binary file not shown.

View file

@ -1,29 +0,0 @@
build/default/production/TriacOut.o.d build/default/production/TriacOut.o: \
TriacOut.c C:/Program\ Files/avr-gcc/avr/include/avr/io.h \
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h \
C:/Program\ Files/avr-gcc/avr/include/inttypes.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h \
C:/Program\ Files/avr-gcc/avr/include/stdint.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h \
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h \
C:/Program\ Files/avr-gcc/avr/include/avr/common.h \
C:/Program\ Files/avr-gcc/avr/include/avr/version.h \
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h \
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h \
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h TriacOut.h RegEdit.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h
C:/Program\ Files/avr-gcc/avr/include/avr/io.h:
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h:
C:/Program\ Files/avr-gcc/avr/include/inttypes.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h:
C:/Program\ Files/avr-gcc/avr/include/stdint.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h:
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h:
C:/Program\ Files/avr-gcc/avr/include/avr/common.h:
C:/Program\ Files/avr-gcc/avr/include/avr/version.h:
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h:
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h:
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h:
TriacOut.h:
RegEdit.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h:

Binary file not shown.

View file

@ -1,37 +0,0 @@
build/default/production/main.o.d build/default/production/main.o: main.c \
config.h C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h \
C:/Program\ Files/avr-gcc/avr/include/stdint.h RegEdit.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h \
zero_cross_detection.h ADC.h TriacOut.h \
C:/Program\ Files/avr-gcc/avr/include/avr/io.h \
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h \
C:/Program\ Files/avr-gcc/avr/include/inttypes.h \
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h \
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h \
C:/Program\ Files/avr-gcc/avr/include/avr/common.h \
C:/Program\ Files/avr-gcc/avr/include/avr/version.h \
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h \
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h \
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h \
C:/Program\ Files/avr-gcc/avr/include/util/delay.h \
C:/Program\ Files/avr-gcc/avr/include/util/delay_basic.h
config.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h:
C:/Program\ Files/avr-gcc/avr/include/stdint.h:
RegEdit.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h:
zero_cross_detection.h:
ADC.h:
TriacOut.h:
C:/Program\ Files/avr-gcc/avr/include/avr/io.h:
C:/Program\ Files/avr-gcc/avr/include/avr/sfr_defs.h:
C:/Program\ Files/avr-gcc/avr/include/inttypes.h:
C:/Program\ Files/Microchip/MPLABX/v6.20/packs/Microchip/ATtiny_DFP/3.1.260/include/avr/iotn404.h:
C:/Program\ Files/avr-gcc/avr/include/avr/portpins.h:
C:/Program\ Files/avr-gcc/avr/include/avr/common.h:
C:/Program\ Files/avr-gcc/avr/include/avr/version.h:
C:/Program\ Files/avr-gcc/avr/include/avr/xmega.h:
C:/Program\ Files/avr-gcc/avr/include/avr/fuse.h:
C:/Program\ Files/avr-gcc/avr/include/avr/lock.h:
C:/Program\ Files/avr-gcc/avr/include/util/delay.h:
C:/Program\ Files/avr-gcc/avr/include/util/delay_basic.h:

View file

@ -1,11 +0,0 @@
build/default/production/zero_cross_detection.o.d \
build/default/production/zero_cross_detection.o: zero_cross_detection.c \
zero_cross_detection.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h \
C:/Program\ Files/avr-gcc/avr/include/stdint.h \
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h ADC.h
zero_cross_detection.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdint.h:
C:/Program\ Files/avr-gcc/avr/include/stdint.h:
C:/Program\ Files/avr-gcc/lib/gcc/avr/14.1.0/include/stdbool.h:
ADC.h:

1
compile_commands.json Symbolic link
View file

@ -0,0 +1 @@
./build/compile_commands.json

0
inc/.git_dir Normal file
View file

71
inc/RegEdit.h Normal file
View 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

View file

@ -14,32 +14,11 @@
#ifndef CONFIG_H #ifndef CONFIG_H
#define CONFIG_H #define CONFIG_H
//#define __AVR_ATtiny404__
#include <stdint.h> #include <stdint.h>
//#include <avr/io.h>
//#define ZC_PORT_DIR &PORTA.DIR
//*ZCP_DIR = &PORTA.DIR;
/**
* @brief Result type for the returned values from functions
*
*/
typedef enum ResultEnum{
OK,
Err
}ResultEnum;
/**
* @brief The type for Triac gate duration(micro seconds)
*
*/
typedef uint16_t DurationUs_t;
#define ADC_LOAD1 4
#define ADC_LOAD2 5
#define ADC_LOAD3 6
/** /**
* @brief Positive Zero Crossing Trigger Value * @brief Positive Zero Crossing Trigger Value
@ -71,18 +50,6 @@ const int GatePulsesQty = 5;
*/ */
const uint16_t GatePulses[5] = {250, 500, 750, 1000, 1250}; const uint16_t GatePulses[5] = {250, 500, 750, 1000, 1250};
/**
* @brief Low Threshold
*
*/
const uint16_t LowThresh = 527;
/**
* @brief High Threshold
*
*/
const uint16_t HighThresh = 1000;
/** /**
* @brief The time constant. * @brief The time constant.
*/ */

4713
inc/iotn404.h Normal file

File diff suppressed because it is too large Load diff

0
mocks/.mocks_git_dir Normal file
View file

5
mocks/CMakeLists.txt Normal file
View file

@ -0,0 +1,5 @@
add_subdirectory(MockRegEdit)
add_subdirectory(MockADC)

View 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
View 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
View 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

View file

@ -0,0 +1,12 @@
add_library(MockRegEdit STATIC
MockRegEdit.c
)
target_include_directories(MockRegEdit PUBLIC
${CMAKE_CURRENT_LIST_DIR}
)
target_link_libraries(MockRegEdit
${CPPUTEST_LIBRARIES}/libCppUTest.a
${CPPUTEST_LIBRARIES}/libCppUTestExt.a
)

View file

@ -0,0 +1,82 @@
/*
* 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);
}
uint8_t RegEdit_ReadReg(void *reg)
{
mock_c()->actualCall("RegEdit_ReadReg")
->withPointerParameters("reg", reg)
->returnUnsignedIntValueOrDefault(0);
//Return value is mock controlled. So it does actually return a uint8_t
}

View file

@ -0,0 +1,30 @@
/**
* @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);
uint8_t RegEdit_ReadReg(void *reg);
#endif //MOCKREGEDIT_H

View 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);
}

View 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

View file

@ -0,0 +1,226 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Include project Makefile
ifeq "${IGNORE_LOCAL}" "TRUE"
# do not include local makefile. User is passing all local related variables already
else
include Makefile
# Include makefile containing local settings
ifeq "$(wildcard nbproject/Makefile-local-attiny404.mk)" "nbproject/Makefile-local-attiny404.mk"
include nbproject/Makefile-local-attiny404.mk
endif
endif
# Environment
MKDIR=mkdir -p
RM=rm -f
MV=mv
CP=cp
# Macros
CND_CONF=attiny404
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
IMAGE_TYPE=debug
OUTPUT_SUFFIX=elf
DEBUGGABLE_SUFFIX=elf
FINAL_IMAGE=${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
else
IMAGE_TYPE=production
OUTPUT_SUFFIX=hex
DEBUGGABLE_SUFFIX=elf
FINAL_IMAGE=${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
endif
ifeq ($(COMPARE_BUILD), true)
COMPARISON_BUILD=-mafrlcsj
else
COMPARISON_BUILD=
endif
# Object Directory
OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
# Distribution Directory
DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
# Source Files Quoted if spaced
SOURCEFILES_QUOTED_IF_SPACED=src/main.c src/ADC/ADC.c src/load/load.c src/RegEdit/RegEdit.c src/TriacOut/TriacOut.c src/usart/usart.c src/zero_cross_detection/zero_cross_detection.c
# Object Files Quoted if spaced
OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/ADC/ADC.o ${OBJECTDIR}/src/load/load.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/TriacOut/TriacOut.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o
POSSIBLE_DEPFILES=${OBJECTDIR}/src/main.o.d ${OBJECTDIR}/src/ADC/ADC.o.d ${OBJECTDIR}/src/load/load.o.d ${OBJECTDIR}/src/RegEdit/RegEdit.o.d ${OBJECTDIR}/src/TriacOut/TriacOut.o.d ${OBJECTDIR}/src/usart/usart.o.d ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d
# Object Files
OBJECTFILES=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/ADC/ADC.o ${OBJECTDIR}/src/load/load.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/TriacOut/TriacOut.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o
# Source Files
SOURCEFILES=src/main.c src/ADC/ADC.c src/load/load.c src/RegEdit/RegEdit.c src/TriacOut/TriacOut.c src/usart/usart.c src/zero_cross_detection/zero_cross_detection.c
CFLAGS=
ASFLAGS=
LDLIBSOPTIONS=
############# Tool locations ##########################################
# If you copy a project from one host to another, the path where the #
# compiler is installed may be different. #
# If you open this project with MPLAB X in the new host, this #
# makefile will be regenerated and the paths will be corrected. #
#######################################################################
# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build
FIXDEPS=fixDeps
.build-conf: ${BUILD_SUBPROJECTS}
ifneq ($(INFORMATION_MESSAGE), )
@echo $(INFORMATION_MESSAGE)
endif
${MAKE} -f nbproject/Makefile-attiny404.mk ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
MP_PROCESSOR_OPTION=ATtiny404
# ------------------------------------------------------------------------------------
# Rules for buildStep: compile
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/973d092a94f4e52564d7ce86e36f69bac418b540 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src"
@${RM} ${OBJECTDIR}/src/main.o.d
@${RM} ${OBJECTDIR}/src/main.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
${OBJECTDIR}/src/ADC/ADC.o: src/ADC/ADC.c .generated_files/flags/attiny404/150e4fdaa98cfffac1465aa4432198132057d9bf .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/ADC"
@${RM} ${OBJECTDIR}/src/ADC/ADC.o.d
@${RM} ${OBJECTDIR}/src/ADC/ADC.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/ADC/ADC.o.d" -MT "${OBJECTDIR}/src/ADC/ADC.o.d" -MT ${OBJECTDIR}/src/ADC/ADC.o -o ${OBJECTDIR}/src/ADC/ADC.o src/ADC/ADC.c
${OBJECTDIR}/src/load/load.o: src/load/load.c .generated_files/flags/attiny404/a9b0751a67570a1e928536e1873e69792184c61f .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/load"
@${RM} ${OBJECTDIR}/src/load/load.o.d
@${RM} ${OBJECTDIR}/src/load/load.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/load/load.o.d" -MT "${OBJECTDIR}/src/load/load.o.d" -MT ${OBJECTDIR}/src/load/load.o -o ${OBJECTDIR}/src/load/load.o src/load/load.c
${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/59d483a95ae705703b3e2355352363eaaeec2de9 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/RegEdit"
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o.d
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
${OBJECTDIR}/src/TriacOut/TriacOut.o: src/TriacOut/TriacOut.c .generated_files/flags/attiny404/fc108d3f19af213d7ffab7fc8b221e2259566895 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/TriacOut"
@${RM} ${OBJECTDIR}/src/TriacOut/TriacOut.o.d
@${RM} ${OBJECTDIR}/src/TriacOut/TriacOut.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/TriacOut/TriacOut.o.d" -MT "${OBJECTDIR}/src/TriacOut/TriacOut.o.d" -MT ${OBJECTDIR}/src/TriacOut/TriacOut.o -o ${OBJECTDIR}/src/TriacOut/TriacOut.o src/TriacOut/TriacOut.c
${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/acddbea26e43a3ffb0db36cf85caa326e95b16a1 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/usart"
@${RM} ${OBJECTDIR}/src/usart/usart.o.d
@${RM} ${OBJECTDIR}/src/usart/usart.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o: src/zero_cross_detection/zero_cross_detection.c .generated_files/flags/attiny404/94f26d3715aa7c0633c6bcffd6ff0f4f0cacb041 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/zero_cross_detection"
@${RM} ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d
@${RM} ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d" -MT "${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d" -MT ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o -o ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o src/zero_cross_detection/zero_cross_detection.c
else
${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/b8ed6b97ab4da1f011bb7a3c8de719d5b59843ed .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src"
@${RM} ${OBJECTDIR}/src/main.o.d
@${RM} ${OBJECTDIR}/src/main.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
${OBJECTDIR}/src/ADC/ADC.o: src/ADC/ADC.c .generated_files/flags/attiny404/225c4037d222727e653624c1a5da19d0dee9de9a .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/ADC"
@${RM} ${OBJECTDIR}/src/ADC/ADC.o.d
@${RM} ${OBJECTDIR}/src/ADC/ADC.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/ADC/ADC.o.d" -MT "${OBJECTDIR}/src/ADC/ADC.o.d" -MT ${OBJECTDIR}/src/ADC/ADC.o -o ${OBJECTDIR}/src/ADC/ADC.o src/ADC/ADC.c
${OBJECTDIR}/src/load/load.o: src/load/load.c .generated_files/flags/attiny404/5e17c7ac963928818c89feccfcde0b0a2e93b9de .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/load"
@${RM} ${OBJECTDIR}/src/load/load.o.d
@${RM} ${OBJECTDIR}/src/load/load.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/load/load.o.d" -MT "${OBJECTDIR}/src/load/load.o.d" -MT ${OBJECTDIR}/src/load/load.o -o ${OBJECTDIR}/src/load/load.o src/load/load.c
${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/df76354fe7970e12f4d9e94d917742addacc88b6 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/RegEdit"
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o.d
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
${OBJECTDIR}/src/TriacOut/TriacOut.o: src/TriacOut/TriacOut.c .generated_files/flags/attiny404/bff14854247e779f0a090048c305a18397aaf78a .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/TriacOut"
@${RM} ${OBJECTDIR}/src/TriacOut/TriacOut.o.d
@${RM} ${OBJECTDIR}/src/TriacOut/TriacOut.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/TriacOut/TriacOut.o.d" -MT "${OBJECTDIR}/src/TriacOut/TriacOut.o.d" -MT ${OBJECTDIR}/src/TriacOut/TriacOut.o -o ${OBJECTDIR}/src/TriacOut/TriacOut.o src/TriacOut/TriacOut.c
${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/dc8767db7ed4e382808fc769a31f4b84fb9db449 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/usart"
@${RM} ${OBJECTDIR}/src/usart/usart.o.d
@${RM} ${OBJECTDIR}/src/usart/usart.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o: src/zero_cross_detection/zero_cross_detection.c .generated_files/flags/attiny404/1896f92e23988334cd2f227686e6376a49636983 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/zero_cross_detection"
@${RM} ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d
@${RM} ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o
${MP_CC} $(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 -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d" -MT "${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o.d" -MT ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o -o ${OBJECTDIR}/src/zero_cross_detection/zero_cross_detection.o src/zero_cross_detection/zero_cross_detection.c
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: assemble
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
else
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: assembleWithPreprocess
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
else
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: link
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${DISTDIR}
${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.map -D__DEBUG=1 -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -gdwarf-2 -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1
@${RM} ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.hex
else
${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${DISTDIR}
${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.map -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/ADC" -I"src/load" -I"src/RegEdit" -I"src/TriacOut" -I"src/zero_cross_detection" -I"src/usart" -I"inc" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group
${MP_CC_DIR}/avr-objcopy -O ihex "${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX}" "${DISTDIR}/fg004a_test.X.${IMAGE_TYPE}.hex"
endif
# Subprojects
.build-subprojects:
# Subprojects
.clean-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
${RM} -r ${OBJECTDIR}
${RM} -r ${DISTDIR}
# Enable dependency checking
.dep.inc: .depcheck-impl
DEPFILES=$(wildcard ${POSSIBLE_DEPFILES})
ifneq (${DEPFILES},)
include ${DEPFILES}
endif

View file

@ -1,8 +1,13 @@
# #
#Tue Jul 02 08:44:53 PDT 2024 #Wed Jul 24 17:51:50 PDT 2024
proj.dir=/home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X 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 host.id=2ov5-ff4p-rv
configurations-xml=dfce056fe36aa3735f488e4376d653a6 configurations-xml=635c55ff9add3625ec6ff71ce27eca38
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321 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
attiny404.Pack.dfplocation=/opt/microchip/mplabx/v6.20/packs/Microchip/ATtiny_DFP/3.1.260
host.platform=linux host.platform=linux
conf.ids=

View file

@ -24,14 +24,14 @@ CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
# Project Name # Project Name
PROJECTNAME=fg004a.X PROJECTNAME=fg004a_test.X
# Active Configuration # Active Configuration
DEFAULTCONF=default DEFAULTCONF=attiny404
CONF=${DEFAULTCONF} CONF=${DEFAULTCONF}
# All Configurations # All Configurations
ALLCONFS=default ALLCONFS=default attiny404
# build # build
@ -46,12 +46,14 @@ ALLCONFS=default
# clobber # clobber
.clobber-impl: .clobber-pre .depcheck-impl .clobber-impl: .clobber-pre .depcheck-impl
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=attiny404 clean
# all # all
.all-impl: .all-pre .depcheck-impl .all-impl: .all-pre .depcheck-impl
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=attiny404 build

View file

@ -0,0 +1,36 @@
#
# Generated Makefile - do not edit!
#
#
# This file contains information about the location of compilers and other tools.
# If you commmit this file into your revision control server, you will be able to
# to checkout the project and build it from the command line with make. However,
# if more than one person works on the same project, then this file might show
# conflicts since different users are bound to have compilers in different places.
# In that case you might choose to not commit this file and let MPLAB X recreate this file
# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at
# least once so the file gets created and the project can be built. Finally, you can also
# avoid using this file at all if you are only building from the command line with make.
# You can invoke make with the values of the macros:
# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ...
#
PATH_TO_IDE_BIN=/opt/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/
# Adding MPLAB X bin directory to path.
PATH:=/opt/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH)
# Path to java used to run MPLAB X when this makefile was created
MP_JAVA_PATH="/opt/microchip/mplabx/v6.20/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/"
OS_CURRENT="$(shell uname -s)"
MP_CC="/opt/microchip/xc8/v2.46/bin/xc8-cc"
# MP_CPPC is not defined
# MP_BC is not defined
MP_AS="/opt/microchip/xc8/v2.46/bin/xc8-cc"
MP_LD="/opt/microchip/xc8/v2.46/bin/xc8-cc"
MP_AR="/opt/microchip/xc8/v2.46/bin/xc8-ar"
DEP_GEN=${MP_JAVA_PATH}java -jar "/opt/microchip/mplabx/v6.20/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar"
MP_CC_DIR="/opt/microchip/xc8/v2.46/bin"
# MP_CPPC_DIR is not defined
# MP_BC_DIR is not defined
MP_AS_DIR="/opt/microchip/xc8/v2.46/bin"
MP_LD_DIR="/opt/microchip/xc8/v2.46/bin"
MP_AR_DIR="/opt/microchip/xc8/v2.46/bin"
DFP_DIR=/opt/microchip/mplabx/v6.20/packs/Microchip/ATtiny_DFP/3.1.260

View file

@ -6,5 +6,9 @@
CND_BASEDIR=`pwd` CND_BASEDIR=`pwd`
# default configuration # default configuration
CND_ARTIFACT_DIR_default=dist/default/production CND_ARTIFACT_DIR_default=dist/default/production
CND_ARTIFACT_NAME_default=fg004a.X.production.hex CND_ARTIFACT_NAME_default=fg004a_test.X.production.hex
CND_ARTIFACT_PATH_default=dist/default/production/fg004a.X.production.hex CND_ARTIFACT_PATH_default=dist/default/production/fg004a_test.X.production.hex
# attiny404 configuration
CND_ARTIFACT_DIR_attiny404=dist/attiny404/production
CND_ARTIFACT_NAME_attiny404=fg004a_test.X.production.hex
CND_ARTIFACT_PATH_attiny404=dist/attiny404/production/fg004a_test.X.production.hex

View file

@ -4,11 +4,13 @@
<logicalFolder name="HeaderFiles" <logicalFolder name="HeaderFiles"
displayName="Header Files" displayName="Header Files"
projectFiles="true"> projectFiles="true">
<itemPath>config.h</itemPath> <itemPath>src/ADC/ADC.h</itemPath>
<itemPath>zero_cross_detection.h</itemPath> <itemPath>src/load/load.h</itemPath>
<itemPath>RegEdit.h</itemPath> <itemPath>src/RegEdit/RegEdit.h</itemPath>
<itemPath>ADC.h</itemPath> <itemPath>src/TriacOut/TriacOut.h</itemPath>
<itemPath>TriacOut.h</itemPath> <itemPath>src/usart/usart.h</itemPath>
<itemPath>src/zero_cross_detection/zero_cross_detection.h</itemPath>
<itemPath>inc/config.h</itemPath>
</logicalFolder> </logicalFolder>
<logicalFolder name="ExternalFiles" <logicalFolder name="ExternalFiles"
displayName="Important Files" displayName="Important Files"
@ -22,11 +24,13 @@
<logicalFolder name="SourceFiles" <logicalFolder name="SourceFiles"
displayName="Source Files" displayName="Source Files"
projectFiles="true"> projectFiles="true">
<itemPath>main.c</itemPath> <itemPath>src/main.c</itemPath>
<itemPath>ADC.c</itemPath> <itemPath>src/ADC/ADC.c</itemPath>
<itemPath>RegEdit.c</itemPath> <itemPath>src/load/load.c</itemPath>
<itemPath>TriacOut.c</itemPath> <itemPath>src/RegEdit/RegEdit.c</itemPath>
<itemPath>zero_cross_detection.c</itemPath> <itemPath>src/TriacOut/TriacOut.c</itemPath>
<itemPath>src/usart/usart.c</itemPath>
<itemPath>src/zero_cross_detection/zero_cross_detection.c</itemPath>
</logicalFolder> </logicalFolder>
</logicalFolder> </logicalFolder>
<sourceRootList> <sourceRootList>
@ -40,10 +44,10 @@
<targetDevice>ATtiny404</targetDevice> <targetDevice>ATtiny404</targetDevice>
<targetHeader></targetHeader> <targetHeader></targetHeader>
<targetPluginBoard></targetPluginBoard> <targetPluginBoard></targetPluginBoard>
<platformTool>noID</platformTool> <platformTool>PK5Tool</platformTool>
<languageToolchain>AVR</languageToolchain> <languageToolchain>AVR</languageToolchain>
<languageToolchainVersion>1.00</languageToolchainVersion> <languageToolchainVersion>1.00</languageToolchainVersion>
<platform>3</platform> <platform>2</platform>
</toolsSet> </toolsSet>
<packs> <packs>
<pack name="ATtiny_DFP" vendor="Microchip" version="3.1.260"/> <pack name="ATtiny_DFP" vendor="Microchip" version="3.1.260"/>
@ -306,5 +310,281 @@
<property key="voltagevalue" value="5.0"/> <property key="voltagevalue" value="5.0"/>
</Tool> </Tool>
</conf> </conf>
<conf name="attiny404" type="2">
<toolsSet>
<developmentServer>localhost</developmentServer>
<targetDevice>ATtiny404</targetDevice>
<targetHeader></targetHeader>
<targetPluginBoard></targetPluginBoard>
<platformTool>PK5Tool</platformTool>
<languageToolchain>XC8</languageToolchain>
<languageToolchainVersion>2.46</languageToolchainVersion>
<platform>2</platform>
</toolsSet>
<packs>
<pack name="ATtiny_DFP" vendor="Microchip" version="3.1.260"/>
</packs>
<ScriptingSettings>
</ScriptingSettings>
<compileType>
<linkerTool>
<linkerLibItems>
</linkerLibItems>
</linkerTool>
<archiverTool>
</archiverTool>
<loading>
<useAlternateLoadableFile>false</useAlternateLoadableFile>
<parseOnProdLoad>false</parseOnProdLoad>
<alternateLoadableFile></alternateLoadableFile>
</loading>
<subordinates>
</subordinates>
</compileType>
<makeCustomizationType>
<makeCustomizationPreStepEnabled>false</makeCustomizationPreStepEnabled>
<makeUseCleanTarget>false</makeUseCleanTarget>
<makeCustomizationPreStep></makeCustomizationPreStep>
<makeCustomizationPostStepEnabled>false</makeCustomizationPostStepEnabled>
<makeCustomizationPostStep></makeCustomizationPostStep>
<makeCustomizationPutChecksumInUserID>false</makeCustomizationPutChecksumInUserID>
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
</makeCustomizationType>
<HI-TECH-COMP>
<property key="additional-warnings" value="true"/>
<property key="asmlist" value="true"/>
<property key="call-prologues" value="false"/>
<property key="default-bitfield-type" value="true"/>
<property key="default-char-type" value="true"/>
<property key="define-macros" value=""/>
<property key="disable-optimizations" value="false"/>
<property key="extra-include-directories"
value="src/ADC;src/load;src/RegEdit;src/TriacOut;src/zero_cross_detection;src/usart;inc"/>
<property key="favor-optimization-for" value="-speed,+space"/>
<property key="garbage-collect-data" value="true"/>
<property key="garbage-collect-functions" value="true"/>
<property key="identifier-length" value="255"/>
<property key="local-generation" value="false"/>
<property key="operation-mode" value="free"/>
<property key="opt-xc8-compiler-strict_ansi" value="false"/>
<property key="optimization-assembler" value="true"/>
<property key="optimization-assembler-files" value="true"/>
<property key="optimization-debug" value="false"/>
<property key="optimization-invariant-enable" value="false"/>
<property key="optimization-invariant-value" value="16"/>
<property key="optimization-level" value="-O1"/>
<property key="optimization-speed" value="false"/>
<property key="optimization-stable-enable" value="false"/>
<property key="preprocess-assembler" value="true"/>
<property key="short-enums" value="true"/>
<property key="tentative-definitions" value="-fno-common"/>
<property key="undefine-macros" value=""/>
<property key="use-cci" value="false"/>
<property key="use-iar" value="false"/>
<property key="verbose" value="false"/>
<property key="warning-level" value="-3"/>
<property key="what-to-do" value="ignore"/>
</HI-TECH-COMP>
<HI-TECH-LINK>
<property key="additional-options-checksum" value=""/>
<property key="additional-options-checksumAVR" value=""/>
<property key="additional-options-code-offset" value=""/>
<property key="additional-options-command-line" value=""/>
<property key="additional-options-errata" value=""/>
<property key="additional-options-extend-address" value="false"/>
<property key="additional-options-trace-type" value=""/>
<property key="additional-options-use-response-files" value="false"/>
<property key="backup-reset-condition-flags" value="false"/>
<property key="calibrate-oscillator" value="false"/>
<property key="calibrate-oscillator-value" value="0x3400"/>
<property key="clear-bss" value="true"/>
<property key="code-model-external" value="wordwrite"/>
<property key="code-model-rom" value=""/>
<property key="create-html-files" value="false"/>
<property key="data-model-ram" value=""/>
<property key="data-model-size-of-double" value="24"/>
<property key="data-model-size-of-double-gcc" value="no-short-double"/>
<property key="data-model-size-of-float" value="24"/>
<property key="data-model-size-of-float-gcc" value="no-short-float"/>
<property key="display-class-usage" value="false"/>
<property key="display-hex-usage" value="false"/>
<property key="display-overall-usage" value="true"/>
<property key="display-psect-usage" value="false"/>
<property key="extra-lib-directories" value=""/>
<property key="fill-flash-options-addr" value=""/>
<property key="fill-flash-options-const" value=""/>
<property key="fill-flash-options-how" value="0"/>
<property key="fill-flash-options-inc-const" value="1"/>
<property key="fill-flash-options-increment" value=""/>
<property key="fill-flash-options-seq" value=""/>
<property key="fill-flash-options-what" value="0"/>
<property key="format-hex-file-for-download" value="false"/>
<property key="initialize-data" value="true"/>
<property key="input-libraries" value="libm"/>
<property key="keep-generated-startup.as" value="false"/>
<property key="link-in-c-library" value="true"/>
<property key="link-in-c-library-gcc" value=""/>
<property key="link-in-peripheral-library" value="false"/>
<property key="managed-stack" value="false"/>
<property key="opt-xc8-linker-file" value="false"/>
<property key="opt-xc8-linker-link_startup" value="false"/>
<property key="opt-xc8-linker-serial" value=""/>
<property key="program-the-device-with-default-config-words" value="false"/>
<property key="remove-unused-sections" value="true"/>
</HI-TECH-LINK>
<PK5Tool>
<property key="AutoSelectMemRanges" value="auto"/>
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UpdateOptions"
value="ToolFirmwareOption.UseLatest"/>
<property key="ToolFirmwareToolPack"
value="Press to select which tool pack to use"/>
<property key="communication.activationmode" value="nohv"/>
<property key="communication.interface" value="updi"/>
<property key="communication.interface.jtag" value="2wire"/>
<property key="communication.speed" value="0.250"/>
<property key="debugoptions.debug-startup" value="Use system settings"/>
<property key="debugoptions.reset-behaviour" value="Use system settings"/>
<property key="debugoptions.useswbreakpoints" value="false"/>
<property key="event.recorder.debugger.behavior" value="Running"/>
<property key="event.recorder.enabled" value="false"/>
<property key="event.recorder.scvd.files" value=""/>
<property key="hwtoolclock.frcindebug" value="false"/>
<property key="lastid" value=""/>
<property key="memories.aux" value="false"/>
<property key="memories.bootflash" value="true"/>
<property key="memories.configurationmemory" value="true"/>
<property key="memories.configurationmemory2" value="true"/>
<property key="memories.dataflash" value="true"/>
<property key="memories.eeprom" value="true"/>
<property key="memories.exclude.configurationmemory" value="true"/>
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.ranges" value="0-7ff"/>
<property key="poweroptions.powerenable" value="true"/>
<property key="programmerToGoImageName" value="fg004a_ptg"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.ledbrightness" value="5"/>
<property key="programoptions.pgcconfig" value="pull down"/>
<property key="programoptions.pgcresistor.value" value="4.7"/>
<property key="programoptions.pgdconfig" value="pull down"/>
<property key="programoptions.pgdresistor.value" value="4.7"/>
<property key="programoptions.pgmentry.voltage" value="low"/>
<property key="programoptions.pgmspeed" value="Med"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value="1400-147f"/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.program.otpconfig" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
<property key="programoptions.smart.program" value="When debugging only"/>
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
<property key="ptgProgramImage" value="true"/>
<property key="ptgSendImage" value="true"/>
<property key="toolpack.updateoptions"
value="toolpack.updateoptions.uselatestoolpack"/>
<property key="toolpack.updateoptions.packversion"
value="Press to select which tool pack to use"/>
<property key="voltagevalue" value="5.0"/>
</PK5Tool>
<Tool>
<property key="AutoSelectMemRanges" value="auto"/>
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UpdateOptions"
value="ToolFirmwareOption.UseLatest"/>
<property key="ToolFirmwareToolPack"
value="Press to select which tool pack to use"/>
<property key="communication.activationmode" value="nohv"/>
<property key="communication.interface" value="updi"/>
<property key="communication.interface.jtag" value="2wire"/>
<property key="communication.speed" value="0.250"/>
<property key="debugoptions.debug-startup" value="Use system settings"/>
<property key="debugoptions.reset-behaviour" value="Use system settings"/>
<property key="debugoptions.useswbreakpoints" value="false"/>
<property key="event.recorder.debugger.behavior" value="Running"/>
<property key="event.recorder.enabled" value="false"/>
<property key="event.recorder.scvd.files" value=""/>
<property key="hwtoolclock.frcindebug" value="false"/>
<property key="lastid" value=""/>
<property key="memories.aux" value="false"/>
<property key="memories.bootflash" value="true"/>
<property key="memories.configurationmemory" value="true"/>
<property key="memories.configurationmemory2" value="true"/>
<property key="memories.dataflash" value="true"/>
<property key="memories.eeprom" value="true"/>
<property key="memories.exclude.configurationmemory" value="true"/>
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.ranges" value="0-7ff"/>
<property key="poweroptions.powerenable" value="true"/>
<property key="programmerToGoFilePath"
value="C:/Users/Lenovo/MPLABXProjects/fg004a.X/debug/default/fg004a_ptg"/>
<property key="programmerToGoImageName" value="fg004a_ptg"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.ledbrightness" value="5"/>
<property key="programoptions.pgcconfig" value="pull down"/>
<property key="programoptions.pgcresistor.value" value="4.7"/>
<property key="programoptions.pgdconfig" value="pull down"/>
<property key="programoptions.pgdresistor.value" value="4.7"/>
<property key="programoptions.pgmentry.voltage" value="low"/>
<property key="programoptions.pgmspeed" value="Med"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value="1400-147f"/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.program.otpconfig" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
<property key="programoptions.smart.program" value="When debugging only"/>
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
<property key="ptgProgramImage" value="true"/>
<property key="ptgSendImage" value="true"/>
<property key="toolpack.updateoptions"
value="toolpack.updateoptions.uselatestoolpack"/>
<property key="toolpack.updateoptions.packversion"
value="Press to select which tool pack to use"/>
<property key="voltagevalue" value="5.0"/>
</Tool>
<XC8-CO>
<property key="coverage-enable" value=""/>
<property key="stack-guidance" value="false"/>
</XC8-CO>
<XC8-config-global>
<property key="advanced-elf" value="true"/>
<property key="constdata-progmem" value="false"/>
<property key="gcc-opt-driver-new" value="true"/>
<property key="gcc-opt-std" value="-std=c99"/>
<property key="gcc-output-file-format" value="dwarf-3"/>
<property key="mapped-progmem" value="false"/>
<property key="omit-pack-options" value="false"/>
<property key="omit-pack-options-new" value="1"/>
<property key="output-file-format" value="-mcof,+elf"/>
<property key="smart-io-format" value=""/>
<property key="stack-size-high" value="auto"/>
<property key="stack-size-low" value="auto"/>
<property key="stack-size-main" value="auto"/>
<property key="stack-type" value="compiled"/>
<property key="user-pack-device-support" value=""/>
<property key="wpo-lto" value="false"/>
</XC8-config-global>
</conf>
</confs> </confs>
</configurationDescriptor> </configurationDescriptor>

View file

@ -0,0 +1,53 @@
#
#Tue Jul 02 11:57:01 PDT 2024
pk4hybrid/CHECK_4_HIGH_VOLTAGE_VPP=false
realice/CAL_WARNING=false
icd5/CAL_WARNING=false
pk4hybrid/DEVID_MISMATCH=false
pkobskde/CHECK_4_HIGH_VOLTAGE_VPP=false
icd4/SIMULTANEOUS_DEBUG_WARNING=false
EmbeddedAssemblySyntax/MULTIPLE_PROJECT_OWNERSHIP=false
icd3/CHECK_4_HIGH_VOLTAGE_VPP=false
mdbDebugger/MEMORY_VIEW_NO_HW_BP_RESOURCES_WARN=false
pk3/DEVID_MISMATCH=false
pk4hybrid/EESAVE_DONT_DO_NUTHIN=false
pk4hybrid/CANT_HALT_IN_MMD_MODE=false
mdbDebugger/NO_HW_COMBINER_RESOURCES_WARNING=false
mdbDebugger/MEMORY_VIEW_LAST_HW_BP_RESOURCE_WARN=false
pkobskde/CHECK_CLOCK=false
pk4hybrid/MCLR_HOLD_RESET_NO_MAINTAIN_POWER=false
realice/CHECK_4_HIGH_VOLTAGE_VPP=false
mdbDebugger/LAST_HW_BP_RESOURCE_WARN=false
realice/DEVID_MISMATCH=false
icd4/CAL_WARNING=false
icd4/PROGRAM_CFG_WARNING=false
icd3/VPP_FIRST_WARNING=false
mdbDebugger/SOFTWARE_BREAK_POINT_PREFERENCE=false
pkoblicdbgr/DEVID_MISMATCH=false
icd5/SIMULTANEOUS_DEBUG_WARNING=false
icd5/DEVID_MISMATCH=false
icd4/DEVID_MISMATCH=false
icd3/CHECK_CLOCK=false
icd3/DEVID_MISMATCH=false
pk4hybrid/SIMULTANEOUS_DEBUG_WARNING=false
pkoblicdbgr/CHECK_4_HIGH_VOLTAGE_VPP=false
icd5/CHECK_4_HIGH_VOLTAGE_VPP=false
icd4/MCLR_HOLD_RESET_NO_MAINTAIN_POWER=false
icd3/CAL_WARNING=false
pk3/CHECK_CLOCK=false
mdbDebugger/NO_HW_BP_RESOURCES_WARN=false
pk4hybrid/CAL_WARNING=false
pkoblicdbgr/CHECK_CLOCK=false
icd5/MCLR_HOLD_RESET_NO_MAINTAIN_POWER=false
pk3/CAL_WARNING=false
pkobskde/VPP_FIRST_WARNING=false
icd4/CHECK_4_HIGH_VOLTAGE_VPP=false
icd4/EESAVE_DONT_DO_NUTHIN=false
pk4hybrid/PROGRAM_CFG_WARNING=false
icd5/EESAVE_DONT_DO_NUTHIN=false
pkobskde/DEVID_MISMATCH=false
icd4/CANT_HALT_IN_MMD_MODE=false
realice/CHECK_CLOCK=false
pk3/CHECK_4_HIGH_VOLTAGE_VPP=false
icd5/PROGRAM_CFG_WARNING=false
pk3/VPP_FIRST_WARNING=false

View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="65"> <configurationDescriptor version="65">
<projectmakefile>Makefile</projectmakefile> <projectmakefile>Makefile</projectmakefile>
<defaultConf>0</defaultConf> <defaultConf>1</defaultConf>
<confs> <confs>
<conf name="default" type="2"> <conf name="default" type="2">
<platformToolSN>noToolString</platformToolSN> <platformToolSN>:=MPLABComm-USB-Microchip:=&lt;vid>04D8:=&lt;pid>9036:=&lt;rev>0100:=&lt;man>Microchip Technology Incorporated:=&lt;prod>MPLAB PICkit 5:=&lt;sn>020026702RYN031742:=&lt;drv>x:=&lt;xpt>b:=end</platformToolSN>
<languageToolchainDir>C:\Program Files\avr-gcc\bin</languageToolchainDir> <languageToolchainDir>C:\Program Files\avr-gcc\bin</languageToolchainDir>
<mdbdebugger version="1"> <mdbdebugger version="1">
<placeholder1>place holder 1</placeholder1> <placeholder1>place holder 1</placeholder1>
@ -21,5 +21,23 @@
</environment> </environment>
</runprofile> </runprofile>
</conf> </conf>
<conf name="attiny404" type="2">
<platformToolSN>:=MPLABComm-USB-Microchip:=&lt;vid>04D8:=&lt;pid>9036:=&lt;rev>0100:=&lt;man>Microchip Technology Incorporated:=&lt;prod>MPLAB PICkit 5:=&lt;sn>020026702RYN031742:=&lt;drv>x:=&lt;xpt>b:=end</platformToolSN>
<languageToolchainDir>/opt/microchip/xc8/v2.46/bin</languageToolchainDir>
<mdbdebugger version="1">
<placeholder1>place holder 1</placeholder1>
<placeholder2>place holder 2</placeholder2>
</mdbdebugger>
<runprofile version="6">
<args></args>
<rundir></rundir>
<buildfirst>true</buildfirst>
<console-type>0</console-type>
<terminal-type>0</terminal-type>
<remove-instrumentation>0</remove-instrumentation>
<environment>
</environment>
</runprofile>
</conf>
</confs> </confs>
</configurationDescriptor> </configurationDescriptor>

View file

@ -3,8 +3,10 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/> <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2"> <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group> <group>
<file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/main.c</file> <file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/src/load/load.c</file>
<file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a.X/.git/config</file> <file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/src/zero_cross_detection/zero_cross_detection.c</file>
<file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/src/main.c</file>
<file>file:/home/ronin/Documents/projects/freelance/laith_naaman/fg004a_test.X/src/usart/usart.c</file>
</group> </group>
</open-files> </open-files>
</project-private> </project-private>

View file

@ -16,6 +16,10 @@
<name>default</name> <name>default</name>
<type>2</type> <type>2</type>
</confElem> </confElem>
<confElem>
<name>attiny404</name>
<type>2</type>
</confElem>
</confList> </confList>
<formatting> <formatting>
<project-formatting-style>false</project-formatting-style> <project-formatting-style>false</project-formatting-style>

335
otto.sh Normal file
View 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

1064
queuelogs/debugtool.txt Normal file

File diff suppressed because it is too large Load diff

86
setup.sh Normal file
View 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

View file

@ -5,10 +5,16 @@
* description: module_purpose * description: module_purpose
*/ */
#ifndef __AVR_ATtiny404__
#define __AVR_ATtiny404__
#endif
#include "ADC.h" #include "ADC.h"
#include "RegEdit.h" #include "RegEdit.h"
#include "avr/io.h" #include "avr/io.h"
static uint8_t porta_out;
static uint8_t porta_dir;
static bool IsInvalidPin(uint8_t pin_num){ static bool IsInvalidPin(uint8_t pin_num){
if(pin_num > 7){ if(pin_num > 7){
@ -20,8 +26,13 @@ static bool IsInvalidPin(uint8_t pin_num){
void ADC_Init(uint8_t pin_num) void ADC_Init(uint8_t pin_num)
{ {
if(IsInvalidPin(pin_num)){return;} if(IsInvalidPin(pin_num)){return;}
//Save the porta status.
porta_out = RegEdit_ReadReg((void *) &PORTA.OUT);
porta_dir = RegEdit_ReadReg((void *) &PORTA.DIR);
//set the direction to input //set the direction to input
RegEdit_SetBit((void *) &PORTA.DIRCLR, pin_num); RegEdit_SetBit((void *) &PORTA.DIRCLR, pin_num);
@ -36,17 +47,12 @@ void ADC_Init(uint8_t pin_num)
(void *) (&PORTA.PIN0CTRL)+pin_num, (void *) (&PORTA.PIN0CTRL)+pin_num,
PORT_ISC_INPUT_DISABLE_gc PORT_ISC_INPUT_DISABLE_gc
); );
/*
RegEdit_OR_Num(
(void *) (&PORTA.PIN0CTRL)+pin_num,
PORT_ISC_INPUT_DISABLE_gc
);*/
//Ensure we use full 10bit resolution //Ensure we use full 10bit resolution
RegEdit_ClearBit((void *) &ADC0.CTRLA, 2); //RegEdit_ClearBit((void *) &ADC0.CTRLA, 2);
//Use VDD as our voltage refernce. //Use VDD as our voltage refernce.
RegEdit_SetBit((void *) &ADC0.CTRLC, 4); //RegEdit_SetBit((void *) &ADC0.CTRLC, 4);
} }
@ -70,6 +76,10 @@ void ADC_Disable()
//Clear the enable ADC flag //Clear the enable ADC flag
RegEdit_ClearBit((void *) &ADC0.CTRLA, 0); RegEdit_ClearBit((void *) &ADC0.CTRLA, 0);
//Restore the port registers
RegEdit_SetNum((void *) &PORTA.OUT, porta_out);
RegEdit_SetNum((void *) &PORTA.DIR, porta_dir);
} }

22
src/ADC/CMakeLists.txt Normal file
View 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
View 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)

View file

@ -0,0 +1,7 @@
add_library(RegEdit STATIC
RegEdit.c
)
target_include_directories(RegEdit PUBLIC
${CMAKE_CURRENT_LIST_DIR}
)

View file

@ -56,3 +56,10 @@ void RegEdit_SetNum(void *reg, uint8_t num)
uint8_t *reg_ptr = (uint8_t *)reg; uint8_t *reg_ptr = (uint8_t *)reg;
*reg_ptr = num; *reg_ptr = num;
} }
uint8_t RegEdit_ReadReg(void *reg)
{
uint8_t *reg_ptr = (uint8_t *)reg;
return *reg_ptr;
}

View file

@ -69,4 +69,10 @@ void RegEdit_AND_Num(void *reg, uint8_t num);
*/ */
void RegEdit_SetNum(void *reg, uint8_t num); void RegEdit_SetNum(void *reg, uint8_t num);
/**
*
* @param reg The register address.
*/
uint8_t RegEdit_ReadReg(void *reg);
#endif //REGEDIT_H #endif //REGEDIT_H

View 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()

View file

@ -12,23 +12,6 @@
#include "TriacOut.h" #include "TriacOut.h"
#include "RegEdit.h" #include "RegEdit.h"
#define G1 1
#define G2 3
#define G3 2
#define G1_BM (1<<1)
#define G2_BM (1<<3)
#define G3_BM (1<<2)
void Delay_MicroSeconds_impl(double us){
return;
}
//Delay_MicroSeconds =
//void (*Delay_MicroSeconds)(double us) = Delay_MicroSeconds_impl;
void (*Delay_MicroSecnds)(double us) = Delay_MicroSeconds_impl;
void TriacOut_InitTimerA(void) void TriacOut_InitTimerA(void)
{ {
@ -53,12 +36,9 @@ void TriacOut_SetAllHigh(void)
void TriacOut_PulsePins(uint16_t pulse_time) void TriacOut_PulsePins(uint16_t pulse_time)
{ {
Delay_MicroSeconds(pulse_time); Delay_MicroSeconds(pulse_time);
RegEdit_ClearBit((void *) &PORTA.OUT, G1); RegEdit_ClearBit((void *) &PORTA.OUT, G1);
RegEdit_ClearBit((void *) &PORTB.OUT, G2); RegEdit_ClearBit((void *) &PORTB.OUT, G2);
RegEdit_ClearBit((void *) &PORTB.OUT, G3); RegEdit_ClearBit((void *) &PORTB.OUT, G3);
} }

View file

@ -12,6 +12,15 @@
#include <stdint.h> #include <stdint.h>
#define G1 1
#define G2 3
#define G3 2
#define G1_BM (1<<1)
#define G2_BM (1<<3)
#define G3_BM (1<<2)
extern void (*Delay_MicroSeconds)(double us); extern void (*Delay_MicroSeconds)(double us);
@ -35,4 +44,5 @@ void TriacOut_SetupPins(void);
void TriacOut_SetAllHigh(void); void TriacOut_SetAllHigh(void);
#endif //TRIACOUT_H #endif //TRIACOUT_H

22
src/load/CMakeLists.txt Normal file
View 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()

43
src/load/load.c Normal file
View file

@ -0,0 +1,43 @@
#include <avr/io.h>
#include "load.h"
#include "ADC.h"
#include "RegEdit.h"
#define G1 1
#define G2 3
#define G3 2
#define SAMPLE_QTY 32
void Load_HandleLoadPortA(uint8_t adc_pin, uint8_t out_pin)
{
ADC_Init(adc_pin);
ADC_Enable(adc_pin);
uint16_t val = 0;
for(int i = 0; i < 32; i++){
val += ADC_ReadValue(adc_pin);
}
val /= 32;
ADC_Disable();
if(val < 527 || val > 1000){
RegEdit_ClearBit((void *) &PORTA.OUT, out_pin);
RegEdit_ClearBit((void *) &PORTA.DIR, out_pin);
}
}
void Load_HandleLoadPortB(uint8_t adc_pin, uint8_t out_pin)
{
ADC_Init(adc_pin);
ADC_Enable(adc_pin);
uint16_t val = 0;
for(int i = 0; i < 32; i++){
val = ADC_ReadValue(adc_pin);
}
ADC_Disable();
if(val < 527 || val > 1000){
RegEdit_ClearBit((void *) &PORTB.OUT, out_pin);
RegEdit_ClearBit((void *) &PORTB.DIR, out_pin);
}
}

32
src/load/load.h Normal file
View file

@ -0,0 +1,32 @@
/**
* @brief Module for handling the ADC input from the load pins.
* @details This file holds the functions for reading the ADC values.
* @author Jake G
* @date 2024
* @copyright None
* @file load.h
*/
#ifndef LOAD_H
#define LOAD_H
/**
* @brief Low Threshold
*
*/
#define LOWTHRESH 527
/**
* @brief High Threshold
*
*/
#define HIGHTHRESH 1000
void Load_HandleLoadPortA(uint8_t adc_pin, uint8_t out_pin);
void Load_HandleLoadPortB(uint8_t adc_pin, uint8_t out_pin);
void Load_HandlePinLoads(void);
#endif /* LOAD_H */

View file

@ -9,7 +9,9 @@
* extracted into separate source files and headers for configuration. * extracted into separate source files and headers for configuration.
*/ */
#define F_CPU 2000000UL //#define F_CPU 2000000UL
#define F_CPU 3333333UL
//These defines are mostly useful for when you want you editors LSP server to //These defines are mostly useful for when you want you editors LSP server to
//function correctly. //function correctly.
@ -25,6 +27,8 @@
#include "zero_cross_detection.h" #include "zero_cross_detection.h"
#include "ADC.h" #include "ADC.h"
#include "TriacOut.h" #include "TriacOut.h"
#include "load.h"
#include <avr/cpufunc.h> /* Required header file */
#include <avr/io.h> #include <avr/io.h>
#include <util/delay.h> #include <util/delay.h>
@ -34,8 +38,19 @@
void (*Delay_MicroSeconds)(double us) = _delay_us; void (*Delay_MicroSeconds)(double us) = _delay_us;
//void (*Delay_MicroSeconds)(double us) = _delay_ms; //void (*Delay_MicroSeconds)(double us) = _delay_ms;
/*
static void CLK_DisablePrescaler(void)
{
//CCP = CCP_IOREG_gc; //Write the needed signature to CCP
ccp_write_io((void *) & (CLKCTRL.MCLKCTRLA), 0x00); //select internal 20MHz clock.
ccp_write_io((void *) & (CLKCTRL.MCLKCTRLB), 0x00); //Disable the pre-scaler.
}
*/
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
//CLK_DisablePrescaler();
while(true){ while(true){
for(int i = 0; i < GatePulsesQty; i++){ for(int i = 0; i < GatePulsesQty; i++){
ZCD_Poll(); ZCD_Poll();

7
src/usart/CMakeLists.txt Normal file
View 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
View 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_CPU 3333333UL
#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
View 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

View 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()

View file

@ -15,6 +15,8 @@
#include "MockADC/MockADC.h" #include "MockADC/MockADC.h"
#endif #endif
#define ZCD_PIN 0x07
void ZCD_Setup(void) void ZCD_Setup(void)
{ {
ADC_Init(7); ADC_Init(7);
@ -25,11 +27,11 @@ bool ZCD_IsTriggered()
{ {
uint16_t first, second; uint16_t first, second;
ZCD_Setup(); ZCD_Setup();
first = ADC_ReadValue(7); first = ADC_ReadValue(ZCD_PIN);
ADC_Disable(); ADC_Disable();
ZCD_Setup(); ZCD_Setup();
second = ADC_ReadValue(7); second = ADC_ReadValue(ZCD_PIN);
ADC_Disable(); ADC_Disable();
if(second < TRIGGERVAL){ if(second < TRIGGERVAL){

View 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
View 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
View 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);
}
static void ADCStoresPortState(void){
mock().expectOneCall("RegEdit_ReadReg")
.withPointerParameter("reg", (void *) &PORTA.OUT)
.andReturnValue(0xFF);
mock().expectOneCall("RegEdit_ReadReg")
.withPointerParameter("reg", (void *) &PORTA.DIR)
.andReturnValue(0xFF);
}
TEST(test_ADC, ADC_InitPortAPin7UsesCorrectRegisters)
{
ADCStoresPortState();
//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_SetBit")
.withPointerParameter("reg", (void *) &PORTA.PIN7CTRL)
.withUnsignedIntParameter("bit_num", PORT_ISC_INPUT_DISABLE_gc);
ADC_Init(7);
}
TEST(test_ADC, ADC_InitPortAPin0UsesCorrectRegisters)
{
ADCStoresPortState();
//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_SetBit")
.withPointerParameter("reg", (void *) &PORTA.PIN0CTRL)
.withUnsignedIntParameter("bit_num", PORT_ISC_INPUT_DISABLE_gc);
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);
mock().expectOneCall("RegEdit_SetNum")
.withPointerParameter("reg", (void*) &PORTA.OUT)
.ignoreOtherParameters();
mock().expectOneCall("RegEdit_SetNum")
.withPointerParameter("reg", (void*) &PORTA.DIR)
.ignoreOtherParameters();
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
View 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

50
tests/CMakeLists.txt Normal file
View file

@ -0,0 +1,50 @@
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
${CPPUTEST_LIBRARIES}/libCppUTest.a
${CPPUTEST_LIBRARIES}/libCppUTestExt.a
test_TriacOut
)

View 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
)

View 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);
}
}

View 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
)

View file

@ -0,0 +1,168 @@
/*
* 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();
}
TEST(test_MockRegEdit, RegEdit_ReadRegPasses)
{
uint8_t a = 0xFF;
uint8_t *b = &a;
mock().expectOneCall("RegEdit_ReadReg")
.withPointerParameter("reg", b)
.andReturnValue(0xFF);
uint8_t reg_val = RegEdit_ReadReg(b);
LONGS_EQUAL(0xFF, reg_val);
mock().checkExpectations();
}

14
tests/MockTests.cpp Normal file
View 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

View 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
)

View 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);
}

View 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
)

Some files were not shown because too many files have changed in this diff Show more