Clueboard 66% Hotswap Support (#5204)
* Initial Clueboard 66% arm support * Fix LAYOUT_66_ansi * wip * Bring this branch up to date with led_matrix * Get Clueboard 66% hotswap working with led_matrix * stm32 cleanup * Fix compiling for clueboard 66% hotswap prototype * Reduce the size of the prototype firmware
This commit is contained in:
		
							parent
							
								
									539a6fc825
								
							
						
					
					
						commit
						0f62383be5
					
				
					 17 changed files with 2097 additions and 141 deletions
				
			
		| 
						 | 
				
			
			@ -3,3 +3,7 @@
 | 
			
		|||
#ifdef KEYBOARD_clueboard_66_hotswap_gen1
 | 
			
		||||
    #include "gen1.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef KEYBOARD_clueboard_66_hotswap_prototype
 | 
			
		||||
    #include "prototype.h"
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "config_common.h"
 | 
			
		||||
 | 
			
		||||
/* USB Device descriptor parameter */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										520
									
								
								keyboards/clueboard/66_hotswap/gen1/chconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										520
									
								
								keyboards/clueboard/66_hotswap/gen1/chconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,520 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file    templates/chconf.h
 | 
			
		||||
 * @brief   Configuration file template.
 | 
			
		||||
 * @details A copy of this file must be placed in each project directory, it
 | 
			
		||||
 *          contains the application specific kernel settings.
 | 
			
		||||
 *
 | 
			
		||||
 * @addtogroup config
 | 
			
		||||
 * @details Kernel related settings and hooks.
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef CHCONF_H
 | 
			
		||||
#define CHCONF_H
 | 
			
		||||
 | 
			
		||||
#define _CHIBIOS_RT_CONF_
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name System timers settings
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System time counter resolution.
 | 
			
		||||
 * @note    Allowed values are 16 or 32 bits.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_RESOLUTION                32
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System tick frequency.
 | 
			
		||||
 * @details Frequency of the system timer that drives the system ticks. This
 | 
			
		||||
 *          setting also defines the system tick time unit.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_FREQUENCY                 100000
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Time delta constant for the tick-less mode.
 | 
			
		||||
 * @note    If this value is zero then the system uses the classic
 | 
			
		||||
 *          periodic tick. This value represents the minimum number
 | 
			
		||||
 *          of ticks that is safe to specify in a timeout directive.
 | 
			
		||||
 *          The value one is not valid, timeouts are rounded up to
 | 
			
		||||
 *          this value.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_ST_TIMEDELTA                 2
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Kernel parameters and options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Round robin interval.
 | 
			
		||||
 * @details This constant is the number of system ticks allowed for the
 | 
			
		||||
 *          threads before preemption occurs. Setting this value to zero
 | 
			
		||||
 *          disables the preemption for threads with equal priority and the
 | 
			
		||||
 *          round robin becomes cooperative. Note that higher priority
 | 
			
		||||
 *          threads can still preempt, the kernel is always preemptive.
 | 
			
		||||
 * @note    Disabling the round robin preemption makes the kernel more compact
 | 
			
		||||
 *          and generally faster.
 | 
			
		||||
 * @note    The round robin preemption is not supported in tickless mode and
 | 
			
		||||
 *          must be set to zero in that case.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_TIME_QUANTUM                 0
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Managed RAM size.
 | 
			
		||||
 * @details Size of the RAM area to be managed by the OS. If set to zero
 | 
			
		||||
 *          then the whole available RAM is used. The core memory is made
 | 
			
		||||
 *          available to the heap allocator and/or can be used directly through
 | 
			
		||||
 *          the simplified core memory allocator.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    In order to let the OS manage the whole RAM the linker script must
 | 
			
		||||
 *          provide the @p __heap_base__ and @p __heap_end__ symbols.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MEMCORE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_MEMCORE_SIZE                 0
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread automatic spawn suppression.
 | 
			
		||||
 * @details When this option is activated the function @p chSysInit()
 | 
			
		||||
 *          does not spawn the idle thread. The application @p main()
 | 
			
		||||
 *          function becomes the idle thread and must implement an
 | 
			
		||||
 *          infinite loop.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_NO_IDLE_THREAD               FALSE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Performance options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   OS optimization.
 | 
			
		||||
 * @details If enabled then time efficient rather than space efficient code
 | 
			
		||||
 *          is used when two possible implementations exist.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    This is not related to the compiler optimization options.
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_OPTIMIZE_SPEED               TRUE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Subsystem options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Time Measurement APIs.
 | 
			
		||||
 * @details If enabled then the time measurement APIs are included in
 | 
			
		||||
 *          the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_TM                       TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads registry APIs.
 | 
			
		||||
 * @details If enabled then the registry APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_REGISTRY                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads synchronization APIs.
 | 
			
		||||
 * @details If enabled then the @p chThdWait() function is included in
 | 
			
		||||
 *          the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_WAITEXIT                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Semaphores APIs.
 | 
			
		||||
 * @details If enabled then the Semaphores APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_SEMAPHORES               TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Semaphores queuing mode.
 | 
			
		||||
 * @details If enabled then the threads are enqueued on semaphores by
 | 
			
		||||
 *          priority rather than in FIFO order.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE. Enable this if you have special
 | 
			
		||||
 *          requirements.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Mutexes APIs.
 | 
			
		||||
 * @details If enabled then the mutexes APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MUTEXES                  TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables recursive behavior on mutexes.
 | 
			
		||||
 * @note    Recursive mutexes are heavier and have an increased
 | 
			
		||||
 *          memory footprint.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MUTEXES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Conditional Variables APIs.
 | 
			
		||||
 * @details If enabled then the conditional variables APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MUTEXES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_CONDVARS                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Conditional Variables APIs with timeout.
 | 
			
		||||
 * @details If enabled then the conditional variables APIs with timeout
 | 
			
		||||
 *          specification are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_CONDVARS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Events Flags APIs.
 | 
			
		||||
 * @details If enabled then the event flags APIs are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_EVENTS                   TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Events Flags APIs with timeout.
 | 
			
		||||
 * @details If enabled then the events APIs with timeout specification
 | 
			
		||||
 *          are included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_EVENTS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Synchronous Messages APIs.
 | 
			
		||||
 * @details If enabled then the synchronous messages APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MESSAGES                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Synchronous Messages queuing mode.
 | 
			
		||||
 * @details If enabled then messages are served by priority rather than in
 | 
			
		||||
 *          FIFO order.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE. Enable this if you have special
 | 
			
		||||
 *          requirements.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MESSAGES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MESSAGES_PRIORITY        TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Mailboxes APIs.
 | 
			
		||||
 * @details If enabled then the asynchronous messages (mailboxes) APIs are
 | 
			
		||||
 *          included in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MAILBOXES                TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Core Memory Manager APIs.
 | 
			
		||||
 * @details If enabled then the core memory manager APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MEMCORE                  TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Heap Allocator APIs.
 | 
			
		||||
 * @details If enabled then the memory heap allocator APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
 | 
			
		||||
 *          @p CH_CFG_USE_SEMAPHORES.
 | 
			
		||||
 * @note    Mutexes are recommended.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_HEAP                     TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Memory Pools Allocator APIs.
 | 
			
		||||
 * @details If enabled then the memory pools allocator APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_MEMPOOLS                 TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Dynamic Threads APIs.
 | 
			
		||||
 * @details If enabled then the dynamic threads creation APIs are included
 | 
			
		||||
 *          in the kernel.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p TRUE.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_WAITEXIT.
 | 
			
		||||
 * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_USE_DYNAMIC                  TRUE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Debug options
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, kernel statistics.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_STATISTICS                   FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, system state check.
 | 
			
		||||
 * @details If enabled the correct call protocol for system APIs is checked
 | 
			
		||||
 *          at runtime.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, parameters checks.
 | 
			
		||||
 * @details If enabled then the checks on the API functions input
 | 
			
		||||
 *          parameters are activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_CHECKS                FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, consistency checks.
 | 
			
		||||
 * @details If enabled then all the assertions in the kernel code are
 | 
			
		||||
 *          activated. This includes consistency checks inside the kernel,
 | 
			
		||||
 *          runtime anomalies and port-defined checks.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_ASSERTS               FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, trace buffer.
 | 
			
		||||
 * @details If enabled then the trace buffer is activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Trace buffer entries.
 | 
			
		||||
 * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
 | 
			
		||||
 *          different from @p CH_DBG_TRACE_MASK_DISABLED.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_TRACE_BUFFER_SIZE            128
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, stack checks.
 | 
			
		||||
 * @details If enabled then a runtime stack check is performed.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    The stack check is performed in a architecture/port dependent way.
 | 
			
		||||
 *          It may not be implemented or some ports.
 | 
			
		||||
 * @note    The default failure mode is to halt the system with the global
 | 
			
		||||
 *          @p panic_msg variable set to @p NULL.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_ENABLE_STACK_CHECK           TRUE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, stacks initialization.
 | 
			
		||||
 * @details If enabled then the threads working area is filled with a byte
 | 
			
		||||
 *          value when a thread is created. This can be useful for the
 | 
			
		||||
 *          runtime measurement of the used stack.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_FILL_THREADS                 FALSE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Debug option, threads profiling.
 | 
			
		||||
 * @details If enabled then a field is added to the @p thread_t structure that
 | 
			
		||||
 *          counts the system ticks occurred while executing the thread.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    The default is @p FALSE.
 | 
			
		||||
 * @note    This debug option is not currently compatible with the
 | 
			
		||||
 *          tickless mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_DBG_THREADS_PROFILING            FALSE
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/**
 | 
			
		||||
 * @name Kernel hooks
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads descriptor structure extension.
 | 
			
		||||
 * @details User fields added to the end of the @p thread_t structure.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
 | 
			
		||||
  /* Add threads custom fields here.*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads initialization hook.
 | 
			
		||||
 * @details User initialization code added to the @p chThdInit() API.
 | 
			
		||||
 *
 | 
			
		||||
 * @note    It is invoked from within @p chThdInit() and implicitly from all
 | 
			
		||||
 *          the threads creation APIs.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
 | 
			
		||||
  /* Add threads initialization code here.*/                                \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Threads finalization hook.
 | 
			
		||||
 * @details User finalization code added to the @p chThdExit() API.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
 | 
			
		||||
  /* Add threads finalization code here.*/                                  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Context switch hook.
 | 
			
		||||
 * @details This hook is invoked just before switching between threads.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
 | 
			
		||||
  /* Context switch code here.*/                                            \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   ISR enter hook.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
 | 
			
		||||
  /* IRQ prologue code here.*/                                              \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   ISR exit hook.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
 | 
			
		||||
  /* IRQ epilogue code here.*/                                              \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread enter hook.
 | 
			
		||||
 * @note    This hook is invoked within a critical zone, no OS functions
 | 
			
		||||
 *          should be invoked from here.
 | 
			
		||||
 * @note    This macro can be used to activate a power saving mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
 | 
			
		||||
  /* Idle-enter code here.*/                                                \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle thread leave hook.
 | 
			
		||||
 * @note    This hook is invoked within a critical zone, no OS functions
 | 
			
		||||
 *          should be invoked from here.
 | 
			
		||||
 * @note    This macro can be used to deactivate a power saving mode.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
 | 
			
		||||
  /* Idle-leave code here.*/                                                \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Idle Loop hook.
 | 
			
		||||
 * @details This hook is continuously invoked by the idle thread loop.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
 | 
			
		||||
  /* Idle loop code here.*/                                                 \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System tick event hook.
 | 
			
		||||
 * @details This hook is invoked in the system tick handler immediately
 | 
			
		||||
 *          after processing the virtual timers queue.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
 | 
			
		||||
  /* System tick event code here.*/                                         \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   System halt hook.
 | 
			
		||||
 * @details This hook is invoked in case to a system halting error before
 | 
			
		||||
 *          the system is halted.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
 | 
			
		||||
  /* System halt code here.*/                                               \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Trace hook.
 | 
			
		||||
 * @details This hook is invoked each time a new record is written in the
 | 
			
		||||
 *          trace buffer.
 | 
			
		||||
 */
 | 
			
		||||
#define CH_CFG_TRACE_HOOK(tep) {                                            \
 | 
			
		||||
  /* Trace code here.*/                                                     \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* Port-specific settings (override port settings defaulted in chcore.h).    */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
#endif  /* CHCONF_H */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +1,146 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2017 skully <skullydazed@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "config_common.h"
 | 
			
		||||
 | 
			
		||||
#define PRODUCT_ID      0x2390
 | 
			
		||||
/* USB Device descriptor parameter */
 | 
			
		||||
#define VENDOR_ID       0xC1ED
 | 
			
		||||
#define PRODUCT_ID      0x2391
 | 
			
		||||
#define DEVICE_VER      0x0001
 | 
			
		||||
#define MANUFACTURER    Clueboard
 | 
			
		||||
 | 
			
		||||
/* Address for jumping to bootloader on STM32 chips. */
 | 
			
		||||
/* It is chip dependent, the correct number can be looked up here:
 | 
			
		||||
 * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
 | 
			
		||||
 * This also requires a patch to chibios:
 | 
			
		||||
 *  <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 10
 | 
			
		||||
#define MATRIX_COLS 8
 | 
			
		||||
 | 
			
		||||
/* ROWS: Top to bottom, COLS: Left to right
 | 
			
		||||
/*
 | 
			
		||||
 * Keyboard Matrix Assignments
 | 
			
		||||
 *
 | 
			
		||||
 * Change this to how you wired your keyboard
 | 
			
		||||
 * COLS: AVR pins used for columns, left to right
 | 
			
		||||
 * ROWS: AVR pins used for rows, top to bottom
 | 
			
		||||
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
			
		||||
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
 | 
			
		||||
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
#define MATRIX_ROW_PINS { B11, A6, A3, A2, A1, B5, B6, C15, C14, C13 }
 | 
			
		||||
#define MATRIX_COL_PINS { B10, B2, B1, B0, A7, B4, B3, B7 }
 | 
			
		||||
#define UNUSED_PINS { A0, A8, A15, B12, B13, B14, B15 }
 | 
			
		||||
#define DIODE_DIRECTION COL2ROW
 | 
			
		||||
 | 
			
		||||
/* Speaker configuration
 | 
			
		||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
			
		||||
#define DEBOUNCE 6
 | 
			
		||||
 | 
			
		||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
			
		||||
//#define LOCKING_SUPPORT_ENABLE
 | 
			
		||||
/* Locking resynchronize hack */
 | 
			
		||||
//#define LOCKING_RESYNC_ENABLE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Force NKRO
 | 
			
		||||
 *
 | 
			
		||||
 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 | 
			
		||||
 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 | 
			
		||||
 * makefile for this to work.)
 | 
			
		||||
 *
 | 
			
		||||
 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 | 
			
		||||
 * until the next keyboard reset.
 | 
			
		||||
 *
 | 
			
		||||
 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 | 
			
		||||
 * fully operational during normal computer usage.
 | 
			
		||||
 *
 | 
			
		||||
 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 | 
			
		||||
 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 | 
			
		||||
 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 | 
			
		||||
 * power-up.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#define B7_AUDIO
 | 
			
		||||
