Bind Bluetooth driver to host_driver_t (#25199)
				
					
				
			This commit is contained in:
		
							parent
							
								
									614b631ee2
								
							
						
					
					
						commit
						842c840145
					
				
					 6 changed files with 174 additions and 93 deletions
				
			
		| 
						 | 
				
			
			@ -30,12 +30,31 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
#    include "joystick.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef BLUETOOTH_ENABLE
 | 
			
		||||
#    ifndef CONNECTION_ENABLE
 | 
			
		||||
#        error CONNECTION_ENABLE required and not enabled
 | 
			
		||||
#    endif
 | 
			
		||||
#ifdef CONNECTION_ENABLE
 | 
			
		||||
#    include "connection.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef BLUETOOTH_ENABLE
 | 
			
		||||
#    include "bluetooth.h"
 | 
			
		||||
 | 
			
		||||
static void bluetooth_send_extra(report_extra_t *report) {
 | 
			
		||||
    switch (report->report_id) {
 | 
			
		||||
        case REPORT_ID_SYSTEM:
 | 
			
		||||
            bluetooth_send_system(report->usage);
 | 
			
		||||
            return;
 | 
			
		||||
        case REPORT_ID_CONSUMER:
 | 
			
		||||
            bluetooth_send_consumer(report->usage);
 | 
			
		||||
            return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
host_driver_t bt_driver = {
 | 
			
		||||
    .keyboard_leds = bluetooth_keyboard_leds,
 | 
			
		||||
    .send_keyboard = bluetooth_send_keyboard,
 | 
			
		||||
    .send_nkro     = bluetooth_send_nkro,
 | 
			
		||||
    .send_mouse    = bluetooth_send_mouse,
 | 
			
		||||
    .send_extra    = bluetooth_send_extra,
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef NKRO_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +74,22 @@ host_driver_t *host_get_driver(void) {
 | 
			
		|||
    return driver;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static host_driver_t *host_get_active_driver(void) {
 | 
			
		||||
#ifdef CONNECTION_ENABLE
 | 
			
		||||
    switch (connection_get_host()) {
 | 
			
		||||
#    ifdef BLUETOOTH_ENABLE
 | 
			
		||||
        case CONNECTION_HOST_BLUETOOTH:
 | 
			
		||||
            return &bt_driver;
 | 
			
		||||
#    endif
 | 
			
		||||
        case CONNECTION_HOST_NONE:
 | 
			
		||||
            return NULL;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    return driver;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef SPLIT_KEYBOARD
 | 
			
		||||
uint8_t split_led_state = 0;
 | 
			
		||||
void    set_split_host_keyboard_leds(uint8_t led_state) {
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +101,10 @@ uint8_t host_keyboard_leds(void) {
 | 
			
		|||
#ifdef SPLIT_KEYBOARD
 | 
			
		||||
    if (!is_keyboard_master()) return split_led_state;
 | 
			
		||||
#endif
 | 
			
		||||
    if (!driver) return 0;
 | 
			
		||||
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->keyboard_leds) return 0;
 | 
			
		||||
 | 
			
		||||
    return (*driver->keyboard_leds)();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,14 +114,9 @@ led_t host_keyboard_led_state(void) {
 | 
			
		|||
 | 
			
		||||
/* send report */
 | 
			
		||||
void host_keyboard_send(report_keyboard_t *report) {
 | 
			
		||||
#ifdef BLUETOOTH_ENABLE
 | 
			
		||||
    if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
 | 
			
		||||
        bluetooth_send_keyboard(report);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->send_keyboard) return;
 | 
			
		||||
 | 
			
		||||
    if (!driver) return;
 | 
			
		||||
#ifdef KEYBOARD_SHARED_EP
 | 
			
		||||
    report->report_id = REPORT_ID_KEYBOARD;
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +132,9 @@ void host_keyboard_send(report_keyboard_t *report) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void host_nkro_send(report_nkro_t *report) {
 | 
			
		||||
    if (!driver) return;
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->send_nkro) return;
 | 
			
		||||
 | 
			
		||||
    report->report_id = REPORT_ID_NKRO;
 | 
			
		||||
    (*driver->send_nkro)(report);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -113,14 +148,9 @@ void host_nkro_send(report_nkro_t *report) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void host_mouse_send(report_mouse_t *report) {
 | 
			
		||||
#ifdef BLUETOOTH_ENABLE
 | 
			
		||||
    if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
 | 
			
		||||
        bluetooth_send_mouse(report);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->send_mouse) return;
 | 
			
		||||
 | 
			
		||||
    if (!driver) return;
 | 
			
		||||
#ifdef MOUSE_SHARED_EP
 | 
			
		||||
    report->report_id = REPORT_ID_MOUSE;
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +166,8 @@ void host_system_send(uint16_t usage) {
 | 
			
		|||
    if (usage == last_system_usage) return;
 | 
			
		||||
    last_system_usage = usage;
 | 
			
		||||
 | 
			
		||||
    if (!driver) return;
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->send_extra) return;
 | 
			
		||||
 | 
			
		||||
    report_extra_t report = {
 | 
			
		||||
        .report_id = REPORT_ID_SYSTEM,
 | 
			
		||||
| 
						 | 
				
			
			@ -149,14 +180,8 @@ void host_consumer_send(uint16_t usage) {
 | 
			
		|||
    if (usage == last_consumer_usage) return;
 | 
			
		||||
    last_consumer_usage = usage;
 | 
			
		||||
 | 
			
		||||
#ifdef BLUETOOTH_ENABLE
 | 
			
		||||
    if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
 | 
			
		||||
        bluetooth_send_consumer(usage);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!driver) return;
 | 
			
		||||
    host_driver_t *driver = host_get_active_driver();
 | 
			
		||||
    if (!driver || !driver->send_extra) return;
 | 
			
		||||
 | 
			
		||||
    report_extra_t report = {
 | 
			
		||||
        .report_id = REPORT_ID_CONSUMER,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue