2
0
Jack Humbert 8 лет назад
Родитель
Сommit
5cc7df8750
2 измененных файлов с 144 добавлено и 100 удалено
  1. 89 89
      keyboards/deltasplit75/v2/config.h
  2. 55 11
      quantum/audio/audio.c

+ 89 - 89
keyboards/deltasplit75/v2/config.h

@@ -1,90 +1,90 @@
-/*
-Copyright 2012 Jun Wako <wakojun@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/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x3060
-#define DEVICE_VER      0x0001
-#define MANUFACTURER    xyxjj
-#define PRODUCT         DeltaSplit75
-#define DESCRIPTION     75% split keyboard
-
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 14
-#define MATRIX_COLS 8
-
-// wiring of each half
-#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2 }
-#define MATRIX_COL_PINS { B6, B5, B4, E6, D7, C6, D4, D1}
-
-#define CATERINA_BOOTLOADER
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-// #define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* 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
-
-/* key combination for command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 12    // Number of LEDs
-#define ws2812_PORTREG  PORTD
-#define ws2812_DDRREG   DDRD
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* 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
-
-
+/*
+Copyright 2012 Jun Wako <wakojun@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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    xyxjj
+#define PRODUCT         DeltaSplit75
+#define DESCRIPTION     75% split keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 8
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { B6, B5, B4, E6, D7, C6, D4, D1}
+
+#define CATERINA_BOOTLOADER
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 12    // Number of LEDs
+#define ws2812_PORTREG  PORTD
+#define ws2812_DDRREG   DDRD
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* 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
+
+
 #endif

+ 55 - 11
quantum/audio/audio.c

@@ -44,6 +44,16 @@
     #define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1A)
 #endif
 
+#ifdef B6_AUDIO
+    #define ENABLE_AUDIO_COUNTER_1_ISR TIMSK1 |= _BV(OCIE1B)
+    #define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1B)
+#endif
+
+#ifdef B7_AUDIO
+    #define ENABLE_AUDIO_COUNTER_1_ISR TIMSK1 |= _BV(OCIE1C)
+    #define DISABLE_AUDIO_COUNTER_1_ISR TIMSK1 &= ~_BV(OCIE1C)
+#endif
+
 // TCCR3A: Timer/Counter #3 Control Register
 // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6
 
@@ -57,6 +67,16 @@
     #define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1A1) | _BV(COM1A0));
 #endif
 
+#ifdef B6_AUDIO
+    #define ENABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A |= _BV(COM1B1);
+    #define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1B1) | _BV(COM1B0));
+#endif
+
+#ifdef B7_AUDIO
+    #define ENABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A |= _BV(COM1C1);
+    #define DISABLE_AUDIO_COUNTER_1_OUTPUT TCCR1A &= ~(_BV(COM1C1) | _BV(COM1C0));
+#endif
+
 // Fast PWM Mode Controls
 
 #ifdef C6_AUDIO
@@ -69,6 +89,16 @@
     #define TIMER_1_DUTY_CYCLE OCR1A
 #endif
 
+#ifdef B6_AUDIO
+    #define TIMER_1_PERIOD     ICR1
+    #define TIMER_1_DUTY_CYCLE OCR1B
+#endif
+
+#ifdef B7_AUDIO
+    #define TIMER_1_PERIOD     ICR1
+    #define TIMER_1_DUTY_CYCLE OCR1C
+#endif
+
 
 // -----------------------------------------------------------------------------
 
@@ -153,11 +183,25 @@ void audio_init()
         PORTB &= ~_BV(PORTB5);
     #endif
 
+    #ifdef B6_AUDIO
+        DDRB |= _BV(PORTB6);
+    #else
+        DDRB |= _BV(PORTB6);
+        PORTB &= ~_BV(PORTB6);
+    #endif
+
+    #ifdef B7_AUDIO
+        DDRB |= _BV(PORTB7);
+    #else
+        DDRB |= _BV(PORTB7);
+        PORTB &= ~_BV(PORTB7);
+    #endif
+
     #ifdef C6_AUDIO
         DISABLE_AUDIO_COUNTER_3_ISR;
     #endif
     
-    #ifdef B5_AUDIO
+    #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
         DISABLE_AUDIO_COUNTER_1_ISR;
     #endif
 
@@ -171,7 +215,7 @@ void audio_init()
         TCCR3B = (1 << WGM33)  | (1 << WGM32)  | (0 << CS32)  | (1 << CS31) | (0 << CS30);
     #endif
 
-    #ifdef B5_AUDIO
+    #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
         TCCR1A = (0 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (0 << WGM10);
         TCCR1B = (1 << WGM13)  | (1 << WGM12)  | (0 << CS12)  | (1 << CS11) | (0 << CS10);
     #endif
@@ -199,7 +243,7 @@ void stop_all_notes()
         DISABLE_AUDIO_COUNTER_3_OUTPUT;
     #endif
 
-    #ifdef B5_AUDIO
+    #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
         DISABLE_AUDIO_COUNTER_1_ISR;
         DISABLE_AUDIO_COUNTER_1_OUTPUT;
     #endif
@@ -249,7 +293,7 @@ void stop_note(float freq)
                 DISABLE_AUDIO_COUNTER_3_ISR;
                 DISABLE_AUDIO_COUNTER_3_OUTPUT;
             #endif
-            #ifdef B5_AUDIO
+            #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
                 DISABLE_AUDIO_COUNTER_1_ISR;
                 DISABLE_AUDIO_COUNTER_1_OUTPUT;
             #endif
@@ -289,7 +333,7 @@ ISR(TIMER3_COMPA_vect)
     if (playing_note) {
         if (voices > 0) {
 
-            #ifdef B5_AUDIO
+            #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
             float freq_alt = 0;
                 if (voices > 1) {
                     if (polyphony_rate == 0) {
@@ -463,10 +507,10 @@ ISR(TIMER3_COMPA_vect)
 }
 #endif
 
-#ifdef B5_AUDIO
+#if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
 ISR(TIMER1_COMPA_vect)
 {
-    #if defined(B5_AUDIO) && !defined(C6_AUDIO)
+    #if (defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)) && !defined(C6_AUDIO)
     float freq = 0;
 
     if (playing_note) {
@@ -616,7 +660,7 @@ void play_note(float freq, int vol) {
         #ifdef C6_AUDIO
             DISABLE_AUDIO_COUNTER_3_ISR;
         #endif
-        #ifdef B5_AUDIO
+        #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
             DISABLE_AUDIO_COUNTER_1_ISR;
         #endif
 
@@ -638,7 +682,7 @@ void play_note(float freq, int vol) {
             ENABLE_AUDIO_COUNTER_3_ISR;
             ENABLE_AUDIO_COUNTER_3_OUTPUT;
         #endif
-        #ifdef B5_AUDIO
+        #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
             #ifdef C6_AUDIO
             if (voices > 1) {
                 ENABLE_AUDIO_COUNTER_1_ISR;
@@ -665,7 +709,7 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat)
         #ifdef C6_AUDIO
             DISABLE_AUDIO_COUNTER_3_ISR;
         #endif
-        #ifdef B5_AUDIO
+        #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
             DISABLE_AUDIO_COUNTER_1_ISR;
         #endif
 
@@ -691,7 +735,7 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat)
             ENABLE_AUDIO_COUNTER_3_ISR;
             ENABLE_AUDIO_COUNTER_3_OUTPUT;
         #endif
-        #ifdef B5_AUDIO
+        #if defined(B5_AUDIO) || defined(B6_AUDIO) || defined(B7_AUDIO)
             #ifndef C6_AUDIO
             ENABLE_AUDIO_COUNTER_1_ISR;
             ENABLE_AUDIO_COUNTER_1_OUTPUT;