Support vibration motor for TentaPad
This commit is contained in:
parent
f800e0b715
commit
ea9dbf1dba
@ -53,7 +53,8 @@ SRC = keymap_common.c \
|
|||||||
matrix.c \
|
matrix.c \
|
||||||
led.c \
|
led.c \
|
||||||
backlight.c \
|
backlight.c \
|
||||||
ledmap.c
|
ledmap.c \
|
||||||
|
vibration.c
|
||||||
|
|
||||||
ifdef KEYMAP
|
ifdef KEYMAP
|
||||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
@ -49,10 +49,12 @@ TARGET_DIR = .
|
|||||||
|
|
||||||
# project specific files
|
# project specific files
|
||||||
SRC = keymap_common.c \
|
SRC = keymap_common.c \
|
||||||
|
tentapad.c \
|
||||||
matrix.c \
|
matrix.c \
|
||||||
led.c \
|
led.c \
|
||||||
backlight.c \
|
backlight.c \
|
||||||
ledmap.c
|
ledmap.c \
|
||||||
|
vibration.c
|
||||||
|
|
||||||
ifdef KEYMAP
|
ifdef KEYMAP
|
||||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
@ -30,6 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#ifdef PS2_MOUSE_ENABLE
|
#ifdef PS2_MOUSE_ENABLE
|
||||||
#include "ps2.h"
|
#include "ps2.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "vibration.h"
|
||||||
#include "keymap_common.h"
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
@ -80,6 +81,8 @@ void matrix_init(void)
|
|||||||
|
|
||||||
keymaps_cache_init();
|
keymaps_cache_init();
|
||||||
|
|
||||||
|
vibration_init();
|
||||||
|
|
||||||
// initialize cols
|
// initialize cols
|
||||||
init_cols();
|
init_cols();
|
||||||
}
|
}
|
||||||
@ -126,6 +129,8 @@ uint8_t matrix_scan(void)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
vibration_task();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "softpwm_led.h"
|
#include "softpwm_led.h"
|
||||||
#include "eeconfig.h"
|
#include "eeconfig.h"
|
||||||
#include "keymap_common.h"
|
#include "keymap_common.h"
|
||||||
|
#include "vibration.h"
|
||||||
#include "tentapad.h"
|
#include "tentapad.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ void action_keyevent(keyevent_t event)
|
|||||||
break;
|
break;
|
||||||
case KEY_TT:
|
case KEY_TT:
|
||||||
if (event.pressed) {
|
if (event.pressed) {
|
||||||
|
vibration(64);
|
||||||
switch (backlight_mode) {
|
switch (backlight_mode) {
|
||||||
case 1: case 2:
|
case 1: case 2:
|
||||||
softpwm_led_increase(LED_KEY_SIDE - 1 + backlight_mode, 32);
|
softpwm_led_increase(LED_KEY_SIDE - 1 + backlight_mode, 32);
|
||||||
|
71
keyboard/tentapad/vibration.c
Normal file
71
keyboard/tentapad/vibration.c
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Kai Ryu <kai1103@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 <avr/io.h>
|
||||||
|
#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<<PD6);
|
||||||
|
PORTD &= ~(1<<PD6);
|
||||||
|
#else
|
||||||
|
DDRD |= (1<<PD5);
|
||||||
|
PORTD &= ~(1<<PD5);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void vibration_enable(void)
|
||||||
|
{
|
||||||
|
#ifndef EXPERIMENTAL
|
||||||
|
PORTD |= (1<<PD6);
|
||||||
|
#else
|
||||||
|
PORTD |= (1<<PD5);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void vibration_disable(void)
|
||||||
|
{
|
||||||
|
#ifndef EXPERIMENTAL
|
||||||
|
PORTD &= ~(1<<PD6);
|
||||||
|
#else
|
||||||
|
PORTD &= ~(1<<PD5);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void vibration(uint16_t duration)
|
||||||
|
{
|
||||||
|
vibration_state = 1;
|
||||||
|
vibration_start = timer_read();
|
||||||
|
vibration_duration = duration;
|
||||||
|
vibration_enable();
|
||||||
|
}
|
24
keyboard/tentapad/vibration.h
Normal file
24
keyboard/tentapad/vibration.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Kai Ryu <kai1103@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 <stdint.h>
|
||||||
|
|
||||||
|
void vibration_init(void);
|
||||||
|
void vibration_task(void);
|
||||||
|
void vibration_enable(void);
|
||||||
|
void vibration_disable(void);
|
||||||
|
void vibration(uint16_t duration);
|
Reference in New Issue
Block a user