From ea9dbf1dba7ce54b18e6f780254ae7ebd702c452 Mon Sep 17 00:00:00 2001 From: Kai Ryu Date: Mon, 22 Sep 2014 17:32:05 +0900 Subject: [PATCH] Support vibration motor for TentaPad --- keyboard/tentapad/Makefile | 3 +- keyboard/tentapad/Makefile_gh60 | 4 +- keyboard/tentapad/matrix.c | 5 +++ keyboard/tentapad/tentapad.c | 2 + keyboard/tentapad/vibration.c | 71 +++++++++++++++++++++++++++++++++ keyboard/tentapad/vibration.h | 24 +++++++++++ 6 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 keyboard/tentapad/vibration.c create mode 100644 keyboard/tentapad/vibration.h diff --git a/keyboard/tentapad/Makefile b/keyboard/tentapad/Makefile index 490a8810..21c6b5ba 100644 --- a/keyboard/tentapad/Makefile +++ b/keyboard/tentapad/Makefile @@ -53,7 +53,8 @@ SRC = keymap_common.c \ matrix.c \ led.c \ backlight.c \ - ledmap.c + ledmap.c \ + vibration.c ifdef KEYMAP SRC := keymap_$(KEYMAP).c $(SRC) diff --git a/keyboard/tentapad/Makefile_gh60 b/keyboard/tentapad/Makefile_gh60 index 717dc33d..b746f685 100644 --- a/keyboard/tentapad/Makefile_gh60 +++ b/keyboard/tentapad/Makefile_gh60 @@ -49,10 +49,12 @@ TARGET_DIR = . # project specific files SRC = keymap_common.c \ + tentapad.c \ matrix.c \ led.c \ backlight.c \ - ledmap.c + ledmap.c \ + vibration.c ifdef KEYMAP SRC := keymap_$(KEYMAP).c $(SRC) diff --git a/keyboard/tentapad/matrix.c b/keyboard/tentapad/matrix.c index 09df9048..cf105923 100644 --- a/keyboard/tentapad/matrix.c +++ b/keyboard/tentapad/matrix.c @@ -30,6 +30,7 @@ along with this program. If not, see . #ifdef PS2_MOUSE_ENABLE #include "ps2.h" #endif +#include "vibration.h" #include "keymap_common.h" @@ -80,6 +81,8 @@ void matrix_init(void) keymaps_cache_init(); + vibration_init(); + // initialize cols init_cols(); } @@ -126,6 +129,8 @@ uint8_t matrix_scan(void) } */ + vibration_task(); + return 1; } diff --git a/keyboard/tentapad/tentapad.c b/keyboard/tentapad/tentapad.c index c75e235f..ce671615 100644 --- a/keyboard/tentapad/tentapad.c +++ b/keyboard/tentapad/tentapad.c @@ -22,6 +22,7 @@ along with this program. If not, see . #include "softpwm_led.h" #include "eeconfig.h" #include "keymap_common.h" +#include "vibration.h" #include "tentapad.h" #include "debug.h" @@ -87,6 +88,7 @@ void action_keyevent(keyevent_t event) break; case KEY_TT: if (event.pressed) { + vibration(64); switch (backlight_mode) { case 1: case 2: softpwm_led_increase(LED_KEY_SIDE - 1 + backlight_mode, 32); diff --git a/keyboard/tentapad/vibration.c b/keyboard/tentapad/vibration.c new file mode 100644 index 00000000..5b0af66a --- /dev/null +++ b/keyboard/tentapad/vibration.c @@ -0,0 +1,71 @@ +/* +Copyright 2014 Kai Ryu + +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 . +*/ + +#include +#include "timer.h" +#include "vibration.h" + +static uint8_t vibration_state = 0; +static uint16_t vibration_start; +static uint16_t vibration_duration; + +void vibration_task(void) +{ + if (vibration_state) { + if (timer_elapsed(vibration_start) > vibration_duration) { + vibration_state = 0; + vibration_disable(); + } + } +} + +void vibration_init(void) +{ +#ifndef EXPERIMENTAL + DDRD |= (1< + +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 . +*/ + +#include + +void vibration_init(void); +void vibration_task(void); +void vibration_enable(void); +void vibration_disable(void); +void vibration(uint16_t duration);