Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Marie
qmk_luckenbach_fork
Commits
0c2b6951
Commit
0c2b6951
authored
Feb 07, 2017
by
Jack Humbert
Committed by
GitHub
Feb 07, 2017
Browse files
Merge pull request #1057 from priyadi/selectable_output
Implement runtime selectable output (USB or BT)
parents
de659486
e7c4f621
Changes
7
Hide whitespace changes
Inline
Side-by-side
quantum/quantum.c
View file @
0c2b6951
#include "quantum.h"
#ifdef PROTOCOL_LUFA
#include "outputselect.h"
#endif
#ifndef TAPPING_TERM
#define TAPPING_TERM 200
...
...
@@ -243,6 +246,36 @@ bool process_record_quantum(keyrecord_t *record) {
return
false
;
break
;
#endif
#ifdef PROTOCOL_LUFA
case
OUT_AUTO
:
if
(
record
->
event
.
pressed
)
{
set_output
(
OUTPUT_AUTO
);
}
return
false
;
break
;
case
OUT_USB
:
if
(
record
->
event
.
pressed
)
{
set_output
(
OUTPUT_USB
);
}
return
false
;
break
;
#ifdef BLUETOOTH_ENABLE
case
OUT_BT
:
if
(
record
->
event
.
pressed
)
{
set_output
(
OUTPUT_BLUETOOTH
);
}
return
false
;
break
;
#endif
#ifdef ADAFRUIT_BLE_ENABLE
case
OUT_BLE
:
if
(
record
->
event
.
pressed
)
{
set_output
(
OUTPUT_ADAFRUIT_BLE
);
}
return
false
;
break
;
#endif
#endif
case
MAGIC_SWAP_CONTROL_CAPSLOCK
...
MAGIC_TOGGLE_NKRO
:
if
(
record
->
event
.
pressed
)
{
// MAGIC actions (BOOTMAGIC without the boot)
...
...
quantum/quantum.h
View file @
0c2b6951
...
...
@@ -15,7 +15,6 @@
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#endif
#include "action_layer.h"
#include "eeconfig.h"
#include <stddef.h>
...
...
quantum/quantum_keycodes.h
View file @
0c2b6951
...
...
@@ -141,6 +141,16 @@ enum quantum_keycodes {
PRINT_ON
,
PRINT_OFF
,
// output selection
OUT_AUTO
,
OUT_USB
,
#ifdef BLUETOOTH_ENABLE
OUT_BT
,
#endif
#ifdef ADAFRUIT_BLE_ENABLE
OUT_BLE
,
#endif
// always leave at the end
SAFE_RANGE
};
...
...
tmk_core/protocol/lufa.mk
View file @
0c2b6951
...
...
@@ -8,13 +8,14 @@ LUFA_PATH ?= $(LUFA_DIR)/LUFA-git
ifneq
(, $(wildcard $(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk))
# New build system from 20120730
LUFA_ROOT_PATH
=
$(LUFA_PATH)
/LUFA
include
$(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk
include
$(TMK_PATH)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk
else
include
$(TMK_PATH)/$(LUFA_PATH)/LUFA/makefile
endif
LUFA_SRC
=
lufa.c
\
descriptor.c
\
outputselect.c
\
$(LUFA_SRC_USB)
ifeq
($(strip $(MIDI_ENABLE)), yes)
...
...
tmk_core/protocol/lufa/lufa.c
View file @
0c2b6951
...
...
@@ -53,6 +53,7 @@
#include "lufa.h"
#include "quantum.h"
#include <util/atomic.h>
#include "outputselect.h"
#ifdef NKRO_ENABLE
#include "keycode_config.h"
...
...
@@ -589,59 +590,33 @@ void EVENT_USB_Device_ControlRequest(void)
/*******************************************************************************
* Host driver
p
******************************************************************************/
static
uint8_t
keyboard_leds
(
void
)
{
return
keyboard_led_stats
;
}
#define SendToUSB 1
#define SendToBT 2
#define SendToBLE 4
static
inline
uint8_t
where_to_send
(
void
)
{
#ifdef ADAFRUIT_BLE_ENABLE
#if 0
if (adafruit_ble_is_connected()) {
// For testing, send to BLE as a priority
return SendToBLE;
}
#endif
// This is the real policy
if
(
USB_DeviceState
!=
DEVICE_STATE_Configured
)
{
if
(
adafruit_ble_is_connected
())
{
return
SendToBLE
;
}
}
#endif
return
((
USB_DeviceState
==
DEVICE_STATE_Configured
)
?
SendToUSB
:
0
)
#ifdef BLUETOOTH_ENABLE
||
SendToBT
#endif
;
}
static
void
send_keyboard
(
report_keyboard_t
*
report
)
{
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef BLUETOOTH_ENABLE
bluefruit_serial_send
(
0xFD
);
for
(
uint8_t
i
=
0
;
i
<
KEYBOARD_EPSIZE
;
i
++
)
{
bluefruit_serial_send
(
report
->
raw
[
i
]);
if
(
where
==
OUTPUT_BLUETOOTH
||
where
==
OUTPUT_USB_AND_BT
)
{
bluefruit_serial_send
(
0xFD
);
for
(
uint8_t
i
=
0
;
i
<
KEYBOARD_EPSIZE
;
i
++
)
{
bluefruit_serial_send
(
report
->
raw
[
i
]);
}
}
#endif
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef ADAFRUIT_BLE_ENABLE
if
(
where
&
SendTo
BLE
)
{
if
(
where
==
OUTPUT_ADAFRUIT_
BLE
)
{
adafruit_ble_send_keys
(
report
->
mods
,
report
->
keys
,
sizeof
(
report
->
keys
));
}
#endif
if
(
!
(
where
&
SendToUSB
)
)
{
if
(
where
!=
OUTPUT_USB
&&
where
!=
OUTPUT_USB_AND_BT
)
{
return
;
}
...
...
@@ -681,30 +656,31 @@ static void send_keyboard(report_keyboard_t *report)
static
void
send_mouse
(
report_mouse_t
*
report
)
{
#ifdef MOUSE_ENABLE
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef BLUETOOTH_ENABLE
bluefruit_serial_send
(
0xFD
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x03
);
bluefruit_serial_send
(
report
->
buttons
);
bluefruit_serial_send
(
report
->
x
);
bluefruit_serial_send
(
report
->
y
);
bluefruit_serial_send
(
report
->
v
);
// should try sending the wheel v here
bluefruit_serial_send
(
report
->
h
);
// should try sending the wheel h here
bluefruit_serial_send
(
0x00
);
if
(
where
==
OUTPUT_BLUETOOTH
||
where
==
OUTPUT_USB_AND_BT
)
{
bluefruit_serial_send
(
0xFD
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x03
);
bluefruit_serial_send
(
report
->
buttons
);
bluefruit_serial_send
(
report
->
x
);
bluefruit_serial_send
(
report
->
y
);
bluefruit_serial_send
(
report
->
v
);
// should try sending the wheel v here
bluefruit_serial_send
(
report
->
h
);
// should try sending the wheel h here
bluefruit_serial_send
(
0x00
);
}
#endif
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef ADAFRUIT_BLE_ENABLE
if
(
where
&
SendTo
BLE
)
{
if
(
where
==
OUTPUT_ADAFRUIT_
BLE
)
{
// FIXME: mouse buttons
adafruit_ble_send_mouse_move
(
report
->
x
,
report
->
y
,
report
->
v
,
report
->
h
);
}
#endif
if
(
!
(
where
&
SendToUSB
))
{
if
(
where
!=
OUTPUT_USB
&&
where
!=
OUTPUT_USB_AND_BT
)
{
return
;
}
...
...
@@ -746,32 +722,34 @@ static void send_system(uint16_t data)
static
void
send_consumer
(
uint16_t
data
)
{
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef BLUETOOTH_ENABLE
static
uint16_t
last_data
=
0
;
if
(
data
==
last_data
)
return
;
last_data
=
data
;
uint16_t
bitmap
=
CONSUMER2BLUEFRUIT
(
data
);
bluefruit_serial_send
(
0xFD
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x02
);
bluefruit_serial_send
((
bitmap
>>
8
)
&
0xFF
);
bluefruit_serial_send
(
bitmap
&
0xFF
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
if
(
where
==
OUTPUT_BLUETOOTH
||
where
==
OUTPUT_USB_AND_BT
)
{
static
uint16_t
last_data
=
0
;
if
(
data
==
last_data
)
return
;
last_data
=
data
;
uint16_t
bitmap
=
CONSUMER2BLUEFRUIT
(
data
);
bluefruit_serial_send
(
0xFD
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x02
);
bluefruit_serial_send
((
bitmap
>>
8
)
&
0xFF
);
bluefruit_serial_send
(
bitmap
&
0xFF
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
bluefruit_serial_send
(
0x00
);
}
#endif
uint8_t
timeout
=
255
;
uint8_t
where
=
where_to_send
();
#ifdef ADAFRUIT_BLE_ENABLE
if
(
where
&
SendTo
BLE
)
{
if
(
where
==
OUTPUT_ADAFRUIT_
BLE
)
{
adafruit_ble_send_consumer_key
(
data
,
0
);
}
#endif
if
(
!
(
where
&
SendToUSB
))
{
if
(
where
!=
OUTPUT_USB
&&
where
!=
OUTPUT_USB_AND_BT
)
{
return
;
}
...
...
tmk_core/protocol/lufa/outputselect.c
0 → 100644
View file @
0c2b6951
/*
Copyright 2017 Priyadi Iman Nurcahyo
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 "lufa.h"
#include "outputselect.h"
#ifdef ADAFRUIT_BLE_ENABLE
#include "adafruit_ble.h"
#endif
uint8_t
desired_output
=
OUTPUT_DEFAULT
;
void
set_output
(
uint8_t
output
)
{
set_output_user
(
output
);
desired_output
=
output
;
}
__attribute__
((
weak
))
void
set_output_user
(
uint8_t
output
)
{
}
uint8_t
auto_detect_output
(
void
)
{
if
(
USB_DeviceState
==
DEVICE_STATE_Configured
)
{
return
OUTPUT_USB
;
}
#ifdef ADAFRUIT_BLE_ENABLE
if
(
adafruit_ble_is_connected
())
{
return
OUTPUT_ADAFRUIT_BLE
;
}
#endif
#ifdef BLUETOOTH_ENABLE
return
OUTPUT_BLUETOOTH
;
// should check if BT is connected here
#endif
return
OUTPUT_NONE
;
}
uint8_t
where_to_send
(
void
)
{
if
(
desired_output
==
OUTPUT_AUTO
)
{
return
auto_detect_output
();
}
return
desired_output
;
}
tmk_core/protocol/lufa/outputselect.h
0 → 100644
View file @
0c2b6951
/*
Copyright 2017 Priyadi Iman Nurcahyo
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/>.
*/
enum
outputs
{
OUTPUT_AUTO
,
OUTPUT_NONE
,
OUTPUT_USB
,
OUTPUT_BLUETOOTH
,
OUTPUT_ADAFRUIT_BLE
,
// backward compatibility
OUTPUT_USB_AND_BT
};
/**
* backward compatibility for BLUETOOTH_ENABLE, send to BT and USB by default
*/
#ifndef OUTPUT_DEFAULT
#ifdef BLUETOOTH_ENABLE
#define OUTPUT_DEFAULT OUTPUT_USB_AND_BT
#else
#define OUTPUT_DEFAULT OUTPUT_AUTO
#endif
#endif
void
set_output
(
uint8_t
output
);
void
set_output_user
(
uint8_t
output
);
uint8_t
auto_detect_output
(
void
);
uint8_t
where_to_send
(
void
);
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment