1
0

Support vibration motor for TentaPad

This commit is contained in:
Kai Ryu 2014-09-22 17:32:05 +09:00
parent f800e0b715
commit ea9dbf1dba
6 changed files with 107 additions and 2 deletions

View File

@ -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)

View File

@ -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)

View File

@ -30,6 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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;
}

View File

@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#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);

View 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();
}

View 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);