Compare commits
No commits in common. "8fbbc167affcce02bc4ed44a75ff4d9e069a4580" and "27509e21ee7d838ac4f8362e4b630723227a85c0" have entirely different histories.
8fbbc167af
...
27509e21ee
24 changed files with 1651 additions and 1351 deletions
377
CMakeCache.txt
Normal file
377
CMakeCache.txt
Normal file
|
|
@ -0,0 +1,377 @@
|
|||
# This is the CMakeCache file.
|
||||
# For build in directory: /home/philipp/Programming/avr/RGBcontroller
|
||||
# It was generated by CMake: /usr/bin/cmake
|
||||
# You can edit this file to change values found and used by cmake.
|
||||
# If you do not want to change any of the values, simply exit the editor.
|
||||
# If you do want to change a value, simply edit, save, and exit the editor.
|
||||
# The syntax for the file is as follows:
|
||||
# KEY:TYPE=VALUE
|
||||
# KEY is the name of a variable in the cache.
|
||||
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
|
||||
# VALUE is the current value for the KEY.
|
||||
|
||||
########################
|
||||
# EXTERNAL cache entries
|
||||
########################
|
||||
|
||||
//Path to a program.
|
||||
AR_AVRDUDE:FILEPATH=/usr/bin/avrdude
|
||||
|
||||
//Path to a program.
|
||||
AR_AVRSIZE:FILEPATH=/usr/bin/avr-size
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_AR:FILEPATH=/bin/ar
|
||||
|
||||
//Choose the type of build, options are: None Debug Release RelWithDebInfo
|
||||
// MinSizeRel ...
|
||||
CMAKE_BUILD_TYPE:STRING=
|
||||
|
||||
//Enable/Disable color output during build.
|
||||
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
||||
|
||||
//CXX compiler
|
||||
CMAKE_CXX_COMPILER:FILEPATH=/bin/c++
|
||||
|
||||
//A wrapper around 'ar' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_CXX_COMPILER_AR:FILEPATH=/bin/gcc-ar
|
||||
|
||||
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/bin/gcc-ranlib
|
||||
|
||||
//Flags used by the CXX compiler during all build types.
|
||||
CMAKE_CXX_FLAGS:STRING=
|
||||
|
||||
//Flags used by the CXX compiler during DEBUG builds.
|
||||
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
|
||||
|
||||
//Flags used by the CXX compiler during MINSIZEREL builds.
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
|
||||
|
||||
//Flags used by the CXX compiler during RELEASE builds.
|
||||
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
|
||||
|
||||
//Flags used by the CXX compiler during RELWITHDEBINFO builds.
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
|
||||
|
||||
//C compiler
|
||||
CMAKE_C_COMPILER:FILEPATH=/bin/cc
|
||||
|
||||
//A wrapper around 'ar' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_C_COMPILER_AR:FILEPATH=/bin/gcc-ar
|
||||
|
||||
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_C_COMPILER_RANLIB:FILEPATH=/bin/gcc-ranlib
|
||||
|
||||
//Flags used by the C compiler during all build types.
|
||||
CMAKE_C_FLAGS:STRING=
|
||||
|
||||
//Flags used by the C compiler during DEBUG builds.
|
||||
CMAKE_C_FLAGS_DEBUG:STRING=-g
|
||||
|
||||
//Flags used by the C compiler during MINSIZEREL builds.
|
||||
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
|
||||
|
||||
//Flags used by the C compiler during RELEASE builds.
|
||||
CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
|
||||
|
||||
//Flags used by the C compiler during RELWITHDEBINFO builds.
|
||||
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
|
||||
|
||||
//Flags used by the linker during all build types.
|
||||
CMAKE_EXE_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during DEBUG builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during MINSIZEREL builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during RELEASE builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during RELWITHDEBINFO builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Enable/Disable output of compile commands during generation.
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
|
||||
|
||||
//Install path prefix, prepended onto install directories.
|
||||
CMAKE_INSTALL_PREFIX:PATH=/usr/local
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_LINKER:FILEPATH=/bin/ld
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_MAKE_PROGRAM:FILEPATH=/bin/make
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// all build types.
|
||||
CMAKE_MODULE_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// DEBUG builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// MINSIZEREL builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// RELEASE builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// RELWITHDEBINFO builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_NM:FILEPATH=/bin/nm
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_OBJCOPY:FILEPATH=/bin/objcopy
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_OBJDUMP:FILEPATH=/bin/objdump
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_DESCRIPTION:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_NAME:STATIC=rgbcontroller
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_RANLIB:FILEPATH=/bin/ranlib
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during all build types.
|
||||
CMAKE_SHARED_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during DEBUG builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during MINSIZEREL builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during RELEASE builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during RELWITHDEBINFO builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//If set, runtime paths are not added when installing shared libraries,
|
||||
// but are added when building.
|
||||
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
|
||||
|
||||
//If set, runtime paths are not added when using shared libraries.
|
||||
CMAKE_SKIP_RPATH:BOOL=NO
|
||||
|
||||
//Flags used by the linker during the creation of static libraries
|
||||
// during all build types.
|
||||
CMAKE_STATIC_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of static libraries
|
||||
// during DEBUG builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of static libraries
|
||||
// during MINSIZEREL builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of static libraries
|
||||
// during RELEASE builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of static libraries
|
||||
// during RELWITHDEBINFO builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_STRIP:FILEPATH=/bin/strip
|
||||
|
||||
//If this value is on, makefiles will be generated without the
|
||||
// .SILENT directive, and all commands will be echoed to the console
|
||||
// during the make. This is useful for debugging only. With Visual
|
||||
// Studio IDE projects all commands are done without /nologo.
|
||||
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
|
||||
|
||||
//Additional Compiler Flags
|
||||
COMPILE_FLAGS:STRING=
|
||||
|
||||
//Speed of the CPU
|
||||
CPU_SPEED:STRING=16000000
|
||||
|
||||
//Processor Type
|
||||
MCU:STRING=atmega328p
|
||||
|
||||
//USB Port
|
||||
PORT:STRING=/dev/ttyUSB0
|
||||
|
||||
//Serial Port Speed
|
||||
PORT_SPEED:STRING=57600
|
||||
|
||||
//Programmer Type
|
||||
PROGRAMMER:STRING=stk500v1
|
||||
|
||||
//Value Computed by CMake
|
||||
rgbcontroller_BINARY_DIR:STATIC=/home/philipp/Programming/avr/RGBcontroller
|
||||
|
||||
//Value Computed by CMake
|
||||
rgbcontroller_SOURCE_DIR:STATIC=/home/philipp/Programming/avr/RGBcontroller
|
||||
|
||||
|
||||
########################
|
||||
# INTERNAL cache entries
|
||||
########################
|
||||
|
||||
//ADVANCED property for variable: CMAKE_AR
|
||||
CMAKE_AR-ADVANCED:INTERNAL=1
|
||||
//This is the directory where this CMakeCache.txt was created
|
||||
CMAKE_CACHEFILE_DIR:INTERNAL=/home/philipp/Programming/avr/RGBcontroller
|
||||
//Major version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
|
||||
//Minor version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MINOR_VERSION:INTERNAL=15
|
||||
//Patch version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_PATCH_VERSION:INTERNAL=5
|
||||
//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
|
||||
CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
//Path to CMake executable.
|
||||
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
|
||||
//Path to cpack program executable.
|
||||
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
|
||||
//Path to ctest program executable.
|
||||
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER
|
||||
CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
|
||||
CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
|
||||
CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS
|
||||
CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
|
||||
CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_COMPILER
|
||||
CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_COMPILER_AR
|
||||
CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
|
||||
CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_FLAGS
|
||||
CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
|
||||
CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
|
||||
CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
|
||||
CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//Path to cache edit program executable.
|
||||
CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
|
||||
//Executable file format
|
||||
CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
|
||||
CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||
CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
|
||||
//Name of external makefile project generator.
|
||||
CMAKE_EXTRA_GENERATOR:INTERNAL=
|
||||
//Name of generator.
|
||||
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
|
||||
//Generator instance identifier.
|
||||
CMAKE_GENERATOR_INSTANCE:INTERNAL=
|
||||
//Name of generator platform.
|
||||
CMAKE_GENERATOR_PLATFORM:INTERNAL=
|
||||
//Name of generator toolset.
|
||||
CMAKE_GENERATOR_TOOLSET:INTERNAL=
|
||||
//Source directory with the top level CMakeLists.txt file for this
|
||||
// project
|
||||
CMAKE_HOME_DIRECTORY:INTERNAL=/home/philipp/Programming/avr/RGBcontroller
|
||||
//Install .so files without execute permission.
|
||||
CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
|
||||
//ADVANCED property for variable: CMAKE_LINKER
|
||||
CMAKE_LINKER-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
|
||||
CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
|
||||
CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
|
||||
CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_NM
|
||||
CMAKE_NM-ADVANCED:INTERNAL=1
|
||||
//number of local generators
|
||||
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_OBJCOPY
|
||||
CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_OBJDUMP
|
||||
CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
|
||||
//Platform information initialized
|
||||
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_RANLIB
|
||||
CMAKE_RANLIB-ADVANCED:INTERNAL=1
|
||||
//Path to CMake installation.
|
||||
CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.15
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
|
||||
CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
|
||||
CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SKIP_RPATH
|
||||
CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
|
||||
CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
|
||||
CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STRIP
|
||||
CMAKE_STRIP-ADVANCED:INTERNAL=1
|
||||
//uname command
|
||||
CMAKE_UNAME:INTERNAL=/bin/uname
|
||||
//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
|
||||
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ set(COMPILE_FLAGS "" CACHE STRING "Additional Compiler Flags")
|
|||
|
||||
# Set own source files
|
||||
# Simply list all your C / C++ source (not header!) files here
|
||||
set(SRC_FILES main.cpp serial.cpp WirelessRelay.cpp pwm.cpp rgbled.cpp W433DataReciver.cpp W433DataTransmitter.cpp uvositem.cpp item.cpp)
|
||||
set(SRC_FILES main.cpp serial.cpp WirelessRelay.cpp pwm.cpp rgbled.cpp W433DataReciver.cpp)
|
||||
|
||||
# Compiler suite specification
|
||||
set(CMAKE_C_COMPILER /usr/bin/avr-gcc)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
#include "W433DataReciver.h"
|
||||
#include <util/crc16.h>
|
||||
#include "writepin.h"
|
||||
#include <stdlib.h>
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include "serial.h"
|
||||
|
||||
W433DataReciver* W433DataReciver::instance = nullptr;
|
||||
|
||||
W433DataReciver::W433DataReciver(volatile unsigned char* const portIn, const unsigned char pinIn,
|
||||
void (*packetCallbackIn)(uint32_t, void*), void* userDataIn,
|
||||
void (*errorCodeHandlerIn)(uint8_t, void*)):
|
||||
port(portIn), pin(pinIn),
|
||||
packetCallback(packetCallbackIn), errorCodeHandler(errorCodeHandlerIn), userData(userDataIn)
|
||||
W433DataReciver::W433DataReciver(volatile unsigned char* const port , const unsigned char pin, volatile uint16_t * timerRegister, volatile uint8_t* const timerOverflowRegister, void (* const packetCallback)(uint32_t, void*), void* const userData, void (*errorCodeHandler)(uint8_t, void*) ):
|
||||
_port(port), _pin(pin), _timerRegister(timerRegister), _timerOverflowRegister(timerOverflowRegister), _packetCallback(packetCallback), _errorCodeHandler(errorCodeHandler), _userData(userData)
|
||||
{
|
||||
instance = this;
|
||||
for(uint8_t i = 0; i < 33; i++) timesBuffer[i] = 0;
|
||||
}
|
||||
|
||||
W433DataReciver::~W433DataReciver()
|
||||
|
|
@ -20,125 +22,200 @@ W433DataReciver::~W433DataReciver()
|
|||
|
||||
void W433DataReciver::staticInterrupt()
|
||||
{
|
||||
if(instance != nullptr)
|
||||
instance->interrupt();
|
||||
if(instance != nullptr) instance->interrupt();
|
||||
}
|
||||
|
||||
uint16_t W433DataReciver::calcCrc(uint32_t data)
|
||||
int8_t W433DataReciver::reciveBit(uint8_t index)
|
||||
{
|
||||
uint16_t crc = 0xffff;
|
||||
uint8_t* ptr = reinterpret_cast<uint8_t*>(&data);
|
||||
for(size_t i = 0; i < sizeof(data); ++i)
|
||||
crc = _crc_ccitt_update(crc, ptr[i]);
|
||||
return crc;
|
||||
}
|
||||
|
||||
uint8_t W433DataReciver::symbolDecode(uint8_t symbol)
|
||||
if(
|
||||
timesBuffer[index] < 0 &&
|
||||
isTime(timesBuffer[index+1], SMALL_TIME, true, SMALL_TIME_TOLERANCE) &&
|
||||
isTime(timesBuffer[index+2], LARGE_TIME, false, LARGE_TIME_TOLERANCE) //&&
|
||||
//isTime(timesBuffer[index+3], SMALL_TIME, true, SMALL_TIME_TOLERANCE)
|
||||
)
|
||||
{
|
||||
switch(symbol)
|
||||
{
|
||||
case 0xe:
|
||||
return 1;
|
||||
case 0x13:
|
||||
return 2;
|
||||
case 0x15:
|
||||
return 3;
|
||||
case 0x16:
|
||||
return 4;
|
||||
case 0x19:
|
||||
return 5;
|
||||
case 0x1a:
|
||||
return 6;
|
||||
case 0x1c:
|
||||
return 7;
|
||||
case 0x23:
|
||||
return 8;
|
||||
case 0x25:
|
||||
return 9;
|
||||
case 0x26:
|
||||
return 10;
|
||||
case 0x29:
|
||||
return 11;
|
||||
case 0x2a:
|
||||
return 12;
|
||||
case 0x2c:
|
||||
return 13;
|
||||
case 0x32:
|
||||
return 14;
|
||||
case 0x34:
|
||||
return 15;
|
||||
case 0xd:
|
||||
default:
|
||||
}
|
||||
else if(
|
||||
timesBuffer[index] < 0 &&
|
||||
isTime(timesBuffer[index+1], LARGE_TIME, true, LARGE_TIME_TOLERANCE) &&
|
||||
isTime(timesBuffer[index+2], SMALL_TIME, false, SMALL_TIME_TOLERANCE) //&&
|
||||
//isTime(timesBuffer[index+3], SMALL_TIME, true, SMALL_TIME_TOLERANCE)
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else return -1;
|
||||
}
|
||||
|
||||
void W433DataReciver::pll(bool sample)
|
||||
void W433DataReciver::waitForReciveIdle(const uint16_t timeoutMs)
|
||||
{
|
||||
// Integrate each sample
|
||||
if(sample)
|
||||
rxIntegrator++;
|
||||
for(uint16_t i = 0; i < timeoutMs && state != LOOKING_FOR_SYNC; ++i ) _delay_ms(1);
|
||||
}
|
||||
|
||||
if (sample != prevSample)
|
||||
|
||||
bool W433DataReciver::isTime(int16_t input, const uint16_t time, const bool state, const uint16_t tollerance)
|
||||
{
|
||||
pllRamp += pllRamp < PLL_RAMP_TRANSITION ? PLL_RAMP_INC_RETARD : PLL_RAMP_INC_ADVANCE;
|
||||
prevSample = sample;
|
||||
if((state && input < 0) || (!state && input > 0)) return false;
|
||||
input = abs(input);
|
||||
return input < (int16_t)(time+tollerance) && input > (int16_t)(time-tollerance);
|
||||
}
|
||||
|
||||
bool W433DataReciver::reciveSync(const uint16_t elapsedTime)
|
||||
{
|
||||
if(elapsedTime < SYNC_TIME+SYNC_TIME_TOLERANCE && elapsedTime > SYNC_TIME-SYNC_TIME_TOLERANCE)
|
||||
{
|
||||
++syncCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
pllRamp += PLL_RAMP_INC_STEP;
|
||||
}
|
||||
if (pllRamp >= PLL_RAMP_LEN)
|
||||
{
|
||||
rxBits >>= 1;
|
||||
|
||||
if (rxIntegrator >= 5)
|
||||
rxBits |= 0x800;
|
||||
|
||||
pllRamp -= PLL_RAMP_LEN;
|
||||
rxIntegrator = 0;
|
||||
|
||||
if(mode == MODE_RECEIVING)
|
||||
{
|
||||
if (++rxCount >= 12)
|
||||
{
|
||||
uint8_t currentByte = (symbolDecode(rxBits & 0x3f)) | symbolDecode(rxBits >> 6) << 4;
|
||||
rxBuf[PACKET_LENGTH-1-(rxLen++)] = currentByte;
|
||||
|
||||
if (rxLen >= PACKET_LENGTH)
|
||||
{
|
||||
mode = MODE_SEARCHING;
|
||||
uint32_t* packet = reinterpret_cast<uint32_t*>(rxBuf+2);
|
||||
uint16_t crc = rxBuf[0] << 8 | rxBuf[1];
|
||||
uint16_t crcC = calcCrc(*packet);
|
||||
if(crc != crcC)
|
||||
{
|
||||
if(errorCodeHandler)
|
||||
errorCodeHandler(ERROR_CRC, userData);
|
||||
}
|
||||
if(syncCount > 4 && syncFailCount < 3) ++syncFailCount;
|
||||
else
|
||||
{
|
||||
packetCallback(*packet, userData);
|
||||
//if(syncCount > 7) error(ERR_SYNC_FAIL);
|
||||
setState(LOOKING_FOR_SYNC);
|
||||
}
|
||||
}
|
||||
rxCount = 0;
|
||||
if(syncCount > 10) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
else if (rxBits == 0xb38)
|
||||
|
||||
bool W433DataReciver::recivedByte(const uint16_t elapsedTime)
|
||||
{
|
||||
mode = MODE_RECEIVING;
|
||||
rxCount = 0;
|
||||
rxLen = 0;
|
||||
timesBuffer[timesBufferIndex] = readPin(_port, _pin) ? 0-elapsedTime : elapsedTime;
|
||||
++timesBufferIndex;
|
||||
if(timesBufferIndex == 32) writePin(&PORTC, PC0, true);
|
||||
return timesBufferIndex == 32;
|
||||
}
|
||||
|
||||
uint8_t W433DataReciver::assmbleByte()
|
||||
{
|
||||
uint8_t byte = 0;
|
||||
for(uint8_t i = 0; i < 8; ++i)
|
||||
{
|
||||
int8_t bit = reciveBit(i*4);
|
||||
if(bit >= 0) byte = byte | (bit << (7-i));
|
||||
else
|
||||
{
|
||||
setState(LOOKING_FOR_SYNC);
|
||||
error(ERR_BYTE_ASM);
|
||||
}
|
||||
}
|
||||
timesBufferIndex = 0;
|
||||
return byte;
|
||||
}
|
||||
|
||||
void W433DataReciver::error(const uint8_t errorCode)
|
||||
{
|
||||
if(_errorCodeHandler != nullptr) (*_errorCodeHandler)(errorCode, _userData);
|
||||
}
|
||||
|
||||
void W433DataReciver::setState(const uint8_t stateIn)
|
||||
{
|
||||
state = stateIn;
|
||||
timesBufferIndex = 0;
|
||||
packetIndex = 0;
|
||||
syncCount = 0;
|
||||
syncFailCount = 0;
|
||||
}
|
||||
|
||||
void W433DataReciver::interrupt()
|
||||
{
|
||||
pll(readPin(port, pin));
|
||||
uint16_t elapsedTime = polarity*(((*_timerOverflowRegister & 0x01) ? *_timerRegister+(UINT16_MAX - previousTime) : *_timerRegister - previousTime)/TICKS_PER_US);
|
||||
|
||||
if(elapsedTime < DISCARD_TIME)
|
||||
{
|
||||
if(timesBufferIndex > 0 && elapsedTime + abs(timesBuffer[timesBufferIndex-1]) < LARGE_TIME+LARGE_TIME_TOLERANCE)
|
||||
{
|
||||
writePin(&PORTC, PC2, true);
|
||||
previousTime = *_timerRegister - elapsedTime - abs(timesBuffer[timesBufferIndex-1]);
|
||||
timesBufferIndex-=1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
previousTime = *_timerRegister;
|
||||
*_timerOverflowRegister = *_timerOverflowRegister | 0x01;
|
||||
|
||||
if(state == LOOKING_FOR_SYNC && reciveSync(elapsedTime))
|
||||
{
|
||||
setState(LOOKING_FOR_SYNC_END);
|
||||
}
|
||||
else if(state == LOOKING_FOR_SYNC_END)
|
||||
{
|
||||
if(elapsedTime > SYNC_TIME + SYNC_END_TIME_TOLERANCE)
|
||||
{
|
||||
if(elapsedTime < LARGE_TIME - LARGE_TIME_TOLERANCE)
|
||||
{
|
||||
setState(LOOKING_FOR_SYNC);
|
||||
error(ERR_NO_SYNC_END);
|
||||
}
|
||||
else
|
||||
{
|
||||
timesBuffer[0] = -LARGE_TIME;
|
||||
setState(LOOKING_FOR_SIGNATURE);
|
||||
++timesBufferIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(state == LOOKING_FOR_SIGNATURE)
|
||||
{
|
||||
if(recivedByte(elapsedTime))
|
||||
{
|
||||
uint8_t recivedSignature = assmbleByte();
|
||||
if( recivedSignature == signature) setState(RECVING_PACKET);
|
||||
else
|
||||
{
|
||||
error(ERR_WRONG_SIG);
|
||||
setState(LOOKING_FOR_SYNC);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( state == RECVING_PACKET )
|
||||
{
|
||||
|
||||
if(recivedByte(elapsedTime))
|
||||
{
|
||||
uint8_t packetByte = assmbleByte();
|
||||
|
||||
packet = packet | ((uint32_t)packetByte) << ((3-packetIndex)*8);
|
||||
++packetIndex;
|
||||
if(packetIndex > 3)
|
||||
{
|
||||
packetIndex = 0;
|
||||
timesBufferIndex = 0;
|
||||
setState(RECVING_PACKET_CHECKSUM);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(state == RECVING_PACKET_CHECKSUM)
|
||||
{
|
||||
if(recivedByte(elapsedTime))
|
||||
{
|
||||
uint8_t recivedChecksum = assmbleByte();
|
||||
|
||||
volatile uint8_t* buffer = reinterpret_cast<volatile uint8_t*>(&packet);
|
||||
|
||||
uint8_t computedChecksum = 0;
|
||||
for(uint8_t j = 0; j < sizeof(packet); j++) for(uint8_t i = 0; i < 8; i++) computedChecksum = computedChecksum + ((buffer[j] & ( 1 << (8 - i))) >> (8 - i));
|
||||
//for(uint8_t j = 0; j < sizeof(packet); j++) for(uint8_t i = 0; i < 8; i++) computedChecksum = computedChecksum + (buffer[j] & ( 1 << (8 - i)));
|
||||
|
||||
if(computedChecksum == recivedChecksum)
|
||||
{
|
||||
#ifdef USE_RINGBUFFER
|
||||
_ringBuffer.write(const_cast<uint8_t*>(buffer), sizeof(packet));
|
||||
#endif
|
||||
if(_packetCallback != nullptr)(*_packetCallback)(packet, _userData);
|
||||
}
|
||||
else error(ERR_CHECKSUM);
|
||||
packet = 0;
|
||||
setState(LOOKING_FOR_SYNC);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t W433DataReciver::calculateOverflowRegister(uint16_t bitRate, uint16_t devisor)
|
||||
#ifdef USE_RINGBUFFER
|
||||
RingBuffer<W433DataReciver::RINGBUFFER_LENGTH, uint8_t>* W433DataReciver::getRingBuffer()
|
||||
{
|
||||
return (F_CPU /(8UL*devisor))/bitRate;
|
||||
return &_ringBuffer;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,63 +1,94 @@
|
|||
#pragma once
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "ringbuffer.h"
|
||||
|
||||
//#define USE_RINGBUFFER
|
||||
|
||||
class W433DataReciver
|
||||
{
|
||||
public:
|
||||
static constexpr int ERROR_CRC = 1;
|
||||
|
||||
static constexpr int SAMPLES_PER_BIT = 8;
|
||||
static constexpr int PLL_RAMP_LEN = 160;
|
||||
static constexpr int PLL_RAMP_INC_STEP = PLL_RAMP_LEN/SAMPLES_PER_BIT;
|
||||
static constexpr int PLL_RAMP_TRANSITION = PLL_RAMP_LEN/2;
|
||||
static constexpr int PLL_RAMP_INC_RETARD = PLL_RAMP_INC_STEP-9;
|
||||
static constexpr int PLL_RAMP_INC_ADVANCE = PLL_RAMP_INC_STEP+9;
|
||||
static constexpr int PLL_HEADER_LEN_BITS = 8;
|
||||
static constexpr int PACKET_LENGTH = sizeof(uint32_t)+2;
|
||||
static constexpr uint8_t RINGBUFFER_LENGTH = 32;
|
||||
|
||||
//errors
|
||||
static constexpr uint8_t ERR_SYNC_FAIL = 1;
|
||||
static constexpr uint8_t ERR_NO_SYNC_END = 2;
|
||||
static constexpr uint8_t ERR_BYTE_ASM = 3;
|
||||
static constexpr uint8_t ERR_WRONG_SIG = 4;
|
||||
static constexpr uint8_t ERR_CHECKSUM = 5;
|
||||
|
||||
private:
|
||||
|
||||
static constexpr int MODE_SEARCHING = 0;
|
||||
static constexpr int MODE_RECEIVING = 1;
|
||||
|
||||
static W433DataReciver* instance;
|
||||
|
||||
volatile unsigned char *port;
|
||||
unsigned char pin;
|
||||
//constants
|
||||
static constexpr uint8_t CLOCK_DEVIDER = 1;
|
||||
static constexpr uint16_t LARGE_TIME = 500;
|
||||
static constexpr uint16_t SMALL_TIME = 125;
|
||||
static constexpr uint16_t SYNC_TIME = SMALL_TIME;
|
||||
static constexpr uint8_t SYNC_TIME_TOLERANCE = SYNC_TIME*0.20;
|
||||
static constexpr uint16_t SYNC_END_TIME_TOLERANCE = SYNC_TIME*0.80;
|
||||
static constexpr uint16_t LARGE_TIME_TOLERANCE = LARGE_TIME*0.30;
|
||||
static constexpr uint8_t SMALL_TIME_TOLERANCE = SMALL_TIME*0.30;
|
||||
static constexpr uint16_t DISCARD_TIME = SMALL_TIME*0.6;
|
||||
static constexpr uint16_t TICKS_PER_US = (F_CPU) / (1000000*CLOCK_DEVIDER) ;
|
||||
static constexpr uint8_t signature = 0xA5;
|
||||
|
||||
bool prevSample = 0;
|
||||
uint8_t pllRamp = 0;
|
||||
uint8_t rxIntegrator = 0;
|
||||
static constexpr int8_t polarity = 1;
|
||||
|
||||
uint16_t rxBits = 0;
|
||||
static constexpr uint8_t LOOKING_FOR_SYNC = 0;
|
||||
static constexpr uint8_t LOOKING_FOR_SYNC_END = 1;
|
||||
static constexpr uint8_t LOOKING_FOR_SIGNATURE = 2;
|
||||
static constexpr uint8_t RECVING_PACKET = 3;
|
||||
static constexpr uint8_t RECVING_PACKET_CHECKSUM = 4;
|
||||
|
||||
uint8_t mode = MODE_SEARCHING;
|
||||
//variables
|
||||
volatile unsigned char *_port;
|
||||
unsigned char _pin;
|
||||
|
||||
uint8_t rxBuf[PACKET_LENGTH];
|
||||
uint8_t rxCount = 0;
|
||||
volatile uint8_t rxLen = 0;
|
||||
volatile uint16_t *_timerRegister;
|
||||
volatile uint8_t *_timerOverflowRegister;
|
||||
|
||||
void (* const packetCallback)(uint32_t, void*);
|
||||
void (* const errorCodeHandler)(uint8_t, void*);
|
||||
void* const userData;
|
||||
#ifdef USE_RINGBUFFER
|
||||
RingBuffer<RINGBUFFER_LENGTH, uint8_t> _ringBuffer;
|
||||
#endif
|
||||
|
||||
private:
|
||||
volatile uint16_t previousTime = 0;
|
||||
volatile uint8_t timesBufferIndex = 0;
|
||||
volatile int16_t timesBuffer[33];
|
||||
|
||||
static uint16_t calcCrc(uint32_t data);
|
||||
static uint8_t symbolDecode(uint8_t symbol);
|
||||
void pll(bool sample);
|
||||
volatile uint8_t packetIndex = 0;
|
||||
volatile uint32_t packet = 0;
|
||||
|
||||
void (* const _packetCallback)(uint32_t, void*);
|
||||
void (* const _errorCodeHandler)(uint8_t, void*);
|
||||
void* const _userData;
|
||||
|
||||
volatile uint8_t syncCount = 0;
|
||||
volatile uint8_t syncFailCount = 0;
|
||||
volatile uint8_t state = 0;
|
||||
|
||||
//private functions
|
||||
int8_t reciveBit(uint8_t index);
|
||||
|
||||
inline uint8_t assmbleByte();
|
||||
inline void setState(const uint8_t stateIn);
|
||||
inline bool recivedByte(const uint16_t elapsedTime);
|
||||
inline bool reciveSync(const uint16_t elapsedTime);
|
||||
|
||||
inline void error(const uint8_t errorCode);
|
||||
|
||||
static inline bool isTime(int16_t input, const uint16_t time, const bool state = true, const uint16_t tollerance = 100);
|
||||
|
||||
public:
|
||||
|
||||
W433DataReciver(volatile unsigned char* const portIn, const unsigned char pinIn, void (*packetCallbackIn)(uint32_t,
|
||||
void*),
|
||||
void* userDataIn = nullptr, void (*errorCodeHandlerIn)(uint8_t, void*) = nullptr );
|
||||
W433DataReciver(volatile unsigned char* const port , const unsigned char pin, volatile uint16_t * timerRegister, volatile uint8_t* const timerOverflowRegister, void (*packetCallback)(uint32_t, void*) = nullptr, void* userData = nullptr, void (*errorCodeHandler)(uint8_t, void*) = nullptr );
|
||||
~W433DataReciver();
|
||||
|
||||
static void initTimer();
|
||||
static void staticInterrupt();
|
||||
void waitForReciveIdle(const uint16_t timeoutMs = 2000);
|
||||
void interrupt();
|
||||
|
||||
static uint16_t calculateOverflowRegister(uint16_t bitRate, uint16_t devisor);
|
||||
#ifdef USE_RINGBUFFER
|
||||
RingBuffer<RINGBUFFER_LENGTH, uint8_t>* getRingBuffer();
|
||||
#endif
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,98 +0,0 @@
|
|||
#include "W433DataTransmitter.h"
|
||||
#include "writepin.h"
|
||||
|
||||
W433DataTransmitter::W433DataTransmitter(volatile unsigned char *port, const unsigned char pin): _port(port), _pin(pin)
|
||||
{
|
||||
}
|
||||
|
||||
void W433DataTransmitter::sendBit(const bool bit)
|
||||
{
|
||||
switch(bit)
|
||||
{
|
||||
case true:
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(SMALL_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(LARGE_TIME);
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(SMALL_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(LARGE_TIME);
|
||||
break;
|
||||
|
||||
case false:
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(LARGE_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(SMALL_TIME);
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(SMALL_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(LARGE_TIME);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void W433DataTransmitter::sendSyncpulse()
|
||||
{
|
||||
for(uint8_t i = 0; i < 25; ++i)
|
||||
{
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(SYNC_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(SYNC_TIME);
|
||||
}
|
||||
}
|
||||
|
||||
void W433DataTransmitter::sendEndPulse()
|
||||
{
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(LARGE_TIME);
|
||||
writePin(_port,_pin,true);
|
||||
_delay_us(LARGE_TIME);
|
||||
writePin(_port,_pin,false);
|
||||
_delay_us(LARGE_TIME*10);
|
||||
}
|
||||
|
||||
void W433DataTransmitter::sendRawData(const uint8_t data)
|
||||
{
|
||||
for(uint8_t i = 0; i < 8; i++) sendBit(data & ( 1 << (7 - i)));
|
||||
}
|
||||
|
||||
void W433DataTransmitter::sendPacket(const uint32_t data)
|
||||
{
|
||||
sendSyncpulse();
|
||||
_delay_us(LARGE_TIME);
|
||||
sendRawData(signature);
|
||||
uint8_t checksum = 0;
|
||||
for(uint8_t i = 0; i < 4; ++i)
|
||||
{
|
||||
uint8_t dataOctet = (data & (0xFF000000 >> i*8 )) >> (24 - 8*i);
|
||||
//for(uint8_t i = 0; i < 8; i++) checksum = checksum + (dataOctet & ( 1 << (8 - i)));
|
||||
for(uint8_t i = 0; i < 8; i++) checksum = checksum + ((dataOctet & ( 1 << (8 - i))) >> (8 - i));
|
||||
sendRawData( dataOctet );
|
||||
|
||||
}
|
||||
sendRawData( checksum );
|
||||
sendEndPulse();
|
||||
}
|
||||
|
||||
void W433DataTransmitter::send(const uint8_t* const data, uint16_t length)
|
||||
{
|
||||
uint16_t packets = length/4;
|
||||
if(length % 4 != 0) ++packets;
|
||||
for(uint8_t j = 0; j < packets; j++)
|
||||
{
|
||||
uint32_t paketData = 0;
|
||||
uint8_t* paketDataPointer = reinterpret_cast<uint8_t*>(&paketData);
|
||||
for(uint8_t i = 0; i < 4 && j*4+i < length; i++) paketDataPointer[3-i] = data[j*4+i];
|
||||
sendPacket(paketData);
|
||||
}
|
||||
}
|
||||
|
||||
void W433DataTransmitter::send(const uint8_t data)
|
||||
{
|
||||
sendPacket(data);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
#include <util/delay.h>
|
||||
|
||||
|
||||
class W433DataTransmitter
|
||||
{
|
||||
private:
|
||||
|
||||
static constexpr uint16_t LARGE_TIME = 2000;
|
||||
static constexpr uint16_t SMALL_TIME = 500;
|
||||
static constexpr uint16_t SYNC_TIME = 800;
|
||||
|
||||
static constexpr uint8_t signature = 0xA5;
|
||||
volatile unsigned char * const _port;
|
||||
const unsigned char _pin;
|
||||
|
||||
void sendBit(const bool bit);
|
||||
void sendSyncpulse();
|
||||
void sendRawData(const uint8_t data);
|
||||
void sendEndPulse();
|
||||
|
||||
public:
|
||||
|
||||
W433DataTransmitter(volatile unsigned char * const port, const unsigned char pin);
|
||||
void send(const uint8_t* const data, uint16_t length);
|
||||
void send(const uint8_t data);
|
||||
void sendPacket(const uint32_t data);
|
||||
};
|
||||
|
|
@ -14,7 +14,7 @@ void WirelessRelay::sendId()
|
|||
|
||||
for(short i = 0; i<10; i++)
|
||||
{
|
||||
sendBit( id & 1 << (15 - i) );
|
||||
sendBit( _id & 1 << (15 - i) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -54,32 +54,64 @@ void WirelessRelay::sync()
|
|||
_delay_us(SMALL_TIME*31);
|
||||
}
|
||||
|
||||
void WirelessRelay::setValue(const uint8_t value)
|
||||
void WirelessRelay::on()
|
||||
{
|
||||
lastValue = value;
|
||||
_state = true;
|
||||
for(short z = 0; z<10; z++)
|
||||
{
|
||||
sendId();
|
||||
sendBit(value);
|
||||
sendBit(!value);
|
||||
sendBit(true);
|
||||
sendBit(false);
|
||||
sync();
|
||||
}
|
||||
}
|
||||
|
||||
void WirelessRelay::off()
|
||||
{
|
||||
_state = false;
|
||||
for(short z = 0; z<10; z++)
|
||||
{
|
||||
sendId();
|
||||
sendBit(false);
|
||||
sendBit(true);
|
||||
sync();
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t WirelessRelay::getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
bool WirelessRelay::getExpectedState()
|
||||
{
|
||||
return _state;
|
||||
}
|
||||
|
||||
char* WirelessRelay::getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
void WirelessRelay::setName(char name[])
|
||||
{
|
||||
memcpy(_name, name, strlen(name)+1);
|
||||
}
|
||||
|
||||
void WirelessRelay::init( const uint16_t id, char nameIn[])
|
||||
{
|
||||
setName(nameIn);
|
||||
_id=id;
|
||||
}
|
||||
|
||||
void WirelessRelay::resend()
|
||||
{
|
||||
setValue(lastValue);
|
||||
_state ? on() : off();
|
||||
}
|
||||
|
||||
WirelessRelay::WirelessRelay(const uint16_t idIn, char nameIn[])
|
||||
WirelessRelay::WirelessRelay(const uint16_t id, char nameIn[])
|
||||
{
|
||||
id = idIn;
|
||||
setName(nameIn);
|
||||
type = 0;
|
||||
init(id, nameIn);
|
||||
}
|
||||
|
||||
WirelessRelay::WirelessRelay(const Item& item)
|
||||
{
|
||||
Item::operator=(item);
|
||||
type = 0;
|
||||
}
|
||||
WirelessRelay::WirelessRelay(){}
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
#include<util/delay.h>
|
||||
#include"writepin.h"
|
||||
#include "item.h"
|
||||
|
||||
class WirelessRelay: public Item
|
||||
class WirelessRelay
|
||||
{
|
||||
public:
|
||||
static constexpr uint16_t LARGE_TIME = 750;
|
||||
|
|
@ -14,14 +13,23 @@ public:
|
|||
static constexpr uint16_t MAX_NAME_LENGTH = 16;
|
||||
|
||||
private:
|
||||
bool _state = false;
|
||||
uint16_t _id;
|
||||
char _name[MAX_NAME_LENGTH];
|
||||
void sendBit(const bool i);
|
||||
void sync();
|
||||
void sendId();
|
||||
|
||||
public:
|
||||
WirelessRelay(const uint16_t idIn, char nameIn[]);
|
||||
WirelessRelay(const Item& item);
|
||||
void setValue(const uint8_t value);
|
||||
WirelessRelay(const uint16_t id, char nameIn[]);
|
||||
WirelessRelay();
|
||||
void init(const uint16_t id, char nameIn[]);
|
||||
void on();
|
||||
void off();
|
||||
char* getName();
|
||||
void setName(char* name);
|
||||
uint16_t getId();
|
||||
bool getExpectedState();
|
||||
void resend();
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
9
item.cpp
9
item.cpp
|
|
@ -1,9 +0,0 @@
|
|||
#include "item.h"
|
||||
#include "string.h"
|
||||
|
||||
void Item::setName(const char * const nameN)
|
||||
{
|
||||
size_t len = strlen(nameN);
|
||||
if(len < MAX_NAME_LENGTH)memcpy(name, nameN, len+1);
|
||||
}
|
||||
|
||||
14
item.h
14
item.h
|
|
@ -1,14 +0,0 @@
|
|||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
class Item
|
||||
{
|
||||
public:
|
||||
static constexpr uint16_t MAX_NAME_LENGTH = 16;
|
||||
bool lastValue = 0;
|
||||
uint16_t id;
|
||||
char name[MAX_NAME_LENGTH]="";
|
||||
uint8_t type = 0;
|
||||
|
||||
void setName(const char * const name);
|
||||
};
|
||||
157
main.cpp
157
main.cpp
|
|
@ -12,18 +12,16 @@
|
|||
#include "watchdog.h"
|
||||
#include "staticvector.h"
|
||||
#include "W433DataReciver.h"
|
||||
#include "W433DataTransmitter.h"
|
||||
#include "uvositem.h"
|
||||
|
||||
#define COMMAND_BUFFER_SIZE 64
|
||||
#define SNPRINTF_BUFFER_SIZE 96
|
||||
|
||||
#define MAX_ITEMS 24
|
||||
#define ITEM_VECTOR_EEPROM_ADDR 32
|
||||
#define MAX_RELAYS 32
|
||||
#define RELAY_VECTOR_EEPROM_ADDR 32
|
||||
|
||||
char buffer[SNPRINTF_BUFFER_SIZE];
|
||||
|
||||
SVector<Item, MAX_ITEMS> items;
|
||||
SVector<WirelessRelay, MAX_RELAYS> relays;
|
||||
|
||||
bool sensorsPaused = false;
|
||||
|
||||
|
|
@ -31,7 +29,7 @@ static volatile bool resendNow = false;
|
|||
static volatile uint8_t resendCounter = 0;
|
||||
static bool resendEnabled = false;
|
||||
|
||||
ISR(TIMER1_COMPB_vect)
|
||||
ISR(PCINT1_vect)
|
||||
{
|
||||
W433DataReciver::staticInterrupt();
|
||||
}
|
||||
|
|
@ -50,12 +48,10 @@ inline static void printHelp(Serial* serial)
|
|||
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
help : Show this prompt.\n\
|
||||
item add [id] [type] [name]: Add Wireless item. Save to make permant.\n\
|
||||
item delete [n] : Delete n'th item. Save to make permant.\n\
|
||||
item [on/off] [nn] : Turn on/off nth relay.\n\
|
||||
item resend [on/off] : Turn on/off periodic auto resend. Save to make permant.\n\
|
||||
save : Save current state as startup state.\n\
|
||||
load : load startup state.\n\
|
||||
relay add [id] [name] : Add Wireless Relay.\n\
|
||||
relay delete [n] : Delete n'th Relay.\n\
|
||||
relay [on/off] [nn] : Turn on/off nth relay.\n\
|
||||
relay resend [on/off] : Turn on/off periodic auto resend.\n\
|
||||
state : Get machine readable state.\n\
|
||||
erase : Erase epprom.\n\
|
||||
dump : Dump epprom.\n\
|
||||
|
|
@ -82,7 +78,7 @@ int freeRAM()
|
|||
void save()
|
||||
{
|
||||
EEPROM_write_char(4, resendEnabled);
|
||||
EEPROM_write_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, items);
|
||||
EEPROM_write_class< SVector<WirelessRelay, MAX_RELAYS> > (RELAY_VECTOR_EEPROM_ADDR, relays);
|
||||
}
|
||||
|
||||
void loadRGB(RgbLed* rgbled)
|
||||
|
|
@ -93,58 +89,60 @@ void loadRGB(RgbLed* rgbled)
|
|||
void load()
|
||||
{
|
||||
resendEnabled = EEPROM_read_char(4);
|
||||
EEPROM_read_class< SVector<Item, MAX_ITEMS> > (ITEM_VECTOR_EEPROM_ADDR, &items);
|
||||
EEPROM_read_class< SVector<WirelessRelay, MAX_RELAYS> > (RELAY_VECTOR_EEPROM_ADDR, &relays);
|
||||
}
|
||||
|
||||
void writeItemState(Serial* serial, Item* relay, uint8_t number)
|
||||
void writeRelayState(Serial* serial, WirelessRelay* relay, uint8_t number)
|
||||
{
|
||||
const uint16_t id = relay->id;
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "ITEM NUMBER: %u ID: %s%s%s%s TYPE: %u STATE: %u NAME: %s\n", number,
|
||||
uint16_t id = relay->getId();
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "RELAY NUMBER: %u ID: %s%s%s STATE: %u NAME: %s\n", number,
|
||||
bit_rep[ id >> 12],
|
||||
bit_rep[(id & 0x0F00) >> 8 ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
bit_rep[(id & 0x000F)],
|
||||
relay->type,
|
||||
relay->lastValue,
|
||||
relay->name
|
||||
relay->getExpectedState(),
|
||||
relay->getName()
|
||||
);
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token, Serial* serial)
|
||||
void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, char* token, Serial* serial)
|
||||
{
|
||||
if( strcmp(token, "add") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
uint16_t id = strtol(token, nullptr, 2 );
|
||||
token = strtok(NULL, " \n");
|
||||
uint8_t type = strtol(token, nullptr, 10 );
|
||||
if(id != 0 && (type == 0 || type == 1) && items->remainingCapacity() > 0)
|
||||
if(id != 0 && relays->remainingCapacity() > 0)
|
||||
{
|
||||
token = strtok(NULL, "\n\0");
|
||||
Item item;
|
||||
item.id = id;
|
||||
item.type = type;
|
||||
if( token != NULL )
|
||||
item.setName(token);
|
||||
items->push_back(item);
|
||||
writeItemState(serial, &items->back(), items->count()-1);
|
||||
id = id << 4;
|
||||
token = strtok(NULL, "\0");
|
||||
if( token == NULL )
|
||||
{
|
||||
char name[] = "";
|
||||
WirelessRelay relay(id, name);
|
||||
relays->push_back(relay);
|
||||
}
|
||||
else if(items->remainingCapacity() == 0)
|
||||
serial->write_p(PSTR("Relay storage full.\n"));
|
||||
else
|
||||
serial->write_p(PSTR("Usage: item add [id] [type] [name]\n [id] being a 16bit binary nummber and [name] an optional string\n"));
|
||||
{
|
||||
WirelessRelay relay(id, token);
|
||||
relays->push_back(relay);
|
||||
}
|
||||
writeRelayState(serial, &relays->back(), relays->count()-1);
|
||||
save();
|
||||
}
|
||||
else if(relays->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
||||
else serial->write_p(PSTR("Usage: relay add [id] [name]\n [id] being a 16bit binary nummber and [name] an optional string\n"));
|
||||
}
|
||||
else if( strcmp(token, "delete") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
if(items->count() > 0)
|
||||
if(relays->count() > 0)
|
||||
{
|
||||
uint16_t index = items->count();
|
||||
uint16_t index = relays->count();
|
||||
if( token != NULL) index = atoi(token);
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Deleting item NUMBER: %u NAME: %s\n", index, items->at(index).name);
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Deleting relay NUMBER: %u NAME: %s\n", index, relays->at(index).getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
items->erase(index);
|
||||
relays->erase(index);
|
||||
save();
|
||||
}
|
||||
}
|
||||
else if( strcmp(token, "on") == 0 )
|
||||
|
|
@ -153,17 +151,15 @@ void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token,
|
|||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
if (selected < relays->count())
|
||||
{
|
||||
items->at(selected).lastValue = true;
|
||||
if(items->at(selected).type == 0)WirelessRelay(items->at(selected)).setValue(true);
|
||||
else UvosItem(items->at(selected)).setValue(true);
|
||||
relays->at(selected).on();
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
writeRelayState(serial, &relays->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
else serial->write_p(PSTR("No sutch Relay\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item on [nn]\n"));
|
||||
else serial->write_p(PSTR("Usage: relay on [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "off") == 0 )
|
||||
{
|
||||
|
|
@ -171,17 +167,15 @@ void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token,
|
|||
if( token != NULL)
|
||||
{
|
||||
uint8_t selected = strtol(token, nullptr, 10);
|
||||
if (selected < items->count())
|
||||
if (selected < relays->count())
|
||||
{
|
||||
items->at(selected).lastValue = false;
|
||||
if(items->at(selected).type == 0)WirelessRelay(items->at(selected)).setValue(false);
|
||||
else UvosItem(items->at(selected)).setValue(false);
|
||||
relays->at(selected).off();
|
||||
|
||||
writeItemState(serial, &items->at(selected), selected);
|
||||
writeRelayState(serial, &relays->at(selected), selected);
|
||||
}
|
||||
else serial->write_p(PSTR("No sutch item\n"));
|
||||
else serial->write_p(PSTR("No sutch Relay\n"));
|
||||
}
|
||||
else serial->write_p(PSTR("Usage: item off [nn]\n"));
|
||||
else serial->write_p(PSTR("Usage: relay off [nn]\n"));
|
||||
}
|
||||
else if( strcmp(token, "resend") == 0 )
|
||||
{
|
||||
|
|
@ -192,13 +186,14 @@ void itemDispatch(SVector<Item, MAX_ITEMS>* items, Pwm16b* auxPwm, char* token,
|
|||
serial->write_p(PSTR("now "));
|
||||
if(strcmp(token, "on") == 0) resendEnabled = true;
|
||||
else resendEnabled = false;
|
||||
save();
|
||||
}
|
||||
resendEnabled ? serial->write_p(PSTR("enabled.\n")) : serial->write_p(PSTR("disabled.\n")) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write(token);
|
||||
serial->write_p(PSTR(" is not a valid subcommand: item [add/delete/on/off]\n"));
|
||||
serial->write_p(PSTR(" is not a valid subcommand: relay [add/delete/on/off]\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -216,8 +211,7 @@ void rgbDispatch(RgbLed* rgbled, char* token, Serial* serial)
|
|||
}
|
||||
else if( strcmp(token, "print") == 0 )
|
||||
{
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(),
|
||||
rgbled->getB());
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Current RGB values:\nR: %u G: %u B: %u\n", rgbled->getR(), rgbled->getG(), rgbled->getB());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
else if( strcmp(token, "set") == 0 )
|
||||
|
|
@ -304,9 +298,9 @@ void auxDispatch(Pwm16b* auxPwm, char* token, Serial* serial)
|
|||
}
|
||||
}
|
||||
|
||||
void serialDispatch(Serial* serial, SVector<Item, MAX_ITEMS>* items, RgbLed* rgbled, Pwm16b* auxPwm,
|
||||
W433DataReciver* reciver)
|
||||
void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays, RgbLed* rgbled, Pwm16b* auxPwm, W433DataReciver* reciver)
|
||||
{
|
||||
|
||||
if(serial->dataIsWaiting())
|
||||
{
|
||||
char buffer[COMMAND_BUFFER_SIZE];
|
||||
|
|
@ -315,13 +309,13 @@ void serialDispatch(Serial* serial, SVector<Item, MAX_ITEMS>* items, RgbLed* rgb
|
|||
{
|
||||
setBit(&PCICR, PCIE1, false);
|
||||
char* token = strtok(buffer, " \n");
|
||||
if(strcmp(token, "item") == 0)
|
||||
if(strcmp(token, "relay") == 0)
|
||||
{
|
||||
//reciver->waitForReciveIdle();
|
||||
itemDispatch(items, auxPwm, strtok(NULL, " \n"), serial);
|
||||
relayDispatch(relays, auxPwm, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "rgb") == 0)
|
||||
{
|
||||
reciver->waitForReciveIdle();
|
||||
rgbDispatch(rgbled, strtok(NULL, " \n"), serial);
|
||||
}
|
||||
else if(strcmp(token, "aux") == 0)
|
||||
|
|
@ -340,23 +334,14 @@ void serialDispatch(Serial* serial, SVector<Item, MAX_ITEMS>* items, RgbLed* rgb
|
|||
}
|
||||
else if(strcmp(token, "state") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Items:\n"));
|
||||
for(uint8_t i = 0; i < items->count(); i++)
|
||||
serial->write_p(PSTR("Relays:\n"));
|
||||
for(uint8_t i = 0; i < relays->count(); i++)
|
||||
{
|
||||
writeItemState(serial, &items->at(i), i);
|
||||
writeRelayState(serial, &relays->at(i), i);
|
||||
//serial->putChar('\n');
|
||||
}
|
||||
serial->write_p(PSTR("EOL\n"));
|
||||
}
|
||||
else if(strcmp(token, "save") == 0)
|
||||
{
|
||||
save();
|
||||
serial->write_p(PSTR("State saved to EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "load") == 0)
|
||||
{
|
||||
load();
|
||||
serial->write_p(PSTR("Loaded state from EEPROM.\n"));
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++) EEPROM_write_char(i, 0);
|
||||
|
|
@ -396,7 +381,7 @@ void reciverError(uint8_t code, void* userData)
|
|||
if(!sensorsPaused)
|
||||
{
|
||||
Serial* serial = reinterpret_cast<Serial*>(userData);
|
||||
serial->write_p(PSTR("RECV ERROR CODE: "));
|
||||
serial->write_p(PSTR("ERROR CODE: "));
|
||||
serial->write(code);
|
||||
serial->putChar('\n');
|
||||
}
|
||||
|
|
@ -452,21 +437,17 @@ int main()
|
|||
|
||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||
|
||||
setBit(&TIMSK1, OCIE1B, true);
|
||||
setBit(&TCCR1B, CS10, true);
|
||||
ICR1 = W433DataReciver::calculateOverflowRegister(2000, 1);
|
||||
OCR1B = ICR1-1;
|
||||
W433DataReciver reciver(&PINC, PC0, &sensorPacketRecived, reinterpret_cast<void*>(&serial), &reciverError);
|
||||
W433DataTransmitter transmitter(&PORTB, PB5);
|
||||
UvosItem::transmitter = &transmitter;
|
||||
setBit(&PCICR, PCIE1, true);
|
||||
setBit(&PCMSK1, PCINT8, true);
|
||||
W433DataReciver reciver(&PINC, PC0, &TCNT1, &TIFR1, &sensorPacketRecived, reinterpret_cast<void*>(&serial), &reciverError);
|
||||
|
||||
serial.write_p(PSTR("RGBController v1.5 starting\n"));
|
||||
serial.write_p(PSTR("RGBController v1.1 starting\n"));
|
||||
|
||||
load();
|
||||
|
||||
while(true)
|
||||
{
|
||||
serialDispatch(&serial, &items, &rgbled, &pwmTc1, &reciver);
|
||||
serialDispatch(&serial, &relays, &rgbled, &pwmTc1, &reciver);
|
||||
rgbled.logic();
|
||||
|
||||
if(doorOne != readPin(&PINB, PB3) && !sensorsPaused)
|
||||
|
|
@ -504,10 +485,10 @@ int main()
|
|||
|
||||
if(resendNow)
|
||||
{
|
||||
for(uint16_t i = 0; i < items.count(); i++)
|
||||
for(uint16_t i = 0; i < relays.count(); i++)
|
||||
{
|
||||
//reciver.waitForReciveIdle();
|
||||
items[i].type == 0 ? WirelessRelay(items[i]).resend() : UvosItem(items[i]).resend();
|
||||
reciver.waitForReciveIdle();
|
||||
relays[i].resend();
|
||||
_delay_ms(100);
|
||||
}
|
||||
resendNow = false;
|
||||
|
|
|
|||
8
pwm.cpp
8
pwm.cpp
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
//16bit
|
||||
|
||||
Pwm16b::Pwm16b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB,
|
||||
volatile uint16_t *compareRegisterA, volatile uint16_t *compareRegisterB, volatile uint16_t *inputCaptureRegister,
|
||||
const uint8_t speed, const bool enableA, const bool enableB)
|
||||
Pwm16b::Pwm16b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB, volatile uint16_t *compareRegisterA, volatile uint16_t *compareRegisterB, volatile uint16_t *inputCaptureRegister, const uint8_t speed, const bool enableA, const bool enableB)
|
||||
{
|
||||
|
||||
_timerControlRegisterA = timerControlRegisterA;
|
||||
|
|
@ -71,9 +69,7 @@ Pwm16b::~Pwm16b()
|
|||
|
||||
//8bit
|
||||
|
||||
Pwm8b::Pwm8b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB,
|
||||
volatile unsigned char *compareRegisterA, volatile unsigned char *compareRegisterB, const uint8_t speed,
|
||||
const bool enableA, const bool enableB)
|
||||
Pwm8b::Pwm8b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB, volatile unsigned char *compareRegisterA, volatile unsigned char *compareRegisterB, const uint8_t speed, const bool enableA, const bool enableB)
|
||||
{
|
||||
_timerControlRegisterA = timerControlRegisterA;
|
||||
_compareRegisterA = compareRegisterA;
|
||||
|
|
|
|||
8
pwm.h
8
pwm.h
|
|
@ -13,9 +13,7 @@ private:
|
|||
bool _enableB;
|
||||
|
||||
public:
|
||||
Pwm16b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB,
|
||||
volatile uint16_t *compareRegisterA, volatile uint16_t *compareRegisterB, volatile uint16_t *inputCaptureRegister,
|
||||
const uint8_t speed = 0b00000011, const bool enableA = true, const bool enableB = true);
|
||||
Pwm16b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB, volatile uint16_t *compareRegisterA, volatile uint16_t *compareRegisterB, volatile uint16_t *inputCaptureRegister, const uint8_t speed = 0b00000011, const bool enableA = true, const bool enableB = true);
|
||||
~Pwm16b();
|
||||
void setDutyA(const uint16_t duty);
|
||||
void setDutyB(const uint16_t duty);
|
||||
|
|
@ -37,9 +35,7 @@ private:
|
|||
bool _enableB;
|
||||
|
||||
public:
|
||||
Pwm8b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB,
|
||||
volatile unsigned char *compareRegisterA, volatile unsigned char *compareRegisterB, const uint8_t speed = 0b00000011,
|
||||
const bool enableA = true, const bool enableB = true);
|
||||
Pwm8b( volatile unsigned char *timerControlRegisterA, volatile unsigned char *timerControlRegisterB, volatile unsigned char *compareRegisterA, volatile unsigned char *compareRegisterB, const uint8_t speed = 0b00000011, const bool enableA = true, const bool enableB = true);
|
||||
~Pwm8b();
|
||||
void setDutyA(const uint8_t duty);
|
||||
void setDutyB(const uint8_t duty);
|
||||
|
|
|
|||
|
|
@ -114,14 +114,14 @@ uint8_t RgbLed::applyCal(uint16_t value, const uint16_t* cal)
|
|||
return (value*calValue)/1000;
|
||||
}
|
||||
|
||||
//unfinished
|
||||
void RgbLed::adjustHeadroom(uint8_t& r, uint8_t& g, uint8_t& b, const uint8_t lumina)
|
||||
{
|
||||
uint8_t postCalLumina = ((uint16_t)r+g+b)/3;
|
||||
while(postCalLumina < lumina && r < 255 && g < 255 && b < 255)
|
||||
{
|
||||
if(r > 255) break;
|
||||
if(r > 255);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RgbLed::patternStep()
|
||||
|
|
@ -159,8 +159,7 @@ void RgbLed::patternStep()
|
|||
else if(_pattern == 4)
|
||||
{
|
||||
( _counter < 8192 ) ? _pwmA->setDutyB(_counter >> 6) : _pwmA->setDutyB( 128 + (_counter >> 11));
|
||||
if( _counter > 1024 ) ( 8192 < _counter
|
||||
&& _counter < 16384 ) ? _pwmA->setDutyA((_counter-8192) >> 6) : _pwmA->setDutyA( 128 + (_counter >> 9 ));
|
||||
if( _counter > 1024 ) ( 8192 < _counter && _counter < 16384 ) ? _pwmA->setDutyA((_counter-8192) >> 6) : _pwmA->setDutyA( 128 + (_counter >> 9 ));
|
||||
if( _counter > 8192 ) _pwmB->setDutyB(_counter >> 9);
|
||||
|
||||
if(_counter<65530) _counter++;
|
||||
|
|
|
|||
2
rgbled.h
2
rgbled.h
|
|
@ -11,6 +11,8 @@ private:
|
|||
static constexpr uint16_t calGreen[] = {1000, 1000, 1000};
|
||||
static constexpr uint16_t calBlue[] = {400, 500, 500};
|
||||
|
||||
|
||||
|
||||
uint8_t _pattern = 0;
|
||||
|
||||
uint16_t _counter = 0;
|
||||
|
|
|
|||
0
ringbuffer.h
Normal file → Executable file
0
ringbuffer.h
Normal file → Executable file
|
|
@ -125,7 +125,4 @@ void Serial::flush()
|
|||
rxBuffer.flush();
|
||||
}
|
||||
|
||||
void Serial::setTerminator(char terminator)
|
||||
{
|
||||
_terminator = terminator;
|
||||
}
|
||||
void Serial::setTerminator(char terminator){_terminator = terminator;}
|
||||
|
|
|
|||
25
uvositem.cpp
25
uvositem.cpp
|
|
@ -1,25 +0,0 @@
|
|||
#include "uvositem.h"
|
||||
|
||||
UvosItem::UvosItem(const uint8_t idIn, char nameIn[])
|
||||
{
|
||||
id = 129 << 8 + idIn;
|
||||
type = 1;
|
||||
}
|
||||
|
||||
UvosItem::UvosItem(const Item& item)
|
||||
{
|
||||
Item::operator=(item);
|
||||
type = 1;
|
||||
}
|
||||
|
||||
void UvosItem::setValue(const uint8_t value)
|
||||
{
|
||||
const uint8_t paket[4] = {id >> 8, id & 0x00FF, 0, value};
|
||||
if(transmitter)
|
||||
transmitter->send(paket, 4);
|
||||
}
|
||||
|
||||
void UvosItem::resend()
|
||||
{
|
||||
setValue(lastValue);
|
||||
}
|
||||
16
uvositem.h
16
uvositem.h
|
|
@ -1,16 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "item.h"
|
||||
#include "W433DataTransmitter.h"
|
||||
|
||||
class UvosItem: public Item
|
||||
{
|
||||
public:
|
||||
inline static W433DataTransmitter* transmitter = nullptr;
|
||||
|
||||
public:
|
||||
UvosItem(const uint8_t idIn, char nameIn[]);
|
||||
UvosItem(const Item& item);
|
||||
void setValue(const uint8_t value);
|
||||
void resend();
|
||||
};
|
||||
10
writepin.h
10
writepin.h
|
|
@ -2,8 +2,7 @@
|
|||
#define WRITEPIN_H
|
||||
#include <avr/io.h>
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||
|
||||
inline void writePin(volatile unsigned char *port, const unsigned char pin, const bool state) //waste 2 cycles
|
||||
{
|
||||
*port &= ~(1 << pin);
|
||||
|
|
@ -21,10 +20,7 @@ inline void setDirection( volatile unsigned char *portDirReg, const unsigned cha
|
|||
writePin(portDirReg, pin, makeOutput);
|
||||
}
|
||||
|
||||
inline bool readPin( volatile unsigned char *inPort, const unsigned char pin)
|
||||
{
|
||||
return (bool) (*inPort & (1 << pin));
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
inline bool readPin( volatile unsigned char *inPort, const unsigned char pin){ return (bool) (*inPort & (1 << pin));}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue