mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-04 07:12:33 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
		
						commit
						64009220d3
					
				
							
								
								
									
										220
									
								
								keyboards/bioi/ble.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								keyboards/bioi/ble.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,220 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/pgmspace.h>
 | 
				
			||||||
 | 
					#include "report.h"
 | 
				
			||||||
 | 
					#include "host.h"
 | 
				
			||||||
 | 
					#include "host_driver.h"
 | 
				
			||||||
 | 
					#include "keyboard.h"
 | 
				
			||||||
 | 
					#include "action.h"
 | 
				
			||||||
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "sendchar.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#ifdef SLEEP_LED_ENABLE
 | 
				
			||||||
 | 
					#include "sleep_led.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include "suspend.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "usb_descriptor.h"
 | 
				
			||||||
 | 
					#include "lufa.h"
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					#include <util/atomic.h>
 | 
				
			||||||
 | 
					#include "outputselect.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "print.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "ble.h"
 | 
				
			||||||
 | 
					#include "usart.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					keyboard_config_t ble_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t bluefruit_keyboard_leds = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void bluefruit_serial_send(uint8_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void send_str(const char *str)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint8_t c;
 | 
				
			||||||
 | 
					    while ((c = pgm_read_byte(str++)))
 | 
				
			||||||
 | 
					        uart1_putc(c);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void serial_send(uint8_t data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    dprintf("Sending: %u\n", data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void send_bytes(uint8_t data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    char hexStr[3];
 | 
				
			||||||
 | 
					    sprintf(hexStr, "%02X", data);
 | 
				
			||||||
 | 
					    for (int j = 0; j < sizeof(hexStr) - 1; j++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        uart1_putc(hexStr[j]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					static void bluefruit_trace_header(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    dprintf("+------------------------------------+\n");
 | 
				
			||||||
 | 
					    dprintf("| HID report to Bluefruit via serial |\n");
 | 
				
			||||||
 | 
					    dprintf("+------------------------------------+\n|");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void bluefruit_trace_footer(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    dprintf("|\n+------------------------------------+\n\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void bluefruit_serial_send(uint8_t data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    dprintf(" ");
 | 
				
			||||||
 | 
					    debug_hex8(data);
 | 
				
			||||||
 | 
					    dprintf(" ");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    serial_send(data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*------------------------------------------------------------------*
 | 
				
			||||||
 | 
					 * Host driver
 | 
				
			||||||
 | 
					 *------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t keyboard_leds(void);
 | 
				
			||||||
 | 
					static void send_keyboard(report_keyboard_t *report);
 | 
				
			||||||
 | 
					static void send_mouse(report_mouse_t *report);
 | 
				
			||||||
 | 
					static void send_system(uint16_t data);
 | 
				
			||||||
 | 
					static void send_consumer(uint16_t data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					host_driver_t bluefruit_driver = {
 | 
				
			||||||
 | 
					    keyboard_leds,
 | 
				
			||||||
 | 
					    send_keyboard,
 | 
				
			||||||
 | 
					    send_mouse,
 | 
				
			||||||
 | 
					    send_system,
 | 
				
			||||||
 | 
					    send_consumer};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					host_driver_t null_driver = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t keyboard_leds(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return bluefruit_keyboard_leds;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void send_keyboard(report_keyboard_t *report)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    bluefruit_trace_header();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    dprintf("Sending...\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_str(PSTR("AT+BLEKEYBOARDCODE="));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        send_bytes(report->raw[i]);
 | 
				
			||||||
 | 
					        if (i < (KEYBOARD_EPSIZE - 1))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            send_str(PSTR("-"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_str(PSTR("\r\n"));
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    bluefruit_trace_footer();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void send_mouse(report_mouse_t *report)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    bluefruit_trace_header();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    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);
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    bluefruit_trace_footer();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void send_system(uint16_t data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					+-----------------+-------------------+-------+
 | 
				
			||||||
 | 
					| Consumer Key    | Bit Map           | Hex   |
 | 
				
			||||||
 | 
					+-----------------+-------------------+-------+
 | 
				
			||||||
 | 
					| Home            | 00000001 00000000 | 01 00 |
 | 
				
			||||||
 | 
					| KeyboardLayout  | 00000010 00000000 | 02 00 |
 | 
				
			||||||
 | 
					| Search          | 00000100 00000000 | 04 00 |
 | 
				
			||||||
 | 
					| Snapshot        | 00001000 00000000 | 08 00 |
 | 
				
			||||||
 | 
					| VolumeUp        | 00010000 00000000 | 10 00 |
 | 
				
			||||||
 | 
					| VolumeDown      | 00100000 00000000 | 20 00 |
 | 
				
			||||||
 | 
					| Play/Pause      | 01000000 00000000 | 40 00 |
 | 
				
			||||||
 | 
					| Fast Forward    | 10000000 00000000 | 80 00 |
 | 
				
			||||||
 | 
					| Rewind          | 00000000 00000001 | 00 01 |
 | 
				
			||||||
 | 
					| Scan Next Track | 00000000 00000010 | 00 02 |
 | 
				
			||||||
 | 
					| Scan Prev Track | 00000000 00000100 | 00 04 |
 | 
				
			||||||
 | 
					| Random Play     | 00000000 00001000 | 00 08 |
 | 
				
			||||||
 | 
					| Stop            | 00000000 00010000 | 00 10 |
 | 
				
			||||||
 | 
					+-------------------------------------+-------+
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#define CONSUMER2BLUEFRUIT(usage) \
 | 
				
			||||||
 | 
					    (usage == AUDIO_MUTE ? 0x00e2 : (usage == AUDIO_VOL_UP ? 0x00e9 : (usage == AUDIO_VOL_DOWN ? 0x00ea : (usage == TRANSPORT_NEXT_TRACK ? 0x00b5 : (usage == TRANSPORT_PREV_TRACK ? 0x00b6 : (usage == TRANSPORT_STOP ? 0x00b7 : (usage == TRANSPORT_STOP_EJECT ? 0x00b8 : (usage == TRANSPORT_PLAY_PAUSE ? 0x00b1 : (usage == AL_CC_CONFIG ? 0x0183 : (usage == AL_EMAIL ? 0x018c : (usage == AL_CALCULATOR ? 0x0192 : (usage == AL_LOCAL_BROWSER ? 0x0196 : (usage == AC_SEARCH ? 0x021f : (usage == AC_HOME ? 0x0223 : (usage == AC_BACK ? 0x0224 : (usage == AC_FORWARD ? 0x0225 : (usage == AC_STOP ? 0x0226 : (usage == AC_REFRESH ? 0x0227 : (usage == AC_BOOKMARKS ? 0x022a : 0)))))))))))))))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void send_consumer(uint16_t data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    static uint16_t last_data = 0;
 | 
				
			||||||
 | 
					    if (data == last_data)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    last_data = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint16_t bitmap = CONSUMER2BLUEFRUIT(data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    dprintf("\nData: ");
 | 
				
			||||||
 | 
					    debug_hex16(data);
 | 
				
			||||||
 | 
					    dprintf("; bitmap: ");
 | 
				
			||||||
 | 
					    debug_hex16(bitmap);
 | 
				
			||||||
 | 
					    dprintf("\n");
 | 
				
			||||||
 | 
					    bluefruit_trace_header();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
 | 
				
			||||||
 | 
					    send_bytes((bitmap >> 8) & 0xFF);
 | 
				
			||||||
 | 
					    send_bytes(bitmap & 0xFF);
 | 
				
			||||||
 | 
					    send_str(PSTR("\r\n"));
 | 
				
			||||||
 | 
					#ifdef BLUEFRUIT_TRACE_SERIAL
 | 
				
			||||||
 | 
					    bluefruit_trace_footer();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void usart_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uart1_init(UART_BAUD_SELECT_DOUBLE_SPEED(76800, 8000000L));
 | 
				
			||||||
 | 
					    wait_ms(250);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_str(PSTR("\r\n"));
 | 
				
			||||||
 | 
					    send_str(PSTR("\r\n"));
 | 
				
			||||||
 | 
					    send_str(PSTR("\r\n"));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										36
									
								
								keyboards/bioi/ble.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								keyboards/bioi/ble.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					#include "host_driver.h"
 | 
				
			||||||
 | 
					#include "host.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef union {
 | 
				
			||||||
 | 
					  uint32_t raw;
 | 
				
			||||||
 | 
					  struct {
 | 
				
			||||||
 | 
					    bool init : 1;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					} keyboard_config_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern keyboard_config_t ble_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern host_driver_t bluefruit_driver;
 | 
				
			||||||
 | 
					extern host_driver_t null_driver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void send_str(const char *str);
 | 
				
			||||||
 | 
					void usart_init(void);
 | 
				
			||||||
 | 
					void module_reset(void);
 | 
				
			||||||
							
								
								
									
										76
									
								
								keyboards/bioi/g60/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								keyboards/bioi/g60/config.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VENDOR_ID       0x8101  // 8101 = "BIOI"
 | 
				
			||||||
 | 
					#define PRODUCT_ID      0x6080
 | 
				
			||||||
 | 
					#define DEVICE_VER      0x0001
 | 
				
			||||||
 | 
					#define MANUFACTURER    Basic IO Instruments
 | 
				
			||||||
 | 
					#define PRODUCT         BIOI G60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 5
 | 
				
			||||||
 | 
					#define MATRIX_COLS 14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Keyboard Matrix Assignments
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Change this to how you wired your keyboard
 | 
				
			||||||
 | 
					 * COLS: AVR pins used for columns, left to right
 | 
				
			||||||
 | 
					 * ROWS: AVR pins used for rows, top to bottom
 | 
				
			||||||
 | 
					 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MATRIX_ROW_PINS { E6, B0, F1, F5, F4 }
 | 
				
			||||||
 | 
					#define MATRIX_COL_PINS { F6, F7, B3, C7, C6, B6, B5, D5, B4, D7, D6, D4, D1, D0 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Backlight Setup */
 | 
				
			||||||
 | 
					#define BACKLIGHT_PIN B7
 | 
				
			||||||
 | 
					#define BACKLIGHT_LEVELS 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* COL2ROW or ROW2COL */
 | 
				
			||||||
 | 
					#define DIODE_DIRECTION COL2ROW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
				
			||||||
 | 
					#define DEBOUNCE 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* RGB Underglow */
 | 
				
			||||||
 | 
					#define RGB_DI_PIN B1
 | 
				
			||||||
 | 
					#define RGBLIGHT_ANIMATIONS
 | 
				
			||||||
 | 
					#define RGBLED_NUM 8  // Number of LEDs
 | 
				
			||||||
 | 
					#define RGBLIGHT_HUE_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_SAT_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_VAL_STEP 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
				
			||||||
 | 
					#define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
 | 
					/* Locking resynchronize hack */
 | 
				
			||||||
 | 
					#define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key combination for magic key command */
 | 
				
			||||||
 | 
					#define KEYBOARD_LOCK_ENABLE
 | 
				
			||||||
 | 
					#define MAGIC_KEY_LOCK L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 3
 | 
				
			||||||
 | 
					#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
 | 
				
			||||||
							
								
								
									
										28
									
								
								keyboards/bioi/g60/g60.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								keyboards/bioi/g60/g60.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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 "g60.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void keyboard_pre_init_kb(void) {
 | 
				
			||||||
 | 
					    setPinOutput(F0);
 | 
				
			||||||
 | 
					    writePinHigh(F0);
 | 
				
			||||||
 | 
					    keyboard_pre_init_user();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool led_update_kb(led_t led_state) {
 | 
				
			||||||
 | 
					    if (led_update_user(led_state)) {
 | 
				
			||||||
 | 
					        writePin(F0, !led_state.caps_lock);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								keyboards/bioi/g60/g60.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								keyboards/bioi/g60/g60.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ___ KC_NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_all( \
 | 
				
			||||||
 | 
					      K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K49, \
 | 
				
			||||||
 | 
					      K10,  K11,  K12,  K13,  K14,  K15,  K16,  K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D,       \
 | 
				
			||||||
 | 
					      K20,  K21,  K22,  K23,  K24,  K25,  K26,  K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,       \
 | 
				
			||||||
 | 
					      K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K47,  K3D,  K3C, \
 | 
				
			||||||
 | 
					      K40,  K41,  K42,              K45,                          K4A,  K4B,  K48,  K4C,  K4D  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { K00,  K01,  K02,  K03,   K04,   K05,  K06,   K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D }, \
 | 
				
			||||||
 | 
					    { K10,  K11,  K12,  K13,   K14,   K15,  K16,   K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D }, \
 | 
				
			||||||
 | 
					    { K20,  K21,  K22,  K23,   K24,   K25,  K26,   K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D }, \
 | 
				
			||||||
 | 
					    { K30,  K31,  K32,  K33,   K34,   K35,  K36,   K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D }, \
 | 
				
			||||||
 | 
					    { K40,  K41,  K42,  ___,   ___,   K45,  ___,   K47,  K48,  K49,  K4A,  K4B,  K4C,  K4D }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										84
									
								
								keyboards/bioi/g60/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								keyboards/bioi/g60/info.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "keyboard_name": "BIOI G60",
 | 
				
			||||||
 | 
					    "url": "https://scottywei.github.io/bioi-g60ble/",
 | 
				
			||||||
 | 
					    "maintainer": "scottywei",
 | 
				
			||||||
 | 
					    "width": 15,
 | 
				
			||||||
 | 
					    "height": 5,
 | 
				
			||||||
 | 
					    "layouts": {
 | 
				
			||||||
 | 
					        "LAYOUT_all": {
 | 
				
			||||||
 | 
					            "layout": [
 | 
				
			||||||
 | 
					                {"x": 0, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 1, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 2, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 3, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 4, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 5, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 6, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 7, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 8, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 9, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 11, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 12, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 13, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					                {"x": 1.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 3.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 4.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 5.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 6.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 7.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 8.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 9.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 10.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 11.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 12.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 13.5, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 2, "w": 1.75},
 | 
				
			||||||
 | 
					                {"x": 1.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 2.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 4.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 5.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 6.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 7.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 8.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 9.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 10.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 11.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 12.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 13.75, "y": 2, "w": 1.25},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 1, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 2, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 3, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 4, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 5, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 6, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 7, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 8, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 9, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 11, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 12, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 13, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 3},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 1.25, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 4, "w": 6.25},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 11, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 12, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 13, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 4}
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										51
									
								
								keyboards/bioi/g60/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								keyboards/bioi/g60/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/* Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base Layer
 | 
				
			||||||
 | 
					    LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_GRV,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
 | 
				
			||||||
 | 
					        KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_NONUS_BSLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, MO(1),
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_APP, KC_RCTRL),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
 | 
				
			||||||
 | 
					        RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_LSFT, _______, RGB_TOG, RGB_MOD, BL_TOGG, BL_STEP, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										51
									
								
								keyboards/bioi/g60/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								keyboards/bioi/g60/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/* Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base Layer
 | 
				
			||||||
 | 
					    [0] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_GRV,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
 | 
				
			||||||
 | 
					        KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_NONUS_BSLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, MO(1),
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_APP, KC_RCTRL),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    [1] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
 | 
				
			||||||
 | 
					        RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_LSFT, _______, RGB_TOG, RGB_MOD, BL_TOGG, BL_STEP, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [2] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [3] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboards/bioi/g60/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/bioi/g60/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					VIA_ENABLE = yes
 | 
				
			||||||
							
								
								
									
										15
									
								
								keyboards/bioi/g60/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								keyboards/bioi/g60/readme.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					# Basic I/O Instruments G60
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Inspired by the design of the Cherry G80 series, the G60 is a 60% USB/Bluetooth dual-mode custom keyboard.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Keyboard Maintainer: [Basic I/O Instruments (Scott Wei)](https://github.com/scottywei)
 | 
				
			||||||
 | 
					* Hardware Supported: [BIOI G60BLE PCB](https://scottywei.github.io/bioi-g60ble/)
 | 
				
			||||||
 | 
					* Hardware Availability: [BIOI Taobao Store](https://item.taobao.com/item.htm?&id=611933113439) / [Playkeyboard](https://play-keyboard.store/products/bioi-g60ble-pcb-default-version-custom-60-bluetooth-pcb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make example for this keyboard (after setting up your build environment):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    make bioi/g60:default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
 | 
				
			||||||
							
								
								
									
										36
									
								
								keyboards/bioi/g60/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								keyboards/bioi/g60/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					# MCU name
 | 
				
			||||||
 | 
					MCU = atmega32u4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Processor frequency
 | 
				
			||||||
 | 
					F_CPU = 8000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Bootloader selection
 | 
				
			||||||
 | 
					BOOTLOADER = qmk-dfu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRC += ../usart.c \
 | 
				
			||||||
 | 
					       ../ble.c \
 | 
				
			||||||
 | 
					       ../main.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPT_DEFS += -DPROTOCOL_BLE
 | 
				
			||||||
 | 
					OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSART1_ENABLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   change yes to no to disable
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE = no        # Mouse keys
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE = yes       # Audio control and System control
 | 
				
			||||||
 | 
					CONSOLE_ENABLE = no         # Console for debug
 | 
				
			||||||
 | 
					COMMAND_ENABLE = yes        # Commands for debug and configuration
 | 
				
			||||||
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
 | 
					NKRO_ENABLE = no            # USB Nkey Rollover
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 | 
				
			||||||
 | 
					BLUETOOTH_ENABLE = no       # Enable Bluetooth
 | 
				
			||||||
 | 
					AUDIO_ENABLE = no           # Audio output
 | 
				
			||||||
 | 
					LTO_ENABLE = yes            # Reduce firmware size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VIA_ENABLE = yes            # VIA support should be enabled here due to the main() loop will be compiled first.
 | 
				
			||||||
							
								
								
									
										389
									
								
								keyboards/bioi/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										389
									
								
								keyboards/bioi/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,389 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/pgmspace.h>
 | 
				
			||||||
 | 
					#include <util/delay.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "report.h"
 | 
				
			||||||
 | 
					#include "host.h"
 | 
				
			||||||
 | 
					#include "host_driver.h"
 | 
				
			||||||
 | 
					#include "keyboard.h"
 | 
				
			||||||
 | 
					#include "action.h"
 | 
				
			||||||
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					#include "sendchar.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#include "print.h"
 | 
				
			||||||
 | 
					#ifdef SLEEP_LED_ENABLE
 | 
				
			||||||
 | 
					#include "sleep_led.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include "suspend.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "usb_descriptor.h"
 | 
				
			||||||
 | 
					#include "lufa.h"
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					#include <util/atomic.h>
 | 
				
			||||||
 | 
					#include "outputselect.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef NKRO_ENABLE
 | 
				
			||||||
 | 
					#include "keycode_config.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern keymap_config_t keymap_config;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef AUDIO_ENABLE
 | 
				
			||||||
 | 
					#include <audio.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BLUETOOTH_ENABLE
 | 
				
			||||||
 | 
					#ifdef MODULE_ADAFRUIT_BLE
 | 
				
			||||||
 | 
					#include "adafruit_ble.h"
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#include "bluetooth.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef VIRTSER_ENABLE
 | 
				
			||||||
 | 
					#include "virtser.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE)
 | 
				
			||||||
 | 
					#include "rgblight.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef MIDI_ENABLE
 | 
				
			||||||
 | 
					#include "qmk_midi.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RAW_ENABLE
 | 
				
			||||||
 | 
					#include "raw_hid.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "ble.h"
 | 
				
			||||||
 | 
					#include "usart.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <avr/power.h>
 | 
				
			||||||
 | 
					#include <avr/sleep.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool force_usb = false; //Reserved for FORCE USB Mode function.
 | 
				
			||||||
 | 
					bool force_ble = false; //Reserved for FORCE USB Mode function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool usb_connected = false;
 | 
				
			||||||
 | 
					bool ble_enabled = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t kb_idle_timer = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool usb_state_sent = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t USB_DeviceLastState = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RAW_ENABLE
 | 
				
			||||||
 | 
					/** \brief Raw HID Task
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * FIXME: Needs doc
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void raw_hid_task(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Create a temporary buffer to hold the read in data from the host
 | 
				
			||||||
 | 
					    uint8_t data[RAW_EPSIZE];
 | 
				
			||||||
 | 
					    bool data_read = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Device must be connected and configured for the task to run
 | 
				
			||||||
 | 
					    if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Endpoint_SelectEndpoint(RAW_OUT_EPNUM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Check to see if a packet has been sent from the host
 | 
				
			||||||
 | 
					    if (Endpoint_IsOUTReceived())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Check to see if the packet contains data
 | 
				
			||||||
 | 
					        if (Endpoint_IsReadWriteAllowed())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /* Read data */
 | 
				
			||||||
 | 
					            Endpoint_Read_Stream_LE(data, sizeof(data), NULL);
 | 
				
			||||||
 | 
					            data_read = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Finalize the stream transfer to receive the last packet
 | 
				
			||||||
 | 
					        Endpoint_ClearOUT();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (data_read)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            raw_hid_receive(data, sizeof(data));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void setup_mcu(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /* Disable watchdog if enabled by bootloader/fuses */
 | 
				
			||||||
 | 
					    MCUSR &= ~(1 << WDRF);
 | 
				
			||||||
 | 
					    wdt_disable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CLKPR = (1 << CLKPCE);
 | 
				
			||||||
 | 
					    CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void setup_usb(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Leonardo needs. Without this USB device is not recognized.
 | 
				
			||||||
 | 
					    USB_Disable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    USB_Init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // for Console_Task
 | 
				
			||||||
 | 
					    USB_Device_EnableSOFEvents();
 | 
				
			||||||
 | 
					    print_set_sendchar(sendchar);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void power_saving(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    power_adc_disable();
 | 
				
			||||||
 | 
					    power_usart0_disable();
 | 
				
			||||||
 | 
					    power_spi_disable();
 | 
				
			||||||
 | 
					    power_twi_disable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    USBCON |= (1 << FRZCLK); // Freeze the USB Clock
 | 
				
			||||||
 | 
					    PLLCSR &= ~(1 << PLLE);  // Disable the USB Clock (PPL)
 | 
				
			||||||
 | 
					    USBCON &= ~(1 << USBE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void power_recover(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    USBCON |= (1 << USBE);
 | 
				
			||||||
 | 
					    PLLCSR |= (1 << PLLE);    // Resume the USB Clock (PPL)
 | 
				
			||||||
 | 
					    USBCON &= ~(1 << FRZCLK); // Resume the USB Clock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    power_adc_enable();
 | 
				
			||||||
 | 
					    power_usart0_enable();
 | 
				
			||||||
 | 
					    power_spi_enable();
 | 
				
			||||||
 | 
					    power_twi_enable();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ble_task_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    kb_idle_timer = timer_read32();  //Mark current time, reserved for further usage;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ble_task(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (USB_DeviceLastState != USB_DeviceState)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        usb_state_sent = false;
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					        send_str(PSTR("USB State Changed\r\n"));
 | 
				
			||||||
 | 
					        if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            send_str(PSTR("USB State Unattached\r\n"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        if (USB_DeviceState == DEVICE_STATE_Powered)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					            send_str(PSTR("USB State Powered\r\n"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					            power_recover();
 | 
				
			||||||
 | 
					            host_set_driver(&null_driver);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					        if ((USB_DeviceState == DEVICE_STATE_Default))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            send_str(PSTR("USB State Default\r\n"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if ((USB_DeviceState == DEVICE_STATE_Addressed))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            send_str(PSTR("USB State Addressed\r\n"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (USB_DeviceState == DEVICE_STATE_Configured)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            send_str(PSTR("USB State Configured\r\n"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (USB_DeviceState > DEVICE_STATE_Unattached)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					        if (!usb_state_sent)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State Stopped at Unattached\r\n"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (USB_DeviceState == DEVICE_STATE_Powered)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State Stopped at Powered\r\n"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if ((USB_DeviceState == DEVICE_STATE_Default))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State Stopped at Default\r\n"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if ((USB_DeviceState == DEVICE_STATE_Addressed))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State Stopped at Addressed\r\n"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (USB_DeviceState == DEVICE_STATE_Configured)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State Stopped at Configured\r\n"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        if (USB_DeviceState == DEVICE_STATE_Unattached)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (host_get_driver() && host_get_driver() != &bluefruit_driver)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State stopped at Unattached\r\n"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					                ble_task_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                force_usb = 0;
 | 
				
			||||||
 | 
					                usb_connected = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //Reinit USB to prepare for next connection.
 | 
				
			||||||
 | 
					                USB_Init();
 | 
				
			||||||
 | 
					                USB_Detach();
 | 
				
			||||||
 | 
					                USB_Attach();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					                send_str(PSTR("Loading &bluefruit_driver\r\n"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					                host_set_driver(&bluefruit_driver);
 | 
				
			||||||
 | 
					                clear_keyboard();
 | 
				
			||||||
 | 
					                power_saving();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                //Do nothing if USB is unattached and the driver is &bluefruit_driver
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (USB_DeviceState == DEVICE_STATE_Configured)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (host_get_driver() && host_get_driver() != &lufa_driver)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					                send_str(PSTR("USB State stopped at Configured\r\n"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					                power_recover();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                usb_connected = 1;
 | 
				
			||||||
 | 
					                ble_enabled = 0;
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					                send_str(PSTR("Loading &lufa_driver\r\n"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					                host_set_driver(&lufa_driver);
 | 
				
			||||||
 | 
					                clear_keyboard();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                //Do nothing if the driver is &lufa_driver
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        usb_state_sent = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    USB_DeviceLastState = USB_DeviceState;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Use a custom main() function because the task logic is different from the common one.
 | 
				
			||||||
 | 
					int main(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef MIDI_ENABLE
 | 
				
			||||||
 | 
					    setup_midi();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setup_mcu();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    keyboard_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setup_usb();
 | 
				
			||||||
 | 
					    sei();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(MODULE_ADAFRUIT_EZKEY) || defined(MODULE_RN42)
 | 
				
			||||||
 | 
					    serial_init();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* wait for USB startup to get ready for debug output */
 | 
				
			||||||
 | 
					    uint8_t timeout = 255; // timeout when USB is not available(Bluetooth)
 | 
				
			||||||
 | 
					    while (timeout-- && USB_DeviceState != DEVICE_STATE_Configured)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wait_ms(4);
 | 
				
			||||||
 | 
					#if defined(INTERRUPT_CONTROL_ENDPOINT)
 | 
				
			||||||
 | 
					        ;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        USB_USBTask();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print("\nUSB init\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    keyboard_init();
 | 
				
			||||||
 | 
					    host_set_driver(&lufa_driver);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    backlight_disable();
 | 
				
			||||||
 | 
					    //host_set_driver(&lufa_driver);
 | 
				
			||||||
 | 
					    print("Keyboard initialized.\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Init Hardware UART
 | 
				
			||||||
 | 
					    usart_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef BLE_DEBUG
 | 
				
			||||||
 | 
					    send_str(PSTR("Keyboard has been setup up\r\n"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (usb_connected)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        send_str(PSTR("usb_connected=1\r\n"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        send_str(PSTR("usb_connected=0\r\n"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef SLEEP_LED_ENABLE
 | 
				
			||||||
 | 
					    sleep_led_init();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef VIRTSER_ENABLE
 | 
				
			||||||
 | 
					    virtser_init();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ble_task();
 | 
				
			||||||
 | 
					        keyboard_task();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef RAW_ENABLE
 | 
				
			||||||
 | 
					        raw_hid_task();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(RGBLIGHT_ANIMATIONS) && defined(RGBLIGHT_ENABLE)
 | 
				
			||||||
 | 
					        rgblight_task();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(INTERRUPT_CONTROL_ENDPOINT)
 | 
				
			||||||
 | 
					        USB_USBTask();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										77
									
								
								keyboards/bioi/morgan65/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								keyboards/bioi/morgan65/config.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VENDOR_ID       0x8101  // 8101 = "BIOI"
 | 
				
			||||||
 | 
					#define PRODUCT_ID      0x6581
 | 
				
			||||||
 | 
					#define DEVICE_VER      0x0001
 | 
				
			||||||
 | 
					#define MANUFACTURER    Basic IO Instruments
 | 
				
			||||||
 | 
					#define PRODUCT         BIOI MORGAN65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 5
 | 
				
			||||||
 | 
					#define MATRIX_COLS 14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Keyboard Matrix Assignments
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Change this to how you wired your keyboard
 | 
				
			||||||
 | 
					 * COLS: AVR pins used for columns, left to right
 | 
				
			||||||
 | 
					 * ROWS: AVR pins used for rows, top to bottom
 | 
				
			||||||
 | 
					 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MATRIX_ROW_PINS { E6, C6, F4, B2, D4 }
 | 
				
			||||||
 | 
					#define MATRIX_COL_PINS { F5, F6, F7, C7, B0, B7, B5, D5, B4, D7, D6, D1, D0, B3 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//#define QMK_KEYS_PER_SCAN 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Backlight Setup */
 | 
				
			||||||
 | 
					#define BACKLIGHT_PIN B6
 | 
				
			||||||
 | 
					#define BACKLIGHT_LEVELS 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* COL2ROW or ROW2COL */
 | 
				
			||||||
 | 
					#define DIODE_DIRECTION COL2ROW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
				
			||||||
 | 
					#define DEBOUNCE 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* RGB Underglow */
 | 
				
			||||||
 | 
					#define RGB_DI_PIN B1
 | 
				
			||||||
 | 
					#define RGBLIGHT_ANIMATIONS
 | 
				
			||||||
 | 
					#define RGBLED_NUM 8  // Number of LEDs
 | 
				
			||||||
 | 
					#define RGBLIGHT_HUE_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_SAT_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_VAL_STEP 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
				
			||||||
 | 
					#define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
 | 
					/* Locking resynchronize hack */
 | 
				
			||||||
 | 
					#define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key combination for magic key command */
 | 
				
			||||||
 | 
					#define KEYBOARD_LOCK_ENABLE
 | 
				
			||||||
 | 
					#define MAGIC_KEY_LOCK L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 1
 | 
				
			||||||
							
								
								
									
										88
									
								
								keyboards/bioi/morgan65/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								keyboards/bioi/morgan65/info.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "keyboard_name": "Morgan65",
 | 
				
			||||||
 | 
					    "url": "",
 | 
				
			||||||
 | 
					    "maintainer": "scottywei",
 | 
				
			||||||
 | 
					    "width": 16,
 | 
				
			||||||
 | 
					    "height": 5,
 | 
				
			||||||
 | 
					    "layouts": {
 | 
				
			||||||
 | 
					        "LAYOUT_all": {
 | 
				
			||||||
 | 
					          "layout": [
 | 
				
			||||||
 | 
					              {"x": 0, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 1, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 2, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 3, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 4, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 5, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 6, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 7, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 8, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 9, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 11, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 12, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 13, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 15, "y": 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					                {"x": 1.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 3.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 4.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 5.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 6.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 7.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 8.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 9.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 10.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 11.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 12.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 13.5, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					                {"x": 15, "y": 1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 2, "w": 1.75},
 | 
				
			||||||
 | 
					                {"x": 1.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 2.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 4.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 5.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 6.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 7.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 8.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 9.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 10.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 11.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 12.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 13.75, "y": 2, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 15, "y": 2},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 3, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 1.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 2.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 3.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 4.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 5.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 6.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 7.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 8.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 9.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 10.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 11.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 12.25, "y": 3, "w": 1.75},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 15, "y": 3},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 1.25, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 4, "w": 6.25},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 11.25, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 13, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 15, "y": 4}
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										51
									
								
								keyboards/bioi/morgan65/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								keyboards/bioi/morgan65/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/* Copyright 2020 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base Layer
 | 
				
			||||||
 | 
					    [0] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_GRV, KC_F1,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_F2,
 | 
				
			||||||
 | 
					        KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT, KC_F3,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_NONUS_BSLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_F4,
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    [1] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
 | 
				
			||||||
 | 
					        RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_LSFT, _______, RGB_TOG, RGB_MOD, BL_TOGG, BL_STEP, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [2] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [3] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										51
									
								
								keyboards/bioi/morgan65/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								keyboards/bioi/morgan65/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/* Copyright 2020 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base Layer
 | 
				
			||||||
 | 
					    [0] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_GRV, KC_F1,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_F2,
 | 
				
			||||||
 | 
					        KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT, KC_F3,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_NONUS_BSLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_F4,
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    [1] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
 | 
				
			||||||
 | 
					        RESET, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        KC_LSFT, _______, RGB_TOG, RGB_MOD, BL_TOGG, BL_STEP, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [2] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [3] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboards/bioi/morgan65/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/bioi/morgan65/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					VIA_ENABLE = yes
 | 
				
			||||||
							
								
								
									
										28
									
								
								keyboards/bioi/morgan65/morgan65.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								keyboards/bioi/morgan65/morgan65.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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 "morgan65.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void keyboard_pre_init_kb(void) {
 | 
				
			||||||
 | 
					    setPinOutput(F0);
 | 
				
			||||||
 | 
					    writePinHigh(F0);
 | 
				
			||||||
 | 
					    keyboard_pre_init_user();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool led_update_kb(led_t led_state) {
 | 
				
			||||||
 | 
					    if (led_update_user(led_state)) {
 | 
				
			||||||
 | 
					        writePin(F0, !led_state.caps_lock);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								keyboards/bioi/morgan65/morgan65.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								keyboards/bioi/morgan65/morgan65.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ___ KC_NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_all( \
 | 
				
			||||||
 | 
					      K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K49,  K43,    \
 | 
				
			||||||
 | 
					      K10,  K11,  K12,  K13,  K14,  K15,  K16,  K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D,        K44,    \
 | 
				
			||||||
 | 
					      K20,  K21,  K22,  K23,  K24,  K25,  K26,  K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,        K47,    \
 | 
				
			||||||
 | 
					      K30,  K31,  K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K3C,        K3D,  K48,    \
 | 
				
			||||||
 | 
					      K40,  K41,  K42,              K45,                    K46,  K4A,              K4B,  K4C,  K4D     \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { K00,  K01,  K02,  K03,   K04,   K05,  K06,   K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D }, \
 | 
				
			||||||
 | 
					    { K10,  K11,  K12,  K13,   K14,   K15,  K16,   K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D }, \
 | 
				
			||||||
 | 
					    { K20,  K21,  K22,  K23,   K24,   K25,  K26,   K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D }, \
 | 
				
			||||||
 | 
					    { K30,  K31,  K32,  K33,   K34,   K35,  K36,   K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D }, \
 | 
				
			||||||
 | 
					    { K40,  K41,  K42,  K43,   K44,   K45,  K46,   K47,  K48,  K49,  K4A,  K4B,  K4C,  K4D }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								keyboards/bioi/morgan65/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								keyboards/bioi/morgan65/readme.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					# Morgan65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Morgan65 is a 65% custom keyboard by DT Studio, powered by an USB/Bluetooth dual-mode PCB from Basic I/O Instruments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Keyboard Maintainer: [Basic I/O Instruments (Scott Wei)](https://github.com/scottywei)
 | 
				
			||||||
 | 
					* Hardware Supported: Morgan65 PCB
 | 
				
			||||||
 | 
					* Hardware Availability: N/A
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make example for this keyboard (after setting up your build environment):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    make bioi/morgan65:default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
 | 
				
			||||||
							
								
								
									
										36
									
								
								keyboards/bioi/morgan65/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								keyboards/bioi/morgan65/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					# MCU name
 | 
				
			||||||
 | 
					MCU = atmega32u4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Processor frequency
 | 
				
			||||||
 | 
					F_CPU = 8000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Bootloader selection
 | 
				
			||||||
 | 
					BOOTLOADER = qmk-dfu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SRC += ../usart.c \
 | 
				
			||||||
 | 
					       ../ble.c \
 | 
				
			||||||
 | 
					       ../main.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPT_DEFS += -DPROTOCOL_BLE
 | 
				
			||||||
 | 
					OPT_DEFS += -DUART_RX1_BUFFER_SIZE=16 -DUART_TX1_BUFFER_SIZE=16
 | 
				
			||||||
 | 
					OPT_DEFS += -DUSART1_ENABLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   change yes to no to disable
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE = no        # Mouse keys
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE = yes       # Audio control and System control
 | 
				
			||||||
 | 
					CONSOLE_ENABLE = no         # Console for debug
 | 
				
			||||||
 | 
					COMMAND_ENABLE = yes        # Commands for debug and configuration
 | 
				
			||||||
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
 | 
					NKRO_ENABLE = no            # USB Nkey Rollover
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 | 
				
			||||||
 | 
					BLUETOOTH_ENABLE = no       # Enable Bluetooth
 | 
				
			||||||
 | 
					AUDIO_ENABLE = no           # Audio output
 | 
				
			||||||
 | 
					LTO_ENABLE = yes            # Reduce firmware size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VIA_ENABLE = yes            # VIA support should be enabled here due to the main() loop will be compiled first.
 | 
				
			||||||
							
								
								
									
										74
									
								
								keyboards/bioi/s65/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								keyboards/bioi/s65/config.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "config_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
 | 
					#define VENDOR_ID       0x8101  // 8101 = "BIOI"
 | 
				
			||||||
 | 
					#define PRODUCT_ID      0x5365    // "S"65
 | 
				
			||||||
 | 
					#define DEVICE_VER      0x0001
 | 
				
			||||||
 | 
					#define MANUFACTURER    Basic IO Instruments
 | 
				
			||||||
 | 
					#define PRODUCT         BIOI S65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 5
 | 
				
			||||||
 | 
					#define MATRIX_COLS 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Keyboard Matrix Assignments
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Change this to how you wired your keyboard
 | 
				
			||||||
 | 
					 * COLS: AVR pins used for columns, left to right
 | 
				
			||||||
 | 
					 * ROWS: AVR pins used for rows, top to bottom
 | 
				
			||||||
 | 
					 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MATRIX_ROW_PINS { D2, D0, D1, F7, D6 }
 | 
				
			||||||
 | 
					#define MATRIX_COL_PINS { F1, B3, F4, F5, F6, E6, C7, B2, B1, C6, B6, B5, B4, D7, D4, D5 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Backlight Setup */
 | 
				
			||||||
 | 
					#define BACKLIGHT_PIN B6
 | 
				
			||||||
 | 
					#define BACKLIGHT_LEVELS 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* COL2ROW or ROW2COL */
 | 
				
			||||||
 | 
					#define DIODE_DIRECTION COL2ROW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
				
			||||||
 | 
					#define DEBOUNCE 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* RGB Underglow */
 | 
				
			||||||
 | 
					#define RGB_DI_PIN D3
 | 
				
			||||||
 | 
					#define RGBLIGHT_ANIMATIONS
 | 
				
			||||||
 | 
					#define RGBLED_NUM 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_HUE_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_SAT_STEP 8
 | 
				
			||||||
 | 
					#define RGBLIGHT_VAL_STEP 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
				
			||||||
 | 
					#define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
 | 
					/* Locking resynchronize hack */
 | 
				
			||||||
 | 
					#define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key combination for magic key command */
 | 
				
			||||||
 | 
					#define KEYBOARD_LOCK_ENABLE
 | 
				
			||||||
 | 
					#define MAGIC_KEY_LOCK L
 | 
				
			||||||
							
								
								
									
										94
									
								
								keyboards/bioi/s65/info.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								keyboards/bioi/s65/info.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,94 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "keyboard_name": "BIOI S65",
 | 
				
			||||||
 | 
					    "url": "",
 | 
				
			||||||
 | 
					    "maintainer": "scottywei",
 | 
				
			||||||
 | 
					    "width": 18.25,
 | 
				
			||||||
 | 
					    "height": 5,
 | 
				
			||||||
 | 
					    "layouts": {
 | 
				
			||||||
 | 
					        "LAYOUT_all": {
 | 
				
			||||||
 | 
					            "layout": [
 | 
				
			||||||
 | 
					                {"x": 0, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 1, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 2, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 3, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 4, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 5, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 6, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 7, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 8, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 9, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 11, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 12, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 13, "y": 0, "w": 2},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 15.25, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 16.25, "y": 0},
 | 
				
			||||||
 | 
					                {"x": 17.25, "y": 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					                {"x": 1.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 3.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 4.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 5.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 6.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 7.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 8.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 9.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 10.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 11.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 12.5, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 13.5, "y": 1, "w": 1.5},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 15.25, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 16.25, "y": 1},
 | 
				
			||||||
 | 
					                {"x": 17.25, "y": 1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 2, "w": 1.75},
 | 
				
			||||||
 | 
					                {"x": 1.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 2.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 4.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 5.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 6.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 7.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 8.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 9.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 10.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 11.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 12.75, "y": 2},
 | 
				
			||||||
 | 
					                {"x": 13.75, "y": 2, "w": 1.25},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 3, "w": 2.25},
 | 
				
			||||||
 | 
					                {"x": 2.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 3.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 4.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 5.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 6.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 7.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 8.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 9.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 10.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 11.25, "y": 3},
 | 
				
			||||||
 | 
					                {"x": 12.25, "y": 3, "w": 1.75},
 | 
				
			||||||
 | 
					                {"x": 14, "y": 3},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 16.25, "y": 3},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 0, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 1.25, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 2.5, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 3.75, "y": 4, "w": 6.25},
 | 
				
			||||||
 | 
					                {"x": 10, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 11.25, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 12.5, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					                {"x": 13.75, "y": 4, "w": 1.25},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                {"x": 15.25, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 16.25, "y": 4},
 | 
				
			||||||
 | 
					                {"x": 17.25, "y": 4}
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								keyboards/bioi/s65/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								keyboards/bioi/s65/keymaps/default/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					/* Copyright 2020 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base LayerKC_W
 | 
				
			||||||
 | 
					    [0] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_INS, KC_HOME, KC_PGUP,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    [1] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_SLCK, KC_PAUS,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										51
									
								
								keyboards/bioi/s65/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								keyboards/bioi/s65/keymaps/via/keymap.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					/* Copyright 2020 Basic I/O Instruments(Scott Wei) <scot.wei@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 QMK_KEYBOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 0: Base LayerKC_W
 | 
				
			||||||
 | 
					    [0] = LAYOUT_all(
 | 
				
			||||||
 | 
					        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE, KC_INS, KC_HOME, KC_PGUP,
 | 
				
			||||||
 | 
					        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
 | 
				
			||||||
 | 
					        KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NONUS_HASH, KC_ENT,
 | 
				
			||||||
 | 
					        KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
 | 
				
			||||||
 | 
					        KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 1: Function Layer
 | 
				
			||||||
 | 
					    [1] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSCR, KC_SLCK, KC_PAUS,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [2] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [3] = LAYOUT_all(
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
 | 
				
			||||||
 | 
					        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										1
									
								
								keyboards/bioi/s65/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/bioi/s65/keymaps/via/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					VIA_ENABLE = yes
 | 
				
			||||||
							
								
								
									
										15
									
								
								keyboards/bioi/s65/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								keyboards/bioi/s65/readme.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					# S65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A tenkeyless keyboard without the F row.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Keyboard Maintainer: [Basic I/O Instruments (Scott Wei)](https://github.com/scottywei)
 | 
				
			||||||
 | 
					* Hardware Supported: S65 PCB
 | 
				
			||||||
 | 
					* Hardware Availability: Coming soon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make example for this keyboard (after setting up your build environment):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    make bioi/s65:default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
 | 
				
			||||||
							
								
								
									
										23
									
								
								keyboards/bioi/s65/rules.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								keyboards/bioi/s65/rules.mk
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					# MCU name
 | 
				
			||||||
 | 
					MCU = atmega32u4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Bootloader selection
 | 
				
			||||||
 | 
					BOOTLOADER = qmk-dfu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Options
 | 
				
			||||||
 | 
					#   change yes to no to disable
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
 | 
				
			||||||
 | 
					MOUSEKEY_ENABLE = no        # Mouse keys
 | 
				
			||||||
 | 
					EXTRAKEY_ENABLE = yes       # Audio control and System control
 | 
				
			||||||
 | 
					CONSOLE_ENABLE = no         # Console for debug
 | 
				
			||||||
 | 
					COMMAND_ENABLE = yes        # Commands for debug and configuration
 | 
				
			||||||
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
 | 
					SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
 | 
					NKRO_ENABLE = yes           # USB Nkey Rollover
 | 
				
			||||||
 | 
					BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 | 
				
			||||||
 | 
					RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 | 
				
			||||||
 | 
					BLUETOOTH_ENABLE = no       # Enable Bluetooth
 | 
				
			||||||
 | 
					AUDIO_ENABLE = no           # Audio output
 | 
				
			||||||
 | 
					LTO_ENABLE = yes            # Reduce firmware size
 | 
				
			||||||
							
								
								
									
										27
									
								
								keyboards/bioi/s65/s65.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								keyboards/bioi/s65/s65.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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 "s65.h"
 | 
				
			||||||
 | 
					void keyboard_pre_init_kb(void) {
 | 
				
			||||||
 | 
					    setPinOutput(F0);
 | 
				
			||||||
 | 
					    writePinHigh(F0);
 | 
				
			||||||
 | 
					    keyboard_pre_init_user();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool led_update_kb(led_t led_state) {
 | 
				
			||||||
 | 
					    if (led_update_user(led_state)) {
 | 
				
			||||||
 | 
					        writePin(F0, !led_state.caps_lock);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								keyboards/bioi/s65/s65.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								keyboards/bioi/s65/s65.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2019 Basic I/O Instruments(Scott Wei) <scot.wei@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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "quantum.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ___ KC_NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LAYOUT_all( \
 | 
				
			||||||
 | 
					      K00,  K01,  K02,  K03,  K04,  K05,  K06,  K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K0E,  K0F,  K2F,    \
 | 
				
			||||||
 | 
					      K10,  K11,  K12,  K13,  K14,  K15,  K16,  K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D,  K1E,  K1F,  K2E,   \
 | 
				
			||||||
 | 
					      K20,  K21,  K22,  K23,  K24,  K25,  K26,  K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,                     \
 | 
				
			||||||
 | 
					      K30,        K32,  K33,  K34,  K35,  K36,  K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D,        K3E,         \
 | 
				
			||||||
 | 
					      K40,  K41,  K42,                    K46,              K49,  K4A,  K4B,  K4C,        K4D,  K4E,  K4F    \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { K00,  K01,  K02,  K03,   K04,   K05,  K06,   K07,  K08,  K09,  K0A,  K0B,  K0C,  K0D,  K0E,  K0F }, \
 | 
				
			||||||
 | 
					    { K10,  K11,  K12,  K13,   K14,   K15,  K16,   K17,  K18,  K19,  K1A,  K1B,  K1C,  K1D,  K1E,  K1F }, \
 | 
				
			||||||
 | 
					    { K20,  K21,  K22,  K23,   K24,   K25,  K26,   K27,  K28,  K29,  K2A,  K2B,  K2C,  K2D,  K2E,  K2F }, \
 | 
				
			||||||
 | 
					    { K30,  ___,  K32,  K33,   K34,   K35,  K36,   K37,  K38,  K39,  K3A,  K3B,  K3C,  K3D,  K3E,  ___ }, \
 | 
				
			||||||
 | 
					    { K40,  K41,  K42,  ___,   ___,   ___,  K46,   ___,  ___,  K49,  K4A,  K4B,  K4C,  K4D,  K4E,  K4F }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1522
									
								
								keyboards/bioi/usart.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1522
									
								
								keyboards/bioi/usart.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										436
									
								
								keyboards/bioi/usart.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								keyboards/bioi/usart.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,436 @@
 | 
				
			|||||||
 | 
					#ifndef USART_H
 | 
				
			||||||
 | 
					#define USART_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/************************************************************************
 | 
				
			||||||
 | 
					Title:    Interrupt UART library with receive/transmit circular buffers
 | 
				
			||||||
 | 
					Author:   Andy Gock
 | 
				
			||||||
 | 
					Software: AVR-GCC 4.1, AVR Libc 1.4
 | 
				
			||||||
 | 
					Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz
 | 
				
			||||||
 | 
					License:  GNU General Public License 
 | 
				
			||||||
 | 
					Usage:    see README.md and Doxygen manual
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Based on original library by Peter Fluery, Tim Sharpe, Nicholas Zambetti.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://github.com/andygock/avr-uart
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LICENSE:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Copyright (C) 2012 Andy Gock
 | 
				
			||||||
 | 
						Copyright (C) 2006 Peter Fleury
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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
 | 
				
			||||||
 | 
						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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/************************************************************************
 | 
				
			||||||
 | 
					uart_available, uart_flush, uart1_available, and uart1_flush functions
 | 
				
			||||||
 | 
					were adapted from the Arduino HardwareSerial.h library by Tim Sharpe on 
 | 
				
			||||||
 | 
					11 Jan 2009.  The license info for HardwareSerial.h is as follows:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  HardwareSerial.h - Hardware serial library for Wiring
 | 
				
			||||||
 | 
					  Copyright (c) 2006 Nicholas Zambetti.  All right reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This library is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					  modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
 | 
					  License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					  version 2.1 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This library 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
 | 
				
			||||||
 | 
					  Lesser General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  You should have received a copy of the GNU Lesser General Public
 | 
				
			||||||
 | 
					  License along with this library; if not, write to the Free Software
 | 
				
			||||||
 | 
					  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 | 
					************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 
 | 
				
			||||||
 | 
					 *  @defgroup avr-uart UART Library
 | 
				
			||||||
 | 
					 *  @code #include <uart.h> @endcode
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *  @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers.
 | 
				
			||||||
 | 
					 *  @see README.md
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This library can be used to transmit and receive data through the built in UART. 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  An interrupt is generated when the UART has finished transmitting or
 | 
				
			||||||
 | 
					 *  receiving a byte. The interrupt handling routines use circular buffers
 | 
				
			||||||
 | 
					 *  for buffering received and transmitted data.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  The UART_RXn_BUFFER_SIZE and UART_TXn_BUFFER_SIZE constants define
 | 
				
			||||||
 | 
					 *  the size of the circular buffers in bytes. Note that these constants must be a power of 2.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  You need to define these buffer sizes as a symbol in your compiler settings or in uart.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  See README.md for more detailed information. Especially that relating to symbols: USARTn_ENABLED and USARTn_LARGE_BUFFER
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @author Andy Gock <andy@gock.net>
 | 
				
			||||||
 | 
					 *  @note Based on Atmel Application Note AVR306 and original library by Peter Fleury and Tim Sharpe.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					/**@{*/
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
 | 
				
			||||||
 | 
					#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * constants and macros
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Enable USART 1, 2, 3 as required */
 | 
				
			||||||
 | 
					/* Can be defined in compiler symbol setup with -D option (preferred) */
 | 
				
			||||||
 | 
					#ifndef USART0_ENABLED
 | 
				
			||||||
 | 
						#define USART0_ENABLED /**< Enable USART0 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					//#define USART1_ENABLED
 | 
				
			||||||
 | 
					//#define USART2_ENABLED 
 | 
				
			||||||
 | 
					//#define USART3_ENABLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Set size of receive and transmit buffers */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef UART_RX0_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_RX0_BUFFER_SIZE 128 /**< Size of the circular receive buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_RX1_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_RX1_BUFFER_SIZE 128 /**< Size of the circular receive buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_RX2_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_RX2_BUFFER_SIZE 128 /**< Size of the circular receive buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_RX3_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_RX3_BUFFER_SIZE 128 /**< Size of the circular receive buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef UART_TX0_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_TX0_BUFFER_SIZE 128 /**< Size of the circular transmit buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_TX1_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_TX1_BUFFER_SIZE 128 /**< Size of the circular transmit buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_TX2_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_TX2_BUFFER_SIZE 128 /**< Size of the circular transmit buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef UART_TX3_BUFFER_SIZE
 | 
				
			||||||
 | 
						#define UART_TX3_BUFFER_SIZE 128 /**< Size of the circular transmit buffer, must be power of 2 */
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Check buffer sizes are not too large for 8-bit positioning */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX0_BUFFER_SIZE > 256 & !defined(USART0_LARGE_BUFFER))
 | 
				
			||||||
 | 
						#error "Buffer too large, please use -DUSART0_LARGE_BUFFER switch in compiler options"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX1_BUFFER_SIZE > 256 & !defined(USART1_LARGE_BUFFER))
 | 
				
			||||||
 | 
						#error "Buffer too large, please use -DUSART1_LARGE_BUFFER switch in compiler options"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX2_BUFFER_SIZE > 256 & !defined(USART2_LARGE_BUFFER))
 | 
				
			||||||
 | 
						#error "Buffer too large, please use -DUSART2_LARGE_BUFFER switch in compiler options"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX3_BUFFER_SIZE > 256 & !defined(USART3_LARGE_BUFFER))
 | 
				
			||||||
 | 
						#error "Buffer too large, please use -DUSART3_LARGE_BUFFER switch in compiler options"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Check buffer sizes are not too large for *_LARGE_BUFFER operation (16-bit positioning) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX0_BUFFER_SIZE > 32768)
 | 
				
			||||||
 | 
						#error "Buffer too large, maximum allowed is 32768 bytes"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX1_BUFFER_SIZE > 32768)
 | 
				
			||||||
 | 
						#error "Buffer too large, maximum allowed is 32768 bytes"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX2_BUFFER_SIZE > 32768)
 | 
				
			||||||
 | 
						#error "Buffer too large, maximum allowed is 32768 bytes"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (UART_RX3_BUFFER_SIZE > 32768)
 | 
				
			||||||
 | 
						#error "Buffer too large, maximum allowed is 32768 bytes"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  UART Baudrate Expression
 | 
				
			||||||
 | 
					 *  @param  xtalCpu  system clock in Mhz, e.g. 4000000L for 4Mhz          
 | 
				
			||||||
 | 
					 *  @param  baudRate baudrate in bps, e.g. 1200, 2400, 9600     
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu)+8UL*(baudRate))/(16UL*(baudRate))-1UL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  UART Baudrate Expression for ATmega double speed mode
 | 
				
			||||||
 | 
					 *  @param  xtalCpu  system clock in Mhz, e.g. 4000000L for 4Mhz           
 | 
				
			||||||
 | 
					 *  @param  baudRate baudrate in bps, e.g. 1200, 2400, 9600     
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ((((xtalCpu)+4UL*(baudRate))/(8UL*(baudRate))-1)|0x8000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* test if the size of the circular buffers fits into SRAM */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(USART0_ENABLED) && ( (UART_RX0_BUFFER_SIZE+UART_TX0_BUFFER_SIZE) >= (RAMEND-0x60))
 | 
				
			||||||
 | 
						#error "size of UART_RX0_BUFFER_SIZE + UART_TX0_BUFFER_SIZE larger than size of SRAM"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(USART1_ENABLED) && ( (UART_RX1_BUFFER_SIZE+UART_TX1_BUFFER_SIZE) >= (RAMEND-0x60))
 | 
				
			||||||
 | 
						#error "size of UART_RX1_BUFFER_SIZE + UART_TX1_BUFFER_SIZE larger than size of SRAM"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(USART2_ENABLED) && ( (UART_RX2_BUFFER_SIZE+UART_RX2_BUFFER_SIZE) >= (RAMEND-0x60))
 | 
				
			||||||
 | 
						#error "size of UART_RX2_BUFFER_SIZE + UART_TX2_BUFFER_SIZE larger than size of SRAM"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(USART3_ENABLED) && ( (UART_RX3_BUFFER_SIZE+UART_RX3_BUFFER_SIZE) >= (RAMEND-0x60))
 | 
				
			||||||
 | 
						#error "size of UART_RX3_BUFFER_SIZE + UART_TX3_BUFFER_SIZE larger than size of SRAM"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					** high byte error return code of uart_getc()
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#define UART_FRAME_ERROR      0x0800              /**< Framing Error by UART       */
 | 
				
			||||||
 | 
					#define UART_OVERRUN_ERROR    0x0400              /**< Overrun condition by UART   */
 | 
				
			||||||
 | 
					#define UART_BUFFER_OVERFLOW  0x0200              /**< receive ringbuffer overflow */
 | 
				
			||||||
 | 
					#define UART_NO_DATA          0x0100              /**< no receive data available   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Macros, to allow use of legacy names */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to initialize USART0 (only available on selected ATmegas) @see uart0_init */
 | 
				
			||||||
 | 
					#define uart_init(b)      uart0_init(b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to get received byte of USART0 from ringbuffer. (only available on selected ATmega) @see uart0_getc */
 | 
				
			||||||
 | 
					#define uart_getc()       uart0_getc()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to peek at next byte in USART0 ringbuffer */
 | 
				
			||||||
 | 
					#define uart_peek()       uart0_peek()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to put byte to ringbuffer for transmitting via USART0 (only available on selected ATmega) @see uart0_putc */
 | 
				
			||||||
 | 
					#define uart_putc(d)      uart0_putc(d)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to put string to ringbuffer for transmitting via USART0 (only available on selected ATmega) @see uart0_puts */
 | 
				
			||||||
 | 
					#define uart_puts(s)      uart0_puts(s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to put string from program memory to ringbuffer for transmitting via USART0 (only available on selected ATmega) @see uart0_puts_p */
 | 
				
			||||||
 | 
					#define uart_puts_p(s)    uart0_puts_p(s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to return number of bytes waiting in the receive buffer of USART0 @see uart0_available */
 | 
				
			||||||
 | 
					#define uart_available()  uart0_available()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief Macro to flush bytes waiting in receive buffer of USART0 @see uart0_flush */
 | 
				
			||||||
 | 
					#define uart_flush()      uart0_flush()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					** function prototypes
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					   @brief   Initialize UART and set baudrate 
 | 
				
			||||||
 | 
					   @param   baudrate Specify baudrate using macro UART_BAUD_SELECT()
 | 
				
			||||||
 | 
					   @return  none
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					/*extern*/void uart0_init(uint16_t baudrate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Get received byte from ringbuffer
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns in the lower byte the received character and in the 
 | 
				
			||||||
 | 
					 * higher byte the last receive error.
 | 
				
			||||||
 | 
					 * UART_NO_DATA is returned when no data is available.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @return  lower byte:  received byte from ringbuffer
 | 
				
			||||||
 | 
					 *  @return  higher byte: last receive status
 | 
				
			||||||
 | 
					 *           - \b 0 successfully received data from UART
 | 
				
			||||||
 | 
					 *           - \b UART_NO_DATA           
 | 
				
			||||||
 | 
					 *             <br>no receive data available
 | 
				
			||||||
 | 
					 *           - \b UART_BUFFER_OVERFLOW   
 | 
				
			||||||
 | 
					 *             <br>Receive ringbuffer overflow.
 | 
				
			||||||
 | 
					 *             We are not reading the receive buffer fast enough, 
 | 
				
			||||||
 | 
					 *             one or more received character have been dropped 
 | 
				
			||||||
 | 
					 *           - \b UART_OVERRUN_ERROR     
 | 
				
			||||||
 | 
					 *             <br>Overrun condition by UART.
 | 
				
			||||||
 | 
					 *             A character already present in the UART UDR register was 
 | 
				
			||||||
 | 
					 *             not read by the interrupt handler before the next character arrived,
 | 
				
			||||||
 | 
					 *             one or more received characters have been dropped.
 | 
				
			||||||
 | 
					 *           - \b UART_FRAME_ERROR       
 | 
				
			||||||
 | 
					 *             <br>Framing Error by UART
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart0_getc(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Peek at next byte in ringbuffer
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns the next byte (character) of incoming UART data without removing it from the
 | 
				
			||||||
 | 
					 * internal ring buffer. That is, successive calls to uartN_peek() will return the same
 | 
				
			||||||
 | 
					 * character, as will the next call to uartN_getc().
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * UART_NO_DATA is returned when no data is available.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  @return  lower byte:  next byte in ringbuffer
 | 
				
			||||||
 | 
					 *  @return  higher byte: last receive status
 | 
				
			||||||
 | 
					 *           - \b 0 successfully received data from UART
 | 
				
			||||||
 | 
					 *           - \b UART_NO_DATA           
 | 
				
			||||||
 | 
					 *             <br>no receive data available
 | 
				
			||||||
 | 
					 *           - \b UART_BUFFER_OVERFLOW   
 | 
				
			||||||
 | 
					 *             <br>Receive ringbuffer overflow.
 | 
				
			||||||
 | 
					 *             We are not reading the receive buffer fast enough, 
 | 
				
			||||||
 | 
					 *             one or more received character have been dropped 
 | 
				
			||||||
 | 
					 *           - \b UART_OVERRUN_ERROR     
 | 
				
			||||||
 | 
					 *             <br>Overrun condition by UART.
 | 
				
			||||||
 | 
					 *             A character already present in the UART UDR register was 
 | 
				
			||||||
 | 
					 *             not read by the interrupt handler before the next character arrived,
 | 
				
			||||||
 | 
					 *             one or more received characters have been dropped.
 | 
				
			||||||
 | 
					 *           - \b UART_FRAME_ERROR       
 | 
				
			||||||
 | 
					 *             <br>Framing Error by UART
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart0_peek(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Put byte to ringbuffer for transmitting via UART
 | 
				
			||||||
 | 
					 *  @param   data byte to be transmitted
 | 
				
			||||||
 | 
					 *  @return  none
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/void uart0_putc(uint8_t data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Put string to ringbuffer for transmitting via UART
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  The string is buffered by the uart library in a circular buffer
 | 
				
			||||||
 | 
					 *  and one character at a time is transmitted to the UART using interrupts.
 | 
				
			||||||
 | 
					 *  Blocks if it can not write the whole string into the circular buffer.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *  @param   s string to be transmitted
 | 
				
			||||||
 | 
					 *  @return  none
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/void uart0_puts(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief    Put string from program memory to ringbuffer for transmitting via UART.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The string is buffered by the uart library in a circular buffer
 | 
				
			||||||
 | 
					 * and one character at a time is transmitted to the UART using interrupts.
 | 
				
			||||||
 | 
					 * Blocks if it can not write the whole string into the circular buffer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param    s program memory string to be transmitted
 | 
				
			||||||
 | 
					 * @return   none
 | 
				
			||||||
 | 
					 * @see      uart0_puts_P
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/void uart0_puts_p(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief    Macro to automatically put a string constant into program memory
 | 
				
			||||||
 | 
					 * \param    __s string in program memory
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define uart_puts_P(__s)       uart0_puts_p(PSTR(__s))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Macro to automatically put a string constant into program memory */
 | 
				
			||||||
 | 
					#define uart0_puts_P(__s)      uart0_puts_p(PSTR(__s))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Return number of bytes waiting in the receive buffer
 | 
				
			||||||
 | 
					 *  @return  bytes waiting in the receive buffer
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart0_available(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  @brief   Flush bytes waiting in receive buffer
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*extern*/void uart0_flush(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Initialize USART1 (only available on selected ATmegas) @see uart_init */
 | 
				
			||||||
 | 
					/*extern*/void uart1_init(uint16_t baudrate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart1_getc(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Peek at next byte in USART1 ringbuffer */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart1_peek(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */
 | 
				
			||||||
 | 
					/*extern*/void uart1_putc(uint8_t data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
 | 
				
			||||||
 | 
					/*extern*/void uart1_puts(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
 | 
				
			||||||
 | 
					/*extern*/void uart1_puts_p(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Macro to automatically put a string constant into program memory of USART1 @see uart1_puts_p */
 | 
				
			||||||
 | 
					#define uart1_puts_P(__s)       uart1_puts_p(PSTR(__s))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Return number of bytes waiting in the receive buffer of USART1 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart1_available(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Flush bytes waiting in receive buffer of USART1 */
 | 
				
			||||||
 | 
					/*extern*/void uart1_flush(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Initialize USART2 (only available on selected ATmegas) @see uart_init */
 | 
				
			||||||
 | 
					/*extern*/void uart2_init(uint16_t baudrate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Get received byte of USART2 from ringbuffer. (only available on selected ATmega) @see uart_getc */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart2_getc(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Peek at next byte in USART2 ringbuffer */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart2_peek(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put byte to ringbuffer for transmitting via USART2 (only available on selected ATmega) @see uart_putc */
 | 
				
			||||||
 | 
					/*extern*/void uart2_putc(uint8_t data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string to ringbuffer for transmitting via USART2 (only available on selected ATmega) @see uart_puts */
 | 
				
			||||||
 | 
					/*extern*/void uart2_puts(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string from program memory to ringbuffer for transmitting via USART2 (only available on selected ATmega) @see uart_puts_p */
 | 
				
			||||||
 | 
					/*extern*/void uart2_puts_p(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Macro to automatically put a string constant into program memory of USART2 @see uart2_puts_p */
 | 
				
			||||||
 | 
					#define uart2_puts_P(__s)       uart2_puts_p(PSTR(__s))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Return number of bytes waiting in the receive buffer of USART2 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart2_available(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Flush bytes waiting in receive buffer of USART2 */
 | 
				
			||||||
 | 
					/*extern*/void uart2_flush(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Initialize USART3 (only available on selected ATmegas) @see uart_init */
 | 
				
			||||||
 | 
					/*extern*/void uart3_init(uint16_t baudrate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Get received byte of USART3 from ringbuffer. (only available on selected ATmega) @see uart_getc */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart3_getc(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Peek at next byte in USART3 ringbuffer */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart3_peek(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put byte to ringbuffer for transmitting via USART3 (only available on selected ATmega) @see uart_putc */
 | 
				
			||||||
 | 
					/*extern*/void uart3_putc(uint8_t data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string to ringbuffer for transmitting via USART3 (only available on selected ATmega) @see uart_puts */
 | 
				
			||||||
 | 
					/*extern*/void uart3_puts(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Put string from program memory to ringbuffer for transmitting via USART3 (only available on selected ATmega) @see uart_puts_p */
 | 
				
			||||||
 | 
					/*extern*/void uart3_puts_p(const char *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Macro to automatically put a string constant into program memory of USART3 @see uart3_puts_p */
 | 
				
			||||||
 | 
					#define uart3_puts_P(__s)       uart3_puts_p(PSTR(__s))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Return number of bytes waiting in the receive buffer of USART3 */
 | 
				
			||||||
 | 
					/*extern*/uint16_t uart3_available(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @brief  Flush bytes waiting in receive buffer of USART3 */
 | 
				
			||||||
 | 
					/*extern*/void uart3_flush(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**@}*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // UART_H 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user