Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ed8ce4f59 | ||
|
|
087af43dee | ||
|
|
b7d8dec7dc | ||
|
|
7f67abd7d7 | ||
|
|
cc468523df | ||
|
|
78545b9509 | ||
|
|
5a25d50168 | ||
|
|
5c3fd67198 | ||
|
|
0d9e7f635e | ||
|
|
76bd0d3e18 | ||
|
|
b8c363099b | ||
|
|
b85ce4ce22 | ||
|
|
d47db637ed | ||
|
|
32fc4da4a7 | ||
|
|
861087096b | ||
|
|
7bedf8f4f2 | ||
|
|
a2d3fc98b8 |
No files matched your search
@@ -23,6 +23,7 @@ quantum/version.h
|
|||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
.DS_STORE
|
.DS_STORE
|
||||||
/util/wsl_downloaded
|
/util/wsl_downloaded
|
||||||
|
/util/win_downloaded
|
||||||
|
|
||||||
# Eclipse/PyCharm/Other IDE Settings
|
# Eclipse/PyCharm/Other IDE Settings
|
||||||
.cproject
|
.cproject
|
||||||
|
|||||||
+22
-166
@@ -1,7 +1,6 @@
|
|||||||
#ifdef SSD1306OLED
|
#ifdef SSD1306OLED
|
||||||
|
|
||||||
#include "ssd1306.h"
|
#include "ssd1306.h"
|
||||||
#include "config.h"
|
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
@@ -13,18 +12,7 @@
|
|||||||
#include "lufa.h"
|
#include "lufa.h"
|
||||||
#endif
|
#endif
|
||||||
#include "sendchar.h"
|
#include "sendchar.h"
|
||||||
#include "pincontrol.h"
|
#include "timer.h"
|
||||||
|
|
||||||
//assign the right code to your layers
|
|
||||||
#define _BASE 0
|
|
||||||
#define _LOWER 8
|
|
||||||
#define _RAISE 16
|
|
||||||
#define _FNLAYER 64
|
|
||||||
#define _NUMLAY 128
|
|
||||||
#define _NLOWER 136
|
|
||||||
#define _NFNLAYER 192
|
|
||||||
#define _MOUSECURSOR 256
|
|
||||||
#define _ADJUST 65560
|
|
||||||
|
|
||||||
// Set this to 1 to help diagnose early startup problems
|
// Set this to 1 to help diagnose early startup problems
|
||||||
// when testing power-on with ble. Turn it off otherwise,
|
// when testing power-on with ble. Turn it off otherwise,
|
||||||
@@ -32,26 +20,6 @@
|
|||||||
// with the matrix scan, causing keys to drop.
|
// with the matrix scan, causing keys to drop.
|
||||||
#define DEBUG_TO_SCREEN 0
|
#define DEBUG_TO_SCREEN 0
|
||||||
|
|
||||||
// Controls the SSD1306 128x32 OLED display via i2c
|
|
||||||
|
|
||||||
#define i2cAddress 0x3C
|
|
||||||
|
|
||||||
#define DisplayHeight 32
|
|
||||||
#define DisplayWidth 128
|
|
||||||
|
|
||||||
#define FontHeight 8
|
|
||||||
#define FontWidth 6
|
|
||||||
|
|
||||||
#define MatrixRows (DisplayHeight / FontHeight)
|
|
||||||
#define MatrixCols (DisplayWidth / FontWidth)
|
|
||||||
|
|
||||||
struct CharacterMatrix {
|
|
||||||
uint8_t display[MatrixRows][MatrixCols];
|
|
||||||
uint8_t *cursor;
|
|
||||||
bool dirty;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct CharacterMatrix display;
|
|
||||||
//static uint16_t last_battery_update;
|
//static uint16_t last_battery_update;
|
||||||
//static uint32_t vbat;
|
//static uint32_t vbat;
|
||||||
//#define BatteryUpdateInterval 10000 /* milliseconds */
|
//#define BatteryUpdateInterval 10000 /* milliseconds */
|
||||||
@@ -61,54 +29,13 @@ static uint8_t displaying;
|
|||||||
#endif
|
#endif
|
||||||
static uint16_t last_flush;
|
static uint16_t last_flush;
|
||||||
|
|
||||||
enum ssd1306_cmds {
|
|
||||||
DisplayOff = 0xAE,
|
|
||||||
DisplayOn = 0xAF,
|
|
||||||
|
|
||||||
SetContrast = 0x81,
|
|
||||||
DisplayAllOnResume = 0xA4,
|
|
||||||
|
|
||||||
DisplayAllOn = 0xA5,
|
|
||||||
NormalDisplay = 0xA6,
|
|
||||||
InvertDisplay = 0xA7,
|
|
||||||
SetDisplayOffset = 0xD3,
|
|
||||||
SetComPins = 0xda,
|
|
||||||
SetVComDetect = 0xdb,
|
|
||||||
SetDisplayClockDiv = 0xD5,
|
|
||||||
SetPreCharge = 0xd9,
|
|
||||||
SetMultiPlex = 0xa8,
|
|
||||||
SetLowColumn = 0x00,
|
|
||||||
SetHighColumn = 0x10,
|
|
||||||
SetStartLine = 0x40,
|
|
||||||
|
|
||||||
SetMemoryMode = 0x20,
|
|
||||||
ColumnAddr = 0x21,
|
|
||||||
PageAddr = 0x22,
|
|
||||||
|
|
||||||
ComScanInc = 0xc0,
|
|
||||||
ComScanDec = 0xc8,
|
|
||||||
SegRemap = 0xa0,
|
|
||||||
SetChargePump = 0x8d,
|
|
||||||
ExternalVcc = 0x01,
|
|
||||||
SwitchCapVcc = 0x02,
|
|
||||||
|
|
||||||
ActivateScroll = 0x2f,
|
|
||||||
DeActivateScroll = 0x2e,
|
|
||||||
SetVerticalScrollArea = 0xa3,
|
|
||||||
RightHorizontalScroll = 0x26,
|
|
||||||
LeftHorizontalScroll = 0x27,
|
|
||||||
VerticalAndRightHorizontalScroll = 0x29,
|
|
||||||
VerticalAndLeftHorizontalScroll = 0x2a,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Write command sequence.
|
// Write command sequence.
|
||||||
// Returns true on success.
|
// Returns true on success.
|
||||||
static inline bool _send_cmd1(uint8_t cmd) {
|
static inline bool _send_cmd1(uint8_t cmd) {
|
||||||
bool res = false;
|
bool res = false;
|
||||||
|
|
||||||
if (i2c_start_write(i2cAddress)) {
|
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||||
xprintf("failed to start write to %d\n", i2cAddress);
|
xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,8 +80,6 @@ static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
|
|||||||
#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
|
#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
|
||||||
#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
|
#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
|
||||||
|
|
||||||
static void matrix_clear(struct CharacterMatrix *matrix);
|
|
||||||
|
|
||||||
static void clear_display(void) {
|
static void clear_display(void) {
|
||||||
matrix_clear(&display);
|
matrix_clear(&display);
|
||||||
|
|
||||||
@@ -163,7 +88,7 @@ static void clear_display(void) {
|
|||||||
send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
|
send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
|
||||||
send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
|
send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
|
||||||
|
|
||||||
if (i2c_start_write(i2cAddress)) {
|
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (i2c_master_write(0x40)) {
|
if (i2c_master_write(0x40)) {
|
||||||
@@ -209,14 +134,17 @@ bool iota_gfx_init(void) {
|
|||||||
send_cmd2(SetChargePump, 0x14 /* Enable */);
|
send_cmd2(SetChargePump, 0x14 /* Enable */);
|
||||||
send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
|
send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
|
||||||
|
|
||||||
/// Flips the display orientation 0 degrees
|
#ifdef OLED_ROTATE180
|
||||||
send_cmd1(SegRemap | 0x1);
|
|
||||||
send_cmd1(ComScanDec);
|
|
||||||
/*
|
|
||||||
// the following Flip the display orientation 180 degrees
|
// the following Flip the display orientation 180 degrees
|
||||||
send_cmd1(SegRemap);
|
send_cmd1(SegRemap);
|
||||||
send_cmd1(ComScanInc);
|
send_cmd1(ComScanInc);
|
||||||
// end flip */
|
#endif
|
||||||
|
#ifndef OLED_ROTATE180
|
||||||
|
// Flips the display orientation 0 degrees
|
||||||
|
send_cmd1(SegRemap | 0x1);
|
||||||
|
send_cmd1(ComScanDec);
|
||||||
|
#endif
|
||||||
|
|
||||||
send_cmd2(SetComPins, 0x2);
|
send_cmd2(SetComPins, 0x2);
|
||||||
send_cmd2(SetContrast, 0x8f);
|
send_cmd2(SetContrast, 0x8f);
|
||||||
send_cmd2(SetPreCharge, 0xf1);
|
send_cmd2(SetPreCharge, 0xf1);
|
||||||
@@ -262,7 +190,7 @@ done:
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
|
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
|
||||||
*matrix->cursor = c;
|
*matrix->cursor = c;
|
||||||
++matrix->cursor;
|
++matrix->cursor;
|
||||||
|
|
||||||
@@ -275,7 +203,7 @@ static void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
|
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
|
||||||
matrix->dirty = true;
|
matrix->dirty = true;
|
||||||
|
|
||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
@@ -296,7 +224,7 @@ void iota_gfx_write_char(uint8_t c) {
|
|||||||
matrix_write_char(&display, c);
|
matrix_write_char(&display, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_write(struct CharacterMatrix *matrix, const char *data) {
|
void matrix_write(struct CharacterMatrix *matrix, const char *data) {
|
||||||
const char *end = data + strlen(data);
|
const char *end = data + strlen(data);
|
||||||
while (data < end) {
|
while (data < end) {
|
||||||
matrix_write_char(matrix, *data);
|
matrix_write_char(matrix, *data);
|
||||||
@@ -308,7 +236,7 @@ void iota_gfx_write(const char *data) {
|
|||||||
matrix_write(&display, data);
|
matrix_write(&display, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
|
void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
|
||||||
while (true) {
|
while (true) {
|
||||||
uint8_t c = pgm_read_byte(data);
|
uint8_t c = pgm_read_byte(data);
|
||||||
if (c == 0) {
|
if (c == 0) {
|
||||||
@@ -323,7 +251,7 @@ void iota_gfx_write_P(const char *data) {
|
|||||||
matrix_write_P(&display, data);
|
matrix_write_P(&display, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_clear(struct CharacterMatrix *matrix) {
|
void matrix_clear(struct CharacterMatrix *matrix) {
|
||||||
memset(matrix->display, ' ', sizeof(matrix->display));
|
memset(matrix->display, ' ', sizeof(matrix->display));
|
||||||
matrix->cursor = &matrix->display[0][0];
|
matrix->cursor = &matrix->display[0][0];
|
||||||
matrix->dirty = true;
|
matrix->dirty = true;
|
||||||
@@ -333,7 +261,7 @@ void iota_gfx_clear_screen(void) {
|
|||||||
matrix_clear(&display);
|
matrix_clear(&display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_render(struct CharacterMatrix *matrix) {
|
void matrix_render(struct CharacterMatrix *matrix) {
|
||||||
last_flush = timer_read();
|
last_flush = timer_read();
|
||||||
iota_gfx_on();
|
iota_gfx_on();
|
||||||
#if DEBUG_TO_SCREEN
|
#if DEBUG_TO_SCREEN
|
||||||
@@ -344,7 +272,7 @@ static void matrix_render(struct CharacterMatrix *matrix) {
|
|||||||
send_cmd3(PageAddr, 0, MatrixRows - 1);
|
send_cmd3(PageAddr, 0, MatrixRows - 1);
|
||||||
send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
|
send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
|
||||||
|
|
||||||
if (i2c_start_write(i2cAddress)) {
|
if (i2c_start_write(SSD1306_ADDRESS)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (i2c_master_write(0x40)) {
|
if (i2c_master_write(0x40)) {
|
||||||
@@ -379,84 +307,12 @@ void iota_gfx_flush(void) {
|
|||||||
matrix_render(&display);
|
matrix_render(&display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void matrix_update(struct CharacterMatrix *dest,
|
__attribute__ ((weak))
|
||||||
const struct CharacterMatrix *source) {
|
void iota_gfx_task_user(void) {
|
||||||
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
|
||||||
memcpy(dest->display, source->display, sizeof(dest->display));
|
|
||||||
dest->dirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void render_status_info(void) {
|
|
||||||
#if DEBUG_TO_SCREEN
|
|
||||||
if (debug_enable) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct CharacterMatrix matrix;
|
|
||||||
|
|
||||||
matrix_clear(&matrix);
|
|
||||||
matrix_write_P(&matrix, PSTR("USB: "));
|
|
||||||
#ifdef PROTOCOL_LUFA
|
|
||||||
switch (USB_DeviceState) {
|
|
||||||
case DEVICE_STATE_Unattached:
|
|
||||||
matrix_write_P(&matrix, PSTR("Unattached"));
|
|
||||||
break;
|
|
||||||
case DEVICE_STATE_Suspended:
|
|
||||||
matrix_write_P(&matrix, PSTR("Suspended"));
|
|
||||||
break;
|
|
||||||
case DEVICE_STATE_Configured:
|
|
||||||
matrix_write_P(&matrix, PSTR("Connected"));
|
|
||||||
break;
|
|
||||||
case DEVICE_STATE_Powered:
|
|
||||||
matrix_write_P(&matrix, PSTR("Powered"));
|
|
||||||
break;
|
|
||||||
case DEVICE_STATE_Default:
|
|
||||||
matrix_write_P(&matrix, PSTR("Default"));
|
|
||||||
break;
|
|
||||||
case DEVICE_STATE_Addressed:
|
|
||||||
matrix_write_P(&matrix, PSTR("Addressed"));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
matrix_write_P(&matrix, PSTR("Invalid"));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
|
|
||||||
|
|
||||||
char buf[40];
|
|
||||||
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
|
|
||||||
matrix_write_P(&matrix, PSTR("\n\nLayer: "));
|
|
||||||
switch (layer_state) {
|
|
||||||
case _BASE:
|
|
||||||
matrix_write_P(&matrix, PSTR("Default"));
|
|
||||||
break;
|
|
||||||
case _RAISE:
|
|
||||||
matrix_write_P(&matrix, PSTR("Raise"));
|
|
||||||
break;
|
|
||||||
case _LOWER:
|
|
||||||
matrix_write_P(&matrix, PSTR("Lower"));
|
|
||||||
break;
|
|
||||||
case _ADJUST:
|
|
||||||
matrix_write_P(&matrix, PSTR("ADJUST"));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
matrix_write(&matrix, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Host Keyboard LED Status
|
|
||||||
char led[40];
|
|
||||||
snprintf(led, sizeof(led), "\n%s %s %s",
|
|
||||||
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
|
|
||||||
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
|
|
||||||
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
|
|
||||||
matrix_write(&matrix, led);
|
|
||||||
matrix_update(&display, &matrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void iota_gfx_task(void) {
|
void iota_gfx_task(void) {
|
||||||
render_status_info();
|
iota_gfx_task_user();
|
||||||
|
|
||||||
if (display.dirty) {
|
if (display.dirty) {
|
||||||
iota_gfx_flush();
|
iota_gfx_flush();
|
||||||
|
|||||||
@@ -3,6 +3,71 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "pincontrol.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
enum ssd1306_cmds {
|
||||||
|
DisplayOff = 0xAE,
|
||||||
|
DisplayOn = 0xAF,
|
||||||
|
|
||||||
|
SetContrast = 0x81,
|
||||||
|
DisplayAllOnResume = 0xA4,
|
||||||
|
|
||||||
|
DisplayAllOn = 0xA5,
|
||||||
|
NormalDisplay = 0xA6,
|
||||||
|
InvertDisplay = 0xA7,
|
||||||
|
SetDisplayOffset = 0xD3,
|
||||||
|
SetComPins = 0xda,
|
||||||
|
SetVComDetect = 0xdb,
|
||||||
|
SetDisplayClockDiv = 0xD5,
|
||||||
|
SetPreCharge = 0xd9,
|
||||||
|
SetMultiPlex = 0xa8,
|
||||||
|
SetLowColumn = 0x00,
|
||||||
|
SetHighColumn = 0x10,
|
||||||
|
SetStartLine = 0x40,
|
||||||
|
|
||||||
|
SetMemoryMode = 0x20,
|
||||||
|
ColumnAddr = 0x21,
|
||||||
|
PageAddr = 0x22,
|
||||||
|
|
||||||
|
ComScanInc = 0xc0,
|
||||||
|
ComScanDec = 0xc8,
|
||||||
|
SegRemap = 0xa0,
|
||||||
|
SetChargePump = 0x8d,
|
||||||
|
ExternalVcc = 0x01,
|
||||||
|
SwitchCapVcc = 0x02,
|
||||||
|
|
||||||
|
ActivateScroll = 0x2f,
|
||||||
|
DeActivateScroll = 0x2e,
|
||||||
|
SetVerticalScrollArea = 0xa3,
|
||||||
|
RightHorizontalScroll = 0x26,
|
||||||
|
LeftHorizontalScroll = 0x27,
|
||||||
|
VerticalAndRightHorizontalScroll = 0x29,
|
||||||
|
VerticalAndLeftHorizontalScroll = 0x2a,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Controls the SSD1306 128x32 OLED display via i2c
|
||||||
|
|
||||||
|
#ifndef SSD1306_ADDRESS
|
||||||
|
#define SSD1306_ADDRESS 0x3C
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DisplayHeight 32
|
||||||
|
#define DisplayWidth 128
|
||||||
|
|
||||||
|
#define FontHeight 8
|
||||||
|
#define FontWidth 6
|
||||||
|
|
||||||
|
#define MatrixRows (DisplayHeight / FontHeight)
|
||||||
|
#define MatrixCols (DisplayWidth / FontWidth)
|
||||||
|
|
||||||
|
struct CharacterMatrix {
|
||||||
|
uint8_t display[MatrixRows][MatrixCols];
|
||||||
|
uint8_t *cursor;
|
||||||
|
bool dirty;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CharacterMatrix display;
|
||||||
|
|
||||||
bool iota_gfx_init(void);
|
bool iota_gfx_init(void);
|
||||||
void iota_gfx_task(void);
|
void iota_gfx_task(void);
|
||||||
@@ -14,4 +79,15 @@ void iota_gfx_write(const char *data);
|
|||||||
void iota_gfx_write_P(const char *data);
|
void iota_gfx_write_P(const char *data);
|
||||||
void iota_gfx_clear_screen(void);
|
void iota_gfx_clear_screen(void);
|
||||||
|
|
||||||
|
void iota_gfx_task_user(void);
|
||||||
|
|
||||||
|
void matrix_clear(struct CharacterMatrix *matrix);
|
||||||
|
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
|
||||||
|
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
|
||||||
|
void matrix_write(struct CharacterMatrix *matrix, const char *data);
|
||||||
|
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
|
||||||
|
void matrix_render(struct CharacterMatrix *matrix);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#define USE_I2C
|
#define USE_I2C
|
||||||
#define SSD1306OLED
|
#define SSD1306OLED
|
||||||
|
#define OLED_ROTATE180
|
||||||
|
|
||||||
/* ws2812 RGB LED*/
|
/* ws2812 RGB LED*/
|
||||||
#define RGB_DI_PIN D4
|
#define RGB_DI_PIN D4
|
||||||
|
|||||||
@@ -406,3 +406,91 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
|
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void matrix_update(struct CharacterMatrix *dest,
|
||||||
|
const struct CharacterMatrix *source) {
|
||||||
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
|
dest->dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//assign the right code to your layers for OLED display
|
||||||
|
#define L_BASE 0
|
||||||
|
#define L_LOWER 8
|
||||||
|
#define L_RAISE 16
|
||||||
|
#define L_FNLAYER 64
|
||||||
|
#define L_NUMLAY 128
|
||||||
|
#define L_NLOWER 136
|
||||||
|
#define L_NFNLAYER 192
|
||||||
|
#define L_MOUSECURSOR 256
|
||||||
|
#define L_ADJUST 65560
|
||||||
|
|
||||||
|
void iota_gfx_task_user(void) {
|
||||||
|
#if DEBUG_TO_SCREEN
|
||||||
|
if (debug_enable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct CharacterMatrix matrix;
|
||||||
|
|
||||||
|
matrix_clear(&matrix);
|
||||||
|
matrix_write_P(&matrix, PSTR("USB: "));
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
switch (USB_DeviceState) {
|
||||||
|
case DEVICE_STATE_Unattached:
|
||||||
|
matrix_write_P(&matrix, PSTR("Unattached"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Suspended:
|
||||||
|
matrix_write_P(&matrix, PSTR("Suspended"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Configured:
|
||||||
|
matrix_write_P(&matrix, PSTR("Connected"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Powered:
|
||||||
|
matrix_write_P(&matrix, PSTR("Powered"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Addressed:
|
||||||
|
matrix_write_P(&matrix, PSTR("Addressed"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Invalid"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
|
||||||
|
|
||||||
|
char buf[40];
|
||||||
|
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
|
||||||
|
matrix_write_P(&matrix, PSTR("\n\nLayer: "));
|
||||||
|
switch (layer_state) {
|
||||||
|
case L_BASE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case L_RAISE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Raise"));
|
||||||
|
break;
|
||||||
|
case L_LOWER:
|
||||||
|
matrix_write_P(&matrix, PSTR("Lower"));
|
||||||
|
break;
|
||||||
|
case L_ADJUST:
|
||||||
|
matrix_write_P(&matrix, PSTR("ADJUST"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write(&matrix, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
char led[40];
|
||||||
|
snprintf(led, sizeof(led), "\n%s %s %s",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
|
||||||
|
matrix_write(&matrix, led);
|
||||||
|
matrix_update(&display, &matrix);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#define USE_I2C
|
#define USE_I2C
|
||||||
#define SSD1306OLED
|
#define SSD1306OLED
|
||||||
|
#define OLED_ROTATE180
|
||||||
|
|
||||||
/* ws2812 RGB LED*/
|
/* ws2812 RGB LED*/
|
||||||
#define RGB_DI_PIN D4
|
#define RGB_DI_PIN D4
|
||||||
|
|||||||
@@ -416,3 +416,90 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
|
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void matrix_update(struct CharacterMatrix *dest,
|
||||||
|
const struct CharacterMatrix *source) {
|
||||||
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
|
dest->dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//assign the right code to your layers for OLED display
|
||||||
|
#define L_BASE 0
|
||||||
|
#define L_LOWER 8
|
||||||
|
#define L_RAISE 16
|
||||||
|
#define L_FNLAYER 64
|
||||||
|
#define L_NUMLAY 128
|
||||||
|
#define L_NLOWER 136
|
||||||
|
#define L_NFNLAYER 192
|
||||||
|
#define L_MOUSECURSOR 256
|
||||||
|
#define L_ADJUST 65560
|
||||||
|
|
||||||
|
void iota_gfx_task_user(void) {
|
||||||
|
#if DEBUG_TO_SCREEN
|
||||||
|
if (debug_enable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct CharacterMatrix matrix;
|
||||||
|
|
||||||
|
matrix_clear(&matrix);
|
||||||
|
matrix_write_P(&matrix, PSTR("USB: "));
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
switch (USB_DeviceState) {
|
||||||
|
case DEVICE_STATE_Unattached:
|
||||||
|
matrix_write_P(&matrix, PSTR("Unattached"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Suspended:
|
||||||
|
matrix_write_P(&matrix, PSTR("Suspended"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Configured:
|
||||||
|
matrix_write_P(&matrix, PSTR("Connected"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Powered:
|
||||||
|
matrix_write_P(&matrix, PSTR("Powered"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Addressed:
|
||||||
|
matrix_write_P(&matrix, PSTR("Addressed"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Invalid"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
|
||||||
|
|
||||||
|
char buf[40];
|
||||||
|
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
|
||||||
|
matrix_write_P(&matrix, PSTR("\n\nLayer: "));
|
||||||
|
switch (layer_state) {
|
||||||
|
case L_BASE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case L_RAISE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Raise"));
|
||||||
|
break;
|
||||||
|
case L_LOWER:
|
||||||
|
matrix_write_P(&matrix, PSTR("Lower"));
|
||||||
|
break;
|
||||||
|
case L_ADJUST:
|
||||||
|
matrix_write_P(&matrix, PSTR("ADJUST"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write(&matrix, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
char led[40];
|
||||||
|
snprintf(led, sizeof(led), "\n%s %s %s",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
|
||||||
|
matrix_write(&matrix, led);
|
||||||
|
matrix_update(&display, &matrix);
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define FLIP_HALF
|
#define FLIP_HALF
|
||||||
|
|
||||||
#define SSD1306OLED
|
#define SSD1306OLED
|
||||||
|
//#define OLED_ROTATE180
|
||||||
|
|
||||||
|
|
||||||
#define PREVENT_STUCK_MODIFIERS
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
|||||||
@@ -357,3 +357,91 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
|
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void matrix_update(struct CharacterMatrix *dest,
|
||||||
|
const struct CharacterMatrix *source) {
|
||||||
|
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
|
||||||
|
memcpy(dest->display, source->display, sizeof(dest->display));
|
||||||
|
dest->dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//assign the right code to your layers for OLED display
|
||||||
|
#define L_BASE 0
|
||||||
|
#define L_LOWER 8
|
||||||
|
#define L_RAISE 16
|
||||||
|
#define L_FNLAYER 64
|
||||||
|
#define L_NUMLAY 128
|
||||||
|
#define L_NLOWER 136
|
||||||
|
#define L_NFNLAYER 192
|
||||||
|
#define L_MOUSECURSOR 256
|
||||||
|
#define L_ADJUST 65560
|
||||||
|
|
||||||
|
void iota_gfx_task_user(void) {
|
||||||
|
#if DEBUG_TO_SCREEN
|
||||||
|
if (debug_enable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct CharacterMatrix matrix;
|
||||||
|
|
||||||
|
matrix_clear(&matrix);
|
||||||
|
matrix_write_P(&matrix, PSTR("USB: "));
|
||||||
|
#ifdef PROTOCOL_LUFA
|
||||||
|
switch (USB_DeviceState) {
|
||||||
|
case DEVICE_STATE_Unattached:
|
||||||
|
matrix_write_P(&matrix, PSTR("Unattached"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Suspended:
|
||||||
|
matrix_write_P(&matrix, PSTR("Suspended"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Configured:
|
||||||
|
matrix_write_P(&matrix, PSTR("Connected"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Powered:
|
||||||
|
matrix_write_P(&matrix, PSTR("Powered"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case DEVICE_STATE_Addressed:
|
||||||
|
matrix_write_P(&matrix, PSTR("Addressed"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write_P(&matrix, PSTR("Invalid"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
|
||||||
|
|
||||||
|
char buf[40];
|
||||||
|
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
|
||||||
|
matrix_write_P(&matrix, PSTR("\n\nLayer: "));
|
||||||
|
switch (layer_state) {
|
||||||
|
case L_BASE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Default"));
|
||||||
|
break;
|
||||||
|
case L_RAISE:
|
||||||
|
matrix_write_P(&matrix, PSTR("Raise"));
|
||||||
|
break;
|
||||||
|
case L_LOWER:
|
||||||
|
matrix_write_P(&matrix, PSTR("Lower"));
|
||||||
|
break;
|
||||||
|
case L_ADJUST:
|
||||||
|
matrix_write_P(&matrix, PSTR("ADJUST"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
matrix_write(&matrix, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host Keyboard LED Status
|
||||||
|
char led[40];
|
||||||
|
snprintf(led, sizeof(led), "\n%s %s %s",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
|
||||||
|
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
|
||||||
|
matrix_write(&matrix, led);
|
||||||
|
matrix_update(&display, &matrix);
|
||||||
|
}
|
||||||
+2
-2
@@ -21,8 +21,8 @@ OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
|
|||||||
ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
|
ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
|
||||||
WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
|
WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
|
||||||
|
|
||||||
TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
|
TAB_LOG = printf "\n%s\n\n" "$$LOG" | $(AWK) '{ sub(/^/," | "); print }'
|
||||||
TAB_LOG_PLAIN = printf "$$LOG\n"
|
TAB_LOG_PLAIN = printf "%s\n" "$$LOG"
|
||||||
AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
|
AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
|
||||||
AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
|
AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
|
||||||
PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
|
PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
|
||||||
|
|||||||
@@ -169,7 +169,6 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// translates key to keycode
|
// translates key to keycode
|
||||||
__attribute__ ((weak))
|
|
||||||
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
|
||||||
{
|
{
|
||||||
// Read entire word (16bits)
|
// Read entire word (16bits)
|
||||||
|
|||||||
@@ -40,4 +40,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||||
|
}
|
||||||
@@ -58,3 +58,6 @@ void release_key(uint8_t col, uint8_t row) {
|
|||||||
void clear_all_keys(void) {
|
void clear_all_keys(void) {
|
||||||
memset(matrix, 0, sizeof(matrix));
|
memset(matrix, 0, sizeof(matrix));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void led_set(uint8_t usb_led) {
|
||||||
|
}
|
||||||
@@ -44,8 +44,8 @@ void TestFixture::run_one_scan_loop() {
|
|||||||
advance_time(1);
|
advance_time(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestFixture::idle_for(uint time) {
|
void TestFixture::idle_for(unsigned time) {
|
||||||
for (uint i=0; i<time; i++) {
|
for (unsigned i=0; i<time; i++) {
|
||||||
run_one_scan_loop();
|
run_one_scan_loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,5 +26,5 @@ public:
|
|||||||
static void TearDownTestCase();
|
static void TearDownTestCase();
|
||||||
|
|
||||||
void run_one_scan_loop();
|
void run_one_scan_loop();
|
||||||
void idle_for(uint ms);
|
void idle_for(unsigned ms);
|
||||||
};
|
};
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
SYSTEM_TYPE := $(shell gcc -dumpmachine)
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
OBJCOPY =
|
OBJCOPY =
|
||||||
OBJDUMP =
|
OBJDUMP =
|
||||||
@@ -14,6 +16,9 @@ COMPILEFLAGS += -funsigned-bitfields
|
|||||||
COMPILEFLAGS += -ffunction-sections
|
COMPILEFLAGS += -ffunction-sections
|
||||||
COMPILEFLAGS += -fdata-sections
|
COMPILEFLAGS += -fdata-sections
|
||||||
COMPILEFLAGS += -fshort-enums
|
COMPILEFLAGS += -fshort-enums
|
||||||
|
ifneq ($(findstring mingw, ${SYSTEM_TYPE}),)
|
||||||
|
COMPILEFLAGS += -mno-ms-bitfields
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS += $(COMPILEFLAGS)
|
CFLAGS += $(COMPILEFLAGS)
|
||||||
CFLAGS += -fno-inline-small-functions
|
CFLAGS += -fno-inline-small-functions
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function export_variables {
|
||||||
|
local util_dir=~/qmk_utils
|
||||||
|
export PATH=$PATH:$util_dir/dfu-programmer
|
||||||
|
export PATH=$PATH:$util_dir/dfu-util-0.9-win64
|
||||||
|
export PATH=$PATH:$util_dir/flip/bin
|
||||||
|
export PATH=$PATH:$util_dir/avr8-gnu-toolchain/bin
|
||||||
|
export PATH=$PATH:$util_dir/gcc-arm-none-eabi/bin
|
||||||
|
}
|
||||||
|
|
||||||
|
export_variables
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
||||||
|
download_dir=~/qmk_utils
|
||||||
|
avrtools=avr8-gnu-toolchain
|
||||||
|
armtools=gcc-arm-none-eabi
|
||||||
|
installflip=false
|
||||||
|
|
||||||
|
echo "Installing dependencies needed for the installation (quazip)"
|
||||||
|
pacman --needed -S msys/unzip msys/p7zip base-devel msys/git mingw-w64-x86_64-toolchain
|
||||||
|
|
||||||
|
source "$dir/win_shared_install.sh"
|
||||||
|
|
||||||
|
function install_avr {
|
||||||
|
rm -f -r "$avrtools"
|
||||||
|
wget "http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe"
|
||||||
|
7z x avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe
|
||||||
|
rm avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_arm {
|
||||||
|
wget -O gcc-arm-none-eabi.zip "https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-win32.zip?product=GNU%20ARM%20Embedded%20Toolchain,ZIP,,Windows,6-2017-q2-update"
|
||||||
|
unzip -d gcc-arm-none-eabi gcc-arm-none-eabi.zip
|
||||||
|
rm gcc-arm-none-eabi.zip
|
||||||
|
}
|
||||||
|
|
||||||
|
function extract_flip {
|
||||||
|
rm -f -r flip
|
||||||
|
7z -oflip x FlipInstaller.exe
|
||||||
|
}
|
||||||
|
|
||||||
|
pushd "$download_dir"
|
||||||
|
|
||||||
|
if [ -f "FlipInstaller.exe" ]; then
|
||||||
|
echo
|
||||||
|
echo "Extracting flip"
|
||||||
|
extract_flip
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$avrtools" ]; then
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "The AVR toolchain is not installed."
|
||||||
|
echo "This is needed for building AVR based keboards."
|
||||||
|
read -p "Do you want to install it? (Y/N) " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) install_avr; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
else
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "The AVR toolchain is already installed"
|
||||||
|
read -p "Do you want to reinstall? (Y/N) " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) install_avr; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$armtools" ]; then
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "The ARM toolchain is not installed."
|
||||||
|
echo "This is needed for building ARM based keboards."
|
||||||
|
read -p "Do you want to install it? (Y/N) " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) install_arm; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
else
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "The ARM toolchain is already installed"
|
||||||
|
read -p "Do you want to reinstall? (Y/N) " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) install_arm; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
popd
|
||||||
|
|
||||||
|
cp -f "$dir/activate_msys2.sh" "$download_dir/"
|
||||||
|
|
||||||
|
if grep "^source ~/qmk_utils/activate_msys2.sh$" ~/.bashrc
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "The line source ~/qmk_utils/activate_msys2.sh is already added to your /.bashrc"
|
||||||
|
echo "Not adding it twice!"
|
||||||
|
else
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "Do you want to add 'source ~/qmk_utils/activate_msys2.sh' to the end of your"
|
||||||
|
echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
|
||||||
|
echo "want to do it automatically, then you have to do it manually later."
|
||||||
|
read -p "(Y/N)? " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) echo "source ~/qmk_utils/activate_msys2.sh" >> ~/.bashrc; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "******************************************************************************"
|
||||||
|
echo "Installation completed!"
|
||||||
|
echo "Please close this Window and restart MSYS2 MinGW"
|
||||||
|
echo "******************************************************************************"
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function install_utils {
|
||||||
|
rm -f -r "$download_dir"
|
||||||
|
mkdir "$download_dir"
|
||||||
|
|
||||||
|
pushd "$download_dir"
|
||||||
|
|
||||||
|
echo "Installing dfu-programmer"
|
||||||
|
wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip'
|
||||||
|
unzip -d dfu-programmer dfu-programmer-win-0.7.2.zip
|
||||||
|
|
||||||
|
echo "Installing dfu-util"
|
||||||
|
wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip'
|
||||||
|
unzip dfu-util-0.9-win64.zip
|
||||||
|
|
||||||
|
echo "Installing teensy_loader_cli"
|
||||||
|
wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip'
|
||||||
|
unzip teensy_loader_cli_windows.zip
|
||||||
|
|
||||||
|
echo "Installing Atmel Flip"
|
||||||
|
wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe'
|
||||||
|
mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe
|
||||||
|
|
||||||
|
echo "Downloading the QMK driver installer"
|
||||||
|
wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i -
|
||||||
|
|
||||||
|
rm -f *.zip
|
||||||
|
|
||||||
|
popd > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_drivers {
|
||||||
|
pushd "$download_dir"
|
||||||
|
cp -f "$dir/drivers.txt" .
|
||||||
|
echo
|
||||||
|
cmd.exe /c "qmk_driver_installer.exe $1 $2 drivers.txt"
|
||||||
|
popd > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
pushd "$dir"
|
||||||
|
|
||||||
|
if [ ! -d "$download_dir" ]; then
|
||||||
|
install_utils
|
||||||
|
else
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "The utils seem to already be downloaded."
|
||||||
|
read -p "Do you want to re-download them and update to the newest version (Y/N) " res
|
||||||
|
case $res in
|
||||||
|
[Yy]* ) install_utils; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo
|
||||||
|
echo "Which USB drivers do you want to install?"
|
||||||
|
echo "(A)all - All supported drivers will be installed"
|
||||||
|
echo "(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode)"
|
||||||
|
echo " will be installed"
|
||||||
|
echo "(F)force - Like all, but will also override existing drivers for connected"
|
||||||
|
echo " keyboards"
|
||||||
|
echo "(N)one - No drivers will be installed,"
|
||||||
|
echo " flashing your keyboard will most likely not work"
|
||||||
|
read -p "(A/C/F/N)? " res
|
||||||
|
case $res in
|
||||||
|
[Aa]* ) install_drivers --all; break;;
|
||||||
|
[Cc]* ) install_drivers; break;;
|
||||||
|
[Ff]* ) install_drivers --all --force; break;;
|
||||||
|
[Nn]* ) break;;
|
||||||
|
* ) echo "Invalid answer";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
popd > /dev/null
|
||||||
|
|
||||||
+16
-78
@@ -1,44 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
download_dir=wsl_downloaded
|
|
||||||
|
|
||||||
function install_utils {
|
|
||||||
rm -f -r $download_dir
|
|
||||||
mkdir $download_dir
|
|
||||||
|
|
||||||
pushd $download_dir
|
|
||||||
|
|
||||||
echo "Installing dfu-programmer"
|
|
||||||
wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip'
|
|
||||||
unzip -d dfu-programmer dfu-programmer-win-0.7.2.zip
|
|
||||||
|
|
||||||
echo "Installing dfu-util"
|
|
||||||
wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip'
|
|
||||||
unzip dfu-util-0.9-win64.zip
|
|
||||||
|
|
||||||
echo "Installing teensy_loader_cli"
|
|
||||||
wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip'
|
|
||||||
unzip teensy_loader_cli_windows.zip
|
|
||||||
|
|
||||||
echo "Installing Atmel Flip"
|
|
||||||
wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe'
|
|
||||||
mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe
|
|
||||||
|
|
||||||
echo "Downloading the QMK driver installer"
|
|
||||||
wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i -
|
|
||||||
|
|
||||||
rm -f *.zip
|
|
||||||
|
|
||||||
popd > /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function install_drivers {
|
|
||||||
pushd $download_dir
|
|
||||||
cmd.exe /C qmk_driver_installer.exe $1 $2 ../drivers.txt
|
|
||||||
popd > /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
||||||
|
pushd "$dir";
|
||||||
|
|
||||||
if [[ $dir != /mnt/* ]];
|
if [[ $dir != /mnt/* ]];
|
||||||
then
|
then
|
||||||
@@ -48,7 +11,6 @@ then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pushd "$dir"
|
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
echo
|
echo
|
||||||
@@ -67,49 +29,25 @@ echo "Installing dependencies needed for the installation (unzip, wget)"
|
|||||||
echo "This will ask for the sudo password"
|
echo "This will ask for the sudo password"
|
||||||
sudo apt-get install unzip wget
|
sudo apt-get install unzip wget
|
||||||
|
|
||||||
|
download_dir=wsl_downloaded
|
||||||
|
|
||||||
if [ ! -d "$download_dir" ]; then
|
source "$dir/win_shared_install.sh"
|
||||||
install_utils
|
|
||||||
else
|
|
||||||
while true; do
|
|
||||||
echo
|
|
||||||
read -p "The utils seem to already be downloaded, do you want to re-download them and update to the newest version (Y/N) " res
|
|
||||||
case $res in
|
|
||||||
[Yy]* ) install_utils; break;;
|
|
||||||
[Nn]* ) break;;
|
|
||||||
* ) echo "Invalid answer";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
pushd "$download_dir"
|
||||||
while true; do
|
while true; do
|
||||||
echo
|
echo
|
||||||
read -p "Flip need to be installed if you want to use that for programming, do you want to install it now? (Y/N) " res
|
echo "Flip need to be installed if you want to use that for programming."
|
||||||
|
echo "Please install it to the default location!"
|
||||||
|
read -p "Do you want to install it now? (Y/N) " res
|
||||||
case $res in
|
case $res in
|
||||||
[Yy]* ) cmd.exe /c $download_dir\\FlipInstaller.exe; break;;
|
[Yy]* ) cmd.exe /c FlipInstaller.exe; break;;
|
||||||
[Nn]* ) break;;
|
[Nn]* ) break;;
|
||||||
* ) echo "Invalid answer";;
|
* ) echo "Invalid answer";;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
popd
|
||||||
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
echo
|
|
||||||
echo "Which USB drivers do you want to install?"
|
|
||||||
echo "(A)all - All supported drivers will be installed"
|
|
||||||
echo "(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode) will be installed"
|
|
||||||
echo "(F)force - Like all, but will also override existing drivers for connected keyboards"
|
|
||||||
echo "(N)one - No drivers will be installed, flashing your keyboard will most likely not work"
|
|
||||||
read -p "(A/C/F/N)? " res
|
|
||||||
case $res in
|
|
||||||
[Aa]* ) install_drivers --all; break;;
|
|
||||||
[Cc]* ) install_drivers; break;;
|
|
||||||
[Ff]* ) install_drivers --all --force; break;;
|
|
||||||
[Nn]* ) break;;
|
|
||||||
* ) echo "Invalid answer";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Creating a softlink to the utils directory as ~/qmk_utils."
|
echo "Creating a softlink to the utils directory as ~/qmk_utils."
|
||||||
echo "This is needed so that the the make system can find all utils it need."
|
echo "This is needed so that the the make system can find all utils it need."
|
||||||
@@ -124,9 +62,9 @@ then
|
|||||||
else
|
else
|
||||||
while true; do
|
while true; do
|
||||||
echo
|
echo
|
||||||
echo "Do you want to add 'source ~/qmk_utils/activate_wsl.sh' to the end of you .bashrc file?"
|
echo "Do you want to add 'source ~/qmk_utils/activate_wsl.sh' to the end of your"
|
||||||
echo "Without this make won't find the needed utils, so if you don't want to do it automatically,"
|
echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
|
||||||
echo "then you have to do it manually."
|
echo "want to do it automatically, then you have to do it manually later."
|
||||||
read -p "(Y/N)? " res
|
read -p "(Y/N)? " res
|
||||||
case $res in
|
case $res in
|
||||||
[Yy]* ) echo "source ~/qmk_utils/activate_wsl.sh" >> ~/.bashrc; break;;
|
[Yy]* ) echo "source ~/qmk_utils/activate_wsl.sh" >> ~/.bashrc; break;;
|
||||||
@@ -138,9 +76,10 @@ fi
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
echo
|
echo
|
||||||
echo "Do you want to add a symlink to the QMK repository in your home directory for convenience?"
|
echo "Do you want to add a symlink to the QMK repository in your home directory for"
|
||||||
echo "This will create a folder 'qmk_firmware' in your home directory."
|
echo "convenience? This will create a folder 'qmk_firmware' in your home directory."
|
||||||
echo "In the future you can use this folder instead of the full path on your windows file system"
|
echo "In the future you can use this folder instead of the full path on your Windows"
|
||||||
|
echo "file system."
|
||||||
read -p "(Y/N)? " res
|
read -p "(Y/N)? " res
|
||||||
case $res in
|
case $res in
|
||||||
[Yy]* ) ln -sfn "$dir/.." ~/qmk_firmware; break;;
|
[Yy]* ) ln -sfn "$dir/.." ~/qmk_firmware; break;;
|
||||||
@@ -156,4 +95,3 @@ echo "You need to open a new batch command prompt for all the utils to work prop
|
|||||||
echo "******************************************************************************"
|
echo "******************************************************************************"
|
||||||
|
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
|
|
||||||
Reference in new issue
Block a user