#define NO_MUSIC_MODE
 | 
			
		||||
#define AUDIO_CLICKY
 | 
			
		||||
//#define FORCE_NKRO
 | 
			
		||||
 | 
			
		||||
/* Backlight configuration
 | 
			
		||||
/* key combination for magic key command */
 | 
			
		||||
#define IS_COMMAND() ( \
 | 
			
		||||
	keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Feature disable options
 | 
			
		||||
 *  These options are also useful to firmware size reduction.
 | 
			
		||||
 */
 | 
			
		||||
#define BACKLIGHT_LEVELS 1
 | 
			
		||||
 | 
			
		||||
/* Underlight configuration
 | 
			
		||||
/* disable debug print */
 | 
			
		||||
//#define NO_DEBUG
 | 
			
		||||
 | 
			
		||||
/* disable print */
 | 
			
		||||
//#define NO_PRINT
 | 
			
		||||
 | 
			
		||||
/* disable action features */
 | 
			
		||||
//#define NO_ACTION_LAYER
 | 
			
		||||
//#define NO_ACTION_TAPPING
 | 
			
		||||
//#define NO_ACTION_ONESHOT
 | 
			
		||||
//#define NO_ACTION_MACRO
 | 
			
		||||
//#define NO_ACTION_FUNCTION
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * MIDI options
 | 
			
		||||
 */
 | 
			
		||||
#define RGB_DI_PIN D7
 | 
			
		||||
#define RGBLED_NUM 26     // Number of LEDs
 | 
			
		||||
#define RGBLIGHT_HUE_STEP 32
 | 
			
		||||
#define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
 | 
			
		||||
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
 | 
			
		||||
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
 | 
			
		||||
#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 4   // How many LEDs wide to light up
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 16   // The led to start at
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 8  // How many LEDs to travel
 | 
			
		||||
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4    // How many LEDs wide to light up
 | 
			
		||||
/* Prevent use of disabled MIDI features in the keymap */
 | 
			
		||||
//#define MIDI_ENABLE_STRICT 1
 | 
			
		||||
 | 
			
		||||
/* enable basic MIDI features:
 | 
			
		||||
   - MIDI notes can be sent when in Music mode is on
 | 
			
		||||
*/
 | 
			
		||||
//#define MIDI_BASIC
 | 
			
		||||
 | 
			
		||||
/* enable advanced MIDI features:
 | 
			
		||||
   - MIDI notes can be added to the keymap
 | 
			
		||||
   - Octave shift and transpose
 | 
			
		||||
   - Virtual sustain, portamento, and modulation wheel
 | 
			
		||||
   - etc.
 | 
			
		||||
*/
 | 
			
		||||
//#define MIDI_ADVANCED
 | 
			
		||||
 | 
			
		||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 | 
			
		||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
 | 
			
		||||
 | 
			
		||||
 /* Backlight configuration
 | 
			
		||||
 */
 | 
			
		||||
#define BACKLIGHT_LEVELS 10
 | 
			
		||||
 | 
			
		||||
// This is a 7-bit address, that gets left-shifted and bit 0
 | 
			
		||||
// set to 0 for write, 1 for read (as per I2C protocol)
 | 
			
		||||
// The address will vary depending on your wiring:
 | 
			
		||||
// 0b1110100 AD <-> GND
 | 
			
		||||
// 0b1110111 AD <-> VCC
 | 
			
		||||
// 0b1110101 AD <-> SCL
 | 
			
		||||
// 0b1110110 AD <-> SDA
 | 
			
		||||
#define LED_DRIVER_ADDR_1 0b1110100
 | 
			
		||||
#define I2C1_BANK GPIOB
 | 
			
		||||
#define I2C1_SCL 8
 | 
			
		||||
#define I2C1_SDA 9
 | 
			
		||||
 | 
			
		||||
#define LED_DRIVER_COUNT 1
 | 
			
		||||
#define LED_DRIVER_LED_COUNT 71
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,63 +1,186 @@
 | 
			
		|||
