#elif defined(__arm__) | #elif defined(__arm__) | ||||
# define PROGMEM | # define PROGMEM | ||||
# define pgm_read_byte(p) *(p) | # define pgm_read_byte(p) *(p) | ||||
# define pgm_read_word(p) *(p) | |||||
#endif | #endif | ||||
#endif | #endif |
PROJECT = ps2_usb | |||||
TMK_DIR = ../.. | |||||
MBED_DIR = $(TMK_DIR)/mbed-sdk | |||||
#VPATH += $(MBED_DIR):$(TMK_DIR) | |||||
vpath %.s .:$(MBED_DIR):$(TMK_DIR) | |||||
vpath %.c .:$(MBED_DIR):$(TMK_DIR) | |||||
vpath %.cpp .:$(MBED_DIR):$(TMK_DIR) | |||||
OBJDIR = ./build | |||||
OBJECTS = \ | |||||
$(OBJDIR)/protocol/ps2_busywait.o \ | |||||
$(OBJDIR)/protocol/ps2_io_mbed.o \ | |||||
$(OBJDIR)/./keymap_common.o \ | |||||
$(OBJDIR)/./matrix.o \ | |||||
$(OBJDIR)/./led.o \ | |||||
$(OBJDIR)/./main.o | |||||
ifdef KEYMAP | |||||
OBJECTS := $(OBJDIR)/keymap_$(KEYMAP).o $(OBJECTS) | |||||
else | |||||
OBJECTS := $(OBJDIR)/keymap_plain.o $(OBJECTS) | |||||
endif | |||||
CONFIG_H = config_mbed.h | |||||
SYS_OBJECTS = | |||||
INCLUDE_PATHS = -I. | |||||
LIBRARY_PATHS = | |||||
LIBRARIES = | |||||
# Build Options | |||||
# Comment out to disable | |||||
#BOOTMAGIC_ENABLE = yes | |||||
MOUSEKEY_ENABLE = yes | |||||
include $(TMK_DIR)/tool/mbed/mbed.mk | |||||
include $(TMK_DIR)/tool/mbed/common.mk | |||||
include $(TMK_DIR)/tool/mbed/gcc.mk |
/* | |||||
Copyright 2012 Jun Wako <[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/>. | |||||
*/ | |||||
#ifndef CONFIG_MBED_H | |||||
#define CONFIG_MBED_H | |||||
#if 0 | |||||
// duplicated name against mbed USBDeivce | |||||
#define VENDOR_ID 0xFEED | |||||
#define PRODUCT_ID 0x6512 | |||||
#endif | |||||
#define DEVICE_VER 0x0001 | |||||
#define MANUFACTURER t.m.k. | |||||
#define PRODUCT PS/2 keyboard converter | |||||
#define DESCRIPTION convert PS/2 keyboard to USB | |||||
/* matrix size */ | |||||
#define MATRIX_ROWS 32 // keycode bit: 3-0 | |||||
#define MATRIX_COLS 8 // keycode bit: 6-4 | |||||
/* key combination for command */ | |||||
#define IS_COMMAND() ( \ | |||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \ | |||||
keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \ | |||||
) | |||||
/* | |||||
* PS/2 Busywait | |||||
*/ | |||||
#ifdef PS2_USE_BUSYWAIT | |||||
# define PS2_CLOCK_PORT PORTD | |||||
# define PS2_CLOCK_PIN PIND | |||||
# define PS2_CLOCK_DDR DDRD | |||||
# define PS2_CLOCK_BIT 5 | |||||
# define PS2_DATA_PORT PORTD | |||||
# define PS2_DATA_PIN PIND | |||||
# define PS2_DATA_DDR DDRD | |||||
# define PS2_DATA_BIT 2 | |||||
#endif | |||||
#endif |
along with this program. If not, see <http://www.gnu.org/licenses/>. | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "keymap_common.h" | #include "keymap_common.h" | ||||
#include "progmem.h" | |||||
/* translates key to keycode */ | /* translates key to keycode */ | ||||
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | |||||
uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key) | |||||
{ | { | ||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | ||||
} | } |
#include <stdint.h> | #include <stdint.h> | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <avr/pgmspace.h> | |||||
#include "keycode.h" | #include "keycode.h" | ||||
#include "action.h" | #include "action.h" | ||||
#include "action_macro.h" | #include "action_macro.h" |
#include "mbed.h" | |||||
#include "debug.h" | |||||
#include "timer.h" | |||||
#include "action.h" | |||||
#include "keycode.h" | |||||
#include "host.h" | |||||
#include "host_driver.h" | |||||
#include "mbed_driver.h" | |||||
// Button and LEDs of LPC11U35 board | |||||
DigitalIn isp(P0_1); // ISP button | |||||
DigitalOut led_red(P0_20); | |||||
DigitalOut led_green(P0_21); | |||||
int main(void) { | |||||
isp.mode(PullUp); | |||||
led_red = 1; | |||||
led_green = 0; | |||||
timer_init(); | |||||
host_set_driver(&mbed_driver); | |||||
keyboard_init(); | |||||
//debug_enable = true; | |||||
xprintf("mbed_onekey ver.eee:\r\n"); | |||||
bool last_isp = isp; | |||||
while (1) { | |||||
keyboard_task(); | |||||
//led_green = !led_green; | |||||
if (last_isp == isp) continue; | |||||
last_isp = isp; | |||||
if (last_isp == 0) { | |||||
led_red = 0; // on | |||||
dprintf("timer: %i\r\n", timer_read()); | |||||
//register_code(KC_A); | |||||
} else { | |||||
led_red = 1; // off | |||||
//unregister_code(KC_A); | |||||
} | |||||
} | |||||
} |
#include <stdint.h> | #include <stdint.h> | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <avr/io.h> | |||||
#include <util/delay.h> | |||||
#include "action.h" | #include "action.h" | ||||
#include "print.h" | #include "print.h" | ||||
#include "util.h" | #include "util.h" | ||||
} | } | ||||
uint8_t code = ps2_host_recv(); | uint8_t code = ps2_host_recv(); | ||||
if (code) xprintf("%i\r\n", code); | |||||
if (!ps2_error) { | if (!ps2_error) { | ||||
switch (state) { | switch (state) { | ||||
case INIT: | case INIT: |
PROJECT = mbed_onekey | PROJECT = mbed_onekey | ||||
TMK_DIR = ../.. | TMK_DIR = ../.. | ||||
MBED_DIR = ./mbed-sdk | |||||
MBED_DIR = $(TMK_DIR)/mbed-sdk | |||||
#VPATH += $(MBED_DIR):$(TMK_DIR) | #VPATH += $(MBED_DIR):$(TMK_DIR) | ||||
vpath %.s .:$(MBED_DIR):$(TMK_DIR) | vpath %.s .:$(MBED_DIR):$(TMK_DIR) |
ifdef PS2_USE_BUSYWAIT | ifdef PS2_USE_BUSYWAIT | ||||
SRC += protocol/ps2_busywait.c | SRC += protocol/ps2_busywait.c | ||||
SRC += protocol/ps2_io_avr.c | |||||
OPT_DEFS += -DPS2_USE_BUSYWAIT | OPT_DEFS += -DPS2_USE_BUSYWAIT | ||||
endif | endif | ||||
#define PS2_H | #define PS2_H | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <util/delay.h> | |||||
#include <avr/io.h> | |||||
#include "wait.h" | |||||
#include "ps2_io.h" | |||||
#include "print.h" | |||||
/* | /* | ||||
* Primitive PS/2 Library for AVR | * Primitive PS/2 Library for AVR | ||||
void ps2_host_set_led(uint8_t usb_led); | void ps2_host_set_led(uint8_t usb_led); | ||||
/* Check port settings for clock and data line */ | |||||
#if !(defined(PS2_CLOCK_PORT) && \ | |||||
defined(PS2_CLOCK_PIN) && \ | |||||
defined(PS2_CLOCK_DDR) && \ | |||||
defined(PS2_CLOCK_BIT)) | |||||
# error "PS/2 clock port setting is required in config.h" | |||||
#endif | |||||
#if !(defined(PS2_DATA_PORT) && \ | |||||
defined(PS2_DATA_PIN) && \ | |||||
defined(PS2_DATA_DDR) && \ | |||||
defined(PS2_DATA_BIT)) | |||||
# error "PS/2 data port setting is required in config.h" | |||||
#endif | |||||
/*-------------------------------------------------------------------- | /*-------------------------------------------------------------------- | ||||
* static functions | * static functions | ||||
*------------------------------------------------------------------*/ | *------------------------------------------------------------------*/ | ||||
static inline void clock_lo(void) | |||||
{ | |||||
PS2_CLOCK_PORT &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_DDR |= (1<<PS2_CLOCK_BIT); | |||||
} | |||||
static inline void clock_hi(void) | |||||
{ | |||||
/* input with pull up */ | |||||
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); | |||||
} | |||||
static inline bool clock_in(void) | |||||
{ | |||||
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); | |||||
_delay_us(1); | |||||
return PS2_CLOCK_PIN&(1<<PS2_CLOCK_BIT); | |||||
} | |||||
static inline void data_lo(void) | |||||
{ | |||||
PS2_DATA_PORT &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_DDR |= (1<<PS2_DATA_BIT); | |||||
} | |||||
static inline void data_hi(void) | |||||
{ | |||||
/* input with pull up */ | |||||
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_PORT |= (1<<PS2_DATA_BIT); | |||||
} | |||||
static inline bool data_in(void) | |||||
{ | |||||
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_PORT |= (1<<PS2_DATA_BIT); | |||||
_delay_us(1); | |||||
return PS2_DATA_PIN&(1<<PS2_DATA_BIT); | |||||
} | |||||
static inline uint16_t wait_clock_lo(uint16_t us) | static inline uint16_t wait_clock_lo(uint16_t us) | ||||
{ | { | ||||
while (clock_in() && us) { asm(""); _delay_us(1); us--; } | |||||
while (clock_in() && us) { asm(""); wait_us(1); us--; } | |||||
return us; | return us; | ||||
} | } | ||||
static inline uint16_t wait_clock_hi(uint16_t us) | static inline uint16_t wait_clock_hi(uint16_t us) | ||||
{ | { | ||||
while (!clock_in() && us) { asm(""); _delay_us(1); us--; } | |||||
while (!clock_in() && us) { asm(""); wait_us(1); us--; } | |||||
return us; | return us; | ||||
} | } | ||||
static inline uint16_t wait_data_lo(uint16_t us) | static inline uint16_t wait_data_lo(uint16_t us) | ||||
{ | { | ||||
while (data_in() && us) { asm(""); _delay_us(1); us--; } | |||||
while (data_in() && us) { asm(""); wait_us(1); us--; } | |||||
return us; | return us; | ||||
} | } | ||||
static inline uint16_t wait_data_hi(uint16_t us) | static inline uint16_t wait_data_hi(uint16_t us) | ||||
{ | { | ||||
while (!data_in() && us) { asm(""); _delay_us(1); us--; } | |||||
while (!data_in() && us) { asm(""); wait_us(1); us--; } | |||||
return us; | return us; | ||||
} | } | ||||
*/ | */ | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <util/delay.h> | |||||
#include "wait.h" | |||||
#include "ps2.h" | #include "ps2.h" | ||||
#include "ps2_io.h" | |||||
#include "debug.h" | #include "debug.h" | ||||
void ps2_host_init(void) | void ps2_host_init(void) | ||||
{ | { | ||||
clock_init(); | |||||
data_init(); | |||||
// POR(150-2000ms) plus BAT(300-500ms) may take 2.5sec([3]p.20) | // POR(150-2000ms) plus BAT(300-500ms) may take 2.5sec([3]p.20) | ||||
_delay_ms(2500); | |||||
wait_ms(2500); | |||||
inhibit(); | inhibit(); | ||||
} | } | ||||
/* terminate a transmission if we have */ | /* terminate a transmission if we have */ | ||||
inhibit(); | inhibit(); | ||||
_delay_us(100); // 100us [4]p.13, [5]p.50 | |||||
wait_us(100); // 100us [4]p.13, [5]p.50 | |||||
/* 'Request to Send' and Start bit */ | /* 'Request to Send' and Start bit */ | ||||
data_lo(); | data_lo(); | ||||
/* Data bit */ | /* Data bit */ | ||||
for (uint8_t i = 0; i < 8; i++) { | for (uint8_t i = 0; i < 8; i++) { | ||||
_delay_us(15); | |||||
wait_us(15); | |||||
if (data&(1<<i)) { | if (data&(1<<i)) { | ||||
parity = !parity; | parity = !parity; | ||||
data_hi(); | data_hi(); | ||||
} | } | ||||
/* Parity bit */ | /* Parity bit */ | ||||
_delay_us(15); | |||||
wait_us(15); | |||||
if (parity) { data_hi(); } else { data_lo(); } | if (parity) { data_hi(); } else { data_lo(); } | ||||
WAIT(clock_hi, 50, 4); | WAIT(clock_hi, 50, 4); | ||||
WAIT(clock_lo, 50, 5); | WAIT(clock_lo, 50, 5); | ||||
/* Stop bit */ | /* Stop bit */ | ||||
_delay_us(15); | |||||
wait_us(15); | |||||
data_hi(); | data_hi(); | ||||
/* Ack */ | /* Ack */ |
#ifndef PS2_IO_H | |||||
#define PS2_IO_H | |||||
void clock_init(void); | |||||
void clock_lo(void); | |||||
void clock_hi(void); | |||||
bool clock_in(void); | |||||
void data_init(void); | |||||
void data_lo(void); | |||||
void data_hi(void); | |||||
bool data_in(void); | |||||
#endif |
#include <stdbool.h> | |||||
#include <util/delay.h> | |||||
/* Check port settings for clock and data line */ | |||||
#if !(defined(PS2_CLOCK_PORT) && \ | |||||
defined(PS2_CLOCK_PIN) && \ | |||||
defined(PS2_CLOCK_DDR) && \ | |||||
defined(PS2_CLOCK_BIT)) | |||||
# error "PS/2 clock port setting is required in config.h" | |||||
#endif | |||||
#if !(defined(PS2_DATA_PORT) && \ | |||||
defined(PS2_DATA_PIN) && \ | |||||
defined(PS2_DATA_DDR) && \ | |||||
defined(PS2_DATA_BIT)) | |||||
# error "PS/2 data port setting is required in config.h" | |||||
#endif | |||||
/* | |||||
* Clock | |||||
*/ | |||||
void clock_init(void) | |||||
{ | |||||
} | |||||
void clock_lo(void) | |||||
{ | |||||
PS2_CLOCK_PORT &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_DDR |= (1<<PS2_CLOCK_BIT); | |||||
} | |||||
void clock_hi(void) | |||||
{ | |||||
/* input with pull up */ | |||||
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); | |||||
} | |||||
bool clock_in(void) | |||||
{ | |||||
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); | |||||
PS2_CLOCK_PORT |= (1<<PS2_CLOCK_BIT); | |||||
_delay_us(1); | |||||
return PS2_CLOCK_PIN&(1<<PS2_CLOCK_BIT); | |||||
} | |||||
/* | |||||
* Data | |||||
*/ | |||||
void data_init(void) | |||||
{ | |||||
} | |||||
void data_lo(void) | |||||
{ | |||||
PS2_DATA_PORT &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_DDR |= (1<<PS2_DATA_BIT); | |||||
} | |||||
void data_hi(void) | |||||
{ | |||||
/* input with pull up */ | |||||
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_PORT |= (1<<PS2_DATA_BIT); | |||||
} | |||||
bool data_in(void) | |||||
{ | |||||
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); | |||||
PS2_DATA_PORT |= (1<<PS2_DATA_BIT); | |||||
_delay_us(1); | |||||
return PS2_DATA_PIN&(1<<PS2_DATA_BIT); | |||||
} |
#include <stdbool.h> | |||||
#include "ps2_io.h" | |||||
#include "gpio_api.h" | |||||
static gpio_t clock; | |||||
static gpio_t data; | |||||
/* | |||||
* Clock | |||||
*/ | |||||
void clock_init(void) | |||||
{ | |||||
gpio_init(&clock, P0_9); | |||||
gpio_mode(&clock, OpenDrain|PullNone); | |||||
} | |||||
void clock_lo(void) | |||||
{ | |||||
gpio_dir(&clock, PIN_OUTPUT); | |||||
gpio_write(&clock, 0); | |||||
} | |||||
void clock_hi(void) | |||||
{ | |||||
gpio_dir(&clock, PIN_OUTPUT); | |||||
gpio_write(&clock, 1); | |||||
} | |||||
bool clock_in(void) | |||||
{ | |||||
gpio_dir(&clock, PIN_INPUT); | |||||
return gpio_read(&clock); | |||||
} | |||||
/* | |||||
* Data | |||||
*/ | |||||
void data_init(void) | |||||
{ | |||||
gpio_init(&data, P0_8); | |||||
gpio_mode(&data, OpenDrain|PullNone); | |||||
} | |||||
void data_lo(void) | |||||
{ | |||||
gpio_dir(&data, PIN_OUTPUT); | |||||
gpio_write(&data, 0); | |||||
} | |||||
void data_hi(void) | |||||
{ | |||||
gpio_dir(&data, PIN_OUTPUT); | |||||
gpio_write(&data, 1); | |||||
} | |||||
bool data_in(void) | |||||
{ | |||||
gpio_dir(&data, PIN_INPUT); | |||||
return gpio_read(&data); | |||||
} |
COMMON_DIR = common | |||||
OBJECTS += \ | OBJECTS += \ | ||||
$(OBJDIR)/$(COMMON_DIR)/action.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/action_tapping.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/action_macro.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/action_layer.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/action_util.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/host.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/keymap.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/keyboard.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/util.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/mbed/suspend.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/mbed/timer.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/mbed/xprintf.o \ | |||||
$(OBJDIR)/$(COMMON_DIR)/mbed/bootloader.o \ | |||||
$(OBJDIR)/common/action.o \ | |||||
$(OBJDIR)/common/action_tapping.o \ | |||||
$(OBJDIR)/common/action_macro.o \ | |||||
$(OBJDIR)/common/action_layer.o \ | |||||
$(OBJDIR)/common/action_util.o \ | |||||
$(OBJDIR)/common/host.o \ | |||||
$(OBJDIR)/common/keymap.o \ | |||||
$(OBJDIR)/common/keyboard.o \ | |||||
$(OBJDIR)/common/util.o \ | |||||
$(OBJDIR)/common/mbed/suspend.o \ | |||||
$(OBJDIR)/common/mbed/timer.o \ | |||||
$(OBJDIR)/common/mbed/xprintf.o \ | |||||
$(OBJDIR)/common/mbed/bootloader.o \ | |||||
INCLUDE_PATHS += \ | INCLUDE_PATHS += \ | ||||
-I$(TMK_DIR)/$(COMMON_DIR) | |||||
-I$(TMK_DIR)/common \ | |||||
-I$(TMK_DIR)/protocol | |||||
CC_FLAGS += -include $(CONFIG_H) | CC_FLAGS += -include $(CONFIG_H) | ||||
# Option modules | # Option modules | ||||
ifdef BOOTMAGIC_ENABLE | ifdef BOOTMAGIC_ENABLE | ||||
$(error Not Supported) | $(error Not Supported) | ||||
OBJECTS += $(OBJDIR)/$(COMMON_DIR)/bootmagic.o | |||||
OBJECTS += $(OBJDIR)/$(COMMON_DIR)/mbed/eeprom.o | |||||
OBJECTS += $(OBJDIR)/common/bootmagic.o | |||||
OBJECTS += $(OBJDIR)/common/mbed/eeprom.o | |||||
OPT_DEFS += -DBOOTMAGIC_ENABLE | OPT_DEFS += -DBOOTMAGIC_ENABLE | ||||
endif | endif | ||||
ifdef MOUSEKEY_ENABLE | ifdef MOUSEKEY_ENABLE | ||||
OBJECTS += $(OBJDIR)/$(COMMON_DIR)/mousekey.o | |||||
OBJECTS += $(OBJDIR)/common/mousekey.o | |||||
OPT_DEFS += -DMOUSEKEY_ENABLE | OPT_DEFS += -DMOUSEKEY_ENABLE | ||||
OPT_DEFS += -DMOUSE_ENABLE | OPT_DEFS += -DMOUSE_ENABLE | ||||
endif | endif | ||||
ifdef COMMAND_ENABLE | ifdef COMMAND_ENABLE | ||||
$(error Not Supported) | $(error Not Supported) | ||||
SRC += $(COMMON_DIR)/command.c | |||||
SRC += common/command.c | |||||
OPT_DEFS += -DCOMMAND_ENABLE | OPT_DEFS += -DCOMMAND_ENABLE | ||||
endif | endif | ||||
ifdef SLEEP_LED_ENABLE | ifdef SLEEP_LED_ENABLE | ||||
$(error Not Supported) | $(error Not Supported) | ||||
SRC += $(COMMON_DIR)/sleep_led.c | |||||
SRC += common/sleep_led.c | |||||
OPT_DEFS += -DSLEEP_LED_ENABLE | OPT_DEFS += -DSLEEP_LED_ENABLE | ||||
OPT_DEFS += -DNO_SUSPEND_POWER_DOWN | OPT_DEFS += -DNO_SUSPEND_POWER_DOWN | ||||
endif | endif | ||||
ifdef BACKLIGHT_ENABLE | ifdef BACKLIGHT_ENABLE | ||||
$(error Not Supported) | $(error Not Supported) | ||||
SRC += $(COMMON_DIR)/backlight.c | |||||
SRC += common/backlight.c | |||||
OPT_DEFS += -DBACKLIGHT_ENABLE | OPT_DEFS += -DBACKLIGHT_ENABLE | ||||
endif | endif | ||||