Browse Source

Support vibration motor for TentaPad

old_master
Kai Ryu 9 years ago
parent
commit
ea9dbf1dba

+ 2
- 1
keyboard/tentapad/Makefile 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)

+ 3
- 1
keyboard/tentapad/Makefile_gh60 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)

+ 5
- 0
keyboard/tentapad/matrix.c 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;
}


+ 2
- 0
keyboard/tentapad/tentapad.c 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);

+ 71
- 0
keyboard/tentapad/vibration.c View File

@@ -0,0 +1,71 @@
/*
Copyright 2014 Kai Ryu <[email protected]>

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
- 0
keyboard/tentapad/vibration.h View File

@@ -0,0 +1,24 @@
/*
Copyright 2014 Kai Ryu <[email protected]>

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