/* Copyright 2017 Clueboard <info@clueboard.co>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
#include "gen1.h"
 | 
			
		||||
#include <avr/io.h>
 | 
			
		||||
#include "backlight.h"
 | 
			
		||||
#include "print.h"
 | 
			
		||||
#include "is31fl3731-simple.h"
 | 
			
		||||
 | 
			
		||||
void matrix_init_kb(void) {
 | 
			
		||||
	// put your keyboard start-up code here
 | 
			
		||||
	// runs once when the firmware starts up
 | 
			
		||||
	matrix_init_user();
 | 
			
		||||
	led_init_ports();
 | 
			
		||||
 | 
			
		||||
    // JTAG disable for PORT F. write JTD bit twice within four cycles.
 | 
			
		||||
    MCUCR |= (1<<JTD);
 | 
			
		||||
    MCUCR |= (1<<JTD);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void matrix_scan_kb(void) {
 | 
			
		||||
    matrix_scan_user();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void backlight_init_ports(void) {
 | 
			
		||||
    print("init_backlight_pin()\n");
 | 
			
		||||
    // Set our LED pins as output
 | 
			
		||||
    DDRD |= (1<<0); // Esc
 | 
			
		||||
    DDRD |= (1<<4); // Page Up
 | 
			
		||||
    DDRD |= (1<<1); // Arrows
 | 
			
		||||
#ifdef LED_MATRIX_ENABLE
 | 
			
		||||
const is31_led g_is31_leds[LED_DRIVER_LED_COUNT] = {
 | 
			
		||||
/* Refer to IS31 manual for these locations
 | 
			
		||||
 *  driver
 | 
			
		||||
 *  |   LED address
 | 
			
		||||
 *  |   | */
 | 
			
		||||
    {0, C1_1},  // k00  KC_GESC
 | 
			
		||||
    {0, C1_2},  // k01 KC_1
 | 
			
		||||
    {0, C1_3},  // k02 KC_2
 | 
			
		||||
    {0, C1_4},  // k03 KC_3
 | 
			
		||||
    {0, C1_5},  // k04 KC_4
 | 
			
		||||
    {0, C1_6},  // k05 KC_5
 | 
			
		||||
    {0, C1_7},  // k06 KC_6
 | 
			
		||||
    {0, C1_8},  // k07 KC_7
 | 
			
		||||
    {0, C1_9},  // k50 KC_8
 | 
			
		||||
    {0, C1_10}, // k51 KC_9
 | 
			
		||||
    {0, C1_11}, // k52 KC_0
 | 
			
		||||
    {0, C1_12}, // k53 KC_MINS
 | 
			
		||||
    {0, C1_13}, // k54 KC_EQL
 | 
			
		||||
    {0, C1_14}, // k55 KC_BSPC
 | 
			
		||||
    {0, C1_15}, // k57 KC_PGUP
 | 
			
		||||
    {0, C2_1},  // k10 KC_TAB
 | 
			
		||||
    {0, C2_2},  // k11 KC_Q
 | 
			
		||||
    {0, C2_3},  // k12 KC_W
 | 
			
		||||
    {0, C2_4},  // k13 KC_E
 | 
			
		||||
    {0, C2_5},  // k14 KC_R
 | 
			
		||||
    {0, C2_6},  // k15 KC_T
 | 
			
		||||
    {0, C2_7},  // k16 KC_Y
 | 
			
		||||
    {0, C2_8},  // k17 KC_U
 | 
			
		||||
    {0, C2_9},  // k60 KC_I
 | 
			
		||||
    {0, C2_10}, // k61 KC_O
 | 
			
		||||
    {0, C2_11}, // k62 KC_P
 | 
			
		||||
    {0, C2_12}, // k63 KC_LBRC
 | 
			
		||||
    {0, C2_13}, // k64 KC_RBRC
 | 
			
		||||
    {0, C2_14}, // k65 KC_BSLS
 | 
			
		||||
    {0, C2_15}, // k67 KC_PGDN
 | 
			
		||||
    {0, C3_1},  // k20 KC_CAPS
 | 
			
		||||
    {0, C3_2},  // k21 KC_A
 | 
			
		||||
    {0, C3_3},  // k22 KC_S
 | 
			
		||||
    {0, C3_4},  // k23 KC_D
 | 
			
		||||
    {0, C3_5},  // k24 KC_F
 | 
			
		||||
    {0, C3_6},  // k25 KC_G
 | 
			
		||||
    {0, C3_7},  // k26 KC_H
 | 
			
		||||
    {0, C3_8},  // k27 KC_J
 | 
			
		||||
    {0, C3_9},  // k70 KC_K
 | 
			
		||||
    {0, C3_10}, // k71 KC_L
 | 
			
		||||
    {0, C3_11}, // k72 KC_SCLN
 | 
			
		||||
    {0, C3_12}, // k73 KC_QUOT
 | 
			
		||||
    {0, C3_14}, // k75 KC_ENT
 | 
			
		||||
    {0, C4_1},  // k30 KC_LSFT
 | 
			
		||||
    {0, C4_3},  // k32 KC_Z
 | 
			
		||||
    {0, C4_4},  // k33 KC_X
 | 
			
		||||
    {0, C4_5},  // k34 KC_C
 | 
			
		||||
    {0, C4_6},  // k35 KC_V
 | 
			
		||||
    {0, C4_7},  // k36 KC_B
 | 
			
		||||
    {0, C4_8},  // k37 KC_N
 | 
			
		||||
    {0, C4_9},  // k80 KC_M
 | 
			
		||||
    {0, C4_10}, // k81 KC_COMM
 | 
			
		||||
    {0, C4_11}, // k82 KC_DOT
 | 
			
		||||
    {0, C4_12}, // k83 KC_SLSH
 | 
			
		||||
    {0, C4_13}, // k85 KC_RSFT
 | 
			
		||||
    {0, C4_14}, // k86 KC_UP
 | 
			
		||||
    {0, C5_1},  // k40 KC_LCTL
 | 
			
		||||
    {0, C5_2},  // k41 KC_LGUI
 | 
			
		||||
    {0, C5_3},  // k42 KC_LALT
 | 
			
		||||
    {0, C5_4},  // Unassociated between LALT and SPACE_2.75
 | 
			
		||||
    {0, C5_5},  // k45 KC_SPC SPACE_2.75
 | 
			
		||||
    {0, C5_6},  // k45 KC_SPC SPACE_6.75
 | 
			
		||||
    {0, C5_7},  // k46 KC_SPC SPACE_2.25
 | 
			
		||||
    {0, C5_8},  // Unassociated between SPACE_2.25 and SPACE_1.25
 | 
			
		||||
    {0, C5_9},  // k90 KC_RGUI
 | 
			
		||||
    {0, C5_10}, // k92 KC_RALT
 | 
			
		||||
    {0, C5_11}, // k93 MO(_FL)
 | 
			
		||||
    {0, C5_12}, // k94 KC_RCTL
 | 
			
		||||
    {0, C5_13}, // k95 KC_LEFT
 | 
			
		||||
    {0, C5_14}, // k96 KC_DOWN
 | 
			
		||||
    {0, C5_15}  // k97 KC_RGHT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
    // Set our LED pins low
 | 
			
		||||
    PORTD &= ~(1<<0); // Esc
 | 
			
		||||
    PORTD &= ~(1<<4); // Page Up
 | 
			
		||||
    PORTD &= ~(1<<1); // Arrows
 | 
			
		||||
}
 | 
			
		||||
const led_matrix g_leds[LED_DRIVER_LED_COUNT] = {
 | 
			
		||||
 | 
			
		||||
void backlight_set(uint8_t level) {
 | 
			
		||||
    if ( level == 0 ) {
 | 
			
		||||
        // Turn off light
 | 
			
		||||
        PORTD |= (1<<0); // Esc
 | 
			
		||||
        PORTD |= (1<<4); // Page Up
 | 
			
		||||
        PORTD |= (1<<1); // Arrows
 | 
			
		||||
    } else {
 | 
			
		||||
        // Turn on light
 | 
			
		||||
        PORTD &= ~(1<<0); // Esc
 | 
			
		||||
        PORTD &= ~(1<<4); // Page Up
 | 
			
		||||
        PORTD &= ~(1<<1); // Arrows
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    /*{row | col << 4}
 | 
			
		||||
      |            LED_ROW_COL(row, col)
 | 
			
		||||
      |             |            modifier
 | 
			
		||||
      |             |            | */
 | 
			
		||||
    {{0|(1<<4)},   {0, 0}, 1},           // k00  KC_GESC
 | 
			
		||||
    {{0|(2<<4)},   {14.45, 0}, 0},       // k01 KC_1
 | 
			
		||||
    {{0|(3<<4)},   {28.9, 0}, 0},        // k02 KC_2
 | 
			
		||||
    {{0|(4<<4)},   {43.35, 0}, 0},       // k03 KC_3
 | 
			
		||||
    {{0|(5<<4)},   {57.8, 0}, 0},        // k04 KC_4
 | 
			
		||||
    {{0|(6<<4)},   {72.25, 0}, 0},       // k05 KC_5
 | 
			
		||||
    {{0|(7<<4)},   {86.7, 0}, 0},        // k06 KC_6
 | 
			
		||||
    {{0|(8<<4)},   {101.2, 0}, 0},       // k07 KC_7
 | 
			
		||||
    {{0|(9<<4)},   {115.6, 0}, 0},       // k50 KC_8
 | 
			
		||||
    {{0|(10<<4)},  {130, 0}, 0},         // k51 KC_9
 | 
			
		||||
    {{0|(11<<4)},  {144.5, 0}, 0},       // k52 KC_0
 | 
			
		||||
    {{0|(12<<4)},  {159, 0}, 0},         // k53 KC_MINS
 | 
			
		||||
    {{0|(13<<4)},  {173.4, 0}, 0},       // k54 KC_EQL
 | 
			
		||||
    {{0|(14<<4)},  {195.1, 0}, 1},       // k55 KC_BSPC
 | 
			
		||||
    {{0|(15<<4)},  {224, 0}, 1},         // k57 KC_PGUP
 | 
			
		||||
 | 
			
		||||
void led_init_ports() {
 | 
			
		||||
    // * Set our LED pins as output
 | 
			
		||||
    DDRB |= (1<<4);
 | 
			
		||||
}
 | 
			
		||||
    {{1|(0<<4)},   {3.6125, 16}, 1},     // k10 KC_TAB
 | 
			
		||||
    {{1|(1<<4)},   {21.675, 16}, 0},     // k11 KC_Q
 | 
			
		||||
    {{1|(2<<4)},   {36.125, 16}, 0},     // k12 KC_W
 | 
			
		||||
    {{1|(3<<4)},   {50.575, 16}, 0},     // k13 KC_E
 | 
			
		||||
    {{1|(4<<4)},   {65.025, 16}, 0},     // k14 KC_R
 | 
			
		||||
    {{1|(5<<4)},   {79.475, 16}, 0},     // k15 KC_T
 | 
			
		||||
    {{1|(6<<4)},   {93.925, 16}, 0},     // k16 KC_Y
 | 
			
		||||
    {{1|(7<<4)},   {108.375, 16}, 0},    // k17 KC_U
 | 
			
		||||
    {{1|(8<<4)},   {122.825, 16}, 0},    // k60 KC_I
 | 
			
		||||
    {{1|(9<<4)},   {137.275, 16}, 0},    // k61 KC_O
 | 
			
		||||
    {{1|(10<<4)},  {151.725, 16}, 0},    // k62 KC_P
 | 
			
		||||
    {{1|(11<<4)},  {166.175, 16}, 0},    // k63 KC_LBRC
 | 
			
		||||
    {{1|(12<<4)},  {180.625, 16}, 0},    // k64 KC_RBRC
 | 
			
		||||
    {{1|(13<<4)},  {198.6875, 16}, 1},   // k65 KC_BSLS
 | 
			
		||||
    {{1|(14<<4)},  {224, 16}, 1},        // k67 KC_PGDN
 | 
			
		||||
 | 
			
		||||
void led_set_kb(uint8_t usb_led) {
 | 
			
		||||
    DDRB |= (1<<4);
 | 
			
		||||
    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
 | 
			
		||||
        // Turn capslock on
 | 
			
		||||
        PORTB |= (1<<4);
 | 
			
		||||
    } else {
 | 
			
		||||
        // Turn capslock off
 | 
			
		||||
        PORTB &= ~(1<<4);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    {{2|(0<<4)},   {5.41875, 32}, 1},    // k20 KC_CAPS
 | 
			
		||||
    {{2|(1<<4)},   {25.2875, 32}, 0},    // k21 KC_A
 | 
			
		||||
    {{2|(2<<4)},   {39.7375, 32}, 0},    // k22 KC_S
 | 
			
		||||
    {{2|(3<<4)},   {54.1875, 32}, 0},    // k23 KC_D
 | 
			
		||||
    {{2|(4<<4)},   {68.6375, 32}, 0},    // k24 KC_F
 | 
			
		||||
    {{2|(5<<4)},   {83.0875, 32}, 0},    // k25 KC_G
 | 
			
		||||
    {{2|(6<<4)},   {97.5375, 32}, 0},    // k26 KC_H
 | 
			
		||||
    {{2|(7<<4)},   {111.9875, 32}, 0},   // k27 KC_J
 | 
			
		||||
    {{2|(8<<4)},   {126.4375, 32}, 0},   // k70 KC_K
 | 
			
		||||
    {{2|(9<<4)},   {140.8875, 32}, 0},   // k71 KC_L
 | 
			
		||||
    {{2|(10<<4)},  {155.3375, 32}, 0},   // k72 KC_SCLN
 | 
			
		||||
    {{2|(11<<4)},  {169.7875, 32}, 0},   // k73 KC_QUOT
 | 
			
		||||
    {{2|(12<<4)},  {184.2375, 32}, 1},   // k75 KC_ENT
 | 
			
		||||
 | 
			
		||||
    {{3|(0<<4)},   {16.25625, 48}, 1},   // k30 KC_LSFT
 | 
			
		||||
    {{3|(1<<4)},   {32.5125, 48}, 0},    // k32 KC_Z
 | 
			
		||||
    {{3|(2<<4)},   {46.9625, 48}, 0},    // k33 KC_X
 | 
			
		||||
    {{3|(3<<4)},   {61.4125, 48}, 0},    // k34 KC_C
 | 
			
		||||
    {{3|(4<<4)},   {75.8625, 48}, 0},    // k35 KC_V
 | 
			
		||||
    {{3|(5<<4)},   {90.3125, 48}, 0},    // k36 KC_B
 | 
			
		||||
    {{3|(6<<4)},   {104.7625, 48}, 0},   // k37 KC_N
 | 
			
		||||
    {{3|(7<<4)},   {119.2125, 48}, 0},   // k80 KC_M
 | 
			
		||||
    {{3|(8<<4)},   {133.6625, 48}, 0},   // k81 KC_COMM
 | 
			
		||||
    {{3|(9<<4)},   {148.1125, 48}, 0},   // k82 KC_DOT
 | 
			
		||||
    {{3|(10<<4)},  {162.5625, 48}, 0},   // k83 KC_SLSH
 | 
			
		||||
    {{3|(11<<4)},  {187.85, 48}, 1},     // k85 KC_RSFT
 | 
			
		||||
    {{3|(12<<4)},  {209.525, 48}, 1},    // k86 KC_UP
 | 
			
		||||
 | 
			
		||||
    {{4|(0<<4)},   {9.03125, 64}, 1},    // k40 KC_LCTL
 | 
			
		||||
    {{4|(1<<4)},   {27.09375, 64}, 1},   // k41 KC_LGUI
 | 
			
		||||
    {{4|(2<<4)},   {45.15625, 64}, 1},   // k42 KC_LALT
 | 
			
		||||
    {{4|(3<<4)},   {59.45, 64}, 1},      // Unassociated between LALT and SPACE_2.75
 | 
			
		||||
    {{4|(4<<4)},   {73.9, 64}, 1},       // k45 KC_SPC SPACE_2.75
 | 
			
		||||
    {{4|(5<<4)},   {88.35, 64}, 1},      // k45 KC_SPC SPACE_6.25
 | 
			
		||||
    {{4|(6<<4)},   {102.8, 64}, 1},      // k46 KC_SPC SPACE_2.25
 | 
			
		||||
    {{4|(7<<4)},   {117.40625, 64}, 1},  // Unassociated between SPACE_2.25 and SPACE_2.75
 | 
			
		||||
    {{4|(8<<4)},   {135.46875, 64}, 1},  // k90 KC_RGUI
 | 
			
		||||
    {{4|(9<<4)},   {153.53125, 64}, 1},  // k92 KC_RALT
 | 
			
		||||
    {{4|(10<<4)},  {167.98125, 64}, 1},  // k93 MO(_FL)
 | 
			
		||||
    {{4|(11<<4)},  {186.04375, 64}, 1},  // k94 KC_RCTL
 | 
			
		||||
    {{4|(12<<4)},  {195.075, 64}, 1},    // k95 KC_LEFT
 | 
			
		||||
    {{4|(13<<4)},  {209.525, 64}, 1},    // k96 KC_DOWN
 | 
			
		||||
    {{4|(14<<4)},  {224, 64}, 1}         // k97 KC_RGHT
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,67 +1,89 @@
 | 
			
		|||
/* Copyright 2017 Clueboard <info@clueboard.co>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These are shortcuts to help you work with the various layout options. If your 
 | 
			
		||||
 * keymap works with one of the LAYOUT_...() macros you are encouraged to use that
 | 
			
		||||
 * and to contribute your keymap to the corresponding layout in 
 | 
			
		||||
 * `qmk_firmware/layouts/community`.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Clueboard matrix layout
 | 
			
		||||
 * ,-----------------------------------------------------------.  ,---.
 | 
			
		||||
 * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54|     56|  | 57|
 | 
			
		||||
 * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54|   56  |  | 57|
 | 
			
		||||
 * |-----------------------------------------------------------|  |---|
 | 
			
		||||
 * |   10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64|   65|  | 67|
 | 
			
		||||
 * |-----------------------------------------------------------|  `---'
 | 
			
		||||
 * |    20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73|      75|
 | 
			
		||||
 * |-------------------------------------------------------------.
 | 
			
		||||
 * |      30| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83|      85| 86|
 | 
			
		||||
 * |-----------------------------------------------------------------.
 | 
			
		||||
 * |  40|  41|  42|        45|      46|  90|  92| 93|  94| 95| 96| 97|
 | 
			
		||||
 * `-----------------------------------------------------------------'
 | 
			
		||||
 * |--------------------------------------------------------------.
 | 
			
		||||
 * |  30    | 32| 33| 34| 35| 36| 37| 80| 81| 82| 83|      85  |86|
 | 
			
		||||
 * |------------------------------------------------------------------.
 | 
			
		||||
 * |  40| 41|  42|        45|       46|   90|  92|  93|  94| 95|96| 97|
 | 
			
		||||
 * `------------------------------------------------------------------'
 | 
			
		||||
 * ,-----------------------------------------------------------.  ,---.
 | 
			
		||||
 * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |  |Ins|
 | 
			
		||||
 * |-----------------------------------------------------------|  |---|
 | 
			
		||||
 * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|  |Del|
 | 
			
		||||
 * |-----------------------------------------------------------|  `---'
 | 
			
		||||
 * |Caps  |  A|  S|  D|  F|  G|  H|  J|  k|  L|  ;|  '|Enter   |
 | 
			
		||||
 * |-------------------------------------------------------------.
 | 
			
		||||
 * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift   |Up |
 | 
			
		||||
 * |-----------------------------------------------------------------.
 | 
			
		||||
 * |Ctrl|Alt |Gui |     Space|   Space|Gui |Alt |Fn |Ctrl|Lft|Dwn|Rgt|
 | 
			
		||||
 * `-----------------------------------------------------------------'
 | 
			
		||||
 * |--------------------------------------------------------------.
 | 
			
		||||
 * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|    Shift| Up|
 | 
			
		||||
 * |------------------------------------------------------------------.
 | 
			
		||||
 * |Ctrl|Alt|Gui |     Space|  Space|Gui |Alt |Fn  |Ctrl|Left|Down|Rgt|
 | 
			
		||||
 * `------------------------------------------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
// The first section contains all of the arguments
 | 
			
		||||
// The second converts the arguments into a two-dimensional array
 | 
			
		||||
 | 
			
		||||
#define LAYOUT( \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k56,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64,    k65,   k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,         k75,        \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,      k85, k86,      \
 | 
			
		||||
    k40, k41, k42,           k45, k46,      k90,      k92, k93, k94, k95, k96, k97  \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k55,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65,      k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,    k75, \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,      k85, k86, \
 | 
			
		||||
    k40, k41, k42,           k45, k46,      k90,      k92, k93, k94, k95, k96, k97 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00,    k01,    k02,    k03,    k04,    k05,    k06,    k07   }, \
 | 
			
		||||
    { k10,    k11,    k12,    k13,    k14,    k15,    k16,    k17   }, \
 | 
			
		||||
    { k20,    k21,    k22,    k23,    k24,    k25,    k26,    k27   }, \
 | 
			
		||||
    { k30,    KC_NO,  k32,    k33,    k34,    k35,    k36,    k37   }, \
 | 
			
		||||
    { k40,    k41,    k42,    KC_NO,  KC_NO,  k45,    k46,    KC_NO }, \
 | 
			
		||||
    { k50,    k51,    k52,    k53,    k54,    KC_NO,  k56,    k57   }, \
 | 
			
		||||
    { k60,    k61,    k62,    k63,    k64,    k65,    KC_NO,  k67   }, \
 | 
			
		||||
    { k70,    k71,    k72,    k73,    KC_NO,  k75,    KC_NO,  KC_NO }, \
 | 
			
		||||
    { k80,    k81,    k82,    k83,    KC_NO,  k85,    k86,    KC_NO }, \
 | 
			
		||||
    { k90,    KC_NO,  k92,    k93,    k94,    k95,    k96,    k97   }  \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, k55, KC_NO, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
 | 
			
		||||
    { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
 | 
			
		||||
    { k90, KC_NO, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_66_ansi( \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k56,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64,    k65,   k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,         k75,        \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,      k85, k86,      \
 | 
			
		||||
    k40, k41, k42,                k46,                k92, k93, k94, k95, k96, k97  \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k55,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65,      k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,    k75, \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,    k85,   k86, \
 | 
			
		||||
    k40, k41, k42,                k46,                k92, k93, k94, k95, k96, k97 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00,    k01,    k02,    k03,    k04,    k05,    k06,    k07   }, \
 | 
			
		||||
    { k10,    k11,    k12,    k13,    k14,    k15,    k16,    k17   }, \
 | 
			
		||||
    { k20,    k21,    k22,    k23,    k24,    k25,    k26,    k27   }, \
 | 
			
		||||
    { k30,    KC_NO,  k32,    k33,    k34,    k35,    k36,    k37   }, \
 | 
			
		||||
    { k40,    k41,    k42,    KC_NO,  KC_NO,  KC_NO,  k46,    KC_NO }, \
 | 
			
		||||
    { k50,    k51,    k52,    k53,    k54,    KC_NO,  k56,    k57   }, \
 | 
			
		||||
    { k60,    k61,    k62,    k63,    k64,    k65,    KC_NO,  k67   }, \
 | 
			
		||||
    { k70,    k71,    k72,    k73,    KC_NO,  k75,    KC_NO,  KC_NO }, \
 | 
			
		||||
    { k80,    k81,    k82,    k83,    KC_NO,  k85,    k86,    KC_NO }, \
 | 
			
		||||
    { KC_NO,  KC_NO,  k92,    k93,    k94,    k95,    k96,    k97   }  \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, k55, KC_NO, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
 | 
			
		||||
    { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
 | 
			
		||||
    { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										388
									
								
								keyboards/clueboard/66_hotswap/gen1/halconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										388
									
								
								keyboards/clueboard/66_hotswap/gen1/halconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,388 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file    templates/halconf.h
 | 
			
		||||
 * @brief   HAL configuration header.
 | 
			
		||||
 * @details HAL configuration file, this file allows to enable or disable the
 | 
			
		||||
 *          various device drivers from your application. You may also use
 | 
			
		||||
 *          this file in order to override the device drivers default settings.
 | 
			
		||||
 *
 | 
			
		||||
 * @addtogroup HAL_CONF
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HALCONF_H
 | 
			
		||||
#define HALCONF_H
 | 
			
		||||
 | 
			
		||||
#include "mcuconf.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the PAL subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_PAL                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the ADC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_ADC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the CAN subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_CAN                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the DAC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_DAC                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the EXT subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_EXT                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the GPT subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_GPT                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the I2C subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2C                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the I2S subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2S                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the ICU subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_ICU                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the MAC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_MAC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the MMC_SPI subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_MMC_SPI             FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the PWM subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_PWM                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the QSPI subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_QSPI                FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the RTC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_RTC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SDC subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SDC                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SERIAL subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SERIAL              FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SERIAL over USB subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SERIAL_USB          FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the SPI subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_SPI                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the UART subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_UART                FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the USB subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_USB                 TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the WDG subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_WDG                 FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* ADC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define ADC_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define ADC_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* CAN driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Sleep mode related APIs inclusion switch.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
 | 
			
		||||
#define CAN_USE_SLEEP_MODE          TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* I2C driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the mutual exclusion APIs on the I2C bus.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define I2C_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* MAC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables an event sources for incoming packets.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
 | 
			
		||||
#define MAC_USE_ZERO_COPY           FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables an event sources for incoming packets.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
 | 
			
		||||
#define MAC_USE_EVENTS              TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* MMC_SPI driver related settings.                                          */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Delays insertions.
 | 
			
		||||
 * @details If enabled this options inserts delays into the MMC waiting
 | 
			
		||||
 *          routines releasing some extra CPU time for the threads with
 | 
			
		||||
 *          lower priority, this may slow down the driver a bit however.
 | 
			
		||||
 *          This option is recommended also if the SPI driver does not
 | 
			
		||||
 *          use a DMA channel and heavily loads the CPU.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
 | 
			
		||||
#define MMC_NICE_WAITING            TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SDC driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Number of initialization attempts before rejecting the card.
 | 
			
		||||
 * @note    Attempts are performed at 10mS intervals.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_INIT_RETRY              100
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Include support for MMC cards.
 | 
			
		||||
 * @note    MMC support is not yet implemented so this option must be kept
 | 
			
		||||
 *          at @p FALSE.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_MMC_SUPPORT             FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Delays insertions.
 | 
			
		||||
 * @details If enabled this options inserts delays into the MMC waiting
 | 
			
		||||
 *          routines releasing some extra CPU time for the threads with
 | 
			
		||||
 *          lower priority, this may slow down the driver a bit however.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
 | 
			
		||||
#define SDC_NICE_WAITING            TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SERIAL driver related settings.                                           */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Default bit rate.
 | 
			
		||||
 * @details Configuration parameter, this is the baud rate selected for the
 | 
			
		||||
 *          default configuration.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_DEFAULT_BITRATE      38400
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Serial buffers size.
 | 
			
		||||
 * @details Configuration parameter, you can change the depth of the queue
 | 
			
		||||
 *          buffers depending on the requirements of your application.
 | 
			
		||||
 * @note    The default is 16 bytes for both the transmission and receive
 | 
			
		||||
 *          buffers.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_BUFFERS_SIZE         16
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SERIAL_USB driver related setting.                                        */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Serial over USB buffers size.
 | 
			
		||||
 * @details Configuration parameter, the buffer size must be a multiple of
 | 
			
		||||
 *          the USB data endpoint maximum packet size.
 | 
			
		||||
 * @note    The default is 256 bytes for both the transmission and receive
 | 
			
		||||
 *          buffers.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_USB_BUFFERS_SIZE     1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Serial over USB number of buffers.
 | 
			
		||||
 * @note    The default is 2 buffers.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
 | 
			
		||||
#define SERIAL_USB_BUFFERS_NUMBER   2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* SPI driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define SPI_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define SPI_USE_MUTUAL_EXCLUSION    TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* UART driver related settings.                                             */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define UART_USE_WAIT               FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
 | 
			
		||||
#define UART_USE_MUTUAL_EXCLUSION   FALSE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
/* USB driver related settings.                                              */
 | 
			
		||||
/*===========================================================================*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief   Enables synchronous APIs.
 | 
			
		||||
 * @note    Disabling this option saves both code and data space.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
 | 
			
		||||
#define USB_USE_WAIT                TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* HALCONF_H */
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
							
								
								
									
										11
									
								
								keyboards/clueboard/66_hotswap/gen1/info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								keyboards/clueboard/66_hotswap/gen1/info.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
  "layouts": {
 | 
			
		||||
    "LAYOUT": {
 | 
			
		||||
      "layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "LAYOUT_66_ansi": {
 | 
			
		||||
      "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								keyboards/clueboard/66_hotswap/gen1/led.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								keyboards/clueboard/66_hotswap/gen1/led.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2017 skully <skullydazed@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "hal.h"
 | 
			
		||||
#include "backlight.h"
 | 
			
		||||
#include "led.h"
 | 
			
		||||
#include "printf.h"
 | 
			
		||||
							
								
								
									
										160
									
								
								keyboards/clueboard/66_hotswap/gen1/matrix.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								keyboards/clueboard/66_hotswap/gen1/matrix.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,160 @@
 | 
			
		|||
#include <stdint.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "hal.h"
 | 
			
		||||
#include "timer.h"
 | 
			
		||||
#include "wait.h"
 | 
			
		||||
#include "printf.h"
 | 
			
		||||
#include "backlight.h"
 | 
			
		||||
#include "matrix.h"
 | 
			
		||||
#include "action.h"
 | 
			
		||||
#include "keycode.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * #define MATRIX_ROW_PINS { PB11, PA6, PA3, PA2, PA1, PB5, PB6, PC15, PC14, PC13 }
 | 
			
		||||
 * #define MATRIX_COL_PINS { PB10, PB2, PB1, PB0, PA7, PB4, PB3, PB7 }
 | 
			
		||||
 */
 | 
			
		||||
/* matrix state(1:on, 0:off) */
 | 
			
		||||
static matrix_row_t matrix[MATRIX_ROWS];
 | 
			
		||||
static matrix_row_t matrix_debouncing[MATRIX_COLS];
 | 
			
		||||
static bool debouncing = false;
 | 
			
		||||
static uint16_t debouncing_time = 0;
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
void matrix_init_user(void) {}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
void matrix_scan_user(void) {}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
void matrix_init_kb(void) {
 | 
			
		||||
  matrix_init_user();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
void matrix_scan_kb(void) {
 | 
			
		||||
  matrix_scan_user();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_init(void) {
 | 
			
		||||
    printf("matrix init\n");
 | 
			
		||||
    //debug_matrix = true;
 | 
			
		||||
 | 
			
		||||
    // actual matrix setup
 | 
			
		||||
    palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 1,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 0,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOA, 7,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 4,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
    palSetPadMode(GPIOB, 7,  PAL_MODE_OUTPUT_PUSHPULL);
 | 
			
		||||
 | 
			
		||||
    palSetPadMode(GPIOB, 11, PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOA, 6,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOA, 3,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOA, 2, PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOA, 1, PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOB, 5, PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOB, 6, PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOC, 15,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOC, 14,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
    palSetPadMode(GPIOC, 13,  PAL_MODE_INPUT_PULLDOWN);
 | 
			
		||||
 | 
			
		||||
    memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
 | 
			
		||||
    memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
 | 
			
		||||
 | 
			
		||||
    matrix_init_quantum();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t matrix_scan(void) {
 | 
			
		||||
    // actual matrix
 | 
			
		||||
    for (int col = 0; col < MATRIX_COLS; col++) {
 | 
			
		||||
        matrix_row_t data = 0;
 | 
			
		||||
 | 
			
		||||
        // strobe col { PB10, PB2, PB1, PB0, PA7, PB4, PB3, PB7 }
 | 
			
		||||
        switch (col) {
 | 
			
		||||
            case 0: palSetPad(GPIOB, 10); break;
 | 
			
		||||
            case 1: palSetPad(GPIOB, 2); break;
 | 
			
		||||
            case 2: palSetPad(GPIOB, 1); break;
 | 
			
		||||
            case 3: palSetPad(GPIOB, 0); break;
 | 
			
		||||
            case 4: palSetPad(GPIOA, 7); break;
 | 
			
		||||
            case 5: palSetPad(GPIOB, 4); break;
 | 
			
		||||
            case 6: palSetPad(GPIOB, 3); break;
 | 
			
		||||
            case 7: palSetPad(GPIOB, 7); break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // need wait to settle pin state
 | 
			
		||||
        wait_us(20);
 | 
			
		||||
 | 
			
		||||
        // read row data { PB11, PA6, PA3, PA2, PA1, PB5, PB6, PC15, PC14, PC13 }
 | 
			
		||||
        data = (
 | 
			
		||||
            (palReadPad(GPIOB, 11) << 0 ) |
 | 
			
		||||
            (palReadPad(GPIOA, 6)  << 1 ) |
 | 
			
		||||
            (palReadPad(GPIOA, 3)  << 2 ) |
 | 
			
		||||
            (palReadPad(GPIOA, 2) << 3 ) |
 | 
			
		||||
            (palReadPad(GPIOA, 1) << 4 ) |
 | 
			
		||||
            (palReadPad(GPIOB, 5) << 5 ) |
 | 
			
		||||
            (palReadPad(GPIOB, 6) << 6 ) |
 | 
			
		||||
            (palReadPad(GPIOC, 15)  << 7 ) |
 | 
			
		||||
            (palReadPad(GPIOC, 14)  << 8 ) |
 | 
			
		||||
            (palReadPad(GPIOC, 13)  << 9 )
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // unstrobe  col { B11, B10, B2, B1, A7, B0 }
 | 
			
		||||
        switch (col) {
 | 
			
		||||
            case 0: palClearPad(GPIOB, 10); break;
 | 
			
		||||
            case 1: palClearPad(GPIOB, 2); break;
 | 
			
		||||
            case 2: palClearPad(GPIOB, 1); break;
 | 
			
		||||
            case 3: palClearPad(GPIOB, 0); break;
 | 
			
		||||
            case 4: palClearPad(GPIOA, 7); break;
 | 
			
		||||
            case 5: palClearPad(GPIOB, 4); break;
 | 
			
		||||
            case 6: palClearPad(GPIOB, 3); break;
 | 
			
		||||
            case 7: palClearPad(GPIOB, 7); break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (matrix_debouncing[col] != data) {
 | 
			
		||||
            matrix_debouncing[col] = data;
 | 
			
		||||
            debouncing = true;
 | 
			
		||||
            debouncing_time = timer_read();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
 | 
			
		||||
        for (int row = 0; row < MATRIX_ROWS; row++) {
 | 
			
		||||
            matrix[row] = 0;
 | 
			
		||||
            for (int col = 0; col < MATRIX_COLS; col++) {
 | 
			
		||||
                matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        debouncing = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    matrix_scan_quantum();
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool matrix_is_on(uint8_t row, uint8_t col) {
 | 
			
		||||
    return (matrix[row] & (1<<col));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
matrix_row_t matrix_get_row(uint16_t row) {
 | 
			
		||||
    return matrix[row];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_print(void) {
 | 
			
		||||
    printf("\nr/c 01234567\n");
 | 
			
		||||
    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
 | 
			
		||||
        printf("%X0: ", row);
 | 
			
		||||
        matrix_row_t data = matrix_get_row(row);
 | 
			
		||||
        for (int col = 0; col < MATRIX_COLS; col++) {
 | 
			
		||||
            if (data & (1<<col))
 | 
			
		||||
                printf("1");
 | 
			
		||||
            else
 | 
			
		||||
                printf("0");
 | 
			
		||||
        }
 | 
			
		||||
        printf("\n");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										257
									
								
								keyboards/clueboard/66_hotswap/gen1/mcuconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								keyboards/clueboard/66_hotswap/gen1/mcuconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,257 @@
 | 
			
		|||
/*
 | 
			
		||||
    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
 | 
			
		||||
 | 
			
		||||
    Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
    you may not use this file except in compliance with the License.
 | 
			
		||||
    You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
        http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
    distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
    See the License for the specific language governing permissions and
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef MCUCONF_H
 | 
			
		||||
#define MCUCONF_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * STM32F3xx drivers configuration.
 | 
			
		||||
 * The following settings override the default settings present in
 | 
			
		||||
 * the various device driver implementation headers.
 | 
			
		||||
 * Note that the settings for each driver only have effect if the whole
 | 
			
		||||
 * driver is enabled in halconf.h.
 | 
			
		||||
 *
 | 
			
		||||
 * IRQ priorities:
 | 
			
		||||
 * 15...0       Lowest...Highest.
 | 
			
		||||
 *
 | 
			
		||||
 * DMA priorities:
 | 
			
		||||
 * 0...3        Lowest...Highest.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define STM32F3xx_MCUCONF
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * HAL driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_NO_INIT                       FALSE
 | 
			
		||||
#define STM32_PVD_ENABLE                    FALSE
 | 
			
		||||
#define STM32_PLS                           STM32_PLS_LEV0
 | 
			
		||||
#define STM32_HSI_ENABLED                   TRUE
 | 
			
		||||
#define STM32_LSI_ENABLED                   TRUE
 | 
			
		||||
#define STM32_HSE_ENABLED                   TRUE
 | 
			
		||||
#define STM32_LSE_ENABLED                   FALSE
 | 
			
		||||
#define STM32_SW                            STM32_SW_PLL
 | 
			
		||||
#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 | 
			
		||||
#define STM32_PREDIV_VALUE                  1
 | 
			
		||||
#define STM32_PLLMUL_VALUE                  9
 | 
			
		||||
#define STM32_HPRE                          STM32_HPRE_DIV1
 | 
			
		||||
#define STM32_PPRE1                         STM32_PPRE1_DIV2
 | 
			
		||||
#define STM32_PPRE2                         STM32_PPRE2_DIV2
 | 
			
		||||
#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
 | 
			
		||||
#define STM32_ADC12PRES                     STM32_ADC12PRES_DIV1
 | 
			
		||||
#define STM32_ADC34PRES                     STM32_ADC34PRES_DIV1
 | 
			
		||||
#define STM32_USART1SW                      STM32_USART1SW_PCLK
 | 
			
		||||
#define STM32_USART2SW                      STM32_USART2SW_PCLK
 | 
			
		||||
#define STM32_USART3SW                      STM32_USART3SW_PCLK
 | 
			
		||||
#define STM32_UART4SW                       STM32_UART4SW_PCLK
 | 
			
		||||
#define STM32_UART5SW                       STM32_UART5SW_PCLK
 | 
			
		||||
#define STM32_I2C1SW                        STM32_I2C1SW_SYSCLK
 | 
			
		||||
#define STM32_I2C2SW                        STM32_I2C2SW_SYSCLK
 | 
			
		||||
#define STM32_TIM1SW                        STM32_TIM1SW_PCLK2
 | 
			
		||||
#define STM32_TIM8SW                        STM32_TIM8SW_PCLK2
 | 
			
		||||
#define STM32_RTCSEL                        STM32_RTCSEL_LSI
 | 
			
		||||
#define STM32_USB_CLOCK_REQUIRED            TRUE
 | 
			
		||||
#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
 | 
			
		||||
 | 
			
		||||
#undef STM32_HSE_BYPASS
 | 
			
		||||
// #error "oh no"
 | 
			
		||||
// #endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ADC driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_ADC_DUAL_MODE                 FALSE
 | 
			
		||||
#define STM32_ADC_COMPACT_SAMPLES           FALSE
 | 
			
		||||
#define STM32_ADC_USE_ADC1                  FALSE
 | 
			
		||||
#define STM32_ADC_USE_ADC2                  FALSE
 | 
			
		||||
#define STM32_ADC_USE_ADC3                  FALSE
 | 
			
		||||
#define STM32_ADC_USE_ADC4                  FALSE
 | 
			
		||||
#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(1, 1)
 | 
			
		||||
#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
 | 
			
		||||
#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 5)
 | 
			
		||||
#define STM32_ADC_ADC4_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
 | 
			
		||||
#define STM32_ADC_ADC1_DMA_PRIORITY         2
 | 
			
		||||
#define STM32_ADC_ADC2_DMA_PRIORITY         2
 | 
			
		||||
#define STM32_ADC_ADC3_DMA_PRIORITY         2
 | 
			
		||||
#define STM32_ADC_ADC4_DMA_PRIORITY         2
 | 
			
		||||
#define STM32_ADC_ADC12_IRQ_PRIORITY        5
 | 
			
		||||
#define STM32_ADC_ADC3_IRQ_PRIORITY         5
 | 
			
		||||
#define STM32_ADC_ADC4_IRQ_PRIORITY         5
 | 
			
		||||
#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     5
 | 
			
		||||
#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     5
 | 
			
		||||
#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     5
 | 
			
		||||
#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY     5
 | 
			
		||||
#define STM32_ADC_ADC12_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
 | 
			
		||||
#define STM32_ADC_ADC34_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * CAN driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_CAN_USE_CAN1                  FALSE
 | 
			
		||||
#define STM32_CAN_CAN1_IRQ_PRIORITY         11
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DAC driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_DAC_DUAL_MODE                 FALSE
 | 
			
		||||
#define STM32_DAC_USE_DAC1_CH1              TRUE
 | 
			
		||||
#define STM32_DAC_USE_DAC1_CH2              TRUE
 | 
			
		||||
#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY     10
 | 
			
		||||
#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY     10
 | 
			
		||||
#define STM32_DAC_DAC1_CH1_DMA_PRIORITY     2
 | 
			
		||||
#define STM32_DAC_DAC1_CH2_DMA_PRIORITY     2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * EXT driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
 | 
			
		||||
#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
 | 
			
		||||
#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
 | 
			
		||||
#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
 | 
			
		||||
#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
 | 
			
		||||
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
 | 
			
		||||
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
 | 
			
		||||
#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
 | 
			
		||||
#define STM32_EXT_EXTI17_IRQ_PRIORITY       6
 | 
			
		||||
#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
 | 
			
		||||
#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
 | 
			
		||||
#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
 | 
			
		||||
#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
 | 
			
		||||
#define STM32_EXT_EXTI30_32_IRQ_PRIORITY    6
 | 
			
		||||
#define STM32_EXT_EXTI33_IRQ_PRIORITY       6
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * GPT driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_GPT_USE_TIM1                  FALSE
 | 
			
		||||
#define STM32_GPT_USE_TIM2                  FALSE
 | 
			
		||||
#define STM32_GPT_USE_TIM3                  FALSE
 | 
			
		||||
#define STM32_GPT_USE_TIM4                  FALSE
 | 
			
		||||
#define STM32_GPT_USE_TIM6                  TRUE
 | 
			
		||||
#define STM32_GPT_USE_TIM7                  TRUE
 | 
			
		||||
#define STM32_GPT_USE_TIM8                  TRUE
 | 
			
		||||
#define STM32_GPT_TIM1_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM2_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM3_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM4_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM6_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM7_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_GPT_TIM8_IRQ_PRIORITY         7
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * I2C driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_I2C_USE_I2C1                  TRUE
 | 
			
		||||
#define STM32_I2C_USE_I2C2                  FALSE
 | 
			
		||||
#define STM32_I2C_BUSY_TIMEOUT              50
 | 
			
		||||
#define STM32_I2C_I2C1_IRQ_PRIORITY         10
 | 
			
		||||
#define STM32_I2C_I2C2_IRQ_PRIORITY         10
 | 
			
		||||
#define STM32_I2C_USE_DMA                   TRUE
 | 
			
		||||
#define STM32_I2C_I2C1_DMA_PRIORITY         1
 | 
			
		||||
#define STM32_I2C_I2C2_DMA_PRIORITY         1
 | 
			
		||||
#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ICU driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_ICU_USE_TIM1                  FALSE
 | 
			
		||||
#define STM32_ICU_USE_TIM2                  FALSE
 | 
			
		||||
#define STM32_ICU_USE_TIM3                  FALSE
 | 
			
		||||
#define STM32_ICU_USE_TIM4                  FALSE
 | 
			
		||||
#define STM32_ICU_USE_TIM8                  FALSE
 | 
			
		||||
#define STM32_ICU_TIM1_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_ICU_TIM2_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_ICU_TIM3_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_ICU_TIM4_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_ICU_TIM8_IRQ_PRIORITY         7
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * PWM driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_PWM_USE_ADVANCED              FALSE
 | 
			
		||||
#define STM32_PWM_USE_TIM1                  FALSE
 | 
			
		||||
#define STM32_PWM_USE_TIM2                  FALSE
 | 
			
		||||
#define STM32_PWM_USE_TIM3                  FALSE
 | 
			
		||||
#define STM32_PWM_USE_TIM4                  FALSE
 | 
			
		||||
#define STM32_PWM_USE_TIM8                  FALSE
 | 
			
		||||
#define STM32_PWM_TIM1_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_PWM_TIM2_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_PWM_TIM3_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_PWM_TIM4_IRQ_PRIORITY         7
 | 
			
		||||
#define STM32_PWM_TIM8_IRQ_PRIORITY         7
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SERIAL driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_SERIAL_USE_USART1             FALSE
 | 
			
		||||
#define STM32_SERIAL_USE_USART2             FALSE
 | 
			
		||||
#define STM32_SERIAL_USE_USART3             FALSE
 | 
			
		||||
#define STM32_SERIAL_USE_UART4              FALSE
 | 
			
		||||
#define STM32_SERIAL_USE_UART5              FALSE
 | 
			
		||||
#define STM32_SERIAL_USART1_PRIORITY        12
 | 
			
		||||
#define STM32_SERIAL_USART2_PRIORITY        12
 | 
			
		||||
#define STM32_SERIAL_USART3_PRIORITY        12
 | 
			
		||||
#define STM32_SERIAL_UART4_PRIORITY         12
 | 
			
		||||
#define STM32_SERIAL_UART5_PRIORITY         12
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * SPI driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_SPI_USE_SPI1                  FALSE
 | 
			
		||||
#define STM32_SPI_USE_SPI2                  FALSE
 | 
			
		||||
#define STM32_SPI_USE_SPI3                  FALSE
 | 
			
		||||
#define STM32_SPI_SPI1_DMA_PRIORITY         1
 | 
			
		||||
#define STM32_SPI_SPI2_DMA_PRIORITY         1
 | 
			
		||||
#define STM32_SPI_SPI3_DMA_PRIORITY         1
 | 
			
		||||
#define STM32_SPI_SPI1_IRQ_PRIORITY         10
 | 
			
		||||
#define STM32_SPI_SPI2_IRQ_PRIORITY         10
 | 
			
		||||
#define STM32_SPI_SPI3_IRQ_PRIORITY         10
 | 
			
		||||
#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ST driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_ST_IRQ_PRIORITY               8
 | 
			
		||||
#define STM32_ST_USE_TIMER                  2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * UART driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_UART_USE_USART1               FALSE
 | 
			
		||||
#define STM32_UART_USE_USART2               FALSE
 | 
			
		||||
#define STM32_UART_USE_USART3               FALSE
 | 
			
		||||
#define STM32_UART_USART1_IRQ_PRIORITY      12
 | 
			
		||||
#define STM32_UART_USART2_IRQ_PRIORITY      12
 | 
			
		||||
#define STM32_UART_USART3_IRQ_PRIORITY      12
 | 
			
		||||
#define STM32_UART_USART1_DMA_PRIORITY      0
 | 
			
		||||
#define STM32_UART_USART2_DMA_PRIORITY      0
 | 
			
		||||
#define STM32_UART_USART3_DMA_PRIORITY      0
 | 
			
		||||
#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * USB driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_USB_USE_USB1                  TRUE
 | 
			
		||||
#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE
 | 
			
		||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY      13
 | 
			
		||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * WDG driver system settings.
 | 
			
		||||
 */
 | 
			
		||||
#define STM32_WDG_USE_IWDG                  FALSE
 | 
			
		||||
 | 
			
		||||
#endif /* MCUCONF_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +1,58 @@
 | 
			
		|||
EXTRAFLAGS += -flto
 | 
			
		||||
LAYOUTS = 66_ansi
 | 
			
		||||
MCU = atmega32u4
 | 
			
		||||
F_CPU = 16000000
 | 
			
		||||
ARCH = AVR8
 | 
			
		||||
F_USB = $(F_CPU)
 | 
			
		||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
			
		||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
			
		||||
# project specific files
 | 
			
		||||
SRC =	led.c
 | 
			
		||||
LAYOUTS += 66_ansi
 | 
			
		||||
 | 
			
		||||
## chip/board settings
 | 
			
		||||
# - the next two should match the directories in
 | 
			
		||||
#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
 | 
			
		||||
MCU_FAMILY = STM32
 | 
			
		||||
MCU_SERIES = STM32F3xx
 | 
			
		||||
 | 
			
		||||
# Linker script to use
 | 
			
		||||
# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
 | 
			
		||||
#   or <this_dir>/ld/
 | 
			
		||||
MCU_LDSCRIPT = STM32F303xC
 | 
			
		||||
 | 
			
		||||
# Startup code to use
 | 
			
		||||
#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
 | 
			
		||||
MCU_STARTUP = stm32f3xx
 | 
			
		||||
 | 
			
		||||
# Board: it should exist either in <chibios>/os/hal/boards/
 | 
			
		||||
#  or <this_dir>/boards
 | 
			
		||||
BOARD = GENERIC_STM32_F303XC
 | 
			
		||||
 | 
			
		||||
# Cortex version
 | 
			
		||||
MCU  = cortex-m4
 | 
			
		||||
 | 
			
		||||
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
 | 
			
		||||
ARMV = 7
 | 
			
		||||
 | 
			
		||||
USE_FPU = yes
 | 
			
		||||
 | 
			
		||||
# Vector table for application
 | 
			
		||||
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
 | 
			
		||||
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
 | 
			
		||||
# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
 | 
			
		||||
OPT_DEFS =
 | 
			
		||||
 | 
			
		||||
# Options to pass to dfu-util when flashing
 | 
			
		||||
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
 | 
			
		||||
 | 
			
		||||
# LED Configuration
 | 
			
		||||
LED_MATRIX_ENABLE = IS31FL3731
 | 
			
		||||
 | 
			
		||||
# Build Options
 | 
			
		||||
#   comment out to disable the options.
 | 
			
		||||
#
 | 
			
		||||
BACKLIGHT_ENABLE = yes
 | 
			
		||||
BOOTMAGIC_ENABLE = no
 | 
			
		||||
MOUSEKEY_ENABLE = no
 | 
			
		||||
EXTRAKEY_ENABLE = yes
 | 
			
		||||
CONSOLE_ENABLE = yes
 | 
			
		||||
COMMAND_ENABLE = no
 | 
			
		||||
NKRO_ENABLE = yes
 | 
			
		||||
BOOTMAGIC_ENABLE = yes	# Virtual DIP switch configuration
 | 
			
		||||
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
 | 
			
		||||
MOUSEKEY_ENABLE = yes	# Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes	# Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = yes	# Console for debug
 | 
			
		||||
COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
			
		||||
#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
			
		||||
NKRO_ENABLE = yes	    # USB Nkey Rollover
 | 
			
		||||
#CUSTOM_MATRIX = yes # Custom matrix file
 | 
			
		||||
AUDIO_ENABLE = yes
 | 
			
		||||
RGBLIGHT_ENABLE = yes
 | 
			
		||||
MIDI_ENABLE = no
 | 
			
		||||
UNICODE_ENABLE = no
 | 
			
		||||
BLUETOOTH_ENABLE = no
 | 
			
		||||
# SERIAL_LINK_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,30 @@
 | 
			
		|||
#define _FL 1
 | 
			
		||||
#define _CL 2
 | 
			
		||||
 | 
			
		||||
enum custom_keycodes {
 | 
			
		||||
    S_BSKTC = SAFE_RANGE,
 | 
			
		||||
    S_ODEJY,
 | 
			
		||||
    S_RCKBY,
 | 
			
		||||
    S_DOEDR,
 | 
			
		||||
    S_SCALE,
 | 
			
		||||
    S_ONEUP,
 | 
			
		||||
    S_COIN,
 | 
			
		||||
    S_SONIC,
 | 
			
		||||
    S_ZELDA
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
  float song_basketcase[][2] = SONG(BASKET_CASE);
 | 
			
		||||
  float song_ode_to_joy[][2]  = SONG(ODE_TO_JOY);
 | 
			
		||||
  float song_rock_a_bye_baby[][2]  = SONG(ROCK_A_BYE_BABY);
 | 
			
		||||
  float song_doe_a_deer[][2]  = SONG(DOE_A_DEER);
 | 
			
		||||
  float song_scale[][2]  = SONG(MUSIC_SCALE_SOUND);
 | 
			
		||||
  float song_coin[][2]  = SONG(COIN_SOUND);
 | 
			
		||||
  float song_one_up[][2]  = SONG(ONE_UP_SOUND);
 | 
			
		||||
  float song_sonic_ring[][2]  = SONG(SONIC_RING);
 | 
			
		||||
  float song_zelda_puzzle[][2]  = SONG(ZELDA_PUZZLE);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
  /* Keymap _BL: Base Layer (Default Layer)
 | 
			
		||||
   */
 | 
			
		||||
| 
						 | 
				
			
			@ -28,9 +52,72 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  /* Keymap _CL: Control layer
 | 
			
		||||
   */
 | 
			
		||||
[_CL] = LAYOUT(
 | 
			
		||||
  BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,   RGB_TOG,           RGB_VAI, \
 | 
			
		||||
  _______,_______,_______,_______,RESET,  _______,_______,_______,_______,_______,_______,_______,_______,_______,                RGB_VAD, \
 | 
			
		||||
  BL_STEP,S_ONEUP,S_SCALE,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,   BL_TOGG,           BL_INC, \
 | 
			
		||||
  _______,_______,_______,_______,RESET,  _______,_______,_______,_______,_______,_______,_______,_______,_______,                BL_DEC, \
 | 
			
		||||
  _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,    _______,                             \
 | 
			
		||||
  _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,        RGB_SAI,         \
 | 
			
		||||
  _______,_______,_______,                RGB_MOD,RGB_MOD,                        _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
 | 
			
		||||
  _______,_______,_______,                BL_BRTG,BL_BRTG,                        _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        #ifdef AUDIO_ENABLE
 | 
			
		||||
            case S_BSKTC:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_basketcase);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_ODEJY:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_ode_to_joy);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_RCKBY:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_rock_a_bye_baby);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_DOEDR:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_doe_a_deer);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_SCALE:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_scale);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_ONEUP:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_one_up);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_COIN:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_coin);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_SONIC:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_sonic_ring);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
            case S_ZELDA:
 | 
			
		||||
                if (record->event.pressed) {
 | 
			
		||||
                    stop_all_notes();
 | 
			
		||||
                    PLAY_SONG(song_zelda_puzzle);
 | 
			
		||||
                }
 | 
			
		||||
                return false;
 | 
			
		||||
        #endif
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										55
									
								
								keyboards/clueboard/66_hotswap/prototype/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								keyboards/clueboard/66_hotswap/prototype/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
#include "config_common.h"
 | 
			
		||||
 | 
			
		||||
#define PRODUCT_ID      0x2390
 | 
			
		||||
#define DEVICE_VER      0x0001
 | 
			
		||||
 | 
			
		||||
/* key matrix size */
 | 
			
		||||
#define MATRIX_ROWS 10
 | 
			
		||||
#define MATRIX_COLS 8
 | 
			
		||||
 | 
			
		||||
// ROWS: Top to bottom, COLS: Left to right
 | 
			
		||||
/* Row pin configuration
 | 
			
		||||
* row: 0  1  2  3  4  5  6  7  8  9
 | 
			
		||||
* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
 | 
			
		||||
/* Column pin configuration
 | 
			
		||||
 * col: 0  1  2  3  4  5  6  7
 | 
			
		||||
 * pin: F0 F1 F4 F5 F6 F7 E6 B1
 | 
			
		||||
 */
 | 
			
		||||
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
/* Speaker configuration
 | 
			
		||||
 */
 | 
			
		||||
#define B7_AUDIO
 | 
			
		||||
#define NO_MUSIC_MODE
 | 
			
		||||
#define AUDIO_CLICKY
 | 
			
		||||
 | 
			
		||||
/* Space savings
 | 
			
		||||
 */
 | 
			
		||||
#define NO_ACTION_TAPPING
 | 
			
		||||
 | 
			
		||||
/* Backlight configuration
 | 
			
		||||
 */
 | 
			
		||||
#define BACKLIGHT_LEVELS 1
 | 
			
		||||
 | 
			
		||||
/* Underlight configuration
 | 
			
		||||
 */
 | 
			
		||||
#define RGB_DI_PIN D7
 | 
			
		||||
#define RGBLED_NUM 26     // Number of LEDs
 | 
			
		||||
#define RGBLIGHT_HUE_STEP 32
 | 
			
		||||
#define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_ANIMATIONS
 | 
			
		||||
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
 | 
			
		||||
#define RGBLIGHT_EFFECT_BREATHE_MAX 200
 | 
			
		||||
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
 | 
			
		||||
#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 4   // How many LEDs wide to light up
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 16   // The led to start at
 | 
			
		||||
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 8  // How many LEDs to travel
 | 
			
		||||
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4    // How many LEDs wide to light up
 | 
			
		||||
							
								
								
									
										63
									
								
								keyboards/clueboard/66_hotswap/prototype/prototype.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								keyboards/clueboard/66_hotswap/prototype/prototype.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,63 @@
 | 
			
		|||
#include "prototype.h"
 | 
			
		||||
#include <avr/io.h>
 | 
			
		||||
#include "backlight.h"
 | 
			
		||||
#include "print.h"
 | 
			
		||||
 | 
			
		||||
void matrix_init_kb(void) {
 | 
			
		||||
	// put your keyboard start-up code here
 | 
			
		||||
	// runs once when the firmware starts up
 | 
			
		||||
	matrix_init_user();
 | 
			
		||||
	led_init_ports();
 | 
			
		||||
 | 
			
		||||
    // JTAG disable for PORT F. write JTD bit twice within four cycles.
 | 
			
		||||
    MCUCR |= (1<<JTD);
 | 
			
		||||
    MCUCR |= (1<<JTD);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void matrix_scan_kb(void) {
 | 
			
		||||
    matrix_scan_user();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void backlight_init_ports(void) {
 | 
			
		||||
    print("init_backlight_pin()\n");
 | 
			
		||||
    // Set our LED pins as output
 | 
			
		||||
    DDRD |= (1<<0); // Esc
 | 
			
		||||
    DDRD |= (1<<4); // Page Up
 | 
			
		||||
    DDRD |= (1<<1); // Arrows
 | 
			
		||||
 | 
			
		||||
    // Set our LED pins low
 | 
			
		||||
    PORTD &= ~(1<<0); // Esc
 | 
			
		||||
    PORTD &= ~(1<<4); // Page Up
 | 
			
		||||
    PORTD &= ~(1<<1); // Arrows
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void backlight_set(uint8_t level) {
 | 
			
		||||
    if ( level == 0 ) {
 | 
			
		||||
        // Turn off light
 | 
			
		||||
        PORTD |= (1<<0); // Esc
 | 
			
		||||
        PORTD |= (1<<4); // Page Up
 | 
			
		||||
        PORTD |= (1<<1); // Arrows
 | 
			
		||||
    } else {
 | 
			
		||||
        // Turn on light
 | 
			
		||||
        PORTD &= ~(1<<0); // Esc
 | 
			
		||||
        PORTD &= ~(1<<4); // Page Up
 | 
			
		||||
        PORTD &= ~(1<<1); // Arrows
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_init_ports() {
 | 
			
		||||
    // * Set our LED pins as output
 | 
			
		||||
    DDRB |= (1<<4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void led_set_kb(uint8_t usb_led) {
 | 
			
		||||
    DDRB |= (1<<4);
 | 
			
		||||
    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
 | 
			
		||||
        // Turn capslock on
 | 
			
		||||
        PORTB |= (1<<4);
 | 
			
		||||
    } else {
 | 
			
		||||
        // Turn capslock off
 | 
			
		||||
        PORTB &= ~(1<<4);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										86
									
								
								keyboards/clueboard/66_hotswap/prototype/prototype.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								keyboards/clueboard/66_hotswap/prototype/prototype.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
/* Clueboard matrix layout
 | 
			
		||||
 * ,-----------------------------------------------------------.  ,---.
 | 
			
		||||
 * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54|   56  |  | 57|
 | 
			
		||||
 * |-----------------------------------------------------------|  |---|
 | 
			
		||||
 * |   10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64|   65|  | 67|
 | 
			
		||||
 * |-----------------------------------------------------------|  `---'
 | 
			
		||||
 * |    20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74|  75|
 | 
			
		||||
 * |------------------------------------------------------------.
 | 
			
		||||
 * |  30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84|  85|86|
 | 
			
		||||
 * |------------------------------------------------------------------.
 | 
			
		||||
 * |  40| 41|  42|  43|   45|       46|   90|  92|  93| 94| 95| 96| 97|
 | 
			
		||||
 * `------------------------------------------------------------------'
 | 
			
		||||
 * ,-----------------------------------------------------------.  ,---.
 | 
			
		||||
 * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |  |Ins|
 | 
			
		||||
 * |-----------------------------------------------------------|  |---|
 | 
			
		||||
 * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|  |Del|
 | 
			
		||||
 * |-----------------------------------------------------------|  `---'
 | 
			
		||||
 * |Caps  |  A|  S|  D|  F|  G|  H|  J|  k|  L|  ;|  '|Enter   |
 | 
			
		||||
 * |--------------------------------------------------------------.
 | 
			
		||||
 * |Shift| \|  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|  \|Shift| Up|
 | 
			
		||||
 * |------------------------------------------------------------------.
 | 
			
		||||
 * |Ctrl|Alt|Gui |     Space|  Space|Gui |Alt |Fn  |Ctrl|Left|Down|Rgt|
 | 
			
		||||
 * `------------------------------------------------------------------'
 | 
			
		||||
 */
 | 
			
		||||
// The first section contains all of the arguments
 | 
			
		||||
// The second converts the arguments into a two-dimensional array
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_all( \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k56,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65,      k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,    k75, \
 | 
			
		||||
    k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
 | 
			
		||||
    k40, k41, k42,           k45, k46,      k90,      k92, k93, k94, k95, k96, k97 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, k31, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
 | 
			
		||||
    { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
 | 
			
		||||
    { k90, KC_NO, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT( \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k56,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65,      k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,    k75, \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,      k85, k86, \
 | 
			
		||||
    k40, k41, k42,           k45, k46,      k90,      k92, k93, k94, k95, k96, k97 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
 | 
			
		||||
    { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
 | 
			
		||||
    { k90, KC_NO, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LAYOUT_66_ansi( \
 | 
			
		||||
    k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54,    k56,   k57, \
 | 
			
		||||
    k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65,      k67, \
 | 
			
		||||
    k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73,    k75, \
 | 
			
		||||
    k30,      k32, k33, k34, k35, k36, k37, k80, k81, k82, k83,    k85,   k86, \
 | 
			
		||||
    k40, k41, k42,                k46,                k92, k93, k94, k95, k96, k97 \
 | 
			
		||||
) { \
 | 
			
		||||
    { k00, k01, k02, k03, k04, k05, k06, k07 }, \
 | 
			
		||||
    { k10, k11, k12, k13, k14, k15, k16, k17 }, \
 | 
			
		||||
    { k20, k21, k22, k23, k24, k25, k26, k27 }, \
 | 
			
		||||
    { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
 | 
			
		||||
    { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
 | 
			
		||||
    { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
 | 
			
		||||
    { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
 | 
			
		||||
    { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
 | 
			
		||||
    { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
 | 
			
		||||
    { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 }  \
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								keyboards/clueboard/66_hotswap/prototype/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								keyboards/clueboard/66_hotswap/prototype/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
EXTRAFLAGS += -flto
 | 
			
		||||
LAYOUTS = 66_ansi
 | 
			
		||||
MCU = atmega32u4
 | 
			
		||||
F_CPU = 16000000
 | 
			
		||||
ARCH = AVR8
 | 
			
		||||
F_USB = $(F_CPU)
 | 
			
		||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
			
		||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
			
		||||
 | 
			
		||||
# Build Options
 | 
			
		||||
#   comment out to disable the options.
 | 
			
		||||
#
 | 
			
		||||
BACKLIGHT_ENABLE = yes
 | 
			
		||||
BOOTMAGIC_ENABLE = no
 | 
			
		||||
MOUSEKEY_ENABLE = no
 | 
			
		||||
EXTRAKEY_ENABLE = yes
 | 
			
		||||
CONSOLE_ENABLE = yes
 | 
			
		||||
COMMAND_ENABLE = no
 | 
			
		||||
NKRO_ENABLE = yes
 | 
			
		||||
AUDIO_ENABLE = yes
 | 
			
		||||
RGBLIGHT_ENABLE = yes
 | 
			
		||||
MIDI_ENABLE = no
 | 
			
		||||
UNICODE_ENABLE = no
 | 
			
		||||
BLUETOOTH_ENABLE = no
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue