From 3568065141279baa3dfff0e6a65fbf6ab8d14676 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 12 Feb 2016 09:33:38 +0200 Subject: [PATCH 001/551] Add readme --- readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 00000000000..82bf8bfdfa9 --- /dev/null +++ b/readme.md @@ -0,0 +1 @@ +A visualization library for the TMK keyboard firmware From 4452f4965dae25bb3707e64858221784318c4f56 Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Fri, 12 Feb 2016 09:59:39 +0200 Subject: [PATCH 002/551] Add MIT license --- LICENSE.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000000..d7cc3198cb3 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From bb75446b0beb4db28b775a2e2db61d91f0f0324a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 16:44:14 +0200 Subject: [PATCH 003/551] Add uGFX submodule v 2.4 --- .gitmodules | 3 +++ ugfx | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 ugfx diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..2ab25f6883c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ugfx"] + path = ugfx + url = https://bitbucket.org/Tectu/ugfx.git diff --git a/ugfx b/ugfx new file mode 160000 index 00000000000..2b66ac524bd --- /dev/null +++ b/ugfx @@ -0,0 +1 @@ +Subproject commit 2b66ac524bd56853ba97b917683971f3ebc0104c From fb681b5a60ae5b13a0413c815b4564d60fa200c5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 17:47:39 +0200 Subject: [PATCH 004/551] Add makefile that includes ugfx --- visualizer.mk | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 visualizer.mk diff --git a/visualizer.mk b/visualizer.mk new file mode 100644 index 00000000000..c5ae0dfa958 --- /dev/null +++ b/visualizer.mk @@ -0,0 +1,26 @@ +# The MIT License (MIT) +# +# Copyright (c) 2016 Fred Sundvik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +GFXLIB = $(VISUALIZER_DIR)/ugfx +include $(GFXLIB)/gfx.mk +SRC += $(GFXSRC) +INC += $(GFXINC) From 01b955aa64766d51191a716d3a9d74d35f221b28 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 19:21:16 +0200 Subject: [PATCH 005/551] Add LCD backlight support Also possibility to disable the LCD support --- lcd_backlight.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ lcd_backlight.h | 42 ++++++++++++++++++++++++ visualizer.mk | 9 +++++- 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 lcd_backlight.c create mode 100644 lcd_backlight.h diff --git a/lcd_backlight.c b/lcd_backlight.c new file mode 100644 index 00000000000..70187d1e000 --- /dev/null +++ b/lcd_backlight.c @@ -0,0 +1,85 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "lcd_backlight.h" +#include + +static uint8_t current_hue = 0x00; +static uint8_t current_saturation = 0x00; +static uint8_t current_intensity = 0xFF; +static uint8_t current_brightness = 0x7F; + +void lcd_backlight_init(void) { + lcd_backlight_hal_init(); + lcd_backlight_color(current_hue, current_saturation, current_intensity); +} + +// This code is based on Brian Neltner's blogpost and example code +// "Why every LED light should be using HSI colorspace". +// http://blog.saikoled.com/post/43693602826/why-every-led-light-should-be-using-hsi +static void hsi_to_rgb(float h, float s, float i, uint16_t* r_out, uint16_t* g_out, uint16_t* b_out) { + unsigned int r, g, b; + h = fmodf(h, 360.0f); // cycle h around to 0-360 degrees + h = 3.14159f * h / 180.0f; // Convert to radians. + s = s > 0.0f ? (s < 1.0f ? s : 1.0f) : 0.0f; // clamp s and i to interval [0,1] + i = i > 0.0f ? (i < 1.0f ? i : 1.0f) : 0.0f; + + // Math! Thanks in part to Kyle Miller. + if(h < 2.09439f) { + r = 65535.0f * i/3.0f *(1.0f + s * cos(h) / cosf(1.047196667f - h)); + g = 65535.0f * i/3.0f *(1.0f + s *(1.0f - cosf(h) / cos(1.047196667f - h))); + b = 65535.0f * i/3.0f *(1.0f - s); + } else if(h < 4.188787) { + h = h - 2.09439; + g = 65535.0f * i/3.0f *(1.0f + s * cosf(h) / cosf(1.047196667f - h)); + b = 65535.0f * i/3.0f *(1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h))); + r = 65535.0f * i/3.0f *(1.0f - s); + } else { + h = h - 4.188787; + b = 65535.0f*i/3.0f * (1.0f + s * cosf(h) / cosf(1.047196667f - h)); + r = 65535.0f*i/3.0f * (1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h))); + g = 65535.0f*i/3.0f * (1.0f - s); + } + *r_out = r > 65535 ? 65535 : r; + *g_out = g > 65535 ? 65535 : g; + *b_out = b > 65535 ? 65535 : b; +} + +void lcd_backlight_color(uint8_t hue, uint8_t saturation, uint8_t intensity) { + uint16_t r, g, b; + float hue_f = 360.0f * (float)hue / 255.0f; + float saturation_f = (float)saturation / 255.0f; + float intensity_f = (float)intensity / 255.0f; + intensity_f *= (float)current_brightness / 255.0f; + hsi_to_rgb(hue_f, saturation_f, intensity_f, &r, &g, &b); + current_hue = hue; + current_saturation = saturation; + current_intensity = intensity; + lcd_backlight_hal_color(r, g, b); +} + +void lcd_backlight_brightness(uint8_t b) { + current_brightness = b; + lcd_backlight_color(current_hue, current_saturation, current_intensity); +} diff --git a/lcd_backlight.h b/lcd_backlight.h new file mode 100644 index 00000000000..dd3e37a064d --- /dev/null +++ b/lcd_backlight.h @@ -0,0 +1,42 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef LCD_BACKLIGHT_H_ +#define LCD_BACKLIGHT_H_ +#include "stdint.h" + +// Helper macros for storing hue, staturation and intensity as unsigned integers +#define LCD_COLOR(hue, saturation, intensity) (hue << 16 | saturation << 8 | intensity) +#define LCD_HUE(color) ((color >> 16) & 0xFF) +#define LCD_SAT(color) ((color >> 8) & 0xFF) +#define LCD_INT(color) (color & 0xFF) + +void lcd_backlight_init(void); +void lcd_backlight_color(uint8_t hue, uint8_t saturation, uint8_t intensity); +void lcd_backlight_brightness(uint8_t b); + +void lcd_backlight_hal_init(void); +void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b); + +#endif /* LCD_BACKLIGHT_H_ */ diff --git a/visualizer.mk b/visualizer.mk index c5ae0dfa958..8ffc1e4acaa 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -21,6 +21,13 @@ # SOFTWARE. GFXLIB = $(VISUALIZER_DIR)/ugfx +ifdef LCD_ENABLE include $(GFXLIB)/gfx.mk +endif SRC += $(GFXSRC) -INC += $(GFXINC) +INC += $(GFXINC) $(VISUALIZER_DIR) + +ifdef LCD_BACKLIGHT_ENABLE +SRC += $(VISUALIZER_DIR)/lcd_backlight.c +SRC += lcd_backlight_hal.c +endif From 9e58d022ba4320ce0917defe4b81c1c7b5de77bb Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 19:38:23 +0200 Subject: [PATCH 006/551] Add visualizer A generic visualizer that supports animations. There's a few predefined keyframe types included, and more can be added by the user. --- visualizer.c | 349 ++++++++++++++++++++++++++++++++++++++++++++++++++ visualizer.h | 120 +++++++++++++++++ visualizer.mk | 4 +- 3 files changed, 472 insertions(+), 1 deletion(-) create mode 100644 visualizer.c create mode 100644 visualizer.h diff --git a/visualizer.c b/visualizer.c new file mode 100644 index 00000000000..2a92524e25b --- /dev/null +++ b/visualizer.c @@ -0,0 +1,349 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "visualizer.h" +#include "ch.h" +#include + +#ifdef LCD_ENABLE +#include "gfx.h" +#endif + +#ifdef LCD_BACKLIGHT_ENABLE +#include "lcd_backlight.h" +#endif + +//#define DEBUG_VISUALIZER + +#ifdef DEBUG_VISUALIZER +#include "debug.h" +#else +#include "nodebug.h" +#endif + + +static visualizer_keyboard_status_t current_status = { + .layer = 0xFFFFFFFF, + .default_layer = 0xFFFFFFFF, + .leds = 0xFFFFFFFF, +}; + +static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) { + return memcmp(status1, status2, sizeof(visualizer_keyboard_status_t)) == 0; +} + +static event_source_t layer_changed_event; +static bool visualizer_enabled = false; + +#define MAX_SIMULTANEOUS_ANIMATIONS 4 +static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {}; + +void start_keyframe_animation(keyframe_animation_t* animation) { + animation->current_frame = -1; + animation->time_left_in_frame = 0; + animation->need_update = true; + int free_index = -1; + for (int i=0;icurrent_frame = animation->num_frames; + animation->time_left_in_frame = 0; + animation->need_update = true; + for (int i=0;icurrent_frame, + animation->time_left_in_frame, delta); + if (animation->current_frame == animation->num_frames) { + animation->need_update = false; + return false; + } + if (animation->current_frame == -1) { + animation->current_frame = 0; + animation->time_left_in_frame = animation->frame_lengths[0]; + animation->need_update = true; + } else { + animation->time_left_in_frame -= delta; + while (animation->time_left_in_frame <= 0) { + int left = animation->time_left_in_frame; + if (animation->need_update) { + animation->time_left_in_frame = 0; + (*animation->frame_functions[animation->current_frame])(animation, state); + } + animation->current_frame++; + animation->need_update = true; + if (animation->current_frame == animation->num_frames) { + if (animation->loop) { + animation->current_frame = 0; + } + else { + stop_keyframe_animation(animation); + return false; + } + } + delta = -left; + animation->time_left_in_frame = animation->frame_lengths[animation->current_frame]; + animation->time_left_in_frame -= delta; + } + } + if (animation->need_update) { + animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state); + } + + int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame; + if ((unsigned)wanted_sleep < *sleep_time) { + *sleep_time = wanted_sleep; + } + + return true; +} + +bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + (void)state; + return false; +} + +#ifdef LCD_BACKLIGHT_ENABLE +bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) { + int frame_length = animation->frame_lengths[1]; + int current_pos = frame_length - animation->time_left_in_frame; + uint8_t t_h = LCD_HUE(state->target_lcd_color); + uint8_t t_s = LCD_SAT(state->target_lcd_color); + uint8_t t_i = LCD_INT(state->target_lcd_color); + uint8_t p_h = LCD_HUE(state->prev_lcd_color); + uint8_t p_s = LCD_SAT(state->prev_lcd_color); + uint8_t p_i = LCD_INT(state->prev_lcd_color); + + uint8_t d_h1 = t_h - p_h; //Modulo arithmetic since we want to wrap around + int d_h2 = t_h - p_h; + // Chose the shortest way around + int d_h = abs(d_h2) < d_h1 ? d_h2 : d_h1; + int d_s = t_s - p_s; + int d_i = t_i - p_i; + + int hue = (d_h * current_pos) / frame_length; + int sat = (d_s * current_pos) / frame_length; + int intensity = (d_i * current_pos) / frame_length; + //dprintf("%X -> %X = %X\n", p_h, t_h, hue); + hue += p_h; + sat += p_s; + intensity += p_i; + state->current_lcd_color = LCD_COLOR(hue, sat, intensity); + lcd_backlight_color( + LCD_HUE(state->current_lcd_color), + LCD_SAT(state->current_lcd_color), + LCD_INT(state->current_lcd_color)); + + return true; +} + +bool keyframe_set_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + state->prev_lcd_color = state->target_lcd_color; + state->current_lcd_color = state->target_lcd_color; + lcd_backlight_color( + LCD_HUE(state->current_lcd_color), + LCD_SAT(state->current_lcd_color), + LCD_INT(state->current_lcd_color)); + return false; +} +#endif // LCD_BACKLIGHT_ENABLE + +#ifdef LCD_ENABLE +bool keyframe_display_layer_text(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + gdispClear(White); + gdispDrawString(0, 10, state->layer_text, state->font_dejavusansbold12, Black); + gdispFlush(); + return false; +} + +static void format_layer_bitmap_string(uint16_t default_layer, uint16_t layer, char* buffer) { + for (int i=0; i<16;i++) + { + uint32_t mask = (1u << i); + if (default_layer & mask) { + if (layer & mask) { + *buffer = 'B'; + } else { + *buffer = 'D'; + } + } else if (layer & mask) { + *buffer = '1'; + } else { + *buffer = '0'; + } + ++buffer; + + if (i==3 || i==7 || i==11) { + *buffer = ' '; + ++buffer; + } + } + *buffer = 0; +} + +bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + const char* layer_help = "1=On D=Default B=Both"; + char layer_buffer[16 + 4]; // 3 spaces and one null terminator + gdispClear(White); + gdispDrawString(0, 0, layer_help, state->font_fixed5x8, Black); + format_layer_bitmap_string(state->status.default_layer, state->status.layer, layer_buffer); + gdispDrawString(0, 10, layer_buffer, state->font_fixed5x8, Black); + format_layer_bitmap_string(state->status.default_layer >> 16, state->status.layer >> 16, layer_buffer); + gdispDrawString(0, 20, layer_buffer, state->font_fixed5x8, Black); + gdispFlush(); + return false; +} +#endif // LCD_ENABLE + +bool user_visualizer_inited(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + (void)state; + dprint("User visualizer inited\n"); + visualizer_enabled = true; + return false; +} + +// TODO: Optimize the stack size, this is probably way too big +static THD_WORKING_AREA(visualizerThreadStack, 1024); +static THD_FUNCTION(visualizerThread, arg) { + (void)arg; + + event_listener_t event_listener; + chEvtRegister(&layer_changed_event, &event_listener, 0); + + visualizer_state_t state = { + .status = { + .default_layer = 0xFFFFFFFF, + .layer = 0xFFFFFFFF, + .leds = 0xFFFFFFFF, + }, + + .current_lcd_color = 0, +#ifdef LCD_ENABLE + .font_fixed5x8 = gdispOpenFont("fixed_5x8"), + .font_dejavusansbold12 = gdispOpenFont("DejaVuSansBold12") +#endif + }; + initialize_user_visualizer(&state); + state.prev_lcd_color = state.current_lcd_color; + +#ifdef LCD_BACKLIGHT_ENABLE + lcd_backlight_color( + LCD_HUE(state.current_lcd_color), + LCD_SAT(state.current_lcd_color), + LCD_INT(state.current_lcd_color)); +#endif + + systime_t sleep_time = TIME_INFINITE; + systime_t current_time = chVTGetSystemTimeX(); + + while(true) { + systime_t new_time = chVTGetSystemTimeX(); + systime_t delta = new_time - current_time; + current_time = new_time; + bool enabled = visualizer_enabled; + if (!same_status(&state.status, ¤t_status)) { + if (visualizer_enabled) { + state.status = current_status; + update_user_visualizer_state(&state); + state.prev_lcd_color = state.current_lcd_color; + } + } + sleep_time = TIME_INFINITE; + for (int i=0;i update_delta) { + sleep_time -= update_delta; + } + else { + sleep_time = 0; + } + } + dprintf("Update took %d, last delta %d, sleep_time %d\n", update_delta, delta, sleep_time); + chEvtWaitOneTimeout(EVENT_MASK(0), sleep_time); + } +#ifdef LCD_ENABLE + gdispCloseFont(state.font_fixed5x8); + gdispCloseFont(state.font_dejavusansbold12); +#endif +} + +void visualizer_init(void) { + // We are using a low priority thread, the idea is to have it run only + // when the main thread is sleeping during the matrix scanning + chEvtObjectInit(&layer_changed_event); + (void)chThdCreateStatic(visualizerThreadStack, sizeof(visualizerThreadStack), + LOWPRIO, visualizerThread, NULL); +} + +void visualizer_set_state(uint32_t default_state, uint32_t state, uint32_t leds) { + // Note that there's a small race condition here, the thread could read + // a state where one of these are set but not the other. But this should + // not really matter as it will be fixed during the next loop step. + // Alternatively a mutex could be used instead of the volatile variables + bool changed = false; + visualizer_keyboard_status_t new_status = { + .layer = state, + .default_layer = default_state, + .leds = leds, + }; + if (!same_status(¤t_status, &new_status)) { + changed = true; + } + current_status = new_status; + if (changed) { + chEvtBroadcast(&layer_changed_event); + } +} diff --git a/visualizer.h b/visualizer.h new file mode 100644 index 00000000000..b7b0a3a7d06 --- /dev/null +++ b/visualizer.h @@ -0,0 +1,120 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef VISUALIZER_H +#define VISUALIZER_H +#include +#include +#include + +#ifdef LCD_ENABLE +#include "gfx.h" +#endif + +#ifdef LCD_BACKLIGHT_ENABLE +#include "lcd_backlight.h" +#endif + +// This need to be called once at the start +void visualizer_init(void); +// This should be called before every matrix scan +void visualizer_set_state(uint32_t default_state, uint32_t state, uint32_t leds); + +// If you need support for more than 8 keyframes per animation, you can change this +#define MAX_VISUALIZER_KEY_FRAMES 8 + +struct keyframe_animation_t; + +typedef struct { + uint32_t layer; + uint32_t default_layer; + uint32_t leds; // See led.h for available statuses +} visualizer_keyboard_status_t; + +// The state struct is used by the various keyframe functions +// It's also used for setting the LCD color and layer text +// from the user customized code +typedef struct visualizer_state_t { + // The user code should primarily be modifying these + uint32_t target_lcd_color; + const char* layer_text; + + // The user visualizer(and animation functions) can read these + visualizer_keyboard_status_t status; + + // These are used by the animation functions + uint32_t current_lcd_color; + uint32_t prev_lcd_color; +#ifdef LCD_ENABLE + font_t font_fixed5x8; + font_t font_dejavusansbold12; +#endif +} visualizer_state_t; + +// Any custom keyframe function should have this signature +// return true to get continuous updates, otherwise you will only get one +// update per frame +typedef bool (*frame_func)(struct keyframe_animation_t*, visualizer_state_t*); + +// Represents a keyframe animation, so fields are internal to the system +// while others are meant to be initialized by the user code +typedef struct keyframe_animation_t { + // These should be initialized + int num_frames; + bool loop; + int frame_lengths[MAX_VISUALIZER_KEY_FRAMES]; + frame_func frame_functions[MAX_VISUALIZER_KEY_FRAMES]; + + // Used internally by the system, and can also be read by + // keyframe update functions + int current_frame; + int time_left_in_frame; + bool need_update; + +} keyframe_animation_t; + +void start_keyframe_animation(keyframe_animation_t* animation); +void stop_keyframe_animation(keyframe_animation_t* animation); + +// Some predefined keyframe functions that can be used by the user code +// Does nothing, useful for adding delays +bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* state); +// Animates the LCD backlight color between the current color and the target color (of the state) +bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state); +// Sets the backlight color to the target color +bool keyframe_set_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state); +// Displays the layer text centered vertically on the screen +bool keyframe_display_layer_text(keyframe_animation_t* animation, visualizer_state_t* state); +// Displays a bitmap (0/1) of all the currently active layers +bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_state_t* state); +// Call this once, when the initial animation has finished, alternatively you can call it +// directly from the initalize_user_visualizer function (the animation can be null) +bool user_visualizer_inited(keyframe_animation_t* animation, visualizer_state_t* state); + +// These two functions have to be implemented by the user +void initialize_user_visualizer(visualizer_state_t* state); +void update_user_visualizer_state(visualizer_state_t* state); + + +#endif /* VISUALIZER_H */ diff --git a/visualizer.mk b/visualizer.mk index 8ffc1e4acaa..ff4b61f089d 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -23,11 +23,13 @@ GFXLIB = $(VISUALIZER_DIR)/ugfx ifdef LCD_ENABLE include $(GFXLIB)/gfx.mk +OPT_DEFS += -DLCD_ENABLE endif -SRC += $(GFXSRC) +SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c INC += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c SRC += lcd_backlight_hal.c +OPT_DEFS += -DLCD_BACKLIGHT_ENABLE endif From 209167d4d6a7e65a728fab5d996904cc5fb33a3c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 19:52:57 +0200 Subject: [PATCH 007/551] Compile the user visualizer --- visualizer.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/visualizer.mk b/visualizer.mk index ff4b61f089d..e6e0d63d032 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -33,3 +33,8 @@ SRC += $(VISUALIZER_DIR)/lcd_backlight.c SRC += lcd_backlight_hal.c OPT_DEFS += -DLCD_BACKLIGHT_ENABLE endif + +ifndef VISUALIZER_USER +VISUALIZER_USER = visualizer_user.c +endif +SRC += $(VISUALIZER_USER) \ No newline at end of file From 8ce60649c85f1ad5371d443675f91c8fc36c3d2e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 20:29:49 +0200 Subject: [PATCH 008/551] Initialize backlight and LCD during visualizer_init --- visualizer.c | 7 +++++++ visualizer.mk | 1 + 2 files changed, 8 insertions(+) diff --git a/visualizer.c b/visualizer.c index 2a92524e25b..402bbd15171 100644 --- a/visualizer.c +++ b/visualizer.c @@ -321,6 +321,13 @@ static THD_FUNCTION(visualizerThread, arg) { } void visualizer_init(void) { +#ifdef LCD_ENABLE + gfxInit(); +#endif + +#ifdef LCD_BACKLIGHT_ENABLE + lcd_backlight_init(); +#endif // We are using a low priority thread, the idea is to have it run only // when the main thread is sleeping during the matrix scanning chEvtObjectInit(&layer_changed_event); diff --git a/visualizer.mk b/visualizer.mk index e6e0d63d032..eef2d5cc8af 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -24,6 +24,7 @@ GFXLIB = $(VISUALIZER_DIR)/ugfx ifdef LCD_ENABLE include $(GFXLIB)/gfx.mk OPT_DEFS += -DLCD_ENABLE +OPT_LIBS += -lm endif SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c INC += $(GFXINC) $(VISUALIZER_DIR) From 8479e6aa390bdd7711753d9fa1141bd1073e2b0a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 22:08:49 +0200 Subject: [PATCH 009/551] Update readme and license Also add integration examples --- LICENSE.md | 8 + example_integration/callbacks.c | 50 ++++ example_integration/gfxconf.h | 325 ++++++++++++++++++++++++ example_integration/lcd_backlight_hal.c | 90 +++++++ example_integration/visualizer_user.c | 135 ++++++++++ readme.md | 19 +- 6 files changed, 626 insertions(+), 1 deletion(-) create mode 100644 example_integration/callbacks.c create mode 100644 example_integration/gfxconf.h create mode 100644 example_integration/lcd_backlight_hal.c create mode 100644 example_integration/visualizer_user.c diff --git a/LICENSE.md b/LICENSE.md index d7cc3198cb3..22d4c3f08b4 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,3 +1,11 @@ +The files in this project are licensed under the MIT license +It uses the following libraries +uGFX - with it's own license, see the license.html file in the uGFX subfolder for more information +tmk_core - is indirectly used and not included in the repository. It's licensed under the GPLv2 license +Chibios - which is used by tmk_core is licensed under GPLv3. + +Therefore the effective license for any project using the library is GPLv3 + The MIT License (MIT) Copyright (c) 2016 Fred Sundvik diff --git a/example_integration/callbacks.c b/example_integration/callbacks.c new file mode 100644 index 00000000000..21b2d9f7486 --- /dev/null +++ b/example_integration/callbacks.c @@ -0,0 +1,50 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +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 . +*/ + +#include "keyboard.h" +#include "action_layer.h" +#include "visualizer.h" +#include "host.h" + +void post_keyboard_init(void) { + visualizer_init(); +} + +void post_keyboard_task() { + visualizer_set_state(default_layer_state, layer_state, host_keyboard_leds()); +} diff --git a/example_integration/gfxconf.h b/example_integration/gfxconf.h new file mode 100644 index 00000000000..304c5d187a9 --- /dev/null +++ b/example_integration/gfxconf.h @@ -0,0 +1,325 @@ +/** + * This file has a different license to the rest of the uGFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +/** + * Copy this file into your project directory and rename it as gfxconf.h + * Edit your copy to turn on the uGFX features you want to use. + * The values below are the defaults. + * + * Only remove the comments from lines where you want to change the + * default value. This allows definitions to be included from + * driver makefiles when required and provides the best future + * compatibility for your project. + * + * Please use spaces instead of tabs in this file. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + + +/////////////////////////////////////////////////////////////////////////// +// GOS - One of these must be defined, preferably in your Makefile // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_OS_CHIBIOS TRUE +//#define GFX_USE_OS_FREERTOS FALSE +// #define GFX_FREERTOS_USE_TRACE FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE +//#define GFX_USE_OS_ECOS FALSE +//#define GFX_USE_OS_RAWRTOS FALSE +//#define GFX_USE_OS_ARDUINO FALSE +//#define GFX_USE_OS_KEIL FALSE +//#define GFX_USE_OS_CMSIS FALSE +//#define GFX_USE_OS_RAW32 FALSE +// #define INTERRUPTS_OFF() optional_code +// #define INTERRUPTS_ON() optional_code +// These are not defined by default for some reason +#define GOS_NEED_X_THREADS FALSE +#define GOS_NEED_X_HEAP FALSE + +// Options that (should where relevant) apply to all operating systems + #define GFX_NO_INLINE FALSE +// #define GFX_COMPILER GFX_COMPILER_UNKNOWN +// #define GFX_CPU GFX_CPU_UNKNOWN +// #define GFX_OS_HEAP_SIZE 0 +// #define GFX_OS_NO_INIT FALSE +// #define GFX_OS_INIT_NO_WARNING FALSE +// #define GFX_OS_PRE_INIT_FUNCTION myHardwareInitRoutine +// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine +// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine + + +/////////////////////////////////////////////////////////////////////////// +// GDISP // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GDISP TRUE + +//#define GDISP_NEED_AUTOFLUSH FALSE +//#define GDISP_NEED_TIMERFLUSH FALSE +//#define GDISP_NEED_VALIDATION TRUE +//#define GDISP_NEED_CLIP TRUE +//#define GDISP_NEED_CIRCLE FALSE +//#define GDISP_NEED_ELLIPSE FALSE +//#define GDISP_NEED_ARC FALSE +//#define GDISP_NEED_ARCSECTORS FALSE +//#define GDISP_NEED_CONVEX_POLYGON FALSE +//#define GDISP_NEED_SCROLL FALSE +//#define GDISP_NEED_PIXELREAD FALSE +//#define GDISP_NEED_CONTROL FALSE +//#define GDISP_NEED_QUERY FALSE +//#define GDISP_NEED_MULTITHREAD FALSE +//#define GDISP_NEED_STREAMING FALSE +#define GDISP_NEED_TEXT TRUE +// #define GDISP_NEED_TEXT_WORDWRAP FALSE +// #define GDISP_NEED_ANTIALIAS FALSE +// #define GDISP_NEED_UTF8 FALSE + #define GDISP_NEED_TEXT_KERNING TRUE +// #define GDISP_INCLUDE_FONT_UI1 FALSE +// #define GDISP_INCLUDE_FONT_UI2 FALSE // The smallest preferred font. +// #define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE + #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 TRUE +// #define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE +// #define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE + #define GDISP_INCLUDE_FONT_FIXED_5X8 TRUE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE +// #define GDISP_INCLUDE_USER_FONTS FALSE + +//#define GDISP_NEED_IMAGE FALSE +// #define GDISP_NEED_IMAGE_NATIVE FALSE +// #define GDISP_NEED_IMAGE_GIF FALSE +// #define GDISP_NEED_IMAGE_BMP FALSE +// #define GDISP_NEED_IMAGE_BMP_1 FALSE +// #define GDISP_NEED_IMAGE_BMP_4 FALSE +// #define GDISP_NEED_IMAGE_BMP_4_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_8 FALSE +// #define GDISP_NEED_IMAGE_BMP_8_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_16 FALSE +// #define GDISP_NEED_IMAGE_BMP_24 FALSE +// #define GDISP_NEED_IMAGE_BMP_32 FALSE +// #define GDISP_NEED_IMAGE_JPG FALSE +// #define GDISP_NEED_IMAGE_PNG FALSE +// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE + +//#define GDISP_NEED_PIXMAP FALSE +// #define GDISP_NEED_PIXMAP_IMAGE FALSE + +//#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE // If not defined the native hardware orientation is used. +//#define GDISP_LINEBUF_SIZE 128 +//#define GDISP_STARTUP_COLOR Black +#define GDISP_NEED_STARTUP_LOGO FALSE + +//#define GDISP_TOTAL_DISPLAYS 1 + +//#define GDISP_DRIVER_LIST GDISPVMT_Win32, GDISPVMT_Win32 +// #ifdef GDISP_DRIVER_LIST +// // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability +// #define GDISP_HARDWARE_STREAM_WRITE FALSE +// #define GDISP_HARDWARE_STREAM_READ FALSE +// #define GDISP_HARDWARE_STREAM_POS FALSE +// #define GDISP_HARDWARE_DRAWPIXEL FALSE +// #define GDISP_HARDWARE_CLEARS FALSE +// #define GDISP_HARDWARE_FILLS FALSE +// #define GDISP_HARDWARE_BITFILLS FALSE +// #define GDISP_HARDWARE_SCROLL FALSE +// #define GDISP_HARDWARE_PIXELREAD FALSE +// #define GDISP_HARDWARE_CONTROL FALSE +// #define GDISP_HARDWARE_QUERY FALSE +// #define GDISP_HARDWARE_CLIP FALSE + + #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888 +// #endif + +// The custom format is not defined for some reason, so define it as error +// so we don't get compiler warnings +#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR + +#define GDISP_USE_GFXNET FALSE +// #define GDISP_GFXNET_PORT 13001 +// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE +// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE +// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GWIN // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GWIN FALSE + +//#define GWIN_NEED_WINDOWMANAGER FALSE +// #define GWIN_REDRAW_IMMEDIATE FALSE +// #define GWIN_REDRAW_SINGLEOP FALSE +// #define GWIN_NEED_FLASHING FALSE +// #define GWIN_FLASHING_PERIOD 250 + +//#define GWIN_NEED_CONSOLE FALSE +// #define GWIN_CONSOLE_USE_HISTORY FALSE +// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE +// #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE +// #define GWIN_CONSOLE_ESCSEQ FALSE +// #define GWIN_CONSOLE_USE_BASESTREAM FALSE +// #define GWIN_CONSOLE_USE_FLOAT FALSE +//#define GWIN_NEED_GRAPH FALSE +//#define GWIN_NEED_GL3D FALSE + +//#define GWIN_NEED_WIDGET FALSE +//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1 +// #define GWIN_NEED_LABEL FALSE +// #define GWIN_LABEL_ATTRIBUTE FALSE +// #define GWIN_NEED_BUTTON FALSE +// #define GWIN_BUTTON_LAZY_RELEASE FALSE +// #define GWIN_NEED_SLIDER FALSE +// #define GWIN_SLIDER_NOSNAP FALSE +// #define GWIN_SLIDER_DEAD_BAND 5 +// #define GWIN_SLIDER_TOGGLE_INC 20 +// #define GWIN_NEED_CHECKBOX FALSE +// #define GWIN_NEED_IMAGE FALSE +// #define GWIN_NEED_IMAGE_ANIMATION FALSE +// #define GWIN_NEED_RADIO FALSE +// #define GWIN_NEED_LIST FALSE +// #define GWIN_NEED_LIST_IMAGES FALSE +// #define GWIN_NEED_PROGRESSBAR FALSE +// #define GWIN_PROGRESSBAR_AUTO FALSE +// #define GWIN_NEED_KEYBOARD FALSE +// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1 +// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE +// #define GWIN_NEED_TEXTEDIT FALSE +// #define GWIN_FLAT_STYLING FALSE +// #define GWIN_WIDGET_TAGS FALSE + +//#define GWIN_NEED_CONTAINERS FALSE +// #define GWIN_NEED_CONTAINER FALSE +// #define GWIN_NEED_FRAME FALSE +// #define GWIN_NEED_TABSET FALSE +// #define GWIN_TABSET_TABHEIGHT 18 + + +/////////////////////////////////////////////////////////////////////////// +// GEVENT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GEVENT FALSE + +//#define GEVENT_ASSERT_NO_RESOURCE FALSE +//#define GEVENT_MAXIMUM_SIZE 32 +//#define GEVENT_MAX_SOURCE_LISTENERS 32 + + +/////////////////////////////////////////////////////////////////////////// +// GTIMER // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GTIMER FALSE + +//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY +//#define GTIMER_THREAD_WORKAREA_SIZE 2048 + + +/////////////////////////////////////////////////////////////////////////// +// GQUEUE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GQUEUE FALSE + +//#define GQUEUE_NEED_ASYNC FALSE +//#define GQUEUE_NEED_GSYNC FALSE +//#define GQUEUE_NEED_FSYNC FALSE +//#define GQUEUE_NEED_BUFFERS FALSE + +/////////////////////////////////////////////////////////////////////////// +// GINPUT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GINPUT FALSE + +//#define GINPUT_NEED_MOUSE FALSE +// #define GINPUT_TOUCH_STARTRAW FALSE +// #define GINPUT_TOUCH_NOTOUCH FALSE +// #define GINPUT_TOUCH_NOCALIBRATE FALSE +// #define GINPUT_TOUCH_NOCALIBRATE_GUI FALSE +// #define GINPUT_MOUSE_POLL_PERIOD 25 +// #define GINPUT_MOUSE_CLICK_TIME 300 +// #define GINPUT_TOUCH_CXTCLICK_TIME 700 +// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE +// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE +// #define GMOUSE_DRIVER_LIST GMOUSEVMT_Win32, GMOUSEVMT_Win32 +//#define GINPUT_NEED_KEYBOARD FALSE +// #define GINPUT_KEYBOARD_POLL_PERIOD 200 +// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 +// #define GKEYBOARD_LAYOUT_OFF FALSE +// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE +//#define GINPUT_NEED_TOGGLE FALSE +//#define GINPUT_NEED_DIAL FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GFILE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GFILE FALSE + +//#define GFILE_NEED_PRINTG FALSE +//#define GFILE_NEED_SCANG FALSE +//#define GFILE_NEED_STRINGS FALSE +//#define GFILE_NEED_FILELISTS FALSE +//#define GFILE_NEED_STDIO FALSE +//#define GFILE_NEED_NOAUTOMOUNT FALSE +//#define GFILE_NEED_NOAUTOSYNC FALSE + +//#define GFILE_NEED_MEMFS FALSE +//#define GFILE_NEED_ROMFS FALSE +//#define GFILE_NEED_RAMFS FALSE +//#define GFILE_NEED_FATFS FALSE +//#define GFILE_NEED_NATIVEFS FALSE +//#define GFILE_NEED_CHBIOSFS FALSE + +//#define GFILE_ALLOW_FLOATS FALSE +//#define GFILE_ALLOW_DEVICESPECIFIC FALSE +//#define GFILE_MAX_GFILES 3 + +/////////////////////////////////////////////////////////////////////////// +// GADC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GADC FALSE + +//#define GADC_MAX_LOWSPEED_DEVICES 4 + + +/////////////////////////////////////////////////////////////////////////// +// GAUDIO // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GAUDIO FALSE +// There seems to be a bug in the ugfx code, the wrong define is used +// So define it in order to avoid warnings +#define GFX_USE_GAUDIN GFX_USE_GAUDIO +// #define GAUDIO_NEED_PLAY FALSE +// #define GAUDIO_NEED_RECORD FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GMISC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GMISC FALSE + +//#define GMISC_NEED_ARRAYOPS FALSE +//#define GMISC_NEED_FASTTRIG FALSE +//#define GMISC_NEED_FIXEDTRIG FALSE +//#define GMISC_NEED_INVSQRT FALSE +// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE +// #define GMISC_INVSQRT_REAL_SLOW FALSE +//#define GMISC_NEED_MATRIXFLOAT2D FALSE +//#define GMISC_NEED_MATRIXFIXED2D FALSE + +#endif /* _GFXCONF_H */ diff --git a/example_integration/lcd_backlight_hal.c b/example_integration/lcd_backlight_hal.c new file mode 100644 index 00000000000..0f35cb6755b --- /dev/null +++ b/example_integration/lcd_backlight_hal.c @@ -0,0 +1,90 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +#include "lcd_backlight.h" +#include "hal.h" + +#define RED_PIN 1 +#define GREEN_PIN 2 +#define BLUE_PIN 3 +#define CHANNEL_RED FTM0->CHANNEL[0] +#define CHANNEL_GREEN FTM0->CHANNEL[1] +#define CHANNEL_BLUE FTM0->CHANNEL[2] + +#define RGB_PORT PORTC +#define RGB_PORT_GPIO GPIOC + +// Base FTM clock selection (72 MHz system clock) +// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period +// Higher pre-scalar will use the most power (also look the best) +// Pre-scalar calculations +// 0 - 72 MHz -> 549 Hz +// 1 - 36 MHz -> 275 Hz +// 2 - 18 MHz -> 137 Hz +// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) +// 4 - 4 500 kHz -> 34 Hz (Visible flickering) +// 5 - 2 250 kHz -> 17 Hz +// 6 - 1 125 kHz -> 9 Hz +// 7 - 562 500 Hz -> 4 Hz +// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced +// Which will reduce the brightness range +#define PRESCALAR_DEFINE 0 + +void lcd_backlight_hal_init(void) { + // Setup Backlight + SIM->SCGC6 |= SIM_SCGC6_FTM0; + FTM0->CNT = 0; // Reset counter + + // PWM Period + // 16-bit maximum + FTM0->MOD = 0xFFFF; + + // Set FTM to PWM output - Edge Aligned, Low-true pulses +#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) + CHANNEL_RED.CnSC = CNSC_MODE; + CHANNEL_GREEN.CnSC = CNSC_MODE; + CHANNEL_BLUE.CnSC = CNSC_MODE; + + // System clock, /w prescalar setting + FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); + + CHANNEL_RED.CnV = 0; + CHANNEL_GREEN.CnV = 0; + CHANNEL_BLUE.CnV = 0; + + RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); + RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); + RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); + +#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) + RGB_PORT->PCR[RED_PIN] = RGB_MODE; + RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; + RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; +} + +void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { + CHANNEL_RED.CnV = r; + CHANNEL_GREEN.CnV = g; + CHANNEL_BLUE.CnV = b; +} + diff --git a/example_integration/visualizer_user.c b/example_integration/visualizer_user.c new file mode 100644 index 00000000000..a50ecc60da2 --- /dev/null +++ b/example_integration/visualizer_user.c @@ -0,0 +1,135 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +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 . +*/ + +// Currently we are assuming that both the backlight and LCD are enabled +// But it's entirely possible to write a custom visualizer that use only +// one of them +#ifndef LCD_BACKLIGHT_ENABLE +#error This visualizer needs that LCD backlight is enabled +#endif + +#ifndef LCD_ENABLE +#error This visualizer needs that LCD is enabled +#endif + +#include "visualizer.h" + +static const char* welcome_text[] = {"TMK", "Infinity Ergodox"}; + +// Just an example how to write custom keyframe functions, we could have moved +// all this into the init function +bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + // Read the uGFX documentation for information how to use the displays + // http://wiki.ugfx.org/index.php/Main_Page + gdispClear(White); + // You can use static variables for things that can't be found in the animation + // or state structs + gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black); + gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black); + // Always remember to flush the display + gdispFlush(); + // you could set the backlight color as well, but we won't do it here, since + // it's part of the following animation + // lcd_backlight_color(hue, saturation, intensity); + // We don't need constant updates, just drawing the screen once is enough + return false; +} + +// Feel free to modify the animations below, or even add new ones if needed + +// Don't worry, if the startup animation is long, you can use the keyboard like normal +// during that time +static keyframe_animation_t startup_animation = { + .num_frames = 4, + .loop = false, + .frame_lengths = {0, MS2ST(1000), MS2ST(5000), 0}, + .frame_functions = {display_welcome, keyframe_animate_backlight_color, keyframe_no_operation, user_visualizer_inited}, +}; + +// The color animation animates the LCD color when you change layers +static keyframe_animation_t color_animation = { + .num_frames = 2, + .loop = false, + // Note that there's a 200 ms no-operation frame, + // this prevents the color from changing when activating the layer + // momentarily + .frame_lengths = {MS2ST(200), MS2ST(500)}, + .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, +}; + +// The LCD animation alternates between the layer name display and a +// bitmap that displays all active layers +static keyframe_animation_t lcd_animation = { + .num_frames = 2, + .loop = true, + .frame_lengths = {MS2ST(2000), MS2ST(2000)}, + .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap}, +}; + +void initialize_user_visualizer(visualizer_state_t* state) { + // The brightness will be dynamically adjustable in the future + // But for now, change it here. + lcd_backlight_brightness(0x50); + state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF); + state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); + start_keyframe_animation(&startup_animation); +} + +void update_user_visualizer_state(visualizer_state_t* state) { + // Add more tests, change the colors and layer texts here + // Usually you want to check the high bits (higher layers first) + // because that's the order layers are processed for keypresses + // You can for check for example: + // state->status.layer + // state->status.default_layer + // state->status.leds (see led.h for available statuses) + if (state->status.layer & 0x2) { + state->target_lcd_color = LCD_COLOR(0xA0, 0xB0, 0xFF); + state->layer_text = "Layer 2"; + } + else { + state->target_lcd_color = LCD_COLOR(0x50, 0xB0, 0xFF); + state->layer_text = "Layer 1"; + } + // You can also stop existing animations, and start your custom ones here + // remember that you should normally have only one animation for the LCD + // and one for the background. But you can also combine them if you want. + start_keyframe_animation(&lcd_animation); + start_keyframe_animation(&color_animation); +} diff --git a/readme.md b/readme.md index 82bf8bfdfa9..545ba227078 100644 --- a/readme.md +++ b/readme.md @@ -1 +1,18 @@ -A visualization library for the TMK keyboard firmware +# A visualization library for the TMK keyboard firmware + +This library is designed to work together with the [TMK keyboard firmware](https://github.com/tmk/tmk_keyboard). Currently it only works for [Chibios](http://www.chibios.org/) + flavors, but it would be possible to add support for other configurations as well. The LCD display functionality is provided by the [uGFX library](http://www.ugfx.org/). + +## To use this library as a user +You can and should modify the visualizer\_user.c file. Check the comments in the file for more information. + +## To add this library to custom keyboard projects + +1. Add tmk_visualizer as a submodule to your project +1. Set VISUALIZER_DIR in the main keyboard project makefile to point to the submodule +1. Define LCD\_ENABLE and/or LCD\_BACKLIGHT\_ENABLE, to enable support +1. Include the visualizer.mk make file +1. Copy the files in the example\_integration folder to your keyboard project +1. All other files than the callback.c file are included automatically, so you will need to add callback.c to your makefile manually. If you already have a similar file in your project, you can just copy the functions instead of the whole file. +1. Edit the files to match your hardware. You might might want to read the Chibios and UGfx documentation, for more information. +1. If you enable LCD support you might also have to write a custom uGFX display driver, check the uGFX documentation for that. You probably also want to enable SPI support in your Chibios configuration. From c5db02925c6bf73ef1df1f718e09ff304266a535 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 13 Feb 2016 22:19:49 +0200 Subject: [PATCH 010/551] Clean up wrong license information --- example_integration/callbacks.c | 14 -------------- example_integration/lcd_backlight_hal.c | 1 + example_integration/visualizer_user.c | 14 -------------- 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/example_integration/callbacks.c b/example_integration/callbacks.c index 21b2d9f7486..2539615d65d 100644 --- a/example_integration/callbacks.c +++ b/example_integration/callbacks.c @@ -22,20 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -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 . -*/ - #include "keyboard.h" #include "action_layer.h" #include "visualizer.h" diff --git a/example_integration/lcd_backlight_hal.c b/example_integration/lcd_backlight_hal.c index 0f35cb6755b..913131b1692 100644 --- a/example_integration/lcd_backlight_hal.c +++ b/example_integration/lcd_backlight_hal.c @@ -21,6 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #include "lcd_backlight.h" #include "hal.h" diff --git a/example_integration/visualizer_user.c b/example_integration/visualizer_user.c index a50ecc60da2..6c4619d9540 100644 --- a/example_integration/visualizer_user.c +++ b/example_integration/visualizer_user.c @@ -22,20 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -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 . -*/ - // Currently we are assuming that both the backlight and LCD are enabled // But it's entirely possible to write a custom visualizer that use only // one of them From ffc425603dcbedf0da1d6aa1759f8f14f3a5e841 Mon Sep 17 00:00:00 2001 From: fredizzimo Date: Sat, 13 Feb 2016 23:26:39 +0200 Subject: [PATCH 011/551] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 1 + 2 files changed, 22 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000..d66406efdf7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 fredizzimo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000000..94af9125cef --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# tmk_serial_link \ No newline at end of file From e70cefc12fb897f7221f7b1bc6fe0ce595eb2de1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 00:05:58 +0200 Subject: [PATCH 012/551] Add cgreen unit test library and makefile --- .gitmodules | 3 +++ cgreen/Makefile | 38 ++++++++++++++++++++++++++++++++++++++ cgreen/Makefile.build | 33 +++++++++++++++++++++++++++++++++ cgreen/cgreen | 1 + serial_link.mk | 11 +++++++++++ 5 files changed, 86 insertions(+) create mode 100644 .gitmodules create mode 100644 cgreen/Makefile create mode 100644 cgreen/Makefile.build create mode 160000 cgreen/cgreen create mode 100644 serial_link.mk diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..991cfe96d76 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "cgreen/cgreen"] + path = cgreen/cgreen + url = http://github.com/cgreen-devs/cgreen diff --git a/cgreen/Makefile b/cgreen/Makefile new file mode 100644 index 00000000000..6b31a3f9232 --- /dev/null +++ b/cgreen/Makefile @@ -0,0 +1,38 @@ +# This Makefile ensures that the build is made out of source in a subdirectory called 'build' +# If it doesn't exist, it is created and a Makefile created there (from Makefile.build) +# +# This Makefile also contains delegation of the most common make commands +# +# If you have cmake installed you should be able to do: +# +# make +# make test +# make install +# make package +# +# That should build cgreen for C and C++, run some tests, install it locally and +# generate two distributable packages. + +all: build + cd $(CGREEN_BUILD_DIR); make all + +test: build + cd $(CGREEN_BUILD_DIR); make test + +clean: build + cd $(CGREEN_BUILD_DIR); make clean + +package: build + cd $(CGREEN_BUILD_DIR); make package + +install: + cd $(CGREEN_BUILD_DIR); make install + +############# Internal + +build: + mkdir -p $(CGREEN_BUILD_DIR) + cp Makefile.build $(CGREEN_BUILD_DIR)/Makefile + + +.SILENT: diff --git a/cgreen/Makefile.build b/cgreen/Makefile.build new file mode 100644 index 00000000000..f76165244ca --- /dev/null +++ b/cgreen/Makefile.build @@ -0,0 +1,33 @@ +# This Makefile is copied from the cgreen top directory (where it is +# named Makefile.build) and put in a subdirectory called 'build' where +# builds are made This Makefile then automatically creates +# subdirectories for C and C++ builds configuring them using the cmake +# command. Once created you can always tweak the cmake setup as with +# any cmake build directory + +all: build-c build-c++ + for d in build-* ; do cd $$d; make ; cd .. ; done + +clean: + for d in build-* ; do cd $$d; make clean ; cd .. ; done + +check test: + for d in build-* ; do cd $$d; make check ; cd .. ; done + +package: + for d in build-* ; do cd $$d; make package ; cd .. ; done + +install: + for d in build-* ; do cd $$d; make install ; cd .. ; done + +############ Internal + +build-c: + mkdir build-c + cd build-c; cmake -G "Unix Makefiles" $(CGREEN_DIR) + +build-c++: + mkdir build-c++ + cd build-c++; cmake -G "Unix Makefiles" -DWITH_CXX:bool=ON $(CGREEN_DIR) + +.SILENT: diff --git a/cgreen/cgreen b/cgreen/cgreen new file mode 160000 index 00000000000..d4d438dda1b --- /dev/null +++ b/cgreen/cgreen @@ -0,0 +1 @@ +Subproject commit d4d438dda1b7131f0bd0530b2c258e9dea6a2a9f diff --git a/serial_link.mk b/serial_link.mk new file mode 100644 index 00000000000..51d33fcb41c --- /dev/null +++ b/serial_link.mk @@ -0,0 +1,11 @@ +CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a + +.phony testserial: +testserial: $(CGREEN_LIB) + +CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" +CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" +export CGREEN_DIR +export CGREEN_BUILD_DIR +$(CGREEN_LIB): + make -C $(SERIAL_DIR)/cgreen \ No newline at end of file From e9a1474bb6a92024c8d4e3095d6b871833db1cf4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 00:20:14 +0200 Subject: [PATCH 013/551] Add makefile for compiling and running unit tests --- serial_link.mk | 1 + tests/Makefile | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/Makefile diff --git a/serial_link.mk b/serial_link.mk index 51d33fcb41c..8e8de807f5e 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -2,6 +2,7 @@ CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a .phony testserial: testserial: $(CGREEN_LIB) + make -C $(SERIAL_DIR)/tests BUILDDIR=../../$(BUILDDIR) CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 00000000000..239e9f60934 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,49 @@ +CC = gcc +CFLAGS = +INCLUDES = -I. +LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src +LDLIBS = -lcgreen +UNITOBJ = $(BUILDDIR)/testserial/unitobj +DEPDIR = $(BUILDDIR)/testserial/unit.d +UNITEXE = $(BUILDDIR)/testserial/unitexe +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td +EXT = +UNAME := $(shell uname) +ifneq (, $(findstring mingw, $(UNAME))) + EXT += exe +endif +ifneq (, $(findstring cygwin, $(UNAME))) + EXT += exe +endif + +SRC = $(wildcard *.c) +EXE = $(patsubst %.c, $(UNITEXE)/%$(EXT), $(SRC)) +$(shell mkdir -p $(DEPDIR) >/dev/null) + +test: $(EXE) + @for f in $^; do \ + echo "++++++++++++++++++"; \ + echo "Running unit tests"; \ + echo $$(basename $$f); \ + echo "++++++++++++++++++"; \ + echo ""; \ + $$f || exit 1; \ + echo ""; \ + echo "******************"; \ + echo ""; \ + done + +$(UNITEXE)/%$(EXT): $(UNITOBJ)/%.o + mkdir -p $(UNITEXE) + $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +$(UNITOBJ)/%.o : %.c +$(UNITOBJ)/%.o: %.c $(DEPDIR)/%.d + mkdir -p $(UNITOBJ) + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d + +$(DEPDIR)/%.d: ; +.PRECIOUS: $(DEPDIR)/%.d + +-include $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRC).c)) \ No newline at end of file From 3c6b93a491ab6ea280c30be26980e2ca91ba5c4c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 01:31:01 +0200 Subject: [PATCH 014/551] Add separate makefile for tests --- serial_link.mk | 12 ------------ serial_link_tests.mk | 13 +++++++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 serial_link_tests.mk diff --git a/serial_link.mk b/serial_link.mk index 8e8de807f5e..e69de29bb2d 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -1,12 +0,0 @@ -CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a - -.phony testserial: -testserial: $(CGREEN_LIB) - make -C $(SERIAL_DIR)/tests BUILDDIR=../../$(BUILDDIR) - -CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" -CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" -export CGREEN_DIR -export CGREEN_BUILD_DIR -$(CGREEN_LIB): - make -C $(SERIAL_DIR)/cgreen \ No newline at end of file diff --git a/serial_link_tests.mk b/serial_link_tests.mk new file mode 100644 index 00000000000..36d7c09b3f0 --- /dev/null +++ b/serial_link_tests.mk @@ -0,0 +1,13 @@ +CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a + +CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" +CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" +export CGREEN_DIR +export CGREEN_BUILD_DIR +$(CGREEN_LIB): + make -C $(SERIAL_DIR)/cgreen + +.PHONY serialtest: +serialtest : $(CGREEN_LIB) + @echo $(CGREEN_LIB) + make -C $(SERIAL_DIR)/tests BUILDDIR=../../$(BUILDDIR) \ No newline at end of file From 3eaddd65141f880ddc7d23fc05cafb01ca5477ac Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 01:58:26 +0200 Subject: [PATCH 015/551] Use cgreen test runner instead of executables --- tests/Makefile | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 239e9f60934..3f89cba471f 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,40 +1,30 @@ CC = gcc CFLAGS = INCLUDES = -I. -LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src +LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src -shared LDLIBS = -lcgreen -UNITOBJ = $(BUILDDIR)/testserial/unitobj -DEPDIR = $(BUILDDIR)/testserial/unit.d -UNITEXE = $(BUILDDIR)/testserial/unitexe +UNITOBJ = $(BUILDDIR)/serialtest/unitobj +DEPDIR = $(BUILDDIR)/serialtest/unit.d +UNITTESTS = $(BUILDDIR)/serialtest/unittests DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td -EXT = +EXT = .so UNAME := $(shell uname) -ifneq (, $(findstring mingw, $(UNAME))) - EXT += exe +ifneq (, $(findstring MINGW, $(UNAME))) + EXT = .dll endif -ifneq (, $(findstring cygwin, $(UNAME))) - EXT += exe +ifneq (, $(findstring CYGWIN, $(UNAME))) + EXT = .dll endif SRC = $(wildcard *.c) -EXE = $(patsubst %.c, $(UNITEXE)/%$(EXT), $(SRC)) +TESTFILES = $(patsubst %.c, $(UNITTESTS)/%$(EXT), $(SRC)) $(shell mkdir -p $(DEPDIR) >/dev/null) -test: $(EXE) - @for f in $^; do \ - echo "++++++++++++++++++"; \ - echo "Running unit tests"; \ - echo $$(basename $$f); \ - echo "++++++++++++++++++"; \ - echo ""; \ - $$f || exit 1; \ - echo ""; \ - echo "******************"; \ - echo ""; \ - done +test: $(TESTFILES) + @$(BUILDDIR)/cgreen/build-c/tools/cgreen-runner --color $(TESTFILES) -$(UNITEXE)/%$(EXT): $(UNITOBJ)/%.o - mkdir -p $(UNITEXE) +$(UNITTESTS)/%$(EXT): $(UNITOBJ)/%.o + mkdir -p $(UNITTESTS) $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(UNITOBJ)/%.o : %.c From 1f1bc183dd1080e14a2d85010d5c7f6455f023f6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 12:45:12 +0200 Subject: [PATCH 016/551] Start implementing data_link --- LICENSE | 2 +- serial_link.mk | 23 +++++++++++ serial_link/protocol/data_link.c | 29 ++++++++++++++ serial_link/protocol/data_link.h | 25 ++++++++++++ serial_link/protocol/routing.h | 25 ++++++++++++ serial_link/tests/Makefile | 61 +++++++++++++++++++++++++++++ serial_link/tests/data_link_tests.c | 52 ++++++++++++++++++++++++ serial_link_tests.mk | 27 +++++++++++-- tests/Makefile | 39 ------------------ 9 files changed, 240 insertions(+), 43 deletions(-) create mode 100644 serial_link/protocol/data_link.c create mode 100644 serial_link/protocol/data_link.h create mode 100644 serial_link/protocol/routing.h create mode 100644 serial_link/tests/Makefile create mode 100644 serial_link/tests/data_link_tests.c delete mode 100644 tests/Makefile diff --git a/LICENSE b/LICENSE index d66406efdf7..d7cc3198cb3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 fredizzimo +Copyright (c) 2016 Fred Sundvik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/serial_link.mk b/serial_link.mk index e69de29bb2d..de2364108a3 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -0,0 +1,23 @@ +# The MIT License (MIT) +# +# Copyright (c) 2016 Fred Sundvik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +INC += $(SERIAL_DIR) \ No newline at end of file diff --git a/serial_link/protocol/data_link.c b/serial_link/protocol/data_link.c new file mode 100644 index 00000000000..71d538470cf --- /dev/null +++ b/serial_link/protocol/data_link.c @@ -0,0 +1,29 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "protocol/data_link.h" +#include "protocol/routing.h" + +void recv_byte(uint8_t data) { +} diff --git a/serial_link/protocol/data_link.h b/serial_link/protocol/data_link.h new file mode 100644 index 00000000000..3b9f9ea5d48 --- /dev/null +++ b/serial_link/protocol/data_link.h @@ -0,0 +1,25 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +void recv_byte(uint8_t data); diff --git a/serial_link/protocol/routing.h b/serial_link/protocol/routing.h new file mode 100644 index 00000000000..ee1f9a78aea --- /dev/null +++ b/serial_link/protocol/routing.h @@ -0,0 +1,25 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +void recv_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/tests/Makefile b/serial_link/tests/Makefile new file mode 100644 index 00000000000..0d8ba4b7b65 --- /dev/null +++ b/serial_link/tests/Makefile @@ -0,0 +1,61 @@ +# The MIT License (MIT) +# +# Copyright (c) 2016 Fred Sundvik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +CC = gcc +CFLAGS = +INCLUDES = -I. -I../ +LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src -shared +LDLIBS = -lcgreen +UNITOBJ = $(BUILDDIR)/serialtest/unitobj +DEPDIR = $(BUILDDIR)/serialtest/unit.d +UNITTESTS = $(BUILDDIR)/serialtest/unittests +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td +EXT = .so +UNAME := $(shell uname) +ifneq (, $(findstring MINGW, $(UNAME))) + EXT = .dll +endif +ifneq (, $(findstring CYGWIN, $(UNAME))) + EXT = .dll +endif + +SRC = $(wildcard *.c) +TESTFILES = $(patsubst %.c, $(UNITTESTS)/%$(EXT), $(SRC)) +$(shell mkdir -p $(DEPDIR) >/dev/null) + +test: $(TESTFILES) + @$(BUILDDIR)/cgreen/build-c/tools/cgreen-runner --color $(TESTFILES) + +$(UNITTESTS)/%$(EXT): $(UNITOBJ)/%.o + @mkdir -p $(UNITTESTS) + $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +$(UNITOBJ)/%.o : %.c +$(UNITOBJ)/%.o: %.c $(DEPDIR)/%.d + @mkdir -p $(UNITOBJ) + $(CC) $(CFLAGS) $(DEPFLAGS) $(INCLUDES) -c $< -o $@ + @mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d + +$(DEPDIR)/%.d: ; +.PRECIOUS: $(DEPDIR)/%.d + +-include $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRC))) \ No newline at end of file diff --git a/serial_link/tests/data_link_tests.c b/serial_link/tests/data_link_tests.c new file mode 100644 index 00000000000..1b7107e708f --- /dev/null +++ b/serial_link/tests/data_link_tests.c @@ -0,0 +1,52 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include +#include "protocol/data_link.h" +#include "protocol/data_link.c" +#include "protocol/routing.h" + +Describe(DataLink); +BeforeEach(DataLink) {} +AfterEach(DataLink) {} + +void recv_frame(uint8_t* data, uint16_t size) { + mock(data, size); +} + +Ensure(DataLink, receives_no_frame_for_a_single_zero_byte) { + never_expect(recv_frame); + recv_byte(0); +} + +Ensure(DataLink, receives_no_frame_for_a_single_FF_byte) { + never_expect(recv_frame); + recv_byte(0xFF); +} + +Ensure(DataLink, receives_no_frame_for_a_single_random_byte) { + never_expect(recv_frame); + recv_byte(0x4A); +} diff --git a/serial_link_tests.mk b/serial_link_tests.mk index 36d7c09b3f0..e292f582a98 100644 --- a/serial_link_tests.mk +++ b/serial_link_tests.mk @@ -1,3 +1,25 @@ +# The MIT License (MIT) +# +# Copyright (c) 2016 Fred Sundvik +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" @@ -5,9 +27,8 @@ CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" export CGREEN_DIR export CGREEN_BUILD_DIR $(CGREEN_LIB): - make -C $(SERIAL_DIR)/cgreen + @make -C $(SERIAL_DIR)/cgreen .PHONY serialtest: serialtest : $(CGREEN_LIB) - @echo $(CGREEN_LIB) - make -C $(SERIAL_DIR)/tests BUILDDIR=../../$(BUILDDIR) \ No newline at end of file + @make -C $(SERIAL_DIR)/serial_link/tests BUILDDIR=../../../$(BUILDDIR) \ No newline at end of file diff --git a/tests/Makefile b/tests/Makefile deleted file mode 100644 index 3f89cba471f..00000000000 --- a/tests/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -CC = gcc -CFLAGS = -INCLUDES = -I. -LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src -shared -LDLIBS = -lcgreen -UNITOBJ = $(BUILDDIR)/serialtest/unitobj -DEPDIR = $(BUILDDIR)/serialtest/unit.d -UNITTESTS = $(BUILDDIR)/serialtest/unittests -DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td -EXT = .so -UNAME := $(shell uname) -ifneq (, $(findstring MINGW, $(UNAME))) - EXT = .dll -endif -ifneq (, $(findstring CYGWIN, $(UNAME))) - EXT = .dll -endif - -SRC = $(wildcard *.c) -TESTFILES = $(patsubst %.c, $(UNITTESTS)/%$(EXT), $(SRC)) -$(shell mkdir -p $(DEPDIR) >/dev/null) - -test: $(TESTFILES) - @$(BUILDDIR)/cgreen/build-c/tools/cgreen-runner --color $(TESTFILES) - -$(UNITTESTS)/%$(EXT): $(UNITOBJ)/%.o - mkdir -p $(UNITTESTS) - $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) - -$(UNITOBJ)/%.o : %.c -$(UNITOBJ)/%.o: %.c $(DEPDIR)/%.d - mkdir -p $(UNITOBJ) - $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ - mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d - -$(DEPDIR)/%.d: ; -.PRECIOUS: $(DEPDIR)/%.d - --include $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRC).c)) \ No newline at end of file From 8a991a266e7f8f9aff48049dffb17eccfa353ca1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 13:05:50 +0200 Subject: [PATCH 017/551] Rename files to match what they actually do Also add validator before routing. --- .../protocol/{data_link.c => byte_stuffer.c} | 4 ++-- .../protocol/{data_link.h => byte_stuffer.h} | 0 .../protocol/{routing.h => frame_validator.h} | 0 ...{data_link_tests.c => byte_stuffer_tests.c} | 18 +++++++++--------- 4 files changed, 11 insertions(+), 11 deletions(-) rename serial_link/protocol/{data_link.c => byte_stuffer.c} (93%) rename serial_link/protocol/{data_link.h => byte_stuffer.h} (100%) rename serial_link/protocol/{routing.h => frame_validator.h} (100%) rename serial_link/tests/{data_link_tests.c => byte_stuffer_tests.c} (78%) diff --git a/serial_link/protocol/data_link.c b/serial_link/protocol/byte_stuffer.c similarity index 93% rename from serial_link/protocol/data_link.c rename to serial_link/protocol/byte_stuffer.c index 71d538470cf..95ce86524f1 100644 --- a/serial_link/protocol/data_link.c +++ b/serial_link/protocol/byte_stuffer.c @@ -22,8 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/data_link.h" -#include "protocol/routing.h" +#include "protocol/byte_stuffer.h" +#include "protocol/frame_validator.h" void recv_byte(uint8_t data) { } diff --git a/serial_link/protocol/data_link.h b/serial_link/protocol/byte_stuffer.h similarity index 100% rename from serial_link/protocol/data_link.h rename to serial_link/protocol/byte_stuffer.h diff --git a/serial_link/protocol/routing.h b/serial_link/protocol/frame_validator.h similarity index 100% rename from serial_link/protocol/routing.h rename to serial_link/protocol/frame_validator.h diff --git a/serial_link/tests/data_link_tests.c b/serial_link/tests/byte_stuffer_tests.c similarity index 78% rename from serial_link/tests/data_link_tests.c rename to serial_link/tests/byte_stuffer_tests.c index 1b7107e708f..418d48f6a4e 100644 --- a/serial_link/tests/data_link_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -24,29 +24,29 @@ SOFTWARE. #include #include -#include "protocol/data_link.h" -#include "protocol/data_link.c" -#include "protocol/routing.h" +#include "protocol/byte_stuffer.h" +#include "protocol/byte_stuffer.c" +#include "protocol/frame_validator.h" -Describe(DataLink); -BeforeEach(DataLink) {} -AfterEach(DataLink) {} +Describe(ByteStuffer); +BeforeEach(ByteStuffer) {} +AfterEach(ByteStuffer) {} void recv_frame(uint8_t* data, uint16_t size) { mock(data, size); } -Ensure(DataLink, receives_no_frame_for_a_single_zero_byte) { +Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(recv_frame); recv_byte(0); } -Ensure(DataLink, receives_no_frame_for_a_single_FF_byte) { +Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { never_expect(recv_frame); recv_byte(0xFF); } -Ensure(DataLink, receives_no_frame_for_a_single_random_byte) { +Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { never_expect(recv_frame); recv_byte(0x4A); } From ce3a21cbeaa58cfa6b117a8be13be47a69f086ae Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 14:04:51 +0200 Subject: [PATCH 018/551] Implement receive of valid small byte stuffed frames --- serial_link/protocol/byte_stuffer.c | 36 ++++++++++++++- serial_link/protocol/byte_stuffer.h | 4 +- serial_link/tests/byte_stuffer_tests.c | 61 ++++++++++++++++++++++++-- 3 files changed, 95 insertions(+), 6 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 95ce86524f1..7ce01a96ab1 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -25,5 +25,39 @@ SOFTWARE. #include "protocol/byte_stuffer.h" #include "protocol/frame_validator.h" -void recv_byte(uint8_t data) { +// This implements the "Consistent overhead byte stuffing protocol" +// https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing +// http://www.stuartcheshire.org/papers/COBSforToN.pdf + +typedef struct byte_stuffer_state { + uint16_t next_zero; + uint16_t data_pos; + uint8_t data[256]; +}byte_stuffer_state_t; + +void init_byte_stuffer_state(byte_stuffer_state_t* state) { + state->next_zero = 0; + state->data_pos = 0; +} + +void recv_byte(byte_stuffer_state_t* state, uint8_t data) { + if (state->next_zero == 0) { + state->next_zero = data; + state->data_pos = 0; + return; + } + + state->next_zero--; + if (data == 0) { + recv_frame(state->data, state->data_pos); + } + else { + if (state->next_zero == 0) { + state->next_zero = data; + state->data[state->data_pos++] = 0; + } + else { + state->data[state->data_pos++] = data; + } + } } diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index 3b9f9ea5d48..9a5551fab58 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -22,4 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void recv_byte(uint8_t data); +typedef struct byte_stuffer_state byte_stuffer_state_t; +void init_byte_stuffer_state(byte_stuffer_state_t* state); +void recv_byte(byte_stuffer_state_t* state, uint8_t data); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 418d48f6a4e..2fc7a0b26c8 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -28,8 +28,12 @@ SOFTWARE. #include "protocol/byte_stuffer.c" #include "protocol/frame_validator.h" +byte_stuffer_state_t state; + Describe(ByteStuffer); -BeforeEach(ByteStuffer) {} +BeforeEach(ByteStuffer) { + init_byte_stuffer_state(&state); +} AfterEach(ByteStuffer) {} void recv_frame(uint8_t* data, uint16_t size) { @@ -38,15 +42,64 @@ void recv_frame(uint8_t* data, uint16_t size) { Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(recv_frame); - recv_byte(0); + recv_byte(&state, 0); } Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { never_expect(recv_frame); - recv_byte(0xFF); + recv_byte(&state, 0xFF); } Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { never_expect(recv_frame); - recv_byte(0x4A); + recv_byte(&state, 0x4A); +} + +Ensure(ByteStuffer, receives_single_byte_valid_frame) { + uint8_t expected[] = {0x37}; + expect(recv_frame, + when(size, is_equal_to(1)), + when(data, is_equal_to_contents_of(expected, 1)) + ); + recv_byte(&state, 2); + recv_byte(&state, 0x37); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_three_bytes_valid_frame) { + uint8_t expected[] = {0x37, 0x99, 0xFF}; + expect(recv_frame, + when(size, is_equal_to(3)), + when(data, is_equal_to_contents_of(expected, 3)) + ); + recv_byte(&state, 5); + recv_byte(&state, 0x37); + recv_byte(&state, 0x99); + recv_byte(&state, 0xFF); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_single_zero_valid_frame) { + uint8_t expected[] = {0}; + expect(recv_frame, + when(size, is_equal_to(1)), + when(data, is_equal_to_contents_of(expected, 1)) + ); + recv_byte(&state, 1); + recv_byte(&state, 1); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { + uint8_t expected[] = {5, 0, 3, 0}; + expect(recv_frame, + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(expected, 4)) + ); + recv_byte(&state, 2); + recv_byte(&state, 5); + recv_byte(&state, 2); + recv_byte(&state, 3); + recv_byte(&state, 1); + recv_byte(&state, 0); } From eefb5b5634e341396fb535f4eeac1323bf716ed0 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 14:25:54 +0200 Subject: [PATCH 019/551] Mutiple frame handling for byte stuffer Also handles unexpected data. --- serial_link/protocol/byte_stuffer.c | 12 +++++- serial_link/tests/byte_stuffer_tests.c | 53 +++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 7ce01a96ab1..e578f88dc1a 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -41,6 +41,7 @@ void init_byte_stuffer_state(byte_stuffer_state_t* state) { } void recv_byte(byte_stuffer_state_t* state, uint8_t data) { + // Start of a new frame if (state->next_zero == 0) { state->next_zero = data; state->data_pos = 0; @@ -49,10 +50,19 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { state->next_zero--; if (data == 0) { - recv_frame(state->data, state->data_pos); + if (state->next_zero == 0) { + // The frame is completed + recv_frame(state->data, state->data_pos); + } + else { + // The frame is invalid, so reset + state->next_zero = 0; + state->data_pos = 0; + } } else { if (state->next_zero == 0) { + // Special case for zeroes state->next_zero = data; state->data[state->data_pos++] = 0; } diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 2fc7a0b26c8..74a349b1f34 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -72,7 +72,7 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) ); - recv_byte(&state, 5); + recv_byte(&state, 4); recv_byte(&state, 0x37); recv_byte(&state, 0x99); recv_byte(&state, 0xFF); @@ -103,3 +103,54 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { recv_byte(&state, 1); recv_byte(&state, 0); } + +Ensure(ByteStuffer, receives_two_valid_frames) { + uint8_t expected1[] = {5, 0}; + uint8_t expected2[] = {3}; + expect(recv_frame, + when(size, is_equal_to(2)), + when(data, is_equal_to_contents_of(expected1, 2)) + ); + expect(recv_frame, + when(size, is_equal_to(1)), + when(data, is_equal_to_contents_of(expected2, 1)) + ); + recv_byte(&state, 2); + recv_byte(&state, 5); + recv_byte(&state, 1); + recv_byte(&state, 0); + recv_byte(&state, 2); + recv_byte(&state, 3); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { + uint8_t expected[] = {5, 7}; + expect(recv_frame, + when(size, is_equal_to(2)), + when(data, is_equal_to_contents_of(expected, 2)) + ); + recv_byte(&state, 3); + recv_byte(&state, 1); + recv_byte(&state, 0); + recv_byte(&state, 3); + recv_byte(&state, 5); + recv_byte(&state, 7); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { + uint8_t expected[] = {5, 7}; + expect(recv_frame, + when(size, is_equal_to(2)), + when(data, is_equal_to_contents_of(expected, 2)) + ); + recv_byte(&state, 2); + recv_byte(&state, 9); + recv_byte(&state, 4); // This should have been zero + recv_byte(&state, 0); + recv_byte(&state, 3); + recv_byte(&state, 5); + recv_byte(&state, 7); + recv_byte(&state, 0); +} From e8cb6d8023cf2912a08dc1a0a1b108b6dbc429cc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 15:28:57 +0200 Subject: [PATCH 020/551] Bytestuffer recv handling of long frames --- serial_link/protocol/byte_stuffer.c | 26 ++++++-- serial_link/tests/byte_stuffer_tests.c | 92 ++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 6 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index e578f88dc1a..cc7afe97ae9 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -24,26 +24,35 @@ SOFTWARE. #include "protocol/byte_stuffer.h" #include "protocol/frame_validator.h" +#include // This implements the "Consistent overhead byte stuffing protocol" // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing // http://www.stuartcheshire.org/papers/COBSforToN.pdf +#define MAX_FRAME_SIZE 1024 + typedef struct byte_stuffer_state { uint16_t next_zero; uint16_t data_pos; - uint8_t data[256]; + bool long_frame; + uint8_t data[MAX_FRAME_SIZE]; }byte_stuffer_state_t; void init_byte_stuffer_state(byte_stuffer_state_t* state) { state->next_zero = 0; state->data_pos = 0; + state->long_frame = false; +} + +static void start_frame(byte_stuffer_state_t* state, uint8_t data) { } void recv_byte(byte_stuffer_state_t* state, uint8_t data) { // Start of a new frame if (state->next_zero == 0) { state->next_zero = data; + state->long_frame = data == 0xFF; state->data_pos = 0; return; } @@ -56,15 +65,20 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { } else { // The frame is invalid, so reset - state->next_zero = 0; - state->data_pos = 0; + init_byte_stuffer_state(state); } } else { if (state->next_zero == 0) { - // Special case for zeroes - state->next_zero = data; - state->data[state->data_pos++] = 0; + if (state->long_frame) { + state->next_zero = data; + state->long_frame = data == 0xFF; + } + else { + // Special case for zeroes + state->next_zero = data; + state->data[state->data_pos++] = 0; + } } else { state->data[state->data_pos++] = data; diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 74a349b1f34..a28c3619382 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -154,3 +154,95 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { recv_byte(&state, 7); recv_byte(&state, 0); } + +Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { + uint8_t expected[254]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + expect(recv_frame, + when(size, is_equal_to(254)), + when(data, is_equal_to_contents_of(expected, 254)) + ); + recv_byte(&state, 0xFF); + for (i=0;i<254;i++) { + recv_byte(&state, i+1); + } + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { + uint8_t expected[255]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + expected[254] = 7; + expect(recv_frame, + when(size, is_equal_to(255)), + when(data, is_equal_to_contents_of(expected, 255)) + ); + recv_byte(&state, 0xFF); + for (i=0;i<254;i++) { + recv_byte(&state, i+1); + } + recv_byte(&state, 2); + recv_byte(&state, 7); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { + uint8_t expected[255]; + int i; + for (i=0;i<254;i++) { + expected[i] = i + 1; + } + expected[254] = 0; + expect(recv_frame, + when(size, is_equal_to(255)), + when(data, is_equal_to_contents_of(expected, 255)) + ); + recv_byte(&state, 0xFF); + for (i=0;i<254;i++) { + recv_byte(&state, i+1); + } + recv_byte(&state, 1); + recv_byte(&state, 1); + recv_byte(&state, 0); +} + +Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { + uint8_t expected[515]; + int i; + int j; + for (j=0;j<2;j++) { + for (i=0;i<254;i++) { + expected[i+254*j] = i + 1; + } + } + for (i=0;i<7;i++) { + expected[254*2+i] = i + 1; + } + expect(recv_frame, + when(size, is_equal_to(515)), + when(data, is_equal_to_contents_of(expected, 510)) + ); + recv_byte(&state, 0xFF); + for (i=0;i<254;i++) { + recv_byte(&state, i+1); + } + recv_byte(&state, 0xFF); + for (i=0;i<254;i++) { + recv_byte(&state, i+1); + } + recv_byte(&state, 8); + recv_byte(&state, 1); + recv_byte(&state, 2); + recv_byte(&state, 3); + recv_byte(&state, 4); + recv_byte(&state, 5); + recv_byte(&state, 6); + recv_byte(&state, 7); + recv_byte(&state, 0); +} From 26537474ae1d65cdf40276299d7e04648474357b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 15:57:44 +0200 Subject: [PATCH 021/551] Add byte stuffer recv handling of too long frames --- .gitignore | 1 + serial_link/protocol/byte_stuffer.c | 17 ++++++--- serial_link/tests/byte_stuffer_tests.c | 48 ++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..2d68e206e81 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.stackdump diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index cc7afe97ae9..f0071b1f777 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -45,9 +45,6 @@ void init_byte_stuffer_state(byte_stuffer_state_t* state) { state->long_frame = false; } -static void start_frame(byte_stuffer_state_t* state, uint8_t data) { -} - void recv_byte(byte_stuffer_state_t* state, uint8_t data) { // Start of a new frame if (state->next_zero == 0) { @@ -61,7 +58,9 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { if (data == 0) { if (state->next_zero == 0) { // The frame is completed - recv_frame(state->data, state->data_pos); + if (state->data_pos > 0) { + recv_frame(state->data, state->data_pos); + } } else { // The frame is invalid, so reset @@ -69,8 +68,16 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { } } else { - if (state->next_zero == 0) { + if (state->data_pos == MAX_FRAME_SIZE) { + // We exceeded our maximum frame size + // therefore there's nothing else to do than reset to a new frame + state->next_zero = data; + state->long_frame = data == 0xFF; + state->data_pos = 0; + } + else if (state->next_zero == 0) { if (state->long_frame) { + // This is part of a long frame, so continue state->next_zero = data; state->long_frame = data == 0xFF; } diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index a28c3619382..bfa0193861b 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -55,6 +55,12 @@ Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { recv_byte(&state, 0x4A); } +Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { + never_expect(recv_frame); + recv_byte(&state, 1); + recv_byte(&state, 0); +} + Ensure(ByteStuffer, receives_single_byte_valid_frame) { uint8_t expected[] = {0x37}; expect(recv_frame, @@ -246,3 +252,45 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { recv_byte(&state, 7); recv_byte(&state, 0); } + +Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { + uint8_t expected[MAX_FRAME_SIZE] = {}; + expect(recv_frame, + when(size, is_equal_to(MAX_FRAME_SIZE)), + when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) + ); + int i; + recv_byte(&state, 1); + for(i=0;i Date: Sun, 14 Feb 2016 17:45:25 +0200 Subject: [PATCH 022/551] Add sending of small frames with no zeroes --- serial_link/protocol/byte_stuffer.c | 12 +++++- serial_link/protocol/byte_stuffer.h | 1 + serial_link/protocol/physical.h | 25 +++++++++++ serial_link/tests/byte_stuffer_tests.c | 60 +++++++++++++++++++------- 4 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 serial_link/protocol/physical.h diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index f0071b1f777..dfd5942ebc2 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -24,7 +24,7 @@ SOFTWARE. #include "protocol/byte_stuffer.h" #include "protocol/frame_validator.h" -#include +#include "protocol/physical.h" // This implements the "Consistent overhead byte stuffing protocol" // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing @@ -92,3 +92,13 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { } } } + +void send_frame(uint8_t* data, uint16_t size) { + if (size > 0) { + uint8_t numZeroes = size + 1; + const uint8_t zero = 0; + send_data(&numZeroes, 1); + send_data(data, size); + send_data(&zero, 1); + } +} diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index 9a5551fab58..ea6b8451d4e 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -25,3 +25,4 @@ SOFTWARE. typedef struct byte_stuffer_state byte_stuffer_state_t; void init_byte_stuffer_state(byte_stuffer_state_t* state); void recv_byte(byte_stuffer_state_t* state, uint8_t data); +void send_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/physical.h b/serial_link/protocol/physical.h new file mode 100644 index 00000000000..73a7855dfba --- /dev/null +++ b/serial_link/protocol/physical.h @@ -0,0 +1,25 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +void send_data(const uint8_t* data, uint16_t size); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index bfa0193861b..6e44c9170c5 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -27,12 +27,16 @@ SOFTWARE. #include "protocol/byte_stuffer.h" #include "protocol/byte_stuffer.c" #include "protocol/frame_validator.h" +#include "protocol/physical.h" -byte_stuffer_state_t state; +static byte_stuffer_state_t state; +static uint8_t sent_data[MAX_FRAME_SIZE*2]; +static uint16_t sent_data_size; Describe(ByteStuffer); BeforeEach(ByteStuffer) { init_byte_stuffer_state(&state); + sent_data_size = 0; } AfterEach(ByteStuffer) {} @@ -40,6 +44,11 @@ void recv_frame(uint8_t* data, uint16_t size) { mock(data, size); } +void send_data(const uint8_t* data, uint16_t size) { + memcpy(sent_data + sent_data_size, data, size); + sent_data_size += size; +} + Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(recv_frame); recv_byte(&state, 0); @@ -66,7 +75,7 @@ Ensure(ByteStuffer, receives_single_byte_valid_frame) { expect(recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) - ); + ); recv_byte(&state, 2); recv_byte(&state, 0x37); recv_byte(&state, 0); @@ -77,7 +86,7 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { expect(recv_frame, when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) - ); + ); recv_byte(&state, 4); recv_byte(&state, 0x37); recv_byte(&state, 0x99); @@ -90,7 +99,7 @@ Ensure(ByteStuffer, receives_single_zero_valid_frame) { expect(recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) - ); + ); recv_byte(&state, 1); recv_byte(&state, 1); recv_byte(&state, 0); @@ -101,7 +110,7 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { expect(recv_frame, when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(expected, 4)) - ); + ); recv_byte(&state, 2); recv_byte(&state, 5); recv_byte(&state, 2); @@ -116,11 +125,11 @@ Ensure(ByteStuffer, receives_two_valid_frames) { expect(recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected1, 2)) - ); + ); expect(recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected2, 1)) - ); + ); recv_byte(&state, 2); recv_byte(&state, 5); recv_byte(&state, 1); @@ -135,7 +144,7 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { expect(recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) - ); + ); recv_byte(&state, 3); recv_byte(&state, 1); recv_byte(&state, 0); @@ -150,7 +159,7 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { expect(recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) - ); + ); recv_byte(&state, 2); recv_byte(&state, 9); recv_byte(&state, 4); // This should have been zero @@ -170,7 +179,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_ expect(recv_frame, when(size, is_equal_to(254)), when(data, is_equal_to_contents_of(expected, 254)) - ); + ); recv_byte(&state, 0xFF); for (i=0;i<254;i++) { recv_byte(&state, i+1); @@ -188,7 +197,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ expect(recv_frame, when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) - ); + ); recv_byte(&state, 0xFF); for (i=0;i<254;i++) { recv_byte(&state, i+1); @@ -208,7 +217,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ expect(recv_frame, when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) - ); + ); recv_byte(&state, 0xFF); for (i=0;i<254;i++) { recv_byte(&state, i+1); @@ -233,7 +242,7 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { expect(recv_frame, when(size, is_equal_to(515)), when(data, is_equal_to_contents_of(expected, 510)) - ); + ); recv_byte(&state, 0xFF); for (i=0;i<254;i++) { recv_byte(&state, i+1); @@ -258,7 +267,7 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { expect(recv_frame, when(size, is_equal_to(MAX_FRAME_SIZE)), when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) - ); + ); int i; recv_byte(&state, 1); for(i=0;i Date: Sun, 14 Feb 2016 18:59:01 +0200 Subject: [PATCH 023/551] Hanlde sending of zero bytes for small packets --- serial_link/protocol/byte_stuffer.c | 27 +++++++++++-- serial_link/tests/byte_stuffer_tests.c | 56 ++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index dfd5942ebc2..6118557c1d1 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -93,12 +93,31 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { } } +static void send_block(uint8_t* start, uint8_t* end, uint8_t num_non_zero) { + send_data(&num_non_zero, 1); + if (end > start) { + send_data(start, end-start); + } +} + void send_frame(uint8_t* data, uint16_t size) { + const uint8_t zero = 0; if (size > 0) { - uint8_t numZeroes = size + 1; - const uint8_t zero = 0; - send_data(&numZeroes, 1); - send_data(data, size); + uint8_t num_non_zero = 1; + uint8_t* end = data + size; + uint8_t* start = data; + while (data < end) { + if (*data == 0) { + send_block(start, data, num_non_zero); + start = data + 1; + num_non_zero = 1; + } + else { + num_non_zero++; + } + ++data; + } + send_block(start, data, num_non_zero); send_data(&zero, 1); } } diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 6e44c9170c5..0c324e9c486 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -312,15 +312,63 @@ Ensure(ByteStuffer, send_zero_size_frame_does_nothing) { Ensure(ByteStuffer, send_one_byte_frame) { uint8_t data[] = {5}; send_frame(data, 1); - assert_that(sent_data_size, is_equal_to(3)); uint8_t expected[] = {2, 5, 0}; - assert_that(sent_data, is_equal_to_contents_of(expected, 3)); + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } Ensure(ByteStuffer, send_two_byte_frame) { uint8_t data[] = {5, 0x77}; send_frame(data, 2); - assert_that(sent_data_size, is_equal_to(4)); uint8_t expected[] = {3, 5, 0x77, 0}; - assert_that(sent_data, is_equal_to_contents_of(expected, 4)); + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_one_byte_frame_with_zero) { + uint8_t data[] = {0}; + send_frame(data, 1); + uint8_t expected[] = {1, 1, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_two_byte_frame_starting_with_zero) { + uint8_t data[] = {0, 9}; + send_frame(data, 2); + uint8_t expected[] = {1, 2, 9, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_two_byte_frame_starting_with_non_zero) { + uint8_t data[] = {9, 0}; + send_frame(data, 2); + uint8_t expected[] = {2, 9, 1, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_three_byte_frame_zero_in_the_middle) { + uint8_t data[] = {9, 0, 0x68}; + send_frame(data, 3); + uint8_t expected[] = {2, 9, 2, 0x68, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_three_byte_frame_data_in_the_middle) { + uint8_t data[] = {0, 0x55, 0}; + send_frame(data, 3); + uint8_t expected[] = {1, 2, 0x55, 1, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, send_three_byte_frame_all_zeroes) { + uint8_t data[] = {0, 0, 0}; + send_frame(data, 3); + uint8_t expected[] = {1, 1, 1, 1, 0}; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } From 2f3ea76428276b871b454effd1164648f5e49f23 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 19:03:34 +0200 Subject: [PATCH 024/551] Fix name of some unit tests --- serial_link/tests/byte_stuffer_tests.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 0c324e9c486..1982421e6ef 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -304,7 +304,7 @@ Ensure(ByteStuffer, received_frame_is_aborted_when_its_too_long) { recv_byte(&state, 0); } -Ensure(ByteStuffer, send_zero_size_frame_does_nothing) { +Ensure(ByteStuffer, does_nothing_when_sending_zero_size_frame) { assert_that(sent_data_size, is_equal_to(0)); send_frame(NULL, 0); } @@ -317,7 +317,7 @@ Ensure(ByteStuffer, send_one_byte_frame) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_two_byte_frame) { +Ensure(ByteStuffer, sends_two_byte_frame) { uint8_t data[] = {5, 0x77}; send_frame(data, 2); uint8_t expected[] = {3, 5, 0x77, 0}; @@ -325,7 +325,7 @@ Ensure(ByteStuffer, send_two_byte_frame) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_one_byte_frame_with_zero) { +Ensure(ByteStuffer, sends_one_byte_frame_with_zero) { uint8_t data[] = {0}; send_frame(data, 1); uint8_t expected[] = {1, 1, 0}; @@ -333,7 +333,7 @@ Ensure(ByteStuffer, send_one_byte_frame_with_zero) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_two_byte_frame_starting_with_zero) { +Ensure(ByteStuffer, sends_two_byte_frame_starting_with_zero) { uint8_t data[] = {0, 9}; send_frame(data, 2); uint8_t expected[] = {1, 2, 9, 0}; @@ -341,7 +341,7 @@ Ensure(ByteStuffer, send_two_byte_frame_starting_with_zero) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_two_byte_frame_starting_with_non_zero) { +Ensure(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) { uint8_t data[] = {9, 0}; send_frame(data, 2); uint8_t expected[] = {2, 9, 1, 0}; @@ -349,7 +349,7 @@ Ensure(ByteStuffer, send_two_byte_frame_starting_with_non_zero) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_three_byte_frame_zero_in_the_middle) { +Ensure(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) { uint8_t data[] = {9, 0, 0x68}; send_frame(data, 3); uint8_t expected[] = {2, 9, 2, 0x68, 0}; @@ -357,7 +357,7 @@ Ensure(ByteStuffer, send_three_byte_frame_zero_in_the_middle) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_three_byte_frame_data_in_the_middle) { +Ensure(ByteStuffer, sends_three_byte_frame_data_in_the_middle) { uint8_t data[] = {0, 0x55, 0}; send_frame(data, 3); uint8_t expected[] = {1, 2, 0x55, 1, 0}; @@ -365,7 +365,7 @@ Ensure(ByteStuffer, send_three_byte_frame_data_in_the_middle) { assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } -Ensure(ByteStuffer, send_three_byte_frame_all_zeroes) { +Ensure(ByteStuffer, sends_three_byte_frame_with_all_zeroes) { uint8_t data[] = {0, 0, 0}; send_frame(data, 3); uint8_t expected[] = {1, 1, 1, 1, 0}; From 6956c177da8737f999eef72a21f0fc3caea2ac3e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 19:56:22 +0200 Subject: [PATCH 025/551] Add byte stuffing send support for large frames --- serial_link/protocol/byte_stuffer.c | 21 +++++++--- serial_link/tests/byte_stuffer_tests.c | 56 ++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 5 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 6118557c1d1..69cfca3594f 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -25,6 +25,7 @@ SOFTWARE. #include "protocol/byte_stuffer.h" #include "protocol/frame_validator.h" #include "protocol/physical.h" +#include // This implements the "Consistent overhead byte stuffing protocol" // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing @@ -103,19 +104,29 @@ static void send_block(uint8_t* start, uint8_t* end, uint8_t num_non_zero) { void send_frame(uint8_t* data, uint16_t size) { const uint8_t zero = 0; if (size > 0) { - uint8_t num_non_zero = 1; + uint16_t num_non_zero = 1; uint8_t* end = data + size; uint8_t* start = data; while (data < end) { - if (*data == 0) { + if (num_non_zero == 0xFF) { + // There's more data after big non-zero block + // So send it, and start a new block send_block(start, data, num_non_zero); - start = data + 1; + start = data; num_non_zero = 1; } else { - num_non_zero++; + if (*data == 0) { + // A zero encountered, so send the block + send_block(start, data, num_non_zero); + start = data + 1; + num_non_zero = 1; + } + else { + num_non_zero++; + } + ++data; } - ++data; } send_block(start, data, num_non_zero); send_data(&zero, 1); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 1982421e6ef..8598cddd30b 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -372,3 +372,59 @@ Ensure(ByteStuffer, sends_three_byte_frame_with_all_zeroes) { assert_that(sent_data_size, is_equal_to(sizeof(expected))); assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } + +Ensure(ByteStuffer, sends_frame_with_254_non_zeroes) { + uint8_t data[254]; + int i; + for(i=0;i<254;i++) { + data[i] = i + 1; + } + send_frame(data, 254); + uint8_t expected[256]; + expected[0] = 0xFF; + for(i=1;i<255;i++) { + expected[i] = i; + } + expected[255] = 0; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, sends_frame_with_255_non_zeroes) { + uint8_t data[255]; + int i; + for(i=0;i<255;i++) { + data[i] = i + 1; + } + send_frame(data, 255); + uint8_t expected[258]; + expected[0] = 0xFF; + for(i=1;i<255;i++) { + expected[i] = i; + } + expected[255] = 2; + expected[256] = 255; + expected[257] = 0; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} + +Ensure(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) { + uint8_t data[255]; + int i; + for(i=0;i<254;i++) { + data[i] = i + 1; + } + data[255] = 0; + send_frame(data, 255); + uint8_t expected[258]; + expected[0] = 0xFF; + for(i=1;i<255;i++) { + expected[i] = i; + } + expected[255] = 1; + expected[256] = 1; + expected[257] = 0; + assert_that(sent_data_size, is_equal_to(sizeof(expected))); + assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); +} From 713465fb416785c3a544e8626f85aca7e57dafa1 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 20:07:51 +0200 Subject: [PATCH 026/551] Add some full round trip tests Mostly to ensure that the receive and send framing works the same way. Especially for the special case with 254 non-zeros. --- serial_link/tests/byte_stuffer_tests.c | 77 ++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 8598cddd30b..fbdf39e1b26 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -428,3 +428,80 @@ Ensure(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) { assert_that(sent_data_size, is_equal_to(sizeof(expected))); assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected))); } + +Ensure(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) { + uint8_t original_data[] = { 1, 2, 3}; + send_frame(original_data, sizeof(original_data)); + expect(recv_frame, + when(size, is_equal_to(sizeof(original_data))), + when(data, is_equal_to_contents_of(original_data, sizeof(original_data))) + ); + int i; + for(i=0;i Date: Sun, 14 Feb 2016 20:45:59 +0200 Subject: [PATCH 027/551] Start implement frame validator --- serial_link/protocol/frame_router.h | 25 ++++++ serial_link/protocol/frame_validator.c | 105 ++++++++++++++++++++++ serial_link/tests/frame_validator_tests.c | 44 +++++++++ 3 files changed, 174 insertions(+) create mode 100644 serial_link/protocol/frame_router.h create mode 100644 serial_link/protocol/frame_validator.c create mode 100644 serial_link/tests/frame_validator_tests.c diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h new file mode 100644 index 00000000000..b5beba13c3f --- /dev/null +++ b/serial_link/protocol/frame_router.h @@ -0,0 +1,25 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +void route_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c new file mode 100644 index 00000000000..1ffd3aad855 --- /dev/null +++ b/serial_link/protocol/frame_validator.c @@ -0,0 +1,105 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "protocol/frame_validator.h" + +const uint32_t poly8_lookup[256] = +{ + 0, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D +}; + +static uint32_t crc32_byte(uint8_t *p, uint32_t bytelength) +{ + uint32_t crc = 0xffffffff; + while (bytelength-- !=0) crc = poly8_lookup[((uint8_t) crc ^ *(p++))] ^ (crc >> 8); + // return (~crc); also works + return (crc ^ 0xffffffff); +} + +void recv_frame(uint8_t* data, uint16_t size) { + +} diff --git a/serial_link/tests/frame_validator_tests.c b/serial_link/tests/frame_validator_tests.c new file mode 100644 index 00000000000..f6a4fcd8428 --- /dev/null +++ b/serial_link/tests/frame_validator_tests.c @@ -0,0 +1,44 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include +#include "protocol/frame_validator.c" + +void route_frame(uint8_t* data, uint16_t size) { + mock(data, size); +} + +Describe(FrameValidator); +BeforeEach(FrameValidator) {} +AfterEach(FrameValidator) {} + +Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { + never_expect(route_frame); + uint8_t data[] = {1, 2}; + recv_frame(0, 1); + recv_frame(data, 2); + recv_frame(data, 3); + recv_frame(data, 4); +} From 62058329ff9000589ddba6454ff8ef8a551b7243 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 21:13:16 +0200 Subject: [PATCH 028/551] Add crc32 validation of received frames --- serial_link/protocol/frame_validator.c | 9 +++++- serial_link/tests/frame_validator_tests.c | 35 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index 1ffd3aad855..d3337f6e328 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -23,6 +23,7 @@ SOFTWARE. */ #include "protocol/frame_validator.h" +#include "protocol/frame_router.h" const uint32_t poly8_lookup[256] = { @@ -101,5 +102,11 @@ static uint32_t crc32_byte(uint8_t *p, uint32_t bytelength) } void recv_frame(uint8_t* data, uint16_t size) { - + if (size > 4) { + uint32_t frame_crc = *(uint32_t*)(data + size - 4); + uint32_t expected_crc = crc32_byte(data, size - 4); + if (frame_crc == expected_crc) { + route_frame(data, size-4); + } + } } diff --git a/serial_link/tests/frame_validator_tests.c b/serial_link/tests/frame_validator_tests.c index f6a4fcd8428..1aca9f95fce 100644 --- a/serial_link/tests/frame_validator_tests.c +++ b/serial_link/tests/frame_validator_tests.c @@ -42,3 +42,38 @@ Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { recv_frame(data, 3); recv_frame(data, 4); } + +Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { + uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; + expect(route_frame, + when(size, is_equal_to(1)), + when(data, is_equal_to_contents_of(data, 1)) + ); + recv_frame(data, 5); +} + +Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) { + uint8_t data[] = {0x44, 0, 0, 0, 0}; + never_expect(route_frame); + recv_frame(data, 5); +} + +Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { + uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA}; + expect(route_frame, + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(data, 4)) + ); + recv_frame(data, 8); +} + +Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { + //0xBA304E74 + //0x470B99F4 + uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; + expect(route_frame, + when(size, is_equal_to(5)), + when(data, is_equal_to_contents_of(data, 5)) + ); + recv_frame(data, 9); +} From 2a6696bd3d0837c2e655a99000bcbcc759b40075 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 21:31:01 +0200 Subject: [PATCH 029/551] Add validator send frame --- serial_link/protocol/frame_validator.c | 7 ++++++ serial_link/tests/frame_validator_tests.c | 26 +++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index d3337f6e328..fdb3ef51c3f 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -24,6 +24,7 @@ SOFTWARE. #include "protocol/frame_validator.h" #include "protocol/frame_router.h" +#include "protocol/byte_stuffer.h" const uint32_t poly8_lookup[256] = { @@ -110,3 +111,9 @@ void recv_frame(uint8_t* data, uint16_t size) { } } } + +void validator_send_frame(uint8_t* data, uint16_t size) { + uint32_t* crc = (uint32_t*)(data + size); + *crc = crc32_byte(data, size); + send_frame(data, size + 4); +} diff --git a/serial_link/tests/frame_validator_tests.c b/serial_link/tests/frame_validator_tests.c index 1aca9f95fce..816256f6b7a 100644 --- a/serial_link/tests/frame_validator_tests.c +++ b/serial_link/tests/frame_validator_tests.c @@ -30,6 +30,10 @@ void route_frame(uint8_t* data, uint16_t size) { mock(data, size); } +void send_frame(uint8_t* data, uint16_t size) { + mock(data, size); +} + Describe(FrameValidator); BeforeEach(FrameValidator) {} AfterEach(FrameValidator) {} @@ -68,8 +72,6 @@ Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { } Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { - //0xBA304E74 - //0x470B99F4 uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; expect(route_frame, when(size, is_equal_to(5)), @@ -77,3 +79,23 @@ Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { ); recv_frame(data, 9); } + +Ensure(FrameValidator, sends_one_byte_with_correct_crc) { + uint8_t original[] = {0x44, 0, 0, 0, 0}; + uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; + expect(send_frame, + when(size, is_equal_to(sizeof(expected))), + when(data, is_equal_to_contents_of(expected, sizeof(expected))) + ); + validator_send_frame(original, 1); +} + +Ensure(FrameValidator, sends_five_bytes_with_correct_crc) { + uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0}; + uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; + expect(send_frame, + when(size, is_equal_to(sizeof(expected))), + when(data, is_equal_to_contents_of(expected, sizeof(expected))) + ); + validator_send_frame(original, 5); +} From 0eb62c4ce61e19cf7629bb74cf01d812c042ac57 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 21:33:14 +0200 Subject: [PATCH 030/551] Rename recv_frame to validator_recv_frame --- serial_link/protocol/byte_stuffer.c | 2 +- serial_link/protocol/frame_validator.c | 2 +- serial_link/protocol/frame_validator.h | 4 +- serial_link/tests/byte_stuffer_tests.c | 50 +++++++++++------------ serial_link/tests/frame_validator_tests.c | 16 ++++---- 5 files changed, 38 insertions(+), 36 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 69cfca3594f..f9aa02a3f50 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -60,7 +60,7 @@ void recv_byte(byte_stuffer_state_t* state, uint8_t data) { if (state->next_zero == 0) { // The frame is completed if (state->data_pos > 0) { - recv_frame(state->data, state->data_pos); + validator_recv_frame(state->data, state->data_pos); } } else { diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index fdb3ef51c3f..0ffcda0473a 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -102,7 +102,7 @@ static uint32_t crc32_byte(uint8_t *p, uint32_t bytelength) return (crc ^ 0xffffffff); } -void recv_frame(uint8_t* data, uint16_t size) { +void validator_recv_frame(uint8_t* data, uint16_t size) { if (size > 4) { uint32_t frame_crc = *(uint32_t*)(data + size - 4); uint32_t expected_crc = crc32_byte(data, size - 4); diff --git a/serial_link/protocol/frame_validator.h b/serial_link/protocol/frame_validator.h index ee1f9a78aea..2e518894fbb 100644 --- a/serial_link/protocol/frame_validator.h +++ b/serial_link/protocol/frame_validator.h @@ -22,4 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void recv_frame(uint8_t* data, uint16_t size); +void validator_recv_frame(uint8_t* data, uint16_t size); +// The buffer pointed to by the data needs 4 additional bytes +void validator_send_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index fbdf39e1b26..78bcbb4734c 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -40,7 +40,7 @@ BeforeEach(ByteStuffer) { } AfterEach(ByteStuffer) {} -void recv_frame(uint8_t* data, uint16_t size) { +void validator_recv_frame(uint8_t* data, uint16_t size) { mock(data, size); } @@ -50,29 +50,29 @@ void send_data(const uint8_t* data, uint16_t size) { } Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { - never_expect(recv_frame); + never_expect(validator_recv_frame); recv_byte(&state, 0); } Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { - never_expect(recv_frame); + never_expect(validator_recv_frame); recv_byte(&state, 0xFF); } Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { - never_expect(recv_frame); + never_expect(validator_recv_frame); recv_byte(&state, 0x4A); } Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { - never_expect(recv_frame); + never_expect(validator_recv_frame); recv_byte(&state, 1); recv_byte(&state, 0); } Ensure(ByteStuffer, receives_single_byte_valid_frame) { uint8_t expected[] = {0x37}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); @@ -83,7 +83,7 @@ Ensure(ByteStuffer, receives_single_byte_valid_frame) { Ensure(ByteStuffer, receives_three_bytes_valid_frame) { uint8_t expected[] = {0x37, 0x99, 0xFF}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) ); @@ -96,7 +96,7 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { Ensure(ByteStuffer, receives_single_zero_valid_frame) { uint8_t expected[] = {0}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); @@ -107,7 +107,7 @@ Ensure(ByteStuffer, receives_single_zero_valid_frame) { Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { uint8_t expected[] = {5, 0, 3, 0}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(expected, 4)) ); @@ -122,11 +122,11 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { Ensure(ByteStuffer, receives_two_valid_frames) { uint8_t expected1[] = {5, 0}; uint8_t expected2[] = {3}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected1, 2)) ); - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected2, 1)) ); @@ -141,7 +141,7 @@ Ensure(ByteStuffer, receives_two_valid_frames) { Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { uint8_t expected[] = {5, 7}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); @@ -156,7 +156,7 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { uint8_t expected[] = {5, 7}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); @@ -176,7 +176,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_ for (i=0;i<254;i++) { expected[i] = i + 1; } - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(254)), when(data, is_equal_to_contents_of(expected, 254)) ); @@ -194,7 +194,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ expected[i] = i + 1; } expected[254] = 7; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); @@ -214,7 +214,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ expected[i] = i + 1; } expected[254] = 0; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); @@ -239,7 +239,7 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { for (i=0;i<7;i++) { expected[254*2+i] = i + 1; } - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(515)), when(data, is_equal_to_contents_of(expected, 510)) ); @@ -264,7 +264,7 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { uint8_t expected[MAX_FRAME_SIZE] = {}; - expect(recv_frame, + expect(validator_recv_frame, when(size, is_equal_to(MAX_FRAME_SIZE)), when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) ); @@ -278,7 +278,7 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { Ensure(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) { uint8_t expected[1] = {0}; - never_expect(recv_frame); + never_expect(validator_recv_frame); int i; recv_byte(&state, 1); for(i=0;i Date: Sun, 14 Feb 2016 21:34:40 +0200 Subject: [PATCH 031/551] Rename route_frame to route_incoming_frame --- serial_link/protocol/frame_router.h | 2 +- serial_link/protocol/frame_validator.c | 2 +- serial_link/tests/frame_validator_tests.c | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h index b5beba13c3f..dd1bfb12302 100644 --- a/serial_link/protocol/frame_router.h +++ b/serial_link/protocol/frame_router.h @@ -22,4 +22,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void route_frame(uint8_t* data, uint16_t size); +void route_incoming_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index 0ffcda0473a..0a5f05068eb 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -107,7 +107,7 @@ void validator_recv_frame(uint8_t* data, uint16_t size) { uint32_t frame_crc = *(uint32_t*)(data + size - 4); uint32_t expected_crc = crc32_byte(data, size - 4); if (frame_crc == expected_crc) { - route_frame(data, size-4); + route_incoming_frame(data, size-4); } } } diff --git a/serial_link/tests/frame_validator_tests.c b/serial_link/tests/frame_validator_tests.c index 3938f3eacac..6f9b746f697 100644 --- a/serial_link/tests/frame_validator_tests.c +++ b/serial_link/tests/frame_validator_tests.c @@ -26,7 +26,7 @@ SOFTWARE. #include #include "protocol/frame_validator.c" -void route_frame(uint8_t* data, uint16_t size) { +void route_incoming_frame(uint8_t* data, uint16_t size) { mock(data, size); } @@ -39,7 +39,7 @@ BeforeEach(FrameValidator) {} AfterEach(FrameValidator) {} Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { - never_expect(route_frame); + never_expect(route_incoming_frame); uint8_t data[] = {1, 2}; validator_recv_frame(0, 1); validator_recv_frame(data, 2); @@ -49,7 +49,7 @@ Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; - expect(route_frame, + expect(route_incoming_frame, when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(data, 1)) ); @@ -58,13 +58,13 @@ Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) { uint8_t data[] = {0x44, 0, 0, 0, 0}; - never_expect(route_frame); + never_expect(route_incoming_frame); validator_recv_frame(data, 5); } Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA}; - expect(route_frame, + expect(route_incoming_frame, when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(data, 4)) ); @@ -73,7 +73,7 @@ Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; - expect(route_frame, + expect(route_incoming_frame, when(size, is_equal_to(5)), when(data, is_equal_to_contents_of(data, 5)) ); From 8d50880686dfc2b06958fc3bd6212945ee9029c4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 14 Feb 2016 21:49:31 +0200 Subject: [PATCH 032/551] Use memcpy instead of cast to avoid alignment issues --- serial_link/protocol/frame_validator.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index 0a5f05068eb..f326097ffad 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -104,7 +104,8 @@ static uint32_t crc32_byte(uint8_t *p, uint32_t bytelength) void validator_recv_frame(uint8_t* data, uint16_t size) { if (size > 4) { - uint32_t frame_crc = *(uint32_t*)(data + size - 4); + uint32_t frame_crc; + memcpy(&frame_crc, data + size -4, 4); uint32_t expected_crc = crc32_byte(data, size - 4); if (frame_crc == expected_crc) { route_incoming_frame(data, size-4); @@ -113,7 +114,7 @@ void validator_recv_frame(uint8_t* data, uint16_t size) { } void validator_send_frame(uint8_t* data, uint16_t size) { - uint32_t* crc = (uint32_t*)(data + size); - *crc = crc32_byte(data, size); + uint32_t crc = crc32_byte(data, size); + memcpy(data + size, &crc, 4); send_frame(data, size + 4); } From 419908e5ef15481bd22dcd4173a25562f6153a5a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 17 Feb 2016 09:07:38 +0200 Subject: [PATCH 033/551] Hide the byte stuffer state inside it --- serial_link/protocol/byte_stuffer.c | 52 ++++---- serial_link/protocol/byte_stuffer.h | 5 +- serial_link/tests/byte_stuffer_tests.c | 177 ++++++++++++------------- 3 files changed, 117 insertions(+), 117 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index f9aa02a3f50..e5a26c2c2e4 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -40,56 +40,58 @@ typedef struct byte_stuffer_state { uint8_t data[MAX_FRAME_SIZE]; }byte_stuffer_state_t; -void init_byte_stuffer_state(byte_stuffer_state_t* state) { - state->next_zero = 0; - state->data_pos = 0; - state->long_frame = false; +static byte_stuffer_state_t state; + +void init_byte_stuffer(void) { + state.next_zero = 0; + state.data_pos = 0; + state.long_frame = false; } -void recv_byte(byte_stuffer_state_t* state, uint8_t data) { +void recv_byte(uint8_t data) { // Start of a new frame - if (state->next_zero == 0) { - state->next_zero = data; - state->long_frame = data == 0xFF; - state->data_pos = 0; + if (state.next_zero == 0) { + state.next_zero = data; + state.long_frame = data == 0xFF; + state.data_pos = 0; return; } - state->next_zero--; + state.next_zero--; if (data == 0) { - if (state->next_zero == 0) { + if (state.next_zero == 0) { // The frame is completed - if (state->data_pos > 0) { - validator_recv_frame(state->data, state->data_pos); + if (state.data_pos > 0) { + validator_recv_frame(state.data, state.data_pos); } } else { // The frame is invalid, so reset - init_byte_stuffer_state(state); + init_byte_stuffer(); } } else { - if (state->data_pos == MAX_FRAME_SIZE) { + if (state.data_pos == MAX_FRAME_SIZE) { // We exceeded our maximum frame size // therefore there's nothing else to do than reset to a new frame - state->next_zero = data; - state->long_frame = data == 0xFF; - state->data_pos = 0; + state.next_zero = data; + state.long_frame = data == 0xFF; + state.data_pos = 0; } - else if (state->next_zero == 0) { - if (state->long_frame) { + else if (state.next_zero == 0) { + if (state.long_frame) { // This is part of a long frame, so continue - state->next_zero = data; - state->long_frame = data == 0xFF; + state.next_zero = data; + state.long_frame = data == 0xFF; } else { // Special case for zeroes - state->next_zero = data; - state->data[state->data_pos++] = 0; + state.next_zero = data; + state.data[state.data_pos++] = 0; } } else { - state->data[state->data_pos++] = data; + state.data[state.data_pos++] = data; } } } diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index ea6b8451d4e..4dcdd24c112 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -22,7 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -typedef struct byte_stuffer_state byte_stuffer_state_t; -void init_byte_stuffer_state(byte_stuffer_state_t* state); -void recv_byte(byte_stuffer_state_t* state, uint8_t data); +void init_byte_stuffer(void); +void recv_byte(uint8_t data); void send_frame(uint8_t* data, uint16_t size); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 78bcbb4734c..f29cc129936 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -29,13 +29,12 @@ SOFTWARE. #include "protocol/frame_validator.h" #include "protocol/physical.h" -static byte_stuffer_state_t state; static uint8_t sent_data[MAX_FRAME_SIZE*2]; static uint16_t sent_data_size; Describe(ByteStuffer); BeforeEach(ByteStuffer) { - init_byte_stuffer_state(&state); + init_byte_stuffer(); sent_data_size = 0; } AfterEach(ByteStuffer) {} @@ -51,23 +50,23 @@ void send_data(const uint8_t* data, uint16_t size) { Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(validator_recv_frame); - recv_byte(&state, 0); + recv_byte(0); } Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { never_expect(validator_recv_frame); - recv_byte(&state, 0xFF); + recv_byte(0xFF); } Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { never_expect(validator_recv_frame); - recv_byte(&state, 0x4A); + recv_byte(0x4A); } Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { never_expect(validator_recv_frame); - recv_byte(&state, 1); - recv_byte(&state, 0); + recv_byte(1); + recv_byte(0); } Ensure(ByteStuffer, receives_single_byte_valid_frame) { @@ -76,9 +75,9 @@ Ensure(ByteStuffer, receives_single_byte_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(&state, 2); - recv_byte(&state, 0x37); - recv_byte(&state, 0); + recv_byte(2); + recv_byte(0x37); + recv_byte(0); } Ensure(ByteStuffer, receives_three_bytes_valid_frame) { @@ -87,11 +86,11 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) ); - recv_byte(&state, 4); - recv_byte(&state, 0x37); - recv_byte(&state, 0x99); - recv_byte(&state, 0xFF); - recv_byte(&state, 0); + recv_byte(4); + recv_byte(0x37); + recv_byte(0x99); + recv_byte(0xFF); + recv_byte(0); } Ensure(ByteStuffer, receives_single_zero_valid_frame) { @@ -100,9 +99,9 @@ Ensure(ByteStuffer, receives_single_zero_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(&state, 1); - recv_byte(&state, 1); - recv_byte(&state, 0); + recv_byte(1); + recv_byte(1); + recv_byte(0); } Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { @@ -111,12 +110,12 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(expected, 4)) ); - recv_byte(&state, 2); - recv_byte(&state, 5); - recv_byte(&state, 2); - recv_byte(&state, 3); - recv_byte(&state, 1); - recv_byte(&state, 0); + recv_byte(2); + recv_byte(5); + recv_byte(2); + recv_byte(3); + recv_byte(1); + recv_byte(0); } Ensure(ByteStuffer, receives_two_valid_frames) { @@ -130,13 +129,13 @@ Ensure(ByteStuffer, receives_two_valid_frames) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected2, 1)) ); - recv_byte(&state, 2); - recv_byte(&state, 5); - recv_byte(&state, 1); - recv_byte(&state, 0); - recv_byte(&state, 2); - recv_byte(&state, 3); - recv_byte(&state, 0); + recv_byte(2); + recv_byte(5); + recv_byte(1); + recv_byte(0); + recv_byte(2); + recv_byte(3); + recv_byte(0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { @@ -145,13 +144,13 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(&state, 3); - recv_byte(&state, 1); - recv_byte(&state, 0); - recv_byte(&state, 3); - recv_byte(&state, 5); - recv_byte(&state, 7); - recv_byte(&state, 0); + recv_byte(3); + recv_byte(1); + recv_byte(0); + recv_byte(3); + recv_byte(5); + recv_byte(7); + recv_byte(0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { @@ -160,14 +159,14 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(&state, 2); - recv_byte(&state, 9); - recv_byte(&state, 4); // This should have been zero - recv_byte(&state, 0); - recv_byte(&state, 3); - recv_byte(&state, 5); - recv_byte(&state, 7); - recv_byte(&state, 0); + recv_byte(2); + recv_byte(9); + recv_byte(4); // This should have been zero + recv_byte(0); + recv_byte(3); + recv_byte(5); + recv_byte(7); + recv_byte(0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { @@ -180,11 +179,11 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_ when(size, is_equal_to(254)), when(data, is_equal_to_contents_of(expected, 254)) ); - recv_byte(&state, 0xFF); + recv_byte(0xFF); for (i=0;i<254;i++) { - recv_byte(&state, i+1); + recv_byte(i+1); } - recv_byte(&state, 0); + recv_byte(0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { @@ -198,13 +197,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(&state, 0xFF); + recv_byte(0xFF); for (i=0;i<254;i++) { - recv_byte(&state, i+1); + recv_byte(i+1); } - recv_byte(&state, 2); - recv_byte(&state, 7); - recv_byte(&state, 0); + recv_byte(2); + recv_byte(7); + recv_byte(0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { @@ -218,13 +217,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(&state, 0xFF); + recv_byte(0xFF); for (i=0;i<254;i++) { - recv_byte(&state, i+1); + recv_byte(i+1); } - recv_byte(&state, 1); - recv_byte(&state, 1); - recv_byte(&state, 0); + recv_byte(1); + recv_byte(1); + recv_byte(0); } Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { @@ -243,23 +242,23 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { when(size, is_equal_to(515)), when(data, is_equal_to_contents_of(expected, 510)) ); - recv_byte(&state, 0xFF); + recv_byte(0xFF); for (i=0;i<254;i++) { - recv_byte(&state, i+1); + recv_byte(i+1); } - recv_byte(&state, 0xFF); + recv_byte(0xFF); for (i=0;i<254;i++) { - recv_byte(&state, i+1); + recv_byte(i+1); } - recv_byte(&state, 8); - recv_byte(&state, 1); - recv_byte(&state, 2); - recv_byte(&state, 3); - recv_byte(&state, 4); - recv_byte(&state, 5); - recv_byte(&state, 6); - recv_byte(&state, 7); - recv_byte(&state, 0); + recv_byte(8); + recv_byte(1); + recv_byte(2); + recv_byte(3); + recv_byte(4); + recv_byte(5); + recv_byte(6); + recv_byte(7); + recv_byte(0); } Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { @@ -269,23 +268,23 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) ); int i; - recv_byte(&state, 1); + recv_byte(1); for(i=0;i Date: Sat, 20 Feb 2016 12:06:23 +0200 Subject: [PATCH 034/551] Add link parameter --- serial_link/protocol/byte_stuffer.c | 77 ++++---- serial_link/protocol/byte_stuffer.h | 4 +- serial_link/protocol/frame_router.h | 2 +- serial_link/protocol/frame_validator.c | 8 +- serial_link/protocol/frame_validator.h | 4 +- serial_link/protocol/physical.h | 2 +- serial_link/tests/byte_stuffer_tests.c | 212 +++++++++++----------- serial_link/tests/frame_validator_tests.c | 24 +-- 8 files changed, 171 insertions(+), 162 deletions(-) diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index e5a26c2c2e4..05b7aa6f80e 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -32,6 +32,7 @@ SOFTWARE. // http://www.stuartcheshire.org/papers/COBSforToN.pdf #define MAX_FRAME_SIZE 1024 +#define NUM_LINKS 2 typedef struct byte_stuffer_state { uint16_t next_zero; @@ -40,70 +41,78 @@ typedef struct byte_stuffer_state { uint8_t data[MAX_FRAME_SIZE]; }byte_stuffer_state_t; -static byte_stuffer_state_t state; +static byte_stuffer_state_t states[NUM_LINKS]; -void init_byte_stuffer(void) { - state.next_zero = 0; - state.data_pos = 0; - state.long_frame = false; +void init_byte_stuffer_state(byte_stuffer_state_t* state) { + state->next_zero = 0; + state->data_pos = 0; + state->long_frame = false; } -void recv_byte(uint8_t data) { +void init_byte_stuffer(void) { + int i; + for (i=0;inext_zero == 0) { + state->next_zero = data; + state->long_frame = data == 0xFF; + state->data_pos = 0; return; } - state.next_zero--; + state->next_zero--; if (data == 0) { - if (state.next_zero == 0) { + if (state->next_zero == 0) { // The frame is completed - if (state.data_pos > 0) { - validator_recv_frame(state.data, state.data_pos); + if (state->data_pos > 0) { + validator_recv_frame(link, state->data, state->data_pos); } } else { // The frame is invalid, so reset - init_byte_stuffer(); + init_byte_stuffer_state(state); } } else { - if (state.data_pos == MAX_FRAME_SIZE) { + if (state->data_pos == MAX_FRAME_SIZE) { // We exceeded our maximum frame size // therefore there's nothing else to do than reset to a new frame - state.next_zero = data; - state.long_frame = data == 0xFF; - state.data_pos = 0; + state->next_zero = data; + state->long_frame = data == 0xFF; + state->data_pos = 0; } - else if (state.next_zero == 0) { - if (state.long_frame) { + else if (state->next_zero == 0) { + if (state->long_frame) { // This is part of a long frame, so continue - state.next_zero = data; - state.long_frame = data == 0xFF; + state->next_zero = data; + state->long_frame = data == 0xFF; } else { // Special case for zeroes - state.next_zero = data; - state.data[state.data_pos++] = 0; + state->next_zero = data; + state->data[state->data_pos++] = 0; } } else { - state.data[state.data_pos++] = data; + state->data[state->data_pos++] = data; } } } -static void send_block(uint8_t* start, uint8_t* end, uint8_t num_non_zero) { - send_data(&num_non_zero, 1); +static void send_block(uint8_t link, uint8_t* start, uint8_t* end, uint8_t num_non_zero) { + send_data(link, &num_non_zero, 1); if (end > start) { - send_data(start, end-start); + send_data(link, start, end-start); } } -void send_frame(uint8_t* data, uint16_t size) { +void send_frame(uint8_t link, uint8_t* data, uint16_t size) { const uint8_t zero = 0; if (size > 0) { uint16_t num_non_zero = 1; @@ -113,14 +122,14 @@ void send_frame(uint8_t* data, uint16_t size) { if (num_non_zero == 0xFF) { // There's more data after big non-zero block // So send it, and start a new block - send_block(start, data, num_non_zero); + send_block(link, start, data, num_non_zero); start = data; num_non_zero = 1; } else { if (*data == 0) { // A zero encountered, so send the block - send_block(start, data, num_non_zero); + send_block(link, start, data, num_non_zero); start = data + 1; num_non_zero = 1; } @@ -130,7 +139,7 @@ void send_frame(uint8_t* data, uint16_t size) { ++data; } } - send_block(start, data, num_non_zero); - send_data(&zero, 1); + send_block(link, start, data, num_non_zero); + send_data(link, &zero, 1); } } diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index 4dcdd24c112..cd94b458284 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -23,5 +23,5 @@ SOFTWARE. */ void init_byte_stuffer(void); -void recv_byte(uint8_t data); -void send_frame(uint8_t* data, uint16_t size); +void recv_byte(uint8_t link, uint8_t data); +void send_frame(uint8_t link, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h index dd1bfb12302..3906b06c712 100644 --- a/serial_link/protocol/frame_router.h +++ b/serial_link/protocol/frame_router.h @@ -22,4 +22,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void route_incoming_frame(uint8_t* data, uint16_t size); +void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index f326097ffad..80e662b2e8c 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -102,19 +102,19 @@ static uint32_t crc32_byte(uint8_t *p, uint32_t bytelength) return (crc ^ 0xffffffff); } -void validator_recv_frame(uint8_t* data, uint16_t size) { +void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { if (size > 4) { uint32_t frame_crc; memcpy(&frame_crc, data + size -4, 4); uint32_t expected_crc = crc32_byte(data, size - 4); if (frame_crc == expected_crc) { - route_incoming_frame(data, size-4); + route_incoming_frame(link, data, size-4); } } } -void validator_send_frame(uint8_t* data, uint16_t size) { +void validator_send_frame(uint8_t link, uint8_t* data, uint16_t size) { uint32_t crc = crc32_byte(data, size); memcpy(data + size, &crc, 4); - send_frame(data, size + 4); + send_frame(link, data, size + 4); } diff --git a/serial_link/protocol/frame_validator.h b/serial_link/protocol/frame_validator.h index 2e518894fbb..c35fc27260b 100644 --- a/serial_link/protocol/frame_validator.h +++ b/serial_link/protocol/frame_validator.h @@ -22,6 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void validator_recv_frame(uint8_t* data, uint16_t size); +void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size); // The buffer pointed to by the data needs 4 additional bytes -void validator_send_frame(uint8_t* data, uint16_t size); +void validator_send_frame(uint8_t link, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/physical.h b/serial_link/protocol/physical.h index 73a7855dfba..ee5883d36bf 100644 --- a/serial_link/protocol/physical.h +++ b/serial_link/protocol/physical.h @@ -22,4 +22,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -void send_data(const uint8_t* data, uint16_t size); +void send_data(uint8_t link, const uint8_t* data, uint16_t size); diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index f29cc129936..0f58479cb9e 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -39,34 +39,34 @@ BeforeEach(ByteStuffer) { } AfterEach(ByteStuffer) {} -void validator_recv_frame(uint8_t* data, uint16_t size) { +void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { mock(data, size); } -void send_data(const uint8_t* data, uint16_t size) { +void send_data(uint8_t link, const uint8_t* data, uint16_t size) { memcpy(sent_data + sent_data_size, data, size); sent_data_size += size; } Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(validator_recv_frame); - recv_byte(0); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { never_expect(validator_recv_frame); - recv_byte(0xFF); + recv_byte(0, 0xFF); } Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { never_expect(validator_recv_frame); - recv_byte(0x4A); + recv_byte(0, 0x4A); } Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { never_expect(validator_recv_frame); - recv_byte(1); - recv_byte(0); + recv_byte(0, 1); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_single_byte_valid_frame) { @@ -75,9 +75,9 @@ Ensure(ByteStuffer, receives_single_byte_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(2); - recv_byte(0x37); - recv_byte(0); + recv_byte(0, 2); + recv_byte(0, 0x37); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_three_bytes_valid_frame) { @@ -86,11 +86,11 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) ); - recv_byte(4); - recv_byte(0x37); - recv_byte(0x99); - recv_byte(0xFF); - recv_byte(0); + recv_byte(0, 4); + recv_byte(0, 0x37); + recv_byte(0, 0x99); + recv_byte(0, 0xFF); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_single_zero_valid_frame) { @@ -99,9 +99,9 @@ Ensure(ByteStuffer, receives_single_zero_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(1); - recv_byte(1); - recv_byte(0); + recv_byte(0, 1); + recv_byte(0, 1); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { @@ -110,12 +110,12 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(expected, 4)) ); - recv_byte(2); - recv_byte(5); - recv_byte(2); - recv_byte(3); - recv_byte(1); - recv_byte(0); + recv_byte(0, 2); + recv_byte(0, 5); + recv_byte(0, 2); + recv_byte(0, 3); + recv_byte(0, 1); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_two_valid_frames) { @@ -129,13 +129,13 @@ Ensure(ByteStuffer, receives_two_valid_frames) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected2, 1)) ); - recv_byte(2); - recv_byte(5); - recv_byte(1); - recv_byte(0); - recv_byte(2); - recv_byte(3); - recv_byte(0); + recv_byte(1, 2); + recv_byte(1, 5); + recv_byte(1, 1); + recv_byte(1, 0); + recv_byte(1, 2); + recv_byte(1, 3); + recv_byte(1, 0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { @@ -144,13 +144,13 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(3); - recv_byte(1); - recv_byte(0); - recv_byte(3); - recv_byte(5); - recv_byte(7); - recv_byte(0); + recv_byte(1, 3); + recv_byte(1, 1); + recv_byte(1, 0); + recv_byte(1, 3); + recv_byte(1, 5); + recv_byte(1, 7); + recv_byte(1, 0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { @@ -159,14 +159,14 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(2); - recv_byte(9); - recv_byte(4); // This should have been zero - recv_byte(0); - recv_byte(3); - recv_byte(5); - recv_byte(7); - recv_byte(0); + recv_byte(0, 2); + recv_byte(0, 9); + recv_byte(0, 4); // This should have been zero + recv_byte(0, 0); + recv_byte(0, 3); + recv_byte(0, 5); + recv_byte(0, 7); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { @@ -179,11 +179,11 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_ when(size, is_equal_to(254)), when(data, is_equal_to_contents_of(expected, 254)) ); - recv_byte(0xFF); + recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(i+1); + recv_byte(0, i+1); } - recv_byte(0); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { @@ -197,13 +197,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(0xFF); + recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(i+1); + recv_byte(0, i+1); } - recv_byte(2); - recv_byte(7); - recv_byte(0); + recv_byte(0, 2); + recv_byte(0, 7); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { @@ -217,13 +217,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(0xFF); + recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(i+1); + recv_byte(0, i+1); } - recv_byte(1); - recv_byte(1); - recv_byte(0); + recv_byte(0, 1); + recv_byte(0, 1); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { @@ -242,23 +242,23 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { when(size, is_equal_to(515)), when(data, is_equal_to_contents_of(expected, 510)) ); - recv_byte(0xFF); + recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(i+1); + recv_byte(0, i+1); } - recv_byte(0xFF); + recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(i+1); + recv_byte(0, i+1); } - recv_byte(8); - recv_byte(1); - recv_byte(2); - recv_byte(3); - recv_byte(4); - recv_byte(5); - recv_byte(6); - recv_byte(7); - recv_byte(0); + recv_byte(0, 8); + recv_byte(0, 1); + recv_byte(0, 2); + recv_byte(0, 3); + recv_byte(0, 4); + recv_byte(0, 5); + recv_byte(0, 6); + recv_byte(0, 7); + recv_byte(0, 0); } Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { @@ -268,23 +268,23 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) ); int i; - recv_byte(1); + recv_byte(0, 1); for(i=0;i #include "protocol/frame_validator.c" -void route_incoming_frame(uint8_t* data, uint16_t size) { +void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) { mock(data, size); } -void send_frame(uint8_t* data, uint16_t size) { +void send_frame(uint8_t link, uint8_t* data, uint16_t size) { mock(data, size); } @@ -41,10 +41,10 @@ AfterEach(FrameValidator) {} Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) { never_expect(route_incoming_frame); uint8_t data[] = {1, 2}; - validator_recv_frame(0, 1); - validator_recv_frame(data, 2); - validator_recv_frame(data, 3); - validator_recv_frame(data, 4); + validator_recv_frame(0, 0, 1); + validator_recv_frame(0, data, 2); + validator_recv_frame(0, data, 3); + validator_recv_frame(0, data, 4); } Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { @@ -53,13 +53,13 @@ Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(data, 1)) ); - validator_recv_frame(data, 5); + validator_recv_frame(0, data, 5); } Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) { uint8_t data[] = {0x44, 0, 0, 0, 0}; never_expect(route_incoming_frame); - validator_recv_frame(data, 5); + validator_recv_frame(1, data, 5); } Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { @@ -68,7 +68,7 @@ Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) { when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(data, 4)) ); - validator_recv_frame(data, 8); + validator_recv_frame(1, data, 8); } Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { @@ -77,7 +77,7 @@ Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) { when(size, is_equal_to(5)), when(data, is_equal_to_contents_of(data, 5)) ); - validator_recv_frame(data, 9); + validator_recv_frame(0, data, 9); } Ensure(FrameValidator, sends_one_byte_with_correct_crc) { @@ -87,7 +87,7 @@ Ensure(FrameValidator, sends_one_byte_with_correct_crc) { when(size, is_equal_to(sizeof(expected))), when(data, is_equal_to_contents_of(expected, sizeof(expected))) ); - validator_send_frame(original, 1); + validator_send_frame(0, original, 1); } Ensure(FrameValidator, sends_five_bytes_with_correct_crc) { @@ -97,5 +97,5 @@ Ensure(FrameValidator, sends_five_bytes_with_correct_crc) { when(size, is_equal_to(sizeof(expected))), when(data, is_equal_to_contents_of(expected, sizeof(expected))) ); - validator_send_frame(original, 5); + validator_send_frame(0, original, 5); } From 4b9fccc75633b4ea297de373d5d7f01288d2fb11 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 13:59:48 +0200 Subject: [PATCH 035/551] Start implement router --- serial_link/protocol/byte_stuffer.c | 4 +- serial_link/protocol/byte_stuffer.h | 4 +- serial_link/protocol/frame_router.c | 33 ++++ serial_link/protocol/frame_router.h | 4 + serial_link/protocol/frame_validator.c | 2 +- serial_link/tests/byte_stuffer_tests.c | 208 +++++++++++----------- serial_link/tests/frame_router_tests.c | 89 +++++++++ serial_link/tests/frame_validator_tests.c | 6 +- 8 files changed, 238 insertions(+), 112 deletions(-) create mode 100644 serial_link/protocol/frame_router.c create mode 100644 serial_link/tests/frame_router_tests.c diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 05b7aa6f80e..8b529667fd1 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -56,7 +56,7 @@ void init_byte_stuffer(void) { } } -void recv_byte(uint8_t link, uint8_t data) { +void byte_stuffer_recv_byte(uint8_t link, uint8_t data) { byte_stuffer_state_t* state = &states[link]; // Start of a new frame if (state->next_zero == 0) { @@ -112,7 +112,7 @@ static void send_block(uint8_t link, uint8_t* start, uint8_t* end, uint8_t num_n } } -void send_frame(uint8_t link, uint8_t* data, uint16_t size) { +void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) { const uint8_t zero = 0; if (size > 0) { uint16_t num_non_zero = 1; diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index cd94b458284..839a876fe81 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -23,5 +23,5 @@ SOFTWARE. */ void init_byte_stuffer(void); -void recv_byte(uint8_t link, uint8_t data); -void send_frame(uint8_t link, uint8_t* data, uint16_t size); +void byte_stuffer_recv_byte(uint8_t link, uint8_t data); +void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c new file mode 100644 index 00000000000..db6223a8d7b --- /dev/null +++ b/serial_link/protocol/frame_router.c @@ -0,0 +1,33 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "protocol/frame_router.h" + +void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ + validator_send_frame(DOWN_LINK, data, size); +} + +void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { + validator_send_frame(DOWN_LINK, data, size); +} diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h index 3906b06c712..a0238079e84 100644 --- a/serial_link/protocol/frame_router.h +++ b/serial_link/protocol/frame_router.h @@ -22,4 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#define UP_LINK 0 +#define DOWN_LINK 1 + void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size); +void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index 80e662b2e8c..a3face6506e 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -116,5 +116,5 @@ void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { void validator_send_frame(uint8_t link, uint8_t* data, uint16_t size) { uint32_t crc = crc32_byte(data, size); memcpy(data + size, &crc, 4); - send_frame(link, data, size + 4); + byte_stuffer_send_frame(link, data, size + 4); } diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 0f58479cb9e..912c4d3211c 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -50,23 +50,23 @@ void send_data(uint8_t link, const uint8_t* data, uint16_t size) { Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { never_expect(validator_recv_frame); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { never_expect(validator_recv_frame); - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); } Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) { never_expect(validator_recv_frame); - recv_byte(0, 0x4A); + byte_stuffer_recv_byte(0, 0x4A); } Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { never_expect(validator_recv_frame); - recv_byte(0, 1); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_single_byte_valid_frame) { @@ -75,9 +75,9 @@ Ensure(ByteStuffer, receives_single_byte_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(0, 2); - recv_byte(0, 0x37); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 0x37); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_three_bytes_valid_frame) { @@ -86,11 +86,11 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) { when(size, is_equal_to(3)), when(data, is_equal_to_contents_of(expected, 3)) ); - recv_byte(0, 4); - recv_byte(0, 0x37); - recv_byte(0, 0x99); - recv_byte(0, 0xFF); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 4); + byte_stuffer_recv_byte(0, 0x37); + byte_stuffer_recv_byte(0, 0x99); + byte_stuffer_recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_single_zero_valid_frame) { @@ -99,9 +99,9 @@ Ensure(ByteStuffer, receives_single_zero_valid_frame) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected, 1)) ); - recv_byte(0, 1); - recv_byte(0, 1); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { @@ -110,12 +110,12 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) { when(size, is_equal_to(4)), when(data, is_equal_to_contents_of(expected, 4)) ); - recv_byte(0, 2); - recv_byte(0, 5); - recv_byte(0, 2); - recv_byte(0, 3); - recv_byte(0, 1); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_two_valid_frames) { @@ -129,13 +129,13 @@ Ensure(ByteStuffer, receives_two_valid_frames) { when(size, is_equal_to(1)), when(data, is_equal_to_contents_of(expected2, 1)) ); - recv_byte(1, 2); - recv_byte(1, 5); - recv_byte(1, 1); - recv_byte(1, 0); - recv_byte(1, 2); - recv_byte(1, 3); - recv_byte(1, 0); + byte_stuffer_recv_byte(1, 2); + byte_stuffer_recv_byte(1, 5); + byte_stuffer_recv_byte(1, 1); + byte_stuffer_recv_byte(1, 0); + byte_stuffer_recv_byte(1, 2); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { @@ -144,13 +144,13 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(1, 3); - recv_byte(1, 1); - recv_byte(1, 0); - recv_byte(1, 3); - recv_byte(1, 5); - recv_byte(1, 7); - recv_byte(1, 0); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 1); + byte_stuffer_recv_byte(1, 0); + byte_stuffer_recv_byte(1, 3); + byte_stuffer_recv_byte(1, 5); + byte_stuffer_recv_byte(1, 7); + byte_stuffer_recv_byte(1, 0); } Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { @@ -159,14 +159,14 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { when(size, is_equal_to(2)), when(data, is_equal_to_contents_of(expected, 2)) ); - recv_byte(0, 2); - recv_byte(0, 9); - recv_byte(0, 4); // This should have been zero - recv_byte(0, 0); - recv_byte(0, 3); - recv_byte(0, 5); - recv_byte(0, 7); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 9); + byte_stuffer_recv_byte(0, 4); // This should have been zero + byte_stuffer_recv_byte(0, 0); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { @@ -179,11 +179,11 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_ when(size, is_equal_to(254)), when(data, is_equal_to_contents_of(expected, 254)) ); - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(0, i+1); + byte_stuffer_recv_byte(0, i+1); } - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { @@ -197,13 +197,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(0, i+1); + byte_stuffer_recv_byte(0, i+1); } - recv_byte(0, 2); - recv_byte(0, 7); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { @@ -217,13 +217,13 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_ when(size, is_equal_to(255)), when(data, is_equal_to_contents_of(expected, 255)) ); - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(0, i+1); + byte_stuffer_recv_byte(0, i+1); } - recv_byte(0, 1); - recv_byte(0, 1); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { @@ -242,23 +242,23 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) { when(size, is_equal_to(515)), when(data, is_equal_to_contents_of(expected, 510)) ); - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(0, i+1); + byte_stuffer_recv_byte(0, i+1); } - recv_byte(0, 0xFF); + byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { - recv_byte(0, i+1); + byte_stuffer_recv_byte(0, i+1); } - recv_byte(0, 8); - recv_byte(0, 1); - recv_byte(0, 2); - recv_byte(0, 3); - recv_byte(0, 4); - recv_byte(0, 5); - recv_byte(0, 6); - recv_byte(0, 7); - recv_byte(0, 0); + byte_stuffer_recv_byte(0, 8); + byte_stuffer_recv_byte(0, 1); + byte_stuffer_recv_byte(0, 2); + byte_stuffer_recv_byte(0, 3); + byte_stuffer_recv_byte(0, 4); + byte_stuffer_recv_byte(0, 5); + byte_stuffer_recv_byte(0, 6); + byte_stuffer_recv_byte(0, 7); + byte_stuffer_recv_byte(0, 0); } Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { @@ -268,23 +268,23 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE)) ); int i; - recv_byte(0, 1); + byte_stuffer_recv_byte(0, 1); for(i=0;i +#include +#include "protocol/byte_stuffer.c" +#include "protocol/frame_validator.c" +#include "protocol/frame_router.c" + +static uint8_t received_data[256]; +static uint16_t received_data_size; + +typedef struct { + uint8_t received_data[256]; + uint16_t sent_data_size; +} receive_buffer_t; + +typedef struct { + receive_buffer_t send_buffers[2]; +} router_buffer_t; + +router_buffer_t router_buffers[8]; + +router_buffer_t* current_router_buffer; + + +Describe(ByteStuffer); +BeforeEach(ByteStuffer) { + init_byte_stuffer(); + memset(router_buffers, 0, sizeof(router_buffers)); + current_router_buffer = 0; +} +AfterEach(ByteStuffer) {} + +typedef struct { + uint32_t data; + uint8_t extra[16]; +} frame_buffer_t; + + +void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + receive_buffer_t* buffer = ¤t_router_buffer->send_buffers[link]; + memcpy(buffer->received_data + buffer->sent_data_size, data, size); + buffer->sent_data_size += size; +} + +static void receive_data(uint8_t link, uint8_t* data, uint16_t size) { + int i; + for(i=0;i Date: Sat, 20 Feb 2016 14:32:26 +0200 Subject: [PATCH 036/551] Add complete master broadcast test --- serial_link/protocol/frame_router.c | 8 +++++ serial_link/protocol/frame_router.h | 1 + serial_link/protocol/transport.h | 25 ++++++++++++++ serial_link/tests/frame_router_tests.c | 45 ++++++++++++++++++++++---- 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 serial_link/protocol/transport.h diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index db6223a8d7b..0675cea284c 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -23,8 +23,16 @@ SOFTWARE. */ #include "protocol/frame_router.h" +#include "protocol/transport.h" + +static bool is_master; + +void router_set_master(bool master) { + is_master = master; +} void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ + transport_recv_frame(0, data, size); validator_send_frame(DOWN_LINK, data, size); } diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h index a0238079e84..67db3122fa4 100644 --- a/serial_link/protocol/frame_router.h +++ b/serial_link/protocol/frame_router.h @@ -25,5 +25,6 @@ SOFTWARE. #define UP_LINK 0 #define DOWN_LINK 1 +void router_set_master(bool master); void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size); void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size); diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h new file mode 100644 index 00000000000..a40d64d4144 --- /dev/null +++ b/serial_link/protocol/transport.h @@ -0,0 +1,25 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index 5ce6c9c0f5b..eb0c710ea14 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -27,12 +27,13 @@ SOFTWARE. #include "protocol/byte_stuffer.c" #include "protocol/frame_validator.c" #include "protocol/frame_router.c" +#include "protocol/transport.h" static uint8_t received_data[256]; static uint16_t received_data_size; typedef struct { - uint8_t received_data[256]; + uint8_t sent_data[256]; uint16_t sent_data_size; } receive_buffer_t; @@ -61,7 +62,7 @@ typedef struct { void send_data(uint8_t link, const uint8_t* data, uint16_t size) { receive_buffer_t* buffer = ¤t_router_buffer->send_buffers[link]; - memcpy(buffer->received_data + buffer->sent_data_size, data, size); + memcpy(buffer->sent_data + buffer->sent_data_size, data, size); buffer->sent_data_size += size; } @@ -72,18 +73,50 @@ static void receive_data(uint8_t link, uint8_t* data, uint16_t size) { } } +static void activate_router(uint8_t num) { + current_router_buffer = router_buffers + num; + router_set_master(num==0); +} + +static void simulate_transport(uint8_t from, uint8_t to) { + activate_router(to); + if (from > to) { + } + else if(to > from) { + receive_data(UP_LINK, + router_buffers[from].send_buffers[DOWN_LINK].sent_data, + router_buffers[from].send_buffers[DOWN_LINK].sent_data_size); + } +} + +void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { + mock(from, data, size); +} + Ensure(ByteStuffer, master_broadcast_is_received_by_everyone) { frame_buffer_t data; data.data = 0xAB7055BB; - current_router_buffer = router_buffers + 0; + activate_router(0); router_send_frame(0xFF, (uint8_t*)&data, 4); assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); - current_router_buffer = router_buffers + 1; - receive_data(UP_LINK, router_buffers[0].send_buffers[DOWN_LINK].received_data, - router_buffers[0].send_buffers[DOWN_LINK].sent_data_size); + expect(transport_recv_frame, + when(from, is_equal_to(0)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(0, 1); assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + + expect(transport_recv_frame, + when(from, is_equal_to(0)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(1, 2); + assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } From 82b5037b9db628c3f34d8fb38848753ff3e41e2f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 14:52:17 +0200 Subject: [PATCH 037/551] Add master send to specific destinations --- serial_link/protocol/frame_router.c | 8 +++++-- serial_link/tests/frame_router_tests.c | 32 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index 0675cea284c..861c0d7d296 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -32,10 +32,14 @@ void router_set_master(bool master) { } void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ - transport_recv_frame(0, data, size); + if (data[size-1] & 1) { + transport_recv_frame(0, data, size - 1); + } + data[size-1] >>= 1; validator_send_frame(DOWN_LINK, data, size); } void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { - validator_send_frame(DOWN_LINK, data, size); + data[size] = destination; + validator_send_frame(DOWN_LINK, data, size + 1); } diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index eb0c710ea14..7a4ccb0c408 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -120,3 +120,35 @@ Ensure(ByteStuffer, master_broadcast_is_received_by_everyone) { assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } + +Ensure(ByteStuffer, master_send_is_received_by_targets) { + printf("Here\n"); + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(0); + router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4); + assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + + simulate_transport(0, 1); + assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + + expect(transport_recv_frame, + when(from, is_equal_to(0)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(1, 2); + assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + + expect(transport_recv_frame, + when(from, is_equal_to(0)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(2, 3); + assert_that(router_buffers[3].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); +} From c28e19c5467e92f532f64db020ad4817b531dbec Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 15:02:53 +0200 Subject: [PATCH 038/551] First link sending to master --- serial_link/protocol/frame_router.c | 22 +++++++++++++----- serial_link/tests/frame_router_tests.c | 32 +++++++++++++++++++++----- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index 861c0d7d296..480673f0c0c 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -32,14 +32,24 @@ void router_set_master(bool master) { } void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ - if (data[size-1] & 1) { - transport_recv_frame(0, data, size - 1); + if (is_master) { + transport_recv_frame(1, data, size); + } + else { + if (data[size-1] & 1) { + transport_recv_frame(0, data, size - 1); + } + data[size-1] >>= 1; + validator_send_frame(DOWN_LINK, data, size); } - data[size-1] >>= 1; - validator_send_frame(DOWN_LINK, data, size); } void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { - data[size] = destination; - validator_send_frame(DOWN_LINK, data, size + 1); + if (destination == 0) { + validator_send_frame(UP_LINK, data, size); + } + else { + data[size] = destination; + validator_send_frame(DOWN_LINK, data, size + 1); + } } diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index 7a4ccb0c408..02e6367d21b 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -46,13 +46,13 @@ router_buffer_t router_buffers[8]; router_buffer_t* current_router_buffer; -Describe(ByteStuffer); -BeforeEach(ByteStuffer) { +Describe(FrameRouter); +BeforeEach(FrameRouter) { init_byte_stuffer(); memset(router_buffers, 0, sizeof(router_buffers)); current_router_buffer = 0; } -AfterEach(ByteStuffer) {} +AfterEach(FrameRouter) {} typedef struct { uint32_t data; @@ -81,6 +81,9 @@ static void activate_router(uint8_t num) { static void simulate_transport(uint8_t from, uint8_t to) { activate_router(to); if (from > to) { + receive_data(DOWN_LINK, + router_buffers[from].send_buffers[UP_LINK].sent_data, + router_buffers[from].send_buffers[UP_LINK].sent_data_size); } else if(to > from) { receive_data(UP_LINK, @@ -94,7 +97,7 @@ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { } -Ensure(ByteStuffer, master_broadcast_is_received_by_everyone) { +Ensure(FrameRouter, master_broadcast_is_received_by_everyone) { frame_buffer_t data; data.data = 0xAB7055BB; activate_router(0); @@ -121,8 +124,7 @@ Ensure(ByteStuffer, master_broadcast_is_received_by_everyone) { assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } -Ensure(ByteStuffer, master_send_is_received_by_targets) { - printf("Here\n"); +Ensure(FrameRouter, master_send_is_received_by_targets) { frame_buffer_t data; data.data = 0xAB7055BB; activate_router(0); @@ -152,3 +154,21 @@ Ensure(ByteStuffer, master_send_is_received_by_targets) { assert_that(router_buffers[3].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0)); assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } + +Ensure(FrameRouter, first_sends_to_master) { + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(1); + router_send_frame(0, (uint8_t*)&data, 4); + assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + + expect(transport_recv_frame, + when(from, is_equal_to(1)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(1, 0); + assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); +} From 532f98eef6a29ae83d7ed61fbc4e25e23ad972d5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 15:14:40 +0200 Subject: [PATCH 039/551] Support for other links sending to master --- serial_link/protocol/frame_router.c | 19 +++++++++++++------ serial_link/tests/frame_router_tests.c | 25 ++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index 480673f0c0c..c61c50ebd68 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -33,20 +33,27 @@ void router_set_master(bool master) { void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ if (is_master) { - transport_recv_frame(1, data, size); + transport_recv_frame(data[size-1], data, size - 1); } else { - if (data[size-1] & 1) { - transport_recv_frame(0, data, size - 1); + if (link == UP_LINK) { + if (data[size-1] & 1) { + transport_recv_frame(0, data, size - 1); + } + data[size-1] >>= 1; + validator_send_frame(DOWN_LINK, data, size); + } + else { + data[size-1]++; + validator_send_frame(UP_LINK, data, size); } - data[size-1] >>= 1; - validator_send_frame(DOWN_LINK, data, size); } } void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { if (destination == 0) { - validator_send_frame(UP_LINK, data, size); + data[size] = 1; + validator_send_frame(UP_LINK, data, size + 1); } else { data[size] = destination; diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index 02e6367d21b..6b00aca6777 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -155,7 +155,7 @@ Ensure(FrameRouter, master_send_is_received_by_targets) { assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } -Ensure(FrameRouter, first_sends_to_master) { +Ensure(FrameRouter, first_link_sends_to_master) { frame_buffer_t data; data.data = 0xAB7055BB; activate_router(1); @@ -172,3 +172,26 @@ Ensure(FrameRouter, first_sends_to_master) { assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } + +Ensure(FrameRouter, second_link_sends_to_master) { + printf("Second to master start\n"); + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(2); + router_send_frame(0, (uint8_t*)&data, 4); + assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + + simulate_transport(2, 1); + assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + + expect(transport_recv_frame, + when(from, is_equal_to(2)), + when(size, is_equal_to(4)), + when(data, is_equal_to_contents_of(&data.data, 4)) + ); + simulate_transport(1, 0); + assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); +} From ea346125e8ef0c14e1566070380ec777d4a1a56a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 15:28:42 +0200 Subject: [PATCH 040/551] Add some validation for invalid router destinations --- serial_link/protocol/frame_router.c | 16 ++++++++---- serial_link/tests/frame_router_tests.c | 36 +++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index c61c50ebd68..890ebbe9ea3 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -33,7 +33,9 @@ void router_set_master(bool master) { void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ if (is_master) { - transport_recv_frame(data[size-1], data, size - 1); + if (link == DOWN_LINK) { + transport_recv_frame(data[size-1], data, size - 1); + } } else { if (link == UP_LINK) { @@ -52,11 +54,15 @@ void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size){ void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { if (destination == 0) { - data[size] = 1; - validator_send_frame(UP_LINK, data, size + 1); + if (!is_master) { + data[size] = 1; + validator_send_frame(UP_LINK, data, size + 1); + } } else { - data[size] = destination; - validator_send_frame(DOWN_LINK, data, size + 1); + if (is_master) { + data[size] = destination; + validator_send_frame(DOWN_LINK, data, size + 1); + } } } diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index 6b00aca6777..0b0ea6e7f48 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -174,7 +174,6 @@ Ensure(FrameRouter, first_link_sends_to_master) { } Ensure(FrameRouter, second_link_sends_to_master) { - printf("Second to master start\n"); frame_buffer_t data; data.data = 0xAB7055BB; activate_router(2); @@ -195,3 +194,38 @@ Ensure(FrameRouter, second_link_sends_to_master) { assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); } + +Ensure(FrameRouter, master_sends_to_master_does_nothing) { + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(0); + router_send_frame(0, (uint8_t*)&data, 4); + assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); +} + +Ensure(FrameRouter, link_sends_to_other_link_does_nothing) { + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(1); + router_send_frame(2, (uint8_t*)&data, 4); + assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); +} + +Ensure(FrameRouter, master_receives_on_uplink_does_nothing) { + frame_buffer_t data; + data.data = 0xAB7055BB; + activate_router(1); + router_send_frame(0, (uint8_t*)&data, 4); + assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0)); + assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); + + never_expect(transport_recv_frame); + activate_router(0); + receive_data(UP_LINK, + router_buffers[1].send_buffers[UP_LINK].sent_data, + router_buffers[1].send_buffers[UP_LINK].sent_data_size); + assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0)); + assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0)); +} From c78eefba498ffafc3cb577a72492256849384de6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 15:49:31 +0200 Subject: [PATCH 041/551] Add first transport tests --- serial_link/protocol/transport.c | 39 +++++++++++++++++++++++++++++ serial_link/protocol/transport.h | 2 ++ serial_link/tests/transport_tests.c | 39 +++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 serial_link/protocol/transport.c create mode 100644 serial_link/tests/transport_tests.c diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c new file mode 100644 index 00000000000..399894ff980 --- /dev/null +++ b/serial_link/protocol/transport.c @@ -0,0 +1,39 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "protocol/transport.h" + +static uint32_t current_send_frame; + +void init_transport(void) { + current_send_frame = 0; +} + +void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { + +} + +uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size) { + return ++current_send_frame; +} diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index a40d64d4144..01119857d36 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -22,4 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +void init_transport(void); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); +uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size); diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c new file mode 100644 index 00000000000..a64e7446d81 --- /dev/null +++ b/serial_link/tests/transport_tests.c @@ -0,0 +1,39 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include "protocol/transport.c" + +Describe(Transport); +BeforeEach(Transport) { + init_transport(); +} +AfterEach(Transport) {} + +Ensure(Transport, packet_number_is_sequential) { + assert_that(transport_send_frame(0, NULL, 0), is_equal_to(1)); + assert_that(transport_send_frame(0, NULL, 0), is_equal_to(2)); + // It doesn't matter if the destination changes + assert_that(transport_send_frame(1, NULL, 0), is_equal_to(3)); +} From 50edb3d90c0076eb088f79564e38382452a21d03 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 22:22:42 +0200 Subject: [PATCH 042/551] Add first version of triple buffered object --- serial_link/protocol/triple_buffered_object.c | 33 ++++++++++++++ serial_link/protocol/triple_buffered_object.h | 37 ++++++++++++++++ .../tests/triple_buffered_object_tests.c | 44 +++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 serial_link/protocol/triple_buffered_object.c create mode 100644 serial_link/protocol/triple_buffered_object.h create mode 100644 serial_link/tests/triple_buffered_object_tests.c diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c new file mode 100644 index 00000000000..f5600364f44 --- /dev/null +++ b/serial_link/protocol/triple_buffered_object.c @@ -0,0 +1,33 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "protocol/triple_buffered_object.h" + +void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src) { + memcpy(object->buffer, src, object_size); +} + +void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { + memcpy(dst, object->buffer, object_size); +} diff --git a/serial_link/protocol/triple_buffered_object.h b/serial_link/protocol/triple_buffered_object.h new file mode 100644 index 00000000000..ebdbcae7921 --- /dev/null +++ b/serial_link/protocol/triple_buffered_object.h @@ -0,0 +1,37 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef SERIAL_LINK_TRIPLE_BUFFERED_OBJECT_H +#define SERIAL_LINK_TRIPLE_BUFFERED_OBJECT_H + +typedef struct { + uint8_t state; + uint8_t buffer[]; +}triple_buffer_object_t; + +void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src); +void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst); + + +#endif diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c new file mode 100644 index 00000000000..66dcefa7f3c --- /dev/null +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -0,0 +1,44 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include "protocol/triple_buffered_object.c" + +Describe(TripleBufferedObject); +BeforeEach(TripleBufferedObject) {} +AfterEach(TripleBufferedObject) {} + +typedef struct { + uint8_t state; + uint32_t buffer[3]; +}test_object_t; + +Ensure(TripleBufferedObject, writes_and_and_reads_object) { + test_object_t test_object; + uint32_t src = 0x3456ABCC; + uint32_t dst; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); + assert_that(dst, is_equal_to(src)); +} From 4bb5733cdca62350c900ce094e1cbbaae59f2246 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Feb 2016 23:40:52 +0200 Subject: [PATCH 043/551] Updates to triple buffer --- serial_link/protocol/triple_buffered_object.c | 54 ++++++++++++++++++- .../tests/triple_buffered_object_tests.c | 48 ++++++++++++++--- 2 files changed, 94 insertions(+), 8 deletions(-) diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index f5600364f44..a82cef5a638 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -24,10 +24,60 @@ SOFTWARE. #include "protocol/triple_buffered_object.h" +#define GET_READ_INDEX() object->state & 3 +#define GET_WRITE1_INDEX() (object->state >> 2) & 3 +#define GET_WRITE2_INDEX() (object->state >> 4) & 3 +#define GET_FREE_INDEX() (object->state >> 6) & 3 + +#define SET_READ_INDEX(i) object->state = ((object->state & ~3) | i) +#define SET_WRITE1_INDEX(i) object->state = ((object->state & ~(3 << 2)) | (i << 2)) +#define SET_WRITE2_INDEX(i) object->state = ((object->state & ~(3 << 4)) | (i << 4)) +#define SET_FREE_INDEX(i) object->state = ((object->state & ~(3 << 6)) | (i << 6)) + +void triple_buffer_init(triple_buffer_object_t* object) { + object->state = 0; + SET_WRITE1_INDEX(0); + SET_WRITE2_INDEX(0); + SET_READ_INDEX(1); + SET_FREE_INDEX(2); +} + +static void triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_t* object) { + uint8_t newest = GET_WRITE2_INDEX(); + uint8_t free_index = GET_READ_INDEX(); + SET_READ_INDEX(newest); + SET_FREE_INDEX(free_index); +} + +static void triple_buffer_actual_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { + uint8_t read_index = GET_READ_INDEX(); + memcpy(dst, object->buffer + object_size*read_index, object_size); +} + +static void triple_buffer_end_read(uint16_t object_size, triple_buffer_object_t* object) { +} + void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src) { - memcpy(object->buffer, src, object_size); + uint8_t write1_index = GET_WRITE1_INDEX(); + uint8_t write2_index = GET_WRITE2_INDEX(); + uint8_t read_index = GET_READ_INDEX(); + uint8_t free_index = GET_FREE_INDEX(); + + if (write2_index == read_index) { + // We are reading from the other write index + SET_WRITE1_INDEX(free_index); + memcpy(object->buffer + object_size * free_index, src, object_size); + SET_WRITE2_INDEX(free_index); + } + else { + SET_WRITE1_INDEX(write2_index); + memcpy(object->buffer + object_size * write2_index, src, object_size); + SET_WRITE2_INDEX(write2_index); + } } void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { - memcpy(dst, object->buffer, object_size); + triple_buffer_begin_read(object_size, object); + triple_buffer_actual_read(object_size, object, dst); + triple_buffer_end_read(object_size, object); } diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c index 66dcefa7f3c..bf0e3ca67a3 100644 --- a/serial_link/tests/triple_buffered_object_tests.c +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -25,20 +25,56 @@ SOFTWARE. #include #include "protocol/triple_buffered_object.c" -Describe(TripleBufferedObject); -BeforeEach(TripleBufferedObject) {} -AfterEach(TripleBufferedObject) {} - typedef struct { uint8_t state; uint32_t buffer[3]; }test_object_t; -Ensure(TripleBufferedObject, writes_and_and_reads_object) { - test_object_t test_object; +test_object_t test_object; + +Describe(TripleBufferedObject); +BeforeEach(TripleBufferedObject) { + triple_buffer_init((triple_buffer_object_t*)&test_object); +} +AfterEach(TripleBufferedObject) {} + + +Ensure(TripleBufferedObject, writes_and_reads_object) { uint32_t src = 0x3456ABCC; uint32_t dst; triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); assert_that(dst, is_equal_to(src)); } + +Ensure(TripleBufferedObject, writes_and_reads_object_decomposed) { + uint32_t src = 0x3456ABCC; + uint32_t dst; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); + triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); + triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); + assert_that(dst, is_equal_to(src)); +} + +Ensure(TripleBufferedObject, writes_twice_and_reads_object) { + uint32_t src = 0x3456ABCC; + uint32_t dst; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + src = 0x44778899; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); + assert_that(dst, is_equal_to(src)); +} + +Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { + uint32_t src = 1; + uint32_t dst; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + src = 2; + triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); + triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); + assert_that(dst, is_equal_to(1)); +} From 8e2d70d11fd852cf6e33b48a027a5fba61c08779 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 00:44:25 +0200 Subject: [PATCH 044/551] Simplify the triple buffer implementation --- serial_link/protocol/triple_buffered_object.c | 46 ++++++++----------- .../tests/triple_buffered_object_tests.c | 18 ++++++++ 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index a82cef5a638..77e45ec412c 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -25,28 +25,28 @@ SOFTWARE. #include "protocol/triple_buffered_object.h" #define GET_READ_INDEX() object->state & 3 -#define GET_WRITE1_INDEX() (object->state >> 2) & 3 -#define GET_WRITE2_INDEX() (object->state >> 4) & 3 -#define GET_FREE_INDEX() (object->state >> 6) & 3 +#define GET_WRITE_INDEX() (object->state >> 2) & 3 +#define GET_SHARED_INDEX() (object->state >> 4) & 3 +#define GET_DATA_AVAILABLE() (object->state >> 6) & 1 #define SET_READ_INDEX(i) object->state = ((object->state & ~3) | i) -#define SET_WRITE1_INDEX(i) object->state = ((object->state & ~(3 << 2)) | (i << 2)) -#define SET_WRITE2_INDEX(i) object->state = ((object->state & ~(3 << 4)) | (i << 4)) -#define SET_FREE_INDEX(i) object->state = ((object->state & ~(3 << 6)) | (i << 6)) +#define SET_WRITE_INDEX(i) object->state = ((object->state & ~(3 << 2)) | (i << 2)) +#define SET_SHARED_INDEX(i) object->state = ((object->state & ~(3 << 4)) | (i << 4)) +#define SET_DATA_AVAILABLE(i) object->state = ((object->state & ~(1 << 6)) | (i << 6)) void triple_buffer_init(triple_buffer_object_t* object) { object->state = 0; - SET_WRITE1_INDEX(0); - SET_WRITE2_INDEX(0); + SET_WRITE_INDEX(0); SET_READ_INDEX(1); - SET_FREE_INDEX(2); + SET_SHARED_INDEX(2); + SET_DATA_AVAILABLE(0); } static void triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_t* object) { - uint8_t newest = GET_WRITE2_INDEX(); - uint8_t free_index = GET_READ_INDEX(); - SET_READ_INDEX(newest); - SET_FREE_INDEX(free_index); + uint8_t shared_index = GET_SHARED_INDEX(); + uint8_t read_index = GET_READ_INDEX(); + SET_READ_INDEX(shared_index); + SET_SHARED_INDEX(read_index); } static void triple_buffer_actual_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { @@ -58,22 +58,12 @@ static void triple_buffer_end_read(uint16_t object_size, triple_buffer_object_t* } void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src) { - uint8_t write1_index = GET_WRITE1_INDEX(); - uint8_t write2_index = GET_WRITE2_INDEX(); - uint8_t read_index = GET_READ_INDEX(); - uint8_t free_index = GET_FREE_INDEX(); - if (write2_index == read_index) { - // We are reading from the other write index - SET_WRITE1_INDEX(free_index); - memcpy(object->buffer + object_size * free_index, src, object_size); - SET_WRITE2_INDEX(free_index); - } - else { - SET_WRITE1_INDEX(write2_index); - memcpy(object->buffer + object_size * write2_index, src, object_size); - SET_WRITE2_INDEX(write2_index); - } + uint8_t write_index = GET_WRITE_INDEX(); + memcpy(object->buffer + object_size * write_index, src, object_size); + uint8_t shared_index = GET_SHARED_INDEX(); + SET_SHARED_INDEX(write_index); + SET_WRITE_INDEX(shared_index); } void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c index bf0e3ca67a3..5fa1b8b62fc 100644 --- a/serial_link/tests/triple_buffered_object_tests.c +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -77,4 +77,22 @@ Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); assert_that(dst, is_equal_to(1)); + triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); + assert_that(dst, is_equal_to(2)); +} + +Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { + uint32_t src = 1; + uint32_t dst; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); + src = 2; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + src = 3; + triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); + triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); + triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); + assert_that(dst, is_equal_to(1)); + triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); + assert_that(dst, is_equal_to(3)); } From b7059d35f90a7cc8b07944d78984afa832190bdc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 01:07:44 +0200 Subject: [PATCH 045/551] Working triple buffering --- serial_link/protocol/triple_buffered_object.c | 37 ++++++++++++++----- serial_link/protocol/triple_buffered_object.h | 3 +- serial_link/system/system.h | 36 ++++++++++++++++++ .../tests/triple_buffered_object_tests.c | 8 ++++ 4 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 serial_link/system/system.h diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index 77e45ec412c..3fabb7d84ba 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -23,6 +23,7 @@ SOFTWARE. */ #include "protocol/triple_buffered_object.h" +#include "system/system.h" #define GET_READ_INDEX() object->state & 3 #define GET_WRITE_INDEX() (object->state >> 2) & 3 @@ -42,11 +43,21 @@ void triple_buffer_init(triple_buffer_object_t* object) { SET_DATA_AVAILABLE(0); } -static void triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_t* object) { - uint8_t shared_index = GET_SHARED_INDEX(); - uint8_t read_index = GET_READ_INDEX(); - SET_READ_INDEX(shared_index); - SET_SHARED_INDEX(read_index); +static bool triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_t* object) { + serial_link_lock(); + if (GET_DATA_AVAILABLE()) { + uint8_t shared_index = GET_SHARED_INDEX(); + uint8_t read_index = GET_READ_INDEX(); + SET_READ_INDEX(shared_index); + SET_SHARED_INDEX(read_index); + SET_DATA_AVAILABLE(false); + serial_link_unlock(); + return true; + } + else { + serial_link_unlock(); + return false; + } } static void triple_buffer_actual_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { @@ -61,13 +72,21 @@ void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, v uint8_t write_index = GET_WRITE_INDEX(); memcpy(object->buffer + object_size * write_index, src, object_size); + serial_link_lock(); uint8_t shared_index = GET_SHARED_INDEX(); SET_SHARED_INDEX(write_index); SET_WRITE_INDEX(shared_index); + SET_DATA_AVAILABLE(true); + serial_link_unlock(); } -void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { - triple_buffer_begin_read(object_size, object); - triple_buffer_actual_read(object_size, object, dst); - triple_buffer_end_read(object_size, object); +bool triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { + if (triple_buffer_begin_read(object_size, object)) { + triple_buffer_actual_read(object_size, object, dst); + triple_buffer_end_read(object_size, object); + return true; + } + else { + return false; + } } diff --git a/serial_link/protocol/triple_buffered_object.h b/serial_link/protocol/triple_buffered_object.h index ebdbcae7921..705f0c49f9a 100644 --- a/serial_link/protocol/triple_buffered_object.h +++ b/serial_link/protocol/triple_buffered_object.h @@ -30,8 +30,9 @@ typedef struct { uint8_t buffer[]; }triple_buffer_object_t; +void triple_buffer_init(triple_buffer_object_t* object); void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src); -void triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst); +bool triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst); #endif diff --git a/serial_link/system/system.h b/serial_link/system/system.h new file mode 100644 index 00000000000..c798e647746 --- /dev/null +++ b/serial_link/system/system.h @@ -0,0 +1,36 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef SERIAL_LINK_SYSTEM_H +#define SERIAL_LINK_SYSTEM_H + +void serial_link_lock() { + +} + +void serial_link_unlock() { + +} + +#endif diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c index 5fa1b8b62fc..cd3ecb6a228 100644 --- a/serial_link/tests/triple_buffered_object_tests.c +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -47,6 +47,12 @@ Ensure(TripleBufferedObject, writes_and_reads_object) { assert_that(dst, is_equal_to(src)); } +Ensure(TripleBufferedObject, does_not_read_empty) { + uint32_t dst; + bool res = triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); + assert_that(res, is_equal_to(false)); +} + Ensure(TripleBufferedObject, writes_and_reads_object_decomposed) { uint32_t src = 0x3456ABCC; uint32_t dst; @@ -79,6 +85,7 @@ Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { assert_that(dst, is_equal_to(1)); triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); assert_that(dst, is_equal_to(2)); + assert_that(triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst), is_equal_to(false)); } Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { @@ -95,4 +102,5 @@ Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { assert_that(dst, is_equal_to(1)); triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); assert_that(dst, is_equal_to(3)); + assert_that(triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst), is_equal_to(false)); } From 4ee6eadf9e88b89f017c3c06e2d376cf953f6a42 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 12:53:51 +0200 Subject: [PATCH 046/551] Local and remote objects WIP --- serial_link/protocol/transport.h | 67 +++++++++++++++++++ serial_link/protocol/triple_buffered_object.h | 2 +- serial_link/tests/transport_tests.c | 26 +++++++ 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index 01119857d36..6f2cf277fb2 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -22,6 +22,73 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef SERIAL_LINK_TRANSPORT_H +#define SERIAL_LINK_TRANSPORT_H + +#include "protocol/triple_buffered_object.h" + +#define NUM_SLAVES 8 + +typedef struct { + uint16_t element_size; + uint16_t buffer_size; + uint8_t is_master; + uint8_t buffer[] __attribute__((aligned(4))); +} remote_object_t; + +typedef struct { + uint16_t element_size; + uint8_t destination; + uint8_t buffer[] __attribute__((aligned(4))); +} local_object_t; + +#define REMOTE_OBJECT_BUFFER(id, type) \ +typedef struct { \ + triple_buffer_object_t object; \ + type buffer[3]; \ +} remote_object_buffer_##id##_t; + +#define MASTER_REMOTE_OBJECT(id, type) \ +REMOTE_OBJECT_BUFFER(id, type) \ +typedef struct { \ + remote_object_t object; \ + remote_object_buffer_##id##_t buffer; \ +} master_remote_object_##id##_t; \ +master_remote_object_##id##_t remote_object_##id = { \ + .object = { \ + .element_size = sizeof(type), \ + .buffer_size = sizeof(remote_object_buffer_##id##_t), \ + .is_master = true \ + }}; + +#define SLAVE_REMOTE_OBJECT(id, type) \ +REMOTE_OBJECT_BUFFER(id, type) \ +typedef struct { \ + remote_object_t object; \ + remote_object_buffer_##id##_t buffer[NUM_SLAVES];\ +} slave_remote_object_##id##_t; \ +slave_remote_object_##id##_t remote_object_##id = { \ + .object = { \ + .element_size = sizeof(type), \ + .buffer_size = sizeof(remote_object_buffer_##id##_t), \ + .is_master = true \ + }}; + +#define LOCAL_OBJECT(id, type) \ +typedef struct { \ + uint32_t element_size; \ + uint8_t buffer[NUM_SLAVES][sizeof(type) + 16][3]; \ +} remote_object_##id##_t; \ +remote_object_##id##_t remote_object_##id = {.element_size = sizeof(type) + 16}; + +#define REMOTE_OBJECT(id) (remote_object_t*)&remote_object_##id + + void init_transport(void); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size); + +void transport_register_master_remote_object(uint8_t id, void* ptr, uint16_t size); +void transport_register_slave_remote_object(uint8_t id, void* ptr, uint16_t size); + +#endif diff --git a/serial_link/protocol/triple_buffered_object.h b/serial_link/protocol/triple_buffered_object.h index 705f0c49f9a..d224f36a2e2 100644 --- a/serial_link/protocol/triple_buffered_object.h +++ b/serial_link/protocol/triple_buffered_object.h @@ -27,7 +27,7 @@ SOFTWARE. typedef struct { uint8_t state; - uint8_t buffer[]; + uint8_t buffer[] __attribute__((aligned(4))); }triple_buffer_object_t; void triple_buffer_init(triple_buffer_object_t* object); diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index a64e7446d81..f9f5b477370 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -25,6 +25,32 @@ SOFTWARE. #include #include "protocol/transport.c" +typedef struct { + uint32_t test; +} test_object1_t; + +typedef struct { + uint32_t test1; + uint32_t test2; +} test_object2_t; + +MASTER_REMOTE_OBJECT(0, test_object1_t); +SLAVE_REMOTE_OBJECT(1, test_object1_t); +MASTER_REMOTE_OBJECT(2, test_object2_t); +SLAVE_REMOTE_OBJECT(3, test_object2_t); + +// We want +// master -> slave = 1 local(target all), 1 remote object +// slave -> master = 1 local(target 0), multiple remote objects +// master -> single slave (multiple local, target id), 1 remote object + +remote_object_t* remote_objects[] = { + REMOTE_OBJECT(0), + REMOTE_OBJECT(1), + REMOTE_OBJECT(2), + REMOTE_OBJECT(3), +}; + Describe(Transport); BeforeEach(Transport) { init_transport(); From 679bfe7c5452f69a790e648c7661bbbdb12ce4ae Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 17:33:31 +0200 Subject: [PATCH 047/551] More transport WIP --- serial_link/protocol/transport.c | 9 +-- serial_link/protocol/transport.h | 91 +++++++++++++++-------------- serial_link/tests/transport_tests.c | 29 +++------ 3 files changed, 61 insertions(+), 68 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index 399894ff980..7b2c1495041 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -24,10 +24,12 @@ SOFTWARE. #include "protocol/transport.h" -static uint32_t current_send_frame; +static remote_object_t* remote_objects; +static uint32_t num_remote_objects; -void init_transport(void) { - current_send_frame = 0; +void init_transport(remote_object_t* _remote_objects, uint32_t _num_remote_objects) { + remote_objects = _remote_objects; + num_remote_objects = _num_remote_objects; } void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { @@ -35,5 +37,4 @@ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { } uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size) { - return ++current_send_frame; } diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index 6f2cf277fb2..86086b8b8eb 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -28,63 +28,66 @@ SOFTWARE. #include "protocol/triple_buffered_object.h" #define NUM_SLAVES 8 +#define LOCAL_OBJECT_EXTRA 16 + +// master -> slave = 1 local(target all), 1 remote object +// slave -> master = 1 local(target 0), multiple remote objects +// master -> single slave (multiple local, target id), 1 remote object +typedef enum { + MASTER_TO_ALL_SLAVES, + MASTER_TO_SINGLE_SLAVE, + SLAVE_TO_MASTER, +} remote_object_type; typedef struct { - uint16_t element_size; - uint16_t buffer_size; - uint8_t is_master; + remote_object_type object_type; + uint16_t object_size; uint8_t buffer[] __attribute__((aligned(4))); } remote_object_t; -typedef struct { - uint16_t element_size; - uint8_t destination; - uint8_t buffer[] __attribute__((aligned(4))); -} local_object_t; +#define REMOTE_OBJECT_SIZE(objectsize) \ + (sizeof(triple_buffer_object_t) + objectsize * 3) +#define LOCAL_OBJECT_SIZE(objectsize) \ + (sizeof(triple_buffer_object_t) + (objectsize + LOCAL_OBJECT_EXTRA) * 3) -#define REMOTE_OBJECT_BUFFER(id, type) \ -typedef struct { \ - triple_buffer_object_t object; \ - type buffer[3]; \ -} remote_object_buffer_##id##_t; - -#define MASTER_REMOTE_OBJECT(id, type) \ -REMOTE_OBJECT_BUFFER(id, type) \ +#define REMOTE_OBJECT_HELPER(name, type, num_local, num_remote) \ typedef struct { \ remote_object_t object; \ - remote_object_buffer_##id##_t buffer; \ -} master_remote_object_##id##_t; \ -master_remote_object_##id##_t remote_object_##id = { \ - .object = { \ - .element_size = sizeof(type), \ - .buffer_size = sizeof(remote_object_buffer_##id##_t), \ - .is_master = true \ - }}; + uint8_t buffer[ \ + num_remote * REMOTE_OBJECT_SIZE(sizeof(type)) + \ + num_local * LOCAL_OBJECT_SIZE(sizeof(type))]; \ +} remote_object_##name##_t; -#define SLAVE_REMOTE_OBJECT(id, type) \ -REMOTE_OBJECT_BUFFER(id, type) \ -typedef struct { \ - remote_object_t object; \ - remote_object_buffer_##id##_t buffer[NUM_SLAVES];\ -} slave_remote_object_##id##_t; \ -slave_remote_object_##id##_t remote_object_##id = { \ - .object = { \ - .element_size = sizeof(type), \ - .buffer_size = sizeof(remote_object_buffer_##id##_t), \ - .is_master = true \ - }}; +#define MASTER_TO_ALL_SLAVES_OBJECT(name, type) \ + REMOTE_OBJECT_HELPER(name, type, 1, 1) \ + remote_object_##name##_t remote_object_##name = { \ + .object = { \ + .object_type = MASTER_TO_ALL_SLAVES, \ + .object_size = sizeof(type), \ + } \ + }; -#define LOCAL_OBJECT(id, type) \ -typedef struct { \ - uint32_t element_size; \ - uint8_t buffer[NUM_SLAVES][sizeof(type) + 16][3]; \ -} remote_object_##id##_t; \ -remote_object_##id##_t remote_object_##id = {.element_size = sizeof(type) + 16}; +#define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \ + REMOTE_OBJECT_HELPER(name, type, NUM_SLAVES, 1) \ + remote_object_##name##_t remote_object_##name = { \ + .object = { \ + .object_type = MASTER_TO_SINGLE_SLAVE, \ + .object_size = sizeof(type), \ + } \ + }; -#define REMOTE_OBJECT(id) (remote_object_t*)&remote_object_##id +#define SLAVE_TO_MASTER_OBJECT(name, type) \ + REMOTE_OBJECT_HELPER(name, type, 1, NUM_SLAVES) \ + remote_object_##name##_t remote_object_##name = { \ + .object = { \ + .object_type = SLAVE_TO_MASTER, \ + .object_size = sizeof(type), \ + } \ + }; +#define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name -void init_transport(void); +void init_transport(remote_object_t* remote_objects, uint32_t num_remote_objects); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size); diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index f9f5b477370..31e7b2dc7e3 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -34,32 +34,21 @@ typedef struct { uint32_t test2; } test_object2_t; -MASTER_REMOTE_OBJECT(0, test_object1_t); -SLAVE_REMOTE_OBJECT(1, test_object1_t); -MASTER_REMOTE_OBJECT(2, test_object2_t); -SLAVE_REMOTE_OBJECT(3, test_object2_t); +MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1_t); +MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1_t); +SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t); -// We want -// master -> slave = 1 local(target all), 1 remote object -// slave -> master = 1 local(target 0), multiple remote objects -// master -> single slave (multiple local, target id), 1 remote object - -remote_object_t* remote_objects[] = { - REMOTE_OBJECT(0), - REMOTE_OBJECT(1), - REMOTE_OBJECT(2), - REMOTE_OBJECT(3), +remote_object_t* test_remote_objects[] = { + REMOTE_OBJECT(master_to_slave), + REMOTE_OBJECT(master_to_single_slave), + REMOTE_OBJECT(slave_to_master), }; Describe(Transport); BeforeEach(Transport) { - init_transport(); + init_transport(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t)); } AfterEach(Transport) {} -Ensure(Transport, packet_number_is_sequential) { - assert_that(transport_send_frame(0, NULL, 0), is_equal_to(1)); - assert_that(transport_send_frame(0, NULL, 0), is_equal_to(2)); - // It doesn't matter if the destination changes - assert_that(transport_send_frame(1, NULL, 0), is_equal_to(3)); +Ensure(Transport, write_to_local_signals_an_event) { } From 2710361cd818aae6dd349fa433ebff365908de06 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 18:30:04 +0200 Subject: [PATCH 048/551] Change the triple buffer object interface --- serial_link/protocol/triple_buffered_object.c | 34 +++----- serial_link/protocol/triple_buffered_object.h | 15 +++- .../tests/triple_buffered_object_tests.c | 78 +++++++------------ 3 files changed, 49 insertions(+), 78 deletions(-) diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index 3fabb7d84ba..6b3cf75adf5 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -43,7 +43,7 @@ void triple_buffer_init(triple_buffer_object_t* object) { SET_DATA_AVAILABLE(0); } -static bool triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_t* object) { +void* triple_buffer_read_internal(uint16_t object_size, triple_buffer_object_t* object) { serial_link_lock(); if (GET_DATA_AVAILABLE()) { uint8_t shared_index = GET_SHARED_INDEX(); @@ -52,41 +52,25 @@ static bool triple_buffer_begin_read(uint16_t object_size, triple_buffer_object_ SET_SHARED_INDEX(read_index); SET_DATA_AVAILABLE(false); serial_link_unlock(); - return true; + return object->buffer + object_size * shared_index; } else { serial_link_unlock(); - return false; + return NULL; } } -static void triple_buffer_actual_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { - uint8_t read_index = GET_READ_INDEX(); - memcpy(dst, object->buffer + object_size*read_index, object_size); -} - -static void triple_buffer_end_read(uint16_t object_size, triple_buffer_object_t* object) { -} - -void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src) { - +void* triple_buffer_begin_write_internal(uint16_t object_size, triple_buffer_object_t* object) { uint8_t write_index = GET_WRITE_INDEX(); - memcpy(object->buffer + object_size * write_index, src, object_size); + return object->buffer + object_size * write_index; +} + +void triple_buffer_end_write_internal(triple_buffer_object_t* object) { serial_link_lock(); uint8_t shared_index = GET_SHARED_INDEX(); + uint8_t write_index = GET_WRITE_INDEX(); SET_SHARED_INDEX(write_index); SET_WRITE_INDEX(shared_index); SET_DATA_AVAILABLE(true); serial_link_unlock(); } - -bool triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst) { - if (triple_buffer_begin_read(object_size, object)) { - triple_buffer_actual_read(object_size, object, dst); - triple_buffer_end_read(object_size, object); - return true; - } - else { - return false; - } -} diff --git a/serial_link/protocol/triple_buffered_object.h b/serial_link/protocol/triple_buffered_object.h index d224f36a2e2..03209709cbc 100644 --- a/serial_link/protocol/triple_buffered_object.h +++ b/serial_link/protocol/triple_buffered_object.h @@ -31,8 +31,19 @@ typedef struct { }triple_buffer_object_t; void triple_buffer_init(triple_buffer_object_t* object); -void triple_buffer_write(uint16_t object_size, triple_buffer_object_t* object, void* src); -bool triple_buffer_read(uint16_t object_size, triple_buffer_object_t* object, void* dst); + +#define triple_buffer_begin_write(object) \ + (typeof(*object.buffer[0])*)triple_buffer_begin_write_internal(sizeof(*object.buffer[0]), (triple_buffer_object_t*)object) + +#define triple_buffer_end_write(object) \ + triple_buffer_end_write_internal((triple_buffer_object_t*)object) + +#define triple_buffer_read(object) \ + (typeof(*object.buffer[0])*)triple_buffer_read_internal(sizeof(*object.buffer[0]), (triple_buffer_object_t*)object) + +void* triple_buffer_begin_write_internal(uint16_t object_size, triple_buffer_object_t* object); +void triple_buffer_end_write_internal(triple_buffer_object_t* object); +void* triple_buffer_read_internal(uint16_t object_size, triple_buffer_object_t* object); #endif diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c index cd3ecb6a228..1017df8f5ef 100644 --- a/serial_link/tests/triple_buffered_object_tests.c +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -40,67 +40,43 @@ AfterEach(TripleBufferedObject) {} Ensure(TripleBufferedObject, writes_and_reads_object) { - uint32_t src = 0x3456ABCC; - uint32_t dst; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); - assert_that(dst, is_equal_to(src)); + *triple_buffer_begin_write(&test_object) = 0x3456ABCC; + triple_buffer_end_write(&test_object); + assert_that(*triple_buffer_read(&test_object), is_equal_to(0x3456ABCC)); } Ensure(TripleBufferedObject, does_not_read_empty) { - uint32_t dst; - bool res = triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); - assert_that(res, is_equal_to(false)); -} - -Ensure(TripleBufferedObject, writes_and_reads_object_decomposed) { - uint32_t src = 0x3456ABCC; - uint32_t dst; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); - triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); - triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); - assert_that(dst, is_equal_to(src)); + assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); } Ensure(TripleBufferedObject, writes_twice_and_reads_object) { - uint32_t src = 0x3456ABCC; - uint32_t dst; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - src = 0x44778899; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); - assert_that(dst, is_equal_to(src)); + *triple_buffer_begin_write(&test_object) = 0x3456ABCC; + triple_buffer_end_write(&test_object); + *triple_buffer_begin_write(&test_object) = 0x44778899; + triple_buffer_end_write(&test_object); + assert_that(*triple_buffer_read(&test_object), is_equal_to(0x44778899)); } Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) { - uint32_t src = 1; - uint32_t dst; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - src = 2; - triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); - triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); - assert_that(dst, is_equal_to(1)); - triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); - assert_that(dst, is_equal_to(2)); - assert_that(triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst), is_equal_to(false)); + *triple_buffer_begin_write(&test_object) = 1; + triple_buffer_end_write(&test_object); + uint32_t* read = triple_buffer_read(&test_object); + *triple_buffer_begin_write(&test_object) = 2; + triple_buffer_end_write(&test_object); + assert_that(*read, is_equal_to(1)); + assert_that(*triple_buffer_read(&test_object), is_equal_to(2)); + assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); } Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) { - uint32_t src = 1; - uint32_t dst; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object); - src = 2; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - src = 3; - triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src); - triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst); - triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object); - assert_that(dst, is_equal_to(1)); - triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst); - assert_that(dst, is_equal_to(3)); - assert_that(triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst), is_equal_to(false)); + *triple_buffer_begin_write(&test_object) = 1; + triple_buffer_end_write(&test_object); + uint32_t* read = triple_buffer_read(&test_object); + *triple_buffer_begin_write(&test_object) = 2; + triple_buffer_end_write(&test_object); + *triple_buffer_begin_write(&test_object) = 3; + triple_buffer_end_write(&test_object); + assert_that(*read, is_equal_to(1)); + assert_that(*triple_buffer_read(&test_object), is_equal_to(3)); + assert_that(triple_buffer_read(&test_object), is_equal_to(NULL)); } From fe1db50fc32c13bb1030676b1381125398bce5de Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 18:51:10 +0200 Subject: [PATCH 049/551] Writing signals events --- serial_link/protocol/transport.h | 22 +++++++++++++++++++--- serial_link/system/system.h | 4 ++-- serial_link/tests/transport_tests.c | 14 ++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index 86086b8b8eb..c4c52947b27 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -26,6 +26,7 @@ SOFTWARE. #define SERIAL_LINK_TRANSPORT_H #include "protocol/triple_buffered_object.h" +#include "system/system.h" #define NUM_SLAVES 8 #define LOCAL_OBJECT_EXTRA 16 @@ -65,7 +66,12 @@ typedef struct { \ .object_type = MASTER_TO_ALL_SLAVES, \ .object_size = sizeof(type), \ } \ - }; + }; \ + type* begin_write_##name(void) { \ + }\ + void end_write_##name(void) { \ + signal_data_written(); \ + } #define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \ REMOTE_OBJECT_HELPER(name, type, NUM_SLAVES, 1) \ @@ -74,7 +80,12 @@ typedef struct { \ .object_type = MASTER_TO_SINGLE_SLAVE, \ .object_size = sizeof(type), \ } \ - }; + }; \ + type* begin_write_##name(uint8_t slave) { \ + }\ + void end_write_##name(uint8_t slave) { \ + signal_data_written(); \ + } #define SLAVE_TO_MASTER_OBJECT(name, type) \ REMOTE_OBJECT_HELPER(name, type, 1, NUM_SLAVES) \ @@ -83,7 +94,12 @@ typedef struct { \ .object_type = SLAVE_TO_MASTER, \ .object_size = sizeof(type), \ } \ - }; + }; \ + type* begin_write_##name(void) { \ + }\ + void end_write_##name(void) { \ + signal_data_written(); \ + } #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name diff --git a/serial_link/system/system.h b/serial_link/system/system.h index c798e647746..163349953df 100644 --- a/serial_link/system/system.h +++ b/serial_link/system/system.h @@ -26,11 +26,11 @@ SOFTWARE. #define SERIAL_LINK_SYSTEM_H void serial_link_lock() { - } void serial_link_unlock() { - } +void signal_data_written(void); + #endif diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 31e7b2dc7e3..61b9a650802 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -23,8 +23,13 @@ SOFTWARE. */ #include +#include #include "protocol/transport.c" +void signal_data_written(void) { + mock(); +} + typedef struct { uint32_t test; } test_object1_t; @@ -51,4 +56,13 @@ BeforeEach(Transport) { AfterEach(Transport) {} Ensure(Transport, write_to_local_signals_an_event) { + begin_write_master_to_slave(); + expect(signal_data_written); + end_write_master_to_slave(); + begin_write_slave_to_master(); + expect(signal_data_written); + end_write_slave_to_master(); + begin_write_master_to_single_slave(1); + expect(signal_data_written); + end_write_master_to_single_slave(1); } From 415ab91c9d2ed034bbbabf3cbb8502f525b91abb Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 21:04:42 +0200 Subject: [PATCH 050/551] Add master to slave transport --- serial_link/protocol/transport.c | 31 ++++++++++++++++++++++++++--- serial_link/protocol/transport.h | 18 +++++++++++++---- serial_link/tests/transport_tests.c | 28 +++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 8 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index 7b2c1495041..55dae9fa220 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -23,18 +23,43 @@ SOFTWARE. */ #include "protocol/transport.h" +#include "protocol/frame_router.h" +#include "protocol/triple_buffered_object.h" -static remote_object_t* remote_objects; +static remote_object_t** remote_objects; static uint32_t num_remote_objects; -void init_transport(remote_object_t* _remote_objects, uint32_t _num_remote_objects) { +void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { remote_objects = _remote_objects; num_remote_objects = _num_remote_objects; } void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { - + uint8_t id = data[size-1]; + remote_object_t* obj = remote_objects[id]; + if (obj->object_type == MASTER_TO_ALL_SLAVES) { + uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); + memcpy(ptr, data, size -1); + triple_buffer_end_write_internal(tb); + } } uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size) { } + +void update_transport(void) { + int i; + for(i=0;iobject_type == MASTER_TO_ALL_SLAVES) { + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; + uint8_t* ptr = (uint8_t*)triple_buffer_read_internal(obj->object_size + LOCAL_OBJECT_EXTRA, tb); + if (ptr) { + ptr[obj->object_size] = i; + router_send_frame(0xFF, ptr, obj->object_size + 1); + } + } + } +} diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index c4c52947b27..fa2e00d2d33 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -68,9 +68,21 @@ typedef struct { \ } \ }; \ type* begin_write_##name(void) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; \ + return (type*)triple_buffer_begin_write_internal(sizeof(type) + LOCAL_OBJECT_EXTRA, tb); \ }\ void end_write_##name(void) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; \ + triple_buffer_end_write_internal(tb); \ signal_data_written(); \ + }\ + type* read_##name(void) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\ + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ + return triple_buffer_read_internal(obj->object_size, tb); \ } #define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \ @@ -103,11 +115,9 @@ typedef struct { \ #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name -void init_transport(remote_object_t* remote_objects, uint32_t num_remote_objects); +void init_transport(remote_object_t** remote_objects, uint32_t num_remote_objects); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size); - -void transport_register_master_remote_object(uint8_t id, void* ptr, uint16_t size); -void transport_register_slave_remote_object(uint8_t id, void* ptr, uint16_t size); +void update_transport(void); #endif diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 61b9a650802..34d451de4d2 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -25,11 +25,21 @@ SOFTWARE. #include #include #include "protocol/transport.c" +#include "protocol/triple_buffered_object.c" void signal_data_written(void) { mock(); } +static uint8_t sent_data[2048]; +static uint16_t sent_data_size; + +void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) { + mock(destination); + memcpy(sent_data + sent_data_size, data, size); + sent_data_size += size; +} + typedef struct { uint32_t test; } test_object1_t; @@ -51,7 +61,8 @@ remote_object_t* test_remote_objects[] = { Describe(Transport); BeforeEach(Transport) { - init_transport(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t)); + init_transport(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*)); + sent_data_size = 0; } AfterEach(Transport) {} @@ -66,3 +77,18 @@ Ensure(Transport, write_to_local_signals_an_event) { expect(signal_data_written); end_write_master_to_single_slave(1); } + +Ensure(Transport, writes_from_master_to_all_slaves) { + update_transport(); + test_object1_t* obj = begin_write_master_to_slave(); + obj->test = 5; + expect(signal_data_written); + end_write_master_to_slave(); + expect(router_send_frame, + when(destination, is_equal_to(0xFF))); + update_transport(); + transport_recv_frame(0, sent_data, sent_data_size); + test_object1_t* obj2 = read_master_to_slave(); + assert_that(obj2, is_not_equal_to(NULL)); + assert_that(obj2->test, is_equal_to(5)); +} From 64b7efeb72ff67d088641bda798226e619601a43 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 21:15:42 +0200 Subject: [PATCH 051/551] Add proper initialization of transport buffers --- serial_link/protocol/transport.c | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index 55dae9fa220..c4019d7fed8 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -32,6 +32,40 @@ static uint32_t num_remote_objects; void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { remote_objects = _remote_objects; num_remote_objects = _num_remote_objects; + int i; + for(i=0;iobject_type == MASTER_TO_ALL_SLAVES) { + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; + triple_buffer_init(tb); + uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + tb = (triple_buffer_object_t*)start; + triple_buffer_init(tb); + } + else if(obj->object_type == MASTER_TO_SINGLE_SLAVE) { + uint8_t* start = obj->buffer; + int j; + for (j=0;jobject_size); + } + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + triple_buffer_init(tb); + } + else { + uint8_t* start = obj->buffer; + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + triple_buffer_init(tb); + start += LOCAL_OBJECT_SIZE(obj->object_size); + int j; + for (j=0;jobject_size); + } + } + } } void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { From 7b88b8b7e1fd50b1fc2a219c734a3069576bcbe2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 21:32:01 +0200 Subject: [PATCH 052/551] Add slave to master transport --- serial_link/protocol/transport.c | 20 +++++++++++++------- serial_link/protocol/transport.h | 13 +++++++++++++ serial_link/tests/transport_tests.c | 16 ++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index c4019d7fed8..e49e9d69d9b 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -71,13 +71,18 @@ void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_obje void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { uint8_t id = data[size-1]; remote_object_t* obj = remote_objects[id]; + uint8_t* start; if (obj->object_type == MASTER_TO_ALL_SLAVES) { - uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); - triple_buffer_object_t* tb = (triple_buffer_object_t*)start; - void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); - memcpy(ptr, data, size -1); - triple_buffer_end_write_internal(tb); + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); } + else if(obj->object_type == SLAVE_TO_MASTER) { + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); + } + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); + memcpy(ptr, data, size -1); + triple_buffer_end_write_internal(tb); } uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size) { @@ -87,12 +92,13 @@ void update_transport(void) { int i; for(i=0;iobject_type == MASTER_TO_ALL_SLAVES) { + if (obj->object_type == MASTER_TO_ALL_SLAVES || obj->object_type == SLAVE_TO_MASTER) { triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; uint8_t* ptr = (uint8_t*)triple_buffer_read_internal(obj->object_size + LOCAL_OBJECT_EXTRA, tb); if (ptr) { ptr[obj->object_size] = i; - router_send_frame(0xFF, ptr, obj->object_size + 1); + uint8_t dest = obj->object_type == MASTER_TO_ALL_SLAVES ? 0xFF : 0; + router_send_frame(dest, ptr, obj->object_size + 1); } } } diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index fa2e00d2d33..94ff85312ab 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -108,9 +108,22 @@ typedef struct { \ } \ }; \ type* begin_write_##name(void) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; \ + return (type*)triple_buffer_begin_write_internal(sizeof(type) + LOCAL_OBJECT_EXTRA, tb); \ }\ void end_write_##name(void) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; \ + triple_buffer_end_write_internal(tb); \ signal_data_written(); \ + }\ + type* read_##name(uint8_t slave) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\ + start+=slave * REMOTE_OBJECT_SIZE(obj->object_size); \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ + return triple_buffer_read_internal(obj->object_size, tb); \ } #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 34d451de4d2..334827507a0 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -92,3 +92,19 @@ Ensure(Transport, writes_from_master_to_all_slaves) { assert_that(obj2, is_not_equal_to(NULL)); assert_that(obj2->test, is_equal_to(5)); } + +Ensure(Transport, writes_from_slave_to_master) { + update_transport(); + test_object1_t* obj = begin_write_slave_to_master(); + obj->test = 7; + expect(signal_data_written); + end_write_slave_to_master(); + expect(router_send_frame, + when(destination, is_equal_to(0))); + update_transport(); + transport_recv_frame(3, sent_data, sent_data_size); + test_object1_t* obj2 = read_slave_to_master(2); + assert_that(read_slave_to_master(0), is_equal_to(NULL)); + assert_that(obj2, is_not_equal_to(NULL)); + assert_that(obj2->test, is_equal_to(7)); +} From 8cbfe79dd9ce2e8113a0f99e15d6ae4d3176b545 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 21:47:40 +0200 Subject: [PATCH 053/551] Add master to single slave transport --- serial_link/protocol/transport.c | 17 +++++++++++++++++ serial_link/protocol/transport.h | 16 ++++++++++++++++ serial_link/tests/transport_tests.c | 15 +++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index e49e9d69d9b..03f83a8068c 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -79,6 +79,9 @@ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); } + else { + start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size); + } triple_buffer_object_t* tb = (triple_buffer_object_t*)start; void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); memcpy(ptr, data, size -1); @@ -101,5 +104,19 @@ void update_transport(void) { router_send_frame(dest, ptr, obj->object_size + 1); } } + else { + uint8_t* start = obj->buffer; + int j; + for (j=0;jobject_size + LOCAL_OBJECT_EXTRA, tb); + if (ptr) { + ptr[obj->object_size] = i; + uint8_t dest = j + 1; + router_send_frame(dest, ptr, obj->object_size + 1); + } + start += LOCAL_OBJECT_SIZE(obj->object_size); + } + } } } diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index 94ff85312ab..a1a83b8f76c 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -94,9 +94,25 @@ typedef struct { \ } \ }; \ type* begin_write_##name(uint8_t slave) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + uint8_t* start = obj->buffer;\ + start += slave * LOCAL_OBJECT_SIZE(obj->object_size); \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ + return (type*)triple_buffer_begin_write_internal(sizeof(type) + LOCAL_OBJECT_EXTRA, tb); \ }\ void end_write_##name(uint8_t slave) { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + uint8_t* start = obj->buffer;\ + start += slave * LOCAL_OBJECT_SIZE(obj->object_size); \ + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ + triple_buffer_end_write_internal(tb); \ signal_data_written(); \ + }\ + type* read_##name() { \ + remote_object_t* obj = (remote_object_t*)&remote_object_##name; \ + uint8_t* start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size);\ + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \ + return triple_buffer_read_internal(obj->object_size, tb); \ } #define SLAVE_TO_MASTER_OBJECT(name, type) \ diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 334827507a0..3fa8eab4ac8 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -108,3 +108,18 @@ Ensure(Transport, writes_from_slave_to_master) { assert_that(obj2, is_not_equal_to(NULL)); assert_that(obj2->test, is_equal_to(7)); } + +Ensure(Transport, writes_from_master_to_single_slave) { + update_transport(); + test_object1_t* obj = begin_write_master_to_single_slave(3); + obj->test = 7; + expect(signal_data_written); + end_write_master_to_single_slave(3); + expect(router_send_frame, + when(destination, is_equal_to(4))); + update_transport(); + transport_recv_frame(0, sent_data, sent_data_size); + test_object1_t* obj2 = read_master_to_single_slave(); + assert_that(obj2, is_not_equal_to(NULL)); + assert_that(obj2->test, is_equal_to(7)); +} From 6873b17117a41715c9a8ca63060974b64b4cdcf4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 23:17:59 +0200 Subject: [PATCH 054/551] Support for Chibios compilation Remove some warnings, change the include paths. --- serial_link.mk | 3 ++- serial_link/protocol/byte_stuffer.c | 8 ++++---- serial_link/protocol/byte_stuffer.h | 7 +++++++ serial_link/protocol/frame_router.c | 5 +++-- serial_link/protocol/frame_router.h | 8 ++++++++ serial_link/protocol/frame_validator.c | 7 ++++--- serial_link/protocol/frame_validator.h | 7 +++++++ serial_link/protocol/physical.h | 5 +++++ serial_link/protocol/transport.c | 20 +++++++++---------- serial_link/protocol/transport.h | 5 ++--- serial_link/protocol/triple_buffered_object.c | 6 ++++-- serial_link/protocol/triple_buffered_object.h | 2 ++ serial_link/system/system.h | 12 ++++++++--- serial_link/tests/Makefile | 2 +- serial_link/tests/byte_stuffer_tests.c | 8 ++++---- serial_link/tests/frame_router_tests.c | 8 ++++---- serial_link/tests/frame_validator_tests.c | 2 +- serial_link/tests/transport_tests.c | 4 ++-- .../tests/triple_buffered_object_tests.c | 2 +- 19 files changed, 79 insertions(+), 42 deletions(-) diff --git a/serial_link.mk b/serial_link.mk index de2364108a3..e8915a33f96 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -20,4 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -INC += $(SERIAL_DIR) \ No newline at end of file +INC += $(SERIAL_DIR) +SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) \ No newline at end of file diff --git a/serial_link/protocol/byte_stuffer.c b/serial_link/protocol/byte_stuffer.c index 8b529667fd1..fb4c45a8dc0 100644 --- a/serial_link/protocol/byte_stuffer.c +++ b/serial_link/protocol/byte_stuffer.c @@ -22,10 +22,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/byte_stuffer.h" -#include "protocol/frame_validator.h" -#include "protocol/physical.h" -#include +#include "serial_link/protocol/byte_stuffer.h" +#include "serial_link/protocol/frame_validator.h" +#include "serial_link/protocol/physical.h" +#include // This implements the "Consistent overhead byte stuffing protocol" // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing diff --git a/serial_link/protocol/byte_stuffer.h b/serial_link/protocol/byte_stuffer.h index 839a876fe81..2cc88beb42a 100644 --- a/serial_link/protocol/byte_stuffer.h +++ b/serial_link/protocol/byte_stuffer.h @@ -22,6 +22,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef SERIAL_LINK_BYTE_STUFFER_H +#define SERIAL_LINK_BYTE_STUFFER_H + +#include + void init_byte_stuffer(void); void byte_stuffer_recv_byte(uint8_t link, uint8_t data); void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size); + +#endif diff --git a/serial_link/protocol/frame_router.c b/serial_link/protocol/frame_router.c index 890ebbe9ea3..04b8c2e75ca 100644 --- a/serial_link/protocol/frame_router.c +++ b/serial_link/protocol/frame_router.c @@ -22,8 +22,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/frame_router.h" -#include "protocol/transport.h" +#include "serial_link/protocol/frame_router.h" +#include "serial_link/protocol/transport.h" +#include "serial_link/protocol/frame_validator.h" static bool is_master; diff --git a/serial_link/protocol/frame_router.h b/serial_link/protocol/frame_router.h index 67db3122fa4..712250ff359 100644 --- a/serial_link/protocol/frame_router.h +++ b/serial_link/protocol/frame_router.h @@ -22,9 +22,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef SERIAL_LINK_FRAME_ROUTER_H +#define SERIAL_LINK_FRAME_ROUTER_H + +#include +#include + #define UP_LINK 0 #define DOWN_LINK 1 void router_set_master(bool master); void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size); void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size); + +#endif diff --git a/serial_link/protocol/frame_validator.c b/serial_link/protocol/frame_validator.c index a3face6506e..474f80ee8ec 100644 --- a/serial_link/protocol/frame_validator.c +++ b/serial_link/protocol/frame_validator.c @@ -22,9 +22,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/frame_validator.h" -#include "protocol/frame_router.h" -#include "protocol/byte_stuffer.h" +#include "serial_link/protocol/frame_validator.h" +#include "serial_link/protocol/frame_router.h" +#include "serial_link/protocol/byte_stuffer.h" +#include const uint32_t poly8_lookup[256] = { diff --git a/serial_link/protocol/frame_validator.h b/serial_link/protocol/frame_validator.h index c35fc27260b..4a910d510b9 100644 --- a/serial_link/protocol/frame_validator.h +++ b/serial_link/protocol/frame_validator.h @@ -22,6 +22,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef SERIAL_LINK_FRAME_VALIDATOR_H +#define SERIAL_LINK_FRAME_VALIDATOR_H + +#include + void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size); // The buffer pointed to by the data needs 4 additional bytes void validator_send_frame(uint8_t link, uint8_t* data, uint16_t size); + +#endif diff --git a/serial_link/protocol/physical.h b/serial_link/protocol/physical.h index ee5883d36bf..425e06cdd29 100644 --- a/serial_link/protocol/physical.h +++ b/serial_link/protocol/physical.h @@ -22,4 +22,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef SERIAL_LINK_PHYSICAL_H +#define SERIAL_LINK_PHYSICAL_H + void send_data(uint8_t link, const uint8_t* data, uint16_t size); + +#endif diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index 03f83a8068c..4542a7a050e 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -22,9 +22,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/transport.h" -#include "protocol/frame_router.h" -#include "protocol/triple_buffered_object.h" +#include "serial_link/protocol/transport.h" +#include "serial_link/protocol/frame_router.h" +#include "serial_link/protocol/triple_buffered_object.h" +#include static remote_object_t** remote_objects; static uint32_t num_remote_objects; @@ -32,7 +33,7 @@ static uint32_t num_remote_objects; void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { remote_objects = _remote_objects; num_remote_objects = _num_remote_objects; - int i; + unsigned int i; for(i=0;iobject_type == MASTER_TO_ALL_SLAVES) { @@ -44,7 +45,7 @@ void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_obje } else if(obj->object_type == MASTER_TO_SINGLE_SLAVE) { uint8_t* start = obj->buffer; - int j; + unsigned int j; for (j=0;jobject_size); - int j; + unsigned int j; for (j=0;jobject_type == MASTER_TO_ALL_SLAVES || obj->object_type == SLAVE_TO_MASTER) { @@ -106,7 +104,7 @@ void update_transport(void) { } else { uint8_t* start = obj->buffer; - int j; + unsigned int j; for (j=0;jobject_size + LOCAL_OBJECT_EXTRA, tb); diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index a1a83b8f76c..9e9e22462c7 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -25,8 +25,8 @@ SOFTWARE. #ifndef SERIAL_LINK_TRANSPORT_H #define SERIAL_LINK_TRANSPORT_H -#include "protocol/triple_buffered_object.h" -#include "system/system.h" +#include "serial_link/protocol/triple_buffered_object.h" +#include "serial_link/system/system.h" #define NUM_SLAVES 8 #define LOCAL_OBJECT_EXTRA 16 @@ -146,7 +146,6 @@ typedef struct { \ void init_transport(remote_object_t** remote_objects, uint32_t num_remote_objects); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); -uint32_t transport_send_frame(uint8_t to, uint8_t* data, uint16_t size); void update_transport(void); #endif diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index 6b3cf75adf5..c6bf28af0aa 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -22,8 +22,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "protocol/triple_buffered_object.h" -#include "system/system.h" +#include "serial_link/protocol/triple_buffered_object.h" +#include "serial_link/system/system.h" +#include +#include #define GET_READ_INDEX() object->state & 3 #define GET_WRITE_INDEX() (object->state >> 2) & 3 diff --git a/serial_link/protocol/triple_buffered_object.h b/serial_link/protocol/triple_buffered_object.h index 03209709cbc..2e57db3f50f 100644 --- a/serial_link/protocol/triple_buffered_object.h +++ b/serial_link/protocol/triple_buffered_object.h @@ -25,6 +25,8 @@ SOFTWARE. #ifndef SERIAL_LINK_TRIPLE_BUFFERED_OBJECT_H #define SERIAL_LINK_TRIPLE_BUFFERED_OBJECT_H +#include + typedef struct { uint8_t state; uint8_t buffer[] __attribute__((aligned(4))); diff --git a/serial_link/system/system.h b/serial_link/system/system.h index 163349953df..1e4c610b1d6 100644 --- a/serial_link/system/system.h +++ b/serial_link/system/system.h @@ -25,12 +25,18 @@ SOFTWARE. #ifndef SERIAL_LINK_SYSTEM_H #define SERIAL_LINK_SYSTEM_H -void serial_link_lock() { +inline void serial_link_lock(void) { } -void serial_link_unlock() { +inline void serial_link_unlock(void) { } -void signal_data_written(void); +void singal_data_written(void); + +#if defined(PROTOCOL_CHIBIOS) + +inline void signal_data_written(void) { +} +#endif #endif diff --git a/serial_link/tests/Makefile b/serial_link/tests/Makefile index 0d8ba4b7b65..1b072c6f1d2 100644 --- a/serial_link/tests/Makefile +++ b/serial_link/tests/Makefile @@ -22,7 +22,7 @@ CC = gcc CFLAGS = -INCLUDES = -I. -I../ +INCLUDES = -I. -I../../ LDFLAGS = -L$(BUILDDIR)/cgreen/build-c/src -shared LDLIBS = -lcgreen UNITOBJ = $(BUILDDIR)/serialtest/unitobj diff --git a/serial_link/tests/byte_stuffer_tests.c b/serial_link/tests/byte_stuffer_tests.c index 912c4d3211c..64b170e8c1d 100644 --- a/serial_link/tests/byte_stuffer_tests.c +++ b/serial_link/tests/byte_stuffer_tests.c @@ -24,10 +24,10 @@ SOFTWARE. #include #include -#include "protocol/byte_stuffer.h" -#include "protocol/byte_stuffer.c" -#include "protocol/frame_validator.h" -#include "protocol/physical.h" +#include "serial_link/protocol/byte_stuffer.h" +#include "serial_link/protocol/byte_stuffer.c" +#include "serial_link/protocol/frame_validator.h" +#include "serial_link/protocol/physical.h" static uint8_t sent_data[MAX_FRAME_SIZE*2]; static uint16_t sent_data_size; diff --git a/serial_link/tests/frame_router_tests.c b/serial_link/tests/frame_router_tests.c index 0b0ea6e7f48..6c806fa939f 100644 --- a/serial_link/tests/frame_router_tests.c +++ b/serial_link/tests/frame_router_tests.c @@ -24,10 +24,10 @@ SOFTWARE. #include #include -#include "protocol/byte_stuffer.c" -#include "protocol/frame_validator.c" -#include "protocol/frame_router.c" -#include "protocol/transport.h" +#include "serial_link/protocol/byte_stuffer.c" +#include "serial_link/protocol/frame_validator.c" +#include "serial_link/protocol/frame_router.c" +#include "serial_link/protocol/transport.h" static uint8_t received_data[256]; static uint16_t received_data_size; diff --git a/serial_link/tests/frame_validator_tests.c b/serial_link/tests/frame_validator_tests.c index f4abd14d1be..d20947e2c9c 100644 --- a/serial_link/tests/frame_validator_tests.c +++ b/serial_link/tests/frame_validator_tests.c @@ -24,7 +24,7 @@ SOFTWARE. #include #include -#include "protocol/frame_validator.c" +#include "serial_link/protocol/frame_validator.c" void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) { mock(data, size); diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 3fa8eab4ac8..3e9bffdfa71 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -24,8 +24,8 @@ SOFTWARE. #include #include -#include "protocol/transport.c" -#include "protocol/triple_buffered_object.c" +#include "serial_link/protocol/transport.c" +#include "serial_link/protocol/triple_buffered_object.c" void signal_data_written(void) { mock(); diff --git a/serial_link/tests/triple_buffered_object_tests.c b/serial_link/tests/triple_buffered_object_tests.c index 1017df8f5ef..6f7c82b468f 100644 --- a/serial_link/tests/triple_buffered_object_tests.c +++ b/serial_link/tests/triple_buffered_object_tests.c @@ -23,7 +23,7 @@ SOFTWARE. */ #include -#include "protocol/triple_buffered_object.c" +#include "serial_link/protocol/triple_buffered_object.c" typedef struct { uint8_t state; From 36e4869531b19b19eb4301af2016875b9f4f6e82 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 21 Feb 2016 23:52:00 +0200 Subject: [PATCH 055/551] Create a thread for the serial link --- serial_link.mk | 3 ++- serial_link/system/system.c | 40 +++++++++++++++++++++++++++++++++++++ serial_link/system/system.h | 24 +++++++++++++++++----- 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 serial_link/system/system.c diff --git a/serial_link.mk b/serial_link.mk index e8915a33f96..434966a22ae 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -21,4 +21,5 @@ # SOFTWARE. INC += $(SERIAL_DIR) -SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) \ No newline at end of file +SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) +SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c) \ No newline at end of file diff --git a/serial_link/system/system.c b/serial_link/system/system.c new file mode 100644 index 00000000000..2001f4d5cc9 --- /dev/null +++ b/serial_link/system/system.c @@ -0,0 +1,40 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +#include "serial_link/system/system.h" + +// TODO: Optimize the stack size, this is probably way too big +static THD_WORKING_AREA(serialThreadStack, 1024); +static THD_FUNCTION(serialThread, arg) { + (void)arg; +} + + +void init_serial_link(void) { + (void)chThdCreateStatic(serialThreadStack, sizeof(serialThreadStack), + LOWPRIO, serialThread, NULL); +} + +void signal_data_written(void) { + +} diff --git a/serial_link/system/system.h b/serial_link/system/system.h index 1e4c610b1d6..e8c1caec089 100644 --- a/serial_link/system/system.h +++ b/serial_link/system/system.h @@ -25,18 +25,32 @@ SOFTWARE. #ifndef SERIAL_LINK_SYSTEM_H #define SERIAL_LINK_SYSTEM_H + +void init_serial_link(void); + +#if defined(PROTOCOL_CHIBIOS) +#include "ch.h" + +static inline void serial_link_lock(void) { + chSysLock(); +} + +static inline void serial_link_unlock(void) { + chSysUnlock(); +} + +void signal_data_written(void); + +#else + inline void serial_link_lock(void) { } inline void serial_link_unlock(void) { } -void singal_data_written(void); +void signal_data_written(void); -#if defined(PROTOCOL_CHIBIOS) - -inline void signal_data_written(void) { -} #endif #endif From 725929ec8bb5d57b6c4f53fa7d15e04df15f2535 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 23 Feb 2016 09:37:24 +0200 Subject: [PATCH 056/551] Fix include paths for new tmk_core update --- visualizer.mk | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/visualizer.mk b/visualizer.mk index eef2d5cc8af..13c5d31587a 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -23,16 +23,16 @@ GFXLIB = $(VISUALIZER_DIR)/ugfx ifdef LCD_ENABLE include $(GFXLIB)/gfx.mk -OPT_DEFS += -DLCD_ENABLE -OPT_LIBS += -lm +UDEFS += -DLCD_ENABLE +ULIBS += -lm endif SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c -INC += $(GFXINC) $(VISUALIZER_DIR) +UINCDIR += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c SRC += lcd_backlight_hal.c -OPT_DEFS += -DLCD_BACKLIGHT_ENABLE +UDEFS += -DLCD_BACKLIGHT_ENABLE endif ifndef VISUALIZER_USER From 17a1102a2a73e619d1a2573764fdfbb0dec9c9a9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 24 Feb 2016 22:31:01 +0200 Subject: [PATCH 057/551] Fix include dir to use uincir instead of just inc --- serial_link.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serial_link.mk b/serial_link.mk index 434966a22ae..f0cd60b0460 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -20,6 +20,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -INC += $(SERIAL_DIR) +UINCDIR += $(SERIAL_DIR) SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c) \ No newline at end of file From 9cb139adc4e08ff393b1cb8bf16203d670996e71 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 27 Feb 2016 22:28:35 +0200 Subject: [PATCH 058/551] Add simple loop for updating the serial link --- serial_link/system/system.c | 66 ++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 2001f4d5cc9..2dbd9a4c151 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -22,19 +22,83 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "serial_link/system/system.h" +#include "hal.h" +#include "serial_link/protocol/byte_stuffer.h" +#include "serial_link/protocol/transport.h" +#include "serial_link/protocol/frame_router.h" +#include + +static event_source_t new_data_event; + + +// Slow speed for testing +static SerialConfig config = { + .sc_speed = 38400 +}; + +static uint32_t read_from_serial(SerialDriver* driver) { + const uint32_t buffer_size = 16; + uint8_t buffer[buffer_size]; + uint32_t bytes_read = sdAsynchronousRead(driver, buffer, buffer_size); + uint8_t* current = buffer; + uint8_t* end = current + bytes_read; + while(current < end) { + byte_stuffer_recv_byte(0, *current); + current++; + } + return bytes_read; +} // TODO: Optimize the stack size, this is probably way too big static THD_WORKING_AREA(serialThreadStack, 1024); static THD_FUNCTION(serialThread, arg) { (void)arg; + event_listener_t new_data_listener; + event_listener_t sd1_listener; + event_listener_t sd2_listener; + chEvtRegister(&new_data_event, &new_data_listener, 0); + chEvtRegisterMaskWithFlags(chnGetEventSource(&SD1), + &sd1_listener, + EVENT_MASK(1), + CHN_INPUT_AVAILABLE); + chEvtRegisterMaskWithFlags(chnGetEventSource(&SD2), + &sd2_listener, + EVENT_MASK(2), + CHN_INPUT_AVAILABLE); + bool need_wait = false; + while(true) { + if (need_wait) { + chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000)); + } + bool is_master = usbGetDriverStateI(&USBD1) == USB_ACTIVE; + router_set_master(is_master); + + need_wait = true; + need_wait &= read_from_serial(&SD1) == 0; + need_wait &= read_from_serial(&SD2) == 0; + update_transport(); + } +} + +void send_data(uint8_t link, const uint8_t* data, uint16_t size) { + if (link == 0) { + sdWrite(&SD1, data, size); + } + else { + sdWrite(&SD2, data, size); + } } void init_serial_link(void) { + init_byte_stuffer(); + sdStart(&SD1, &config); + sdStart(&SD2, &config); + chEvtObjectInit(&new_data_event); (void)chThdCreateStatic(serialThreadStack, sizeof(serialThreadStack), LOWPRIO, serialThread, NULL); } void signal_data_written(void) { - + chEvtBroadcast(&new_data_event); } From 46482460fa5ba7e1606656f651117cc30f643952 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 Feb 2016 15:52:03 +0200 Subject: [PATCH 059/551] Some small fixes for the serial update loop --- serial_link/system/system.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 2dbd9a4c151..e40a18cec70 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -36,14 +36,14 @@ static SerialConfig config = { .sc_speed = 38400 }; -static uint32_t read_from_serial(SerialDriver* driver) { +static uint32_t read_from_serial(SerialDriver* driver, uint8_t link) { const uint32_t buffer_size = 16; uint8_t buffer[buffer_size]; uint32_t bytes_read = sdAsynchronousRead(driver, buffer, buffer_size); uint8_t* current = buffer; uint8_t* end = current + bytes_read; while(current < end) { - byte_stuffer_recv_byte(0, *current); + byte_stuffer_recv_byte(link, *current); current++; } return bytes_read; @@ -74,14 +74,14 @@ static THD_FUNCTION(serialThread, arg) { router_set_master(is_master); need_wait = true; - need_wait &= read_from_serial(&SD1) == 0; - need_wait &= read_from_serial(&SD2) == 0; + need_wait &= read_from_serial(&SD2, UP_LINK) == 0; + need_wait &= read_from_serial(&SD1, DOWN_LINK) == 0; update_transport(); } } void send_data(uint8_t link, const uint8_t* data, uint16_t size) { - if (link == 0) { + if (link == DOWN_LINK) { sdWrite(&SD1, data, size); } else { From d8d4622802c1a50779830eade0f79a0680def34a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 Feb 2016 21:46:29 +0200 Subject: [PATCH 060/551] Improve serial link initialization, and add driver --- serial_link.mk | 4 +- serial_link/system/driver.h | 36 +++++++++++++++ serial_link/system/system.c | 90 +++++++++++++++++++++++++++++++++++++ serial_link/system/system.h | 1 - 4 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 serial_link/system/driver.h diff --git a/serial_link.mk b/serial_link.mk index f0cd60b0460..e164cc5ff36 100644 --- a/serial_link.mk +++ b/serial_link.mk @@ -22,4 +22,6 @@ UINCDIR += $(SERIAL_DIR) SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) -SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c) \ No newline at end of file +SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c) +SRC += serial_link_hal.c +OPT_DEFS += -DUSE_SERIAL_LINK diff --git a/serial_link/system/driver.h b/serial_link/system/driver.h new file mode 100644 index 00000000000..76e2d682c80 --- /dev/null +++ b/serial_link/system/driver.h @@ -0,0 +1,36 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef SERIAL_LINK_DRIVER_H +#define SERIAL_LINK_DRIVER_H + +#include "host_driver.h" + +void init_serial_link(void); +void init_serial_link_hal(void); +bool is_serial_link_connected(void); +host_driver_t* get_serial_link_driver(void); +void serial_link_update(void); + +#endif diff --git a/serial_link/system/system.c b/serial_link/system/system.c index e40a18cec70..c38bcd87d0d 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -21,14 +21,33 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include "report.h" +#include "host_driver.h" #include "serial_link/system/system.h" +#include "serial_link/system/driver.h" #include "hal.h" #include "serial_link/protocol/byte_stuffer.h" #include "serial_link/protocol/transport.h" #include "serial_link/protocol/frame_router.h" #include +#include "print.h" static event_source_t new_data_event; +static bool serial_link_connected; + +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 serial_driver = { + keyboard_leds, + send_keyboard, + send_mouse, + send_system, + send_consumer +}; // Slow speed for testing @@ -89,8 +108,25 @@ void send_data(uint8_t link, const uint8_t* data, uint16_t size) { } } +static systime_t last_update = 0; + +typedef struct { + uint32_t test; +} test_object1_t; + + +SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t); +MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool); + +remote_object_t* test_remote_objects[] = { + REMOTE_OBJECT(serial_link_connected), + REMOTE_OBJECT(slave_to_master), +}; void init_serial_link(void) { + serial_link_connected = false; + init_serial_link_hal(); + init_transport(test_remote_objects, sizeof(test_remote_objects)/sizeof(remote_object_t*)); init_byte_stuffer(); sdStart(&SD1, &config); sdStart(&SD2, &config); @@ -99,6 +135,60 @@ void init_serial_link(void) { LOWPRIO, serialThread, NULL); } +void serial_link_update(void) { + systime_t current_time = chVTGetSystemTimeX(); + if (current_time - last_update > 1000) { + *begin_write_serial_link_connected() = true; + end_write_serial_link_connected(); + test_object1_t* obj = begin_write_slave_to_master(); + obj->test = current_time; + end_write_slave_to_master(); + xprintf("writing %d\n", current_time); + last_update = current_time; + } + test_object1_t* obj = read_slave_to_master(0); + if (obj) { + xprintf("%d\n", obj->test); + } + obj = read_slave_to_master(1); + if (obj) { + xprintf("%d\n", obj->test); + } + + if (read_serial_link_connected()) { + serial_link_connected = true; + } +} + void signal_data_written(void) { chEvtBroadcast(&new_data_event); } + +bool is_serial_link_connected(void) { + return serial_link_connected; +} + +host_driver_t* get_serial_link_driver(void) { + return &serial_driver; +} + +uint8_t keyboard_leds(void) { + return 0; +} + +void send_keyboard(report_keyboard_t *report) { + (void)report; +} + +void send_mouse(report_mouse_t *report) { + (void)report; +} + +void send_system(uint16_t data) { + (void)data; +} + +void send_consumer(uint16_t data) { + (void)data; +} + diff --git a/serial_link/system/system.h b/serial_link/system/system.h index e8c1caec089..fcc27425e18 100644 --- a/serial_link/system/system.h +++ b/serial_link/system/system.h @@ -26,7 +26,6 @@ SOFTWARE. #define SERIAL_LINK_SYSTEM_H -void init_serial_link(void); #if defined(PROTOCOL_CHIBIOS) #include "ch.h" From 6fe6d111bf563962e0d3cc2e4812b6d7959836a3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 Feb 2016 22:52:30 +0200 Subject: [PATCH 061/551] Send the keyboard matrix over the serial link --- serial_link/system/system.c | 53 ++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index c38bcd87d0d..68ccbdb45e9 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -29,6 +29,7 @@ SOFTWARE. #include "serial_link/protocol/byte_stuffer.h" #include "serial_link/protocol/transport.h" #include "serial_link/protocol/frame_router.h" +#include "matrix.h" #include #include "print.h" @@ -111,16 +112,17 @@ void send_data(uint8_t link, const uint8_t* data, uint16_t size) { static systime_t last_update = 0; typedef struct { - uint32_t test; -} test_object1_t; + matrix_row_t rows[MATRIX_ROWS]; +} matrix_object_t; +static matrix_object_t last_matrix = {}; -SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t); +SLAVE_TO_MASTER_OBJECT(keyboard_matrix, matrix_object_t); MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool); remote_object_t* test_remote_objects[] = { REMOTE_OBJECT(serial_link_connected), - REMOTE_OBJECT(slave_to_master), + REMOTE_OBJECT(keyboard_matrix), }; void init_serial_link(void) { @@ -140,24 +142,42 @@ void serial_link_update(void) { if (current_time - last_update > 1000) { *begin_write_serial_link_connected() = true; end_write_serial_link_connected(); - test_object1_t* obj = begin_write_slave_to_master(); - obj->test = current_time; - end_write_slave_to_master(); - xprintf("writing %d\n", current_time); last_update = current_time; } - test_object1_t* obj = read_slave_to_master(0); - if (obj) { - xprintf("%d\n", obj->test); - } - obj = read_slave_to_master(1); - if (obj) { - xprintf("%d\n", obj->test); - } if (read_serial_link_connected()) { serial_link_connected = true; } + + matrix_object_t matrix; + bool changed = false; + for(uint8_t i=0;irows[i] = matrix.rows[i]; + } + end_write_keyboard_matrix(); + } + + matrix_object_t* m = read_keyboard_matrix(0); + if (m) { + xprintf("\nr/c 01234567\n"); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + xprintf("%X0: ", row); + for (int col = 0; col < MATRIX_COLS; col++) { + if (m->rows[row] & (1< Date: Sun, 28 Feb 2016 23:58:47 +0200 Subject: [PATCH 062/551] Call remote matrix update, when the matrix changes --- serial_link/system/system.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 68ccbdb45e9..9cf695a308b 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -137,6 +137,8 @@ void init_serial_link(void) { LOWPRIO, serialThread, NULL); } +void matrix_set_remote(matrix_row_t* rows, uint8_t index); + void serial_link_update(void) { systime_t current_time = chVTGetSystemTimeX(); if (current_time - last_update > 1000) { @@ -166,17 +168,7 @@ void serial_link_update(void) { matrix_object_t* m = read_keyboard_matrix(0); if (m) { - xprintf("\nr/c 01234567\n"); - for (uint8_t row = 0; row < MATRIX_ROWS; row++) { - xprintf("%X0: ", row); - for (int col = 0; col < MATRIX_COLS; col++) { - if (m->rows[row] & (1<rows, 0); } } From 11bd4ba0dd39654318bd0a3ae495656c2b2187bb Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 12 Mar 2016 19:35:09 +0200 Subject: [PATCH 063/551] Remote object callable from many places Change init_transport to add_remote_objects, so that it can be called many times from different places. --- serial_link/protocol/transport.c | 14 +++++++------- serial_link/protocol/transport.h | 2 +- serial_link/system/system.c | 4 ++-- serial_link/tests/transport_tests.c | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index 4542a7a050e..fbcb040bf1c 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -27,15 +27,15 @@ SOFTWARE. #include "serial_link/protocol/triple_buffered_object.h" #include -static remote_object_t** remote_objects; -static uint32_t num_remote_objects; +#define MAX_REMOTE_OBJECTS 16 +static remote_object_t* remote_objects[MAX_REMOTE_OBJECTS]; +static uint32_t num_remote_objects = 0; -void init_transport(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { - remote_objects = _remote_objects; - num_remote_objects = _num_remote_objects; +void add_remote_objects(remote_object_t** _remote_objects, uint32_t _num_remote_objects) { unsigned int i; - for(i=0;iobject_type == MASTER_TO_ALL_SLAVES) { triple_buffer_object_t* tb = (triple_buffer_object_t*)obj->buffer; triple_buffer_init(tb); diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index 9e9e22462c7..e518aaa6eb7 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -144,7 +144,7 @@ typedef struct { \ #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name -void init_transport(remote_object_t** remote_objects, uint32_t num_remote_objects); +void add_remote_objects(remote_object_t** remote_objects, uint32_t num_remote_objects); void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size); void update_transport(void); diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 9cf695a308b..9e4ee5d95e1 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -120,7 +120,7 @@ static matrix_object_t last_matrix = {}; SLAVE_TO_MASTER_OBJECT(keyboard_matrix, matrix_object_t); MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool); -remote_object_t* test_remote_objects[] = { +static remote_object_t* remote_objects[] = { REMOTE_OBJECT(serial_link_connected), REMOTE_OBJECT(keyboard_matrix), }; @@ -128,7 +128,7 @@ remote_object_t* test_remote_objects[] = { void init_serial_link(void) { serial_link_connected = false; init_serial_link_hal(); - init_transport(test_remote_objects, sizeof(test_remote_objects)/sizeof(remote_object_t*)); + add_remote_objects(remote_objects, sizeof(remote_objects)/sizeof(remote_object_t*)); init_byte_stuffer(); sdStart(&SD1, &config); sdStart(&SD2, &config); diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 3e9bffdfa71..02a7a10425b 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -53,7 +53,7 @@ MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1_t); MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1_t); SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t); -remote_object_t* test_remote_objects[] = { +static remote_object_t* test_remote_objects[] = { REMOTE_OBJECT(master_to_slave), REMOTE_OBJECT(master_to_single_slave), REMOTE_OBJECT(slave_to_master), @@ -61,7 +61,7 @@ remote_object_t* test_remote_objects[] = { Describe(Transport); BeforeEach(Transport) { - init_transport(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*)); + add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*)); sent_data_size = 0; } AfterEach(Transport) {} From 32f0171d393211cc29f57a0ed29327b45e9d3747 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 12 Mar 2016 19:41:34 +0200 Subject: [PATCH 064/551] Fix crash when receiving unregistered remotes --- serial_link/protocol/transport.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index fbcb040bf1c..efc00e79e0d 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -71,22 +71,24 @@ void add_remote_objects(remote_object_t** _remote_objects, uint32_t _num_remote_ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { uint8_t id = data[size-1]; - remote_object_t* obj = remote_objects[id]; - uint8_t* start; - if (obj->object_type == MASTER_TO_ALL_SLAVES) { - start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + if (id < num_remote_objects) { + remote_object_t* obj = remote_objects[id]; + uint8_t* start; + if (obj->object_type == MASTER_TO_ALL_SLAVES) { + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + } + else if(obj->object_type == SLAVE_TO_MASTER) { + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); + } + else { + start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size); + } + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); + memcpy(ptr, data, size -1); + triple_buffer_end_write_internal(tb); } - else if(obj->object_type == SLAVE_TO_MASTER) { - start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); - start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); - } - else { - start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size); - } - triple_buffer_object_t* tb = (triple_buffer_object_t*)start; - void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); - memcpy(ptr, data, size -1); - triple_buffer_end_write_internal(tb); } void update_transport(void) { From 315edb48265e6baedd07f34c9e6e323d28814b4e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 12 Mar 2016 19:42:57 +0200 Subject: [PATCH 065/551] Add serial link support for visualizer --- visualizer.c | 63 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/visualizer.c b/visualizer.c index 402bbd15171..ca7bcb77650 100644 --- a/visualizer.c +++ b/visualizer.c @@ -42,6 +42,11 @@ SOFTWARE. #include "nodebug.h" #endif +#ifdef USE_SERIAL_LINK +#include "serial_link/protocol/transport.h" +#include "serial_link/system/driver.h" +#endif + static visualizer_keyboard_status_t current_status = { .layer = 0xFFFFFFFF, @@ -59,6 +64,16 @@ static bool visualizer_enabled = false; #define MAX_SIMULTANEOUS_ANIMATIONS 4 static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {}; +#ifdef USE_SERIAL_LINK +MASTER_TO_ALL_SLAVES_OBJECT(current_status, visualizer_keyboard_status_t); + +static remote_object_t* remote_objects[] = { + REMOTE_OBJECT(current_status), +}; + +#endif + + void start_keyframe_animation(keyframe_animation_t* animation) { animation->current_frame = -1; animation->time_left_in_frame = 0; @@ -328,6 +343,10 @@ void visualizer_init(void) { #ifdef LCD_BACKLIGHT_ENABLE lcd_backlight_init(); #endif + +#ifdef USE_SERIAL_LINK + add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) ); +#endif // We are using a low priority thread, the idea is to have it run only // when the main thread is sleeping during the matrix scanning chEvtObjectInit(&layer_changed_event); @@ -340,17 +359,45 @@ void visualizer_set_state(uint32_t default_state, uint32_t state, uint32_t leds) // a state where one of these are set but not the other. But this should // not really matter as it will be fixed during the next loop step. // Alternatively a mutex could be used instead of the volatile variables + bool changed = false; - visualizer_keyboard_status_t new_status = { - .layer = state, - .default_layer = default_state, - .leds = leds, - }; - if (!same_status(¤t_status, &new_status)) { - changed = true; +#ifdef USE_SERIAL_LINK + if (is_serial_link_connected ()) { + visualizer_keyboard_status_t* new_status = read_current_status(); + if (new_status) { + if (!same_status(¤t_status, new_status)) { + changed = true; + current_status = *new_status; + } + } + } + else { +#else + { +#endif + visualizer_keyboard_status_t new_status = { + .layer = state, + .default_layer = default_state, + .leds = leds, + }; + if (!same_status(¤t_status, &new_status)) { + changed = true; + current_status = new_status; + } } - current_status = new_status; if (changed) { chEvtBroadcast(&layer_changed_event); + } +#ifdef USE_SERIAL_LINK + static systime_t last_update = 0; + systime_t current_update = chVTGetSystemTimeX(); + systime_t delta = current_update - last_update; + if (changed || delta > MS2ST(10)) { + last_update = current_update; + visualizer_keyboard_status_t* r = begin_write_current_status(); + *r = current_status; + end_write_current_status(); + } +#endif } From d835ad91a35afd4aa01a07a6907b846d5a32323d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 12 Mar 2016 20:08:08 +0200 Subject: [PATCH 066/551] Resend the keyboard state every ms In case there's some errors on the link, and the packet gets lost --- serial_link/system/system.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 9e4ee5d95e1..efd0991e9c6 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -140,13 +140,6 @@ void init_serial_link(void) { void matrix_set_remote(matrix_row_t* rows, uint8_t index); void serial_link_update(void) { - systime_t current_time = chVTGetSystemTimeX(); - if (current_time - last_update > 1000) { - *begin_write_serial_link_connected() = true; - end_write_serial_link_connected(); - last_update = current_time; - } - if (read_serial_link_connected()) { serial_link_connected = true; } @@ -157,13 +150,19 @@ void serial_link_update(void) { matrix.rows[i] = matrix_get_row(i); changed |= matrix.rows[i] != last_matrix.rows[i]; } - if (changed) { + + systime_t current_time = chVTGetSystemTimeX(); + systime_t delta = current_time - last_update; + if (changed || delta > US2ST(1000)) { + last_update = current_time; last_matrix = matrix; matrix_object_t* m = begin_write_keyboard_matrix(); for(uint8_t i=0;irows[i] = matrix.rows[i]; } end_write_keyboard_matrix(); + *begin_write_serial_link_connected() = true; + end_write_serial_link_connected(); } matrix_object_t* m = read_keyboard_matrix(0); From f7275f0edea61aa0b52160f5dbdeeddb1f0e7176 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 12 Mar 2016 22:37:04 +0200 Subject: [PATCH 067/551] Configurable baud setting --- serial_link/system/system.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index efd0991e9c6..5406db3f486 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -50,10 +50,12 @@ host_driver_t serial_driver = { send_consumer }; +#ifndef SERIAL_LINK_BAUD +#error "Serial link baud is not set" +#endif -// Slow speed for testing static SerialConfig config = { - .sc_speed = 38400 + .sc_speed = SERIAL_LINK_BAUD }; static uint32_t read_from_serial(SerialDriver* driver, uint8_t link) { From b93d07198a18063594a59dd193d0961622087868 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 13 Mar 2016 17:54:45 +0200 Subject: [PATCH 068/551] Suspend support for the visualizer --- example_integration/visualizer_user.c | 2 +- visualizer.c | 116 ++++++++++++++++++++------ visualizer.h | 17 +++- 3 files changed, 104 insertions(+), 31 deletions(-) diff --git a/example_integration/visualizer_user.c b/example_integration/visualizer_user.c index 6c4619d9540..fc09fe2eafc 100644 --- a/example_integration/visualizer_user.c +++ b/example_integration/visualizer_user.c @@ -65,7 +65,7 @@ static keyframe_animation_t startup_animation = { .num_frames = 4, .loop = false, .frame_lengths = {0, MS2ST(1000), MS2ST(5000), 0}, - .frame_functions = {display_welcome, keyframe_animate_backlight_color, keyframe_no_operation, user_visualizer_inited}, + .frame_functions = {display_welcome, keyframe_animate_backlight_color, keyframe_no_operation, enable_visualization}, }; // The color animation animates the LCD color when you change layers diff --git a/visualizer.c b/visualizer.c index ca7bcb77650..5b0d560ed97 100644 --- a/visualizer.c +++ b/visualizer.c @@ -52,10 +52,14 @@ static visualizer_keyboard_status_t current_status = { .layer = 0xFFFFFFFF, .default_layer = 0xFFFFFFFF, .leds = 0xFFFFFFFF, + .suspended = false, }; static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) { - return memcmp(status1, status2, sizeof(visualizer_keyboard_status_t)) == 0; + return status1->layer == status2->layer && + status1->default_layer == status2->default_layer && + status1->leds == status2->leds && + status1->suspended == status2->suspended; } static event_source_t layer_changed_event; @@ -104,6 +108,17 @@ void stop_keyframe_animation(keyframe_animation_t* animation) { } } +void stop_all_keyframe_animations(void) { + for (int i=0;icurrent_frame = animations[i]->num_frames; + animations[i]->time_left_in_frame = 0; + animations[i]->need_update = true; + animations[i] = NULL; + } + } +} + static bool update_keyframe_animation(keyframe_animation_t* animation, visualizer_state_t* state, systime_t delta, systime_t* sleep_time) { dprintf("Animation frame%d, left %d, delta %d\n", animation->current_frame, animation->time_left_in_frame, delta); @@ -252,7 +267,19 @@ bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_s } #endif // LCD_ENABLE -bool user_visualizer_inited(keyframe_animation_t* animation, visualizer_state_t* state) { +bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + (void)state; + return false; +} + +bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + (void)state; + return false; +} + +bool enable_visualization(keyframe_animation_t* animation, visualizer_state_t* state) { (void)animation; (void)state; dprint("User visualizer inited\n"); @@ -268,13 +295,15 @@ static THD_FUNCTION(visualizerThread, arg) { event_listener_t event_listener; chEvtRegister(&layer_changed_event, &event_listener, 0); - visualizer_state_t state = { - .status = { - .default_layer = 0xFFFFFFFF, - .layer = 0xFFFFFFFF, - .leds = 0xFFFFFFFF, - }, + visualizer_keyboard_status_t initial_status = { + .default_layer = 0xFFFFFFFF, + .layer = 0xFFFFFFFF, + .leds = 0xFFFFFFFF, + .suspended = false, + }; + visualizer_state_t state = { + .status = initial_status, .current_lcd_color = 0, #ifdef LCD_ENABLE .font_fixed5x8 = gdispOpenFont("fixed_5x8"), @@ -301,17 +330,36 @@ static THD_FUNCTION(visualizerThread, arg) { bool enabled = visualizer_enabled; if (!same_status(&state.status, ¤t_status)) { if (visualizer_enabled) { - state.status = current_status; - update_user_visualizer_state(&state); - state.prev_lcd_color = state.current_lcd_color; + if (current_status.suspended) { + stop_all_keyframe_animations(); + visualizer_enabled = false; + state.status = current_status; + user_visualizer_suspend(&state); + } + else { + state.status = current_status; + update_user_visualizer_state(&state); + state.prev_lcd_color = state.current_lcd_color; + } } } + if (!enabled && state.status.suspended && current_status.suspended == false) { + // Setting the status to the initial status will force an update + // when the visualizer is enabled again + state.status = initial_status; + state.status.suspended = false; + stop_all_keyframe_animations(); + user_visualizer_resume(&state); + } sleep_time = TIME_INFINITE; for (int i=0;i MS2ST(10)) { + last_update = current_update; + visualizer_keyboard_status_t* r = begin_write_current_status(); + *r = current_status; + end_write_current_status(); + } +#endif +} + +void visualizer_update(uint32_t default_state, uint32_t state, uint32_t leds) { // Note that there's a small race condition here, the thread could read // a state where one of these are set but not the other. But this should // not really matter as it will be fixed during the next loop step. @@ -379,25 +444,22 @@ void visualizer_set_state(uint32_t default_state, uint32_t state, uint32_t leds) .layer = state, .default_layer = default_state, .leds = leds, + .suspended = current_status.suspended, }; if (!same_status(¤t_status, &new_status)) { changed = true; current_status = new_status; } } - if (changed) { - chEvtBroadcast(&layer_changed_event); - - } -#ifdef USE_SERIAL_LINK - static systime_t last_update = 0; - systime_t current_update = chVTGetSystemTimeX(); - systime_t delta = current_update - last_update; - if (changed || delta > MS2ST(10)) { - last_update = current_update; - visualizer_keyboard_status_t* r = begin_write_current_status(); - *r = current_status; - end_write_current_status(); - } -#endif + update_status(changed); +} + +void visualizer_suspend(void) { + current_status.suspended = true; + update_status(true); +} + +void visualizer_resume(void) { + current_status.suspended = false; + update_status(true); } diff --git a/visualizer.h b/visualizer.h index b7b0a3a7d06..22798cda6be 100644 --- a/visualizer.h +++ b/visualizer.h @@ -38,8 +38,12 @@ SOFTWARE. // This need to be called once at the start void visualizer_init(void); -// This should be called before every matrix scan -void visualizer_set_state(uint32_t default_state, uint32_t state, uint32_t leds); +// This should be called at every matrix scan +void visualizer_update(uint32_t default_state, uint32_t state, uint32_t leds); +// This should be called when the keyboard goes to suspend state +void visualizer_suspend(void); +// This should be called when the keyboard wakes up from suspend state +void visualizer_resume(void); // If you need support for more than 8 keyframes per animation, you can change this #define MAX_VISUALIZER_KEY_FRAMES 8 @@ -50,6 +54,7 @@ typedef struct { uint32_t layer; uint32_t default_layer; uint32_t leds; // See led.h for available statuses + bool suspended; } visualizer_keyboard_status_t; // The state struct is used by the various keyframe functions @@ -108,13 +113,19 @@ bool keyframe_set_backlight_color(keyframe_animation_t* animation, visualizer_st bool keyframe_display_layer_text(keyframe_animation_t* animation, visualizer_state_t* state); // Displays a bitmap (0/1) of all the currently active layers bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_state_t* state); + +bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state); +bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state); + // Call this once, when the initial animation has finished, alternatively you can call it // directly from the initalize_user_visualizer function (the animation can be null) -bool user_visualizer_inited(keyframe_animation_t* animation, visualizer_state_t* state); +bool enable_visualization(keyframe_animation_t* animation, visualizer_state_t* state); // These two functions have to be implemented by the user void initialize_user_visualizer(visualizer_state_t* state); void update_user_visualizer_state(visualizer_state_t* state); +void user_visualizer_suspend(visualizer_state_t* state); +void user_visualizer_resume(visualizer_state_t* state); #endif /* VISUALIZER_H */ From f4c11740f7bac033194ab1d5f5a52721b1d7c6d2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 13 Mar 2016 21:35:42 +0200 Subject: [PATCH 069/551] Suspend power off, fix backlight animation The backlight color animation was using the wrong frame number, so it didn't work properly. --- visualizer.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/visualizer.c b/visualizer.c index 5b0d560ed97..867a1d33470 100644 --- a/visualizer.c +++ b/visualizer.c @@ -174,7 +174,7 @@ bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* #ifdef LCD_BACKLIGHT_ENABLE bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) { - int frame_length = animation->frame_lengths[1]; + int frame_length = animation->frame_lengths[animation->current_frame]; int current_pos = frame_length - animation->time_left_in_frame; uint8_t t_h = LCD_HUE(state->target_lcd_color); uint8_t t_s = LCD_SAT(state->target_lcd_color); @@ -270,12 +270,21 @@ bool keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_s bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) { (void)animation; (void)state; +#ifdef LCD_ENABLE + gdispSetPowerMode(powerOff); +#endif +#ifdef LCD_BACKLIGHT_ENABLE + lcd_backlight_hal_color(0, 0, 0); +#endif return false; } bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) { (void)animation; (void)state; +#ifdef LCD_ENABLE + gdispSetPowerMode(powerOn); +#endif return false; } @@ -339,8 +348,8 @@ static THD_FUNCTION(visualizerThread, arg) { else { state.status = current_status; update_user_visualizer_state(&state); - state.prev_lcd_color = state.current_lcd_color; } + state.prev_lcd_color = state.current_lcd_color; } } if (!enabled && state.status.suspended && current_status.suspended == false) { @@ -350,6 +359,7 @@ static THD_FUNCTION(visualizerThread, arg) { state.status.suspended = false; stop_all_keyframe_animations(); user_visualizer_resume(&state); + state.prev_lcd_color = state.current_lcd_color; } sleep_time = TIME_INFINITE; for (int i=0;i Date: Sun, 13 Mar 2016 21:38:51 +0200 Subject: [PATCH 070/551] Master mode remains active It remains active even if the USB link is suspended or otherwise temporarilly goes down. --- serial_link/system/system.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 5406db3f486..f74d8c9e9eb 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -88,11 +88,13 @@ static THD_FUNCTION(serialThread, arg) { EVENT_MASK(2), CHN_INPUT_AVAILABLE); bool need_wait = false; + bool is_master = false; while(true) { if (need_wait) { chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000)); } - bool is_master = usbGetDriverStateI(&USBD1) == USB_ACTIVE; + // Always stay as master, even if the USB goes into sleep mode + is_master |= usbGetDriverStateI(&USBD1) == USB_ACTIVE; router_set_master(is_master); need_wait = true; From 61f7761c034d46eb0856fb115260de2679abc419 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 9 Apr 2016 19:49:52 +0300 Subject: [PATCH 071/551] Update ugfx with ChibiOS 4 support. Also change the URL to fredizzimo bitbucket --- .gitmodules | 2 +- ugfx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 2ab25f6883c..b320458c0eb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "ugfx"] path = ugfx - url = https://bitbucket.org/Tectu/ugfx.git + url = https://bitbucket.org/fredizzimo/ugfx.git diff --git a/ugfx b/ugfx index 2b66ac524bd..e221a690616 160000 --- a/ugfx +++ b/ugfx @@ -1 +1 @@ -Subproject commit 2b66ac524bd56853ba97b917683971f3ebc0104c +Subproject commit e221a690616e20f87e0b0088baffdbd5427be862 From c95b17b536b4437f001d5f5e8a54753969e36bb2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 13:46:19 +0300 Subject: [PATCH 072/551] Add simple led support Also the first version of a led testing animation --- led_test.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ led_test.h | 35 +++++++++++++++++++++++++++++++++++ visualizer.c | 8 ++++++++ visualizer.h | 3 +++ visualizer.mk | 10 ++++++++-- 5 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 led_test.c create mode 100644 led_test.h diff --git a/led_test.c b/led_test.c new file mode 100644 index 00000000000..1aadd554147 --- /dev/null +++ b/led_test.c @@ -0,0 +1,45 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +#include "led_test.h" +#include "gfx.h" + +keyframe_animation_t led_test_animation = { + .num_frames = 1, + .loop = true, + .frame_lengths = {MS2ST(1000)}, + .frame_functions = { + keyframe_fade_in_all_leds, + }, +}; + +bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + int frame_length = animation->frame_lengths[animation->current_frame]; + int current_pos = frame_length - animation->time_left_in_frame; + uint8_t luma = 0x255 * current_pos / frame_length; + color_t color = LUMA2COLOR(luma); + gdispGClear(LED_DISPLAY, color); + gdispGFlush(LED_DISPLAY); + return true; +} diff --git a/led_test.h b/led_test.h new file mode 100644 index 00000000000..521e052164e --- /dev/null +++ b/led_test.h @@ -0,0 +1,35 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Fred Sundvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef TMK_VISUALIZER_LED_TEST_H_ +#define TMK_VISUALIZER_LED_TEST_H_ + +#include "visualizer.h" + +bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state); + +extern keyframe_animation_t led_test_animation; + + +#endif /* TMK_VISUALIZER_LED_TEST_H_ */ diff --git a/visualizer.c b/visualizer.c index 867a1d33470..ed5c9fa2c9a 100644 --- a/visualizer.c +++ b/visualizer.c @@ -77,6 +77,9 @@ static remote_object_t* remote_objects[] = { #endif +GDisplay* LCDDisplay; +GDisplay* LEDDisplay; + void start_keyframe_animation(keyframe_animation_t* animation) { animation->current_frame = -1; @@ -405,6 +408,11 @@ void visualizer_init(void) { #ifdef USE_SERIAL_LINK add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) ); #endif + // TODO: Make sure these works when either of these are disabled + LCDDisplay = gdispGetDisplay(0); + LEDDisplay = gdispGetDisplay(1); + + // We are using a low priority thread, the idea is to have it run only // when the main thread is sleeping during the matrix scanning chEvtObjectInit(&layer_changed_event); diff --git a/visualizer.h b/visualizer.h index 22798cda6be..6a72fde1fd3 100644 --- a/visualizer.h +++ b/visualizer.h @@ -99,6 +99,9 @@ typedef struct keyframe_animation_t { } keyframe_animation_t; +extern GDisplay* LCD_DISPLAY; +extern GDisplay* LED_DISPLAY; + void start_keyframe_animation(keyframe_animation_t* animation); void stop_keyframe_animation(keyframe_animation_t* animation); diff --git a/visualizer.mk b/visualizer.mk index 13c5d31587a..96ca468e86a 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -21,13 +21,14 @@ # SOFTWARE. GFXLIB = $(VISUALIZER_DIR)/ugfx +SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c +UINCDIR += $(GFXINC) $(VISUALIZER_DIR) + ifdef LCD_ENABLE include $(GFXLIB)/gfx.mk UDEFS += -DLCD_ENABLE ULIBS += -lm endif -SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c -UINCDIR += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c @@ -35,6 +36,11 @@ SRC += lcd_backlight_hal.c UDEFS += -DLCD_BACKLIGHT_ENABLE endif +ifdef LED_ENABLE +SRC += $(VISUALIZER_DIR)/led_test.c +UDEFS += -DLED_ENABLE +endif + ifndef VISUALIZER_USER VISUALIZER_USER = visualizer_user.c endif From a960a1b0066b84bbf279fbebe2d62dfee6ea3812 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 14:10:01 +0300 Subject: [PATCH 073/551] Add fade out for the led test --- led_test.c | 24 +++++++++++++++++++----- led_test.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/led_test.c b/led_test.c index 1aadd554147..1fba32fa0d6 100644 --- a/led_test.c +++ b/led_test.c @@ -25,21 +25,35 @@ SOFTWARE. #include "gfx.h" keyframe_animation_t led_test_animation = { - .num_frames = 1, + .num_frames = 3, .loop = true, - .frame_lengths = {MS2ST(1000)}, + .frame_lengths = {MS2ST(1000), MS2ST(1000), MS2ST(1000)}, .frame_functions = { keyframe_fade_in_all_leds, + keyframe_no_operation, + keyframe_fade_out_all_leds, }, }; -bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { - (void)state; +static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint8_t from, uint8_t to) { int frame_length = animation->frame_lengths[animation->current_frame]; int current_pos = frame_length - animation->time_left_in_frame; - uint8_t luma = 0x255 * current_pos / frame_length; + int delta = to - from; + int luma = (delta * current_pos) / frame_length; + luma += from; color_t color = LUMA2COLOR(luma); gdispGClear(LED_DISPLAY, color); gdispGFlush(LED_DISPLAY); +} + +bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + keyframe_fade_all_leds_from_to(animation, 0, 255); + return true; +} + +bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + keyframe_fade_all_leds_from_to(animation, 255, 0); return true; } diff --git a/led_test.h b/led_test.h index 521e052164e..a722cd9fe3b 100644 --- a/led_test.h +++ b/led_test.h @@ -28,6 +28,7 @@ SOFTWARE. #include "visualizer.h" bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state); +bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_state_t* state); extern keyframe_animation_t led_test_animation; From 0e0488623e8d8820a909a48a6c847866a65bf845 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 14:54:40 +0300 Subject: [PATCH 074/551] Add left to right gradient keyframe for leds --- led_test.c | 34 ++++++++++++++++++++++++++++++++-- led_test.h | 1 + 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/led_test.c b/led_test.c index 1fba32fa0d6..197550fdd67 100644 --- a/led_test.c +++ b/led_test.c @@ -23,15 +23,21 @@ SOFTWARE. */ #include "led_test.h" #include "gfx.h" +#include "math.h" keyframe_animation_t led_test_animation = { - .num_frames = 3, + .num_frames = 4, .loop = true, - .frame_lengths = {MS2ST(1000), MS2ST(1000), MS2ST(1000)}, + .frame_lengths = { + MS2ST(1000), + MS2ST(1000), + MS2ST(1000), + MS2ST(3000)}, .frame_functions = { keyframe_fade_in_all_leds, keyframe_no_operation, keyframe_fade_out_all_leds, + keyframe_led_left_to_right_gradient, }, }; @@ -46,6 +52,18 @@ static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint gdispGFlush(LED_DISPLAY); } +// TODO: Should be customizable per keyboard +#define NUM_ROWS 7 +#define NUM_COLS 7 + +static uint8_t compute_gradient_color(float t, float index, float num) { + float d = fabs(index - t); + if (d > num / 2.0f) { + d = num - d; + } + return (uint8_t)(255.0f * d); +} + bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { (void)state; keyframe_fade_all_leds_from_to(animation, 0, 255); @@ -57,3 +75,15 @@ bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_stat keyframe_fade_all_leds_from_to(animation, 255, 0); return true; } + +bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + int frame_length = animation->frame_lengths[animation->current_frame]; + int current_pos = frame_length - animation->time_left_in_frame; + float t = current_pos / frame_length; + for (int i=0; i< NUM_COLS; i++) { + uint8_t color = compute_gradient_color(t, i, NUM_COLS); + gdispGDrawLine(LED_DISPLAY, i, 0, i, NUM_ROWS - 1, LUMA2COLOR(color)); + } + return true; +} diff --git a/led_test.h b/led_test.h index a722cd9fe3b..03737a717dd 100644 --- a/led_test.h +++ b/led_test.h @@ -29,6 +29,7 @@ SOFTWARE. bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state); bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_state_t* state); +bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state); extern keyframe_animation_t led_test_animation; From 444132edd056cd52a60e3551d1f6c1a07909c040 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 15:45:52 +0300 Subject: [PATCH 075/551] Add last and first update of frame for anims --- visualizer.c | 9 +++++++++ visualizer.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/visualizer.c b/visualizer.c index ed5c9fa2c9a..219d44cd3cd 100644 --- a/visualizer.c +++ b/visualizer.c @@ -103,6 +103,8 @@ void stop_keyframe_animation(keyframe_animation_t* animation) { animation->current_frame = animation->num_frames; animation->time_left_in_frame = 0; animation->need_update = true; + animation->first_update_of_frame = false; + animation->last_update_of_frame = false; for (int i=0;icurrent_frame = animations[i]->num_frames; animations[i]->time_left_in_frame = 0; animations[i]->need_update = true; + animations[i]->first_update_of_frame = false; + animations[i]->last_update_of_frame = false; animations[i] = NULL; } } @@ -133,16 +137,20 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize animation->current_frame = 0; animation->time_left_in_frame = animation->frame_lengths[0]; animation->need_update = true; + animation->first_update_of_frame = true; } else { animation->time_left_in_frame -= delta; while (animation->time_left_in_frame <= 0) { int left = animation->time_left_in_frame; if (animation->need_update) { animation->time_left_in_frame = 0; + animation->last_update_of_frame = true; (*animation->frame_functions[animation->current_frame])(animation, state); + animation->last_update_of_frame = false; } animation->current_frame++; animation->need_update = true; + animation->first_update_of_frame = true; if (animation->current_frame == animation->num_frames) { if (animation->loop) { animation->current_frame = 0; @@ -159,6 +167,7 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize } if (animation->need_update) { animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state); + animation->first_update_of_frame = false; } int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame; diff --git a/visualizer.h b/visualizer.h index 6a72fde1fd3..82d7a71d37a 100644 --- a/visualizer.h +++ b/visualizer.h @@ -95,6 +95,8 @@ typedef struct keyframe_animation_t { // keyframe update functions int current_frame; int time_left_in_frame; + bool first_update_of_frame; + bool last_update_of_frame; bool need_update; } keyframe_animation_t; From 891edbd533acdffec66416c59f4b6066e5e18aaa Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 16:19:31 +0300 Subject: [PATCH 076/551] Add function for running the next keyframe --- visualizer.c | 15 +++++++++++++++ visualizer.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/visualizer.c b/visualizer.c index 219d44cd3cd..2ec6e34f586 100644 --- a/visualizer.c +++ b/visualizer.c @@ -178,6 +178,21 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize return true; } +void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* state) { + int next_frame = animation->current_frame + 1; + if (next_frame == animation->num_frames) { + next_frame = 0; + } + keyframe_animation_t temp_animation = *animation; + temp_animation.current_frame = next_frame; + temp_animation.time_left_in_frame = animation->frame_lengths[next_frame]; + temp_animation.first_update_of_frame = true; + temp_animation.last_update_of_frame = false; + temp_animation.need_update = false; + visualizer_state_t temp_state = *state; + (*temp_animation.frame_functions[next_frame])(&temp_animation, &temp_state); +} + bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* state) { (void)animation; (void)state; diff --git a/visualizer.h b/visualizer.h index 82d7a71d37a..5375e0130fb 100644 --- a/visualizer.h +++ b/visualizer.h @@ -106,6 +106,9 @@ extern GDisplay* LED_DISPLAY; void start_keyframe_animation(keyframe_animation_t* animation); void stop_keyframe_animation(keyframe_animation_t* animation); +// This runs the next keyframe, but does not update the animation state +// Useful for crossfades for example +void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* state); // Some predefined keyframe functions that can be used by the user code // Does nothing, useful for adding delays From 0530ebb77d6961a7edc14f3a5b943165a8b52497 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 16:20:00 +0300 Subject: [PATCH 077/551] Add led crossfading --- led_test.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++----- led_test.h | 2 ++ 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/led_test.c b/led_test.c index 197550fdd67..8c0de604a2a 100644 --- a/led_test.c +++ b/led_test.c @@ -26,27 +26,41 @@ SOFTWARE. #include "math.h" keyframe_animation_t led_test_animation = { - .num_frames = 4, + .num_frames = 8, .loop = true, .frame_lengths = { - MS2ST(1000), - MS2ST(1000), - MS2ST(1000), - MS2ST(3000)}, + MS2ST(1000), // fade in + MS2ST(1000), // no op (leds on) + MS2ST(1000), // fade out + MS2ST(1000), // crossfade + MS2ST(3000), // left to rigt + MS2ST(1000), // crossfade + MS2ST(3000), // top_to_bottom + MS2ST(1000), // crossfade + }, .frame_functions = { keyframe_fade_in_all_leds, keyframe_no_operation, keyframe_fade_out_all_leds, + keyframe_led_crossfade, keyframe_led_left_to_right_gradient, + keyframe_led_crossfade, + keyframe_led_top_to_bottom_gradient, + keyframe_led_crossfade }, }; -static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint8_t from, uint8_t to) { +static uint8_t fade_led_color(keyframe_animation_t* animation, uint8_t from, uint8_t to) { int frame_length = animation->frame_lengths[animation->current_frame]; int current_pos = frame_length - animation->time_left_in_frame; int delta = to - from; int luma = (delta * current_pos) / frame_length; luma += from; + return luma; +} + +static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint8_t from, uint8_t to) { + uint8_t luma = fade_led_color(animation, from, to); color_t color = LUMA2COLOR(luma); gdispGClear(LED_DISPLAY, color); gdispGFlush(LED_DISPLAY); @@ -56,6 +70,9 @@ static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint #define NUM_ROWS 7 #define NUM_COLS 7 +static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS]; +static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; + static uint8_t compute_gradient_color(float t, float index, float num) { float d = fabs(index - t); if (d > num / 2.0f) { @@ -85,5 +102,44 @@ bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visual uint8_t color = compute_gradient_color(t, i, NUM_COLS); gdispGDrawLine(LED_DISPLAY, i, 0, i, NUM_ROWS - 1, LUMA2COLOR(color)); } + gdispGFlush(LED_DISPLAY); + return true; +} + +bool keyframe_led_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + int frame_length = animation->frame_lengths[animation->current_frame]; + int current_pos = frame_length - animation->time_left_in_frame; + float t = current_pos / frame_length; + for (int i=0; i< NUM_ROWS; i++) { + uint8_t color = compute_gradient_color(t, i, NUM_ROWS); + gdispGDrawLine(LED_DISPLAY, 0, i, NUM_COLS - 1, i, LUMA2COLOR(color)); + } + gdispGFlush(LED_DISPLAY); + return true; +} + +static void copy_current_led_state(uint8_t* dest) { + for (int i=0;ifirst_update_of_frame) { + copy_current_led_state(&crossfade_start_frame[0][0]); + run_next_keyframe(animation, state); + copy_current_led_state(&crossfade_end_frame[0][0]); + } + for (int i=0;i Date: Sun, 24 Apr 2016 16:26:53 +0300 Subject: [PATCH 078/551] LEDS are flushed automatically After running the animation, instead of having to do it manually. This avoids duplicate flushing, and better support for cross-fades. --- led_test.c | 4 ---- visualizer.c | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/led_test.c b/led_test.c index 8c0de604a2a..c987eca3802 100644 --- a/led_test.c +++ b/led_test.c @@ -63,7 +63,6 @@ static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint uint8_t luma = fade_led_color(animation, from, to); color_t color = LUMA2COLOR(luma); gdispGClear(LED_DISPLAY, color); - gdispGFlush(LED_DISPLAY); } // TODO: Should be customizable per keyboard @@ -102,7 +101,6 @@ bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visual uint8_t color = compute_gradient_color(t, i, NUM_COLS); gdispGDrawLine(LED_DISPLAY, i, 0, i, NUM_ROWS - 1, LUMA2COLOR(color)); } - gdispGFlush(LED_DISPLAY); return true; } @@ -115,7 +113,6 @@ bool keyframe_led_top_to_bottom_gradient(keyframe_animation_t* animation, visual uint8_t color = compute_gradient_color(t, i, NUM_ROWS); gdispGDrawLine(LED_DISPLAY, 0, i, NUM_COLS - 1, i, LUMA2COLOR(color)); } - gdispGFlush(LED_DISPLAY); return true; } @@ -140,6 +137,5 @@ bool keyframe_led_crossfade(keyframe_animation_t* animation, visualizer_state_t* gdispGDrawPixel(LED_DISPLAY, j, i, color); } } - gdispGFlush(LED_DISPLAY); return true; } diff --git a/visualizer.c b/visualizer.c index 2ec6e34f586..81ec8298fdf 100644 --- a/visualizer.c +++ b/visualizer.c @@ -127,6 +127,7 @@ void stop_all_keyframe_animations(void) { } static bool update_keyframe_animation(keyframe_animation_t* animation, visualizer_state_t* state, systime_t delta, systime_t* sleep_time) { + // TODO: Clean up this messy code dprintf("Animation frame%d, left %d, delta %d\n", animation->current_frame, animation->time_left_in_frame, delta); if (animation->current_frame == animation->num_frames) { @@ -394,6 +395,9 @@ static THD_FUNCTION(visualizerThread, arg) { update_keyframe_animation(animations[i], &state, delta, &sleep_time); } } +#ifdef LED_ENABLE + gdispGFlush(LED_DISPLAY); +#endif // The animation can enable the visualizer // And we might need to update the state when that happens // so don't sleep From 74baa4895c8efd409eb10eaf1e6cfc0e2677b45c Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 16:40:41 +0300 Subject: [PATCH 079/551] Run mirrored keyframes for led tests as well --- led_test.c | 34 ++++++++++++++++++++++++++++++---- led_test.h | 2 ++ visualizer.h | 4 ++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/led_test.c b/led_test.c index c987eca3802..ce6c2e68ecb 100644 --- a/led_test.c +++ b/led_test.c @@ -26,17 +26,24 @@ SOFTWARE. #include "math.h" keyframe_animation_t led_test_animation = { - .num_frames = 8, + .num_frames = 14, .loop = true, .frame_lengths = { MS2ST(1000), // fade in MS2ST(1000), // no op (leds on) MS2ST(1000), // fade out MS2ST(1000), // crossfade - MS2ST(3000), // left to rigt + MS2ST(3000), // left to rigt (outside in) MS2ST(1000), // crossfade MS2ST(3000), // top_to_bottom + 0, // mirror leds MS2ST(1000), // crossfade + MS2ST(3000), // left_to_right (mirrored, so inside out) + MS2ST(1000), // crossfade + MS2ST(3000), // top_to_bottom + 0, // normal leds + MS2ST(1000), // crossfade + }, .frame_functions = { keyframe_fade_in_all_leds, @@ -46,7 +53,13 @@ keyframe_animation_t led_test_animation = { keyframe_led_left_to_right_gradient, keyframe_led_crossfade, keyframe_led_top_to_bottom_gradient, - keyframe_led_crossfade + keyframe_mirror_led_orientation, + keyframe_led_crossfade, + keyframe_led_left_to_right_gradient, + keyframe_led_crossfade, + keyframe_led_top_to_bottom_gradient, + keyframe_normal_led_orientation, + keyframe_led_crossfade, }, }; @@ -123,7 +136,6 @@ static void copy_current_led_state(uint8_t* dest) { } } } - bool keyframe_led_crossfade(keyframe_animation_t* animation, visualizer_state_t* state) { (void)state; if (animation->first_update_of_frame) { @@ -139,3 +151,17 @@ bool keyframe_led_crossfade(keyframe_animation_t* animation, visualizer_state_t* } return true; } + +bool keyframe_mirror_led_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + (void)animation; + gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_180); + return true; +} + +bool keyframe_normal_led_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)state; + (void)animation; + gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0); + return true; +} diff --git a/led_test.h b/led_test.h index e14b25e7961..5e2325753ef 100644 --- a/led_test.h +++ b/led_test.h @@ -32,6 +32,8 @@ bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_stat bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state); bool keyframe_led_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state); bool keyframe_led_crossfade(keyframe_animation_t* animation, visualizer_state_t* state); +bool keyframe_mirror_led_orientation(keyframe_animation_t* animation, visualizer_state_t* state); +bool keyframe_normal_led_orientation(keyframe_animation_t* animation, visualizer_state_t* state); extern keyframe_animation_t led_test_animation; diff --git a/visualizer.h b/visualizer.h index 5375e0130fb..8a2772c6dab 100644 --- a/visualizer.h +++ b/visualizer.h @@ -45,8 +45,8 @@ void visualizer_suspend(void); // This should be called when the keyboard wakes up from suspend state void visualizer_resume(void); -// If you need support for more than 8 keyframes per animation, you can change this -#define MAX_VISUALIZER_KEY_FRAMES 8 +// If you need support for more than 16 keyframes per animation, you can change this +#define MAX_VISUALIZER_KEY_FRAMES 16 struct keyframe_animation_t; From 6313cfd5597ffce0c70a472aa87ed68b6daa4419 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 24 Apr 2016 17:44:11 +0300 Subject: [PATCH 080/551] Fix some makefile issues, and symbol issues --- visualizer.c | 8 ++++---- visualizer.mk | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/visualizer.c b/visualizer.c index 81ec8298fdf..0684a26d8ff 100644 --- a/visualizer.c +++ b/visualizer.c @@ -77,8 +77,8 @@ static remote_object_t* remote_objects[] = { #endif -GDisplay* LCDDisplay; -GDisplay* LEDDisplay; +GDisplay* LCD_DISPLAY = 0; +GDisplay* LED_DISPLAY = 0; void start_keyframe_animation(keyframe_animation_t* animation) { @@ -437,8 +437,8 @@ void visualizer_init(void) { add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) ); #endif // TODO: Make sure these works when either of these are disabled - LCDDisplay = gdispGetDisplay(0); - LEDDisplay = gdispGetDisplay(1); + LCD_DISPLAY = gdispGetDisplay(0); + LED_DISPLAY = gdispGetDisplay(1); // We are using a low priority thread, the idea is to have it run only diff --git a/visualizer.mk b/visualizer.mk index 96ca468e86a..5cc199cf48b 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -21,13 +21,13 @@ # SOFTWARE. GFXLIB = $(VISUALIZER_DIR)/ugfx -SRC += $(GFXSRC) $(VISUALIZER_DIR)/visualizer.c +SRC += $(VISUALIZER_DIR)/visualizer.c UINCDIR += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_ENABLE -include $(GFXLIB)/gfx.mk UDEFS += -DLCD_ENABLE ULIBS += -lm +USE_UGFX = yes endif ifdef LCD_BACKLIGHT_ENABLE @@ -39,6 +39,12 @@ endif ifdef LED_ENABLE SRC += $(VISUALIZER_DIR)/led_test.c UDEFS += -DLED_ENABLE +USE_UGFX = yes +endif + +ifdef USE_UGFX +include $(GFXLIB)/gfx.mk +SRC += $(GFXSRC) endif ifndef VISUALIZER_USER From f0c8e7c495af2aad476f4c428b700ed26188a8e5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Apr 2016 22:45:41 +0300 Subject: [PATCH 081/551] Fix a few led test animation issues --- led_test.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/led_test.c b/led_test.c index ce6c2e68ecb..ed65a0baa5f 100644 --- a/led_test.c +++ b/led_test.c @@ -63,7 +63,7 @@ keyframe_animation_t led_test_animation = { }, }; -static uint8_t fade_led_color(keyframe_animation_t* animation, uint8_t from, uint8_t to) { +static uint8_t fade_led_color(keyframe_animation_t* animation, int from, int to) { int frame_length = animation->frame_lengths[animation->current_frame]; int current_pos = frame_length - animation->time_left_in_frame; int delta = to - from; @@ -107,8 +107,8 @@ bool keyframe_fade_out_all_leds(keyframe_animation_t* animation, visualizer_stat bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { (void)state; - int frame_length = animation->frame_lengths[animation->current_frame]; - int current_pos = frame_length - animation->time_left_in_frame; + float frame_length = animation->frame_lengths[animation->current_frame]; + float current_pos = frame_length - animation->time_left_in_frame; float t = current_pos / frame_length; for (int i=0; i< NUM_COLS; i++) { uint8_t color = compute_gradient_color(t, i, NUM_COLS); @@ -119,8 +119,8 @@ bool keyframe_led_left_to_right_gradient(keyframe_animation_t* animation, visual bool keyframe_led_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { (void)state; - int frame_length = animation->frame_lengths[animation->current_frame]; - int current_pos = frame_length - animation->time_left_in_frame; + float frame_length = animation->frame_lengths[animation->current_frame]; + float current_pos = frame_length - animation->time_left_in_frame; float t = current_pos / frame_length; for (int i=0; i< NUM_ROWS; i++) { uint8_t color = compute_gradient_color(t, i, NUM_ROWS); @@ -156,12 +156,12 @@ bool keyframe_mirror_led_orientation(keyframe_animation_t* animation, visualizer (void)state; (void)animation; gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_180); - return true; + return false; } bool keyframe_normal_led_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { (void)state; (void)animation; gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0); - return true; + return false; } From 25382cb6f21b6136b0f490a618ce8d494ca5cd38 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 11 May 2016 22:06:26 +0300 Subject: [PATCH 082/551] Fix compute_gradient_color --- led_test.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/led_test.c b/led_test.c index ed65a0baa5f..d358ef81eb6 100644 --- a/led_test.c +++ b/led_test.c @@ -86,10 +86,13 @@ static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS]; static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; static uint8_t compute_gradient_color(float t, float index, float num) { - float d = fabs(index - t); - if (d > num / 2.0f) { + const float target = t * (num - 1.0f); + const float half_num = num / 2.0f; + float d = fabs(index - target); + if (d > half_num) { d = num - d; } + d = 1.0f - (d / half_num); return (uint8_t)(255.0f * d); } From 3b422d2ac4340ecea6b2fc2f3a855581c737faf8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 11:36:39 +0300 Subject: [PATCH 083/551] Add debug print for serial link errors This is disabled by default --- serial_link/system/system.c | 52 ++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index f74d8c9e9eb..5a47d8b83c0 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -58,6 +58,8 @@ static SerialConfig config = { .sc_speed = SERIAL_LINK_BAUD }; +//#define DEBUG_LINK_ERRORS + static uint32_t read_from_serial(SerialDriver* driver, uint8_t link) { const uint32_t buffer_size = 16; uint8_t buffer[buffer_size]; @@ -71,6 +73,37 @@ static uint32_t read_from_serial(SerialDriver* driver, uint8_t link) { return bytes_read; } +static void print_error(char* str, eventflags_t flags, SerialDriver* driver) { +#ifdef DEBUG_LINK_ERRORS + if (flags & SD_PARITY_ERROR) { + print(str); + print(" Parity error\n"); + } + if (flags & SD_FRAMING_ERROR) { + print(str); + print(" Framing error\n"); + } + if (flags & SD_OVERRUN_ERROR) { + print(str); + uint32_t size = qSpaceI(&(driver->iqueue)); + xprintf(" Overrun error, queue size %d\n", size); + + } + if (flags & SD_NOISE_ERROR) { + print(str); + print(" Noise error\n"); + } + if (flags & SD_BREAK_DETECTED) { + print(str); + print(" Break detected\n"); + } +#else + (void)str; + (void)flags; + (void)driver; +#endif +} + // TODO: Optimize the stack size, this is probably way too big static THD_WORKING_AREA(serialThreadStack, 1024); static THD_FUNCTION(serialThread, arg) { @@ -79,20 +112,33 @@ static THD_FUNCTION(serialThread, arg) { event_listener_t sd1_listener; event_listener_t sd2_listener; chEvtRegister(&new_data_event, &new_data_listener, 0); + eventflags_t events = CHN_INPUT_AVAILABLE + | SD_PARITY_ERROR | SD_FRAMING_ERROR | SD_OVERRUN_ERROR | SD_NOISE_ERROR | SD_BREAK_DETECTED; chEvtRegisterMaskWithFlags(chnGetEventSource(&SD1), &sd1_listener, EVENT_MASK(1), - CHN_INPUT_AVAILABLE); + events); chEvtRegisterMaskWithFlags(chnGetEventSource(&SD2), &sd2_listener, EVENT_MASK(2), - CHN_INPUT_AVAILABLE); + events); bool need_wait = false; bool is_master = false; while(true) { + eventflags_t flags1 = 0; + eventflags_t flags2 = 0; if (need_wait) { - chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000)); + eventmask_t mask = chEvtWaitAnyTimeout(ALL_EVENTS, MS2ST(1000)); + if (mask & EVENT_MASK(1)) { + flags1 = chEvtGetAndClearFlags(&sd1_listener); + print_error("DOWNLINK", flags1, &SD1); + } + if (mask & EVENT_MASK(2)) { + flags2 = chEvtGetAndClearFlags(&sd2_listener); + print_error("UPLINK", flags2, &SD2); + } } + // Always stay as master, even if the USB goes into sleep mode is_master |= usbGetDriverStateI(&USBD1) == USB_ACTIVE; router_set_master(is_master); From a08bcea9983cc97fb2f567c303622495f19a5a1e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 11:58:20 +0300 Subject: [PATCH 084/551] Don't accept remote objects with the wrong size Fixes memory corruption when the crc happens to match, but the size doesn't. --- serial_link/protocol/transport.c | 30 ++++++++++---------- serial_link/tests/transport_tests.c | 43 +++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/serial_link/protocol/transport.c b/serial_link/protocol/transport.c index efc00e79e0d..f418d11ceb6 100644 --- a/serial_link/protocol/transport.c +++ b/serial_link/protocol/transport.c @@ -73,21 +73,23 @@ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) { uint8_t id = data[size-1]; if (id < num_remote_objects) { remote_object_t* obj = remote_objects[id]; - uint8_t* start; - if (obj->object_type == MASTER_TO_ALL_SLAVES) { - start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + if (obj->object_size == size - 1) { + uint8_t* start; + if (obj->object_type == MASTER_TO_ALL_SLAVES) { + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + } + else if(obj->object_type == SLAVE_TO_MASTER) { + start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); + start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); + } + else { + start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size); + } + triple_buffer_object_t* tb = (triple_buffer_object_t*)start; + void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); + memcpy(ptr, data, size - 1); + triple_buffer_end_write_internal(tb); } - else if(obj->object_type == SLAVE_TO_MASTER) { - start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size); - start += (from - 1) * REMOTE_OBJECT_SIZE(obj->object_size); - } - else { - start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size); - } - triple_buffer_object_t* tb = (triple_buffer_object_t*)start; - void* ptr = triple_buffer_begin_write_internal(obj->object_size, tb); - memcpy(ptr, data, size -1); - triple_buffer_end_write_internal(tb); } } diff --git a/serial_link/tests/transport_tests.c b/serial_link/tests/transport_tests.c index 02a7a10425b..358e1b9fd45 100644 --- a/serial_link/tests/transport_tests.c +++ b/serial_link/tests/transport_tests.c @@ -123,3 +123,46 @@ Ensure(Transport, writes_from_master_to_single_slave) { assert_that(obj2, is_not_equal_to(NULL)); assert_that(obj2->test, is_equal_to(7)); } + +Ensure(Transport, ignores_object_with_invalid_id) { + update_transport(); + test_object1_t* obj = begin_write_master_to_single_slave(3); + obj->test = 7; + expect(signal_data_written); + end_write_master_to_single_slave(3); + expect(router_send_frame, + when(destination, is_equal_to(4))); + update_transport(); + sent_data[sent_data_size - 1] = 44; + transport_recv_frame(0, sent_data, sent_data_size); + test_object1_t* obj2 = read_master_to_single_slave(); + assert_that(obj2, is_equal_to(NULL)); +} + +Ensure(Transport, ignores_object_with_size_too_small) { + update_transport(); + test_object1_t* obj = begin_write_master_to_slave(); + obj->test = 7; + expect(signal_data_written); + end_write_master_to_slave(); + expect(router_send_frame); + update_transport(); + sent_data[sent_data_size - 2] = 0; + transport_recv_frame(0, sent_data, sent_data_size - 1); + test_object1_t* obj2 = read_master_to_slave(); + assert_that(obj2, is_equal_to(NULL)); +} + +Ensure(Transport, ignores_object_with_size_too_big) { + update_transport(); + test_object1_t* obj = begin_write_master_to_slave(); + obj->test = 7; + expect(signal_data_written); + end_write_master_to_slave(); + expect(router_send_frame); + update_transport(); + sent_data[sent_data_size + 21] = 0; + transport_recv_frame(0, sent_data, sent_data_size + 22); + test_object1_t* obj2 = read_master_to_slave(); + assert_that(obj2, is_equal_to(NULL)); +} From b4ab61171e83eeca82fbc1930fcaab175b45c656 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 12:59:50 +0300 Subject: [PATCH 085/551] Configurable serializer thread priority --- serial_link/system/system.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/serial_link/system/system.c b/serial_link/system/system.c index 5a47d8b83c0..f5af9baa74f 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/system.c @@ -32,6 +32,7 @@ SOFTWARE. #include "matrix.h" #include #include "print.h" +#include "config.h" static event_source_t new_data_event; static bool serial_link_connected; @@ -50,10 +51,15 @@ host_driver_t serial_driver = { send_consumer }; +// Define these in your Config.h file #ifndef SERIAL_LINK_BAUD #error "Serial link baud is not set" #endif +#ifndef SERIAL_LINK_THREAD_PRIORITY +#error "Serial link thread priority not set" +#endif + static SerialConfig config = { .sc_speed = SERIAL_LINK_BAUD }; @@ -184,7 +190,7 @@ void init_serial_link(void) { sdStart(&SD2, &config); chEvtObjectInit(&new_data_event); (void)chThdCreateStatic(serialThreadStack, sizeof(serialThreadStack), - LOWPRIO, serialThread, NULL); + SERIAL_LINK_THREAD_PRIORITY, serialThread, NULL); } void matrix_set_remote(matrix_row_t* rows, uint8_t index); From a0297a892ee1fc571cd9bdc447d2c2726a210629 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 13:38:59 +0300 Subject: [PATCH 086/551] Rename system to serial_link Also combined driver.h with serial_link.h --- serial_link/protocol/transport.h | 2 +- serial_link/protocol/triple_buffered_object.c | 2 +- serial_link/system/driver.h | 36 ------------------- .../system/{system.c => serial_link.c} | 3 +- .../system/{system.h => serial_link.h} | 11 ++++-- 5 files changed, 12 insertions(+), 42 deletions(-) delete mode 100644 serial_link/system/driver.h rename serial_link/system/{system.c => serial_link.c} (98%) rename serial_link/system/{system.h => serial_link.h} (84%) diff --git a/serial_link/protocol/transport.h b/serial_link/protocol/transport.h index e518aaa6eb7..9a052d88095 100644 --- a/serial_link/protocol/transport.h +++ b/serial_link/protocol/transport.h @@ -26,7 +26,7 @@ SOFTWARE. #define SERIAL_LINK_TRANSPORT_H #include "serial_link/protocol/triple_buffered_object.h" -#include "serial_link/system/system.h" +#include "serial_link/system/serial_link.h" #define NUM_SLAVES 8 #define LOCAL_OBJECT_EXTRA 16 diff --git a/serial_link/protocol/triple_buffered_object.c b/serial_link/protocol/triple_buffered_object.c index c6bf28af0aa..e3e8989d30b 100644 --- a/serial_link/protocol/triple_buffered_object.c +++ b/serial_link/protocol/triple_buffered_object.c @@ -23,7 +23,7 @@ SOFTWARE. */ #include "serial_link/protocol/triple_buffered_object.h" -#include "serial_link/system/system.h" +#include "serial_link/system/serial_link.h" #include #include diff --git a/serial_link/system/driver.h b/serial_link/system/driver.h deleted file mode 100644 index 76e2d682c80..00000000000 --- a/serial_link/system/driver.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 Fred Sundvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef SERIAL_LINK_DRIVER_H -#define SERIAL_LINK_DRIVER_H - -#include "host_driver.h" - -void init_serial_link(void); -void init_serial_link_hal(void); -bool is_serial_link_connected(void); -host_driver_t* get_serial_link_driver(void); -void serial_link_update(void); - -#endif diff --git a/serial_link/system/system.c b/serial_link/system/serial_link.c similarity index 98% rename from serial_link/system/system.c rename to serial_link/system/serial_link.c index f5af9baa74f..27e61a9e976 100644 --- a/serial_link/system/system.c +++ b/serial_link/system/serial_link.c @@ -23,8 +23,7 @@ SOFTWARE. */ #include "report.h" #include "host_driver.h" -#include "serial_link/system/system.h" -#include "serial_link/system/driver.h" +#include "serial_link/system/serial_link.h" #include "hal.h" #include "serial_link/protocol/byte_stuffer.h" #include "serial_link/protocol/transport.h" diff --git a/serial_link/system/system.h b/serial_link/system/serial_link.h similarity index 84% rename from serial_link/system/system.h rename to serial_link/system/serial_link.h index fcc27425e18..132cb657ffd 100644 --- a/serial_link/system/system.h +++ b/serial_link/system/serial_link.h @@ -22,10 +22,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef SERIAL_LINK_SYSTEM_H -#define SERIAL_LINK_SYSTEM_H +#ifndef SERIAL_LINK_H +#define SERIAL_LINK_H +#include "host_driver.h" +#include +void init_serial_link(void); +void init_serial_link_hal(void); +bool is_serial_link_connected(void); +host_driver_t* get_serial_link_driver(void); +void serial_link_update(void); #if defined(PROTOCOL_CHIBIOS) #include "ch.h" From 5651be7a2f50857b1ddd120a4b0184a28cdca4aa Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 13:00:27 +0300 Subject: [PATCH 087/551] Configurable visualizer thread priority --- visualizer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/visualizer.c b/visualizer.c index 867a1d33470..4c471149906 100644 --- a/visualizer.c +++ b/visualizer.c @@ -24,6 +24,7 @@ SOFTWARE. #include "visualizer.h" #include "ch.h" +#include "config.h" #include #ifdef LCD_ENABLE @@ -47,6 +48,11 @@ SOFTWARE. #include "serial_link/system/driver.h" #endif +// Define this in config.h +#ifndef VISUALIZER_THREAD_PRIORITY +#define "Visualizer thread priority not defined" +#endif + static visualizer_keyboard_status_t current_status = { .layer = 0xFFFFFFFF, @@ -409,7 +415,7 @@ void visualizer_init(void) { // when the main thread is sleeping during the matrix scanning chEvtObjectInit(&layer_changed_event); (void)chThdCreateStatic(visualizerThreadStack, sizeof(visualizerThreadStack), - LOWPRIO, visualizerThread, NULL); + VISUALIZER_THREAD_PRIORITY, visualizerThread, NULL); } void update_status(bool changed) { From 81f89cc6725d4e513f85ed1c841d25d0ac64bfe3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 13:39:58 +0300 Subject: [PATCH 088/551] Update include dir for new serial_link include --- visualizer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visualizer.c b/visualizer.c index 4c471149906..605be305941 100644 --- a/visualizer.c +++ b/visualizer.c @@ -45,7 +45,7 @@ SOFTWARE. #ifdef USE_SERIAL_LINK #include "serial_link/protocol/transport.h" -#include "serial_link/system/driver.h" +#include "serial_link/system/serial_link.h" #endif // Define this in config.h From a20d513e3cdacbf6e0e70a80402497ad10166434 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 15 May 2016 19:28:15 +0300 Subject: [PATCH 089/551] Add function to check if the keyboard is a master --- serial_link/system/serial_link.c | 6 +++++- serial_link/system/serial_link.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/serial_link/system/serial_link.c b/serial_link/system/serial_link.c index 27e61a9e976..75c7e77a765 100644 --- a/serial_link/system/serial_link.c +++ b/serial_link/system/serial_link.c @@ -35,6 +35,7 @@ SOFTWARE. static event_source_t new_data_event; static bool serial_link_connected; +static bool is_master = false; static uint8_t keyboard_leds(void); static void send_keyboard(report_keyboard_t *report); @@ -109,6 +110,10 @@ static void print_error(char* str, eventflags_t flags, SerialDriver* driver) { #endif } +bool is_serial_link_master(void) { + return is_master; +} + // TODO: Optimize the stack size, this is probably way too big static THD_WORKING_AREA(serialThreadStack, 1024); static THD_FUNCTION(serialThread, arg) { @@ -128,7 +133,6 @@ static THD_FUNCTION(serialThread, arg) { EVENT_MASK(2), events); bool need_wait = false; - bool is_master = false; while(true) { eventflags_t flags1 = 0; eventflags_t flags2 = 0; diff --git a/serial_link/system/serial_link.h b/serial_link/system/serial_link.h index 132cb657ffd..351e03877b0 100644 --- a/serial_link/system/serial_link.h +++ b/serial_link/system/serial_link.h @@ -31,6 +31,7 @@ SOFTWARE. void init_serial_link(void); void init_serial_link_hal(void); bool is_serial_link_connected(void); +bool is_serial_link_master(void); host_driver_t* get_serial_link_driver(void); void serial_link_update(void); From 15bdef3ee92e6809ec5d0f25901f4a490cd91b58 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 16 May 2016 09:45:39 +0300 Subject: [PATCH 090/551] Makefile changes to support emulator build --- ugfx | 2 +- visualizer.mk | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ugfx b/ugfx index e221a690616..314a066d11f 160000 --- a/ugfx +++ b/ugfx @@ -1 +1 @@ -Subproject commit e221a690616e20f87e0b0088baffdbd5427be862 +Subproject commit 314a066d11f09d295d42054a0b53fa1a95c0ba0a diff --git a/visualizer.mk b/visualizer.mk index 5cc199cf48b..c51f8ba5d47 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -21,7 +21,9 @@ # SOFTWARE. GFXLIB = $(VISUALIZER_DIR)/ugfx +ifndef EMULATOR SRC += $(VISUALIZER_DIR)/visualizer.c +endif UINCDIR += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_ENABLE @@ -45,9 +47,13 @@ endif ifdef USE_UGFX include $(GFXLIB)/gfx.mk SRC += $(GFXSRC) +UDEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) +ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS))) endif ifndef VISUALIZER_USER +ifndef EMULATOR VISUALIZER_USER = visualizer_user.c endif +endif SRC += $(VISUALIZER_USER) \ No newline at end of file From d79e94adb1182ae867df0cc7621ef3d44d213bbc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 17 May 2016 09:35:02 +0300 Subject: [PATCH 091/551] Use ugfx API instead of chibios --- ugfx | 2 +- visualizer.c | 34 ++++++++++++++++++---------------- visualizer.mk | 12 +++++++++--- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/ugfx b/ugfx index 314a066d11f..7d7eeef0ad0 160000 --- a/ugfx +++ b/ugfx @@ -1 +1 @@ -Subproject commit 314a066d11f09d295d42054a0b53fa1a95c0ba0a +Subproject commit 7d7eeef0ad0f1b28f4fb86ad931cb6774c7b9e81 diff --git a/visualizer.c b/visualizer.c index 579837edcdd..ea84546fb68 100644 --- a/visualizer.c +++ b/visualizer.c @@ -23,7 +23,6 @@ SOFTWARE. */ #include "visualizer.h" -#include "ch.h" #include "config.h" #include @@ -68,7 +67,7 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa status1->suspended == status2->suspended; } -static event_source_t layer_changed_event; +static GSourceHandle layer_changed_event; static bool visualizer_enabled = false; #define MAX_SIMULTANEOUS_ANIMATIONS 4 @@ -132,7 +131,7 @@ void stop_all_keyframe_animations(void) { } } -static bool update_keyframe_animation(keyframe_animation_t* animation, visualizer_state_t* state, systime_t delta, systime_t* sleep_time) { +static bool update_keyframe_animation(keyframe_animation_t* animation, visualizer_state_t* state, systemticks_t delta, systemticks_t* sleep_time) { // TODO: Clean up this messy code dprintf("Animation frame%d, left %d, delta %d\n", animation->current_frame, animation->time_left_in_frame, delta); @@ -331,12 +330,13 @@ bool enable_visualization(keyframe_animation_t* animation, visualizer_state_t* s } // TODO: Optimize the stack size, this is probably way too big -static THD_WORKING_AREA(visualizerThreadStack, 1024); -static THD_FUNCTION(visualizerThread, arg) { +static DECLARE_THREAD_STACK(visualizerThreadStack, 1024); +static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { (void)arg; - event_listener_t event_listener; - chEvtRegister(&layer_changed_event, &event_listener, 0); + GListener event_listener; + geventListenerInit(&event_listener); + geventAttachSource(&event_listener, layer_changed_event, 0); visualizer_keyboard_status_t initial_status = { .default_layer = 0xFFFFFFFF, @@ -363,12 +363,12 @@ static THD_FUNCTION(visualizerThread, arg) { LCD_INT(state.current_lcd_color)); #endif - systime_t sleep_time = TIME_INFINITE; - systime_t current_time = chVTGetSystemTimeX(); + systemticks_t sleep_time = TIME_INFINITE; + systemticks_t current_time = gfxSystemTicks(); while(true) { - systime_t new_time = chVTGetSystemTimeX(); - systime_t delta = new_time - current_time; + systemticks_t new_time = gfxSystemTicks(); + systemticks_t delta = new_time - current_time; current_time = new_time; bool enabled = visualizer_enabled; if (!same_status(&state.status, ¤t_status)) { @@ -411,7 +411,7 @@ static THD_FUNCTION(visualizerThread, arg) { sleep_time = 0; } - systime_t after_update = chVTGetSystemTimeX(); + systemticks_t after_update = gfxSystemTicks(); unsigned update_delta = after_update - current_time; if (sleep_time != TIME_INFINITE) { if (sleep_time > update_delta) { @@ -422,12 +422,14 @@ static THD_FUNCTION(visualizerThread, arg) { } } dprintf("Update took %d, last delta %d, sleep_time %d\n", update_delta, delta, sleep_time); - chEvtWaitOneTimeout(EVENT_MASK(0), sleep_time); + geventEventWait(&event_listener, sleep_time); } #ifdef LCD_ENABLE gdispCloseFont(state.font_fixed5x8); gdispCloseFont(state.font_dejavusansbold12); #endif + + return 0; } void visualizer_init(void) { @@ -449,14 +451,14 @@ void visualizer_init(void) { // We are using a low priority thread, the idea is to have it run only // when the main thread is sleeping during the matrix scanning - chEvtObjectInit(&layer_changed_event); - (void)chThdCreateStatic(visualizerThreadStack, sizeof(visualizerThreadStack), + gfxThreadCreate(visualizerThreadStack, sizeof(visualizerThreadStack), VISUALIZER_THREAD_PRIORITY, visualizerThread, NULL); } void update_status(bool changed) { if (changed) { - chEvtBroadcast(&layer_changed_event); + GSourceListener* listener = geventGetSourceListener(layer_changed_event, NULL); + geventSendEvent(listener); } #ifdef USE_SERIAL_LINK static systime_t last_update = 0; diff --git a/visualizer.mk b/visualizer.mk index c51f8ba5d47..67882932904 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -21,9 +21,7 @@ # SOFTWARE. GFXLIB = $(VISUALIZER_DIR)/ugfx -ifndef EMULATOR SRC += $(VISUALIZER_DIR)/visualizer.c -endif UINCDIR += $(GFXINC) $(VISUALIZER_DIR) ifdef LCD_ENABLE @@ -33,13 +31,17 @@ USE_UGFX = yes endif ifdef LCD_BACKLIGHT_ENABLE +ifndef EMULATOR SRC += $(VISUALIZER_DIR)/lcd_backlight.c SRC += lcd_backlight_hal.c +endif UDEFS += -DLCD_BACKLIGHT_ENABLE endif ifdef LED_ENABLE +ifndef EMULATOR SRC += $(VISUALIZER_DIR)/led_test.c +endif UDEFS += -DLED_ENABLE USE_UGFX = yes endif @@ -56,4 +58,8 @@ ifndef EMULATOR VISUALIZER_USER = visualizer_user.c endif endif -SRC += $(VISUALIZER_USER) \ No newline at end of file +SRC += $(VISUALIZER_USER) + +ifdef EMULATOR +UINCDIR += $(TMK_DIR)/common +endif \ No newline at end of file From 4e89732617454a600189242d417f5e2ba0855683 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 17 May 2016 09:45:05 +0300 Subject: [PATCH 092/551] Enable and fix compilation of more files --- led_test.c | 24 ++++++++++++------------ visualizer.mk | 6 +----- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/led_test.c b/led_test.c index d358ef81eb6..6d3f3b2ed7e 100644 --- a/led_test.c +++ b/led_test.c @@ -29,20 +29,20 @@ keyframe_animation_t led_test_animation = { .num_frames = 14, .loop = true, .frame_lengths = { - MS2ST(1000), // fade in - MS2ST(1000), // no op (leds on) - MS2ST(1000), // fade out - MS2ST(1000), // crossfade - MS2ST(3000), // left to rigt (outside in) - MS2ST(1000), // crossfade - MS2ST(3000), // top_to_bottom + gfxMillisecondsToTicks(1000), // fade in + gfxMillisecondsToTicks(1000), // no op (leds on) + gfxMillisecondsToTicks(1000), // fade out + gfxMillisecondsToTicks(1000), // crossfade + gfxMillisecondsToTicks(3000), // left to rigt (outside in) + gfxMillisecondsToTicks(1000), // crossfade + gfxMillisecondsToTicks(3000), // top_to_bottom 0, // mirror leds - MS2ST(1000), // crossfade - MS2ST(3000), // left_to_right (mirrored, so inside out) - MS2ST(1000), // crossfade - MS2ST(3000), // top_to_bottom + gfxMillisecondsToTicks(1000), // crossfade + gfxMillisecondsToTicks(3000), // left_to_right (mirrored, so inside out) + gfxMillisecondsToTicks(1000), // crossfade + gfxMillisecondsToTicks(3000), // top_to_bottom 0, // normal leds - MS2ST(1000), // crossfade + gfxMillisecondsToTicks(1000), // crossfade }, .frame_functions = { diff --git a/visualizer.mk b/visualizer.mk index 67882932904..56525ffd939 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -31,17 +31,15 @@ USE_UGFX = yes endif ifdef LCD_BACKLIGHT_ENABLE -ifndef EMULATOR SRC += $(VISUALIZER_DIR)/lcd_backlight.c +ifndef EMULATOR SRC += lcd_backlight_hal.c endif UDEFS += -DLCD_BACKLIGHT_ENABLE endif ifdef LED_ENABLE -ifndef EMULATOR SRC += $(VISUALIZER_DIR)/led_test.c -endif UDEFS += -DLED_ENABLE USE_UGFX = yes endif @@ -54,10 +52,8 @@ ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS))) endif ifndef VISUALIZER_USER -ifndef EMULATOR VISUALIZER_USER = visualizer_user.c endif -endif SRC += $(VISUALIZER_USER) ifdef EMULATOR From 15300cb681f74672547aa5e53d165ac748d43a17 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 17 May 2016 09:51:27 +0300 Subject: [PATCH 093/551] Build lcd_backlight_hal_emulator.c When the emulator is set, instead of the lcd_backlight_hal.c file. --- visualizer.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/visualizer.mk b/visualizer.mk index 56525ffd939..3e361491c92 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -34,6 +34,8 @@ ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c ifndef EMULATOR SRC += lcd_backlight_hal.c +else +SRC += lcd_backlight_hal_emulator.c endif UDEFS += -DLCD_BACKLIGHT_ENABLE endif From 07e412c53829c66e948eb147873a04cd27b0771b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 17 May 2016 11:21:38 +0300 Subject: [PATCH 094/551] Fix crash when event listener not created --- visualizer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/visualizer.c b/visualizer.c index ea84546fb68..ff99e960fda 100644 --- a/visualizer.c +++ b/visualizer.c @@ -458,7 +458,9 @@ void visualizer_init(void) { void update_status(bool changed) { if (changed) { GSourceListener* listener = geventGetSourceListener(layer_changed_event, NULL); - geventSendEvent(listener); + if (listener) { + geventSendEvent(listener); + } } #ifdef USE_SERIAL_LINK static systime_t last_update = 0; From fa8feb21a4709dba552df4a96205c50a319f5e3b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 18 May 2016 08:40:36 +0300 Subject: [PATCH 095/551] Add custom led and lcd display support --- visualizer.c | 18 +++++++++++++++--- visualizer.h | 5 +++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/visualizer.c b/visualizer.c index ff99e960fda..bbb00debcf2 100644 --- a/visualizer.c +++ b/visualizer.c @@ -85,6 +85,15 @@ static remote_object_t* remote_objects[] = { GDisplay* LCD_DISPLAY = 0; GDisplay* LED_DISPLAY = 0; +__attribute__((weak)) +GDisplay* get_lcd_display(void) { + return gdispGetDisplay(0); +} + +__attribute__((weak)) +GDisplay* get_led_display(void) { + return gdispGetDisplay(1); +} void start_keyframe_animation(keyframe_animation_t* animation) { animation->current_frame = -1; @@ -444,10 +453,13 @@ void visualizer_init(void) { #ifdef USE_SERIAL_LINK add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) ); #endif - // TODO: Make sure these works when either of these are disabled - LCD_DISPLAY = gdispGetDisplay(0); - LED_DISPLAY = gdispGetDisplay(1); +#ifdef LCD_ENABLE + LCD_DISPLAY = get_lcd_display(); +#endif +#ifdef LED_ENABLE + LED_DISPLAY = get_led_display(); +#endif // We are using a low priority thread, the idea is to have it run only // when the main thread is sleeping during the matrix scanning diff --git a/visualizer.h b/visualizer.h index 8a2772c6dab..4d6a61dda3d 100644 --- a/visualizer.h +++ b/visualizer.h @@ -45,6 +45,11 @@ void visualizer_suspend(void); // This should be called when the keyboard wakes up from suspend state void visualizer_resume(void); +// These functions are week, so they can be overridden by the keyboard +// if needed +GDisplay* get_lcd_display(void); +GDisplay* get_led_display(void); + // If you need support for more than 16 keyframes per animation, you can change this #define MAX_VISUALIZER_KEY_FRAMES 16 From 94519e387a85e3b4ab72bd7d837ff590cc690eb9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 18 May 2016 09:03:42 +0300 Subject: [PATCH 096/551] Add callback function for emulator drawing --- visualizer.c | 4 ++++ visualizer.h | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/visualizer.c b/visualizer.c index bbb00debcf2..607a64566aa 100644 --- a/visualizer.c +++ b/visualizer.c @@ -413,6 +413,10 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { #ifdef LED_ENABLE gdispGFlush(LED_DISPLAY); #endif + +#if EMULATOR + draw_emulator(); +#endif // The animation can enable the visualizer // And we might need to update the state when that happens // so don't sleep diff --git a/visualizer.h b/visualizer.h index 4d6a61dda3d..a3828e35f43 100644 --- a/visualizer.h +++ b/visualizer.h @@ -50,6 +50,11 @@ void visualizer_resume(void); GDisplay* get_lcd_display(void); GDisplay* get_led_display(void); +// For emulator builds, this function need to be implemented +#if EMULATOR +void draw_emulator(void); +#endif + // If you need support for more than 16 keyframes per animation, you can change this #define MAX_VISUALIZER_KEY_FRAMES 16 @@ -134,7 +139,7 @@ bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualiz // directly from the initalize_user_visualizer function (the animation can be null) bool enable_visualization(keyframe_animation_t* animation, visualizer_state_t* state); -// These two functions have to be implemented by the user +// These functions have to be implemented by the user void initialize_user_visualizer(visualizer_state_t* state); void update_user_visualizer_state(visualizer_state_t* state); void user_visualizer_suspend(visualizer_state_t* state); From 8090fb82ff532308c8446cc85fe0417b94cd5042 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Tue, 24 May 2016 02:26:16 -0500 Subject: [PATCH 097/551] Initial commit of keymaps/maz with default config --- keyboard/ergodox_ez/keymaps/maz/default.png | Bin 0 -> 193672 bytes .../keymaps/maz/default_highres.png | Bin 0 -> 1459389 bytes keyboard/ergodox_ez/keymaps/maz/keymap.c | 184 ++++++++++++++++++ keyboard/ergodox_ez/keymaps/maz/readme.md | 10 + 4 files changed, 194 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/maz/default.png create mode 100644 keyboard/ergodox_ez/keymaps/maz/default_highres.png create mode 100644 keyboard/ergodox_ez/keymaps/maz/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/maz/readme.md diff --git a/keyboard/ergodox_ez/keymaps/maz/default.png b/keyboard/ergodox_ez/keymaps/maz/default.png new file mode 100644 index 0000000000000000000000000000000000000000..6575f7b5e378d7bce55f6a23e3e9327f9894526f GIT binary patch literal 193672 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 EADQ!4(f|Me literal 0 HcmV?d00001 diff --git a/keyboard/ergodox_ez/keymaps/maz/default_highres.png b/keyboard/ergodox_ez/keymaps/maz/default_highres.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9f045f43a0f75ad26880ab65e09317ef3a5bd3 GIT binary patch literal 1459389 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

v2GW}p;d?O9 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 z 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 z

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

kg}B2(aUz8w;FB-(tNPlNeN0X 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

fSpY`qqmnjv0x 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

fL zW)B1cs_XXd?(~{Xd^g)dke5cL)07ti_vCd9n12gbA^aoYPFkNhLf|4;S+8VmJJAYp1%W-AQUpTmX@oi zs_PAA139gAXXURG&lm`AWq&0lHg1mQJ38_G$ClwcF%ZFMk-HBTz(Pg1rJr z?Ut6eW4=AFFG->l1T>VEwO%rzVZcew&)5#IG;T&$_os=-N=O+22>sHfoi$JKuL2^n zbPj+&Hpo+?G)SNDu!ps@?#T8bj5Zmumz_Q;m@EHkheNu7H+=`B_rCjlgje1C{ODv2 z+jYsAwkn%9D5kM1af^dCMspez!0nxUxTpQ=O*8dKL9}Q9QQUp%{+WkDXoH7>!PWD` z8lcqxpP(+O8G0yX)4#b4kP+@-{Db61jJYaU!?f!{I@{60W=u)32F}dP4Y?%#@Spy# z8+ScS#d`fjV(O~=UWTDr0O20|9YVN{PV`;F#cl`-zukHc#Ie2L%E0}Wpk_9nLF`%N zPhugZys`Rb^c`oYTfd>}4h98~m%-m3fuXXe;r9f2^t<&xs*GPEkH8K6>TG)JP)YBz z%9C+_9&5T&RCoi-IEK!t-H0qfqIZGv}5_*DA8o%(6~WdpR&$R z#8?!FL)6J{3FoT8eRP+`4_p>v=gvdF#1eH8*+a#v?3Oj6(=SBIp6qifV&nH+sBSBA|f4`ejZi$gma4xRVc<2p=02d#D-?z}Q*W2ca zuh~v-bK{`r>oe31POoU{Yq~~SjVq)_V#2}_O*VaVto*>WO6mjna3`lG=*<6Db}1zR zSL#_KZBtoYjqwTqpZ;}7l6QS5CM5K{xY*D+Q1uk%ezdpO+IxjvBBaC(|F!%Hv*@wr zwElRzbK>?C7->8{F!|$$X;!ew#||?sDQ|!1dqVAD_8|K`6K!9E^YbGeFZ7tw@Sq7=m zKS=vv6DYfF+o8IsBZA{L+*-6ZkyBuI#MYZb3vGdU%^(wO|1+_>0i+Rj0nmr>U-tRS zvEJfyXapxd0zx1<)ghMJ=ivS+i&i=lCtobntbmcpvsZ0LgQlMajYq|0&DaKyOczau zc?bff^tSk(-*XR_8s@hm*67Uc=&U-t!mpzIKY}kLs&x*l_#!%j!rrRLAjag0N>f-E zKG3{UQfEf4o)w9niaN-@LFdI8zn*3Qxe%G-e#bL68?E=<9#UCcyx*b8O2@|wS~R#F zgwP0_0iF!*gHtQ2x7V6idJ#d*#Z3wEthWGDlSR7aKcYs2H80J?#x|q&7T|&Vbcji@!VKG#e`Kumw=h$zz?W>e3 zoDu3OcFR7Vo(nAP)YgXw&WP`*w8i3G%Ij!0px5r5oW+O1EmO&t0Kup0d51CmR2@t2ttd^umDaPrnL)oJv2>GfE%nxRvmh-+6cG^< zV<`sYCCF(#=UjF02zgbe(<{Bu-G(+3QNal4(?!Sj;5-p4%>D#b`@=@*e^Ci)Bxgg@ z6g>U-(W9nIT-Q_nW+I3KJ!zcM*TZE3D~wU363B0xjdV3N8<4{wX`K~NQ|_hgcNsNA zH9E{2BftSD6aYC!n6{ryh)s&R!%k_LVGoQCZs$ukSxfPf8xW&6?gC5W1kPme;Kod zu0p@~*6qMRbXPEEw4uDKbUE&CXn)87bQj9(f0(w9KJ-5alh)Hc<3p-s&wji5`#wO_ zje|`h98Hbw?U$D`d{ahcRp_hbTt?%D*PSd!WR$%Q*_(l%mp7u!W|pJSM}k`WG89PH zYxNf}(8Hw*#SH^%bpud9AV&MKEG63YMnXI;xqrWie9hA1z6>iAWWCQum+5)ffv?KF zU9)@79;kyi9r<1)Dk6fFMVCWhmx8=}tX%FCJI~`8=BlS~Yya}{)XTJzl5??Fm1%pk zvXDH2bc5tkB_M)8M7xX|BLFh!i$o(Us}p5gzdj}+qOr9#*$fTAm^T=+npC7e@8%C- zfE5OXW1-%mM^blKA5&_>C!`Jx{`{$`uAaomX7~ZB6QFNq5dXnr1f$I%{?lKx)g(|n z2&xW*c1+;3{5T$K1j+%uEu10Wf5QFy9IX~Gje~<~*7uh{rP=Z#FX*l>DycVD!%%=e zH>t`W5ANR8>-?kdTp%Mae+@)Yy$+*||CVEh#t=8wu=t*A!c?!jtBEBAYJN8~uiRCS zDY@STbq2;gv<@}z*&xZAmM_~u5Z8}+ct32!!t;$!5SW9iI82EC5{P*Hgc3K}hA=7y zB^2@jJ_|5#kgzffJjB@GYy_mIPmlOr4Tw)}Xt2xy;Dm#Xi;cn6Is}JB*BTjpCQ#n- zZu|WVRqaHDT2j(wo(=nTFouHLw@Z{ut^nT$QVqRu{|{U50giRwhL7KphA2_UNJFv; z4P-WjXdruqWXp=|QZkEVL?t1SSw>dKh$JL?l~wlM>vw+j^#1?H@%!D!d%VYUysziJ zzvJ_{KIe5_=XG9sS!}y@ZLWGOpK(zew?6FJ)hQKy<=KG~>SJ*Er1`DfzLX9R+1#a) zg3_&+-cx1ac0w=OSDtS$-2rOC_8~jfi<)mhBPa;^?}R^j*VA1hM@2<>9xfpEVgY~) zMpmEG*@y?sWCeNzE63i>hGwjz+0{xDM0q$d2LK7Y2k z!stFHLi510iPFTG&x_|9-bP`yJIx)K3|-CHgT(kEjL*EiuN^C{+#Z?tVb2Rtwa=el z)#tIbvx7I~`akHO*kio ze~+Q4hY2}pn{n>eGai(ECWWg6RkG9a_VK>um_#PpLo55Ddq3Q8@50FFlLiDYGt*aR zaOC6cHksb zi!Ltt^(NG*ert-LE4T6?YQ!=|9*5ugl9{NFXav)Q!b?T8G-)o7S(XP;^ES4&z8z{^ z=~4>9bH>5+;>EW;8{YoDDNKl7`z~h=LMAotAV#KLxPg>-GL6E${5!}5B}J*|G;}lq zWVgE8NzWj!g0401=C8XS#4pFFSsg{E{bR^frA=$dtbE_-)|x=k4ow++L7>RoYV|^s zcg8Na9VUT9R5fR?Qr@On1n2S$(6owi7r_>Dy^|{6Cuj@D-nBkS(o4cX7=y^8&p*l` zx&l&NA=<*<;b6VPz|6{eHMLTFt!*PPI5<|xBd{1RVGhI~)^ui87SC1vADx|-D40VO z$A(QkiY{Yks;ip_Mg*H2wPq(~d4U&yF6riqbropnA`#hCf)ck+I!qAIS%PW;^dQG` zKw}I*1c_qX4&y_QQIrNrmASyBP`l59|BY@jZJH$K_lLDcNbBJcsT7kTZ74|axp?fL zigt2oJxAdtGICoRg&{;i!uoNsu_zi$wm1sY=2ju0cjzM~Iqo@vd=PyXb_hJ#~| zzi$TX4bmayLyUq}IWv{#5lPR4O$va{NawY+J0RE|y5%%R4du`V+EPLajv0gJ!f8e8 zajhk@_X%nR8@@dkbg_M;sQtyj?^mt#2wkZ%=yK9_1Hh}mTP3}Q^77QPtFqf84e-6- zF91nBMuWBDlc-!S8@Pc|$6~wjhJpe?kWi)Jfq|YsB?xSbf$PF|G_5KC2fzk{f59oi z-Fiau2OS6$tV>PJufpxPHPXJPA5OHqyYBlT&D_}d%7D4Jk**b$PkljPY`F)o)yDRk z8r}EJ5SaSn5fjr8Ffa&k{-*|=##2f`UTa|%pS*g$i$}Ud!MSYc+(8eBrkd0MmCO20 zt_=mMWQE~liZt$D|2EK0YlV5%DDNx_M}t_0~hCIql};-nw?C{6tv-rPj(`g`3aRI6r}8*?$e3-;4zrJs^mc2_8=N~|#OdH7JMW29i~9_gaOs42 z4_P5M!8P7pKY#4JW)kLkaX~gpOsL0DbM&;0(Equ(`NCZ{cMUbQ?1s?mX&k~ zU6V^5CkB8+q1Vk>Wg)JUm2)gK64mE|WDI1YKv;ozvO)&F!1>gL4KWPn|*yYs*k|I!+JRP5rr&?LiXqev}84-o}-vgA@bn z8a<>vpgslfVCNd`#GNMV9;J>|*tLB-ip`w%G)*~Bc~r0#Dc|$-)c$buPR`Y}C+D8& z?dPY&9c&$!x|xiO3@vZK*VY^F$lKW24gZJ_YU46Hhh!c;#Cz>2NvWGr0zCQFw*ULN zkxhazXrV?dicd&*Eb4XL0qzf!l$6Q2;SU~s2E{2C@L9wGorLrA70*9mf}9W5Hc)ou zf7D0egs=$FfqrFVhakI{*fUDO^0z2qwn_dlK(r7O7e~)mFK(!z`b9f4Ni)>L;|z5E zy%(>YDf!5Sq1)o(S|fWx2u~#(PmNktuykC1EpbEV!c*0oH_>e?tEKh4?bO;ml6d7V zU#5|qd8%;oq&o;T^`sEdO=eH#@{oX5KL3i)yO}S(Dl}9D-e46guViDvUc#hW@ohZ- zAID;@(bFb-QMBtgIAHO6UD<2Dwo>^O5qy9bvB(f8nEa(igy**1KaC;47+gDmBWrlr z{L5(2{JzSPl89Cq9r36nm$R-Hlr=M$>-bs{)BbfrG~eNtcjce4Y3JB-9X&eP zl3`l5qQQUfbkx|y!~kS7($bqc`-w+((gUq#h}GKJ*7qYNtDXr54cA0@2**xOP980a z?0&0MN0)K}WYre7+jWy;W2sqLgp@W$$TcpLLZ1GYR~g9sx(8%(XCC`U5FVSq@=1Lt z%p_U)o{svde7!;5Y#;Nbf<{CC^V|KZii++$ZQ9EqG4YOnrZTzK=Knf9;=11#sf*$u4OD7_&4xv7o@t2m&?c}puxb<6EhM4cF}s_1 zXzo;pwev9bRzX99$DXDQiltZZy^%V5_N}y|)qv#6e1YHHSo)pSV)dhD>_x0=&smDFs6Gq1!=B@vi-jMOZdm zRey-oaO&~)l}O4=oFNKD8%%f7(tbC{Wt>5!piTORy7zt$5MkK}kv&lGFtV{#+YKn6 zj8#}3|I7xZW49D~7Dyzs&nOCk4DGo{wiziTEbgdSgfB;3E`LrDpa@U~@)GU$^3(Rs zrf>|H+|vDILF+Q= zEleG(y2>Sm^u@Uq4@!QYXQB5ElA=3**BGJCy7(;VexS3U;BPo9{D903 z0xdj3Z^A@q{rY3}zr=N22rEQ5m+qEu{*b*BBYMwdjG#Z@D0UERHY8!^6zQNl4V+2v z7~$dE_B7Ibkawf~GW)!!?Vq3B-HJ*|24AGz)4Z=7D$8WoT886PXJ@37_opxGH*U;w zeyg=@+oQ3un|($Z5`c^h=UuG<63TfoIMMfM;$w#!qILs4gM(Q5#Ixjo1+;E8oiQE% z_ATA$5L~#+E<7ijLjI$#LdPFJwCbonYtue!Pc$JoJb+Z~k;j@AIl70x!ZA@D`;T<*`y5N$elMbZr!@IegjyG}UdvE0Mle?EDP5>dsrzKO3<3Oi94U zk#N29M_?KbZVzUBVS5<;@SX~E3jV$iK1s;})Js|<^7HbbPyKtA&W98nKgQ%QT!JpK za%ePXOg_C;N%7eV_pt**bi~bm1sm#_&dMG91wHKcFzQA9SLt5*WA!BZxJbZ$m1NDp z%)FC%1xl$!J`h0|{&;hxtGliz8m@vU6ymr+SV2ySb`1IC8Q37pJr|iqyO~ARBNzAk z6H`+xnuYgg{%HX)HN@Fjtj*PBwWL8}95GI-3A^qT$F3|PD*$<651U=y+ZLxer=s_zsVH~Q`;mqlSxsJ_!k z;Zq0hz2wRVjLW&_(y|UwUXgF#zI}Xrqv&@9;OUtHlABu)SFk$GY2lEIv_dvheGggc{|B#a-`<)q)rs*SWY?wk* z(67EqG{pi5fpP5X>Uw2fVBPx#0ka`l%Lzkj^5cf^Zmb1Tk z^A9#KdP~^zo8P%RcI`Ox%t+c=KFYy&tvQ9H8;pe?8}3_*5Q}A{B)hA;qvIn|Y`kdf z(;GIE=h``~lzBv+#PAd*@@ixzjwhbZcbs16^5rX871EaE=O2SG8O{EE#MEDA=C@hX zbpAmc@=U@vUv8%(x26*vB>I=ZsmW#PMdjt?mHbj>9(e^t@QrcJ@dlemXH{9OT=#nB zH#y66ymzH&m7fkeFg4VS*-EM`*I?CtVdWs1{@Cp7BOjlMnHdY4ZQHkRM~|LflMVpO zg#3lQnJTDQb>-_1IFZ~#!0jVo&+h+r0&mnVh4TI#MCuZ*D)6P$ZXRLBnDGAHGq@q% zjfn(EMd0^vQkE{Qt+m3)2UItOp>6+Fut$3OFuCCY9v;)-mJCOKtUySZ#wR9Bet8r0 zC;cHGFRw5`^Y9TlIv_yUw0?q#jMF6L8N?q1@1BPq4c1mxo40Kn z1zQ}kEz8-(1>E;cy5ra4jlO%fdguPgtyPOvkN2j`+<>|ZR>)yKK8EwmIN-W;!?WXc zElT1}vrM3dv5|rzJ2#iPBMRjfcQSGS(9*r9wY9Y|reu~?=u($~)KD$?x^*QQ)kCu+ zl6cpqhOvvl)-aD8fKu2&rRIQk)34$O*hSJTR=d7G5|&nsS9+345TvORkG~dgSF0X# zeR&X)hT7V3+|RL8FaKs`-C%-B%YRFcv^EQeb4X=l`bfd*%9AHgz)1BAuAoB=a;SW# z*^ncgx*>N5fJhJs8FuVIYsJxCpIsPH2Y`Xa&njYz*C@24Ko+aej2!u}Ru1|w;K!nw z?|Aj`;3S#x2~kmBmmEe!r7R(ZVRa8fo+hRb+1baR{q`Ex2hjpKkmT3EKFKtr77aR_=-j9*w%p$uvNR%#D3iGhS&!LvH-ao>MHw zW5YsU?=j9mB*(FsKP0l#OudV|AHV#A(|wn9@40_*VJZQY5+wv?l#iLdBJ$%ZFWKe zH}u-1RL7wqTr%%>n6`yu%uaj#x^?U1Xv$2G5L_AAlzA@i=U*wfJ3D}4n0wU|%mdFp zyrpIVridt~g2jJ7h=n-~2MX$Ch$Z?nID=&w7#O&YKtl1pA%QXz8gcMgs67FCz(Py^ z#=7K6tc9YYQ_lj>=g!=pu*F|$zo(0u+Ea`tZi?78-tae-bhv$+YX>EfZY25$=ZsBH z2aDb}-@IuPji~Km)s4hG7F$tA^v^FY!dvMW;?9Udb)oA+Hp%2hS{9Z>C2r~=`cz)- zU}9h$!Y;r}bZt57#?`%oXYpphsG*~%Yt?^B1yQO*LkER24UNjizJTYaqiBjdFcpx> z2~;87QfY{+Tge8!bwr$%cBZ7)1y`{^=iw}|2$DBE7jj92H3O4ZZ zflJ2nDoa1=>ydARbVvI<^Qa}cC!K!An+_c3#e=(!@P#%BJOl9=s~{6bBZb5*LIc8z zB>0M8hg%<9M^Y85(>%3KyzBZ}w>^nO^;s>cA26qal`NH8B}ID~h;1VAh$4wyeabxUVqP1x-@~XPJBLvmhV%-!T zY2MxB<0IR4i#0jSvStaRb*@3Y$=}->pgd4u8>yllemnlm&@#yFE^(B$K5yN|seOyM z{D6BfuE5;{Iy3{RuoHq*!z!lyGUx-r5S-{bc?9qi9hF2AT1E@NZFO}DQjM?I;_X(J z=D{vqDK^N4&knR5&>G_ZXIw}4)Wo#jF9t@nW`W#_}| zFUKo&QRl;mJLb@I##y2cuU$D%{}!yDmG+t(0(aoPOC3{Z;bhS`W(oXh!FXL1;mh!A znAJp&O#Td%!BF4Ig-G+45FLcKC;PBu64o+N>wJvI)knerGRthjb-ywna>j|{rq=Tl z*Wtj0B{Z1)^vRR6^Gt~zj1_n;{dMOPwytUvaXh4gUb`r5PogK|SHh(USE!ym3)zxV zyb{L+3Oei*bx?gN+W9?O_r*aL;EZleM}JH|ZU^|dx0%ks`#+%->7)&84MPuUaM)9p zcf(mc{RvjQ1XJuveXR1zw zRS;Cj70=hvB1L!x-95}EwhU@!TlapCy};qSel3A(LSa+(d#f8y6PONM9((_GemaB# zJzav%%HC-``1A;^TsInt08#;M@6Z1awq);+}%ldo5i^cmnb5dc)-~+b*R{|u&@jb4`yhJ);ANIpGfS8iNf460%0M$7R4IaZ((4MAT7fbq*W5aY`K^>jIQ4!B?(2)rfmmqVf+kLho4Lbr|MWKB2L2&t zOQ!>Sr7{>>!TSm1yI%KPZU|S~A&fb@qT~KHP2?XJ7>U{gy>=NhUFy1GV#^@=|)mPcOh< z;=VMsvKVp$9EyE}NQ3yiltCD1NK^wy0`z5&3JM=7gy7+Q zPmx=JW4P{pPml-^AV#K{a0rxa)Xb{{Gng}sKseaAW_y6&v28_(YYMKzh)89Bta?KN z1NWLgpuGR-^XE8(F5DYPT-}GkgS1YO&~pPq0vteuYW%jjWU*C~BBIAK-ysEig^h-0 z&j$C12oxuE>yy=};wZ~B*l7mL;AtOoK+qQ{82~=*%;rIktvX8s z_(K%so=Li`Ah0Ody?Fk--GCw@y||;U4v}7ggfL60Pdc2HOqBj>Ae zk)ApVhc@ke$6W%+ZO53Zf_YS82IQkIgAB7DZmEYmLxP0)9Spxpgck#bw3i4IDl{bu zaTHKqRhPZrjHlz!Zy8^I*o3}A^lJe#6# z-;#k=^g8#*SPEV+J6!6iz@m$CwFDH2k45aq>05OvS`jFK)a*3i$!-k?P@{t_W}H?i z)He1=uVF?!wnDcZJ9o+>Vq+Ktsz33@$HHOEXo!{J&z6JbDP-OP#q^B@CH|7T6kDcb z-SYDD-C+HO1(`9%JN~C5-)SQ?Q_Ny?(w`f6;tk?_`lyR29oP>ld3j+P%l&bTP(<(0 zP#eg+)YMcI=47~U;QT0gV<8slr8K=+s6O-##?3}Ve2S_<_}RCAKjIA%O7?nre;jBB z-ss}=QOB6qp*H}>n1(9HkFgW9Q7!r zP`yenY*&cv5;k6A3#Djxl2K3#K?bB@FCZe~_%%#G@wHrSzRe#nr3DV-dRCWBCv4Z2 z6aK3W7jew^J9~b1sO}adc5JXYM{1BWe&*FOoCaSzS9PJMsH;)Ot=?4gy`g+%uPHTl zkTSp_dYK0V5%MRoMjT)+Qt-68QC_%i=^}pbzqPKscmz&qG2C9V`)}{dt<$ zZx8OIygzrdzx^qL5i>;mFqiQW;FJ3J%Z5ru;l(u_ZEXt&zQ4?Xq3dbs^3u{ZitHgv zZ9bV^tJkSyl_HLcR0yeeZf34t-AqoD{uyR~R{)CwT;V-}`lngK%o5NFc2Ax8)8nQg zC~LmIF{qsCUA*6lb`I{h5h85=J%hqbtOw%xX?{pW*VG6ve+E(?p!CJ^!2SMg@F|Te zDKv7va3HJzBPh=p|vD>SV7x+?M?D?JOQ_gyP+T?TtgJ+!f=KK23wo&((Bm{dzRD$1%l#!hg< zb`#Edz%)HLtV(MzsORM!{rqt=ZO`h_1GltL9*J_Uk_Nw8qTx0-c8&ao*AB~c`Kzgj zvaNMx37Egj1l4cy4CR~x*)(yS(SuRNBtry_mjM^4*nZv3zeBN4Z}upvOQ0@_ zqe=cJgoO#)O>|EF$aPwvHeS*^<7irwWvQd0qCzfuY74d_V6-bz=QAP#Oa7UAP?doT z-*byfoU^Z3W3lUA0CmpnwfZrQE_-4MJ%|6_h9YFVG6-3?o7U88XMzeW9B<#2vHr~! zmIMTJ5$I!_bqde7F-0e3aglEI53UZwK0}{@&jVrl=EuMO*SA?HG6#(3G3M`D@VXO38IEw{m_sE!g=HICv1=-rM zyo<~jM|q*tz;GhLl$9Q-6*?*V@Xg-hC$oH6HBY zk*&a&|6yk?4 zm>2cf`wsEA9Q$lVRd)~=#Lmg;#r)`cRt)hnMm{*tPXKBo7Csf;Dc1-3Lo?G%t$PLm27crp-Bwp#KU%*TuQy5UJ#r2Z`Gg=D z8FlSNrb~uJ>qV-@Q$ROG{6ygdG&(M_g0-jMQ*m)N-#$NiKLLU7m_f5&e}e~i6ZSHW zfP+_eygZ>7=3R6P)(p6t^DwV~R|au6NRm=g`07%%8ewTYoqV1MDjg!Ytr%fncu~}4 zCaPzcpoagt{NJgQDg!_#pGkOHVIuet5`OQ=LiB=FAwwdDUCc!hPq-z6hn>A-DqdF% zMNycB>$Hra*m5?XzOTmkqJzT+B!pfL8GHybi**T_;Mx#(UD`z?$kr^Qhxti8SK;5b{U@*>jn5N8jZRi%c{DCTB5hkGn5_ksYYqter9w z#tz3#8~${t@AwzM_FLK5L?BnmyFK~g+)F#0ji$-Y!)c#)W3!XTGS)a^s{NGfDm4`q z%W;z@nzz5IK_h`DdJ!+G3e7Vm0ix^7yqbQf0<57K^4=fD7z1x=cv8eSvIc_W_)mL*3)Gc+V|hJ6?$U36Vp>y zM^~36x%thCh?!O&oPn`;bv`=7Kj7WjySEAX6&&rO8in0foK09F&ffOye_CN`!6Bf# zzlYUwLsb#SwXHvMzFsSTdS(MNyY?;arttSz_vnsj4*@aIXF+9h*3I>@luE^g5R_uk-otV*7YHLI@&l8%+&yHBvJh0i6nC}fR zCY4g#(XoOl*_gu-&Ksy}f#gyGqvm1!2OQonzJrM=2Qy+^(@eHXhK0Xi#CXS7aIh+) z${Xbu7Z~78xl6dqePSuJds=)ijmk-F?41zCDG{bOIfsylA`3J9#f2?K7#cw!mT?FI z1YmwZ;+!;v|GK~29|E)8y}K@0wio{}I+~)y-3x2=b>KU`*-R+Ds?|xpl{D#DM%1{M|SD)Q1Cyud(Bwad8vO4s?SkL%KDjHM3S`jJ$lTd(9 z*D=fa@Bs(I!M`Su)M(~8zMtg5tM-l^s-cu|Vpdz1_d$aS@}op08plLd>Rrg>iCMH5 z@#d{@Ak&Xcjx5a6PlI{>V8%L_0b}ON!AR#f}ecbLRp5;=Iu6-;jXZaUPM z(uoln+!uC-J;F4Q5ETMDr5o3A>X4Hz!`_6xAJiUr6JRxXHDA7b+4KeW{19Q#lyx2J z@-HQgofV*LXE%-b*@2^FFd6*qB7DtI*ZvK-HrSe#viTiZKn;dDw#`X7;anh`7V>P; z)HYF39m``Y@5!F8#-sNhBL${Fv%)tKA>gvL?0nh8YuJXD>x! z(iTvD=5-Khz!&})`^fumbGHKL95?N8l)bwWP=UB3Si`8BpLVq{!Jth z{;hoVNAuj$1O)Qv%6swa)F7~cNf&V~=fdVa$B9Z!tmc3Ll9MrI+{9*3x<;8g1 zM2RO7UQ09O`yUaYp!HR)5kU8$Z9jOuHY}=ImRDB=akLa?HYfw?jv$NvpJ31h{U-du?W1c=U^fHPs1QSB?w z_!d$aNQiHsz(YO*JORiNM!+z)RRNW}Sc9}G7i1v8XePt*UX572|2`Fv`r}ya?{zkS z&g`!*K&G&$=x9^gnJi~{9-u8~1~7=w61`=aX$c9k$0YCurK%|lb&(obpLdTX4q3>T zIpo7Z2gJ30G^lut*VWRh_?1LL)3*fNoBD7G(BV1yBP464{TJowPzBG@uJqU@(S)n- zYZ$GK{tSZflUrAOXk?II5 zBa-Rl74dv2Xe|E)A>DPTi^pkKCS`TBOekWdqxc24jl)*FBzH9*fB$71httVlp+7kY zsj05wUk9SKr{Zpa0^5{20KA5)4+ur=3+K+=fASPdo|~WlCei~y)_jX@^t};WasUM} zM&Q3sfFE?$+GvtDsl0@eS-mMLflrRmkqZ6V;nVK8(~RITjE+I#l`Ksn(XCzjfB))Z zl)dWk+-x;~B38a0txg|%f?-Chs=N}lGwx625?hA|0t8gNI*gH~WO9mlck6(o)5*5k=96CL?btU6C38I~0n zM_WOHDd<8=a@QmtMBzIE8CakH@6uLoz`7FJ!(>24^Jl_LBLL+y^I(Jgc)3Q4R7P?2Y^Be?_S4h_#3`BdgGz@ z-F2iEZsH@xfZS?*)XuOE(1voWs32%-Z^r@?f`;@vCJQZhlbB;CDOW4wOCl<>)G0*42@ z4`mb)1ks}gN{c)f4D$j`n+#vbe$Y1d?v4w<4mrW6<4y-KyQgL@!L|r$5EQWRLj|Bc z)K`OR_fcczwyw~RJv0#JJ-oKB) ziUt_BCF)z+m>CAs=D6eHZrzrJa+6!`RO!T#8I?JZsU?T|h33{}*O%sTR1p*zf>K z-2j?Fl#k$2BqOnp|4_W-ZSDZ4U5jqqF;r&sys9-5Hjtpd2FnUPK>o}rj}28}0%uyD z@n;f)M?o}EuV%h~Us+i>iK?{_Ey)*FJGx{br+2%~{UZ3Ziu14lAq=$PQH^`AjRw51g2&ZoOn&=Bow8+Z;KVwH5wo4L1|gElBoGv;YR1+aDo!|DW|U%~8f z;a3jGYf8vGX7q%KH$(Cpz)hfkxf4;%h6hCkWw9@3MM=6*2w|9F#DDG6`urKFyD$i& z3pt;~#9|DPoB-*0<2~ z!p!g@48G-AB#q(>a&P|n1kRS2zl$nFeDNCguDJ(h{=kKhM2)Ou^p@YR2egOBM)s>=q)#4b3{$L z_|qq1fNsMqZ2dDpt`F7LAN3;~k}a^estAY!2$xW-Mt?DC4Pav4ypc}$dxB{; zqP#c`iWJ=lzj93Rr57UvhoM48fGDe`Ao2Skm(G6q@+W|Aqp3=~lFkoP`GZ));Jd-v zCvIQ&>CXl##-F33D718@GBPk6wA@V!0Z=SVM1#4q<;4s_WQMp_|KclVef1IkzS7b) z$^4cbc_brn4R(7cIFr`oHwcU71W5!WjUChdAP2GN#fxO8 ztC=^!EWt8~P0XPNhm6uLGLi!1Ob7}VC;-9iLn_+%%r@Kuo-%NBKu@zSlWgn+gu-nw zv?+n+odrr# z;lSF)ep!S`eA*Z$UN#I^i~XR3XO9dEfrujiJp5QBkeQ+ump)F1_6z87q1_kwzK#?F zfdD<9wlfURB$2Sgw=Bu+RepZH!xx{OJg61K@DcbqaZC!~6Hsn`!cJ&9XOfy@Oh z>;0L;svW;-1es{pGaVK>BaM=xBD@{+t=?*vOmm*MZs+->?K*$GcpqXGmtFt&-u&5) z-0p{>w#>P9gT%1PB-ONim>|c(Yz7gQy-0lnXb`=)PDmSN{%#Pnc0|5rgL!oWgC4A$ z<`f;t@lj0Km4LVW=v&KQ$efA11}}7~1zSE9SQZ)Twp~ZgCepC7wnv}e7OP7~bi@Mz#~yF}=YM(Y?MDc{p5-T9n()ofz~orB}y9javn=| zQV7nyLg!)7dw{OFoEIx0k!b1($1!nUTDrWqGL)Gfj3itH3NQ;->(HzlHZcsk`)^re z?Dei^5F$$Jf4a9h(rxATmeAdZ0rtqsiLtY2)gXqg0quudxHvmYVAu}esY*`FT69~w zkq}%K^ma4oaZv1!#Kpvz=yy_E z!q;!uFoQf>Kp^d!6*%-R`QP-vNa|=FEOcfSzIoFA3QNWDtk=T786KffbhXtQ|0XI7 zL{RB?H5D7GZDOi`wh7dwu*9Pp(KNt!fl+z{?35Eo2#rZ3ZEZ*E%VzI{rvq#_j*W&T+&~(ozfKnkKaO>3Hkyv zhkfa9?x~PIK#gn z6L{J9=lAbfMBMbT_7?oUHYS#y^QG_4fB^vd*0ZTui5jirBMh}VvXObupAP+v9L0@| zCo4U-u_32dM)&IfBKq2%!XuHlzcMtcp{h0tzw+<&$`U~GKs9k%&tNQq#n<{|d#W{> zB>;%f%y!7%()T|Wz$O#fYFVc=pW3?;D4Kf@9#&2LiNg{oDnok_w1}ut%}bnbglg4s zn>Z}Jsq5a830~CLvre&V(DdbX)bNo}F5(zvriUOK#JBO2?||KMWI^ ztkie;%d7LkS5kw!z2 z!1N&*E+pm@5vd>4E!PAEqZ(3WMSX2>5vl-L{>#?CaB`(}sg)v{%E{;!5Eg7r6Ym6G!QsDs>X9zD zVpLCl4o$FZhTE!Ze(>T{|51Z-nlrD~DMzEh7tZuKM_Esw24gDcvQbk-PR?%xF5WE2 zl+@wHS?COe4zkdg0SiT4RV~FU>V8lNV2#o0@Xwz#%*>`Ir3%0F_Vl3otr4$;f{!vh zCbb|29@#;!kIM4DH1PwMsHjHD0Wq<>=}REY+HhB(E!!Q+j*C}IEb<<`NTv=Yf>P>J zg>G|J_p%ZTadckq-yeO=3cMtOAI`*gp6hgXAvyS}f|`ge;xbf*TX;YM4~l11)Z^r` z<PF1l9=y1+vbK`V2Ox<~dlMK7DsYrOOd`)Y!5*MZItpYBU%u;`b|9OE};Q zqpYM<{(N036^J;Y`b(*&iSY1Km5pBq6LEbGiL)9Q2>H=5S6k4lI07Q0PE~EN-|Mb~%5x1mZQ%Ep?V*|t{Y}0%J1PAq zX2|-21DRongm9Qa$N5UbSrRWfW{u7>;nYTZ$V^KHnu|a$bz@end0roy=@FpPeGyKE zI|~XrM4+#!czmGc9E?%`|C#n4*S(LYIf_qr_kMdCQ`9MUrUgS}_xIv0R1s<5hnd)_ zprn+JJeE1XA1mhft8>2Crcq_v5J879nQp(7A3rCjt{rMwI1u2a^G)ll-vFYyNrw8! z4);oHIai5QuPz$R+qt>L#XPVhuE8Vo%0_oj}@Ot91wsrBE{F z93n8<>8P4PfGcw-?ORGwyGJj;F5>!;h(LpjAk2UG`q9UrZ*anV`D=thBAE+d^8?ik z9#7WHowV;53&nYXiw>DrZ zu{&o68y`JwVh_c=goHp1SUBP3k~30Ogbj}yxT%FB-Y^MjAoy>Dq4be??pdtwIp7~Q zwn$(hRCd~@Av_?6;NA6uH;}~<1n*%9;B{C~OUZ9lWeb)iN;V+60gt{sFLgvaT1-rg z(J?0UZLfV^`lBv{%!#Yr_YHGNS=mFT;|a$V&k!~f==(!Uwejr?RMmh}h!hi=Z1am- zRAW)u#M&hz-+;AV{=8HcM=&g+A2&C;XKr_L11W~f^DG6qb$gPOx`{w47HF@75R91m zi*D$@eCj|F*TohPDYbEz*z#{>sOJNG55K}z`BUX^hm42gq8c47E$HJK0Ah#>vb$9? zaopl+uo%Dmd;Xq|Ks16DZDFv~Xnms)Ph^>BDMBGPHTxih)+xwfu&q#+N}4}Iu=$ve zH37)Be*JnFv7{bGzyTwsf!0_;73Eh&B-;QWh;qtr>#c8)@dh_hwj;6CaUMTc{Ax}P zJ(z1^StZg}oFwiP1gnA~HIYElAD(6uzDX#aTacQTZF8CX^#GK4ODS5izM;y>d5Wwx zASh_RgdbRTl(|4;D01$wKKPEE$)5wwV95QtR_(Uf{N=-Rv)kI+g)G{H@t=G?XQ%*> z3yfF0txSUa-%3gO-Q~@P4|BeJA00q65JBm~8QAS(H+>8dMV>J=KkBwBDki2mu}V|; z3XV_DaGYaiIhJS_9aM50_WQPgkimI?MwcI7!qrKK7?DV1-W`6uVBCb|S91ixzmgwY z4u(tc)XLSn6bY~R{O%W+M}a2Fnc0F>7x1I<+6s#BMbImy9DarIr)VmZ-@%lsjmM}q z4Y3AN1l$K)MM?^Kzg_=`P+ZdY2JRzRIWVLe`OArr;Mbmp`7Qd)ofpy*5(Y4j$*J34 z2yKa-Ng6_E_QYiZIXwrb2RUp-GE`X-i$m|h8h2=?K$2>C9|XTS>@|B5_QMX4^dF@|VI)21RsbYHIRkUbOy9mUte}03j?S6Ly;7_+BD} z^vxx)rZRSwtjs%N?SvlIqP?*P%O8DbT_w@?Z(!WkDf_+|Fl^qg;hIM!C09{06S?{G zByP~yI6f#y5m^?RB%x(*Lt^N?s!uZA`^{`}u;Sms4NyZ_1)b73j+rE5YK>?Iw6f@6 z3Jj*t1oU24Cs0x+_8s6M4>$LeGIXpjfY=dTpI)alx_Dh2-MOh(kaj>Dvx56(rpE)= zlPL|nHSv0#?l-(b-bccFEw9S}eKbQ}|5|IuMoJ`z7J2Fb32@K_$y_RF+giG}6!9;V zSM3N^+PD#lu+(yd$qVsG)dPQy@j==+v0GpND!>4FNmN0gy*Je$s%QX?VAuat`J?Wh z1Dm`rjp(=4_`k9h{u_t^4Q5#IkbSh2;&}6U@0f1~L%yC9I`ZD>y&OQ#F98?qFh9J6s${2J_sdtMZxh#feSPZg3 zRZWyyaoYORvLdB6K#GSv5G#t>7d-|OePp_Qcu|Sa+T>%>MvRu`I|FZ+3Ur9PRZdz! ziOo&}r)J;Rr*)9tTk#XrI5JPC77bs7He`D+F5`kCrRmo{4n5>Tyi$h_PVF1GKJT^3 z%Ake-fq~JW?}ic<&w2L=YXhWa8g|tJPd`Y3xj~ z9$a?77R*QOI%z{(sUjT6K+~+@78gL$sRpz{IrPVd+G-#Wzd)9Ooqdd#=nfI%!Mu~i z<{G@R2^=1l?K$;f%~e;nG;aFj;LyC6q3i{(L-X2&r^*6x8gX7fn#Tk5L-5crP##N$ zhsK-oyQeno8jla9;B$(=qy{6NCWxUt3E4;x8Z>M$dRq56QFFvPHDwE6TR^S1+ku};1xP|HGtnsN0%Z-x(C=}pCL&`wYZ3kUyEBLV#34jj!_n>p zrDJ`be?Jl`>+`AS;7G8&Gy2Qj(EKVeUA7E30SJ5cK4K|F;V=Y>F=cR?`XfLrfwx3& zp1l=7fFtym7AZv2jpsRksYytpcvVwRekn0b!3Y^N9i8_(7A$+fp0bG(whlk9|HaB5 z2&;H#JJwQ;%&~Ly21`21tq^w_u{j%@O0Apo22yBpDJEDP=y`cD(8q z{E&0nxK$z0J=RE)mJ;U|1ilQ zdUQ^iZP8F)TlDVC$TU>c)dz-$582bSeqvAy*j`*c1sW2bS8ZIpO=v7bZolm528(r8 zOmqg=AcE%$Vx?5!=W%|$(INx|C}cJ|WX#Puw3lLMVN!K+wgi^o+gyjGIV%r+^)M(o za4{^}Hsu%m3fJr#ngS5(iKG5Mz*so3W5W)x?e}q>!X$b`FX%ix&*O6lq-`Em?d7$py%gIY-<)}Q+|UI;1|2x) zd+Ob)cLrnwirNtzQhRoqy+((qilX9vq6L!pR1&Byq~Ors4o-6#CII)bYHh<7fD44=z0RrucD}B%mDRdTU-9A(%PgE zy~`cc)=;ac;T69Zsx#t%4C{p1hPQ-Gw0*g|Zg*QnjC~;#U<7X(-{Dap9!GIV( z2UN_(%{?(b9w_RS^wXEO9A4s>3>0)FUdd51p-T$!mKq!o04%jH4noK*;HyKN51wHj z)T!LiqvzN(fJSFd$rgcJn87&an$zm$0meI#XO&LI1GapbxW640={z#xNxPo7NmhU%CwfJ1M9 z%fd&1}oZo*@8o0jhuupLva3OLSr0ENwa%Ejl5ZPEd>nEyy^9Cw=)Rt;$ zYRZBxpSDJZt;hE_Tdpz0REDiNpZsBsaQ3Ax>%?IGumQ+Z@Tb9#@S^I8$=-1fuiMqk5fZW zuM0K(fuSL!Kc=_9KcL0LcyWg%j0d%#MNe=4)F!>M{~U^;fCyj%V}|K-N;XcS2BPV5 z$QzFan{EV0{{If1wM|+Agnt zkjC_y$nDQ|oHl_lMZj@pZ0slHrNKT>IDP});mwRuE$9QUa4M6Z4*hVDogGt*zy!#0 z27kdTw;60mqV@$Yhj$F@Sf2>(B-s#Ey8|J-YOnG)os7Cntl>i`Y}>a-bH& z-= zJo;0Xm52pI`{BRB`eW=y3G1G6v=y-z=bJ4j8LhiuO(1S=E_0}G6`Zu{{bpt+XTiCbJp?b7#e96QlCqW^z+GKG#$H>kua`M@w zdEV;ZCw{9XBbgsRO!#R?vs*4u-#fk6#NFl1>Ss`)t!^1^fCCBC-{yM6J}-y5&4-RU{}vr>pVL{L*6Cd7=3D9FJF+R0wWc~F zEp5ARDF%C{t0&d`O3##yJ?(E3S^ZgSv7pT0h}E&rqF!XrbuL!Ml?`BbV}Oegnq(Qs zsA?a{JgPA`!ezVX-%Xlx230s?j4Zt`To*U+_#8Pa*@r<9`vQMXaf&?0eQm2tg-NEm zxQNIXt$BoVoZ#aQ&aieXD2U7@w_CR$V1MftjB2wr=|w^WF|9{Rr9a}5ozm6kFJ9<% zkw^~Aj;Unnd8_l0tMlWJ+?M(t70j3xKv%9*{jgv@qG0~@M&|in7z55+FwQ)>_3J|Q z>QXguZQlI;*p~EN(O#_-8R{tFT<|E;J;szKeVxuaTa%qOs_bN%YR|8mK%NqjkKSF| z{g6VeuHV)%|HWYR<)HdrYl?MukjWyE3YIOM-rg#gq3-{=yGVEJ=g*UWRR7(5i&}*8R6v7F{K+FxquScl+Hcs&7`vw;!Py=j#j$V z3WIl&tCNx`HlK-iE4lP*Tj$riXN;RumcFDcO-ioXAfJjb-wo}UXu+hY<>++#s4GK$ zM#sxc)2U~tqZrX!*xz4kbj&)NMe&%6bgV*@;Yq;=yqzwKs+!qX8zR~*Ff+4z@?{}; zPCGpV!);NPjCf35Y#kmM9*&KRRel@W%I2Xad2jdQUh5MWaH_zSGbnKLe;r^#rFyka z7vI)zrJ}O6w|}d|omajP(BhkjMQtnMg3$ro!E<5@<=M;2E)v@)#r_Nr_c|^IWU)RA zs_eC`tc%Lc$r&phfW-Cw$dnuh#3_$uW9RylTYf>J=UcE;S>QbRnQi&c`9Bc0S)Rc* zXqaJJ9cM%J)OGT6=gM$rX0w^y$c6dAZLVV;l5-xC4wE`7qpK^H$cks(R%iPovo#-1 zcor7TYI0!rxWc zh_NxCur9+9bV5u_4k~Nsj|%b9?6hl+M3}b8b>*{>F#w8huXVP%JkefuIMnpGv5E>q z1`U+Oz1DfN8%T5UUr$6uyFdDXG9Mrh<^8)gcSxoNN17pynHxPR6@O)krTR0)+#B%d zen)P7=`nR%s(s|jZYDq~M zpJnKLCJ>L?VwM}6yv+}*lLS;XH502y2XRANJ&O1-SJ{@3s8e%>Rz}${IG=o6VE`Hw zE4ZAPE&MS`J;}597bbtm#!949*T*2N;O)Vd(YXwAv%-6_u{rQe0-47X>{F9Q+QLp- zfvYDX$sLlHmwFOGo2?EOth}8$A6j`Xd%344CiRLHnc@Q3v5mwsZjxNClLYfMQN>2^ ztPxdxp0Y33FIcY5SjKBj3As%QF<73EkRWboG?Y)rg5xr&Hb6EOJuq$yQ(Pix8Dt(s zsd;(4e{Z6xxfzDZrF!FCRoua{oI5BV6e~4XRaavIyXz-_9-0#gEEs4j5n14HG(jf% z_mt!Er%$KxRwRiGk{|xFZjcgVi{|GGZcX0@5DB1x(ST9pWHiqSVW|AJ%uCj{3=8>%2B-O`{fgKsV3KvaI$_#6Sgz&Z*D6kXB9I~{^;@)Fv|AdpEN zGaXcTTaUAD7b7E$2n|VKEwHR~V;8tZZ)7Ir-PvtMN*X|rQBRs7x?Ln!zVj{92FWP9 z4Q9CxHo7f060dQP_nzv9tUKh@1{#WZB?!Ky8Dvu4wv8uQhh(Yd66(OW4dHSUxBgjG)%(BqO~f@14Az)ynEG6`|qv zz~uY%w4KSKJ`L7pItH4*Ku?vzg__Y>{d2Vq`vRrqIOwjkQrFKDP3}-tCF)el1NsM(r<}zUReDvVze!uUyuFtyS zt@5-8VqCnuYaK=9+e6h8k z)5Ldrg0evBA?Q4{YuVH5_H8*1Mj37<;xG-the@gX!|&gPP2*N;^Iq4kX$nL%)Ys>- zK3Te{^K74xrCWZ0;bB^_r|vci8{MUjwl;1Om`VZIn4H~9`1-CJ#eO~g3Y}P0EREQ>=X8F%^OGj2v-S{tM^~xZO78oA3!V5?gVGYK_ zM@)Ih?-q{II4g`8PDRE?wa;58WMyP5i%haq%n@Cc?RfjeHX8L^@3*Vo(EOAiq9Zr9 zHncO|mGKTW@50kB&otF#ZJQ@&L1!XH^WBg~%Z#}HJ-JxX^++4l=3*^NAN(pU1TdvB1rH*hN_ zaS{jgov>&5cau+T%#&*7ZT8=|(gv?h5KByiEo-;S56xvrR&WH4q2h14v zNC@7?Oqk>pl5nu9GHD~UkI+N4@oWhMPk3MK937i3iPQ0%+#IZyq8v0=fSA|@Ybb*5 zFg^FbJJNPza&GP+?*UnE!SIvcN?ji$oX3FAZI4fEBKZ8yfB$~gxmb{Ic*rF3*YWs9 z@B#Bq!W2*xp+ST{DtXfc|G&Lnd?&`=nTgbmF3nW&g+FyCKU^P4pT~^kzo^h{OS{A( zb5BP<+jvj--DdrNs-hfkdZ(4uTMm4kSg5THZq|2doFM*md5L2R-xt*j+DZ&s3s(Km zn~Wv$1gpo$ikF*v?pCwu;TtG)$CZ}VwYe57hPCrd?pIqXtIrpZ>rP<}T6`zNAG5O| z7Z*1wE1%y!IGLK2=EQQgi7EimIL$aEPYBmY)zT51ZnPBTH~k^sivv-Xw{vPy_%R(H zD^pPQuU86e^w^3PTh4mf+1nS~KF!5QgL=Jb^PwmWo%9H%X(y?T8a=u(R4y`Itrj*#lF6A~Re$AboD$BENRfq4F0p`U)2msMAd|H?bZf5F_9a;zxb zjaLfM(NBJaohw%vRNX{qW5$h^pQr4}C|~P({yMTmw27T{MZIk%C5qw%-H&{jl_J7b5WLopZCY zN}2A|-0p8DIrZl+)@wSp#%=k5Z{MCa`@VU9a<8+eXT3uVir|VXd*)Jtcbp}rRu5la zxgryvc96>Pc(uyz@Mbzh;!n)Z;xypp^5>0jCBaLK^>zE-qk|I*N~mbfJ$-8QqFs6Ohg~ZLt6uNB?bu}=x)^60o0qxmDy)1+ zyfwABQeG~PXL$v`J;D0r4g|2?*>ToBXRWid&4nqb3JKrcc8^;hCS4_lL9f#yEn^sY zMoU-MP_wL&S98nlIv@5s`HX~Sma@+@K1_b8+hmkrzLSe#)P92DH_RND7F=3aq8rk*VD6@1z3 zh6Zih9*bMoXUb5Bjf|+01j~be!mrp4W}3~sLE1nhdSZu2l*Y?wtz&k(!!6#KutdoW zNONNzh3E1k&L?Iyn}olN|B5^hAQ#FESe`tI9wnoB0VjK_uBj1x0+Vpo5?Q{m;m8;? zv?QcsoRdO{wonwrFZO>Alcw**E_l6H2tR2CCO;*|a>AYE%Hf?Bn!38o>c6HT<~J3J z($Ug#(sv8`wd{$J2_(V(95WGxTR%tOPIW8&SORrSVIdqj{6zkzH;T=k#RjD43F6xb zkuTaX+;qv1`1|M}X-06Chxj$Y-spN zJc9niiA`vGmLQBLef(5nkg3|B7B=>Xo0F5Ciqb5Sad)zj(A2FV#i+F2X|%_kw`AsIm zh5@8>c!^^EFM^>j6xGq$iCg>*)5z{_yWa>b!9rScX~Z3h89AT&-k4x)jC1kRuU=ta zHdn$Z;YH+%t{eUH_ZBV9TSG2??PX@UfWuxnHliHO{@I}|-8BsVca^Y5)b9PsJYE4; z@W<+dn%3ewiRRb1mOa-X(*-LPqmjDOED7O7PG`u!cyWo)nLh~BoB5(}{5Y0Iu&U+t z>-y=f*IkpCl-`e^gw%ZLtuGRd@)g4?r(OP1>vCjl?o+R{Xda#?DvxSP~UJDM*^w%A1ee*F~JgWVkz4s#cv9*A5!npg1*t*h3L zcTpC}dI&$i7jJc0?HK)G*5Eg*ZFL3Vdn0ME6VS3U@aWW~JiYh2d~D_N&zF+hdfVC} z+ij!j=Ed%AEqQ>U6}RR2(pyh;2>1_lcMr|5@C&E3xXsfPoYh>Wqj{^gNG<1a7;=$H zNn)MHy9@f-qfEk_yu3IAmDMQ-%^J-%6h4j5S|)zu z!F@bKdy;q(~p^%PnKfC#R&<#$yHb7jD|4HMrN_w&X{E4#!5?NGLdp>c@hDI)Xdze2GTBJ zUL$A_WgJ$`TWmCQI=PsFCRmIpf7#&n?vH93?{heInKD%JV+QM+Zo3^XT{8_b8OQHc z?@ryh<+LB)>*C^5)Go>cGpH%}U>88~i8|+9r_LztdAl~nB!-*wK&j zVnm@s=f#x}s>Z7YJs3ZTCz@q5;w-JR>d_LfynH%YFRAA@rb%D`MatJ~%e<2@G*!xI z5Q_nbbl3R7g+bzF5s(fWsLR()ZeIkDj(&Y`T+XBy`my zrDX|MVBns8KbK`se=j>K5^$nhd4xN)pdd{fZR*cnhUO@(tGq|;1&dP;hPKugNu3B4 zFKL|Uf3CLWsC|a7;k6#KvcmH<&yJ^JglViKu^&4!anqiOHWOj?u}}sUF88knf2aJm zWH8-coZPN9RLBR|rgQ4>li>l|0)vo*EH3#JO5XdSp%?2>o~Mv2Uzspeliha0ujZ*N zlUgT4cpD!zjf+uul>T&o2gGd0{U@$c+(^g3rP`F?a}B7Yfl!nz-y1!_9|^l;b2v{p2Rt-_k0z48dv=Sw=z5l%4x7hs1D9$8F+^M>V-%^h1GqsV9 zht~5Wt~10qZhIl>|D@YaGTYdrlE!G~(DdbVc(WLM2?$7q3+OuBXYhmm+_~LJJEaA? zo|cE2pg09gl|WLp&Xm~0HS?>qPTyF+9U#o8~~<)l3+OC$ABo&F0iy<#)e zdK1JI#P90~=ALuQGr?R(qPe%tCR`+EKI4o(!05ufMHy7ZQ4U7()}PxJX(IlQMys|S zVX85nQhXrvAs-NA`{^dTc%}fz=o?K5&eZYAg$0Q*b6kF7dZ$Sk<@bak^fksf+!8pN zq`LdM6t{Rx{rIn==T8=x-Yhn2v$HFKDvMp;R7dwYhS&YdcQ`O-0p7&#OmyPYPF1t} z9E=zy)=Ce zP((ndqr91t(Cj{!%|noB`}&pjsHW%x9WHnpL2Q*1Ho)Y0*9NVUsd zoB?`*s#gN4T`7i~mcDl?64OXBw~#|R^~##o5z7%5B6Rij2c8}sMR z&j<{=-6+Zpz2(k{ME5zkZnPU<)9R~G^)>1Xv&-=^AD!pSrq2w;q)QYeXX&b}^8pfz zUtOxP%v0ShCL!@r0|T!aVfw?3EDv*dOYkA309+)vZ$u}@j&UJVq9KFAsR+Q3>S zzH!ufhxgxff8?8_qgyng&%Jpn)c{Q@Le}c7BXJ;&{%)#A3c7%}gX+J+=0d zb7^0m$;&mKOo3EWXB(T(Lrxeim%E)A5XlQPUW)v=IP*xNyKJ=$Jsz5Nw3S4U z)j^j5V)0sCxrx|D{IBnuiD05asM!3D zh>sOyJhmL=hb(vs#g&)B1*$jPC5ynFC-&0w(4q}(XXmjppp^S2uz!E|z41`!%fVu! ztJHHtW4^|N<^V9NmOum!5sTYs^&h&)>YUa}N%7BE#iPX_rtv=)}9^&Z+3==$1$; z>eVN>a&yezqi3ksJT5Pv#x|NVATG$flbidw|LdEl2#$g~j>a|MrI@_hLGTG4^T@sU zW%pnVhlsS;$7bKRYu%Y!Zb88SB_bmY{FP3Rt94Ua5Y2#Qqf>!_^WY5!Ts03w&d`T) za&e{b!P=3&?3r*;|7OBv+fzMugxf}x;9($C9MiY| zaOo_c`$x<#%;ji0)*KPRdj5+uK%doZBYN@}SEDj9j~=l0(g!06ltqPT4~a6v^KL1} z4YEg^q@;Ml#igWB;62e=)IKUuU@$+#NBHRf`g%w;W=gMmdGBSdeD>_Sdb*v3g^#I$ zQF2?cW`XJD(Ru(}*Lx~{C?ePY>eb-a(dbPA&BI8-Xn^su9ypu|f`_Q1vXY{2F<6z- z{N+d8Orx*|4_fnAQbMT3f~J&M{MLUw38PrrKX|&+lUb5+iI5OH^k|z3BhTH$#M?j2 zL&He4Yy&k{D z8ld|X|Dn~+U&aN@d`~)`@#(p`Sh^A=K~Xb_J)(1}4|6IP z>`%G69y?mDrluxE|HGb`1gIRX+UNMX}KM`hdtzuPBTP{Rn8dlCnwis8`z|8{pjRg z(x;|TXK)S^jGIl=i^?=ovu@`h3uN5>2j9LCj%$?)m5y?rC6sG)ZtX`0{6lX!qMf^Y zkr++}3q99{Dp z+vZP@7mkftrwoSy7e``3x82zEiv-i`LK9(3Ri0pl2O#6q2=SE^!6$7o9w48^&R-8c zqL@UW(MzgLvqv#;y!O)WaM}pvSg98HawL~2BZifaOCx_yTuByCqu-w$IX8))cGFdG zmGqOcwoQ^6{#a}lTGfYd*Q-#f7d_z=dWk^N|4W) z7pHsVxtV(H3ej`v>_MdvE+r?2x&c&n=!}%8=%AAnQHE!S{_RL3q4-2N-~Qcd-AB$J zokc0}gX|el!5tC$>KwiH!`e%X+ZYLBtib_#juA4CIac<2I(tpF_-}FB^W*Y>r}|UN zJU1dSz^lB1xuol3bNUdl1@@4O!KdVp&L^<>oX5%dBrci{JK0XMw9jFK?^wDEJj&Vm z!*i9raNKc}wnp#9}3WBfkrjwK6 zaxv%xnTJfQA=Lp)L)X}7#(D_-w7qivEk*{(dbDy~K77PHI-U=@dV5KgpW^TV$b=wU za|;sND=h$wGT~H|<9*;0(TW%CX#{2iwXVSjj7tLicWz!nJJsNPx#ulg+bcC2WJQSl%{@-NE_YpZC3J4@XQ?{d-_v8ekh0eM+#s{h;ffeR#>m!Kd-@ z(;I!K{!L>%^gzfiIj1}R)!v#G{@~Cc6YqeUqPF5>);!uOX#Ya=k7_W+FwYUR;~E3< z8DFw^_P6S&C}57CZApkM;RXP?$kAu4Lz@d|@n-gu@>J5-V7WmpI^8t>i|$;5*d&x? zK(!&L%iF%C!lUJ~K-RLGU;-FZ##)NbC%O)mROhjQ&l>Hxus@|&TO^u6{D~dHU)KFy zq*fYkO;tW_8lN!v-&N3jzNzW@PzuQlnK7X6;RFE|5-MV(uFDukxk>-lAJySDSIWvJ zXOZY%e^<3MFgX@8wrVlV(Z8~pd|wd><_V9365Loag&_-m18oPg{cAZ<|{5 zWEuhV?yFc~C;7|eW7u{K*9{H;fNvzlEg7R_)I!Tc`{qd2bt-ed2Uk_@e!aYM+~T#y zpw3>_t+n*6j?LMn1qCRZK;GFqSXue^40-aRy9SV;p-y5O|8?uldbL`z9;#414+|nO zvWRU+87HC-+=T3FyKRvmZqk~^EPJ85tZSx)? z)JWnY>8&wZ0#gIwF2&yKYnTMK%5&#DS;H}@z8G6KieqKV^u8#K2J2t-_4hv?ECBy4 zzvYgyw)d*s@#86vKcj=~4$boV?0CG=qe&bmM8+@SXpMcKa+!jt*JEiHaXa%q*v~@S zHT@eKWriuhwbO5KRkS4#|KWbsfoqOz?@CX+EQm<8+u`FtreG#>=uH3s}@Xhqt zm8@Np%VA8R&uEHUCq~9ih(eiSfYV!CvkP#vYVaW&923gko(lqPdy$1}U22sI*LZ@0 z_XT10;^S0K`=jgh8&P4{7xgNXh{^G}oeN{9n(sfIa8rgy=5V1L#g3)4vX)V2u>-y$ z`eM39za-u7^&?k^jo#kDp~KwqtFCIPYD!CY_u2gJ`?B-|#rm%kZ(1kpEYCg#U9R!@ z+-O9xkx;5lCQl2I4sYJ5fUdx#aDyn0(NcSuvPl6e)<9e>lg(YYpvXN|GSkQwMh>2{ zrfdbzf#D9%FF{s1Wp+AAAJUN!%OT6B<>fBLX1`gG75Pn3!^m z!AWe!>o-&j<>g^BS%*SxH@_c9tQ$o>w}?ZszQH|SJA8m?rV=554ST|A*XIcexXpYv zokWq11Hj$2L>_t0CijCjtEF7Gv#Xz4ocZyi&D_^uPvf*p5X5>1uSY%yJh^RyFVlP1 zK`M;~G#6A=S+!Z(MgKBpyyIkSCej(@=s!Bpc98Om2UuY$X^FX{j(}T#-Xn%%ZOyC2 zONM$3=0NrI04e+dK;=&q!WHG7wUEGiA)oLq>36^kgWsUwzNC+!61N--dQ)PVw}cQA z*cpF`uI-A^B6}qvnRrqXbz7rU_Zx{7P1GBeasJcg9q(;RZ&PVz6Z=|BhvRV5=G zH3T&Dr23X;7NVqiw~PzdY}5e~A3LVrt`y>RApHvoc_(%ya+oSw^6nkZfjS4Ho3T%y zj@W1HpL4XZ7*x5&pw|juwx>&d;F3VZDKZU!mWwFq`0cIl{8uMm$UE@QnA>d^A(IE& z5Tpc@?l%zag5bINfQz^?iu-2NdNus+)(p2*oHa3Vn>C^JSb_7g8H8>ddw!5_^&3#Gw}3{9ifVfQN|k&{kiF$M zb8XsJBo0|}ke9xkWZ+XS-cgcM5Q8!kCk$RYvps)w-Nd@(D?b->9>0>;k2*1#yZ1a& z-CaD`cB5fxQT%LxDYPC`s9M!x z9w03=UBJ#vgd=6&5WkABt!#mK1Sq#kP8k&#QsyY*X$qSY099>+uODe< zv5kRs+)VV6pQ*!;(-Tf-Pc>@UB;!xjDeXK=HE@ERlXwxpfZ$5Hqft9XL*Zo8(#SOt z_VfH@9ep7u{gVzqOIJ@%)_cp;xV+yY{k8=#kd*0dA`F^K#$krJcKsv(LDiVk9*mt& z{aEB$ch)(MP^~q zqO+hF)G}`->zzz*#VH@G`s}7hXlL3oG#qU%DMD&5+P}W9yCnY9eTk;z2Qbm|zky1) zbRXH7-EiQQu|;y?;0U++=%%}dD^HvCE7T#O!Hy&UW_^!AAf`~l?T}$%iFcFrA~UFL z73Dq0p2G#hY_B-|21gWlRw}ue9=iArK!G9W2C)vI%{?+#uoL60^Sc9NN?Io_{oD%` zC}ksWjY!E~40Fc$v{A<{t_xRNh8q;%5ZFLjrMIwx4T4e-`1zG9>4=VdV+D?~&%rT$ z-&HpHYGB7;?OONY*2AV$>YxJYi4zThz$5F;6+Ed1P^Y=gOA?uZ`B)hzNUGF|UT)iA z_fRLjYDm;^p5U0VsH$CudI@Fe-7qk-3X6qAC#T%^?-j(wKlE-rFs?wxE0p%$tF~N# zf`O3h^8(@!!gtjzCv2I4+&k??rNJ5uFbo~#^`VR%AsVT`Lpp5>pqmnixPJYvq~e2b zIBpuOfhXYFf4BdvFnfyS;U^KnytGiFJy)QSTG|7x?`*X18jn>EvHusn7B{TC$TF26GgRXc*+ z-rB0N?)STbx?ihabDBbgovFXSUyWJP?OgVJt)(x~AA%T2{oPlZD|&6Ke3X+h$jI`A zmV018)ewRu7z)uRj5_aZyVVM`tAEnVUkrWrnTWuG03(eR(0V{HeWu9TBPE2v_21%kjl@Qn%dg%94xtl8>l=l&o@TMG}ib9WOP|Rjw}DX z6e22_3l5J8f7+uA^$pzb9v;2pzuMQIq#i;k^kFEs!8-2AlR*h(2zivJuNC#a1Mxsg zZ-(X~D<5Exx^M8u=4O`ENUfe=bgf2zYDYhm89_JV3^KAk*{r^a>K|tNk&RM^)HSmw zATG)#Ws+tcU_7~D`j7wUzyyc2_OjYVsU4y~q0(a0 zC6wEWDLnbz7)8NDOI3EkvDnP|f zjwyszT`+}4Cw)Ljj(z3tUzkA}W-87O)&RDFD0tiUSE{?uLMwgVQTX>`8n5Pwl)aTW zN2Jst%e^G!PiDG$U8$Ew%Bn~Jw^lEMrjp>yUXPQJs{jxU%2_befplDiKqz}*kZG5A z4U7KrS$t$E8K9P$%nofmP7Cs=ICY zJI)P6kYsLs2aa7@XvYwRYsLwc?$_0pndz;p=MKL{QUnH&#T%|xR+Fxj-53w+#LPS2 zGg)bvRn`2@m-EZPE>rQ(HWCKg{jWC0q{wty=j%KCgK14mpsGyKJ(sNhRb1UT0zS{r ziyf>I$k>_t_U+w?-6l8+aT|R8Ok1$oUe zO(+6QNSuVwKOpqdjT;fCnE&=@>aq`SE$&f&O)kJgLs2>aeGNr=g_NYEq=LeO7$OBB zc3Y?#9(c<6-M$Oc3|9DPSg%Z}YJWZ39iV_uPh3cKJ!%z*Q172D6DjcJt)M+^+ z32@~PXVvxV1*eBd^o)0uIi9t$;wVDbD|cfukvcT0F%xnUaGHv?4Z9&oDKMR2_nQAs z{cDyXMho?9Qef1%gjc$@+N~*pxAf;|`ew;yYq-jvxC(#DfZj52@SHHzQpV-y4n}B&3( z>>0O-#*OamtgL(AATyx-M74@QguWbV3UsZoi*%b#Jujpeh5sN})o(4P!Fr-CWlxIR z=TT?Kn$uAUJk)u|kx)X652(5*u&=(c@#|u}v26CUoSaz%q=l&N#%^Bh{6IW{&(>kw zfm+HELPCNm^=T8G^!(tMz-#A&j^DU&D=Q`Q@nJ|Qr!Qn1pBL%GLPW2>tL;%%w!QkH zSd?_OJ$hc?Xj|TFW&YxrDg8^}{pD+V+)+n7!e-oUdw>v{iKwUZYIB7rdE|Gz!5iJl z$@wgQfMgk7Z+@xev@66dOm@L@6&9k+bmz~VvvR9R-YisB`S0=ih^JRKWU*tT6~~%? z{ex5t!g1@jY3i-g`w5Cyl*t4=fBlgY;4L88hpx}~yKhm8qX$g(F#L#exB2}hlmRB= zDA)gLBSEYiJ}%>mv_>G#jg3s85tdG>T*4pQ+6L=sa$3Ei< zKraQTXLW5Q@#}wKJ(tpWmvQo0DXAE0?rsNPgxW!2jUaBO%~e+&&c%`;I6Krjb|nEO z!jDhx1-)Q$KTEpj1{i-z4k`F7D&z$s6uq7M2fo8IM=Jjm4;&y%>6^o`2xX3h%QpM# z57R`{w$&cydn*v7F_G*(+b<`;qkG^CvfX)(j*FqyC9A`E0&aO&T)j%y*ZEdu+7}F{ zxE=H0c0yTY?%!B+C@8R%lPwPNx*aa!FRWs0dDCfjLs}kD(Fjrl;wzv&;i)u$MJBO|v3I*v)^aI;q_@ zbBIiPT!2*tdPnk`bbjsB`CrK_Ve%;A2qh&UhqMpt*@V2qHePrXd~(jTgHVMI@;9(z z)DZXsK5o$G2dYd0um#M}buT>?WMB5nmm5ORMvRDE4|`LGz}(9?ij5DBfgy0~U0W*$ zjAfm_W%|U~KmSpWp3~e}i2Gw6IR$A7f@!T27NRHL3%yVR3ykg+nh9k{;XlA74Ud@> z@f1ZRh*aWIm$Vln6H{1dC?IY!A+4xhah!qRQv!q)j0KU6=c0{`4Us6p9s&UhQ6gAX ze8XK6?>Do83pKEnhk}q>J^o89hUu{_%YEOqKxm0@LecmuJ*Y7hW}o^t_2b8V7f8H; z^8tr^GD1UuzE~>0k$i)?qDeD4cF{P&ku*DdWl8Mo)FQcx?sp)t(3O4uzU6f0!awL{ z0gdz6TUaPEGQ_&lx>o?IT{uTg7^EPp$=j-JBw(Y4(44J}SCLtgg}q>X-Zw}W3NrG# zvV7PyjsrU;Qju9A+qlkHcKYKbaU8(6-t|LOvts@iB~mmwp7V!G>4hBfMj*623%Z!n z)D+v(V*sEW3uJO^d>qsTw2KaZEb{;zU|Dp9(i4*C7An-u+2!?1p^;WJc|!YG7v1*4 zeS6EjbOeHgM%eZG=HLDAK40&4rFGGLQ+vrWPvWf!#I=xB%+Ke6!x)F%bcaj;S%WDQ zQ5(BPL`ouiQE$V@+2=+=V!tY>QCL+CC6$%5NC#k(BOX{Rh=o8*>IsO%&9f#ge2o+y zA}y?-k!=i*jhk!&>co7NMN`OBL&%bdi*|NeBo-M>WQn6K7Kz>_!$Q&%kFg^Xjj$H# zmX@SKFj~epYLAC`SW)bu1!#)jqkGBg{Dzl+eyZ? z*o=^u1I3055Xd8EUwG_Srl3uRe(kzwpr(HVv`Ev0KMrt%QBEGmc7meHURJuJY5`%- zhQW^{tN1kDse9lJX=the@ZLfVt5j~5d_3wpIWb@F5dvx~yzcgG|6oI+;|OKyp=Q&9P~yHNQi z@(`$uM56IQVf9n-u{l%-^Jr{ z-)p;{;t|FGKV}8LiY6ukC8pk3iiZ^z5_X2n6ZzwHT#<2MBQfbx%Eeg)1P&^q4H|*b zI)UKRansZD2T=x9DrXPb?)2b6Q&ST>qG6O%EFkD{J88)a=!+ms$9EeA!LNdAyVBs5 z%@oP=2Wi=7-3v^!TPHX~s0o&8(|&lMuIo6H(it*amJ2CNDbM#p7+YVrTyld@&;&fo z*w+8|p74{TpI)=;I7eJd`%F&0Ij{dy{S+aD+EPhSY48xLAHp19KWa(}s6HC3h40kg zLp($e%kjjfGu~FAh2Q?`RirnTUWDAK+8;9(dMLnMNA#$I+6c ztV;h}{F>VwOVhlox*MlHq$brF(}y3Kv#+uvAx-ed+f-ODh+*wvq|<|Uh=#TtUf8*?B_fG z8<0afBds)B*+w_g-uB|)nGC3AQ zcAsLDdqk~7(ecql6d{P_#q+gCJNCT8;#7KT0S!an=g41r{$#l?ILWp1Bo2@SKKlWw zTjv9QG$1MZ+-46M^*dt#EbKpm;GK8{q%7-e5}ms4xi?*1&t)6qYSBn0SSm(KobTFU zhbd>!p+Sl6#z5x=Wim2B?ziv9|5rve)qswQ5{M*J?p*6H+(cru0;?{@XaRRcz%-m2 z{MY@Y+RG)597u-$-Ehz;9VuZ5kRmd`n%1Ep5~FhsrBbyeu`aH`T4D=9(as=~tz8}u zFm&c*?S05EZ6wT8sS}^RH+*Kk1Ra=mG!T$CrKM;P8!e5RCk2myac;A|RdnML=BuJ^ zB*uzxxs!by&{%%)rV57hkKiULEnU2^0q-zTb-{8cFS9KQ*X3`El&TnlDjs~88%0nlIK(3>^wZ;f*$(tEqHzm;l+bwQVQLX-g;K|{o@U21&V2K z`Sy}=2ALzfWLe(BDy)+p*MEL@cy54(5v{H)_r=@DvL}4wf?aiT&;8QH}#_D zHOfD}K|b-}10|<0zF)k>ty{~mGH5qZFj^wl4FHepy>HWMN`3J`wwl< zcS@=iJl(C}j}0ymR7 zN(|SnlmxT;j~;GlG*1-hsvL(38Qq+Cj1)a%|B2I|AY7cBJ+it5#6Lt2C=#%!5ABcF zfwn<)cMB=3%@nc@vM1)J7T!T&x}G3(xAVv!a$hO+|E%8|+GvfkMULyw;-Y?eQAx=? z9lPeQm&A9TuO-Umn~XIrSVX`z{px&gR~IdfzcBA6A6>9&NLWdp4M+cu770~S%dT90 z-i0NoxsvkXtHE=vfN^aFyinTsC&0cAMWvEQT7d_Y<|#3N1+2Ero9N5DEw7-^WGOqR z55)v|KF?m(jeV?_b{-7^k}U8nL-tVORlnJ=BH}Vq@i?{j5hRSrxR8D8mWJ-&3z~NA z=v*M%($c|;7mgce8a#Igm)+dRrXS+uuVqa)F zIEZWD@E7=v*NQsLZFS|SwXOXL$UexB#`N@d7^UH}sY1G5jPSHkM1ysroQK*LJ`H~C zw1d7%3^;EXH#@*+sJAHq7A-HRLS1M37v10C9WHuvq#Xhbgbi}daOXvOHNv1eAZVF* z?U6%~PlXR3hU8M@ncst05E4Qu6A3dwF{fS3i=FTEWhnj=97tkp9iEqv>HS`s)jo-f z6~h?Bw!!tP*lU<+ROHb2GrsD+*`ajFh0oUcFo3K5N!6Og18=jwua@%U%4SpA^S=S8 zf*;B>dVOK(m`85={je~YA!dL4prWK$u-Y_l_@W)Bsgaz7{;@JKDXAsQ$O5hUeqey~ z)`aCAZ~znGg}ZG3c?Pu|9mXoxXfOQ0WEXIMAF1~9K>H?sOAOI{f()0%cx~>&z0z$5 zY7wepM^c{y)GSzQK~=Z_IS88wPoJ3vK4MR7>ilRK>HcmF(tqdWzvjJ^%z}q-NCLie zC<(xXoSkD86@(Cd-_QDWA0TaPy;?~BeD4(u(n7@F`1gGB`?z~gbvLB+&`&;RSKZ4B zca*X^6(3r}Ei{|rr35gCwDsJD3-FAm{kD?jRacN?k#;wkSadJ>(S2Te!Jf}^`|gNZ z;c+~Q%*C6?lxVQlOl5Un^W$hv;@3gV3y|g% z9pHnX28G{!$8a>0y>d9qLw_>?!eQo>MJU5l0I`AqHJqv~uOrPBW`f|`Kq>*b=-1JP zef_YJ!4N9~f)^r#pz4Q;Z(fs~lh)UtG;qO2Bl3K7^m2zLc?Qr{IQ>!l0c*q_4L_+T z@*f$;wiHVrhBhr^YaqBUJ^hN4lhdV30ohwyu--nJDeq1T6uTmx_}b3WTci7aY%*TvcSHLk&IH=ph3OHfuC2^}pNM)C-79)RY?FGhEZ5=e?TVevVN zZy#c3;8nM@D(XFO=%tYmU^-1%bl}~g^i-}JG)Y`}Hy0R6zsjWAOW((xHa-ABnQUPo z|F9h2P-M6rH~W8K4CL~*Xqd87^4Kw`23t$Xy6C+o_cxm;jpMj)uC=!`FX@J2|K{J{ z_8lpdK1{H53Er}C80bm4-{^C9kwJt~x_e5x3d~)P%F=e$%kK zYyzTm>c^2_fuHFu_9!dx!&2ZW-{jQ)GVMVrX!!j6VJ9iHvdhebt|(X#Os@U32QC87 z4W7*j;GPMr4GrNN@%q&ekl<|)WVS>sTZXFbvG&@Y4!e+(l-AXYH%g&j zYb}`z%bqx#wVP^dRP#*Wp~kLUS0UHbDF4Y$GV+gN8@@gDvYrtlXMO@BLLUHODb9Q& zj*6$COU2Ix!a0%vc`mO-IC6A&dBdtL8>VLTpd zxZY5aLTD z{%|?|NLS42tABRKLe>6@1dC@Aiz>k&M#<7R4vS7qa24f{1xHmvmEO9HOJGm9&57De zk97E|Bpz*t-EnuZ*J{azMw&1V{W-P=m|QX|Wyr}-RGm8t6-7iX9N-ztP~o3k|FE(P zsQ}23Ui}3_twH8onX{ZHZM^#(OO{Wo(6QI9C$-C{l zQoG8uSW9Q;FN(eW%EKC354E4>h85Ajt@lDtz6db)025v$VXSop~R z@f*o0OFJX)KnsT~T4axCMSm5_xL$LqeLuR)qTaLjH@~fLqCt4&9y05gmfAXjW@lmM z$tDAIf-5-G4ji>Fp~~sh+-H&NrI}&;!dKA(X(a)Bo&wW{M0xBN`By1`@36Ak6HyEH zz3t#Fc-p$Be`D#V)#3QTO`>HQS&@z{*i*r3yBE=nlfZ5E*d8Oz&1)ApX!#vBqS}Ib z2$%|4Tv-F&P;VPqK3?WF|I9@AH7}P_=p6=0!F>cvH&cpQNxurwG|TZKg#M>b(ts5fs&H7=}6;%8O<8kC&;E5J$@X1PfR zRR`qQi9NyWAty*CJ@oFmtM>s70pC(ihJU@8tfPWm!dbVzGBQ~Pnfh*odGMmbw%|1fvr|y5{pXHW8iLHWsw=d=PF(TXY+DffT3%rIAjY=B z*|WF&Syb&M+(PJ~QjUL>&Mr7g+I?%52AyS_E&6}0M_-R+L`eW%Nyxz`QqG`(=aPxW zA3NV*z_k5po(bplOzUG(4JMa{)C>byzOM&Ik2Mrr`reNo*Nq}qOly5aLUhn5`|p8* zJ$P6FVX3#1Huvh{qCjY!Rd@4awFh*GP3lc6Nc@#~e*u={XMasSlJ+{Hpj%m-YG|k; z-vQ5@-Q789sh&im8pTzH4|upM@aLz>8^$kgUb}XXgRvu#`+wLoNsx5vurliY4KS5> z+M-~^xN_u$=mj)u+ZYpf?KaC~>94bsH0|F!uZ^0o^$o1{0q<4X&Bi^-ODgY>1SSVj0eQMkQ;2HGaTGK}clR$U78M0> z3xuD1n3zv}_`5d_&!oSmy*N-B;YG~3S=rg_@!he$(|g(I^__JN;2L@3ANGQ-|3#s^ z7&Ld=Y(GsAOG5az8Ohqfh9|&!LAs z?L5y=u<|SVm8o%mWcn^ueD_MCG-rd2+IIm1wgV#1R1dY48xB}4#`#__NV$0CW`5kr zy6Z*mKN*^-uV%6)XVMcVXRN!5%FEZVV$qm86dnJ|&|+BM)O1)_xS5TJfs9mqC7I3j z_4QxA(CgCaq#I^^@%e`C|CWow_27#HAMWeFcRiKk7>Up!_pB+kLO19ns$ft4_%+W~ z(GUvIg2F-p+ry}w$gCC0!^=yl+S=Nf8g^^>=e|{!z&>j138P;yvWiDzW$^RGep?%J zTpN4fwUEN?Egz+^+QPTmvc9aaK8|oPWRm2(ylEH(y_bb(2Jw)hB@XQtn}vlV(k!&- zJI4_g!ADH#Y-#a*(7QZT@TIBj_Fv;4XN;4)cps1tcx2GtRuGkwYgjJk%4h||(!ku+ zZ-Ohrhtp}S0Z;*g*k({d9|&+suZ7xa;qPj3&NO^XSEFqtZ1cMrX*TIn`)n(SZ5kgw z;5!y!Z*OnVzIo)+HZ7+yLE_Px#OHNS9ri+i5|EILWcydIW+J(C34&}y{haJ|#nqltE#631y)!cYAY@eIXMlvxm*#x+m zKhv311+6@?^bWIhJ}@w58;8su7zi@G0`3a!_l+BdVaqWCvo+h0cI88fnqK+{x!Gu( zJL;Rubk*EEv2!XEq^+(gV1j}2+nU~Yp%AyXAI+f?O`;nDRsCxQXD4y@DHFbjTveK+ zVR^Sq6g28&U3oYD%@3`9i2cw?K(>IMxHw0EhF}XEMLR`yahJsEXWl6ojISEBpyvJh z)mdW~XreY|QExuY_pS~Oub#8&u)Tp6#=lbWh};+}r7xjDG+`jLd&u9JD#xI~0%7IMq@Zp+G_qMgHcET1K z{|be&EHm>!(3j_N)cM_>-`~Sh+Ts}fFFHZG1hUNuk>T5wHx#vXi#CCUYFjAwew|Q? z+Pvh|M4wBl47#SOPpf2s4x_aRbds83EHK>1JzL!7$K~IvC7lL+O?{Y?LJ0aB@n;Of` z;wb~{AejQ_64U*(v%>-@r$Sx&)B!Gr*$^ns~IkK8uEKn;KvML1o=8Yjtt$q zM;}tH9HDa6s``!TG!)hoUcSr0f;TMz`b*3|%q4rXWY?A+tS=#$Whd8!%ip+xe`Dm( zMLzHIpx0K&>6qSYHLSSekF9A&UTXLek###2aRo#Jr*j#6+OX@*z*ZY)s#4c;uWi< zc=qItM_4ORY2=yA#jEsV4d>lD8ukKNB=IK>-rF=DeKk8fd%xEbaZK>qU!1nD6}EWu zmE<6zm*I}GPWrY#dk9%D42s^|`^Ry>FtZJ~;NO)M$Z>SJn2D{*lR{EQ?>1N?84o?BK|vjerQKapQSMY+<1%|{T7n^AM9>1HeyKwF&zqNQ z3WHL(%g9bekxijOva-vbS(RiZikm1a zrHshT9+AC5WJ@KKJ&F{WA<0N()$_h}e$VT9{Bh2ComKb!{d}*_b-l0mVCxgMsOj(R zD z`};4dbA}wX>ieMk0yvyZpPfPLXex9Ytj z(OY^Cv4wPJwEY~vrR-Am906hvPY&Cn0y{b~?b+{=h&Kez2TOBdHoy%I6}A>t*j@!) z4d#^(%MHUqgx#ttSY+a_*x3P{byi_DDR^fr_N!BtNrZarf{#(=W=1tRxJ7F-H2I;clshk3C z1o#W2=ggodvC%=>A^!3?8L`K?4D-3}nztWW~TRFbgc{i?D@QQu8ygh1@;l%IajQ^hhsU8OEObC@zyW zbtU=ti)d|!XPL*^qGDbj9srbLlk`&$!9d|$5+EVr{aXKbtzOLfh4||YVpGmHa@h}~ z?f&)8Wca_!CPxY~P{K%dqX!|u9%pBAx1#c|`*#uun8QzuD%V#UgwmA4NVKC zAfOX=Agnm?11ki1zP`c)TGJP~|u-7=I0IN1hq=<%LD&9j>kI|vREHAQ*-b5eB+ zV-IA7N6C*B>qR-h&<7cmznK(viNCD>ul167DzlVqyZuilKxEKW*3Uce9)4m{Kwy@; zK9M+~N*|#6M*XB;h)?kgsAV8f`z(K(U66@t=kt9J?v*CaHk|kINhxhb*@Kedpr^(m zq)HO4e}B(&eqpS7_Us-xfJ|S%=P61#c-8)DU73o3gY9wpz|N#^?d_VOH@o)l2~qZM zJ%jr0;n~&DjgHp0M zI_`Zab7!m=- zvxiESJe|u=lo3UQU2`S5`T3Z@MscNiu$|5|7$+WE$Mv&O44#ksz-RvS3G8YJ^X9&b zOdG!Yx=a}t2RJ(asNi0_GGElRm6ZHHImSGZ;W%CuAYr=x>To#f)1STrB|?Y|xbY+4 z2K8zNq5h!93Q3p{ybwP*#>x1GDjonhkE+si9GTPcZPxLOhnY|JKuaw*an*=+@lj!6 zyOpR;-jNuNr|y5!GlRP4<_g1B^=A(@pl8kM8F=^ZkY1xqfNaWsQ3<34`~BG%{(Ew4 zXdTO?G|L}(xw$gGDm%Q8GSGC~`|sMY$UE|5?c)|GjUd$N8tl-7$N^pga>u<|xf3N0 zPI$U#d@KAMRi>!@tn}&AS4+8mOIzbvo8XX-u!PjV~!QlP%m`~hGU zf)?kor%1o--jqhg@jpEA$J2ZBO;=xO(ejQco**U!G%_vbXnFA;^!rA{J^svg{JEcJ z-H29Z7As)&_i0?6KXAOj`7oLeT0aNoC80EjAQY5xH4vc`XQqRq3W?uVFHZZ=P$B-o ze%IZgOG$h5W@Pl)w^^5Vm+>+h<{f1U=G4dFkXq3arNs9a$x}sUl_gJ}e0HwHF>r?9 z!{hfnsQr&yXxffVF*S3XU1h_HAvQ&C>t*YDpu`gym9&i8$N`SaH= z*e`_n73bxho;ydTZEvePva|vhj(v+I*#35wIUHsQbz-nSgrKJj!pFi@J3o?W?WH0u zlh7D(f0%+*kGYwd;xSTdjQ8T6!5e=n^YdG+L;<$uTCEDTp22_@ds=Sum3@O~JJE70 zpUDMz)H7UnvdOgIG9btZI{Bq{MHN4O{yfm8?oG}K@%HA|goh%2+n|bx`xXokq@>2z zo-=BqZYe{eroXE9S>8(#aXO2OCEbiGthXDqb#77dXyxYRxk{N!?=z}8fD^^R99P22 zmt9-Cf#NoD)!o@y^jFaj;G?G=X$vy#j*#OJi!^@m);pOVROEfz7->f?$!byXl)E2h ziLxteaKN$%7X*QLGhn=0S~|TYXwS|}@juRmyh2PHQneN-3y-q_ir-xZJ~?Um$?+G? z*pdCb3?RO>pG;=DUTG$N3s$V$mR?>-yY{}U&OmKt^XdEfGiL5`S{Eo(vOB0Q%9LzP7P6>d$gjC{=hfDl!&SP;%0`17f0R$>$l~a%`$~eQ(@{ zL@avTcMGpJwWKz;ym=E806Raj60t|*{=SiJIcsj7u|ndyt7iGOC%VGk(bj4zp~Aam zf>fj$3Dez}2P}(9K(nek59-gQToxLutJ_I@6~tv^l8gN_#T_n;veG$>V|g2J{zPF; z4#fh+3SeuyAyqxW3;}25qW5FlvOH(tk&~aV-@#VGO-ko*pZ0YWjCX|(dgLEKJ`RkZ zq6<#t*rBip2*}iRO)2SS(5^{&F-ekOju{S0k000tMa?gSAQxj zZ>61i6?Ys%hLy@b-*{k2fMAY%*A$u~NR>VV42r;o&>Kgjq@@#+lf7g7j{IdL;U(ah z?0cZn5JL%m)tZp`>C?er)SXVK?1x<=8nsvDOhF(4*k4P2a2U3iWfF$o&HiCmbY|DM zs^T#jV9njPz6c8}m|lPG%s+aOYUzNrxUP-E$k}t%ydyW?ucu!uyi0ye+$*_@0BYf0 zH8+M^rk2XTBltQHLWNdSf_cZNimP_{R_<&h+1J&1ySf5&!N>M}1?7Cx*a+XqD?xSp zp3cszh}l*=FydCNq;$4R7>jNN>q9kfrAd8;1VO&-(5Gz1ooo|~yT9tN*fF?#f&8u~ zn1#ZG0H3Q8pdAi=_`r})A-81!5~N+6EY$pK0|{X)qBk?Rsy}I_OD?^S?G-wsshP}j zjcP_wNCwtn1ET@CvY$pr)80l{$qK$ zm=Wev3B}wDl*Nn&`Jj137b>*qs5y|t%lyrrrfbL~uOYu6|EmhlWT>s<;zy72?Q6Kp z&JrZIok;V5W<5AU3dUyW^`V2nruJq;7BpGZJJ8Qy*Y%E#N%%q2%gE!W^ZG=6*r|h3 znZBsCYdl-xDTjZ`=-Dn~e!|!i3O6u@>Q5G?rg;Qc5`7{1Kv)lB&FsK=#C+?j4GS$8u0!vX9}`OL(Mcds@9odu$Et3=<)m0htt-u#WE&0163apDCx9-sQ`A`O$*l zHwM|1V(Y(I)?+%BjC_>~Lw8X=BRnM+)!1Z?kd0R59=%Ilv9`YV;Zp?pmV^l=b&^+#8+9&r#vl)ao>fB zbBNPAdp54buD)w7NY2wwm$u>c)-QPndaw2`EXvVI%;G3F-V+Pf9hq#y3odniE^(7C zmbULDBn&lgTkqWI{0@XQx2ULz{HqRM4iI#9x_ zyM-5f8B+!NLr1wZTA$R_?W6R^w)}yUpnyR7tu+*$*2Y7dL-evp!Y)53#Acom6>erP z*6AjH)iv_4g}@sMZk9SXbxuL90)ax+j!U_*`KZX;Enn_Yhmw$lk%_yu^uI`46<^ac zFz|B7+(9b!jE^AxO#hhQ&Toa}uXuP-wgfvhc(>l$i_exSF>j+&Vp3rLyXMweJ-wa+ z(`Qp0phkQwB|x9iEsW!~P30swp>&|XdX+!Oho#MkB%aseo#_o$N#BY;+_{;Eaque-Wx>}}cb zl1329xD^+D@!&Uozx<>6Vt;DR66Q}xNj=U*i(~Tf>+)h0yjDw$xQHPcJ8nxi)}6}g zdH!7PXOVxj8o=Lz#0f8fE9sB@iOU}c2VuR8#FMsu8ENVDsjh>QEgi6;FnDl-rF}+z zNIMud+Od_57y+<|L=T6zg99Uz_*9eSk>aK&m6Ze2gz~3PoArx570@C1j@_Z55j}R` zM2tE%999k&>YPp<(G9Vl4miJ!gm*9TkNELj2ZO=cN{3$?pdT6}K!~_{^ew6|41hui z(XA94Zmq>W?J|iaYXIDm?7JwwZgYkv)cI+};I~OsH*F)M>py1)c3*s7lGo*O=Y~Sj z`-F|uzh3BzU~+)a1o@)C9nTTCr8HYLxRsMaPxz}N#{KSSCb1Z{4+d^LQf#F;F`iJlCPplY2KVoW!(iT8VY+3N*@dEQ{UY?qeC%iH-y%mFmJm&D>Srk6c%_CY`vhIh$KY7?@eUQ9rEZV+2#tYa%lWUNR|YgR84eJuhvcY(dD_)fd4# z`7YbrJ4+?uyG{FHTj20`@%!-ucGkp4($qhUH_e zjJKuJnX)+VRyJa#sQ#pJI>19Zc{aLP6W^h7`a059`im<#wCi6*c5L4H95f}eZI+?u zPh1mM!TlwtCQrP@@G~Ab{JrDk7wz)V_JqClQEJgToaPeS zZ8MaQMgW}|@lmHUb)0M!Fh$U2qh-s`oO7iF|FRe^3Gj8U45OTZ(gD`Wz6aTIRc&o; z{~Orj!oN_YN^~xRSfk;xqqs}9x0Wh~ajD4B$*CUkrx0qoN5}{Z3POC6q#2`gob5*T z@r%O8=mS|oUU#3VF$u7pdQ{2U5%i^Z6pS0i)fLS9Y*C1QY@AbNX8W|)iY$kDXVrLk z104y8zVMnFgUjr4;0e(t7}U#gDr8}`kDnDH9#LOkKec4dO1-1jLRM0emD1mtW&q8` zFL%(r#IPX1sPc}D-|^bDa51Ncjg}4DI=3EpzI%* z%$@N`AN*!vZr4T{8E{+HvT9x2-KU%@v8rw~6KEF0^|vbOQ^Wc6Hz=kV1<@a{reF1x zVT)?4n}MChV-Kf=3G4Q|#2X>idEoeC>6eDW6R;bkd#QJG^Yb>7{Sj2hNKOAvrHr4S zpMBT8&1(&9S>^W%@Zv;80jP{@4j&VFk4o@H+m)HXms-bM&h5nwPib!QmeZogD4kq9 zf`GxY?%OxXH&Oxh!F4_smvePtyEG-((WL66cc~ieCsE2TD$=7#IdcfD$iRTwwv;R9qbaj?p@B@J{x|{n-bE@b2H52amcCDI8M~NCs);mXkpp(fQIU_K{p?t+C2M z-25EzitkFp--aXm`NL7o&sBUxd}L&aZ5+vpl}hXpA4=!ZP;4R{GB%&@e+4wzH2?U7kZ{cuyf& za&_w+&4kg*3)p+C_9$vx>tGLwZj@>~Y3}1AyYmMT0mzsoX2?YsZmlu;={y9i0$t5_ z)l!aeV!`I){;>maAbuD)YmWYFz%x?Q)5qY{^GMs4IEgwL`zJCL8#};|*jAiL!;cbI znN4UK8CMSV_$}Jr7kYjcMNW2hE&VtO^6we6it!SQ7TD(Z*(Ygch56~|-+v1vmnX&Z zfX5+zlFBY$?qh4IzQRnEr8E$ZDIRD@lv6PNyas5Ib#VHC*Zk)#E~-5kL^x1}LMo1~?h?H{7*hN<*TGxNfw62x%Mw72Dp(No^V9wdw@^RP$Dsn_vbP9tLjmh$z z`Xm`@m6!@yX<3;8u}({vVqp2`_{_!$v$C`R8>sj;`P96X_+V%_L4x;U*nO40BDqx4DZ8rO8H#ABd6i7}rz zdQ?fpclE#|Jx7Y|Xv6LXw@II+6-N2s@87>u4KOu^z5p15qVh^s;U7# zD7OrNJYISCRBXTTBZ{FyH>bEJiq*+8;Y-Hotw{`PAPI)9gs0-GS|f9wC-`A4^( zFR!eecB^K6$n13avWrv_dNb!<{)84QM1EN^OL?j^%in}L?EbfZpp~Qo;!mHCEtu7~ zhZ7&_-Mc&5>4VZ6VF8M*Rew)%<`ulHugsI=H({8(S&mXHh|1GSt}7C6o1BKyf3+wq z9O#=m5)od))&n|?!EaEUw0fz0xa93UgiWI0!>v0F(+1hMkNo;izkdto+bs)KGKm2$BU2NpjJ+fi=u z61l&Pkk9IYyAYJ>uqVWIy5WhAa=-z-M9DjC=OvZjZ(Fox1V4k3(^RVYE-w9y-N1@T z_6f`O48o+(#k21AjhVT*GaoBm6ewSVErO$P_ADIQb1?U(V*)&QZs!(f#fxE^&c<|Q zM!)?bjad#Hcz>g^@Kd;kvNMjNOmb0_|rPiS9J zsGqg4$Rv`E=*wc1(;t0pcYG$0a3@f?6&UQKbSk=E7;4&=?HgA0iGMlb{%2j%r2xGg zs9g>Ik7GFgP?v12@+?_e$zf`%$P5igy3sYBBD^vy&%Pay4J6`VSXbWhYbWxbXB2xr z+!yk$PbtWr-FxNOo_~+}e~n{F7+)}b4Q4Obkr$+!EhE-NF2hHn)ob6jKK{dS9muY< zM``Hpgx_Qg@ft`g4JCcU;U zWmNyMjUfa>ASXp+f51;Hud{k`&i7B9Ks6EXwdT3gy!YGX!z`k@oQOK$s_l>YXI^=F^D_iDX6L5)6?Cw3=j~x(!AdZ8J*AzvQ5u1JX!)njW{FGX zS)BL<8E6tIwqQ!wZ*9-JfXjXzn$Gb8O+k2 ziPS$G{JnC#U{ZRZfj&%p|G39RCf7 zkDF4ITBZr=#wlsU-~@_KO5+pqI&K5LF6oP6Y36ew7j_H_HQ6p=X(?d9zTWU+zz>N0!{n`@{YG428};3?9j z^%=@{K))MsUQcNAKgI2V{*85y|8u%zOE`{7r6fFi`jl9HcE!K{+II3pFDwnk*%);X zW54A3$4a!|bip>%_wIWzH2KeqZ`=D25i*w?Kw5tMHQeKo8t23} z04Z^oNlTF5yE`FlmY@&}ftJz>QAwR>EWh z%LQYmNTB`m?Zog(X!dtqB4?EQ;#-l8ZV@$YN!-c2|INZAfmnl3IHTUWK$8f48u)-! zRq<;uvcRqZrxvS|&@H;#@#uF$FH-#}G;FWysKWxd2Vh~|51A%>7+aX{Rc|Js)%u8z zV<_W%>&B&H%iX<3RD3K3f5;Rb^?&-rxOgL|HVhbVlBSKawC15)o`;&~0o99^R2UcVX1GXL_bAnTitGX( z4tnowZRveq%MC`mtNwY!i?QXL4P&)+(B?k|p4u7uAHnI!@pl=$t>rvr+oJUJES9E?eDCO?CBmSzRT#y{7L@TesbeZw=O;VVl_%M zy(|0uSA;C^GSElIwIB&FE)LJys$hiAQzpfeyXOL3SuAODh^(FoI6*(Bi7Nfdv|@Y* zece@A>3^26{e=3fmj)ow1aT;tA2~I1B%jDD#aN;pg(egmp4HW=>{{Yo8U>7zKVJ`b z9NN^q?Cejz2|vz3zs5S~KkL}q!&5bc^8r7O!M#=rAuo0-cv0Ff*oxzQ5KwU&NV54K z7hq&Rs0S)pM>bq7JNnVQN%a{-oGc{gAY#MWZ@zB~ecvGF!~)yHUi-n{dteKL-?TvX zYh&(u{n{A(I)5{TC@+;2d1pdJ(Vd1yqZ!>}=nd3#h=Hf1gJ-%1N~ z7d+UyI*U5CWJF&E?7Z9j3304VW4Hky=6If`CEpI7ee88CP~L`;OS(KwJK~bs5|{qA z$-YeVdtuanGp1I6tGhc3rN3oyY#1%o#^G^4DSI|EB$M{pjGL(wm_mDQ5<%fMLc=BRPFp&ciBEJ|dd-Q1ZU-Dy|XN$5MlsN8Zv6yjf!l+jybs-=?Vh>6Ww0}Gqkz>CpERu1c}HZm?)<4+S0M(!rF0W~u0 zF8WztkhVWT;mXoI4q_ByU1QH=N@uk|;}l-Dj@l)-gXgQ$E%qx;PH^a5hzi@gO93Ks zEeY~RJ#}(M;&^=s1E3WJXhfDidv^TD5&3Ekja`YMn$buCkTP)An&(ShP#xHwvJQU{ zF8UF($_G0p?tgQuJ_(UN*(XZ7V%o$4`rc6J9B|hxZXjFhDBC11=!rE(Ru+2CWJ$IM zVW0I3|Mjj5NO1j11W4^PZ+ea$uUptz^nMK=Jqrwtu`hPY8_Yfn%*b{2iM*!O)!8|Z zNMzHWGkE0u|9j+*8{(AI(z_C4l_(x}1L5rIIoE4K%a>Q5w(p1WE*1S%T$XuF7WAYqA1vfVoAkTTc!@tx*sfy=krsA ztgc_SwLLGqg-gCC7T6Q^rjMbhiRDYH(&;K`p7JeT}8p_6^${2Rpk zAWL>*`hLJuB3=GB(!76|)-RjZ&r{XQiCI+bg)RgCSnKcH_di(m*~Ban)1*6{ULyjE z^}v7Pw5?!eoH?Y&Da>nVEY21(-~eXy@`@*5rOKvXz;0j*L=_i@Evi+46@T<-pv@b) zjUbSnLG3uWJD~(EB(7Eub%`UT$e5ZqtN*oCM>kU8K`9+FNk3LxgHOh0p>O+$%nKBY zoF;U1jEwG{+ht2DDu5e-N&@asOhm)^)YD~hk!;ooqaa!kcpZt6dw&r%Ntp+`BicYk zMf0qtu2{{2Q}0i>6!`9Mi-AsWV%IBXK_Q`*4FN3ex80IM&Sk=t;_~u$BUj-A6UV=! zX>*;F-9#*!2+JNE$n)#|wsQS}=aV}{J{ve#>t7~vux(%jgCB}!+@IreDn$Qc z>;ZK|&SLxqzZ9%qSa+j=xRjgRPnsLs#kvND7kc=6FK?0T&A4iXP1RTGzIoc9( z-slLBcI{t=@Mm)FGP)VuFb>D|4;uq2eff22ir1yURuOL&`5s+$fX{0`g|rkbb;grL zbiQcao(4*rU2CfVcbch>nM-FggXDK?B2We^$gJNMPt*BVRGMo&Qg$U0`P=mm(?Q}gI`H%~&1q_^-}D8w3VH+o2v=E8O9P{Xd*`p_Jyl%8H6FVu{b4$@xrW=$ zC?z358*w<$i_`!N;22%>P-htR4Dmn4mfF>_m0Md&iQ8&CBmHF`LK`C+f`#Wn71&M# zrt>?dy(_z88X`IXk1vlqKc>nEJgKpZb;lG|%T+Vr>Tng&CpyB2=g`yEuE@<&(!B~k z&&J5eh=}J16@fW!Ojw-k4|r)rQjcc)4fNPsHdm!M1M`Tmjj+-2TPJE^;2O2|vml!V z0W#a_hefQcp>&KcSNAYh5Wh{EdN4oy0~Ui{hAm2P1SQ2XAi?&|c+OvDq>uoIlW_x&3ryyw1nw~sBX`>5Dv65eP52J~D2G4I3s zy1N}2P@Pl%R~dXGaaV9Sf$@!|2b+N5@62Umxa0c!;RI3*sPWFqvGL}w4}+0Z`eRxT zgVnP^@FW>?PN_Xw3gH>StPa z+FOke-m#jhRWq!9qWC7^VWIP?VVHEwzo}s=^mE?1jTxi5#b^}Ols`YRK-h^(P9~x( zSv@G_;^$nYlEA;My#C!n*~AiE^rg)%T7p$el#|4_n-jf4vus|U`o(kT&8vwqE118~ z!zaYYbL9m3iF}$Shk>%<0UgSL+fm$B6r+3%|7};y%*@8mbycLL>F19}paZq`Ywp#N-Zwlr zcu~MGHX%vYCmC2)BXZ&T&peFiu`i?d-XaRy7N+BBJ>{UsavslO``01SY8Vx=>k!#K z+AQi5#ex`vjgeY3%^#JvUR1l4B#}512SMHl0uMsMXG1Y05@QdpjVZghi1{3y`TBK* zYDE5aILyT3;vPkoVg)qthCu)~qS*V~P3Oth|CT7FtyUT3Y1iPF0)-|7C{1JV*9A~t zR%>wA#&vga}xVT?uAeUaFesJayx9SZd)Xq(Q?HTJu4XpQF zuk~t)GJ|ZPacFm;hGb_=%pnS-@GdwFv9YlMB!JN`XlWNzs!#y<9_si@wt5Cs+(NlWn%cJb2h>G%_OZoZ^No2GBG~00*9|b|-FaB(Slj(c5*h zv$7IN-G5D6@i0nCL>o`FKv9Gn2FwoBtJm~S&-vocV3JwbT&Wl(?7a69hh4f+*K}#t zqGGC~mM|TGOg-cc8~R%S^IQLY4c`VGECj= z!UfRurDm~JW<4v51{sgT;S$Uuh>%yER{|if5bHzY-Wj-;Rs9dCV)90H)0T=Yy8iiA(|Z)JMZT`A)A(~Gc$v>_zIwc_*-k^ktAHg#D#xZt zH&Bw7Prjpf#+&@p-qtcYCgxdL8F!>wyE9jDMa6GyZErUq2nyu<=t9jS$T1jK6NHH2 zburq#i&#h|6O~woMep$qEk#QaQmfkj=WtAV6Y7jtOVW-2`S>ngmnYw z4m<^{T@}+{K|_pBvl&NA5g#A_CYH`loK31c#dDFur2yRoa2YtJe3nrfj*_^oORPNc-Dpe=_b$_V0E7yl@l;+jA4%nzsOm;qDM)Lue&F;Bj^0$E|?2 zy?(gkXQ|Yt`{3E`gX+p$3jB)VYv;yAn~wH7EA|-7S^@#mu57 zrIuGX!ia`yW5Kqswa{u3W1yVamtF(QnFaSdW!JeWa(&lR^OTLn&pP}tICW~9c_79@ zQG@&^on437LI^E~V=yh)eufwXecn=bJ*J6ffvC^$#%1}DFKuL17 z>gCH*F>f37UIdS7=5 z?=A`9{Cm7^3ptqcuvL{hIbX6ak=Mr-+!$-Lh?_k1!Y{~N?iBUt7c;PayJwQnXW;~c3_GcR2{aq zd(-nlGxK&a|7Ie5NVtBU+j)!iRB5v0Ok7v~_ft*CbHm$tI7aRi&)%W?b{7w` zSP4J;i7?iHPR7%!^>5-n>B$hE?}}p!aQ>H_9o4KP%{-Xm0VMcL91PR?MmPDCJ>v0|)W|z;M$B>y z4`CmQx%^P19Ry6_?3KW!$6BMTi;YDM2Tr*3vL{NK6{jump#wz{uE?>oF=4~O!WZII z_fYTP`l|Z?q~qe8Aax3kid+Nh*`z+;iAI){CUq%Kczbc?ITy`t*%1pt-M3US3&++t9Zl9F9s{c_4WG$ z6{8BVVURm=in!-|Znr5TM-QZ1b)XTEm_kg!e8i_o;lsoYyVDC^a=QT9wbD5t$__xg ztXPvj6*Dy9H9(=yhO$r50J`e3?cF3CXXNRzmdD@;)4GKB6VXMyJE{ z3Q6-GP;+m6=zaH2^!rT+X{xH;{Jmk2*Jpv;dq}wOj1!ew6v;au3A_MJrmT$5e6Ilp z0h|MAZsZ}&K4}KEFW)wCKblLBaE`Kt2*+GT?fbRYt{01ie@i*(y;SqqCNHdb0z2QN za3I_ZseDZ)wL0Z@yLE6d!M5t zzSl#p)V7L?o6p|EBhKdfk1sPeWhNJkS%6(e`MFCEp|2Pi$iatX*LeNJ8(^L9$A3qC z3+^qrWlbAcO)RZot4=&C$J%ZzoW-Pjzko))NYbs;*^nJrO04xta zpmF?~QJPukwek47=-T@M-hYLRCd`Ff@aU=H@?r#7lUaXthKG@KS6rF_{(it*Y%zX!E_XlN+%uj;b0RHmyK5+KekdY?xSBH`c>y`;0%_038C3B_*j zcr!!8NrDt!Saac+co#P~W&Pgp=9If<4~A(kTI73T`k&4phRE950sOm+Q*C;14dYlm zeIz}v+p_ro?(S|9_>ySw-09v8f%Xwz7Qr37nwE3$$Nn_8{G1#x<8IViWClf(&zOQ^ z?&2PH_*0ehg!*f@doPd3%8Hb03_n^0Lsys6p_(~`xWjs-*VeG`7$~;XAlQs8^&}%J zFQ)}F^yn5=HwO&$CXDak!w{34Yd&`a!ra5ksH|>hWy{;E7F-bd zcuyjJ_rZ;R(mCsQ)|vxZ z?A0UI3?6bOY4)%>!`o@ngmKGqQv+4@x#$x*+!}qc9T{ROdv_h^rz9mF|0o=POq9SP z658(a9F_(~m;Fo6rwUMt?}6LIM^ADMNHKI~h~v=G(gJ{lu}WdU8C44d$L>Hy-2by| zat$LLX;!5JL>-Df(h9`LOhY@~*y(3Hy5;>I?KxIWpaA2N!d42R4!*d3Q%&Hp-kG36 zx1)9Pl9G=OR#96Ct=2AfJEj0Y)_jvx1&=K-lxFNdLRU}`eHT^zx>TtSD< ziwC~B^hRD*ty=88%Y_SDs4|%;fkyGlzX%w9_bwAE`HxNaC@a%Fj)q*rP`8W2a&v;A z*&N&i@f~he0c?thQ8W%yvb1m94pa@wqSZVII!K&mR&?Pmk|&=#(!?bsVw038^n=9& z^NDIvcA{?&iYrqvRxwGxw*irYWMRkck*I)&m^mPPrFhG{I9?e}baQ|I72hG$XWe}* z0``_V0;jFhZ$CU)kAH7eE#)?2$i%6o3kXtDj0rM%a-R*Vkf_2N_H5%pwEoub!Qq@! zf2ADPvq5!~$+c9}fEvOBIDop|ZskTb!P&RUf1_av8#k@@>bEDcvOGQW4vw%fJ4RKx z(iVSpim!kH0sGh=6KpvzAFGkJwGJO=&^7vq>}PQ{F{ZROIdkFYmu7=tr_A`Mi%Hef z0??GBNYil|A>RPqs#1^EV!g_<~4CBtmfU%9UX; z+3y}OmR&F$(`$pHf~V}|b@EsD)IAr9^|WDZ(16^)I52+63v^Fu&)-iJw-V6Ux#VJ= zkUz#_t-j~jIy8rAAoV+)YxL7H@b@Ap%m za=;9aun$PlfPv4kap~ zeZ4ejzJZGd-1%3hrh`0vY4xuhX3__MilkAa>CS)=|3hbe4gKp)n!Xt#y zP9TiwSMAq=ygYbnnux~1f7jvrjioVj-(BV$N|pO|Z@4DLb)yWIJaZ|u{n*(l$3wF; z_ner!=HYmlg~&ir&w%PsctlHP<&H4zhmBVi{kjKV)oW^M2AOZqt*JqZ4>$kW&qD}pPDLMK&MoSXXwdDpcTla_WQX@8y+7l&7FcTF2HP;GuAW<0*d z{QjZH>D%&sy8feGe2P6!Fz;Fuw)U1`s8BvYHyPnC?x2*?QDnOb1rnb%`+tD$XDedg z)i>(2fKC4_)9}ZS?0ff41lrsny31Hv9$?>N5 zxMXK%M`Vm|PiQmL316u>Kpz+ogQ;n;ekY z?FtzefewQ21|-PxI(jkqzNqWzMY5OqnE@Kbbg}oK3k6}Mv*O{kKM8G(+dj|WOyEg@=?z>I*sqgvYK1iv z8|O$nFymvBaHwp8xzR6PGHVBM9bw{N+Epz@BuD56mo{QU0FhbgGYrCNYf>Kn&kCgzlOB!h>+3IG_=N>?pK!>d)i`rzes-w8-xge^V~a&jr+KK~ zY3VbW!?LKfs>)<`v=?){J>Y1^IV{gJ;_ioN{(;`R^MMWxxMdnrlg_=A&MG#45Q`e8 zk_ILtR2DE|9NY8u%^UVzO*oKom&+bsT+x8n5 zt=J68dZY_-rYrjoy!~SI180LbM|Q(X=fwpw(vcr}+xMN@Ml!x-2)^r{EOTT;1)2H< zZ#Nq0tNjK6vcVC+26Msa1bAt4ePr45^=rr+li6wZqlv>JZ<881P`{CcQUIp`C;(8I z*QufGC-`|Sw(#Jf zLkRsa-ID(mdmS|W2n>WJ&Owi8-W+sSbVNwcHYKfWX-K&fkF0i=GBJ=*IGKAwG#)ymLixACBz*+_Z zF~?`jW4U*Cs2RFw^)vZ*fZ zvO#76cXYny#?<|Zb9v$MW$@zp{Tjp&a8+-E3`>Y#{`r&1tgsI85X(0_oLwf#G)~(( zM|9b`TZL(+_usUUX{>Q0HE71&AR|VDKH+nJdeAu3SR=51Fu1*X? zt~6x41t)`8Hf0RRcn|q-Y9y0Dh zjA+S-p@jO8dRyxOl!5~BZz+Nd2DQtJ9Qz)C7qgQcHdRJdQj(9D;P)wwe2B@}a#Let z^heT-$rW`%yuobo@q^!giOmXF2_SVjXuM39ai#}xBLhD(c6-~}s(x4{k-ab>(_Y5r z^rx-* z!6eNuNJWUvQbx}YwOatQ2nY0MST1J7p@d==p!j5hRf~m}geRV=>j#<%e)Dkp7rVbg zl2Z9n%nTh=`d}A9Dnx{8$Nz0Wmde(}943}!O*5m|d5 zHQsW3KDtoRUFI864(LEVqxUaUmhHIM>D``Tn+FE{jK`39ILiI(btCMHV0D#cY%RIN zTZadmfGf))r%)oWITN@L(%TcmsrPQ34z@+LC8cd$EyN{-S>`4ocQS{uISXcYd3nJe z(P!$1&%N3NPQj*ZtsXOYXunX@hqNSul)17kwx?-B5jzOwq9DEU96E$`=SwqzN~rxd z$*N%~uE*lKQeAEc8#jPDP*Qo`f9h&H=_QB#NLDjB;?pNraLVUBd}=BM$UP8Xcbfn9 z#jf-d@w2=(VKjJUMyI%5J(YC=cQsztcRLC1A>yUmtag~?)j{7H$nsjXIyLoqFFS3a zX)zu6vSeQGZT>-YL=jbuM`{Zfj|zG*vGy}|5XL%>w~fYJ{A`3~1O*d%jF#m1;b7>~ zPkOIc6crKG(FO*5=1FIIM+pZOqB^^~yL);fi^C7yY0cxMwB4%3y%a@K(mhT12O^`C zVUFlFRO5Ev8jQvY%R{bwYSmz$0%f*RQNzGKTXFqaBE9}H9IXKfg#@;8H{ZKK!Dcx{ z1EYlfa*;dj{b!Z>9;CA}w;j(Wg)U*quz0r+4CXA0?}r;Te*yKW!A$Ve0P^nd*Z8O5 zaVUyPJlq8V-Lqrjyu9Y&qbjx8Prp)(4!8z}xrL{o_Rn^)TR|92TST=Ed40tTP~)kl}|3fi0DwMjl+rh*xdowM%U z@T4_=vgui(d=he3t&aQsbkSqy@~+w2zd3){%1ZXz)YKFa1@``j0vj9+HZ?bQtu(__ zN9;jt{Q!*1R9Lzm2v6OU0`z6QcjopTPj6NsM{zcfk`&6}!`YH4`>l9asY5gF3R|!p zoL7qbXq$UXMn?F`J`L$=VY-Op;u=C|EU*1(hEVYIo~Lj|&f5Gw-~(-h@VGg$@yP{u zu5&GU<>iJSw#xgD+fD#tMQe}p&~p0jb$~0qHSXtf!og|JX7UNfF4CGO2XaU50#q7& zI^g`@sn*l3jsG`}PT(`Nxp2EY!wzrx#2bLmG9TQ;S}=?kiYnzNA-R@YcWLm=(##i zI8bY9q`E()v1Yp}BZnL!CxR+P?l2m_r_LOnzHcF#yk z%9eVhAg-LtgWr*0@Ftx7mef1~h5@PJ@QA4#@xyX3aP5E0rZmB@8a%O)lB#hEtt3P1g+C0u9IioodU`%SgIaj4I zeK9Mq2HXaq`yzPr@pod}PMx~_&!zPoVO{4tCN#7Jm?dUs^Rp$yX8I61hy@+^1zuho zYu>G!%}dpRDW?mX){$h`>d@?$dHey1#2Jg*k@rb7Vv0InY+Q1%(e7Q_%Ad(s%U9(6 z-7Va|1M|QonY@}!i=(hG8!A@MfxR`GWo$YlBnWduwF$*uFdAeFLG%2C5t}6t;-LX; zEk7a4HjuNG|7^fIgShOYK*gIk*Z5>#vIk{#*_xP|0*$r(bEvZ zd(7Lq;eU@jkB8%&4&~71Nt5zA;=!kPHS0@!%7hox6#5zdv-t(&a75}^uB)iXCMbRW zOQh~-3&GrPV3emWcDyxVdDqU5z)^t*^8C5H91htd3Z=WWjHD#rO!xr}iha`V=SAbD zjA}&YgUe4OX+j?A6CR&MOL%(f5$)dXtEPW^e$K56gs2?*lCK=gIR5PzwxlCf{911o%2zO>(Uo zT}h-H$S%!udzI`x*9*%0f?BpRw*ShQGe-u$8&fPV3t;0 z6@dMFo#zU&7-tsT`NwB(p;Vi9HSXJW537^tIjZ&j^hDqyjqX9yn6%ItEiL8;u-AZW zb<(b!Z~t{~P~-S--?gJ)*|P^BGi8~QbfW28k!sHdPs+$x%-yt&UxEuy?w_c`U%q@n ziv;uHcTtB&>9_86H<`at+xWmAykY5y`$4Ziyhs$x4ZU_ZZPb*hfHuQ0eZWDOe3YT2 zdZD);oLC$~Ynd8D!Z{d*um>vY@AFh+wmzz+6?baEQG<4kXJ*^C+8o)Zt3B44?}iP0 zrOZTA_J3oH%d+KU*+6TZ=(TMCL2FVmPZJvGg1S=I*H^?~9_78KvfHEcj`Gq4UWSMp z!F{N&d$y_F9+yK(gId}uXFc*k|8)Farz!Xhm^6E~b!>hPfLdO{R<8f!YH%M$ACE8Qd(Day(0)FeQCm**tmN1cXU+#DzW@myha0e*6`3#CQ zf~PDytV_WtM6Qgi7Ky5S5Z18Pi3f3;1NEe`7>9=d+za;0dYgTnR7ZJcg@?YK9xT6e z|Ms+ZbogwnG6pL0lX-WwYW2vN3LTaNnucNj8crAUvrfXdRKmn4O?o5UFF|T|b z{NPYNx>}y9Nszzh%?udj)y(}HR~<$B*d3`z6?6KG6Sv1Ol@aA}7U+l+({-vpwSQDt zw(WzT{0vR?W76QEzBe>SMDLAuMQGT(Xl_<5s7OyU2K_1^JV{eAqn6iG(PhzLm;QMjy< zl~A%G<*KyAWn@=Y$S5Nj8QD9dq(Y)3MfM(*NXZr%DP(+~N1yxg{f++mJnlz#T-Q10 zeO|BU{BzXFz=!#%mFmXSNtMn|pJEisS_T|i`U6PTSC1qfufwabARlMpmc(CU(0wXt zzr5DcV6p37idNz>M>JG|-UP7tW*D0U5M!?3yLawjox{7(onBAS74MJVU@<@tnfjmo zJB}0WXK&fbd7mCVLamVZLG*K8+UE}q3Msd=PM(Y|KM%_6ebpMlmVs+ve&DNfcJ@!V zvfQOl9A*LP?r@1bzMg1iA-k##HutkoeNbqU_1CzKckaMs(DGx4fyeiK`un4a?Cis( z5I2S!odjn(z&Yg*(@GHb;rfqXi)FO|1ZesOyTjGu1v~ZRz7!tDZ+RVrS_;pLT_as& z#K^U{Vq@};ESe)pA5-d*I;|4V*iR=*q>h*8W?!(dRkkJP&Of9yY~GwPdF-+ibwOd_ zjirUip?oH?yG6yu=ZNYO;|j+3IcVnR?(xF7lfL1yo$u&)e@msNBbOK_$)fon$K!@@ zU*=~pB#-RUU%nj;DUZb^sU?kZNvg1Nr!U zX1;%=gO3G8l0fG1W}o+zPI#x`GQDC+Wq)K97*sOof{f8Vb`!bR<+Yb>t>>wgxv5Lb z$2khRl{}Z@f15d7{J?tdg!Wes$I$qCN`!?Rw!NzFaLFED3~XyNXk^JOdMX#wu)M73 zdE;}*vDy=PTj|G_vQ6%d+b^F52Z~89@JHy)H4S8inzO!_6WE)*Ka4b92ZJ#>8kqYD zq8>dVq%>DubG}^Qt(VksPB2(zZGm8Nu*!h0^GDUGVVx*;3gle1_d*LK(v~*pz9w-^ z0ZQpJe}@UYp7$#Zvj}`9@=ovGtS3d3vutfHbdS$;(n#K1;*)kjJ8}4eUL4_@x&BjR z`XSEOKhv!9hZhRSQfLu zvJ9^%l02bDRy(%UOePM)42E5B1hYI3B`3$OhsO8*jFyVC&PBx@Dw=nMRm0H$Fyuur zAc%YN`%;CIR0~bn*p?TbXHg#UJ5^5g`&-toZx8I?Jdtwb0aWMm=>Z7T-+`=$%5gSL zwX6={de;ZpF^2|ON#iOX)7Hj1CM8RRa+=Q6i?OEp`E(kS6I_foaW>mvWWHk~BYHc! zWxLmJC5D+(5G0O2s0c34xKRgecMtm|o0~EW*It(L;gseDPy=YlCQ3)uRZ6g7X#I{> zHK=$N)UBF9L@T<_d7XN<07NTM@kXFAOR_}3{pz(b1}Q14j!Q128^cB@HT~3z=gOy2 zlb@(`Y2{hd{2Wb{jeCxwlfIH5ndUUyFJ4Rqko&dLTBdHMV;5lE_!BdMEe=1O_Fs`X zjg@!e#LCmKO>=C)>K09U{F7RA;b}ZHr5TpXyF5HSJuh4+zxWi9-TsmHgjwk?OL8W% zQ!0X#DiDeM^^x!qx3%tBnf#zpGiA1%{qDpW_>uQSiq$n78uNCs>sc3hu^drh`3E}XirD0H5*8h7NVcKei1LJg>!q=*w- zsE6aL>ew<$ln<{wf<_?u^{O|A3j^()8dHqY98K5Fl9O>(B36qd9bt~N_(i0G!mGZs zJXPW=1b8mh2dHnrfvv1DMi$?oR>>=4jJgG;$BrG-+ijJT5QZiZ#zjExC^cgD?#F@4 zDjaUYIC@Gl=2&JM!U!xa1EsQvaPiBR{W58|ruw`uF0ut{br#WdY(6eARiGSg&U5lk zhL!JQ=|STG$o4h|@Cl~e($s&b4>`r==PzDVcRxh!3c__TusRx*qze{yo;bx)(B0P9 z320(jf;?qWo+C{Pz2y^ip6s8oQ4BJa6qc3WoOR0t`Y6&^dC^J+m^B{1xc&VE{Jw;1P3!~_c zFun0V4SL7&K0sFzT_<=kL*DC_;L$I8B2=4038=vPhM-1#6feH5F1DQ+vNN* zL(Vx&7t2Jfi00khK6l$O5~>oRkKb#SRc-mq+w~0;_0pUxvWT3HgJXxx-0tMs$h?>$jzHwN@uIJmTBwz+|pA1q2Y6jys|)JzC@bRB#c*;^NW=I zeKkWG4TPJt_#~fHBg0))MJ3{fB8Q`nP-Dx1-1Gt};U1o>n;7Gq6|TmM!`iQWeC{_m zA1=ewr$3|m5)cABQyIqr_lm3-mWBb3hAjm6WFc7|^`&oYF(bsg1lHQx=&}aG9ycze8=h7_46%kwolzL~^ z^&L2P5L%QwYCEufBjaabZAb{>yywb|2kt==#k%vlMeT>8fk%@j&+y`9Pq?ihC>b{` zfS3VcBhU7l@oQLp&X|}yQ=NKs5n2A#9iwZmZWfVwvkB=LQMZ!I%98Rzq?6D6`Sx!8 zAdAxe{i)j2!LvzwadbKk&eWMoVg%HT%wYp254SJu*DSqVUEx>mG3!-<76UPJ_ybU> zF^N*PU2^eU)y+93H_6^>sy(=L0^LL zt^EQyvUX`};oC79dRu{G=K0cw4Z?T;9C<5iqNn#AuepW%wHYJX6$9+`d|;l z?l?<>aT%s(r1hy6Yrbq%^x3xby^7$Rl{9_iU;6M2pmYyAYK?vFh@S#NXWkBq7?QwO zYtwlj+}LGqrtM<5#pFGAphon*EAr^L!bz8p4FmpvF6u#cfa%$O-VAq<**DAzBr*K4 zzleWO_q8ao#&4UX>qBYma(JG6~gjHSOv*)Cc?$rF3lFx;1&gr_+F+Zv-6i+?=zg=Q+*7jOABW1z$D< zT^-;}yBcpaL)P&9vW5H;SW{$dHl~wQbGvx7lb+o)6QxY&pLs8S+%A;YoK_=Nf>L3@ zzoqCT72{)3-4PRlyw%L&SDePH0$Pn;qzw?UZS{msL7>s#!?SLGu#DQ~`bbQMpYke+ z3*PFElb0ZtNI8U)A3spE-C*p;55ld3`*wes@v2-_R7NHHa* ze=d8Vzle9Haipm}YUKnh(-| z;VMh|aHK#t1Uu=|32GqXY~^m!r9+3j$YNZo(QAkN>(02IvR9=)c57d3FADNN8H)U| z@WTL(YkWAWn1;)qe4k!DUdGmGmWP+u@%rRSs8dHMb*U8Tw&9m5dd_OfNj)nkXqsfD zP2%&7STk#Un`TM8WvvN3jSBvCX`QcY1Wfn#jrH`eD<7EhyQk2`QnxR%idCU2I&Cf%BN7XmH z|8DP^MmhPWo4Ptc$wwe~4o!zDM3oisaUA}Wmoy8_&6pvcNxHwmTVz8=1rP>j1=rHo zUn|i8Va#dZXB+`b3#P~tYgK#vUX3Y!K^#|S#ZN*ZQIm9mDf}Vx{)ET<{#u3r zqJ#Lw`*lei(u4j)D##DS!QMZ;Y4k;5QBlwb;n2`c{RlOQIW1)T&>r=xQb|ebEt}62 zPZoK7;UuSl@v*Wz<8P2TZePsk<-N1^D?T>Pg^N}O)f2x_$u($lvtCY0E~<`5kHH_k z&9B|zIPqHWy?BI?dhOXQXs7`SanL3ItI=Cobpfp+mkp>uT**xx; zWnwhkGzCSVrmY3;Kn>oE0noqG^O5ymHGhgo|DB&PA2b1e(mHbG>8bmtspO~3?e@ep zF^jy>;0{inoP4yS?{XneA zSB#fpm}{=dfO>rX>nm<<2Sm86f?%NHo>G78Bit@@hD^R_!yj`Dt`dB?fgkZ5c;>!W z+o2+0qW3UNDJkhzv+A)r`++XM0%Tnw1E-K|o(btGxeM;J`2`{Qr$F>f?XdSfNMO*_ zL4c?7&+V^kJLs1g?vmozhGu*mC@n)Z#~EV1n4f)>jb{i>mR~(&DYPKClW$^GW;q}6 zO&2n9g_do}8`RVEN5m=bkQ^e!+Gl}BNV zOVBE2FTcTS%5!jl_>cv(>4) z7QLs~BgC3%I=%{suiHLlIDxFJg|WP{)d{E!EXy3EFdI!c0KciFKI9d9O}f+_I~mZ~ zdw$<3tNWTrlx`bIZ@6Rh`c{Aa&`EKhw9uvydGUG7?%Yf-&xk*Nr{WRM$!$>q2xsbt zO5`1Nfth}0^37wdliL(Ktk-S5Oyw0z>~CCj*8+p7(il9kEBK#(XbVQmQoK7&1OXvP z^i=!7tf`&KVq381C<4mR4uZkbqihA^!@}B;P{6OZ->G=o7C(st&V!|zUc~`=#vNCU z&jQ&G)HoBd@El1QnKYqWR{YVX4%986gEx5d^hHQ)1B(5uW#Tk<+Kp3aaLo}|jDASF z@q*{i5yGA5?qR9EQCw_4=y|+Nh7(e*qrRf-!Fvm};fC}c7O`IUo`^`e=2?bfe6`H% zevFQ$GBW5&Pr_ROrmS!4b-mrV1-{vRG|RtG@$dq=;gfz*&5CM<(+A(#b*igq(!HK~ z^tRS^s$_z*^`dS4{P|(q$moGO8dme5o9Z$o61sRJCTKLX%F51(&ND|4rBMb-S;83K zwz%XgV{VTTMvxA>=evT)s3pX7h*oZW+}~n z2kE*)@wZQC((O&7DROYHhn>E3cfnxiLNPq2yxMA9x$h1jh(bWzl~yCV4h6q4Nzuty z!h3%vB_)~v_x4ebfBYK8F8|LDOQ097j?vm?_*e>0f)}}Y$pP4aZibnjQtZdb34}*P zt=<=!xIrP`&SmcMe$D`_w1-BI<=e)%(KJS7$35&pt!JBQaXtb^!zJ4Bdwse(4!CFM z94fL^;5uv*#f0*2A$|VIy3k|h#_ZoAWFn6eC!x*FV%&__(z{f3j~zSD zab2`TX!zQrV>rstO8ZhD_+=IIwT$qphGL;I9Yew8JmhjDb1CYG>-WIh2-M}zO=S_v#i`} zp`e-zbMs}Jo4cSHy89}JtRkQjgzhOW$Bj-uFoKr*gE9gr_@K>Vf=T32?WE*$wakJ( z!^gCb`Txx%Kq8(L3b)@!X%CxYp0XJZ2S5CVL+dLkgPF!!xD$2`KL`;Q1OPUQZua4D za~+2bA{qxylsr69g7uQ@ePjz2S5Si)`ru!`dSzH5z!v~3S;kAMobOKip<(Ii&%dbz zCr3y5pCiY=H^rTh#7NUQJ6p&q;Nju%`q{I$ZPo`b>%(3B7sp)R6dD!k2OLgpKg=PJ zs{sOqeb?=G`j4p{G&B$swg>}f(@@(lM-Ie^no6?0a&~sE<}_N}BRk=Z$JS09$7h<& z-^HSwz9xO4Ceur=_$P#yeZT3`zdICDD&$4~uzj!u22Px`@~)95E<1B#e@<-8AzS?| z;E0Wh$<92bi>VX~$MQ^*QhjOanpDQf2D3{xYx*ma%Arlah@+$EGt|uYKe*~i?O(A! zu$G1*B_%EG_oAaj%}49+34C2t$r8j7^1ijJ>*$}g@fktN39zF+&~o!q!zqY)+^0Ml zfLIu&!~@(+8Ez?S083CP71)(ym@`?D;^IU-c#IkLN-K%57@8z4eOol8pq;o{OJfWK|p6J1#n`n>8s_;MzLjXVgkI=f78@_Of?D z^hynsv!+-{j!@(%Mi*?1swZxB?<8jQFm>3rzv>s%4hJU3`5{YA7|1Ac#J2?&A3Ean z;T|~YduO~Yk@@hUZ42Ujr{6U2Q<37Ku`!jbnYpT%6{?f@(s4+q*lAbuSJdcUOT-t_ z0$mnFmL-#s6aHOOLk%J^P^XGU*V*5F(O@R}xGH$h(E&Pr8UTnMWn~X+r=cMxcrrOT z^m8NC?d(L=NALdj^RBKX&J`nKeP@FH;aP9fSBb5yQ{fZ`M8GIma6!k9_4@FS&6I6awE4)gJ*Or_O=TZEESFqQR#ea*P;A^)sN#;f)f_+FOeP=J%RlPk@o_Y zB}8P$tnc$jns3095D8Vyb_o07Rdo0NdvpIG*|nG)j{c!;4|==+_=wM`P?3&z%+P<{ zs~3cY`IkNJg~?*jx?~!~IdM2has^lV^2`q zlY7mBVu?4te+eN98Vcaw!IieJs9W6MT2Y2jen6~K)5@7oohnN8SmXL-LX z^S_A`vo-4O>KmYSZL2x*cl{volQ_9?GgB%=GxgUwAgh|-2!_@uAB2!)@{_b-b59Q- zmKCga$u7wFv&JZET0Keb15T`F5aExuVC@DfFQcbrvx*^zn7+3d^b8+}6YEZ!lMNQ6ii zK37suIJQN{$5%HvB&6;ApMdmrP$uyo+XB(0DVsIyRjCL|D!J$Eh&^?AhhSoJO+-O zpte;0vx0aJ;$^i4<{yaI@FG-YqaDXxfsZd_X$-(sFmb)CmYF`aH0;xz$dNq!<eVw6&4}ni7JovHAt0D{1q6Uy3DbjbLK-4ie?{8 zHhOi%CnVV4l^dT7vz|3F$pf)-Z~kxY%#35~qfNqD{7z>l)tuY5FW<*F#vY<`=RgetER|OYxdW`lOlUL7Rie$=oK&EdSUp zpF$JSIVm~%%7L(uQ6ne&gD%rMw=%%p%-d2-aQw;{I?!tQ=|Dh5{5 zLh{e<;zL_r;BlpD76FK-{2h3fD_)5`%vp;!F9{)7>+-d0oo4ws;F=jquDjOwo4`WWUA5H(%U%!kMFmXLr+JeBp;t8B&*mPlql>RH%h zlPA5U9!|MT-6Ron?|Gh`5UfLb+4Z_gM79rO-b@NhJ97s+mwjTv8YdS1G6!kcC_zmC zZi_j+>8+kf741#eJ9qE4ez~(d3~96}EPGE~1md(x*7Q##S7#*^$Y;m9#&nj$x?y#3 z_LD9RsmZX>gIoohlSRehrmq-LM%LAt<<~c~Y7^KcRzpCWba z=T=>Asp=4;E97go4gBOZ@TTv z7K%GwN%*}^QxCeX=PScg4ZyJI^J-z$Ic2wDnQ5TfNCXPgG?nDsX?9WyosF_9>_L?_ zMc)O=MgziSH)fEfeLX8IF7DA$Ry{4y#WzLzT>bw630$3V_F1{Pofe8V(ijb-+e zB%vtH<5aqMkXOlBZu3z39@DeAX?m!P1`U zfLbO{a8cXb?HH|b;*TT}0pILFEv0PQ_buIA8JE*Pj6to7EJ0+pPaZ7X!Rq^o4sdAuUMP92@zmR=;i4uUs&=;G<3O$ zN;dEub5|P!-&41TbZ%;70haML`cp^R26x<72;(pIJGKiRsSe5s*1{m0+wumFTkQzS zB+e?c4I%z>uDhwb{8}4cSAEasHc@}Lef&5O$J}vd28QOu+h5f0Dt7t+ED;85So#@> z9J(L(C-}Bgd*3hg1_G7fyLBp-VX#Hr3O4iMVgHFWQz}ue&5s`;Q*e$i=z(#@%eAv! z52~_Xoe__2Ftb>3w6{;W_47!IaG6!d*et=H@uWU9X%u01;v!Ao+ZvdhVKk-1eD1U; zwe8E*wwVjZ0`=Z~etgUJ7FVc(?SU&2VlD+7@{MT*OuTEdG(ZXf=3i1SHr+{OJ>2!P z$)H4lDplpnBlSZ9uMu6)rdqSv0jr3@Kt^on;gK>*N=$4l3SCeLwLRoySt({;km?u| z0rIhRX5*ZIBn#g+#-XM28U6myzAjs8xR!2DYO*}MBkZd%zs9hyhRV~}=7ZKq9Sg9W z{<{Q8m-A<7l?dAkj5sLE1X3B51E_7wrl!2uN$8_R$v-JW24iiLzdBt?P1@6!gVoOj zGTeo~KJuu9=ez5mUH)be+28-rg1UhjpIQp_&j#YN@ZE!Sqy30iFXk@%nysajJ(m8A z)dLO%Yon!%Hfw61kXBanUweMFg~<6c6vB}cs_$?+$tx&C%*Y}l`LTk$C$ee1P65Ei zlGNYO%8u1gzE5z*Y~EebRDZKR7%PMY_?09{)5JD2R>Ngfc@asB!W=J}ySvdWg%szr z%Se3*Gv5b=#7Lf~b68{j`F+*Ba;p4=-kueH1%4N2Gwtge8(({_B+hq%>mi>zcU_K~ zSOWNJ-8BWa2dKd~u;LCZi8n;#T^&XPZNkR$;Qg%Y!Q61{u5+)4bbmcZwGPHwi6T8o zpG(jI0!C>f^Fbi?owPdtK1d4>X#+&4d<5E>7gkX*To>2+GCTq!cJzAsQ&>!edi-dK zrxx`VkPYFPBmQ?g#Tv0d%&(YxOm9YQ2|n=53HYMn2A6!U22c=(HsmT5_e}J$KnEW1 z4rR{Ldl4~86uy=hm2jf%*! zy9@TUB#lft>TqbpfuA5;VHJt=%j++K9E;p{Rn8i9DeUy;gxZgo*4XP+VEq$ z2ylVQ%M7hd#HinX$FTwl;_20KetV8a8t;ih$9W1Jd3JtgcsG3F->2rFyeQP0sDkLhiWTVzT1j?GMHoqjTZ=M?-wwU)PbB!ggY_k2Dn7V59L+dhpecmEP zegudGtY#*NAe6Yj!BU9S7w_`Jq9W*=8oMB8^Go#G_?9F&Wg0BWR-rivngt|XyvO_( z`45MX0@*^iS(~_5RThCI?;C4|fGQ|VM_F9U{-d?d@EEO6*wH*-HM@(oQO19T{4*`Ie z<>Y_6;TTq8#|po_92-s2OD6z+=;mXtF9qyDtdWHY zadP9wU?tjc;J9IR>n2e61z=AzS^9Ghgy8k-7Dm8C zcKoJSQ?si0_ASMq5hN|^2TRZq2=1`3I8t$LXR?7I-QI`Xk6qzxGN3=SAin>qg{=X% zA!Fo`i1M)IpTMd}T$gQRxS85oz37eq-*?XZy!@3ffxP@wExCx<GItUVXok51qbza3Hqjz8D7TKd^?ynwzI0mU3`zUcsl^sPFmIFZM4exK&`K|Gf> zH&&Lw|Tp?TsMYQR?f&E005afDo9K>?j#2lY*5?G#_!b2x<3;JSKOeS_wz#*Fid#S{ZIgyRTPw1Nez(>NJo!g=V-P8Cr z=zLx)%It?&h~3;Lxdp;8g(E;5*D=E3w%2hZ-)=7A)kf+=G4I7Ze5BFM<4I+BVS>zm z6o>WXJ0|n2eH%G?ByQk;!y=r;x;qTqMd4*5OT4qbtF~2ON2A0hA0TD?J)SiDKsNFy zZoO7t>S(%)TX?R#@>pIBm~O?td_ooT9XLxI|1RWYmc22uLA!&F8z@?P57})(?UhEz z_Li&TGxL@?>>9UU-T2#SQ}nWD!h!cvOXLJ>H|AMW__2dJqew{&LIzggO29<8^XO+I zNUFhwgx%7RNhnyoYbJ#L#mR5*xBY&G#N_EYBDhv_K33FYyU zNr%y6QgF#-ep-;gg3-z-mBbtDY`;qA3PFB556de4VQ@CWJ<+a*;y6p#U|7Ofm;rV3 z@jrwRaG13PP!PoHfr)>)am(d6w`kA3eft)wiOG?~;YAN6^MiY`VU{Jo$4fYS`GULy5EAIZcv&N zI&%=ugs=s*7YMFvFN3}(j+}8tYR(cGP978Wj zPECjZZpw|IBh+T6PAQvM>i-xYpLc(4E%VSx&OC9@7U)$*Z{*Th%2VLTdm3m)d&jjxkBH!UBt zfYGC}MX4H1s#u-@QmOVd#ag;;kfs6S47>mxhc!u1Utm%}C9{rKtzZ&#zz~is*$r^w z|C_e3T{8J4(HQ>9eg4@QI-Y8b??E%!Qv2nnmI~A;tzQG|Ii_zc&weKBUX|K*s2rA~|C{0V-t%T&MB8!Q_VP!JVf*6WFG>!q7c)t#MD@4h8V zSXv0*_^X?zJAh*d!$`T2c_mVgJUs7N$@JYDcj zn1&URTLwjYE-Pt##Y7lsV>}*XM^zp&jPD21Y&p7ZiG4qt1+$Nadd4n&S`G5EkxFdw zgJvTi@#t6NS~D_#iT3d0UIMV9V#L z@I82VhNa(!$1@#%&J2LWVl^$^|{D&&&}&ILgLpL&KD(Ol2}`5T`S z*Az%3`991E|88Fv?3QNJ5fgOPV$pR+5=yrzZ}&fckA6oCJ|LCyen5l8l3E6ewutqL z@LyV!jV%aA!ncH3@2;e zhoC!qrVl77oijH6X0c{KtY3u#cO$zaMYv%bsaf#eb?yqjXd)8fk` zlqyL!nIj2}7h*>RN4G}o)TgaNDOBt+9Go@X*5K)SdP)n`#j=nQ{1E;&=)fH}Ze6Wy z@*)OY;=@n{6L``+olHz-E@UBj;y%J_ss0Ks)p6V!2sgFO|3u7p2K7i*T3*FZQf5?s zvEG^fa0X_749Th+4ATR`4fbvA=d|I!t5UJ7EU)@QQkU^)iUV&U7Qy6a)-q$O{Z^*S zr5%~SA02`8mGe6Q{m!*8%u}-8c0Z;gqY`TqhUCj#%Jc$p;ASVGj(>IKC6 zXWV8-BVQm}oA?v?pNP*Z3Wf&(TcbnYc&A|b?_=Es2O8co3Jv)6pHWUhXgiBHd~E7A z+@8LY_3}RSB9+phi>}xiQ^e6TSBw$Rf-Am@{gB{xO$~!B%Ri7SRYZs(#l6JN)7= zUTh6e8#dH1%xFjIr}JB@JL=!zmhfM?S&P`Th7Ki<#q%~Qn$*Y>7Q&Tz0}DUe#O1gj z7dAfduOM$+mu)zTfq=o2Dd8zT+57niFF*pvJ{&19wMj9ht-`FG|LIsJ>|UzZWV`$% z0at7mOyW(D`rmzZvu9PY=VeAG%;-!;1Uf`L7iU+s8wOO5h0m2|I#+}p&bEOGN6CH8 z?!tu&5Z!cMl8RyAnFIE#f9v?vejg}&uwrKlH;!NX-XBqoiQtfWh7y4)b!HyHt+|?smFl5KGmsXhn^hvD7XJ=%`2;D3l*dkYdrI9nzFCQ=94J-W!4K&Q z|I2NTPacG--sif27uW8iie(5xf*N=ATI8$-BI7?Bl<`QslkdZIz;Hcx)l@%cH@18b z|DG#LvhV(sL;nfGqbo*R>9?QY`xLiSD_^IoJ?uXZ$G3~Lj#mj(M! z)gdXl!^kt)6$cnz7xit5+V~Vs7cZ)|>y&$@)&N{ZI7BPYdto%j_kw>QgqxMVg;cpk zTl_JyotM=Kg|5nlziBu}_8ra&ZZHc{+reNAIfbuwJ8%W>;$&(4h{$ zp{dK__tv&^cVGNjw$eI+M^@{DHwLy>gkLD|J&ET6A1g^p3a1_f9Q<$mdBt$*jX?ke zX!Yoy0nZlp7E{Toq8Y*sVsHHBzBprov*o+KsT${)rHp{zHlZorv~<>W4qn?K7&5>O+i$y@2uxG8b-(^a2Nz(?M!6K-xV z+eR4tRO`j)BL8l>RShjt(5@Ox_!$R|YesB-3cIPiF-JoahR8BzzWu}rD@w|kw00Uf z4odQEZm<#PZmubKrMkVFhTLWb8P&OoUp#r@ziJ=l@le@^EqL2NsXjSrXP-)qz-+p6 zdQwOwr}z7~IRjpS%;Um{N@}|aY7Q}51l_ByreO=K6B5pG&pA&H0)717!v+YxNV3yK$oi^vfAq;(om!?N zT*ybD6q#r12Y=W=rCjhrptRstv;XSQNhpknUz=+7UmpP#l_dvwr)e{3Sy=(wsOQc8 zNeKxOye2jk^Z7!M4iCOlu>_lrj8XUnt#4O-w{N6-{=of?K;gUiTN?ZS=V6Wz4~7aT z<7Juz0MC&ERzXEtxt7*_Qc|eZsqR+Yb?;Mmx0EXEobVuQGS!}H#iS{shLC{KU5CKoZZMSg|WICST z=j`F}*h!<73ztifA?Qv;u2mD6eY;*)FKW#Oxu0;KyNIXSfZ&KzD{ zt1oB0bvD^tDmD7=s|13nIOH;K-97*AQyX94`q-J%oXzwMBv@P4gQAI%ts8K_T^t&# zCh)qTz<1Blt0B9MX5sR+wat4mXPt}p7ACr~mF0(BzK4+aW@S}}z|jPqZb?II)Zltt z$Xj`M4!0gS5d#Otp9!8B2R!hv;IV}))+TSXX;t23a6z?Jsl|7%(JyA*Q#%{pfs;#h zTDx-x#%QkVWPcZ<81ULJ+u&YW6_d;_5FZ7nc1osLtzRs>s}6pmOKloP+)+sNYi`$x>`B@5+!ooTa9&~c?L2rrQ7>$Ls8 z&zR%6_JdmSq{b2ijbf? zFd-keQUH3yU>~WLIk>$~9Ynd?GSqmlJ(h9?4@|(}2O$cDgflsa>slpRP(tPB~R}I$j6VXv$Q=qSpMV zs0YS-uJz`PQub-$&=O(#;Au2)RM3!#18RWYEtsII`xbZO{x+b0o|}8c)s>8I<`kN# z7#V|sBL=7erhRKF8SqgwH|-DPB!OGk?+F7Nj%UgLuOFv*14Vl8rpetns_8?HAaDcT zTe@{nx^JS-X8XUa2o1Rm>J{QupKMXUh0Qeac9hD}Q4d}1)8`t^X;cRA162*>rCrx; zBci`lp}h3PD;rGT)RszP+BRz0zR+w#~chyReHCljS~ndCs6pa3mj@I7VNT zI!~!~n^+ji#ARH+WNWKCa<@CRv^3%IQDmIC*2Obx**!kPw|l=IMcSMxdT(^OJ!HEG zudI(-*ENPKzQc@sh*CkY8`otE%n8#H5*01cGtb3^F#^ClUnKsP1Lrjev|=1neHQo? zZ=OrjcoKZ~F4B|~#!pt&YHtA&gcE+$b3gk>ke(Q+2n{9G8)V1PfEcZvo|e>&aVyCa zmhS@?IJp#h%kIHe*{uv0XZv-XhGxH(`@r9w)C5jHV~#BqDb4hLs-SMfGidWPc2(?# znYHMWOdK`@FYFOK2}3Z=nAu!_eFWG{xl&BV4Km**WW44uHnBA`mBXNEDXy;vj7Idz zff(6sq(9qvd10x>d~-bchBs1b5BgkMtv3xpoL9pwz?n{=nkPiDv4S>8Lzw!;xBeXc z1ZdUF-nD{=m%A-VX3BYSH*vZTQK$y>?Ry@8yh^h+O)s>DJXg_<>d zO>?X6ZA0EEGX!1j3Wfqx?TJMt@(goX3hXZ*cy)$Wqv&%2)aQ=+m`YkE`p|1{ecNY| zQXwlNb6?}tnN?_%5j2TJ%rUTjfFvsL;xrN`Xkr%e@vN|O+2So%d!8f-2GX57Op;H~ zDLM3>q#sRT%$mIM8HOXMe(R4@iC|zS?cbk62nDHLfK5hkgN8!U^Er3LMktyiZsC9% zg#YW;uZT=PJifI`cIe>6A7~SbicU^uq?MlsF$N9KbCmH-ydAzH8HWltXIRCD;-kC% z#RFs&L2sVg?gZb?%U7@J+o%)P7A0yW(-Oy^XxJ|9k|+fBzbHLk=Coh?Z^6BLTQUwf zY=n;X(3vwPuaxn41>As)07m8}QwNkIQb^ceTiI?{2{_fvxW7`j75=@A%x`M92yhPm zC1f}OVjaJRyf+D1@NQVV^+HudDUOGW9zwK>h-6~;BLQ!>xo|;cfHUFdnjZfX&YfCw z-HKZoYCj2vsuWWT>xrs8kw%9(ex9CCx|4>oDR65j9N0WCeH?V2{QB-Tv;VnAyJ>ya z=zc{DV&`Sa7-EWGhc8aeFIAcTw2Oim9QLdPge)Bk4S}OG;1Iv*)5T|O;2ifjT>LT< zFpLu_kmBy&Pj-9iaPu5G^GF&{HNuqG$bB;$>`_4FMX*>f#DZ3MOqb!d^Bz3k#x3{F zcC!3k+lodu821$9&%u~7Lbi#oy-|?U%34%fn(L%tqtceQuK{lIE;pd!(V`Q_9KY(D zKw(DXZT6OaAQJbh3;h{AT}q^iigGRpx3C>PX?mIwI`YqDM(&*bXP~(c9c5g6e7cK| zd4+|l$NY50zZa>&xpTek?S^vPMmVM(;CArNln!ip(Wc#uVMO69wF^`vsXOlqZ7ToG ztCM+eqC`TweM_l{l9H0Al|&FAFKpg>#l?5LEmdrOq2&52%UkOiT?Ug_7!(GvJQ)6-G+dtBY8~gsDBMPmwpKgW65|aPz*GcLaJ@^ZX2oKiMfUNX<%X8`I;XNXfv$> zVn_WbCtv_|x|+54Jq=?%&PJ}zTDCV7J&h9Y)&WsFNQvmcXM3bw-q=?_2FE$cP=AQ2h?#pT@Og~$s*IQViZlVs7k$$%NCe{nJ1vBE<1 z^XJc}CwJh{Hphd{T9^$ zr$8U*PU=)R@hx_mE!bAukIC{<(dUs?+(zdQoT=tP;iss*TgK+mrY*tstEM zvFHg!m?c_yvPJ#R|2>C^f}{=3877*H2p58(C~EEHH9_D639w*MnjW2Wiw|mfyr(m$x50P=p7? z{o^wq9~Ty0MQo|Ztz~v;PX~>kGgyj{lm4>j+RL*e6aH|7$L6Qn12wC>2#GykCO8Jq z<@ww5lSrv@Rc zd4)_|?)2KjMXBmweJS1Fr(P@=c&+WBgWdS^_-~v*goa@BTbf`C%A1-kG(^{FZz)jC zTHGRvrzX`R;Xy!c(x(%>UHC%5eBiWs_UQ){T+mDOY?vuxNNpaQ1&np9;GR^>v3NIP z+c|-z6yI0IT{{kc*+U$Wivo)K_MMlB+i0Soq%>sxJY8gM*>IFQg+f_Pco~?UKK{$b ze*g!6lIL>Dbz3tt^|4|Thhpy1&kAB6t)F9|h9qNpi^v}d&jtQ?RVOiMo#x?Hg|d=+ zzreOwRf`?D?kz{S0+)*M7_b0vEjFt4V~P9z-H&|xhLB^0^}Fr&94?K_Z+|m`4P8`iof){EFJBT$>x$hq z2(%P{Ht7EIXHM^~y1M2JHdSyjGTy+g4WI=ok1Gd8$|5K95285E!ik+syhicOQDQ-x z-rv>kGiXodhr?BS%kiBXKqhRj-couQUz}I?PNLrd5x0O?{>9y`uD@nTyvOe{Z^t!- z=dC=g#soc@UxO z#-lQYdc5hYNrF4XN%DJMW^t(xo&%R({d z3>>Lm;gj}n#K1Y9Crnhtrz{a%jY#8~f*-uid-BGG@*tdHaG1Hg)kY*32Ybj|dHGHM z*+X^NyCxqZ*A!VYpjw7zAmlmPBWQ+6%xR=04w17^qqp{Ce*%vH#WBIPkR#%UllP=J zfGg$v{OzsTAp9kLzmL*F##12FmYzO%{?mg+jR?{O9c}Fs9v3gz+J+3)Tg!-E_4Fki zR&oI3fLF&i{ajphcX9bNHtTSGlc}oD;f?zpbIKf6wQ?)-L%f3z!)2skGgtlQpttQp zMGUhBEg{^372oSWCd_X&f6MCX)f1_&j1`O{eCZYIv0JR>4NUZXh>nWt-|#(4auVq- z*l{mjx+JiPE&Y z0{?87W`#|Wz?7E}-PLjM@Tfeum5IZa42@TbonEhosPFD)D3N#ExOzeZ_E`TUWfc|G z3s)n8VX$(@X>{8ZVM*n9RgFS|0SEq|@LQ$?8{m!?+Mu=h30egAMrEBO@!^S4Vo$Glz1Hv;YIu zCHtq;v0E)%e~gVioRq?`i2k|ZK<@JC2^6P+eXvkgVThq;%-!U~w8Wio^ah=81D_DakW(;~c< z#D+aDh1i<`2N)eAKm1L*E4X>X=mqK7VlIlS1zhxB9$%-uy{W8cj>5KAFwY(y?N94J+O+cFT3&gefJNe?GHF|!66Hrr7pMw z#G~)!-@Ja`ouGr5-OYeb``rHG*&UO664t2TX<0KnO=I@%R+;ZsX-e z_&3%9Bupbhsd0O!sk!+OUbgM0VIE9;6a#UrdBq4bRD=*Kw5OGp_KY~)Qsp0HhtQWz z+$07|cIyUDclSrwN1>HIbnnZXH_CoV01sezH8?Gl2ss{KIub}eSQa7`1tE_=Y(`^b zQl0_bCP%o0Ge#qR<4Ws>_xG$e%`Xi^OFb@Sf(GI>AqLS zI8ceXlR_XO|CdUbfYu%*c_dLk%(w7)whEJc19`MP1y*bdVINWviQ@Oc+9|)b0D&!x1WXjy~WoYK0+wWuDCK7T;#Y%)Ni-0Xq zBk`df!rXxxl|qyx_`{=v5F3g0pEt}e5`pYRe5$&vb0Cb`5 zhw#adk5IK^G{*>uj~W~3aXfEF7}^I`C+pHP*0-_yAXF96qko1bC-vf$4pIM7)MNJJ z%C5b|_t#x9@g0P;fudZ84kEjWh~q4#DftMUvmg1*@w7T^&E~9I`{US}3uF+KAmum^ zsyB$B;3Tu}09HW}ld17Oot>4wqDjf={`?t^xr?Pr?M2AKz|~PYmrnFdHO$o0YTqY) z&dQ~iiVy&P4;^U!r(x6ct3GLW53)*rC+ZV+gq^oR*U0KMC(-{$^g7%VBFyjr`-lAh zMNtu38rPJeNF}CaXDzL7LsU>YczPyf8sF5(M3-X9Csf-$c^d+?B!rLXGPv=vqO!8G zwRJO(^nnAX;{zsT7c&3ZSwm^Z(HG=J8bSd;56vpm7Vk6qO`Xl$2>j*%=cu zCZYkA%CN|kp|Zm zG%ve-+fTtE{%+?t><(vjF80twUw2^7(;=IN0gdGdDR2PEhazqRg9$5T;?N&TA>0%2 z*Yyth0@3XbQT=cKV`T;Ih*atxF&~KD`RnmSjXhZ8i}6smT94AHMBAmPV$mP}kg%Vv zy-|t-acG;qp>i_HMT{ej*Rr_tHvwO{rJ8&}_F;d=Q9uP~d{sx&zC2MK`W{-m{-ZFk znEJt!?77ob;Uf+pdSha->6FRS{-)JC2Bd8cMcl)&tT|z#v!eF#exBTC&ms%g$d<8G zU~-)t{Po+sZ`%}n7p-^v{kQPbPbaTDE}Z*j^7!Pl4_s#34juUE-PLog^Uc&~h8y?# zhM2!sdno&OR%rBpc@e3wPj*-CL{i;y`oeQ?EWoM~MeKG+n{W|Fj)8nOt$Sd3FsVXi zo@GcKK}!k3&Kr{AxxZ?8#43-gG)hO*)~Fp$OfuH2rvFTyc%^!ic#Egi9>D=|!2)fX zJAkQw1_v*QMJpYO7*~$hy>(MSFQYkC)RW2&Jx?bYRRIaPfEGZpMM&dShIRHi#d=KyLoTj>Rv~Avf}5iuCC_hlzp2uQjTMv z)-(yeDh4-Gd=k5U{UU5{A~kMtM|c=0=EMwWa9+Xg(lLSuLZSHBo7D0t9_oTak1+SU zthbQOxhOiX1w4mXoRE($J5|)|KR)(Ro%Unc=cZ6xQK6!wlx+z2^snGF)85IWeFF+y zg}8WiBKX0bTUI!0Hx6~jGM}I_200vYh`dI;V%BUC+H81>=%g87wu$d6!yWD-4kr{$ zuH*I#QdG_jDATWa(4PZ^vhrc3QB!F1QkdtYFHIf~oCukt@md zE-Z0(&~E$%#I(zM3K?k(tdJIQ(yy+PmOrh$!kjIZ{p_#boIt7oIM^-~StTH@e)AkQ zV2big_lBxaGph;b%T{|ehG6XN=klLB0#0Aq=RMS4L+SWAUZftD4mt24a zTv$2H7!oZ59Me83G)2uO7syT(MYaxrQ7+r{C&-8}8FrQ50x!LY+74EyJ#~qF{`c&P zii+G^bc`ZlnjKzY7DJfHma%#4M>DYHAn?a2(AHfPvHz=vD_r~BWs97GUq0A$+B=Q~ z>#_0=8*5A9j4fLreDqMdSj?lGE<5JP$eR;^Zta~Unc5 zS3%{XxjA-Q>54?qY=TKDF}ElZ_bGvt?hBG$6)k*y3J^_`Hr^dL&nwKXJtJ@P67-ov z0fQN$o8lPv_6zc~*VYEu8pOJgd@rsQ(~eYE%$dlU_p7^dkMXD4(3k^;{g+MdYN5nL z!y4?Z;=nua9C6F4YMBS>UH)JcF=873P+nl9-P9ER-zYMjp?a>47u9#(PmO<#fp!R#sKrezOtjw?Arsg3d9S!?OdIVY5IN8wd1n@|qq_ z8B(=9SMcGyW@T>0+%)viw7T@*gc-(^-RdQaWEM*dFoB5Gj%9rG@Y!=bjC;$=p6{V5 zbD3Teu=U#3*mzRYk>G8Lb4j4u$I6R$ddG$2>P`l}cdGA@G@wXosK`m2-K!zYPcOBfW{?VkYw?fyR>j;!<9?Ag4NVJUbC(|FYip#-FkTO zW9p0|4E$z+wf<%{P;wHAp9C)aGLewwdo*~O>+C6 zJ_^#B-j2O=8@vN39g9u{?(*KtHx?^+RAgzI8R7Sxqwknog}o)zOEr2AEeeSTHTCu` zBRSFxv&jfxSce|zr|$HC3#wE=#3g<#rviv2%=LJ!eL<$vxz(4 z)s?9>$-K={(h(A;`h{*?){Nn^CIi)J+T0&${aq#@w%jzO{o4oXOpOEb84K(nQ$b#B z9Vw=Z;^T;J`MrC$yM2p?n~7BpKV2`NW@LMABdArG2_a28*oA!Nmfw*+d83%N==oRy z2Rl1)b$dQB?GHi%tt+Mfz&r<^Q(-x32&kB@(ms9r`Q>rEyW=K{zNr};Y?Rja<%PW* z$iLPaxC9U!i%A5cZN^ z(-fAAOoXq`+nR}pOMt={%|h!-HChNXVQ?aSqe z@0Smh6c-OpFiS1RCa?X`A3+_&|Kr`oDZjd|7MQ&1F6~&1APr3$kTdGd(t9cIGA-(G zvasEyq=j0goC;iu)>S5JUtFqlMJ&-`4y~&UFQxy6zHe?7FvXa2&IW@hY_A-M(~Z3> z$+vmq#_p_-;y*TQLGq6e86IHPQdAR@Zq>L53$)fwa6bN%B_`~S`n7Q?&rZtj*$}id z0}g(fNpWg8>zJ}!a_#7G>~r%ve_q4c*F34wZMNLKKfJC7JJw;cAQ-w;K%n!xBy}~N z0w@)AYjScjo*#+ad$PrpE2vL<1gd7fpjtf)Pd)1evyxCY1*xateN1 zHl6ekB{tkGZ_595@1Nf(?L}EN7r}nMUmQqz@OM6{U96SK@S5IFHG>F^W}|gHe@lG` z+9bXaU<`jZsNPLa7fCp_Ad+e!RnkeUG}-sHzH6zIuno zs$xbap}?u|m6l$e(JZE-i~4b{wdRs7_y-uT0;Hnws^C{y=9*Tl9bI_Ng!yYc#Wn$X z0Q^!nJ3DR5S`^fXv`i~!S6AE8a6nHkg;KkN0h+~F=U7>aI0spj$~1QT{D;yN$}=`J z^lo!XAZAjBwr#67$a#Xl%FCskM+TO|@DI_LFo>;#7kJIF?*@xWH@tlG zrMRd+T=?uZd-$~GDylKJaYDor)-4cc7Vw1m1aec&K0N4h%4lwT_b$x&EtzWe_9@65 zx*1o+q5JA{xK9P7|NQww!@};l!Ze8OH*?*BY1*q-uO9#0fsa3fsscO)nATSsTP=I0 zMo!zMqB~-M@*Ctui&jQl*g~ACZ>MDB9)4Y`6e1%W9bmCd=I~IoO!(6yxXl*#VE4t) zjxrrX`YpYK^IFH0VI5JI+E6!HSJ&qsn~)Hh^rJ8+oX#(IK&f2o#Hp|vx9IA1^pMTh z_LqB3iVqZbBm@1fKeykx=F$%C01|rBZ!VNX+nXt215+)gR`e~=8H+pw^%Eufc(D=m z*LD9}ciGXR;~FPY25PFPiEUgRD=)}n4jbQt2jRM-m{@Qu{O~@xY;0}TB^TV+Dd<)I z=UBtx-rc?l$9X%t3SaeU%=E`OfTz`W9{4Yn8Gvwy{f!`Uk^@j2^RoEqYGgNPRZch` z{Nn5R>w6C%fa4WQC5c5;pu>ppQK|{e!-iE+>PTg9`XBl-O}CMWsIk7;0N-y+;A z>G^$3vmpErSoJADpoFwdoXB_<$se3dCQ^fW)3}aEied6;`>62)k9ExqD34yd$C+fP zR)!3t+<^=5KJg7$3JG49Vx)GbUF3Jv%Q7*LVpsTd2IOh#Ug@m${zveGXeJQ&)29!m zXO#%nB!nI9oqqOYS&T!=hks}+k!VXO6RI}W8>N=<<520;;HJ=QYyzV;-#}rxcXo*e z^*%#MO0R)2axBq`{#M6Pmcbg7$1m0|JWJ z1*43cd7riobYt)Vm4>bv&M?MnhLslT>hHR{PqPio{l24`yX-EI)%K9w@dlgz4df2UtK`@;e*7)jJM; zQJ<|@4U1LUuY6&tk}@!D6v-A5JUi=R5)-A=tM^Y8VPo=U0Rdy>GI#6K;FwpHClv*X z!yAq(F~cqMykPXiM}Gw*~C;gHJqYz1LeR88`rsBz1sHeC+s%p`7#PeZz*+M z;+3=ZN>|-gd0a|r$lWK=3L2A+4kM{csU?vEE&g89D?^q}u!yIlEas$|es->n@~H;2 zI&sbvRin%2JwAs5!&^X4wQ~g|I^e$;9RO(Q3HhLHL64xw8>sEm2YI}tl$5$qnEB)R z2tx?y;62eeQ0Jk++Q6*bdeGBaGQ8O$`to)dx5X=kDD8^Y5s3&B8_rp7z*WV_M`9XQ zF(txa!K*8O8XFlKLp_fszrUnvv(l89TgM8@EJ#ewA0`kJ_#r^Kgu;rMx10ftSS7JbV(bbvw)%j@0r-+&I~)=E zBO$1hJGHkoEOfZ#{d?&5K!csZlUc}FAokzv$OY)>U|vyDVm>+tNQVEMWAZB= z8y9|fh+!Gii{0wbq$m1^f8s;Wp&>UC=UwZMHD@`~`B>Q#SAXE(!QIiN4JTj9oKFtv zT?-u-Ao7@E+_2Z=2!ywFHJ8D#c5YvpjQQBc)t|n(mhFwAyzIFfa%r^X*UNP(eLB*_ zU88lQUKRt5#F>6P`IRiHo)F)OdO3ya$qCk%@n7)M`ZOeZ(8C0UybwF76`%k8$sVyk z84(_Oan|7QK40v^E`J}ijRQGkeY>mE)>W9BtCyiVv|m=%i%E}WOh;P{J&tO{_@zM@$yA)p^8w7R=@(;Z%iFjAAci@n4KOm@0m zq2^;qh;O*#ID_@*<`QCT)opo}-ISjeF(em!eEUijw(Ks2Pdpses_Dk5n=b!_dJeOl zgwt`$O0o(mDi@ybjg^kbo-15sz13n=%X4;78{<69GI*{3j)6Q4JAB53 z;qbTcBiUh7+UouqPUJLhZsdx6ly#CJRj#Jj&q zHNzAwmTCrYCCG)u7c^u9@epY93d`X;iW253?X%wnSi0`rv&XUh%3PmB?>Lr}t-Ym6 zp2qEIX_*8$C!4+}au;sM zCAJY~v)^`PkK>MXTL$+y{u)T~{h;L*mym#Iv0X;W51g!A+C)UjPb=TqG?F;p|7*&U zY8HvDadP_)8zs1Y@rNPhpPoGnx%nV5!x?fB=NWOw&QY^9_zZNAFE6@67(?GG-85Gi z1+v_R6-%%|Lzvs_#ED{N04^a`UYLRaYN3zIZ0a5JNr)=r;-DB}0JlBZxyD{{9E-Q; zCdbsh_Ni}0g00&xWjcK&dbl?Cf{P1wp??j|v$&T}^o919F3qs+KRx85Hso@W`Y3Ev zWa1uqDJ9(JW{Qi2c%O@feKmRea36EikiAJqUy;nvE_uE;1hI61qv`Mak;1+ocx|x) zWB3akG6i?6HpH5C!ziAemoO=79r=YFPCnHb>>(|Iem-?kqZivebIYgg5Xr%C1}(9F z7tMizw+W^oUb*Sx;5~e`wXH`|-kI+XmylpA{_ug(c%*oLZYvIljd;oMjm!%dF6=QW zww$*?w}8P)p$c%RXDl-A%)yd;@JRQ?+#y#7m+`}u5ja-*HtH3z0p=z>8?b^*lmyZ; zV!AK%F%NqF5FNnv|EQ-jn;Jg~Zj+pnl7uw*S@UsE4zx2>TQy$8S!vW+ka z&#PA_3nxJu@vH1Ev(UF6>BuNRo2!gJk#72fdD!E6n1adqKPPoWb{veHiT?c|J7Vc( zJ2QG2zWXOweGZELFSoxm%(-q5zI@|Qw8b2a_jeFq&I#fhczy?Q>{me|ALvFQXnTDF z+WoVoLAfaJh(cj*u23-}S|Pg5rl=iRFrv1vK6)MSP8iTJJ2AM5t9NaQ-W1da?=+HN z1yhKs54jW-o?K7|T3rS$^h$SZFc_sl8sIl0!Za0k= ziZz$*=h3`vj8bp~EBtY~iyiO_%++WqssR^8NBNFVpFCTlwdi_5eH6Ds@l8WmCO>s5bkPS9 z(^s%Nqs_NSML%9WIeo01p0S57`LpZNJAe3zN6#B;1y2RA_^s%Z`S}bqUHs!rUwImT^?;ZLzYi zC1xL(V<>KPpKqo`u_KM;0aStZSI^JKhmGRV|81z&m1+?s`=GcwFt@1j#3&EXMWWb5!1JGT9Iy28!an z#6*$ykE%!s#Hwl~DN}Dz9?z-K1V(1fL;)W+F^{`GbAyu-_-1+19OW;6ao4}xG~TXW z;5GU%1c(}l{}RzV)oRHdA(AN7v*Bi#BE=e&CbRLU}t~HL)6z=0H`^JJQO;V1q*Dc$7 zGIGu`7^4UHR239VO!$F-N!CBVzmP}^ahzy!t}+)0bZAoJ0lIC7GaGSI}`q z&I)#CSO`jMj@+Vqi@U!87U^es~}vv?fZaA_lW)b9pSvAoyS7((#SuBLxJxuP%m%?{9Vf5g8%V1@+a{7vHEO{K{~g*)A0ylosDllQY+{M#=sPiv+*_ef0=C9 zYw)HL+Y9n21)ECZW;-^p8ub#(i7^u=Axj2xB1521 znrQN6t!gmhu8KoN$qK>hKBnfL-CrP#oYf_U+o6a zZh=8lsUES`f(SjI zvEUE_Im-Iq^`ibF)wi!5kCSc^b$wAv(t|!nd4?fHzYt+sHlhjJ(1FD?R03bd%!pmohlQM%*_6P=fnOAs zqy9u;Z==y`j#RsH$sz)3@|0#_vfoDTb0^x8Lk)%Wb&@{^}dMRv_Uj=J>d@#EPa&3aPN66;s=I3Z-N#^2l*-G>b_+DFy!5_t0<#k!X=ietaHaI74=@R~m8c-+^vQ9GbwkC( zt-tmjJb29BL@g`?BP>y(i$qn4sDL3k)5S~IC#Go!j#7JH2C^3B+ovjIH7plk?1z>b zWtoB4vm#<&SUD7xRaNS@oEIKbPSVTygWk9ROCBsM-cD4`t8W&U{6V>KD(Uur+JPZ4 zJj(zf(0IdZQ*|;F49{Y%b*DWRd>BeeNUw|0%w6~WFXrIrD7MSp)o`M7k((*4I=a=z zYA0rT{I}lQ`{oYV7nXoex-7NQoHRr>5EHqZ^@O%baOf^?y19mKLfFxUYkO+P@2gSdciiQ_{o~t_^q_n3_VB zX)75XAzkh<{_vrAZY#vhCscx!grz$Xi-1?c-TpJ{5vJXS?UzmMu#|}^dvE2jfe9um zL{#BTZym~+A_G|CVqszNUdt`0x>qLbA->frpgu=i-XP7dzFxWvSlge7>M^gvYlV|P z@%;{f+c{N|eJUH!h!wyuYv@`$Txnw;#V~hTS5u$A4dJ7;b!K*s)jK`Y&M>hEgK`0< z3?po!$MEk%RaPg~b{V!S@9E@IlQuv%2&;cHvw-T}`AwoiQ%Ge#F?$)NhZd!^0*MDc z39#5BYySLtyspRX-@tz`w@SFM*Va_f?z`VIzWnao;#}y+}{;NCh|nDiysbpAF11E?3T8Im5^7gg*-m>ETOV zYi(ct;X8%_Ag^Q@iDRbk=4Lf%Qx**X1!XYggrIOJTZx+jz{X}(t37-6yeLc-m8gm; zR<$g`qk+thFalUQY3`DtVMM7X)COn?j~%PupVqfudYvt3%SpNw$)M!MEJ!P#4!yA% z#%_S@6^kBf3JXn~Xn3rh{sH-jwQzAvFtn+brS8c@G6);U=y1YR3kOZ1no!y;d&pYo z2Qe(5xLg0{6tjxhl~v>w;^dkr3#4J4XHN4tSaGb7KQH>4--9Pj53~iyX85&oDwvoJ zW6*{$w{bPtDfqnKqVMQefglQ!2~KN_SI#GY9?`7_qwmanySNB9p9CIN>giD2dPO7x z0#x#s$K_cT{K`pFPIi&~{PeIipj>c1ckc!dohT89iaWTvDtvP- z&e+)Otmp+b4!Kq)STuSk_%}LQj(v+SBD@@0`Mog~|Ng?4!%BhfYj1cHrkB2>({5!D z3)n~9vX+TKF_gfyG@=QW1}-YO9?8j7Rw@lQ3WOXQg*#Z?AyQ~Z27qK3CSiu}y|Klw zZuSeL>WrIQM(N9F17CS9vyb=tCzi}#HP!`$xs_nwz9n4{;b zKi|A+)8l{aivSjw?_SclU0`f@xX$B#c>5*Agt!kWe^swir=Te&Sbw57<%(!DT4$Z7bZ*z`3Q&b)z4VO z^YNSO#lgP5J}`~z9Ykdu0H8uejCv2to8JGi$Y%8WcbK4ndDQhYOh@pgpo&ii$nmK+ zdia6&COJ5JNmN+|gGxaopby{apW!}j!?A-avGam+}~3VJ~)1T^zJ&K9$f z(zfuA;(?U^^B6gR=TY{F0*b+?_w)M)gMYQhXrNEc`X|2-I9`n6#Ur7kLg_t zM-ir5ArYU4M+dmzonK$!bmINAjZMvXl?w&05&est#)6e3ruke0v^&+47UA`<(YA=w_#__r?>aJ1go4Z+Hz^E;f*6 z-(4gF6V>xrsPlB=;>EOTNU72M=jx2#5pK75DA!I~7gpiQ^dwDCN2@241XnCUu?Uc$ZxY?06_Fe{Tp!W%rK<=T z4Uf9LN!q){dRpi;YH{(~l`HRkir2KU0M;pyl$A}SuC>e+7MmlQwp}*4GVtYy&^z3a zmKK}o%jaP=6Nh}3DXRo64?_uC88R-zS#tJ$e#_gp+X|||hW#`Ivt{1P z#pnCTZ`-`%Bp$@ao}Y^T>H4eEgA%#{GiIUYVsgQ6L_(KLLQSf9=ZRzu=xg8!$08&YN^qXzt2(!rFGY zm5;Pb>750dgpg}2C6TKbTKzJpTKo>F0%opsF7;|>WhanAg_eUEh(JV@iVi{?+OxCr zxMIUDf{(pmLmqo#@XPmya{*U6z$DJ@2qGkb>=o}vz<(u8q~bUAXHEH6g@vH-{c5!0 zmMT*qDIsBZ)m)*d1kNOFz|z73jWL+>_v8h;?T6l^0m(R`8%2d(4wP$h$LL(ZOu^3#qI*9*}?!?>e73wcaD6!%Ob zK^IGEiF@#y321Rx5rr;R1F{7YfN;g5Pn|e%0wlx%Mf`1PINbG1G=_e`hl_pFubXk& zBi1~D{UFM#(dx0u#4tz8K8nthMf42)6_uefshc)of5Pbxn%9+f<(^Nlq05ZL$ZzD) zf`9Vcw{KygOkN6h2BLlAI{r(QD5vpRue911O^D|QV)%et=5fz7=X4*F?qXqiGRp|R z{U~(=6gtcqBlR?h;TY{;5U18X!a7FSaA<>=Z-0idcs zY>{p1L?eHRK)U-Bvc&Y7LmxUE^Nc~KLr)Y2z^emrhIDXJ4v-T0b$i!_Z#8tSe+o%0ew)L zi`qLe@dFG+P>4&X+WhL41}Wt2z1~vWsegW{`GL6l3XPP@w^X+y-A%M!0gcXwsm45` zXL$pur}`SAD)hi6R3ZwZUq1ge6F})QKhSrJ7@1Mhbd`~05->Py?EzJr&c&InO|!$v z^}zI`2T=8q^SA0ZASk$;RS>i&*D~272OFJ3R1vCKR7%@8+*b8PDZZe=h*gBmcYh^5 zIlTE@bbaAiz4CtX`4QI{$X^*l_$uURY(pppC!1iGAY6BUYJ)#R|J0#=kqvk6;@gG8~BPRMKXl+pc_s^IwRf6IpnObpW z+xqTruB*(ftXex%DUZZDRB-8$bkIZ4c)`y?8LzX2JCOD<`?$yP;ylw{Snv>Byh>CZ zfYzVo1NO^1F#^kFf`oG?1eBH9_j?Z`E$#NkO)y4(@|6L^EriT(SEV>z#w z23@m@0cABXxAfJ^c5V|;A(24jf7tN|_bejL*vbmc4MOV>FFT4q@3f~AZJ|>FRui=& zaMkm#)>mG14&CcexNES=|DyPP}Bus$;)sDGC+0Zx;^!hB#1|*8= z-ZSUyvoBn}ObLOdC^C7Xm2Nf82L#i!D{JV=U*>~iw3`P%o2 zRD72B$@tv$AsDDn{rCZy)%^~T=aPJ;wU|Gjv$;Eju4*(>pY(6fu5fKX|2rxOH5rUd zz)~1hXq7zW!Z7jX$`Hn`7hvq5os$Boh~B1`xBxT^>(tI^H6$+rzb#(LInCUd+)ASf zZr%R*r8t7VET-{tM^)4UIwUV?Wi(F}L4>9rjQ#^9bCM6scxOAa@P_d3fc8ep~Ew2| z05kD^IH0jJ?Q7Sp$xFz)HR#qcJc(ogx!`@$CZ(x_`1s5O`;L@~Utd-^Yux(st|R;1 z?_S(rb$bFy+T8Pzr9zHg@ zyLc3qbAr(#&gaV?9I*8s{qp53n$^dT>mS|Rlki_Pre>f)+Flt27jez%xY$_oTK<)5 z6m0+;PD~Z4waKIrs#DwG<)Y_-6*2CoxjxSeZHFARUVt}H1IilA8d)Kr;J{ZMBFPJ~ z)4zLa34@#G4f6A>N+W48j1--W~%b!XUpKQ_4U#C0-GElk33xPKhvfD z1Itca`%Zf~CnHh89f?1o+SAX`f5PFdTAiOxh>M$WCqdzd@e(i8y>nl%xgG3Y5dQ{t zHU15FgUr0L$IRK%5YsNR#?@A-as9Z2pfw#DK$D@C23m^obT`{FX9B_>!7;^*E zG;mCnh)M_|%Z zzBOH1kGL0vL=Bc~4GI^u2|WtmgD%4T8@!BoKcorbDy&}JH|7wOzmq@(*ljocne_+v z1=%b7UlNV8+XVW|BSJk>Gwjc-I0t@|I8LBIV^{XO6AK9uokXY|IQ7^yG;bfmFiKrg z%~sRw0fKB{V&_Q`9POuzMbzH2jNtrQ6V9*I&cl5telXG&EWIm(MVyMFq=$?|?@`oo z4B_HV+a$OyXS5g-?___zcy(nvKYQlbcq;!e|Dkr6c2G$W{N(OrBp<-P- za%CAmX0*^4G;}Qj2)pUI31AJ=J0unOOH349AE*8Y$dM%mZ`>Z5a1uz5-pQfW@^UVS z0VdQ!#+abNz8f$6(g&n4f`Q*wLO#atM^sMM zz=htn+FN<6fW~WV{{*Pwu_iOmxeFFroOg%Kh8b<+tTO(;lJS`W$-mp_6-yQoG3B40 z@93xB9Qz$s5SMIJfn?$&t{!)1p%vN~iIEUELzfSj?+qjdp;N2b-Glxg2*dc>gN#^k ze*kodIg6-)x9B}EzyM-y-dv}mi#Hk;f-fwZWQnu$gy_Gfy_7kbn=UXeXpxt)S6{(e z3XD`X17j)F)2^0<5Jo9hbU93022XqVkaOzjLXC~$C(X?}?Td61ttyvjAbFgSJg{fa zp+qYty1}Cv&9AeirG?qAa)I3M`tol`$lg!mG{NB?j#ZgmOXbkHkif<>gu$zei%Z`Y zVYRF#SoU5jkJ~8#iIoSkb$p{tWUv+spno6HBPngj1 zn|}%{tD-{BS_yCSd(!V36WhKlMjSAkJcU|k(lcl__{*(H>)Eqk zz(=5Eq!1BH)K{A5jU)A{7EPfy77OK?1|&t0Mxp-a_R0me$vGbL0lxY8%`av%N*9OS z#Gj5=iY+unPoGjo;=VY?YF$)MS8X^9HXz(`Af^UdST!@sX2u|PU1c|$Hn1Vmbk;b> z7AV;haSP+k-<^2I=4jz0*(d8$dTH18Ygfa}+2@Hp64A`h$Bax2=YX1F*p+jgTS6Uz zwl)^gJ4f$VmfWs)hsJyV97Ohlp%PvC_D2UcNaEEVqI3Gr(F*P*PrU6xDFM6jhi4hQ z#NtD__Z7M}WjPvS{dr&$6ci1a`e)I|D|)PMa`M=7iZA<5N|o1fRwznoiUa%QADK~tC_!GqG{W9T&>A4}?Gk|4(8eF|L|v2?>T z86_z09=nN-B*}@JUcZSJ9E`k#DlyTY>S_3;FJ@mPwc+23=P41JUCPhl09ebQ8r97x zc-2*QHU^C+dZ@MG4~#C}so_iD0=J`r6A{YU{V{0x@S4yitZxAP7gR0oSSPcAX5s1X zp6U90Jo7sS8gWYEJfSWm6u-V(=nu>I!BT`In9K_Q&8r!7J|A~d03tj|r?%a&Dib1w40g(SM-OH%;YF-;p&uO%F%pb&! zF`9ESpon98Y0HTFw)Hizx>L?60AB!6NZ?}*qo=1!kYbs8xV#i;{dGG^2_qcU+ba>%xb=t36=I5pqK7)Uh z{yw=nw35%B(b*BMW~mZVfMMm>)PS28nDXA(yxJ~KFZ<#}pN68pQw+QFk zHJ`-$w!^-|4OC+4KUl6J9!aAfZhikATJ*1d%-vRJpBI7=Lf|Pm`g=go&U;58sd(Hr z%DJ9>`O1~rg0g;pE}g@^hzi%^{=ID&6@lJCU)K>wM^wk8vw28gR2D*(B0uVR_Mm?3 zj~j=!`OXO9aMWX$f^KFb;3r;o3HGy+&i4R~1`(UtG=`|Gm#>Il4$~=+0(6Ph#HlZP zP7f$&zqP3R*`43Zh^-we_8~4ZK}L1|)c0$?C=Xeire*;pG#GAdy$ztFbr^a&j{tA z=&j|ZeYP-*tLND%md!~cyRybHx2~VPvIa3dmRDaURv=pGX4jaU6X}IFW)UF$BcqaU z!L@DNebg)0qvLO}DQw!KyOw~u3)2`!d4lKMhUO^i#YCww{CD2j7u9WzQ|ze^(@f3H z4JD}@!|`RrVNzQ$e1o;M$&7lwb5fLe`>Qx7M_d)1i=JL1APDG3=Fy@9EyGv=^DZRQ z(o@O(fWiklhnGiF%^06B!~@ySwFL6@^+OfU?#UBku#kYocHfBRrcF(Q!}U3*uzxzdkbB#Zerl^``G)FGotyW$Mvv=wtj@F9!JRkIvl( z6q9B2kd*YC&NqSPxkQk#_&L4iH@Zovzyt+#g}L1h-dzOGW-QHw#9;GU|COW9seqO0 zJ01bT07uQxfTFW<)!~bnmk`5q6!>v)Gm)Jtnnj!UilQj`&_%HfWrX34$No3kzmAQy zu5R1!I+~r6bHK@HPXhVSNoC-xsCSp7RE+hzKj5coExb4AWeT-3j z2%f~Cz`6aUjRX7KjP^t`v{SIa_!=fU1mxo36^Y!i;swDRwG>!qBx7> z(>Kqd%lAo4VhL<-jH2<1`#(LD*n{aMw1cK-AK})J#j5paT}%{rl71Y-V;jJ8tbU)t z)Dj)RsHfyD%znUxhEWbA9VUlQHM)0cvYn{d>dZ)yNNtR{hK)o&jvo(+FNmQqMOYaEIz^cm)4;6zKY$0 zohp{#!e(LBE5HgJ{z zIsdOQIly{fGx5kk^%S;HGF}2N8T_SO6b_ZApTON9$KTLW*0}(m5qJ?JRPWfaum?uR z;S2);YNTFtNF6=K*TUJi{U#qD--$|-LgZB#H?6&WJp^S}MOSXY&L2o;)x9ull*Lu3 z0}F@2$fxcvXnW*Bf*y?82=q09w-z#?H(#Ik{-s5PNj9F4^XQRibYz7A;4UC(VYSwX zwgKC#)r2~+=5}wA4jyCy&u`cfST_(vn6_ZN!>XO(##rx!rR7heu+2?R@5e*%ArKLM zHsT+@{X|0&@5edYiiFn(-)zStLeN4O8<^`WCJ1iYgo%nwnT#w)kIP0wbjGfW0PJRa zySM1dxsJ}j=I4z7uTEIK?XmecwZ_->FI#kj(8`l4aA^P?0q6L(@WBxR06_!A8rPs# z?1eO?W@4rT?-HmewPfX=eymftec+AbvfzQP8*_%ck=Y!wntjnV=qce*pX2YGhCdcx zOh*KgfUl17qn`3^xuoC0^gDv-`}eXWQat->WJ6q^-h448H}Lot+MWID6?qX!mn~mj z&%aJT58o1fIsk+mi!*G{BV;(Qqb5NyOp_-ipTq(%+V^OGR(3Z0)xdd&i_>4l>6tjCk47a0!p-Y|Pg10a$K+kkP^*3LoSy{iq@c7+zRJao)Fm7`D+^ z?ualb)Z)J=CWNvtNsu)byLm(PVxxTausYpY4j-h~-qHjMB*zmQQB+Jcha)JG9L7dQ zGFxO#4q!Ah^(p1A0OEL!O*MjG;rsPAsRFr_Fwy%h84hh_ z-}vkEXMQ_9k>^YqAV=X&+JL?b)}X8`o@ew0VG*P89T%7p(S&EfYNLSag7rhinB9Tc zP#G^+PmgRRWH2!G0v9N7YPX|A(;pas(v6L3CBhdr!)OpwGrCtj0m2CVv0@3%6$K`t zd}7z@F}^7%Ec}V&MU0Pwd}qGN!Hr=AOWPuniJBshtpke~$Vg|YoU*-}A@4D6WE)C+ zg0q|&;`@AdRu&9xu@UKGRv&SWP;~s)p2$J%n-Q2c#2n0U`^MG%^Hq2RoKF|^TioEU z?^d_}Ku9g7c0{dG5ezMO{y;}l8h44JhYhZ~i&OS4ut8`4ua8muFqsNQm(CX6_c(z> zBcwRv-Svu)I&mF<(`ib~z@I^{aoQ1o13~|Wax}r^GXgN68Jx9T%Q6GONM3?Pp`*hy z6L8WBB3!s7HG@EN1CO*|>VG&ISy@By+QUB=*8@aO;;}$2$4)cdjK7jm?#!QBm%#&$ z;G}cGh%3|%7#X6prUBn2%s`gFNj2B-L)~0all-N>2dVC{Nogu77kB_+`04Q2rnLM4@aJMebMuh z609tZ)XjkX6eI5bPAqSnhlm<$F0eEh_b zf?J3sZ@V+Te&&Op*OzH)CH}`Ci_-A$3zQI$48+L`cf7@DRF;3Y(~5|W@>S~DGy#>k zdU0RM>lN#Kung_<$J_nFix!-&_;s=CI|XsYisKZ7cyZDnWJHy4{gFkG7BFr^)ZSwp8Al@ z0g|S(t@EK}Gc3IwwbQp94lUGQ`=4#$>xF271A7Wd^V1Cpa*M^^hD{-*lo{Q;17qNe6w9kA>eoi3x zR-okB*NYcCyKox2D%MO4r5OZ789!xh*eiVDjx9(H)cpLWp4uNKvqR=54*C%0wl>>4 zH;GAiJ~+m^<<{6LtiPhRfo97eVsF`*3%`?-F)(`77O0Vi#{2E^mv+xSm*x@%g4ovO zx0=0L__`IioSv*-1k-2RdU<*IyNdD8!36>1STO;snc*M))$vFH7Ghe-Wfv+6JQSVe z@5vL=TO~8%#2-D!n$Roh93@ljqowzoiRF$_Y*0R@FV5swtB7>Coa!5N%*_8eJb^sWDOq8*6%Nk zXyM!RHX&#~`-dLd)nj#r{nKO9nuiFK4;LC%7R>4O_0awPLa7Hb7RzV;?c2NWd;W91 z!rtUcn(UmoHl|;h58kUC$%<=nuhY#Ew13xmxYyu7oSOH4)@B-slWdIaPaPz>DP9S| z1)0^ulYCsaP@WeyL*4@3(p`s7_H?otL$Nw|f(HkttJLFV>H6J~+Cwh-xoDZ)!u|2jm-;TP28VsOk@r0A z!Bfrl&Q2S9lg!Z%EhKDN z_MRyOHieCc?fQi+h(JPNzmCUfeRVwXHVI{v`$;UGc^0}=UoEQ@Si1Ai;(A*c9baU{ zLPwuiv|cUC$P?(+y975O~{yL(;0th+*M^1u4KLGxU=1=fQ+1(a!RlNtO}( zWummxaMaM&yzhA`!WZ-`#h#D28DE|HtM3-&gqy?-jiY3luBlCyJqOt@57%1%b10P3 z473Cq>MN-!umyFDR(4-DXdt`5laz>sJo}2CIN88w@KvT~$IqV!g40m@;(=7^jdmMn zw>)@1@zVA0PN?DE3W@Uv%M>|YS*kJT>GNZId_uyv98aI8i!!8LKy78%1qHw3|9m#@ z?M+`0O1=`GW!FjLgnzjJ3l@0(DZ>c?#T!@Oj){puEfe(GJ^aBZbQOd)8 zGZVOu2y1$)TuaJ+p4pD)gOQs+;^X`FrzYL^ty?wJfUdr`ZL9VXTnkxI8<|a^)mSQ% zx^_SW6PlDpZoO5=*4c9Niw4z+s@N#-yb|N|9ux|W6AW;V;HMS8FMsfk`ni45&WZ`7 zNfx9@i*LMuV*I17f5QgP`0_hX5-f9X?(jVb8FD^0y1IG}yxR|4i=0{b@gp|Q?QZJR zKembZPWP*~`wUy)NhMhsCn6+er0h|SE#sJF zhKx$eNF^bAWrufJS*fHFvXiZ3r{WMw{O;$_=ll8GZol_m@9TD5SDn{-J|2(zdITL{ z+z8Z2T+2A~AVAHHesjE&xwVY+YsJSbAo=O&$Dv?z^a_BA*A{t4=1hOvdd^My&6S@z zhX?Ham*;_T%)^H`37v-hP$_ZJS8hh1DysrJR-nqzRBHd`Sx7$2<%IHD*Te;l6be*gb8_3g4 z?8BK{>TK-}7vsi~uGM_K%*H?_vW${LtM|KbP_KsY(`fnJ*zy*C9m0a4$bxR?adWc{ zT7E3aqB@)x&#Sfx#@AEw`&>(H#w>8zTI!>R&}hVLt|yIBcbkxjB!LL`9(8BuHQo=5 zwX#|@ZZ(HtZM4(gaJ_RGn_+Nx?M6s&N1?XJi`0?E9-$X1{0Z|s(fR_+_+&->F2?)$ z`3)MKZ6*sxetkS7CL-c%ZdQ~a$2NVmp81vy?@_dIY0Xw2JiHOkZGI=Sn_RwMOYZ@t zzQo?(z#$DIEQKXKI=%FDK^eLH3ce^GK-LnajAZ+L_F7_SbPaK1PtRFr zp%>A)+&=ht=$t@=m1v^w!*S;9B8GGwd^ASQ1bd4$$gSOG)4o`trm9|@*YTx(SO9ut z+IO*q_I5s7yZj(KWK%S-wHeED@PS>fw9NuF26s}Ta42HIDt+(aI$c}pWOt+(I=Q*M zYo}V=NZH|^PgV392}A((cJC?o8aAB8?A6l3SQTJ<+X(5X^pp2ADVE(ej|#}!N-p3^|?X$8Q1q^ zzceiOsM4&zYfp@9q40(&5hW-0e|34&*T*q!krl>FD`5$tKULFdmt^;-k<2dX_8<28 ztY58^a=+zs%K=H1?K~pbW^CmfAfJqTIXC6ul1HsyYIlwF^#$Vv7{8euJC~>?=`l5o z7X7KRX{k%t!)bU2vRX%7OV#O9SFn`3tL$NA&FXI4Nsv%I&))E^w(I)6`oNXp3}~35 zJR_S|A3K?%(T%Hc*K~^#nj4#gEiH=eq25&$Yt1zZzvJhp=W8wU^0o8Pm)!XB{AqR} zcfv$3ZQb&G678qU4E|?Eb$AiTrGOydL`l`iP~7k6=*a1E)CJ;KZ@9u?1Nbq66b8j@ zzG~`M(=cPH>xt26Kk!g~a$X;Mwya+EPyC#ErjbG2vcS!lRG()XKdNp_6c}(U#t8r# zrz80CwVchClR|~;YwvBw+MJ->Q5+BT64YZ^LQcLU6}R{HqV`L+6^f7pX8T^Q`tVJN zWIfqNp`wWHrb}0oSkj3-^?G@)HsABctX$YE-ni$0mY&(2iVO5>ecQ(5_S#Xe<7&>; zb%NA?A+VX|wPU$0bg?{PUk)*}+EUE%nMNq%MQi9PJOZGWgM(3x_w`?y;u{kl(K=4wnUp-j(%L*o7hmCL4zi&?Nwk!$1Q z;=(1Cz9cf!@|Pr$h92(63|5HAaQp|O2p*k*p&^R0t>~C*DIA+`c|@qF!^Sn#eVwY~ zzSYhW!8}S*etGsxUVW&7#H?_;Aw5en~lR~F5jwnLt6`UmHQqo`IFFKg;N(Y z{_w@SZP+1-CG46RT9)2rAB@CoJUzQ?MbEJ@x_#iae9gwD$zVKr`~1orrc54Z5f z>76^|;9BbC>Z-G#ZB5q4fy`s8ZtYFC?nGzje4mAR9|7WWEvX&DpR2-J9Lj7X>1su zJiK8|yKu)E?e|(D$xOJYVgGL>Il6CV!iR=5z7*vMWN4+lUg~#^R2Q#cM><~68&tio zL^njuM3yio^HeAgu$~2nU~XII$Mzw3-U#4wX8EOkF3SBc-eNC$@`3u@CX(z$ zq-^Rr-=X!=VQ{0Wb{<;&-j>;-w{{${D$S+uDmuPEHs`hHQQZCI*V6dLa`~#}W<;!? ziD>jbDp3@UONAI9IG7>uz%k{eS|Z)T|zK}eqc{i zb?djR26pXy4C##DzkNg7zxd2<Rx#zQ$i+187DwCz` z_HT@1CbDUpEAJi;WGW%*;^1VVzxl>J5IThDI^neGggB!%D;%yEw)mJLFJ^&c#rhn& z&4taZSoE0mnW{TUcGzlFKq|TIT(87N#pOYtomiR;uD%9FX5agqU&{i;3U#;y&knzX zD-^pFn1bZG-cJta+Fdg(d+=g zK;rR73f3*ZDQ0fPyE2=_4f``b3r;^-6DOz8v^Ap>Hu2s#@IWlQ?w_#O#_1O&@Y+mR z-FJFh#c=Sjlg*R!*iI!H9p^Hw-=mVzv`mUlXA7fc{^)Y(Fv1yN}qYw2U zEtF4w!Yp3}{~Auy(o$X*jtZIWIrT%yDpvDP!!;(z5(zGc>*x^rP%g^*!6GlE*=lg3 zHu2A4{KL=xBz9A58*T*dL3%q5F^xQ&-nRVn-;kh_UZ}X}S5fdQaYq}}0{n$?b6K>* zL1xqP$;Yt|$$YtO;5$Iv4_U6oJcn%Qtvn(}dK@Prkb;0-46_0%md}n9$ZDu}0mt{e zOCD5g;}f`Lz~Ax1by#Z$9C3RVl*$=zL9>B7IVpG-wPjKrgHR1_SU*6%kL49Xs3T8Kzv88 z7EihNUk?aQtqXMi8g2BuF0F`pjI6HQoHaZUoT!WwLp}ZbufKmT4_e@va%W;Dc1(3r zw}rK|WAesR+1{4)eXseC(b^Bf{gcaINEvt7d&KRd4UE~dOT+m1Hs=_XgO$(uTV#*! z2J0IWqQBI9Fig7@>sv^d8{VZ-b(H$!wfyn%@mM5=%~Zc17)G-n+_`5D*4K!4t2wvT z6tCWA5R5IUFmAKXzq_~gKpa~zWb*c|5_B(=g|QS|Ozdsmrqlbk>11Ja4%``b7ReOv z7T4`4%1OPL_{FM!kJit$FO6&Fu+ko2(vgfepV2p-UJ1M!){< zw;w-XaQO|JL-6IsY|G1+&kY_=--0oXWb^r!JnfYi+xC1XRVPV!7lIz-@{c&R$kQJ> zMUO-#Xxaef#v0-IdPT@ftc!xSr35x9D>oE}%wFj-ebVx=F6r(J28)`|od>as>o<-- z;mD~!e;G2J8rk+gFy8O@VP`_;FYrLmLpnvnln$`exskw|Ju_)r-Di<}#T5w_)eHx0 zHVhnx*oE6(>wf5B>aUfg%*NLpZkksdG$)XG$}m|l-Gqovh@PFKj{jcWBz)6C`#T}= zBrY;Ux_)t|8;6}Vvh+xWUzT` zdKTpou)O$}-#(CG;>MOZe2Gv>aV*w9t|S;Z{V^#y`ZA~mFE4Ckli0oK=C<3DjO$ms zy*ZE=7wSJjkSX2JzX+f>QZFIozw>+mDuZ^0-GJ7Cy#LXLGdSq3rK*oUGx}cEen+be z@)KxOv|FDwSr-sl-+sg?>sldu5W_+8&zjx8yCz?|dV8zXyu%9j_|tjq zT}Ru4zHj>d4VNLl=qk&hrPo3xYS8#)0>SQIK`hS0XB~QoB^W7HgT22mzrX;AMc60_ zSRvNZ((>+|KPekv5jr019n}{A$Aw0JtLF9L_buP=Yx0COjSyAy074iH`vO}Hk}lF- zHT z7w*pyJl16&z>!jK%u2r&iwL3)U*4~Z1A+Lc*^`IDd6rn)v|6c|+%F|&bwtsLdnnzT zpA_f=0NJB#^qE>cb>nKW?r#nRv-%&C8NMf~eTi{&Zel33Q7jiXk?KiMQRuB1W)0QJ z+VP#Gq#X(NC^;fjH3=n#8Gdf&OUIt&pD_k!fp6Rw9&-K@p8s?n;-qx$qOfRR^(+Fi^uhXhG-qN;z}ra(@9{3i;$j zmqXomyH+ePcel*(Cgp#02i5-SoN)$C9Rc2SxdV`CYp^cZ%r42z6ts+t-g%vq9bE<3 zc5FH+P=gt4N=$U@oagh7SK zwhasn(0b5;cBSX1Tlz6>YrFK-T8JorL_bhl2htnkpzD?8!j1^=&}zXpO6jiQv4@zT ziuHrD_-TFn3kKiAv?GmRVBz6GO0Q)MIQ3OOG9w%20~_8H1AYA)vU}q!Mml<~)@`}6 z&gbr!b4f>uE)FK9pb27UnZ>pWP{1ht3V+uGVXa|y1+7XUUXx(=!74dd-{oBNl!$D8XMyI$;Ts+ekV6k9TwDsN zvc&eVhJNC)b8Kn#1XZaDblh4zh{Sd8_f@e{pn;;@_7)a5?NhKW^WOtgSuRL2GwR%o zqS50D=BdBzLig*neXPT_PD$D@KL$NMFbZ_Jv0bN?6*1H}2FEvSW?+!=o_B*Qe9L<0 zZyTh1Q7ViDAF8B{bc{MnWK>!yK~1TmSL_mI@Y%Ig4z!1aYPJrHpv_MMi`TGJThW8x zVG_y|O}tjZ%XE*pcca`x7Um+}h?@ImZgf(HVP^Z3q$+^W**_j?i^hT6Xe*kgkpVpL zJE4@GA#sYIy0&>#hW1coSeC)SVI5qycZE@U?f%7WESyor8ZKKf!=sE!vSWm|FKSC= zfoA}d=LE54@atDIcX#nHr6WBDl+&93PQ2a2)_EWpZa`{eedmq?M39w0O;qVBYI87i zbA0Q18?)2P-Tm~~6RaijXAK)BCyfMhJ}34z(l;I5_Y-oqR|bV6${EzPX!$k8ikGLh6Dt`jy1pq9#lP{tMSfnf3 z9lS>|+7ECtsLN%PHmr-oL|-$IDTVNi{hsH+Y%Km7*MpvE+GFg1_o4qYjZl*7K>3?K z;nr#x84De$IDYBZEKFvtgGPjg6!Ntb7k;2!d8h|D)}!h3LZp~8%b2F(+0@1BONElZacmmAS$b_tHN%!;^>`We@IDRYvl zbZx)j3Jj~fsSJJ;HY_-cMw~yMnP*wzPt>j>`6#P$tLP7SLP8W9{8H%b3rH!O(ntUa zySoRhAni>)zy3wAiE!lo>aQRSoakN}U&5+J#ExA}l}ub8s*z#)Q+Sjk z>JQ4K1k?FdE&cf`b4Mo-AL=Yor(6F66us%{^|1|TbY)$NqW{*}V^|2+z%cZ$=smr< zOct`rW@ur4pbLwHYBGjbM94<7n~yrxVx*Onl9rGlMJv0|aN5}~+v-65@G&K`wo^Oc zaF4^u$G^7cSps?Ggwykz*$sZ^v3j3-ZU3c+s_;M}W-*a{C?n(~{o0eh{6;GhSQ`bW zsWAH?Fo*}YZ6MtZVBI0YGE5dtyyun~?s`==F`@dyxGPGLs2djFs0;3Vpv}{Rml~^j zD?iW9ab#C}N%vBr+Gu{JAjh1cb=uT^$9^5sZ8zO2UiDyKw$2&mIt+ZvbKSf3%kQWC z1Nq~|1Pw1Jcs`@vWst`lQ|GteM!e~V$QQbian?b42gTx4ucd8Y{|6| zjzpUYa5Q~J7>b*=vF!n?|88&;XgN_%UFV0HYuW>FWy|L-2)QJs1om_LgQt7<62-I1 z6oy7%?w@4&-_wxqJYrG@Ay$p!%)qmH zGcYV8O+7O{Uuw9tf5_;NV8TTw`12Nso@Gn0=Ei@QlmHEMug{`XL=F7XgKTzREieog zYIMxaiCdblMB~k)WbpOdx7&GdQJ3Y4PE+@O7b>B7ot?#}1d*G1h8Ct1lyi_Cu=KU+ zO%A<2TtM;~w?P;WoVDlqoNEBVh({Pda>!8Qt~E;J-KV`1=tPVZ)sEC^T@|>F@U^mk zqCv4LW(!}f=H>5QTg5WN8}#$a%4#Efdsh(Unp)(y>-R?pp*jDm=p@9?F%nEROs%FS z|LY4hhb1mD+T=(|NtGAA{p(HLRO~i7hXk+pX>ohzHI9Mi8<|8Cyk(!v$RWl+G)ycP z#`wug_u(Hq)b~a>^6Xk)AYN7d4!go1lf!y{8=!eP2|@#e4OGv!a8 zV%0#@X?^nc(FwFSgUurvz-MSr{q2hvgzi4cKT6HB7J2O~%sXthlNi;%Vj=X0jM`Hv z8ja5Kp`?D!v#8#-A}n>Uh|JBx&kQq(2HYh|(8}ry6m_`qgLn1>U*aRJxENXy7vFAc zUzW%7P632x)7yu6aq;jiooy&WG^@jM9VE;x)0!`oQ?+;u1R`3k#{=I+GOUjl(q@C> ztf`@4iz;2iX<4alaZI~6DcE&G{*mn|UElopg|VPpd5@8I5`fELbJ&e1+{#iI8i&JZ z!H;4p^DMLht$1GSE~vewIc9!f&>@MJDF`Q=BtHV|sNhZCn=P*2FMO~|8qnd`G7Ct! zDmWAV0JhkN=57yKJN9ak6!NXC~n zc$|$_B(i?UD)7PLn+c+K(^o9mZtpunY;3NTqnyjKk|74*Hif^j93@BB$u|$6X9H$T z@+jqz6_q?PO*xSmx5tISDGvZo{?&*_aeD;Gnro=4WRei@_O((lKN?;#{J|GeM+EDj-MA zEU%0@wTHUtneLBw;RA!;`zC@G(lfhLy%Uaq9CvND!FEw@xxtRFlau#7_D0k|cumD0 zd(`hxw+{98T1p!vssY~&q#kvlhPiDc&ctcKBAE-hFOA7F59Kv?)^SYsn%o;y+Iz8d zqK0h6OurVvJ$lwL0#EN9s4UD$wwgj5Aj%6O9X?O(;dcD}No)F<+Tb_6YEc_}!33`?(s{HM2FH4i;MxXhHh+g11BtwUhXh;!6+EAM@I z@!KnQZ$f17vtQ<<>|ZZ^*MTcTf}_Z}-0bwjK&N=Zu%2tJZ=&)KM-PvZr%zusU&lE> zg|zWXh*b1a)ndYkj&gQBRl^@qbHHBfc!TF&TYi2@`5GLsU0u7CwS${$FeY2Y0rbu; zRMlLoyn9|(7#)`L0r&U%>d3jB$h6Ltm8t-8B_vjwmls-Rp_fV7xGjkt5#?yh%+ZK7AerF@tw*z;H?tJ*B-9u7H5dy4EA=I*WFk#pPH zuC!zRgDt{Sn(xoJq^}b<^yJnao0aUB%P=V zrnRot3a``c4a@~KwXgwbVNE3c+EonEpb;1hPx`E>Qzo7)hze9_UaibTH2+yO>x1DB zZpV{M-J8+bywJ&NJ-#QV_*LE+D-6uM0bV;x{Tj)SO5=)u_GC-!*ll$*sq;o!`zEOB zFO_y%IR1-!6!<%+njghD*J^lb6Hk|STOT#bzryyW6!oad#y zaXLB{*A^S0t&H*C{NbX3c?2dOe7Kj*&)h8;x#+&QP_B{&-itxwK)U(f(*j{i)qt*o z&%me2EC(_NU~84NXnZ|#o#U90_^fTXlF((l1WsE%Z&LgN?+@PYpl1=>b(>xqs}1V% z6-Avnyxlskk+IjBCr<5dU}}KJv_iX@4PJx4^*#&OMEK_8EBNBM8A~qzFl==wVI&p^ z)t8}H_|-~T)wsb%93V_9C3$lb6?9@V&{K1BEsd2<;mqlxofiph|K5f)WRovqz9>>+ zx66!{gBZuZ{(fTj(c>}GqZUyA$MFdS%lEsMMyg&kCX{!Rd^3rUGso1Elz} z|KCA|(~s{tjtUs>e-kc!-(FN+PTd$a7$vbXw=Jml+*S5d7Y+^e49s~hAW8*~%$)rs zdDhzHuGQ&=`%fb$BZ)u$voq_B@$+BdB2GzgMF+`J6a{WLM?jER+0LP=g^bz0>SBh$Yj8qx{%SK%t8;950VmA!@*8~H2&r;=KQibHjUW$#kH zwLZg(QdlV8JX62U${gQ{l`Cw~>EGokTbTSBazTghhZJs>*@euSc9=4b@@eW89eZ?TWwD!;&>#jN+6-=y}7=a_M!% z<|&o`wd*u9Htqv9EbBS~uRrA=#9nx--;#+bia^ z{>W`Jl4OuoDYc2_m}aY|1TG!z_WPG{IGH29FR>jeRB=Bv zKSR&2*yfY6D?g`8yfYFTyT#RPBtt@P4{jjM53@yb<9Qb>q%$)&_e;~wYnK!iebcfz-;Cy%*(5!xUx00 zwJC(sDGQ+l!aQx|ZFOXaYNA@hPrL;-K1~fPTKaL!)Jl1KdhQOEhv}i!0VNf8Sx`Z) z?Vj|`sW}t-6%z6fa#>sYBhTKnzY)I~(o$&l-t51Xp(@`-TO z2E0D>OUvxi_$6~Lkb-}>VZp!jy^6BxulT1Q@(akaarY>rq1vzVE?5{D8I7+Rxg*39 z>{0%_^;;9TXRvwIX55pR%5~nq_MH|0naRc$!1#1_c(bY@q>;$(ftM|HQMOyzhs&=V zOV%N*jWnMWvAVLGU?%%6JMBqCMTSz!w(_J#GW7k33iM`wO1_4k8~oEpjHyrx7wZgPw_19sE*SvcErvWqVwv4ju-d%QO<~u9_FtPRY ze6Nk(c*RAVO;TJO0vOZsH3eL!r8bk}eqN1FTa(pF(%X}y#RKXr&H^03qrX4bx2Hhg z3Nicx1COQsQE*(&{29|eTspmYuo_m8^L&8Z1vFahPKY^vR?_SB^Vl72Mg;>KjqU7$ z-)KBxku2fVv56%L2{pR$6uW322_4)TrA&%dBC-TylW62wPoY4WVTZwTmXVFvy$Ix8 zhmCo3PN@Dr#(IcekGyh~aHh}JIAx`9ep|D$x=YOWmtq%t{3n?zz#5S!#E&2Et*-N2 z8V=VjSAK%G3HFdcNL)YQ2!VR{UD8-96%XY6ZVB~V$V)D#7%2oI|G;~AcO5F={hhLM zOoPpGk1$X4l-m?_jvThOiWc{npbpx{j*U&YrH9xUC2R5EuH4vm+qu7{f>G^{+FhDZ ztNb*kymxZ|pEFj4Y*XGHT;sm+6H~CW-%xH#C#9tF21^VIrMbNcYd)F& zp{em_xsbY3r&h}^v(8^z;`c{wT~j=T)_$DeNWK1kD4EqNAuO!n0#Ps2n_GL$;e^2|q1S6q=(n7}kRizrevUW39;?|W zh*!oJ3b!pydEy3H*v90kn*g1Sg!wX8bH~GHnf`EO})=`Pq=g3agpn8YUAxO#*98pQuq!{+%=iBQted$?g27<~c(L zwJu+o8s6%p)v$uoe&VzgM1a;~bB+9(+>9MF<+ndZdRO?EnkFfaFO@&7Wo({6JOfFZ ze$Jk-$Ws@MxWB1i@pO0B?c!0x;gO!T-!dkwX$jNbuz3-p!nioZl}YmF2S9bj68z*m zUx*@ck&yywmpV^b<+hzkLtl%$M@SBYBk9W@x*seM0PgX%y`R9b*JS9qA+O3IMic88 zLwToDAQ|S8T7yIor+iMk@Hqc@ef_T^6EHd`r9hL1iYBMrMnMZutG;978d6=8WL4M7 z{8o_sa9jH`e9RhBFseJ+R@8>i@X=xOsT9?z@TCKtMP^x+oR2u%t_mM20Bq{A!cUf( z^gKN?bB+zKZnn?QqN^{H;9& zTkys{!`=Z++TTUG{c`3=cAX@M@*6U(Qw~t31ZdC%4dZ~M1))J=?1ifvy4l2-&p9ZU0_NAAW4+t3OEc7A!w{1-k4s9FD z&ffnLMT^v8%M%9DFsX<>1`v$+70*GX)|YT6L0ZuKxXvQ0yI03PpET~fZZkqAR$h~V z&tu_~!~k}rV?Y>pZTtS5XLxK3$xKsG#)8kVf>z_*Bv=ICRVjB?62AKD@Db??FCzaX zVMJ!33YTONFY61~@*7_M*O@e25pX9u|j|wh%ZF;|tCheLD^d)`0OXsjm zA#Je2UJGOs)rLhfZuEQGU+k(^55q%p^1kOgb0ZY@!!K2C#&%DMw&2i0+8{&A5TEMq zO_WD0Q!_INgB@%>W(%ticJ~2h-4+lN6GL?WI52P^7QGm3pvZa}ZFL6SkDvfPrl4yw z#y&nqW$6Qc@@vhWt(1|X4aiM9A($9%GV=geu%d1azMSmBi-J4L41WM9Qn<|~CnbIS zxN42TAQL&(Hm^N%Tk;Y_j-~8aC6ZZca)eh5I8m#|4do>EqVs$_VWUI7Q!CtleQO7* zG7@fP?+y`Kc!PH7gQe%~ymJ|^yn4pSD87CuuiX~E4E~7LW_08~x{5ClS!@<_(bT$0 z3drAXL$ooL2%(d<)BN)S0u}BM#h>{|bhe522j6@|Ke_735P{i)jQ;guKx#_Z5|Np}qw{q&)?G2^G$PHdk*N8GM*%N5GIKK(jT znIM6ZALRKAi5#7*_~Sm{8Y5&A8?2*cKT2n_KH0}ld-jU|h;@$ZaIyojhG_>~H5ac4 zXpZE@Vai;K^>o4EcS96A!^Ns=LDWwBw{00J<6j3N-VF!jwoa@ae0M%Djdz^{kK9 zxJuXYI;bZe1YhpyDC`h{soo$p(4;twW33hJ;A$+ zbR7TJ(`^3h$$}Tl{PM4It%*{?IdmqNZdbinLSag^8ARy$`X=_*a(b{1x>e5g=ln^30CmT$Nxk;yBcs2O=K%)2A3HT#FGjd;nrF|S*oI;T$5nF&uNT5s9l^*8Zc zQ*cHjxr6Bt?b2mxmJvAur-&i6sNJyYhAH8@nd;rKu?kTkI$3P2tVnStbDel}p0Ds& z3))J&;Zklt6CA3x4qt`x$LTk;Q|UhLqfuMX*Goy&HD5nFJnixO9#W)%)R*jumK>w; zM#x7(h-w1gE~oo3^xY5H*InI&wJ>mSj*fCZ$Y)Rf9J_W7uHChVk>H2`bJT*?Usk75 zvS8|awKe&6L+>P&fniTObl;*ib0rCQ6OIe?*>r=TY@;e3>Jhy22j{0owpVh+(GRog z_!_O)5Z1chYYjB9=#-92NF@Ed@xwIVf_2ZHwA>49{@ZEyAVK?I+g&*P zs?SNXvcuDW@gIb=O4@e6h(}G&)J};Y%Xa)FoL*n0mD;uy()X`dG92z7#|&xVghET# zGrwvU>><88Egm^$cSpykJvBfp@CV%gijsONuq62gab-p_m`x!G32R8+PlZWrk;mIa z{7+24|4a?;GVE1{1q4Xen1`GEJt~{1KKi3qVp0{Y6M2l(6ypZx1~7UDTL=v@U40AL zCQu4Je${u6tHm_3T45aReo4D7!v8c`914;F3fU!PWw%dp&Utz}I6OIVeN%pQd;2cS z6ru@lQKl~{O~9$^Y3)!{Q|EXlGxE~V`RaK*znwR1q%;3Wqp@-E6fGXy8NdC-&_KJm z1OR>1$qJL$NEk+P)UA)3W2=jqw=(o2Aj+ct&Ee#b7_MR3Jc+;}utD-ItdVMRQgJl{ z54RWi9jT8!b~*Eo=H;I)l+^WZzMku@Xk6ECy7B_;+Nsl^~C;DyWC6u zaGV|hR>j$dYp%#u6&Dvbkp}N&fTFXLeo|5yu``%*jin6+;SP_Nx)NSLG{RFbwVSx? zy>TAM^DT3IUGRG?=ED4HkRc3g#Be1x#XRybmJt(gim6by?m`3-i2VAt|P8WzQwRp`JddQvq-qZZrggo3IZeRIp`(fjyS zepXo+m2XH1vtR0*yf^$iaTGLK$MJ2gJEbKMflgSJZquz~(SD$Pm_aE-H0@B5&7Ol- z0~8+8OHg2sAHO)s=P>~I6VgtPat7Bl7@w$e_K};QunpAt(C8LP5(I$HCax$DmrwGjr0^SNLg8zbzs{0VZ-pRUP~9#F@AH=Ns{)6oHMYpJ)@_jdNtb? zIrvvH9;E7I+04}9)%(hK3mqst9&V&zCP=IRlPrAFq3pl|miGGn;4If)Zy)Wwk@1ae zP;~TOCrj8LNz;{adV;)& zSoH^~Dx(uLg5$sPa%Cs`R?g7y=ZM4qC|8R=MHk07-RT?KOjRZrLvHlmUwW%LHvZ4E zfJ6$Ji?f%~@%#I*G7)i9FPpDZ+q`HPtk0xubBdmNiS_4S12V_bTSqaI!kw%$a~tOi zGMA_EUGOc#E*-pTPkO z9e_9W^u}U6+}J9^zqE64=PgMy#diF=gjD>9ue)rEypbPF~KkIuD~6aZU5R56l-XvjPxdH!?6V zx8DmCH(RHG^p|pi^mlanw`}4IWIO%W@~2#9N3PdHP07w1OfR6n(NI`=9t}*(WrPq3 zXX1dn0Cx`hA~o*)`-f2tGb%?sAc2EL4(5)x$%U({(3ZnJVg<#zj?|g&NWJyKA|C4k zv|3Og4XR2?O3ov}0U1~@Wg}f=M!0Z)vFHh0&Ut--wvG-KRi*-NoNiWI;-aFge@0>W zC7H@4BQc>loMq3>om;rpKi_$A{pbW@AG-Q+q~;fv(Li{TwY|N)aQ$5rd157!R0^9v zuN!2nFHF*A>c08^b1^Ix`0UYnFQ(}WRQN0|L~M}wiS=!dTGIxPgG((fq_%r~)&5On zB6@?`v|d5bP@gMrRhfq5jABy(3 zxdQ8hHn5&L=YTzKXE2--N^^640S=^P@6zX;Pq$FD^nku1O1?yMTv`6`;1BLIAN&wOb_K-83d4@F0i@v~+WAU&GG+S-YZOLSR z{?jUa!}v6qgWZV6O~kg(GbtuIiid5=_zp$X5PR%xZSy-85UJJsBke@=zBkbU9x>s> zS}B$00T}+9nlxG+5=&SquAO)`Sf~Z!&Ngl4Xdz?$2kdZr6sVjsO^^T<*c>;VY?5^SN`yG1>F%6}tZYHBv%;e-i7xjF%4x zEi&HWCo0$fVSfDn*Q30Y0;KJ~Clg)2jS~_S8vJJfTslv(xk#{;kH8b`+Xg@Hh6`?4 zVM-ag@%6VJMS73}AB|N~oPx^B%g=JbU+XOmThX6i#b-J}rFq40yU8O)|)$%r*R?{)R%PB>yaQi6y#-OO@QS4McV9yX~#P zZN0s!5$`PW5WN;|-8~NNv)7-G#)4{ZtqMA9j3~e~w*@pXRE73^+CPQT9dM8BOsK)S z9veKJn>yu&y|d;t-L9CCf~HL6!mC%Wz-Bg0u_o`}sB@4!W~%w4!7|nQ3TAMn?Oy-_ zIpq@z&rQX>iuuxh+BuKvO=F`5fWd{$`VW{h%ZB_56cYsWCOt|S-BG6-Rv?C6 z4&#s22{#q}|A$v&Z#5OKmc0v{)qC>m=|nXoyYi>dqqtwRwFR+})~q{yZ(&_YI}mR) zRA5Fl-nHeCvOy`>dC?Jub@SO1w*El6lh?%)t43g@WXN0wqEFc!p$qJIbfO8OBYOIu ze(k(B*ezAOlMdJuS?~&LLzHry|0;~3cy?NW7TSYM9;@{NEpIi}AzJExo=W+@r{X9^ zBu>F6fl3c=o)X&`gS!30GSJ>kw+i zvs@?7m0FkP#|PiOEs2V5pKdJpDOJxKiLl6mOg1MFfFfh@hPYX@_*SS$Ml-Y3I%UU?`gMMP>vl;@+@dN@F^`E9UCMis z;^xZkRs2GUnuP)v`3m+d+P}y!<4zlrNWZCbwAww1a42{iMs#u3p`)as!=+vts9rW7 zn!n+0zOT*4-2r5SB|G@j+bZU~j`N1Shk(Mb{4%ynjF#8_Kii92)Arl}%3MP~p+N_l z)rcCl-MjrezX9=Phzkz785bYl{O)wWWtLnYk%fWbu6%OH;WzAZHUV&+l1BfFRk3+z zEI2#dn4F0rHX{5vwYGB>d^%FfJ^H_G@yH|X_mG1;)PoNTT@TVqhkW4(y%Bs0gG8j>GZU1@V`mf9YCnA79AaO3 zME}HJ3DK|&l^gD%`IKYgC21L znNL8a2C8*z8sD0=bm2lw zE-pw7Ii^%k2}fD(dUHBz#S@*aLG88(y>8iB%dfWix#!$dYh77`c)%$>WqX12A~noO zOKbzan<2yt&Hi2ZU+Se{?tgSvggQ?cG)Q1Jp$*hA=W4{++`R87ZweMt!#SDhi;sJ1 zS6=`q9k~ADnEKXXOW^-Bxdy(5yJ+NQe}^o3aWs2FoCzh}_U|w&x&O~35|GvWX%CxFjunIs zJK%m*LCl~J04`XMyhfgqk-Y+jP-wN#=Vx6B<2;k9oL&L{hH9fOiHIp#XGd(xKAc)< z!`S21GU8mW>l}`fQc2Fn!fbeU{xWA=SgPsw{#m{gg7APqPjfEwmsFGSU&RK5SmBj{ zq*onPw&j>4KU%R^m2)mwTzZtM5eH3zH`bkW)dmbUc;$;1FCxkx#cfdaktUql=F~x? z{>6(I1-XzM%HG!}vZSysMySGf4NN9!?UNJi1Vy>5R_QChu;2tXu?IB+M$f%bf7X^j zM*Zfno{(1B-)GbeR-@#8Z(?#Q+m5@^S5B5}YWflGO+8_CWo?LDl*9 zgGHU25KJ8V;aL1o^_J0+mjUk~`nS1nO;p0<08J(Z1C&RrDUqcP<9L_-Oh*SPQSDQA zcXr8yHcu{-7$Jw)e1 zLe+iHDAonpaqH`nz41RF&IlFVQ%bQF?R@v{9S8>vEHwieTC7XDt4>#*w_tW=;+y0s zKr_`Wu7Bddd+f`jK_Ax=G_I3%WGA(7!jNEquAz&n=A?ED{2&^kkiu9oOtnhgLHN%a2@W@N^x)0K(0~|_O#Pqnr?4>uxBTxSO9;esI12)cyFoS;HpbHN~|;#BVFn_*rh$6AtMsG z1mT5KNt)Eirq3r1zaLy7bJ6rnU0UP^>jLafppT2SB(h+a8+q^RF39p99Z1s1n4jwd z1uPMpx@Ny#G&DpI00=1@(8JA*MF7Z2-o=iUl}mSbSs+e$b`5L=R$a%&8qnwq$DG%f ze78HVyhf-W!Ld*f)`Y_bmNeD8wZ6zAh)P>yoVt|egk9eV3m>dc`g7UEB~0bSuDyie zBY5F#JCo6Ef$Q2siM@f$9mswkMkHV_#^7@(*um|$b|d@(RkFH}{zZ&BQH1#>GkqO9*1nsU$*K)aFU2-EiMZ?5i z(`~9|E8|ZzFR;*KO1*Q6lRwrC-g>woOO%J5gXNo3e-a2^_eGw4YWF6))f%wZ%|s0n zURR{g#Hv8^X~Pcv1eBDN6Xk}-k@F9iaWunP-xft}mm&deuu0v?`rD?$%xLjLn~q#v zI%5Ba<Q{RmG%hf>xkmxy zK)OcSnk`jmz@Y}?W3rikjn3p;t|2U5WU!@d*H++Qfoli_8+2x6F*pK6qtFcq&#WJc zoGD-&{jl(>^P=`!tHjwhBOjr2m!ax~Rff1VFIHf?vqMrNH$NR9(?@qwwwj0-6?I~L zE61`EnBaJ8*)%@90S2wKW@xlQSHb|8QJImY#q$^bPWZ9l>!5T2ABr?@8@Ez%6E3Mkm)>*)zHj-XTEl%_w(!x)IK znbS*|3*I~O=M!1XgG|^{0iqQWo%(e!j4kD+*o)F)4oJ*GMI71A5^Mpd+yWp~|TId`Th}ZT{#b61H~X zoP`h1KGW;BAs>_YLNM`1##1Cv=YGjfa|BZXd)-z&J` z>52n9=H~YH0&w3q`Hwr39wPw>ED=n3o#UySH&Aldpi{;Y53HK`q!Q8a>z6C^7@eJ= zRNIQnV}t;+1po7BG${WYEXoml`SU~UG0|v#c(5*Bq#oZifR`9r4S!HxJDvX_ z;3}XL{2s9yKj%EDkqP!DmX-&j>+oSOc;Y;bcVD^VtD`uOKe@R(=u#5ZxZ~?<<_>Zf z3=yC62WugWx@W@SwI5FFZ(fbxk~d5Og^ZDaZF`~ z7so{^V9u|osP9UJ5rppD_8s{Ft=7QCY+0{in_HD6(KUD76r59Yei{63eSKa+bF zB_3ewDbAN&vXbm+Rhjb1b8{RnB`=K=s`fhNeZKU`Ojuj{a%cd0Hx$zHa(vl{D;T#Ha}W&s!?s$bSEY ztti#D%Z9{t0Q-`460s`c%sEs68kiSEHWfBI74OE==v&JjQ6tHF52bdi?}|puEtvZT zZ+ntfKx9XHtizVJ<}=mu>{6tZA{!)z6|Sxx(P~=xU8uTG|C$8Iq-a2+M6!G@vS#Vi zPZ;|*1orv-FW~|BbB$Y?ZTS09!cienguqs{e4fWv0t*#cPIL!t(lS_RBUuka%=rAg zBxR&w7pfibxbZH$unxW}2=`VGk#(Y1Zh9&^w!5hFFV#rTExLAeex(YmN};3keRfNUN- z&?+LD`OIOQR5tduC0p*k?WDZcp6^b%&?sGl+)yY5?%rGBT!P?Psfe*T*}#urJgQ99 z`67wu)U>C;5l0v@@}?sdpw4Gn_OT0mQI)qgA4wAqJU<<@Vf77acqV(tH_SFmOD7FjA~P#H^8jGl~27->J~S8c=R$QtqEm zSom8NWMB(BadPqF^JB13o|g2dX1Qv&{_53gwJ%agRHYQ7)C)?sh!)yVVn%eUoE{;Niq3 z^|+1XNQ90c8#nEGNU!YjV+%8F+z&_hk-Pe0DdxmjtlijsiV@r)$<;?VKMjN(^F+}$~GMk)w9 zSWwhMtH}aDqdcYK&yQK>{9FM>s90YB3X8F6ix#m!8u$e}M+F_NspXen`h-12BWjLF zOUKm@!4D8uDG+V96ohAAbSy-1=W|swgiv8LYVO?@pfB~<+QGr$!iAHnx)Zm|D{pT~ z8hR&U;^v0;oOQ=qg4wQJyBeM5pk%@xx+@y4fp~{x6FKCSoz`e;S0MTQ3|$KYl3 z=G0WT$RIkV%5D2g{}E4xR~gQN&%TGJTUOOW_WjL`Ga4-8+1fNQJd()_o!o{I;LE zICD@7W1Z;%i@tSMPEMNI+Ug(EuPXzKL3&{4csLt&dlCrthnEg-nNpm{=yRY+)z+T2 zebi`MK(Yf936+c~b`KqjZADtF_uK&UgsPMrqg-)`W(Vk+!Qhk6kNRBVeLs5Ik7@h9 z982btS*@9i6netAOl<%{OQY+obJVyQufOC_*y9=qtOWO$dTj4_ohGOCjQ9m>Y?_*X_ZR5cb+1 z{`#>D2w&_9CPNtrVmD@^pf@-&GaX1*CGizF9`)uTKFGQt)BQD?F_FkxRE5Lk0^#nE z9=3FeaS3?Ne2-N;A|jHUEn9BL%!~Dw;Og_W$qcAR6K=1$u>`s11C2;YSURQXg^wJe zZjC9{2NXAS&=q1h=x6}%+-;4)LI*Z&()r1Hs5A>i)LfHEK<3*EEi$`M$jEN!L=pUWICvIqc-z>H z#nVph^2vL3%<(>84&A<|roO}#YmaJwcoeqS1%uO+Q^%BVwvP6h&97slr7#&&gC>LJ zy`+1qGEP$uutqW;A0Ki*`-)ZDtE|zmhgS0)K0H=Y`s@N$*Q79GzXuk0eTlU^ma_@F zYZ0gYC{31+>B8$3U4o{8d|^tEHQ=bHlxAi^UnL~EBT8Y>AAbm1A|nrjvmvIsDMK;e z4}ZAQ_}YwZ(=GUOk*0I#qa&Vh{fgA=#@5yYJ$sNmw^TR#e10a=Bqo9nVb!Ltvbc6N zGZUa1e(D&c9v}xO?lZ;ksX)>(GJ}|U0DW3KVNe~NwD)+@{jRmG>PkwQE&7CBT8T<^ zdVN^*p%6~n{D2@kCCrMK>vjnI_N~gdH|8PUUD#@*rv3Q(epZD&@U1$9*eLTv2T~UDklc?oTcvl>2l{cdVa!K_^UYZuTGJF|iscAs zWDpP&t1>3(nwNpu=l#%GF090MKDwJJ2+b~v?e`x)kY>bsrF7Re{bYjm9u9(->2%5*WJ90;b%5wYsIH-<;Mfg z>*g=->6|ZK%-K;z$}!9hYJ+k0b)fnpKdOH{qD4kUUr>MJRnZem=PWSqsRwb|5z@=r1yn*b!)}imI7P}{nM)J7&hXscUO&5s|2(hgNhmhmZefNo zUwRci*Dt+_4f?94ty@@;4`}RKmG}x6&$rzQ2C^BWt*hGqy z3?V~?P#H6Z(4aDh5JDp%QxRpJl7uA593u0WdHUV&$J73v^Z5^c*L7UyI(u*J{XFmY zYgp@E_qx|wu7HuYo<6jgq&++514S}0Hu%W*s~osddF^$qWa*S41Ggl(4Cp8OvLW}- zfYAupA-$}o-Ja>_xeN3%w)zDVhLKE2Jz46QzrX)(@sqff+9zD6@e3xj^y?`nS$86} zkC?FXw-D^Q8aGBf>Tksw(D{^ttLUc1qyaj1bd_9COyTh!gBa*aYfF+XVncw#MOl>O zynaJ$2uWrgWf>$8UgLog^&q1h!FJYRH?C+vSxR2C66eIWWI(3ty`T4|AA||_&BCNG z+`NAf!n640Va}|rC)laAtCJ`FpGkYs1{~XM82U}e0FKFb8f}5w^uhTt@Oy{E4S7TX z@~Npjz|e+em_>@Yu?!W=FdG%^j}gG21~^{r{hn;Y+ee-x&Y6Io0hkAV2`EFO1mKq! z#B_Mma4%Xh6f<_M@Nnp!n)4~`KtGYU6{RbWs@K7dl9yub>XLg`TH~h-OVG2|xp#ux zr1|CV`5~GPI|({3sO4`D>?9V!qnhIW6(G(9XV5=2r>>5vmtouE-fg2PLz_E5_2@T! z`y|o5>)^q7Vl#Z5Fmy+iaQB^~%pq$?jgKJ7rctITVs9&hi@AVd_Zk4c`)5}@8#9FAB&7~c`z5sdgIml z$iT_u+Hjs0^5Elq?E3RdaXGVBpS(c!6nAubKQ<2M&3Tds4OEbjT{tP}xr=?sA)DV1 z(FjW15jVYG^_D&D$cS?;M(!piDmpBKN(Vb~CnOK!x|zrc<9+S3YH`-8iPUI z-A4^&^JCl>8}4}w%Doa|kTdWkmYpON>R_91KW z#l;Q;!syYWfjjti{pcF{#KZnfMCk9qdW&-Cm~ej~GTF3xWkLc}FrWO5NNA1O*5=+z zH01*}i!()wfDyVEcc<(gyWq(PddNtKNhAMw)79LsBd$YtxcZLVlVP*jAjifB#}wEcK? z|70a3PR^p?{k^^G{<%fGt(tnBPzO_X4f8`Z@2MztokeP|k|Ck44_zJcemCO3NEwzu zh7HNO$T>}IZEbyh$b)9)e3*D%A_$Otth6J5Ye#^7qXGGZS+Dw1_z&?MgJw{AVCLS{ zcdjz}iFL+hHJI*;$wrF&dQ!*gRYe089%9@!kRsEjnh7=B_X6_l0b+J4gPQtv40}V{ zBmstqvftwjK5`4}ZoQ>|-V%TK6)??VFM;j%FMHF+`zW?f6bumNUe@=Yf{?N4WC?TB82xh#SlB+tmypW`{l+Z_s%CRjjts})ScN20e3IW4{DSbZC;C+YKrdE z#IhGu7K^zNfAeJp6#IHPPAdBu0RYR(y#~bDMsexTw1tR0USsYusxk=Yhbc2vv^b)G z;e@?YMtwzSSeQr*FW>h~=pa$`lLlA{;JDjws^p%JeP8X97W6a<4zJl{7fu6GvKMg6?QlrN=S~p>SF>GLYZ4r)nL$koFJ}b?|a1@I``h z=D9!%ct0gO+X<-}^XMrVmbS*muQQL+%?e30^el~Plful&pkz|b;0`9O1 z9#v}1zgmEZO=gg^7%q%dinTGrQI zD?B0#%|+4D0HY*TZ9Or-B+V_$`G;6zEgDyX{1tkU{D{teaS@~B9rx0IGCuHr6^s15 zVCgqDT}mKvAbO|j0z72SS&2Ok>~M& z8Ph^k-2r%(H=cBfa{6gZ4uk_ffS*R~YgmQE)WO<#_?f;utqko`#@;4HyOXk zcJPH=v9tU3Qi^0vM1j!GR0f0HT!ijOQx+suE17wDa`t9IupV zIwNj_bl zEHi!hA0q2u>v{Fvz|;y37}fV40|3yUzHt{VvnNDU>W#a|GACi*>>c@$07K>x7#d3O=xR(Cnh zc)$(|)?hP4=H!Vj_E0`Xd37b23H|F6>f}v^_Ag${8K9*j@1NF-rlw_GSGQ_z{_x(3 zFFCFVl_aQ>C05*tiS;p&%!}YbLp}_2gAC{bH!~=$;laVJ>Vq9tOj#{M^-pz;MR+MzRE zk&_;uUX#^gnWlkIs&X&crDh3I?pI`W|HS*2AsxQ3>fe6XY5K0dOCD;uN)BZ<Zp*wLewqxwihsd1x|3h^L#it2mk_lIJ{IV^paw6lu~6jQkA-P8b9 zhS$Edv{+z6o@ykbdk(W62(oLrt%~e2;^Hs&egai{@gpy){h%?NTezb}wzAFtP|hRo zS9n`!mXY{SSGSL5=&}~yA?t=xJigpKJp6vf3AMZ`i~)kQwvJA5S3SsAlpvDF+aFv( zia=6`h;X7x(EB}H$qh{?Kg8a2GjxW95y^SQJc|2B4sehzAKmx$onJCgQx_NBeSXmjp3)LQoKQ{aeoYpKrj1pn9q=9tn-MIjxl>R|(9f;0{4IuXJ6$ z&=m;@GVY7bKh(Z-LSkF_!(;F!vrXE(Dt%X<`<9p&AjeQ$?)tqfJ~LA+P{B7KfHjPk zSQqPT3K-0U8avzecNKO5D}jb_BW|oFZ&0mtU>nWUpFcWNE;8E3;=od(7*5J%()TD= z(+%c+;{)+=MQFia)=9RVX#R)Jy7Tkn)ws)6R>=6J)L*&4ZH7o5cqP)=2lA#Vhtzej z>HK;*n`7=GBm$<{RF7o>xabIGm$`lF-tt-IrJUuas$M$?DD+hxT+YD!$@g#GAf;_x zbI(LH(#6>sWC6}U?pvkFoOL`JmYT$2dfserTnx_HfVFtUb$-_$IADv5dEFJKIBP+h zlW%+ju;#<~QnloFfZh(-EgC$sf}v>jh%B+_93K>H1iR_y*kUyjO_z_B_Qd2Fj2{By z(IM+aWuUL$hK}Tton!*ex2T$(SWD6p95dezb-np3Ng6`oN--`u=)B=T_f+>SeC$|P z1!MqYU(}u=%#NzAFTD%Ra2u?z2PH}n`sTwwFzSRooVGI@07-ZbN*dejO^&I$%ukiV(8W*NdeZSpA{dlv>x_JX6WzX_d~^TO=JpFegOUcQ-O799@+J0kcq z8_ZFCQGjoP#tgkdE4qZwJ&cI~U!fdVTc9?546QPtZdvGwkNRh}*-x$VcLY5-K(MZ$ ze2u^dw4vs)sy7pc>J&rYN)4gRP0A5L`wOC}vKsoBV-1OSS>KVEI6dnMk4}k;h};42 z0-FN_FDGB1!Br`nrUEK35=XbZ9r?t)mcuRdj)8znr1nKit}J=OFo$WjvPsf`=eS zbT>}gOkZ6hC}Pe1-&-C1zJR1q)OGkCPDsaGbYynGME>TKX)z+dDPclA7S0^EpwP4r8oS8>Y@kCVtSZA z^5U#Bw=awaE*)qB>yW2=i6m4`@%R51%@i%6`x~XKA8_nILmgFxXEm8<+4+B*5 z{4t+>+6K)UfLq8(9Fsu@MWw5%XoxMHU5Yqu*^^~mMu^fmiiT#FlM#&|No*k+c_V%& z1{(NGfp5<&UKb5K^m_Tcj<7A8B+>>WnJ1HI14#=jju7BPX{ zbEQW`k+k?kb2YqeI1HIj{CF%;(!2!Tm~-io*lVlL7|}{>8FhwS)xF z7nNaP@5WQNk+d-v#mDP(_46Du>O#8ZM!e;ww0V>;fXb;JXy7nBYoba1d<##?c@2c# z60%4Pi5l1$23gbs2x!C%-cK>4s=-D=>7CB^cNx)6O@7p?NYlq=xw_D$IaV1}AQuu? zQy^71`2vgyrs_ymxFCVcd69VdL)lN3^8^=Ck%?IvDc%J9@%mOy83azycJADK@7Qh) zo;G^-Ah3T#mgpvE->q8-v;MPopZ8d2fb8Yge+GX3+=;3W;0D!}3x?rP9T6e)ns=d^ zRD%1+uD@}k>?<-VWB%N3?Fx^bzc_n^bw}i$Z~YUlGWn^gn|(@=k{b};e!;<%fX5p=El4klTvbr>C?;03|Psyu+FZm?;rUk+WOsR80~auGz6T$53}j4Z-6t8YG0 z;=o6Wcqa~WVhSzKG6!G(F2WwjE{<*@4h|V+lfo$W(2P2)VglUazY;}!TnCv^&(SU+VnajV~^y=;}G{^Oaq99 z3L3HtE67;(wj^N;qMif5L~VXT0^l!^n$bvv@Dcr&eM(_ZE|y(d&$K}8%)Nnz27^zw z!lFG!vjKwmT%1kprZ(Jy+7Dyz9BVr}oI_~PB*l8xGx}h1ASXR_+61}N;p57`>-Zi9 z2d$6MdHZ>7uY-)*A0*demgY^LoH;}9`Q~fM+~aGR(fn1}dq4yl!2@{g==_c59SDS9 zoJFoAboiAPOiy<=WV=Zk5RV)!+3#wj;EbZ&f&Ij(C%JB0CKx>!!y_UPE0Qz7nd7!? zFlQx1aBDv= zFIw!PO-aLH8ADV=gPTJ3{_mDi05~b#AN|7QpCL&ZuEfX7TMk(Ra_*_AXOc8v*U+KD z)70wXfpCb0D#Ltk;9o`2c>BABnld2Mz5YSkLk88|6R*mffcZCeoO#S69(?w!EJ*tWw zm-7Y(|AV~p?LOYi3(Gr#uG*Ns!R`IEzMe}`ndfCf!taCEk-tOD+YLj>aOP4MIRDnJ(P#Zj%YZ15I_o?o%_+&W;IS#PDRcES@zu|hXdA46yR;P z9z7T_ykih^3LtI6we&9S@M|99h^c1Vw#_WB+4z80W+{Q*OtN}JQOE?_7^UnYwIgvt ze!)pgX%yj`(&%8$z5%A+Zw4)X(35$6>%``lY=Xp&ktAAxS`pm>1tXJ)0DeHc9?6^q zl;-O4os-((C=vC#lerV+4`CJX_2V-z!i29kizWk8G!RJFb-Q{s2pEIbNcDso!B+ZC z+m_Re(ITDh{S@kg@?|UH5lFEj=}iBX%E9cZ*L1px+DS-~-b;t?{Ab`O^vpP+!upnP z8o&q>hoiF7TD)Xl1k#>&=urw$me^xI7w|;tb!aw^+x9drjw?_B&GspIBLTg#B`31~ zw`NBY8w)o}r0}3Dyjb=QrGDr%1a!pcb1he|!6qH^lC(ig61t6hDnjsTj~mb$_F+DX z%@IGD91=V(>-^{A549u=mWR`vcof^n0#VBb4FP6hnB?U%|An4nk{i#V2n!wJfoIX( zyuJMi)>J}9#%;X&6k)n9f)RGu#tY*9O^YrHNOo=(;G-cu?)^`($|s`l@ha5}`6P{s zuB#YZG=4B42`LY7bHXfxeSJYuWJKe^Ns&r@83HN*PXWO@xVhh4mB>aD!Y~D-#gNb* z5RXB+%?4VG)1Jq6<8uh=+{}+GIeBbKy-XZNiBJKdVlZQ6WOc@8#BERaA{3(-uP=6# zmy_`Ln~VuLsm{$Ho$V_mFGuy$o};$Ju}=>Iq}9v)DwQ^b zG#|Amz?PA!Ncs2gp$Q2Rk#Elzv|Gb129&W=+$isnWwz+C5mXHBNL=1HbV$7plqXba z7>I-1h6m<25~pJV z-2yYTAxW%tn8EvS2ETKeN=}RSJ)2TrsuYG0YH7v!51pfS&4+)HZyEE=Wi)c=IPyWr zw;+_Ptc3T#D`ljmje1sjoq6#O1=fTN6 zXcYsKae@1&TB5pOEours;;vz%yq|8^w29)eJ+}Sbtq`)SLFz2zB=28WgYq-DUh!=R z_%OBOHQhoP97xp^?7vphy!i@}gq{F1y=q9eGQVJLe8TLnaylc`-ZT_-?}mb!xYN{_*g*mWgpWajnqbBsPISKIoo(4m0TQVfH{+qwgt;~vVj_9O zVJQM}C^Do7Opsu`cyam|P_*HmpLP-ybN`r^VuZ7HK^*ZPIg#-y9whGDAk!$V;=yS6 zi4|mbnjTFJY8Nhx2o@b4@BOq%cK-3TmD1wk=za9$49rK2!sn!f1YCm?@8;tAaT|um z5u;LA_;gx|cMv@#2dRvARS1RmeJ1J0Gs=kWgX=n&1 z98W{T%(COz9oU0=H8}_)IsQB!)!*OO*}%skiV0LW_L)9{2fh|#VW1ycrJ9SG$4IN7 zX16jgQ2GCOokMdJ3uzr3t`rMF9cGI{s>v6|>UU@0SUr-zXt7XuL4clGE2(n!&h@TG z(bR~a(P$Ld^@}BXucc`=H#OBdynA@L4TTH?4MIk$3oR(4AS-?9Mu8MIn_VHmj!emlo4NdrwmqN1sR5|KqG zo6B9n<)H8R^XH$wD?$U;G)?;2d6;|P8W>;KmM`^6eMf+mnQ)jC@9Em zb2}feb~gUofB7DQIYF@SvEb9P*mAs!NqQpzEz{#rynwO6===+LoEmCnzzO?#LvPhx z<)zQ8{$^{54obE#AUpg0dt=Hz8vVT-x>7p=D!M?6TP)JMUb)hbQF*&9q;?Ds4Sm;7 zby7Z!rmXSUr-c*9Df0&^K%9v<%pweu?gh~L=uw{0U_M)%?mji+i438f%ERTF=4l;@ z3A5Zz?&gaLV5KLF{p622Je{H|MAz)Zy31sJUXAS*tu)PV*W55?8R7zGZh)G5n4b*m z78zNqV*p||Ry63~K7>+L=_uvj@4ryZYw&wCCSVY|5#OquV1-(BTAA*rZKW$T5(jn7j$c%8-+56s1Kl%fLC`C&e`uPWn zXhE_J>TtKB&u4lx4Ps`UVdw+ODXpStT1fg%xq6vR=;#9WZW%X2!~~%sSRquJ0fch~ z_vYrGnx{o*1#?+CEcPo88NBMPu^1(V`gZTqr&UoWah)C-K!N^}lT#6z-on~k?gkN}d^aet-?8ZwJ zpGiXt3`N6_9|G2G5ttbO_E=2>3!p;Zg#$O+kIc!hs)@--ES!(K_e_PkD3rV~=pc~c zYGD&aWrfr*MZ3oA+wj!ixVDl)K9QEn{;vRD<`)$C&dKqPs7~{KDm=jmlP-$EFGQDM zZxyPks;%ltA(&{~HViov`miqxW=NLwlr7CN|5v*nS&1HtAN|?kLXa~Kj#^3DsVcQY zA5$XhF2BC@QCL(ocJE2_V51zx=0lW&Ke7XdZu43tWo6`L4by%s-i;8sRcV5O+OJhf zBo15gZP;vh0*B29kzIgb3Hj!~pP@T=eMOKKoJr#AfCkNCx3A7M$%4T zHE27Woc2m8D0-a`Aj^!9^jg;7ld{SwX#FQUd<*DuB7`pgg#_||I4`^_G*B1gNThTs zT+VxcZK4?p^u9fDD4S$MqtEU9pu^;C@Xi`p6Sv zTCk)-Et)~xJApbZ{bfZn$#OkqL8sLaZPHUCx%B_ccjW;<3Q0TvMXB2aV4rnvN<4iw1eQC(YCXOF&gA>Z7nIdKB#E*Wyo4hmf%iA^0IO&%PH>}-Pw6VrAwGB5Yy>U^T6kgM zzdTbW3*`ZNP&~3b@E#?fE9bB+7gI>;J_SHRSdW&lV1mg7DLr3748%$aUZ)&;66L!K z*3#VVgw6~}F{qoYtSbDU)f5zvs>fE4*pNTLfwIb9;FP>4zuR4a8U6L_%*h9_()h4iVex~UB=WTU(*b2 zIgp{hQQZFfC^j8LGjYi6g3N@qKl((B!@5z z>+)sp;Bt^;P)|$NEZr;XM5IHk>u4$(V-c zi3CB-#k>LB-uJdfas=sLOioKZentV99!dyP{zJU?cI-O}SD$?+k?vqnF@kEC%ZrYf z{6ypy^Gx2nyC}AtlBhhijNeFOL?-z9tet@YI2F)*89)7%;~+MCPbG#?7ymHLIp~bs_dyB6U-z1%aiuSJi`VK%Jj4bJ)PgJ(2v2qR zfPetP1!$F3hslI1Nt+@FA~iyW@gG#7NG~58GDJeBxM@gP8T4}37G~|A)tJeHr37Q$ zJ>eXwvW*Px6)3bA$)c>?8ua&tzg&rt50d#f87$}NNF)QmLDX+jQyEo6RCbeP6R$Mf z9&aQ*qF`f**gW~O(&OQb$?5S@a_YcPtpTVNnM7vwjYx~3>J&M`f8Oe6>+q>SL(ZbU zdHFwMrI>EBD{lF1oukHY8ep(e>g_c!vL0yn&gxa9pWH}MqQ?!`Rupsg?XRn^kK6kR z>DOI_Njg zXB*l!%oH4!*0B6RtbaeK3K1TgwDU62C!5LjI1y!Cxh}+_e)@-0&<2+Qg)lMF60AXt z{S$!Yxdp%mlQ$y!$aQ=qGqJxnr(d@*GwI(l+$A>`yma^cW3jYQoAX(Z&( zfa&*m!=S@Hs2*TaQ5!T&kovbXUcUz6adiS2_&;F2(B*r0`3_~$QBI#72a;{}P}~EJ zL(s3EPNkXj9d-%P_vreDtt&{=nQ68iOone8kw!&(QDGLy|4|s6l5%=p)!`6%<#y7^ zRxIDFH{q4tH*5)mH9}iuOMnpkcuZ3G8uC98|96OnvhV-?<|@T1{riji6oKu(zxbE1 z`1d!zDE9E*U+kn5hy42s(m{&#{`WT@|Khp7zxm&zU?u*yDp-X7dsY_NTpV}k)oZcc zlWjD&Xf-Ym;w_IfE>j#RsVY$(lu#C;|9WJ7aeC?nxzLY^IiEr=Dux&HwzvaNO*n#$qdyorHa=tMrJB}b{2?F#Wvqi2@28^qrql2Th9L`?j{|NfKz ztr&3*@bkX|^S}GDd=ma=F8=>-Eq%X%u?2INqMQA_sfl%Qo1?`1F?sn9>6dCvK0g$6 znH(7TomEQ?&6uwsqybbO1Y?f!%x&9zCAYglbHEFcJ30+~@ZBn8T7}<{nCsy=3M_87 zy6Nh+c&=wk)_Dg4f!L7LJqi&hG+kNos7#NyBbJ8?TLr0MEtN#-1_mmcL(u7MnK2v z5CPlU_t&Qo<#?3mIu`%rNjo4kbWVPfv_qPzs~GQ{TegTw_hC7Zuop*v@m4P78+s@V5`e-Rf~7DYqy zU60rLIROCdIM~=Vk#XWNUQM_w_EhB9_;_a(IV9Yv6{j2}fkEocTAObuhVgCOut931 zU=>!-=J!g{s45QOQUE}`w9DjP{Yc>>sza^0b5HK>fO^VXl01~k1FZ{EpwRV~T)*2E z>@c{7WW8L8p<|?-Zp8O5+4OvQf-F+jo1G`I$5;yV!FF% zO^>wSWpjg)MVk0tW#W5dp4*WoFV)7PX+^JRD^WCnv0#1ORvY~iZ<3?Hhxf2Ds#BBp zI5$ueL)I~U)LT@r25rb7lAzhJ;rVVSjETb;W8~9$=>3xk(8%p)}KCq%ILpjs3>k(#q5Lu|_z3f2BqHfh>PuUWEd}nku%4 z&`^ytXU?2GOGpXl=Ur3u0*;|Yn62$NCXukRuslsNk#w1Sg*Av32cR0EtH~=Awe9|l zKfSx?ep@i^CIoy%20R+CUZ$kT+H~NUoL4JER)&JB=#*~dQwp_jQ2c5$V}>= z_wDB5iZj=Qh8N?$s~;V#ZEIsY@#{)4?jr38Vba5U#Nj;+(pG*8m$dZtu1_I~q5Hi! z8r3uoAdU5=%zr!D@F~e$fChH#FnRkv5IydY=jV8W6EzH}7C!j+77HAXPugf9TI9KY z({_n(m`QWu^M?=ecn_tE#MYD%rOvw9p{|c`+t=)HDmbK1tNq&e#Noq*2v-rL1#e)8 z5Eo7#9U<$Q}s~a`HEkz~c07>Z#`IC`W3>r4* z{`JeeF@4{>SkQy%c&#@k7Ogqg@c2){gS_Y>ve58MR#rBlg!~F;(O{T;W+ytXO|`mM zjoCOw;o;E)0c_cx8M>oLp{ng$QE==z&WsymM*QV#k!fQUvsB9q-EB}NGyU@x@>y4d zctc!|lJBJNi(fI9t0Kj$1{*U1Ig0&0Ra8K(?aw9~t+cs1dBwvHVvz$tzi@8d^=E10 zP{>(`tPQx(xllHIXStX#@lXYtC&%K6r**xr>r5&CHltSiEuZ@Z&LRS@r1Po;`bPOa=ECo0{@#z5ewrUX{3b zbV2xD1r5y2m^oUegl^zJ+V2>UUpyJS5&Z83^Fn>5H${6j9cfZ--1Z6{*Hc! zL`%Zb%a0UJpWbA;Frojdh^<3;%>_g2cdN5j;W06K{K+t_^GciFMZBK=a6X4GUFyY# ze0co8qWg2Wk(R*m%??gKi2i=3Chnkx3!IQ9+|k#s9oO2NLW6@<&z{Ay?4a?5!N-H% zDkezWj=X=iWmIhg>ukDFT?p6(4%TJrEL zpH9{pUERUl{&i14Svvf9bkJ5KNjs#ET4>X!4>%goY-yi#S46^I2H%BlM+=4`i=LvF zw=yPwg=L9<^-7p?WkC|oNLFrevC?+&cGM>BKqExh4Z=tCeJ~;XrT6aOLnj?wjvp^W z8Xj_{vzhD8g5B%EU4WgfxKj#Ohlujie|ud(2T6wkP4vP26v6}bt7G`356fsNq;8D&;(8xm4^u4Yw>3n9@&wC`X7dJQV41_}S%Mv_WfF!MaN>Y*qJTLK3 zDk>`69WJ_@jPXr__%u zBG7I#JMQL4%+Hqi*N+q963UP3~;`?INzWAxnJSxBB{F*j{|NH_fS{E6pMz}dtfz(beQAdHbFk8;Ezy9O&vB0){Y-;7eBjEWDM7` zqw7krJa7wUd+u-@Da@iXn3uRV_Ixbkgb}_XA%Poy2ps{4FQUa4i8+pTlp+I4AOu`{ z$h6&ip4`oG_~3UWKycfR=-E>TnD}(|a&vR@@&YOm@3%L1>=O@6g^lUq2N4kwge%a} z+UmI5_xQPFor7?PfHNhj`v=XFcMajfD?WaN2|C@v$(fF+ zP}nVc={%Z3RCm5}7;IEqZQ7B5#sCOwl(8+rEb{a9UnF3$m3EL~VKWRk=9bgA9_1+KzE5}1cyZ<~P<=X+}f zTuOOXp+5%|Po5;OPSvCMrEBN0Pek9+WSvXf7zd9QU=PqAis3e%xq!nOD3F-EYor`0 zYOy#!gX*d%X%`1{8AvbWiXraRYTQn&(UXHuuM3Uiw)31z7Eaum65_4@ikg}l{h*i@ zC5=98=(>`Lo^98$PpEN0uGTE20BRBdsPAA0fsbHi17=M2Wz; z68rWG_Y!0d@bFxzOHc=B2|O10I`(u-o?)ps3@n?3-AgDfyoXMhq@Lx zQS-I2S7U}TrUwH{@M)*_;GDxk1(p!Sr-dI*%T4>#!GaIvPPM`pyj-b#ii(N~Kqtp_ z<|;rt1pQ+xQZ|i<8h!Bnb##T2omI$u;N+ zq=%S}jm>90VW?z>2RE+z^rhJK=Z!Tv*^D88eyOt1$e{FO^cU;iqA7af#CIU0%TPYQ ztDY_AbA$-b%$a5poic~v+$l)5^Je=J(T(GT{P<3v`pXzc%TX1yM-eXPg`o&H!Uh*u zjmhD*HuTVPO}GA@2*098#aiGefesVCn`cQ=EspvKY&d2{R8bX$v)TB@^z<0JiKm7} z;RpNjm@&tV)!W|Nbbi3p$X`cCwHX)~p!iD389NyyXC9b-0FQSlXZN*|z_73>A=z;u z6B;ia_IA)$SP{ymWTAIbhvonXZcUR?#~zA4-1QP<+U&B z5>BtdJelBi9S@F0sH*?f0uUI7^TsbW8y)_4XMjr)B*720Wm@SUurj)14;*n+QSKo# z-8n$@AX?zF1Xo@;Agkg0rA6Ir2iYlQ5R?Ks(3D1}!ZRjK5?Thb9)jXJ`5GZCL02 z?@7>t`f;;as-ZQ4ii!>Jgz-(M(9+X;W~SdietZD|hRU8|KRgJgOe}p>~xhD~KX(xQZUYn%J#M4e+zRr2E#qA&~uehcXeuT{v>`^l4&Wo3)hI)jLkW z$#p2-j<>9NDhDJ_Am#^QVKLG!Z=vfYK3^1{A6Smj#|t+IsExM`+pl#MhaP_99g-S4$=Gf65(3=?{6R;dmkU4zocjUoR=ypJ5zwEis~rcaNLi}wi*FHnHMiYK_M2<6>2R*+@}=X+6+pIU zSA^V*jg6HeMR|o6aLdZBW*a;s&~F9rSsk5MH~pArN-z6*T1}#vHmHlzsI>*F$!h__ zWfLdRb^ChqO}{Mht}?wJzp)TTBcHFs?RJ#?Zf*AaG0Rk7JMr5+2_wkCRb*K0O$i|XlRIv20WDd$l@Yo@>yUfo#55)0lBHw z>ZvO@kS94L{QAwCqmIJZ+($6LS*jQMA_R@(oA)UlT#i(b=u~bYhI({Sa92u45+7nB(WGCm1N%uK$VrrN>RodQFp)b!zEjFJA8mSrS>D#27P|G7E zH+muv-;2-&P!A-PpXJF1sYAF{zL{d}c6N5RZ6}>;vpH9h=GCzL@HhZG&0f}~N35n$ zNZ-EbfC^t+uxIzIVMpk=l%04@i!NDMv_QFvi0gZ@Ze)0PLd>AlaX-%%WgVR2r!4is zf#XipJ5RtHKBcXjzt~Kh9mV`&C~)^WU~foAc1YNLytU|+h|+3!sVm=K?c?WXn<1vh zpki4DXuNL=dmW&So^$UDm}SBt0ke`i9O1t41kCPNI^c#{K-nBR(-ZdoJXho=To*`0ei-EWl`d zhv#4IqYHlMbGVRED1*^sXtWD%tO94^4|MOroSu=fUD_EJ;oev9#|Zk4)^mT z+x32Zc(Ifj1=9#4wDaA_WJke6AbV25H~T+5g#G|wgyEA@M=Lm;nq@KmXL`gS#3%SP zKr~2TMqX`t$K3@S^m&qB5jd_bsN61Lw^t{=qw3~8bl!^=w=slQ%G7=w7x#O5w9_bj zi%}<59xj|hOOlw0xQz7hDGqT?f{d1D=*B@w*rZ4|XV_NIoPx?;X*L}tUch~Xc7bjM zXDT8DtbG2TuZnkRwj&TSzJ7fn<4S#z{+$459AI*b>~X(D07#rWS=+>6O0veOvJw%# zpnJ*Ceg!WaL68EZhPe(AvTGm0hCPXwK zqrlJs^4xY;P!r_JOf8Gu7>TXIk`;%8L}H2n>&2dMN+-+uFxB}nx9MUw|Mxd})4Or! zpH;3o%j>#vA#UkUOy1%|N}CE*9j?-nn0ZAgum0@UFoXkv?>ChFz@RPAt)R<}XF6xy zITpF;{voi?S*3p5+F9p$`1ok1GI1WfxVwKbPHOhpeP+RXh$7wM9MQfwsZsjn+2$cD zEA2wY_foW>N{GR3&y9mm`qkYn&tQ9X{VCb&n&MhTZg7@~pj&Lam8MtvU8Z}|3ztU{ zum|x&y1-4mt{S^6+T^s^R!f6)BtjbRJCI9(9T5-WTEq@LA%;rnPfei!rhH94K~7$& zPgc(k^~Dv#IfSt%0{L_2jvx4=3@~bT-AIn3*ON()dBWNZHZQ=ThgKm2NH@20`|!)e zL{|ITIHN77a#-?cChlvhsQN z?!Cv+`0YVxsHpo79E^bNl8oi_korfVTLAo0%G})AY*F03^KVR0U8}6NBJMGO815|* zYn6D>srXIrFrZsSDwvJ~3+fU75|=wjd>N|8h+1fK)a(U**t=KU`sX2nVXryD)23O- zs9uYcVF#mxV~myQD6)L@@+G*C#%xEcvGH=0h$H7S+a+?Md_(^8tDat6s4{WyKi?KH zKk{f-QFhzH(8$8X52FCNAk6_ir*_X8^;A#YG%Vl8@fDU`=nN59qLq4~5K&*hh{wzQ zI#~jC@;DXnj-jsUUp|Rxq{@B$)2`uK>dnw@DMiF%QV(={xb7rZ!Y~J?=nw1=?c1fY zf^@-9g)qWu^yLpcfkpK*EnED?)q;GN!=6!eo&%Ahbl}^m^9O@s^)oKl0j>lG6kn-C z%!yUYb{M>jUhW6f%q}vRpCCX2oDX||)B$gM^;E$dprUdY2CV`vJM_XVZgQV4#z7f& z{VmD9jyZ)1?iMrTo_<_&?BL)*rZ3UwfyJbD$QtngC>{#n+y;tk0?5@MRvY@({YtT2f$_^_2;|U z?&)NG%jwr0CYb2kf_LxSaT~068@#b*2Utp*+XhB9*P9;$h_?26f6_GY-6LD2s-+b^ zmO)?s`ExUjtN(V%plx1*cy{;Td8rWM1|ZhMtQ`dD8&08eE=K8*0_RgIBuoyIAG-!Q zuLFt5VDRWG#`oV^kpmA@{(0X)0Rihyea?nIF!qjZ*BuYgD(rux18#GP_=cIoL$Rl- zqgYx-6k&4%2HZKli5e4-1%Y>SVW5u7j0F-4A9#F+5xBH=-^CaDvo9odRj62f(>U_4 z!4VOp)XSiDdB9e{Ht?q9Y6n_=d@66V;nhwj7{>CQ9M%iJPL2)IWI`^gw4Llxy@OoO zUxyp4jXmXqu#=mIr$5?dr~$`3-5~hVEYe*r!?|KaB#5l-eqv^v>u)1@hkF$v$ffs;)$Ifo zD_tq-Fx!9?ox)E=ieCRM*#?4rwzuuJiwDBm-wVZglNl*3mrHTvQ(U`v2*1d#D8|X3 zGg1_lY`9bYp(es9KnDg#M%5y~lq;7ngX`!}{>4Q+HyVW?;M@X!gu(J)P|O(SLvl(3 zEnwneXm|KZ(z^ZN8Heb}p`^{(!qC9LG^f!HB1SzRBvjlg1EA9ErDTts{n?{Oi?djC zR&Q|{EoGwP7XXMfjk*5z@#CK#0uZ$1kAf?A$%(n%Uii&Ocs>$rauZABkheIz)? z)E}f3tquawY5A52b=SINV@<#UV{!I_2_~YF{juK7&CPI%-|FfB%Sa?&N8(WYq(QA7 z?&Sv}Q8Y;~h&av7UdC+oNj*)?=t^*cCSz7Mc#D3FSwY~cSfbx?T zA8+p*jkSl=wrnUn;(eR{57dFNy=8i4&J5;8JEf%;G^{$2q*L_b`LV@(?T1#2n0O!p zF1?+0LdEBblemA}1X`;x7VX{=6X__-Xw-3oS$Fk?oOM&$%aQ*M7pn6nCf%>J-gHzN zP*YEBNE4GL1c@r`|+;6 z1YjtR(DB?|%to0}bn{JZi<86+TfH8^GDkG+{<@<@$Gc!6QFQ#iE)J|XOt02^yIzGO zxzim!>tyU{J#6;y@>b@4|G~Ox&QXkLP7$Ij9NjQ=|v^w=f6O9q0 ziXI5~<1zmc zUSydhGnHy?^S`?-c4zi>k6(450;HY4rGKNVK;%vcFj!fER&u}+s(envghVH#N^v4a zM>^N~ehJ|@hnG~>)_xDuE6JjF`2mADQZ2H`CI+qxzlVDS{B%xB>lzVV)p#SYMu!q% z#{QDJ#>V%+odoxh>_$sU_PKoas=TGtfUWFssiBncg4zhW6QQ+1ZRTuxY-~3eFEG%V zezr{zVubPeapp@hIa_eu^;B*~^oXm6xWN>>3_#AsictKkey3O*H#*9qfIGz$1oJ_} zaB!8kx51S}pAeWofq@=?7niSGL4TX0Ry^}Y#mO{rm`C9-UC%&I|2alhc3|8_l4?AZ z_k6VLSb0f>D-mWj#4I%6xVKH$AdHcjDL>7rNl0;?ybC^Qv%ynH*oLYpe`#t7)~6~) zmd$^%q~>x+7)AcVpF9sf+#t- zchFiOJIud6q;59DDh^DJ-Y=$qetg}b14ru7(U9A&pi}v_%KO%X8(Y4D!)dNL#`fga zTjVH<`vnerx?LA{E;f)I6TBl|dk%~B8P4K(+HTlD#SUCxJoZ$xZS~r7@8B6R4LC&f zv>iYXlD_AGZ^_CFFqwo}YP8kMbG2df?1PJ$0e-}D0ieLBXKMev3mmAx{bNh@jx6lF zm1`&KvvR8v& zwI2vH#P~M9%|>`XmGfJA*ttIYtYAqeHYaA!k5z@$G^}#JMyh98r}Bs=9{iEUZkKrc z>P4EU6uh<6*hhA&>;31EMiuw=i&ap#gzN0(s3y+eI@dboHrLeV*3yN{QG2D8+c?hm zmRGEd_c&_=X{)~QyN&u}&I&(jd6H!1a!T2ic5M zck;{S_CxR8Hg1ahaV-2Llirp8xY8=?Gy9Q8UQXW!5zO@$swUw7wQ~o+?n4+Lux~e= zwzx+M+a$Yd+_vxKsQ>}2KaPblI2tIX_;%t|E*r{I$Il) zS4;gCAqTP0OBMO^6(xK0#opsYI^Mbdi=FKn!Kk?8Pq{$AG`w9-A@B>&yx3BA+k9`# z;-!w##YwBB$>5mzU#2qS;W3MqIN|OyVeT_9FJ9+d+vZxC4u=};0l0H@M!NLqU794_ zY*Cy0O*AFq-X%ld5R*^+sXe_!uqx#xv^f21?s(cdAYSqy zz{hpl)l(6#_P!NlyY?$kGU3AdHP+%`#Z(7Jw`HZ!E!s=oUC3OTYy)a5&YP`lo39Ma zKN9r=M^0vGruyz3*7B|{00(zza}eCS?phmctq2rBa5=DD##M8s@j30R22`UB0B;s; z>#1`aQ=gBCaNYnDjxjP;I9(jWTiP1vzFOZwz!=|Y@bx8HTrr1U2nQ{Q80?{tum+JHv>XKv@+Bdm7HMNIrIhPEw9(ce{B6sx>L;c0EF!$e% zZl?6(`-DYAq|y9Lf4Yci@#m(+pKS}-?qTx<%mgM+S(;6$|Mtz-H3XVb_mNv{^Nsa+ zlM^ZK*Ev?Tly(sunEPC&yChml9yvbH00<4syu)Q6jVs3W078U>Kk|bxxL=s^r%QoN zN_?b8OXxt@%n?sF@|(E8!!B)exL=`8A(?p-Nkl@^*eh03d>Xl(R1Aa!DcyWI+}ept ztB^5SXy0}>6PRDNnUBXI06F-+t~i{PW~`cKJ=fU7%7+I-;i+Usy-rIJ9!I*H4iwEo z4-f{I`xqC&5w-q_726Z8o;B-v=Zd9eUM)j0!#-gR1$Ld&i^cBKn}T1L1E9l1gO?>V znBN*3ogu?)a!3odKnQ{(Mn)AE$&|soUFYQ3)-}F7^`;w7&(lwUxrT(p zD4fA)XZj_xhNf23_Z6t!cba~I#&%6K`F3!8*=GeDzrx)Sc1mXavrzeJ7~7c){kaS* z-{ckjxyH4}-{i;3&KJwhS1--TVkE7vVGF1pX{cC%m@?_aj_ohX?-6tB6k9A?nr5T@ zXTFFjFV(2bfB5>a3+NXW&+Sog`T4M^C(h)}sIpBLtbyQj8dlWvPTrtTRQn<4zWBJO zC*bXh`Qh!X7QS2U(Ug7_>GUffqSLJ0-0Od4TC{t9x)XO8Em(uyXHo&x(*NJm8yqh5Y{CG>c)DJjDMn2@{tf&V@lCRDgn5}144_2e|Ab!U^%>$r;ArD+!54yP_fNh}c3p$U;|%5Bmf~k5qtEJSOrR`d=j-Bzd*c%~WoNIn!;* z2VprKurwX8t|QKHvH+VPmealwnV7(1b5)LcZ{T{|r|-J&<>T8?+7~lj!bPA2<1J>F zE?ujQY<*xXqW23af47Bt9C#`{$ICc-?QPjWJP7SR-f9cvigwyPFxgb4`=hp&&ObAd zUIF~eLaF|IDLfzhN$UagmiHou<2w}jbD?JnyRdV-zDXO~$V4S^;D_Zr|`>jfaNJ%xGC!`M6_uI2 zqG2bYBIAF4^gO@+dmQh39IxZ}Jn5M^!3d3sMaZY|{6vs! zGYQ+MCCf+)&o{ribuO5Zk#QU&B0#ZYg*rG)17sKTktn;Q`+{C3cxCDU%NQ0Lm`Na& z@0y$4d$?Kw*$fV{#$!IpQITsU=VblCB~&4&+;(m=G@34}k6v`;8LfA(FPoJca?X8M z#hVD?x*pTq`{?h{Zi&rE2zalBnGX`Ls{cU$Xl6{ZY z$A$zeX)1SbUoSZmSzvPI5P{E6MBg--q9@1%$jy$Fn6;h8UlTn1hruuU@7S3q{zC zOn zq#Pg`w6GWfBnZt7bf1LQcewsD)lX2hz9`gD7mptxs*1k&8>oXZ_wAN{#awz}-gi3? z81}y>hH-(2N5@b}Igx|dg=v9e)ppJsPGP?=_yUsbDtA7XpP)h7_Wndh1tM5w;Nm{J z2{oXGC0hz_KPdtQ#?s@KiET_sAT*i8gZ>YiYIk; z-%N_cfr#C@=U7mpU%ceiA9AEN);#4=_fi11*F8iLZI0H?&Zywm9qBI6&TIPoh&Vi0 zPn-(FYcs>95K60*UpCqYqGO#n+X47$3TccR$}E03y>IP%09)e)UK3vtjC9h2CQfp& z+;AFDc!lmiM&pG6v|KMZ^C{~YXM~^Qka{*3dPxnrjoXN~Ha6cNfIa0l&R4I9 z_Y+X2I>9OP{RSmk60D)*Vmm9r!Z+*lt16w(tm+#QW21n0nAS6FD>vo zL97Mm#7=;=5%;k$!ve`U<_Ca?jz{m-tiMv4x;iva)^#u6zrY4(vx}$7$jr0`4AB^X z;JTe}PChv(z)Z#X1^v?QwDm8~R$}TSqB+kY%}-ui$V$FC8g!p`psVXAFr-W7=KD`I z)=$;#TXVYAlI55KXD-B`byjAPOrxiHSdm0h3ubZ^XNn@L6|UZFby9yAf$LOkPfvfP zoBimHG9x-saL?HQ2%SG$Mf~x-J^xML=Zij#)t(@y9n}E3hk<_Q=;rEFrhWj&y*fC& zI!Mhg1>7w>JRITxC!Je#0Q(ev_sjsnCqi*8Ft|HbBP~8ZpCG0Cr4ZYmBzg7wM*=W7 zzV_+3hPF4}j&P%^w%K_cD!`6+t#(1J9$46RZ?Z61)V>Rb7X|r8xltVfYUo2OKo`xAHlkxewh&7Ncq_^xBR;3xkr=4m z%)q*Dz3*%Il&0~!DuU28oWcslRz5y!N7hD!Jeh*`HljSCJ8)#$5frYe@{JIo2q}(a_hJ!_#O7mlLT?e@U{t}`Yk zt3S!zHjclJRQzY$BO0&}3-^QAa!Uk%F0+i27 zV@Fd%20J>0A%y8(v;Lj%{g<)=1>!OU7eBF`(_v&kTC~1 z{s|OVc((S*cjX?j8*qp&_B~slK7YIlj}}$Nu$q*Y2~gV)XZZ=Rd|e&&Eujn5q+&57+Eje!#eL`To?X~KRhcDg|8hzGW2~e6`ZLy= z@^`z6L$~e!iI;lSM zT$}_{s(7DzJp+j)dhn3WHMTHz4GpbT?kH25q&+!y1$y)C!M8qY06lfYX6(*K1Tj(e zpBx_#M833SSvfjt`NcltCGHLz8WAge`{fQcsiis}1R+YP@3LsR3U{v1?#ZM7Z1R<%1EVpC?2JSet z|CHy>O`9{QPtqvO)=bYneP1Kt6ZY=ix8`r`y)AzzO|5>#jV*nPJb&Ki*}PO+u3p~q zM?XrO1nE}wLT|y{5>e8XsfYqXz=O^aS?FUM^@HGO1v)31Md&SqzJemWVDk7A>NH5ypb z^jUB+EzoA9nO*x7D$ZW{kMm=~hrRvcQAtUDv)Yxr$G+JvnzY3@Lgn#-Y~Sux?CP`w zbJl_mJpvPDkQQEdS2aE#=M$5Ht(Q>{7le7f74kIQtelPyd7eaCFSqV{(8ns6}f29jajKF%E|)K(7^?y3*Wlt6Wb9`^ZZA z%``C(rlF>${MzdcKC)4J{LrI?eHz6_Pet_|U>EWKrm3l^-T5tl4=5dwfP*Fp5(n3o zyPxG7mNpd{l;SjElXmd?(QAUUj+iQ;mMAgT&VWYQdPx=mb6GH#WaG-0EPG{)sru9M z7E0-%2^fuqULj1Qgzn;fu<~$=$_18R&wSI*FDm(a-8R4>nEZlJBb*t|AA?zUC|~<*yNgqKM^pil4=rrOz2Hm=YO8Ksht>V`Z z4+@Lg*3F;-fqW3fn_#6s&=R6dK_;&!$o)Qaue2cx>%|(L{93TMN2=)flU^}1Gv|CO z;9URx`nc7l?uw^R2?aN5r{dC}RTl_;0lFiLj^PL6ZCF%})@Ej^+%7A!ykXGws6^1x97QA1xK-)$Rnj1QG4C<7t|vXUiPU8qJy>U1^78 zh$H-Y<(tqcn=pVaD#xE#VIV3L*@qwV;mbiX-DkY|C?n%D>^G|}zk5nw{M7X&@Q5t6 zxHN&i762F^S{Im8<}ST8sU9nk`lSVY4E{ysZOpLh@;$9*&!y_r!oHufKb=RBB}gx{%0aXr4Aq;%MaxrhLY2>9 zSG)h%&DtL_QqVr&=z;s2yU{;rnh|##kN^?3r znJ=QnorcLlpW+#N(o-5N6%0#O348e}bWi3^a;QmDb`}9aP|{>2M3iMhJ)i+Njn*L| zh$3UdnmG?OqsoOcjMy%>@KoSM6@S>|`GSa$T+Mv*G0o$vC5FFZ2zCXXNE*UNRpsU7 z(S^X_&p1$Q{Wg=yp?Hg6PV6ggZ$v^+gYDL&%Sodg?#}TpdfgqQYPVLBs1N z^V2`%=OF#912ABnS6EnC*$y7eNZuk6-z(fxT~lLy zNpEuwRY34~45+J8iqFT-lWy9y$xzYaRJ}VY!|1(#h;@IRcfvS=C%`Pc+5EJiOXj0T z6VRr_@Vm^Eb~B$D!x?E}Y|LJ4!T#g&-M!M>CQlO*`Y{jDK}+f-*2$2JaL=9Sq$HEG zXAhgaddcK~j^S^oHKj8xZ$ku)G@tfQ7Ua#D1yimB*I9u1KWqwj7}2f2MB}G+rI-BK z=$oi!^Qwgw=!#XcA|FXa6@EvS)fDXkJtIWjyYkL1IG_ozz1$4#)fx|^dUN%U$nkWm zn46~*6kI}MtZNaFDr-*watKc115R~r-6mY_CTx1?w~(T!G65GG(kfG%PMVNBT#9&qV2{)o~Z?ba= zkMJTLQSU*AYHg={aszZpb^U?|;pFTrc<2HDg_iQ{R7fu%qO?ZjgoG#J!5>{)2Zs{1 zGcS?JXGvXq5Au6>81|(mWf>Aw4-mZH`ujo4YFO!N_jWxgF_DyVFYnJ_bgP8;_Ak{4 z747qZc;sS@7v{b~90BmIbmj0ygzZaLq@+6+p+2|!^&sA$qx^d)+VCa6>b7#aGbEE?3+8YNPWnGYb)J37}E20B4vl_!HyC${^a)=KTo6)&!i6z#r0zi6j>9a z>kZ4jdEGzGpE>g(keY3;=lFrSf*bo@(pV{K?p}S4Jh|hCZ^*9tL%_l4ckfn;VLEy_ z1Jtkc;;>WQu3{z!G76U89m#7}#;ftMl5ROa$jelrI9d3?TWfu4xSFdN#DdRDz%dcb*yNoNh&Wd@6tA40Bw%J>b-AuU1$XbUQ+Nj zwzL$;*%S(P^7BGH)!5cnR9kD>FVHi?ch8OJ*<~DS+P;-Ts0VQcA2Jv&vLAtxiHV7t zI#n+WZLr1G06??Yl}B|(pC~aX;cyr7Q*RugdKG#M;(>1L(9>BOOhu1x;~^zMx=o}) zP~QXh0L&9wOT&6w+Y|;Z9{#y0DCYyK-gn?$#n%4hOqQ;z zex$oFSte?)s8(aF_e>M(l>us6TDD4|)7;d1JpG0c%n9HEu{M}>KR36E$1Z@A5qwXa zKPkxVQ;&Sl1+^;M#&{yVhQYxk5ze=Wq^(kZp~FoU7B+of-X*;F3K8Gv{`u>vz{Esa z%w62wyTnL%tm?N)gDjB*mwJfhI$5Dc@j1?m*isxGrzHK<2j4{{CbIMj0RgxX%vWYB zDt*$OU+TdA{m(1t)hq?GmqE`kH_w_s(=N&})>)3?co!y@WttP*6LqFd@O{$M8m6B%qEbadpS83x?YNii?efGRR~MEr5`OpsFQsMT|3kt z>UW-W-Rui0+SKCee?j;ChwGg}a1S0KsVM=!DBlPuk>1Mn+~E zBwR)|rC$rv6}Bq4qEtEafnQ}VPdN)Ag!j+h^TXcr@3Dq-3kEjp&q*d}xVtO8c>C5K z=ZF5?%3mK&Yocvn91kxl&jP^_Zt}}W&=~j(*-d`n=(Igf`OIYLdaZ;H7B{d;H0pZS43|8$=@9bwsWGf8n%j$>)ZiGlEElQC38^Pr zI&}%K4)GqRs~cx>D2Yx#NkJchPI)hbnVAEm26V!Mt>=y_oIi(|qi)+C4n^E{X4E9& zoIsL90Yoh&^2Hje%}vNHG87k{UPi3qj|77hYTC6MP0sqY+3bwzvwOXr;F!T5l z1wlg>YuSojW8>=g~b0mgc zsK?MBDS~kj#CCy!T3j;H^O>5;JbZjLKTdIIHZvw&Y0uvqM|207Tp7%?T0VZ7xFN9l z#nz4$BmPLaN*D8yI)LB+c+8zZ#U{22y$)YZgoLD|Mxuna82heMii!cZZ!5p+dkTTg zqtjU`Es;6jWbc?n&Tw;n(8snNNQ?!AE6y>ckjuLBxQ; zAuGU<`YU}0^OuRc!upjdP2ZEg@t?9TD#SgQpO$txm0O*!*P)1$(TYLDGv(p(vgarI zGlQr=9jj)<(&sfGzRIuqR=J&)lMw2Nit46i{3FzZ(V+UhLWJtk^+tAfHX+Z#$}K*s zR($j>!nb{LM}w&fOM{v3s+-X)Dt2|(&Hfbiwg)-p^W$R=b5vE}m^!?;C!QqBaTE#o zpeT$QP?$_16ZuDWYU$P``J&R#j(uewo^Jv96mx&H9r*5HZVA3^1QCD4$JPnIjvU#-cRH3@H*D< zAJ8oo=w%~pTaa6*kVc&u{}N+Xi>#V(5%E^dl`+n<`#YKL`afYr`HY`6c%j-LBi}e6 zo}*aKwAZ>uE(S-0UZK+u)wHk0Ca1~;m@cKE>X^QX1Y01#0ZM1QL+x|tKH2|#;>AS=TeWiS{S8g z^V+TYYfH|R%_os$Ixq#rX<7%Z%DXoYz(gT^iUIq17k7atsnJd}Uy?1L8v;3R6};mK zRZeQ^i~0-j1u`VPTJ?jEBdHFjSJY>+JsAi}lX`#0yS)q8NataGx~_D-P$B5w`z?tf{I^*!%O_JF^xF=-h11L zpd2lZU^IMAjJuoIj21a!0QAcn^=R(T+!=e!PhGh=49CNd9j8W67n{0u>Z0$!pOlu7 z@%J0HdyJKldPGX-&?}T4qbnZEznmfI<>fVz_y+t3PP}kyGIB<9*Hshp7IU;hi)J4E zf+}dXbt-K(5D~cy6*2%1b}p{B6c$$>L0<~M(inhPOwC?8I*zKx<8_T_k-^XN_zf6` zScl12duZrp*u9&v=+pz(KZ{dYo*nu-C@8-5mFBwU^g^wMwwnT$K&3u> zm0GacF2d*wS*mMXx2c!sI}%S2=s{^+cxegzeogz`^kaE2+kFQ7CN{P<*KOx;fujpRT5 z%3Sw}IJN+L{P)s6uH$e~R#Gx}ViQXJHvSxW8AezlkDu7SNXS{BD(p;f?7Y5di`bSyQUZ$&mgdH`Emro@XFl$; z0{gM$mphLfGW(49LpV&4UwpH}qZ zbNlxDdvzQMtbc7j+4`@&H%SuRzsvRGWx}fGpdYZ8v^-@ob!F3{Cr_%r#@i$7=L!-c zJ`hcw1y+n1^dRqc?-P)bsVz4JCINSZR7&%O|Fi%vtzX|^VoQ3_bt+lmoE9kr(GM5M zO736+^TcM$(5Dp@haU4uOV>Plq+EF?wJw%PrE%dlF}9NE@NDU{1fq{VSUsOuD{JeZ zJQgM44%i(P5N=mGx9 z(SFA&^-3$FT)_heEYN;Lvon~YHKp!51~IRUh8&Tf9c&LpRA!c(=Ga&`w)$`W-7TJ_ zQ3f`~6v0bE`i@V(&`)eFfC2?vaLGIGta<<)KJe2H@s*U61e;vOE{Eu>xI&=t7r)dE zqBH`_WR^L#j-rh4bpWh=d+r^UZc&l8g~j}RRv~pUwiz7&USWJF+!emh%~2-^!OtX3 z4V*QgseNA4f_@iJ{)=UMtEdF`>_cB=$Bl<7EXc-OyR>uPbyFJqt}cSq1|30T4Ww-E z)sLInOx{okxVJ$%+(5D4XqtfBuIevj0;$D;Mq_=K)p6klXTie_J=qM{UA^@*}4B#PGa3}__ zIx?CJkQnEB+OKb&xiRC<8+^%|RR0Fe`2P-d<9r+uD23a58TExc`%at%`1c2F1ZPr< zAed-mB3He<-gdb|qClW^%PN2qoNGb~5T9qT-t(HB36~sXC3o(S2XVSe4uW;5@?H1A z7Vf=TyYzJr+mBoCPPjAXAS3tpC*|-s0DPDL=B-15`XWisKgMn}MKwb-om{G(dj(m> zZ8uI1j=^ic1`$344iQW^%3;DM1np+S;OoTe?x|8N@En2J4Q4iC=$WX#6E#`|z$OHDX zv!gtCfru9>Hdp>ex0y}<+v5P$0T6)<5Vbu#A6kRc*0uj)xpGSn=3GHD{Q>XkgeU(~ zXnkJq^->d~Jl7O?IPYPBTU$XQ(H(@GB|85A!Z1b+q1!GgARs`#2wLBj2~FSd{3c5& zY3ao@nk)Ywj`A?gg`hezf>?=_g3nJPU2wWP! z0SN2PwuevzLmSisiwhX7cwf5~ntj5J#?DlMrHv*eJG_L8!n8=#nzos6!E0~V(S~=6 zZW@7Oeyg5ue);lbue+J|+^OE*Kmo1BR*AZbFrxhYnOz$LRnNl$10wKZZDlI5M-HU@ z&~BU>6NY8iZMQYtQgO!`O8LUh?waaq`Sogaa0OX6_){gwvG}*U1O*TM!9ezyL9%ZZ zpD5bF5#wiE_TT+alE)})bLRw;12r`@GLWw!$XbrJGda9OHqD81hd^*H`@vw1*a;Ah zs&-?<`8p^bmEBiiA%panuXj2ZulpkOjJSgaG%pr-m)F*=A>Z_v$c*6?polxEQueV! z^Eltn(CgQ)m+c6QT6rhj;tkqe#ZW|0T`>sM$FGTwvGz?r4c!3o;hZ4sYY5IWce@BS zK2q|DVF46vwH6>f@OiBp-J$8i!t*# zZ1e*s7OZPpcz|*f>hdP-Eoer0V*cVLVBs@j9JwL2!iiEI#STUAZ3*JzG5Ok>DhHu1 zRZ(e_@gmkRbiy_0Scti((TBeKg38Gpusf=e)X64~6A>tuz?4Pjp@EIC3u(88wFE$o zj;<AX8&$maOEqojNgK7|Rudmi@!K~Gr+-!&{BdIp=0u#l_E~rD~{p32%dL{eIqyaQR!s)<}Zu zU!R4Wn!J2{)GRS28M>zX%?VG>oH%jA;sCS8wAYcEg?7Bq!$!qvX_i8lX&dq9%| zB#efZ_S5Ij&`cADL1g4^jyy28)v#zQZur`g{0t6K9C92Ju9dqyRSdhk09Mw&K63c* zeSY`PZ>WpB29VEyi^JGMcV}nnDGQ(ukPae_B%I(gt#Eqr+lej#pdE4w9{0T*w*ged zOvD}IE;x3GGgO072@c1N`@ zDMdXOY@zn!c;uFL1O_YqFv>G9hz$r(#5oJ2gXxl3|4KZ60@Fdls>*;0*=y-b3>4O3 zVPX51(Lbbw6O8)K@BN7DcwfM}cwxJ8F&~kfQhFiGm8q=>`;c9xz*Vqq06F7P9G1w& zL!yp&GPVV9;iN{w@85PR+4VP;3-{r_qh*C$V& zJPCz*w%(36;9%j_f_~k8?y#sRH)u?-JaywE+;NQf;JiiDOrGq3FneUA2vuqkMFT(1 zJsu+;tQX+F)p0kqZ%d5Q(9q}=nC4{^HoP*QO50cX9k*PA{P%t2PL8{;fe5~Vem5l( zbZ4^Hx1$^#RBtD{^7?Tc*w$~eig^lr_!%_EI8?g5l^xO*LTS_w9eIZS6sXUDLgemk z#MZ5{YNYAR{hI{Q%l-%DsY(_-_FZ3-k&#j1G%d0Eit6GmymWA2Kec(!OqWZXc}P82 zSXjsnn^0Bpa_FT8*@+O%>WcfWS*h&e_QZ(|SCs{zl5qwti04Zjz zE`qZxvlWEMC-gl+Ob3d+lV=uC9jH>&9c*iaZ4O=l@X|AB1m9tBeDbcE4F&$FcK8c$ zCm&!Gx3k{mzJwtZ!;5xMDs7w13(%FgO?;v=P6% z7l3zSrVV;k=}i*DC**gzb*PI64a&K`ZDMeCb=@5jsG%7(FdV|E9?wo8i%wg*DT0Y6 zA)%N1Z*L^!<;`Skrz2G%>kThHSNP~{LxVN+5eRxiJC9Ur0U@!xi0w(F$T&&ws2UWN zmz#lw1Gokyy;c1oMYQ-KRcJ!jOrI`i2kIx@HBreR^~dels!|Y!jmoJ5@Ram}$EP*@ zTPy)hm)>W->mWg(N_wo9L2dYyV_3UGr<=$4PSL_A zhoi&b2+gq`oN=#1_xwV^G22sAx3B|3+CPY11bm{8M1%V>lAgA(9!SBcT!T`3l1(;lVT{f${+BY%4@;V2h0~dSZJ;le0m5e z04nF87gFmh^8jRsb&m;7QAc{pFAbxSFO*U6Wn|a;7tPJzkYKQi*tVhp?cBJNwfNB0 zPsmH0oTGwGlsws=p}z=%Zi5nQoqGTA!Kz^ea>Ec6?0OA$3-Y9x znlF=+%UHCbOu}EG)#T&hsaoJGs`JJ{O@JzycBO9~YG4M_U#v%o;YrV#m-;l+j>EO9 zc!9h3SmHIj(#6g_`17aYUJnHR4}UWG`S}TO06}Q}$J--ta^W!(Ku-s79FSbmN4s<} z?$$sR%3Lpm6jXN?Rdf$lBPH_y(a6U}!Mq{pS`2J znr8Io{d?WwNC^_4G{>NRMHmmdW{_u&)0tpjk$=K0MQhr;I6xB#3(@U{Y_A0sP#$AG zyO{M`E?5jak;oQz=+QDZcF@{2GBSdy69%78J~T1X(gC^eCfF{SrOy$7CIGPbFN%R8$bOFybB<=pI~Y z{WB1#(1l<@nK>oB&u;#D^AR{B|WCN^}ka-0R6Yj_k1qdKQ z*z>{6-yNf3fBk}TZ=aY$Plj@Y{JXrau;^$TOLFA1!bSe7zyrM@R)P~o55fvii+j*w zpx;9tR4nAZkQB7FwT;SQb=yEPg_V$}S8Sl!ko{qFdfGb~O&+PguVced?fHfmgDP5| zvn0smkcdbLA~BL3x05GdBGIR#h~(%R0TE819z=o*A00wbff~lqU$dh!Yfp-)M%uY_uFE`g7oaH!K{Wn)Axk{o`j+tldS^=Gomf-+1rWIsZ!)l5T)0IW7$~*S%;F=Dc*R zP?&kKQxC4z&`=uucDCj)UYeDvhXNi6Yg8AU&1da>70i+Nl81v7)lKjSZk&fH3 zzVQuA8l&_yB)fdH=n`dDhh*3~jS-)z=9KK;Zzlcko56bE6Ini8CO#C_0gD$l5;w>R z@BT{|Z2SfMQhV0FDGYImC>Q{tLB3=HU*uAXO&A&+L_8NYH?+zi4}iY zf{wIj4J?HTC^mP8B*ySbf(8ZEt9$BH13W805tdNYa|i13=~Z-T|NXm|RvLEyJ~gmg zf*{_ncK|>o@wwyK#DkFi2kQ|Mtbu<7%JChD)))SFf3D={(Sais7>W;)Va)|8Dc29n zcdXSFb)2rN1x{8s1Q$h<0qw#aLgwsUznR~!{2=jPhwbOZoGi! z8{f-{2(|d*#|}!$Zv1u3Ddzzz@PGe08x9#{b<7Z~K#SQ`u{19mkNYeLHZaz|LH^-Tz)f>)eN~F6bJspihLo=utk$H6R*V#1bFx*|-Ez z$)s;^H9{JP0of_>BGkeZ~QZryx4AZ%sLY5QabGfe+ma({_~L8z1$3 zOmw8HApLY;2!K5d^18D6;C_ zHZ@6ZxFghb-2gMpw6WHgp`rr8!9+vTUgLEIoMv9#L|DBfx-8zke{Vf5`tJv7-PXv0 z!srb=Vqq}7b0H+ML@q3vBqC-hOF!akxJU6c1&DefQV#ebrp~r0C6PM z2xO%cc}W-GNb}d29WR2HmzZNNdGOz_8NUTC3=TU0=($UV8CwG0(@>j=3yusH$*ZLcL3@wH?eou|4Q?t{{%JinF9&3Xf z={oS-v*?fA%}zqZL_%VI$kEImzsSSr6fsdz1WP;CK(~=FG7?&XwwuI+mI9o^#QUL| z(m8wfk=wRH)4vhOZF2FiVibA@zY&FK&WdZh^2S{yoj-s_#AbI(&HCr>r{usIYRC5N zZIU~t4t72Ldj)6rPN8KQKhL)zvPdR1W5@~um6Dy^;nO=#${{{k6`o}*FTnf~gqZ6W z5OHKl6F9J_=j3;aoPk8r{Uq?Sye&ls(-Jx*|5hH?@4`>HsIU<2sb=`FZQ{i#d_`mm zMC`duM?J`kcVK=H?^jk7(8K?t86N<*503x&+a-6{x3#uD55*t^-dU8vj%fYh zpNDF@3Ok2$FD{vpi-#wKTr31T9S;mD##}wj!qC=6nw09czw0E+kK*oT5)!+O3$K4_ zhgJuqS*3_?XoO0X_R?$E!E|z1CA%uML8Au>LgX`aQ}RagWN-QK>AbU`F`+Vv;h(Rk z)!bM}t<5m3xUsaA_bbX1Fb&*#Z)WTn5f3jy(2XEYhqbAo;E%v58$d`+vL}$4;A%kR zAiOML2jqYOYS;nc{h7zRW}<6q;<=7na_z3NMB=3Tm^KgdF-HD^pCs4YKzBet1ZMF< z-j<0KY!M{Kd5%c~wPmD}Lsj%}1OmGG?bD}p$I=QN+#BpX|L-?rmhfRgL1&=PQqe(U#6x6Np_=4&7xI4JKE5k^`@HWo0ZRl5ui`uU6$iTIW2u-vy(iqmX?5{(Ti! zT!Mp-0=3^V{S_xCD1miWn>Y8-DN4Id?XDVyNv*Z$ReSJN^uv}ANL-cs>le!v~Rj^5xj(E$<^`bfG zrAPUVTR4fhjIxn7X6x7NftHpd;^N&bqUlLg2|X;G!K^yd(Wo5Gky^OmPAt~6h&=$w z7t9$55E%u=&mTY9C8IUQ@v3pcea-HLL)WWU4_BocDP06QW~KnL?gJeM=m8(!RJtOf zg;^Jf`>o2vTCuqg_b15cF?qFv~@E0pj(%s1=9&dR$~A^ugF; ze=jge9r_f!5oC;Bi<74mLMGt67ZDx~B<6jeih%)++9U%salDh<525f7Dhwbd&_CGL z>OH=-aRL#q;D;8876TC(6cE?2vgy0GApied#FT}jA771Y^p-0yVb7<;JU627{N|ss zy~z2!G-q0cle(%Zt=D6T&#()6x_Uk_Jeq{t(l8*bzKq+(Z;LFBF z@FNJWJ*1sxMGeR%{A4&8P=t~1xZmWcMzsrtt71!`lMl1`=;NU%c z7+Tn|(R~}w{J9YNN({f&VzL8lvoPWq<8|DeoIWb(8R5jlaSQniTnjP5h)?QLCWG8ZI`Rm0(YnV`(;^vqp1SfB;chL%TDejjqV>IQ4&23o|x`I<$Hnk zn9ZO5|Fi(RNn8zyU3MGY_va_=ShrD1MqfvCN@+IY&qoEzQ%MWQeh z!RMj>>;{pA8&WecjD7wbnV5)N=dl~FKsbgS{(p;~B!vQYZ@`p*+(;ZhZibJN z!hJzb9)^o~j^lF^Noyst$Un==V4elpy%axx`O=BbWxVISE&tXcB%;0j{bm5SV2+1o zWTaB9k}QnS7NBt_4Snirdv}mL&m=O%6m?{W-Nr8JSca%EVei>BB1?VbNCEaJ^i}x8 z)<-z~|1D$`>}_o&;LQxnK&)eIdo))fX{o8HfzAT}mc%)@Vv!>q+qDZzuv5|?gvOo| z^*0~i49ZbJWQY$qy)17NGZ$aIB23HbdT_|XljV@u+0&1EXhQYmzD0dd2~XO(9C z5!xV#M38@lkcLB3hfBq8$;y&^%C8$R^jYuvFNbkW?eCWN>RBL>q)O5tLKV>BOYi_W zeE1QPEq7{QcM#2Uva_R*9m&bfF9yG8!j9P|z$x3Uq2`9YO`ga%9=L(Zd!9T*Miu}g zi<8PF43M$s8x&bWX+r=(6=`<42EZrk`(i;O!H!1l=m-e7SrFCiJ66DAJzc2220VqJ zd_dbC;ejHGXdEP(?W$+W`WaI;YcX&c#@kZH&^dTQlB#~MStXGP%!V*Of4){hb#*m1 zEXxEQw_$+)Iu+N5dNg=8eq!%qMQt*b5 z;*%PEbyK9K%#wT>0$Vw{ zk@0R{1`0s?$8}7y8M#^1na+U$UYTa#Pj|*O=70RCzq#H@P_Da7j1SB$dP3y04ivPQ z1Lw{AdV}kg@|qlyWE&f|h=1ea>&9O7glD;Qky9dE=s3{W%5@y|<%Z@+Em7CQd^}Q~13qbxDZ{zHDpegGTBj=C zLD+{-llc~ew<$2oc53c&2xj4m3wg=!rKLwY79k*ienUvBWpEX`&UbFxvNaNik;Yyi zY6LR_qE%6GZl7gG#0wi`lqPrBiP-Ud;-Z`kW|5(Mp|&@g zqFO_Dt)Q^*6GTM-J9Ie2>-!MoNM`h5oQt=ACQ)iZ1yPic$iZjF@Y)q*$KdmCx~>ht za{&tFh@_JuQc}j2o~Kju^S`0RT1)&|UIRoUgpvl@r9N2soAyJBn=K_*gCk`NDY-z6 zHc1Ssr?i48G&*(NFbILpipb+3-NA{sahw$Gz`+2T8nupzI?oG#D7^HD;t-G&akM*uW{e!%;twsuI(Px|>bOMA%UJg;5_kN+E;5tYtN8jZ}^KaNdh!a)Es z?=71*f5@ZP=Wgwg3|`036Uu)9h_L1(qM}hA?j%YECAMvFF?l!G1SG##kJLy>=?!8p z@Z|kPzp)A-SxNWyuSMMmDU5FAJE-t7xjMWdA%y!wZs938VrVC%T?9=zq07O=#dAdJ zVxLHd(biT#Wsh+vhwR)au9_c68xaZZ?sXTe#gvr&oVH~ob5Y$m^(}Ab43EnGv8wma zM@hxaO_LRggEcpQ+U{aqLW8K|82^xDN;JxwI7H;1T5_>nuH(KBmo zdirs-6G~m2p=kbYG_-H2C!I`t_LLU*2}VY)n3BXD>Uy3cXPOH3h=ZLS^0RDHVSXC3 z*Eq4Uve!#)iMWnyp{V+dgr~oSgpQ;y6*em1-VPlmXf`|~oX)`!az!w$gX3uzm`LD1 zIC2kH{YFSYCJwg{qia{7BZP`cGRYBV7159ru5}wyNbRkMO>8jjfo7KAhKASI%EQa* zcf<);yaZDKyFRFZ(NqQpiWu-OZ~1={^b0x?qgn2Mc=gJkT|G@$j=x?4Fm45@7fk9T^!b%ANhP zvr|+`sv3}ZlW=qe9_4udrj&nh7C0S6PdUeNn-n=(qqE9IxOdc<0|UlM8t1=-r353( z1006V2k0vxZsvJfJ$BZ`KIMCuI6A(Fi75UQtW6~pHU}k5i~Qe9N+&vlpU2iF_9#V0 z2aQ=Rpu$lLXA;8dn&ZzoClH_DjM3HEHd%#o1P)@}pu;m-=1-YL#>QSnA8Fb0H%Mu| zPE8pZ8}n+{VGl-~FT|iJh05o6Xbp!Qjb?*w2_0uI4+F9aLTdxkF(zq0!QLV46Qpwn zSvijIYv^04UHxe^p?Bxgr%$w0R2bu-v^3dhiDu$ z-|zmrVj6-5Xu+%8rXJ$)>S6W{G7sGXJ#WAMo*t)yVwclCY`Fj|7e-bR+isM67Quu~ zs4|2P9z5B25UJP9g`1mW{f;`CZIM+Z;3?zgmX=v$eE?E~FFQGD3CYG(tR27nIdJ;W zHroI|8|Yo`xe1OE`IorM;IZ7%68iNp1O0{xoN zWr$3YK!owI0S90TgW8m=;gyAP?Y8Y?q@)*EmAJ6cIQTEVbFNZ$5OU^(1~T9Cz3uVH zfj8|FuHe9E&Rb^)yUVA!NPttr$_IUUsP<;&&XCm`HztpX16mXw#K2k#qHUtW*xcM4 z5)1~PBm)$Y4slq^z*>s;xZ2{F1B5XJ%K?C^uFB3ILiilxvdukEqkgSoO^%4@Xl)h1 zw1%S-0 zv6rp(oueX*k&#Rlq@|rqyR%?^3EoHODuR+jkg)!Z*!2|-{^8BTupLbXiY32k?rcT^ zVZ!mEB&xOx+jbFp4|KCm1D@{V?)dOw0mHP3^r8LzVWa?MKC7N>qnSti0|Id9eangVBjX7+M$_=D6*@2vnJ#`X{v2BNDP&+34268u;qP zD~3UN1stJ|MT4nPM1ZM+>qp4-BKIz-88a(YAG3NB28{|bSmU&JL>#dyY}7a)30r}n zVIjcgr9=w?Gx|^05*#a)#b~f8aG)6{_A8O^d4i-0s$!!kkr+bIQoK+aV))8NxMn-a z4iwphlX&7V9Fgr=RnLdPk_uu4bcN+@xep}2{@0`5j&#Ge(0veO1Guvg)dtw~JQ>m_ z-?>xx3TE*TpAbQ`v(w3JjIH=FzRqH`r@CPSd zvH9DHF4R>tk4EvkXd~jId2JDxZ;7s~>mZa;M6dJ99sTV%UkO^iUWFtZlPA1^xIq^< zx}xV=hUcao6v8~$z|QXk+KdDujYGV=NQ1qstTKQCb&a?xjoxBEcFf3o!sufVuk#WU z3k$Eb4zDDC@6$eXEz}Fz$C;aN!kJA_RUn1rndWK|BO>Z9(I$(Uv`X5(j{b9 zXmr8Y*RS+&mmC`#!-}7tez#kS24n|VZOnTE4u<1Ua(v+a=xM;>Vwf7(-)}VS07(_V zAyDx&tQ3HsLCwJO5>s><9$s4iq(fqhyk^>SQdzUOmm6}%iOr+ADwWTXgAod^ppmA^ z@c;`iJaCR34g(e1%U+l}Hec577;&i3u7h(z0sympYs4x<#bIyE?d{qY$jhKj`yRR- zKyRf49FwF*+h1X$ep!iD-LoB4$>^VxiNnFF2{?@3_*^N`9Oab;jfsN-s>xBEN^1!h ztVziW+efz&%;IQfs6ha|ySers+e-=n?Sw#q#TS z?FXS%7_NObeRiukQkYvtHE5_ozh{9)vg09HYpSlk z{@b-}K+(8N_QOpCDs~hee)3G{dF`eC0RP3~2q`6tj-dMx6*KHBe)idC?lk5+aNxzz zkm+d5)m~*)Ye2Oc@gj{_ma&>ohZ>F_eHPUk*LkcZ-yS&SnAlQJ`N3&z-@^-_M!;fD5J3uQz$^5>)^F+`DQIEE4$ zQZ@7wUOv%dhb%t$tyIuvOQVE|?P7qnfpbMG>VwUA*Cx-^`r*TeALAFm7`eDSnOw}u z%!C$Gbzlokl_K&`m|9G#%h6gIg*Y0|2eB^E6d5{rlGv7`6cC$Oh0H64^L&X)qdE8A zgNGPK2+tePoQBuRp;v`oDbn$z=Z-dreBa1;a~z{zw60e^11-|Fs=Uo8KN+}Y9^RoR zjzYMnrZbS4TOtbfMWzp=SF{|gf{k|LV!NO&Lfb8|N}HXcRKQ!vA4%TK}Tyn?A2 zJ<|0W#aCucUyV#{#Ry$_GX6^E4g90e-b2S4XHC^2-c|mJ$99gax$=R_A#jS!tm`zk zL-tMxPK>Tip)h)sogHQ%CM6|x;J^tS>GH)Vn4L`_Kyg42@z{50u%HP1MZ2aGkm zV6M~Fg)lShT}w;1Bvtl)fKN!a+pSRmuY7G79WJbO>iR6eBihjK{|GLTZC03R1mid^kGNsxZj@ z6&BAkn_i$pk!s@_%L6EqR7evRw)LV!*L&L$ zi;4@_Oot>rqo%`aRIY)6+a@dl%W>QANFF=(x}gDrFrm?S>iWKrR>V$XD7m4B1M)Or z6o6Q1tU-DZE26UtE}@X3bGvb~sCfLX`VeqwvtoeRR8KF$ssKQ#sy@H; z?QA3lY?pS9c+;1R8L<_vq%3r;-4JA0*RuBhEI(@ueab3KKyC|r^U$58=9w>WRSP}t@WB$rsBgK)K8CF`_x_7B)+f9JS zBKmF#B{Ohn-PL#M7NkahT|S8Q86<@E$He2lYt~250CIMj+2u{xf#P#f0F4f9*Ky;N z+05Qt-Wd#Dn}-2PNh&HxVeZFaFs@mFn}k;V;9w098^}j?yj5*ERuBf66#(z`do{=I z-JN<&SuxvNI{T+qwanpYcy&F9Z5`$v%01y>4G%5sl(%HwI%%4c89?iKh$>u%;-XSY zCfOkoM$>Jrq!eFd9bO0V8JV)5?W&#q!~b3>{?}{r0(%D!k$A7!fwQ$36_U}GG`8lQ zTqV^~^X!k5Y3=N;BZzfC4-m$bU&~u)V_z?emYrGJ1DEM+@ z-G;>F$o5R%pxTm>Sk}@V7qDlIVVei3=|e@?Q)@^2GpdxZXRPEs{{fYRK^h|4 zHV3nKf*wPL0b!5MSyP#dmrrwCQ}3#}G%V9{dgVEp&J$v40w(0`*>l?91Kb-RWQ&GEQ3)YgN%qR#QmIgcB$*+R>}0Qo znVr3gL{>%_#dF>2oZor9p4aowbN_M9sl)es-=F*Qd5`OTy{|X_w@56Yh6eSG6xx@9 zOtc``g9C*ct8FDvj8WE2Xd*u_a*vp0wScjX<8|zY#ovq1d`EYc%LhGp*2#S28{pGw3Iw()g6pL$_wL_6f_fj4Hx;L!PN(Sh8z!KUEoF=eb5K)=H9k;A|C z(^FMHWUADg5%TO!yHBv8Y*x6his!E(JIW`jNTs9h5gTyl4vZe%1?hmwTcLHX2+|i8 zoc9cw=WOEtR%eGFe_y~&QGQHZyjQ%NM54Y5lmH5O3rJ(1k7yOv>$!qODFYRLC#Jdh zjEwK-g2N)cUc6H=;Dk;ysSp#92sXeCN*7WuP<7ST`aeiJwN^1z9tJd`Oi%t=-r~CY zEQ%Y`ESl9;x}fC*7biv{{(z1y5PmLay}@I=XsOti_u6ylj#~fO`8U;9y{BTNXes}B z;?ALLrOY6+!SZtQ&-$fS@fM8KSBEj12)TOEQ)+%1A*~R0PYy$_v9_uxaLteXNKQPx zH`sg-TruvdUFRQp?sfmb8!%1?lklP-+imln6@gu`yEHfVD7dU8-(D6VM_2|h)l>1H zH+KqwGcom`{&MnfjFgy%M62suTi>rQqIgR?ABItUv=fz1}^h&?=eJM7ec#iBB*;z2N?QGR0JP2uxWI>My zdMB(7xhpM>tkt$e9}8@+MymS4)H@UDw5$Z*VnQfon3m|_zZ6mSYGi91Y{{Ha5e`Hz zPol)l%lWIUlYTZTAAMvUE+;oJfc*f?mt0|Ht{A=%ek7$rpK_uxD{_?esO%fB^teX8 zXUo)Xkmb}pyBmjZ!myTNp_Q)ph)UPoY!T7dO*0&F(!Bf zSGQL{4-)v@6+8%;`s-#)A{{M2wULy%tR*-Ctn%+yK&9`o%fP-T!-NYL7*sUjP9sB9w zqK?nyQq|B%a-`OWLc=q3^$%EoWu-2^;OXg!fVlVEjZGc>F1}N)0A~mHmC6|Awi%lq zubX60=tkKShq%E-4)JVSk7XO4%*@KFFYD@k{MPy}TW(As_LAk7j1WZ$Fwrfq4?4b)ZKfk*Rlxs}nnVLj>fMqV9~&fRDZt+!2JsuKyheK0IG)JmH(cLn+R!ra|#lafDX zXVI;^ro}IcT6&}J)6`U@Nv`Gl*|b1%!NZ>0$T?f(@Iye(?*xW-q1i2A9hc0D)KrrY z1OL~lI>|5OZP^hN*2R%ix;7=NI~D;&7p~po|s}2 zF)}a=+U_n{yjnC>t0(a2bmHyXw;w%v1Q`RiANo-dw|q93X&yG*`zi1}*~S~hWDjSZ zewdyW47p+CFQACHH(b;@Qw8P7?&@femofHuHO2?lR z9WCD1o`=eFMgiQz!MXiyY)o56=VOw!=aU0NXNjRxs9pU^=ev=LrImf8zsPOEUTx|5 zwPBa#9%EDV+oN3SVRo;kh)Op%i{R*vzbX9umoptZ;x4iEId%Mj*a@YCM!RKquDF+$SS(D*twhV zik&^n{yy{LHv^K$%1ph8qeLV&BWhL%2Rt-bLjq4ZKzn@0G#v7>=4X@=kk4YpJ=Gas zp=E~RDoI524)}#NR<7I28-D#NOr$uqu)oU@cpe}+1X|0QtmOgO_2gG?jid~IEkbiS z_;vsAVV`JfqQHtGd1(oo|bmnwp!zj6KAv$0H%3RZyN|Jx(&WEEA(8 zbU+iKwHXQ*C*mG=rxda$2h{eC8<|+6b=!Gnn`iMjO_8}q&GbNd`SleaZy6geirD15 zJm=;Mk5Kph?CuS+Q556UK)`eK5={}t+}AA=TiBvASQ_a4PqXX}bA)7`L!lR>cxIlm z{r(E^_v=43ZHU=6kY^ks6sL%Ot9z`#-bU{+_vaqW^0sE@jYdhb=&9E$5%WI8>`UVx zxn@5N1)MDC;j4>ZUiNsWL&Jao3a%QR5lz+HD0k0Nj>HtWvy#Ic<|qpy!3JqlOG~TC za@*OUG1>|~c$lUN6r*M;6uUY*5l;h``<4E3igPV7(}rTa`oMR2Rp6NgPj1iNqud4f zdk(#ykMAuGlzis~s+g*7hN^Gh$J+u2g@vKO9^<%`g@uVJum?3jl}Xv7&1h7(vVKWl zu4yIAPdb;}rv>b0q?u@PfVn)RCD%~L<@tBvBNEg0Rp-gQObi34##7{0!+rr z#T-1Hg?-##jVm;x5=N`eY_KrO>X6ALC!6nsD@&|#@?=W|->Z33kDKw9>ek`E12~+r zC=p~M50(xg)cCQgRwfDPtjUFo2gnM6vJuuvC*Lqik8v|yK&u6dDRo8%`1$+tu030W zAYkJ{ESRlTVx~t#?;WDA9L(OmPZ-O8Yw$^){#y0JoIbqS5V>-?_Spt}F7UI-4xQXk z$f=}cau35hF@MnXr$YwYE$4~=!z?p9RYlKXoa|+13943wFk+G<_N<3|xV1ziymSG& zlSK=U(A*p($+$1t>FK!jWT4LB75g}rFOL){ehq9Po#vc*`*&DS{;qL{69zta^9u?h z9zQ1MEm+V(X&**AIr(mzpISERy$uch(Kech9ft(#<#~@-;Jx7nRqkxx@Mwqj$)9-3 zXnb@3JbXlyHo_rmV@|%Ys@Si~m~eyp!q)ux>z)ai2zCSHS;6bn>~8 z8oQ-e9Es^vg(FH<(?%iHz>c&dieJ^)ul@C)rWJi;it!z_3k=k2n&$OIsv0oaA$NcR zs>icYQ9D=OQ2v6^fMpfEc;dr4#6UQ`%e1u1oO1;O7BP@7Mk|};kDKW*iABdq<;qvDK4W0j zdD`gI<2TalpFU3vbs@UY68(Nphn0j-O(ps*{Ez_L{++GnN>WKlpYNm=&qJcEF{O{2 zi)%huW?{?18E1_Xj|m|_X~;(nFUXENED>`>l-lMSj?qEKeGRp^6@rJgZ!J{jzZi{o z0Sg$Jae0)x{YagATltJ&Q#-pmudqDD7~o|fJrI6tm1J1+5`bODnO}j@B$=<@z6H;? zsi}p2Jb*)p{wQt05pr@jhojgFTM*@;l0U+8H(5hlTM7aY@Zw<2!o(c0LT?sy%_G_r zLz@Sr4jnxB9j)D!u_~&ng9G6l)fRANqPr|9sEXl)#8t>~RMt@c?j^ z8!BY)fZ~FKAlUU0pm@qH2O{wCHmsX_fbxt)*;aQ zv=3o9GU^Y+bOfxSeeUm#wCrGH1kWPUUmNMcQA0 zH5sLH>3u>up z!rs63KgVdu-VGzd65*xN(y z8(U%Do;|R3Yub3sr-bre^YQSUM%M(0s{a0KJ_j2u@c&`H0@A3qjDGTjXMD5Px`+pU z-@3b>JYh)ay|Q-ds;{>4d;brc4GdQh1;uIGy--i-&G`D+h$21j=7NB^LqTMLN9;-E z&rJzD{QM;ykBdzF1=aw^4HXwN^wav9(zHhU{Ld^x4AE4+U zZ6aNnQwaN5A#FG^4^y>fnp1r$piFP7J16L2Eu5&&_ap110xu&S14}{+VfSrdeW<(6 z-6Q7)4y~-DG*>TmAE5{;DsbIRp~0b$lK}5Z@a2z06fMy}{{H=YOqRcH*RbWz3f!+s z4@jv5Zee3XD@a*C=1}088}{v<6~6;_?65|V^0RBTS0Ylx`FaGhI%@B1ZVUQ-JYRpK z?{48tnnBNlBbfm`9zvO^>L9~^{Al;wW#oWhnzsCd;3{aI{1OnnMw*r)MO+l4tJo`f z%ky2y&FHEsn9#NgolB?zpE|JP@!dOj_8&MfQ|Pa~o?w&Ae=fRw3f`RAYXh~#iKpLr zF+d8l?k?5)AqVM!Ud5!-dr2r6$AZKJ>=E~lh-{ev3D91jYuDT{{Oq{x9%8Z)G;s10 ztQ3-ny0?|tR^5f_3*ZeEjNG21pr9aTV-X-zbvc3}^%Q$BzOWWLiE}mKKZK$e{OfU8 z=M2dl)}y%2{vJsbb>*{X10Ov~ za%89GK>*y$X~oZ+`{sp(?;gmM@f2n9$sGi zeDiA?Sgb@Mn007GX>Rl!K5HcD@GP0Sh=S~wZ_nXCdpkShS*nQab;u@Os2|up)#Ja^ z0CN}eC4|ATFWy84oONdA=Pp%bA8=2W`jWH}W9AcwBSzyV_eow)ekYs6e-yi+~A$LtuHxXB>|Ce3M!SBvpwyWSBG+J!hnE zLc!+PF{%|`6BrVbJ=9M!KK(%zX%ZZ({^`U(9Ls^av!}5E0q9}JdQh)hMsvlezSx4r zOP2i;`x=skm}oOUOa{hJ2^8zr;CiEq(WTJ6Y-6U}mZd z-znI1R6-$^1~@Z+kFNl}0={!F&fp@FsG{85wi%0YNbjqY$ymSfG9Aw6G0|gLHY8b-Xkcf%ZEJYJnjGE}K(Cjh z1?`E+p&e&{jyB~Wv->Ej2YFaiMzRWpfC>SP%q*Zmly7GvM9typ_gsLUo4zaUnV#&;mt5%F%A5n+7 z%~8BP--CWD@rlA4`KxYfK^}sD;Qbv&YBoZo79-8M_fIxa1#YQ?cOBCY$MD{_xwIlC z?S(Uule0!|#B!k;hl0ccRyh20B2ulQg*vO=(J8Cm*DK3QL?e8wA7u>3$b6-9KjL6o zLDm+WO4t?_R@U*~7r@NhKR)p4mB=)sj}~fepr|EUeMxfKU85&3_~py3;Tzkkzqw|wf$#75(gC|RIR+zB^@Qd+f;MGsDs{ zZjmO}>Rnr(tKV*THSp5W&^S!7K>6U6ogXuc;od21!rL@(+R>?I|?!X{7GbFD~Euw;^T`ro=u-ViLlYDgTh#Xg(Sv# z(XcVeUmYKoS;^C0l)jq&8*u;J0_A-I6Ih~s1xU$qb^V00n>PKYtVxvr?| zbgB_Dyd_Zn7V6wXKab=Z*b5=t3b$Nzx$I$H^Bqvf-NpJaffuW$kmhiz!jnVxQJv99 z+g41P%8zdzQT_H6@dU`5%JTAO6SA!_BFPErKtIswBO;Rgpi%JPL9kk0KKOkk)OK+5 z=i-}jiqCdGsbao(?`)pVscVSxPCI+s_CAV=GGY?>XQ4yaw!>MVaRsSvwcquNkhK6! z&;iM%+83u#t&P#NBL6ILOSLAd#2|}^{`TCqjghfNGaL7^(88qiF>|R!`taf2&d%zJ zDE0@B9%*1bA3XSUZ5_%kV2X?)NcsA;U;j+H023|30vN`@4HN?-L?Vje-9^N7Zxm~a zLovXXj=&>r*9GqN)mD_M{cZQ@&APl3=s;OWe@KjG1)D@i`5Pgk#ipJS3rLJeQ)i-A zei7qvxvUiN+T5Xhx{R68r_>B6`q$dF@04;vLti=|yU#Oy8gQIZ zzeJD#`P!MuHSAd(I~W=F9SRK(e_l=5hQnAOpK#ybAG4KEFBi%&CIPfYAf_^hH9t(7 zx0XGG&>h1PBC)YBG3jVxL`DEHnGTF!AD__WWvIb$b9K7i2~|V=5hzfAWIl8(u<53A zy=(91I!BbQ3*46+*wk%=nyeOUG4KtqOA2BhGD{uxZV{@=FYlv((1)p=a#pu)kkK1w zY6HVVESKPZzo=tXS`NqCbV?{@tx4d- ztp{N;HbTG+jItK+9%yRL*~Dp(s7+Um_EsZq`Fh>OmH0H1t3c|S9<#Bss;S7&4?Z=w zCyC^yZ@;Cq@Bw-sCl((&4BBz;Yi-l@yi~Qpk6V*+?-9u8tVRIXdqyT?l8eE@*V z+tb&#*^%by($$~5my-|6G6kG??l{p;@%kf92)|At7jG{y3VmX1tlQ4nM3tDjgd$kp zgv2z|wp^mV&48x3G`LS@}#7y9p7S4+!==txh ze;D=Ti5p~3+`k@Ud$1hF;7v9aah&mIeYO?F-E6BmKCP{MzZ31kEM6+?>nYOWRbRs< z|LnwLj>Gpqr4@3c0*5qDLAO~REC%$vop~Y_o1QrMZPs%j@mEsG(8G)Jy3NYyn1G!w z*Jm75OjVa6(YK&~%j?^Iw*wi4g-@!E<)~v8BeKnTDg6eKw>dj_+*rKol!}@5R;2GQ zbY#POlZ@9Y(>rFX0E`vPb~ zZh)qVS)uT8m?Dgd2!c}4?E%OI(1zG_QW8Nga*sVS<{Fj6&K#c>2iT62HoO){oD(!- z4$;U$g3kk!=6_dTD7M9jb`me?r<-zq~iHh&lQ+}Mjq<|X=qq1~?{|ERn8 zmgv?A;(+2jnNs>}Q1FGbQLJ)HE7T*c#s*%G;WvR7&fVjf)#Q1I3NlyWdisqz$gbF^ z^sb>uv@Tk|Jp}5al6guV?9V=ekb_akh>1xg?@D9g-qAQmc9wa_ndXly%>uOm!6f-( zP^EgZL!*lvY8iTH^FrkCjaBX|gcLwfM%B6*WhO}k3OJf5U%EH7f*;%l>3;d+6r`I( z3*I60ate_OJke7MKI{SK=X(Ybm%4xV(^XYDI!{~iB?}=j+Dh@;>upU#w;*r0I)|=8 zlAc*H0tL%_{}bnLqv)hvW0Zx{HNqF9*+bArKesAbWnqh zD$T#;PbqG3AG+r0KcG+%F4JNa9}xEBiPXV^vB*Yrjj}ZFx!`_x!+H>3cNG69sff`$ zOL^?zf+nIWbfI*1KJN8i!!ZQYdXP3^?cQKyWv7U8=o2G=xxgww7&(A)A|bqImjPP0 z3|ejJzN5q^5EdN#)RB5XPDG5^yx|Fhs5(_hL$ON$U2U@>xoJeF(q5^Jx|OrX$)yN+Bs(P*}(#Qxg@l$lXsNKBU-+ zuFrj(oPdbGvTh`q6I^Fk;N&8g#vqI5K}{tq7F=9AJDZ(t)pLoZGncHqCnxAf>Z}=% znrw}m6$6h}^FCco%~-Q7V)15|bF>mhQH4&h`j$Iaz1>-%wcbgGFn@)8d*~AxdC=H^s0UY%{K`pkne!PBH&9{P z%5|-TvQwFLReD_wa2fYmCBNu!ZR>D=Vw>zGy&@K$IEZN4^~Nb)5iwC@n1w z-U6~rt+e%ukLtc4HiN!+&b{{-xeFnZ@84~9j<0!*G8i`MbC;c^Bx;QkY))eCxmCUf z%q4hNzv=0`rl3f%_fiCu({w7=S*xcULX#32WJE;NolR7FP*Q2i0sIMH(+_Pw2vo$I zefIU;)LrmHW+Y#beT&^2?B`&Mmj+Z3jmGio7^f{ypKBK|A*0?C)m7AMl&&D;;^w9u z;N&IC={g_4CYXIp>}vo5m7`jz82Z=6}e-xRLt4zfgFm*51P#} zvItRyL&_u2SWQjidRTY>F)UpIvkH-4sMHuLOnGh#nTf89s@V`L0cQmbP!SP?$Mt&~ z=Xjh{-bf%L?xhGt04INex*S|m1j97=>1GF`xJZb;4~d9;sI7$=D>TUMaz&`_>MA5C z2nI^5q4rCx;=_jwCITr;JF|C3o_(GMDi@^7!Ie|;y)v5> z1Z1>@?%5+ZX-&EjNlXM^nUPrmbK(I2kta{g1(;A(1+$%Kq|fat+7EG^5%)>g=#Mt! z)S^u%9(V-IS~9sE_$nWYmP_PGpqU+zlypte4NIv9$`t;Bok<}#yQt`rX$jO%puzt% z$9nfEMstU+H^sT^V<&b+KYAojbEriPblQwOm*MQ#=am%RE z6M&Pjxk;@L!qsdS8T)Hv;ku7RI|vn3HW#zU$G*NvI|&@pBF**z>q2OF0vOObNtvpU zASx_eNynK%HuVffa*r;)-4%UpEi_c5S9v<4VleG*-rVT*mZii%xu)vWq@*dM0oWO$ z2oQekn3v=_dl1n?UE@>NYzd=~wFa}}YJ6yeLskLJwD`h0YPE>o(_Q7%ajW)z7bnt> zzOgfzT~HDbSk#k$u+tUv#9jzM%>w;7v8crr)aefxj+eK`t_mFlO>GH>xL5w+0vuI9 zPot_kP=Q`=5;Y@@P&NTFX)~p0R20;8#l7{5<0VV&u_4F?B%7i7X-v&vuszJqF??&vR zK=u0|IVl{G+fYwQir!zPC;2JPK!7A5Ec{05d@P|g0a!;+u&F{Yj9>Rl-4psO^pWf8 z5(V=UN)%oK!#hooZplr`#t7!UaouTpVcBK0Wj|HNk=sG6uFXHjKTeFHm^uTxBVH>_ z969;z9fSl_)cq~ufrvD~y!pkj?H4<~q2|au87Ve3HrCri@2gGyerE_DNARX+W*+@w zAg`sP^YC#GbgYRbU5~AN;;9YF^C`N&p2{pfwQ~E+qIF{pyLnaKSJ1s&PLj=G_2A&f zF)Yq#eeH)2(?9IxZQC&Q&l?{=nl%)O0FT!hGcSrLysHrbz)4B-uzQAHd30)PEGL`= zTH>4EzIs^3ux%R}PA2e@qh@vqoA(v>%nTjT-~ns?G0~vqThK&(`oz<7qpGIrld^

+o2a|a^hHmr0uHpVuZiL3Oe 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.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md new file mode 100644 index 00000000000..8f6dba45e9a --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -0,0 +1,10 @@ +# ErgoDox EZ Default Configuration + +## Changelog + +* Feb 2, 2016 (V1.1): + * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). + +This is what we ship with out of the factory. :) The image says it all: + +![Default](default_highres.png) From f5e486b50dba14dcd33f82f0159e917bb5c61b03 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:22:20 -0500 Subject: [PATCH 098/551] Change r2c1 from Del to Tab --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1c3bb517134..1b66b278b31 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [BASE] = KEYMAP( // layer 0 : default // left hand KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, From 3b0fd160df04f4d93f8d8442c8c61d21f0ce3740 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:38:25 -0500 Subject: [PATCH 099/551] Change r3c1 from backspace to esc/control --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1b66b278b31..97256c7b35a 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -32,10 +32,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, From 0b68db4e4347e041bea8e32b7eedd1827288fb0a Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:42:58 -0500 Subject: [PATCH 100/551] Change rr3c1 from quotes/gui to quotes/ctl --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 97256c7b35a..f9f38de8b00 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -36,14 +36,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPC,KC_BSPC,KC_END, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), From 514a7038b1aa984014bad89c2a44f2a8cf9c15b4 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:46:38 -0500 Subject: [PATCH 101/551] Add ctrl macro to spc and ent on thumb cluster (outter-most keys_) --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f9f38de8b00..1e6c28de9a8 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, - KC_SPC,KC_BSPC,KC_END, + CTL_T(KC_SPC),KC_BSPC,KC_END, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,KC_TAB, KC_ENT + KC_PGDN,KC_TAB, CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * From fbbfb3cbad165a2d800befc3bbbebef4f8ff200d Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:51:16 -0500 Subject: [PATCH 102/551] Add todo: override holding macro functionlity --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 1e6c28de9a8..c926d32c187 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -28,6 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | |ace | End | | PgDn | | | * `--------------------' `----------------------' */ + // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default From 5486b9e80e928133eeaebf628c32ec7e375e3fd4 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 00:58:08 -0500 Subject: [PATCH 103/551] Add todo: windows and nix layers --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index c926d32c187..f0c611555d1 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -29,6 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) + // TODO: maybe make almost identical layers but for wintdows and mac // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default From fd44d1cb39e2090070bf6532d8fb8bd6a9ae5fca Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:09:18 -0500 Subject: [PATCH 104/551] Update layout viz --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index f0c611555d1..fc504ad7226 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -12,9 +12,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -24,8 +24,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | App | LGui | | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | - * | Space|Backsp|------| |------| Tab |Enter | - * | |ace | End | | PgDn | | | + * | Space| Bksp |------| |------| Tab |Enter | + * | ctrl | gui | End | | PgDn | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) From 03aeb405167d80fb1b303725e2766cee0b855467 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:19:30 -0500 Subject: [PATCH 105/551] Change mouse clicks to j and k --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index fc504ad7226..19da8449470 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -30,6 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) // TODO: maybe make almost identical layers but for wintdows and mac + // TODO: find a do nothing key, so you aren't tempted by useless keys // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default @@ -101,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | MsUp | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -121,14 +122,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From 09e172f56a024a6618140df73cd0d05d22632eb1 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:21:29 -0500 Subject: [PATCH 106/551] Tap then hold built-in functionality actually overrides the ctrl/alt/etc. macros --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 19da8449470..69a43b1362c 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | ctrl | gui | End | | PgDn | gui | ctrl | * `--------------------' `----------------------' */ - // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) + // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys // If it accepts an argument (i.e, is a function), it doesn't need KC_. From fbbd32376b8d1a818b62dbbf0f2d9946221ffc56 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:25:09 -0500 Subject: [PATCH 107/551] Add gui macro to bksp and tab (second outter-most keys) on both thumb clusters --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 69a43b1362c..8adabf9a74e 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, - CTL_T(KC_SPC),KC_BSPC,KC_END, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_END, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -51,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,KC_TAB, CTL_T(KC_ENT) + KC_PGDN,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * From 59dc19940a3c5f29860de7b7d7e7a96ea27692c2 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:31:57 -0500 Subject: [PATCH 108/551] Add notes --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 8adabf9a74e..986cbb52dba 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -31,6 +31,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys + // TODO: add vi layer for arrow keys and shit on hjkl? + // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default From 66f9cdd041eb6a97658f32fe79cf70e250660c50 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 25 May 2016 01:43:06 -0500 Subject: [PATCH 109/551] Change bottom keycluster keys to be alt temporarily until a more permanent solution is though up... although you just now lost your arrow keys, so idk what to do about that tomorrow lol --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 986cbb52dba..33878d8b7f9 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -25,13 +25,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | End | | PgDn | gui | ctrl | + * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations // TODO: maybe make almost identical layers but for wintdows and mac // TODO: find a do nothing key, so you aren't tempted by useless keys // TODO: add vi layer for arrow keys and shit on hjkl? + // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* @@ -44,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, - CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_END, + CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT, // right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -53,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, - KC_PGDN,GUI_T(KC_TAB), CTL_T(KC_ENT) + KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT) ), /* Keymap 1: Symbol Layer * From 733596d800cbeccf43ede053d3695421cc538b04 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Thu, 26 May 2016 02:12:57 -0500 Subject: [PATCH 110/551] Fix formatting --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 33878d8b7f9..20df1907095 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space| Bksp |------| |------| Tab |Enter | - * | ctrl | gui | Alt | | Alt | gui | ctrl | + * | ctrl | gui | Alt | | Alt | gui | ctrl | * `--------------------' `----------------------' */ // TODO: somehow map shit so you can hold down a button to override the macro hold down feature (e.g. override control hold so that holding a key and space/bksp/ent/tab will repeat those) ~~~~~~ this might be taken care of.... you can just tap once, then hold, and it does this shit :::))) ... not sure if this is desirable for most use-cases / situations From ac02b0f397a77e6c99f90be11b4589914e9079a7 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Thu, 26 May 2016 02:17:07 -0500 Subject: [PATCH 111/551] Fix formatting --- keyboard/ergodox_ez/keymaps/maz/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/keymap.c b/keyboard/ergodox_ez/keymaps/maz/keymap.c index 20df1907095..54427a2f4c3 100644 --- a/keyboard/ergodox_ez/keymaps/maz/keymap.c +++ b/keyboard/ergodox_ez/keymaps/maz/keymap.c @@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | | | |VolUp |VolDn | Mute | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | From 861f0f78e168e4f1649cf2a168e0a4e17d06f5cb Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Thu, 26 May 2016 15:08:01 -0700 Subject: [PATCH 112/551] zweihander-osx: Bump ALFRED_LEAD_TIME to 250ms --- keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c | 4 ++-- .../ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index 3444152bc3b..dbf2fad78eb 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -11,7 +11,7 @@ #define BBED 2 // BBEdit #define TMNL 3 // Terminal #define SAFA 4 // Safari -#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input +#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [SYMB] = KEYMAP( // left hand KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS, + KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 599d581fe4b..d505d617f11 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -15,12 +15,12 @@ :1000E0001C141C141C141C141C141C141C141C1490 :1000F0001C141C141C141C141C141C141C141C1480 :100100002E143B14421449145314750A01E2012CB5 -:10011000022C02E2746401160216010402040109B1 +:10011000022C02E274FA011602160104020401091B :1001200002090104020401150215010C020C012848 -:10013000022800750A01E2012C022C02E27464011B +:10013000022800750A01E2012C022C02E274FA0185 :10014000170217010802080115021501100210011B :100150000C020C0111021101040204010F020F0133 -:1001600028022800750A01E2012C022C02E27464C4 +:1001600028022800750A01E2012C022C02E274FA2E :100170000105020501050205010802080107020741 :10018000010C020C011702170128022800750A0150 :10019000E30116021602E301E3012B022B02E30145 From e7e83b1f1868b4b3c95536e401091d394ee2112e Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Fri, 27 May 2016 18:41:16 -0700 Subject: [PATCH 113/551] zweihander-osx: Add =, :, juggle Home/End --- .../ergodox_ez/keymaps/zweihander-osx/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index dbf2fad78eb..0dfc1f68cd6 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -66,16 +66,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | & | 1 | 2 | 3 | = | | + * | | | | | | = | | | | : | 1 | 2 | 3 | = | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | 0 | . | ↠| → | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | Home | | | + * | | | | | | | | * | | |------| |------| | | - * | | | | | End | | | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -84,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS, KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, @@ -93,11 +93,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, + KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS, KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, - KC_HOME, - KC_END , KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), /* Keymap 2: Media keys * @@ -137,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, + KC_END , LGUI(KC_X), LGUI(KC_C), LGUI(KC_V) ), }; From 4d7e4a4780bc779a3960497a9084ef6c9d6ef87e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 28 May 2016 11:13:08 +0300 Subject: [PATCH 114/551] Don't include lcd_backlight_hal for emulator --- visualizer.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/visualizer.mk b/visualizer.mk index 3e361491c92..56525ffd939 100644 --- a/visualizer.mk +++ b/visualizer.mk @@ -34,8 +34,6 @@ ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c ifndef EMULATOR SRC += lcd_backlight_hal.c -else -SRC += lcd_backlight_hal_emulator.c endif UDEFS += -DLCD_BACKLIGHT_ENABLE endif From 9c955145f50abebcbe5ad5e203a91ca83249fee6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 29 May 2016 02:08:46 +0300 Subject: [PATCH 115/551] Fix emulator #ifdef check --- visualizer.c | 2 +- visualizer.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/visualizer.c b/visualizer.c index 607a64566aa..0e587221fc7 100644 --- a/visualizer.c +++ b/visualizer.c @@ -414,7 +414,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { gdispGFlush(LED_DISPLAY); #endif -#if EMULATOR +#ifdef EMULATOR draw_emulator(); #endif // The animation can enable the visualizer diff --git a/visualizer.h b/visualizer.h index a3828e35f43..45cfa9aa97f 100644 --- a/visualizer.h +++ b/visualizer.h @@ -51,7 +51,7 @@ GDisplay* get_lcd_display(void); GDisplay* get_led_display(void); // For emulator builds, this function need to be implemented -#if EMULATOR +#ifdef EMULATOR void draw_emulator(void); #endif From 0c3189055f049e6023471e75139d488b288aead9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 29 May 2016 17:42:32 +0300 Subject: [PATCH 116/551] Make LED visualization times configurable --- led_test.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/led_test.c b/led_test.c index 6d3f3b2ed7e..d53f0b7fb79 100644 --- a/led_test.c +++ b/led_test.c @@ -25,6 +25,9 @@ SOFTWARE. #include "gfx.h" #include "math.h" +#define CROSSFADE_TIME 1000 +#define GRADIENT_TIME 3000 + keyframe_animation_t led_test_animation = { .num_frames = 14, .loop = true, @@ -32,17 +35,17 @@ keyframe_animation_t led_test_animation = { gfxMillisecondsToTicks(1000), // fade in gfxMillisecondsToTicks(1000), // no op (leds on) gfxMillisecondsToTicks(1000), // fade out - gfxMillisecondsToTicks(1000), // crossfade - gfxMillisecondsToTicks(3000), // left to rigt (outside in) - gfxMillisecondsToTicks(1000), // crossfade - gfxMillisecondsToTicks(3000), // top_to_bottom + gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade + gfxMillisecondsToTicks(GRADIENT_TIME), // left to rigt (outside in) + gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade + gfxMillisecondsToTicks(GRADIENT_TIME), // top_to_bottom 0, // mirror leds - gfxMillisecondsToTicks(1000), // crossfade - gfxMillisecondsToTicks(3000), // left_to_right (mirrored, so inside out) - gfxMillisecondsToTicks(1000), // crossfade - gfxMillisecondsToTicks(3000), // top_to_bottom + gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade + gfxMillisecondsToTicks(GRADIENT_TIME), // left_to_right (mirrored, so inside out) + gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade + gfxMillisecondsToTicks(GRADIENT_TIME), // top_to_bottom 0, // normal leds - gfxMillisecondsToTicks(1000), // crossfade + gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade }, .frame_functions = { From 489288f67462e0c6fae8e54644af2fa4593e4406 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 29 May 2016 18:27:32 +0300 Subject: [PATCH 117/551] Add a nicer sine based gradient for the LEDs --- led_test.c | 13 +++++-------- ugfx | 2 +- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/led_test.c b/led_test.c index d53f0b7fb79..c2ea30b55ba 100644 --- a/led_test.c +++ b/led_test.c @@ -89,14 +89,11 @@ static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS]; static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; static uint8_t compute_gradient_color(float t, float index, float num) { - const float target = t * (num - 1.0f); - const float half_num = num / 2.0f; - float d = fabs(index - target); - if (d > half_num) { - d = num - d; - } - d = 1.0f - (d / half_num); - return (uint8_t)(255.0f * d); + const float two_pi = 2.0f * PI; + float normalized_index = (1.0f - index / (num - 1)) * two_pi; + float x = t * two_pi + normalized_index; + float v = 0.5 * (cosf(x) + 1.0f); + return (uint8_t)(255.0f * v); } bool keyframe_fade_in_all_leds(keyframe_animation_t* animation, visualizer_state_t* state) { diff --git a/ugfx b/ugfx index 7d7eeef0ad0..dc5786acc24 160000 --- a/ugfx +++ b/ugfx @@ -1 +1 @@ -Subproject commit 7d7eeef0ad0f1b28f4fb86ad931cb6774c7b9e81 +Subproject commit dc5786acc246fb23503517647c386e43f1bfb247 From 13810e4822d57553caa5aea537af7e80ad701589 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Mon, 30 May 2016 15:44:59 -0700 Subject: [PATCH 118/551] zweihander: Add :, disable sleep LED waves --- keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk | 2 ++ keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk b/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk new file mode 100644 index 00000000000..6e3d088a432 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/makefile.mk @@ -0,0 +1,2 @@ +# Don’t do a tricolor wave when the computer is shut down in Windows +SLEEP_LED_ENABLE = no diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown index 7bce7c69096..3b7f52941a9 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/readme.markdown @@ -42,4 +42,4 @@ I press C-a, C-e, and C-k all the time. It’s difficult to press these key comb ## use spreadsheets -All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. +All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. There’s also a colon there for entering times and maybe IPv6 addresses. Not that I expect people to type IPv6 addresses into a spreadsheet, but, y’know. From 7b8857a368f53a102e402f27fce55ef214539bfd Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Tue, 31 May 2016 16:15:35 -0700 Subject: [PATCH 119/551] zweihander-osx: use eject instead of power MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://support.apple.com/en-us/HT201236 says that ⌃⌘â will quit all apps and then restart your Mac; ⌃⌘-power will shut things down in an…ungraceful fashion. I reboot into Windows fairly frequently; I'd rather have the nice behavior at my fingertips, not the rude one. --- .../keymaps/zweihander-osx/keymap.c | 4 +- .../keymaps/zweihander-osx/zweihander-osx.hex | 2203 ++++++++--------- 2 files changed, 1097 insertions(+), 1110 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index 0dfc1f68cd6..f1a2956b59f 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | â | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_EJCT, KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index d505d617f11..44e4ab0f3f3 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -1,20 +1,20 @@ -:100000000C94D3020C9417030C9417030C9417034D -:100010000C9417030C9417030C9417030C941703F8 -:100020000C9417030C9417030C94CF0D0C94A10E91 -:100030000C9417030C9417030C9417030C941703D8 -:100040000C9417030C94AB220C9417030C94170315 -:100050000C9417030C943E1C0C9417030C94170378 -:100060000C9417030C9417030C9417030C941703A8 -:100070000C9417030C9417030C9417030C94170398 -:100080000C9417030C9417030C9417030C94170388 -:100090000C9417030C9417030C9417030C94170378 -:1000A0000C9417030C9417030C9417030E0F300FC6 -:1000B0001E10300F1E10750F980F1E10ED0F001040 -:1000C000CF12CF12FE12FE1234135413851485146E -:1000D0005F1385140F140F147614851485147F1480 -:1000E0001C141C141C141C141C141C141C141C1490 -:1000F0001C141C141C141C141C141C141C141C1480 -:100100002E143B14421449145314750A01E2012CB5 +:100000000C94B3020C94F7020C94F7020C94F702D0 +:100010000C94F7020C94F7020C94F7020C94F7027C +:100020000C94F7020C94F7020C94B00D0C94820E11 +:100030000C94E01B0C94F7020C94F7020C94F7025A +:100040000C94F7020C94F7020C94F7020C94F7024C +:100050000C94F7020C94481C0C94F7020C94F702D1 +:100060000C94F7020C94F7020C94F7020C94F7022C +:100070000C94F7020C94F7020C94F7020C94F7021C +:100080000C94F7020C94F7020C94F7020C94F7020C +:100090000C94F7020C94F7020C94F7020C94F702FC +:1000A0000C94F7020C94F7020C94F702EF0E110F68 +:1000B000FF0F110FFF0F560F790FFF0FCE0FE10F3C +:1000C000B012B012DF12DF12151335136614661466 +:1000D00040136614F013F01357146614661460147A +:1000E000FD13FD13FD13FD13FD13FD13FD13FD1390 +:1000F000FD13FD13FD13FD13FD13FD13FD13FD1380 +:100100000F141C1423142A143414750A01E2012C50 :10011000022C02E274FA011602160104020401091B :1001200002090104020401150215010C020C012848 :10013000022800750A01E2012C022C02E274FA0185 @@ -40,13 +40,13 @@ :100270000000003A002F0036020100010001003B9F :1002800000300037020100010001003C002F02266F :10029000020100010001003D0030022702010001BF -:1002A0000001003E003402340001000000010001A2 +:1002A0000001003E00340234002E00000001000175 :1002B0000001000000010000000100010001000039 -:1002C000000100000001003F0038002D0024020062 -:1002D0000001004000240021001E0027004A0041C8 +:1002C000000100000001003F0038002D0033020053 +:1002D0000001004000240021001E00270001004111 :1002E00000250022001F00370001004200260023E5 :1002F00000200050000100430025022E022E004F76 -:10030000004D004400450001000100010000000113 +:10030000000100440045000100010001000000015F :10031000000100010001000100000069000100016E :10032000000100010001006A000100043001000129 :1003300000010001004B004E00010001000100011E @@ -54,9 +54,9 @@ :100350000002300000010001000100000001000067 :100360000001001408010000000100000001001A53 :100370000830082F082C0200000100350A520C50EA -:10038000002C00A9000100350852005100AC00AA61 +:10038000002C00A9004D00350852005100AC00AA15 :100390000019080100510C4F00AB00A8000608012D -:1003A0000001000100010001001B08A5000100AED2 +:1003A0000001000100010001001B08B0000100AEC7 :1003B0000001000100000016034500720067006F95 :1003C0000044006F007800200045005A000000162D :1003D000034500720067006F0044006F0078002042 @@ -84,1089 +84,1076 @@ :1005300029E71500250195087501810295017508C7 :10054000810105081901290595057501910295019B :10055000750391010507190029FF150025FF950670 -:1005600075088100C00000000000000000000000CD -:10057000010204060A0F17202C3A4A5D71879DB3C9 -:10058000C7DAE9F5FCFFFCF5E9DAC7B39D87715DD1 -:100590004A3A2C20170F0A0604020100000000004E -:1005A00000000000000011241FBECFEFDAE0DEBF24 -:1005B000CDBF04B603FE24C08091FB019091FC01E5 -:1005C000A091FD01B091FE018730904BA740B04B48 -:1005D000B9F41092FB011092FC011092FD011092EF -:1005E000FE0114BE84B7877F84BF88E10FB6F894FC -:1005F00080936000109260000FBEE0E0FFE3099579 -:1006000011E0A0E0B1E0E4EEF8E402C005900D9244 -:10061000A433B107D9F711E0A4E3B1E001C01D9202 -:10062000AB3FB107E1F70E94130B0C9470240C94BC -:100630000000FC016230B9F028F4662341F061301B -:1006400061F023C06330A9F06430C9F01EC082811C -:100650008823D9F088EA91E0089582818823A9F05F -:100660008DE891E008958281882379F084E691E015 -:1006700008958281882349F083E391E0089582817F -:10068000882319F08AE091E0089580E090E00895D1 -:1006900008956091BD017091BE018091BF0190915C -:1006A000C0010E94701B56985E9825982D98269838 -:1006B0002E9827982F98813019F0823021F00895D4 -:1006C000259A2D9A0895269A2E9A08950C944903F6 -:1006D00056985E9825982D9826982E9827982F98AA -:1006E0008FEF90E0909389008093880090938B0027 -:1006F00080938A0090938D0080938C00259A2D9A88 -:100700002FEF80E792E0215080409040E1F700C059 -:100710000000269A2E9A2FEF80E792E02150804029 -:100720009040E1F700C00000279A2F9A2FEF80E752 -:1007300092E0215080409040E1F700C000002598F1 -:100740002D982FEF80E792E0215080409040E1F714 -:1007500000C0000026982E982FEF80E792E02150ED -:1007600080409040E1F700C0000027982F985698ED -:100770005E9825982D9826982E9827982F9808955A -:1007800089EA8093800089E08093810024982C98E6 -:100790003F988AB18F748AB96E98479A8BB1806BF3 -:1007A0008BB9769A0E9468030C94480380E2809388 -:1007B00000018091340181110EC00E94250481E066 -:1007C000809334012FEF83ED90E3215080409040DF -:1007D000E1F700C0000080E40E942B048093000138 -:1007E00081112EC00E94550480930001811128C000 -:1007F0000E94550480930001811122C08FE30E9462 -:1008000055048093000181111BC00E944D0480E4B7 -:100810000E942B0480930001811112C08CE00E9481 -:1008200055048093000181110BC00E9455048093F0 -:100830000001811105C08FE30E94550480930001DF -:100840000E944D048091000108951092B9008AE041 -:100850008093B800089594EA9093BC009091BC00F6 -:1008600097FFFCCF9091B900987F983021F090319C -:1008700011F081E008958093BB0084E88093BC0070 -:100880008091BC0087FFFCCF8091B900887F8831C0 -:1008900011F0803471F780E0089584E98093BC0002 -:1008A0008091BC0084FDFCCF08958093BB0084E858 -:1008B0008093BC008091BC0087FFFCCF9091B90071 -:1008C000987F81E0983209F480E0089584E880936D -:1008D000BC008091BC0087FFFCCF8091BB000895D5 -:1008E00080910001811115C080E40E942B04809347 -:1008F000000181110CC082E10E9455048093000127 -:10090000811105C08FEF0E945504809300010E9461 -:100910004D0484B1807F84B985B1807F85B98AB167 -:10092000837F8AB98BB1837F8BB93E9846980895AF -:100930000E94D603809300010E94700480B38C70E3 -:1009400080BB81B3836F81BBA6E3B1E0E4E4F1E057 -:100950008EE08E0F11921D928E13FCCF0C94C0036B -:10096000BF92CF92DF92EF92FF920F931F93CF939C -:10097000DF9380910001882379F0809135018F5FAA -:1009800080933501811108C00E94D6038093000135 -:10099000811102C00E94680306E311E0C0E0D0E0CC -:1009A000DD24D39482E0C82EEE24E394F12CC730EA -:1009B000D10500F580910001811164C080E40E949E -:1009C0002B0480930001811112C082E10E94550422 -:1009D0008093000181110BC0C7010C2E01C0880F4C -:1009E0000A94EAF780950E945504809300010E94C2 -:1009F0004D0448C0CA30A1F028F4C83059F0C930BD -:100A000061F005C0CC3089F070F0CD3089F0209ACB -:100A1000289810C0219A29980DC0229A2A980AC0B5 -:100A2000239A2B9807C0529A01C0539A5B9802C030 -:100A30003E9A469890EA9A95F1F79FB1799902C04B -:100A400082E001C080E091709D25982B7C9902C0C6 -:100A500084E001C080E0892B7D9902C038E001C0AC -:100A600030E0832B7E9902C020E101C020E0822B80 -:100A70009FB19095991F9927991F9295990F907EF4 -:100A8000892B0FC080910001811149C080E40E9430 -:100A90002B0480930001882379F1B12C0E944D042E -:100AA0008B2DF8019081981719F08083C092010175 -:100AB0000E94700421960F5F1F4FCE30D10509F0C0 -:100AC00076CF80910101882361F1815080930101EB -:100AD000882339F08FE99FE00197F1F700C000000B -:100AE00020C0A4E4B1E0E6E3F1E0CF01825F9191A0 -:100AF0009D938E13FCCF15C083E10E945504809313 -:100B000000018111CACF81E40E942B04809300016F -:100B10008111C3CF0E946604B82EB094BFCF80E08D -:100B2000C0CF0E94660381E0DF91CF911F910F91AA -:100B3000FF90EF90DF90CF90BF900895E82FF0E006 -:100B4000EC5BFE4F8081089508950F931F93CF9320 -:100B5000DF93C4E4D1E010E00C2F025F899190E0B4 -:100B60000E94641B180F0C13F9CF812FDF91CF91D6 -:100B70001F910F91089581E0089508950F931F9399 -:100B8000CF93DF938C01FC01C081D181CE010E9403 -:100B9000E919BE010E946106EC01F80182818823F7 -:100BA00009F44AC080915D0181111FC0C431F0E594 -:100BB000DF0709F051C00E94BD0581E080935D010F -:100BC0000E94081C90935C0180935B011092540179 -:100BD000109256011092550110925801109257012F -:100BE00010925A011092590165C080915B01909159 -:100BF0005C010E94141C883C910570F480915401A2 -:100C0000E82FF0E0EE0FFF1FEB5AFE4FD183C083B9 -:100C10008F5F809354014EC0C43880E5D80721F01F -:100C2000C538D04501F13AC0F8018281882341F0EE -:100C30001092520182E01EC0C438E0E5DE0759F58B -:100C400080915201811106C086E20E94731186E2F2 -:100C50000E943B1282E01CC0C438F0E5DF0741F37C -:100C6000C538D045D9F4F8018281882331F010923B -:100C7000530180E20E948A121DC0809153018111AC -:100C800006C087E20E94731187E20E943B1280E255 -:100C90000E9491120FC0C538D04529F381E080939E -:100CA000520180935301C801DF91CF911F910F91A1 -:100CB0000C94BB0580E0DF91CF911F910F910895B7 -:100CC000089596E0799FF001112494E5899FE00D45 -:100CD000F11D1124E60FF11DEE0FFF1FE154FE4F31 -:100CE000859194910895880F991FFC01E55CFF4F51 -:100CF000859194910895880F991FFC01E554FE4F4A -:100D00008591949108950F931F93CF93DF93EC01F6 -:100D10008115904350F5C11580E2D80708F0C3C093 -:100D2000CB3BD10590F4C83AD10508F06AC0C53A6A -:100D3000D10508F05BC0C430D10508F0D0C12197BF -:100D400009F0CAC101E010E00AC2CF3FD10511F09D -:100D500008F0C5C1C03FD10508F0A2C0CE01805E39 -:100D60009109089708F4BBC1B7C1C13090E5D90714 -:100D700009F4A2C020F5C0318FE4D80770F4C11582 -:100D800090E4D90708F094C0C11521E3D20708F018 -:100D9000A3C1DD278E01106CE2C1C115D04509F059 -:100DA0009BC10E94F0148FEF94E32CE0815090409F -:100DB0002040E1F700C000000E94631CD0C1C115B3 -:100DC00097E5D90758F4C03121E5D20708F01CC1D6 -:100DD000C43180E5D80708F475C07EC1CE019057B4 -:100DE0008115904108F078C1DF7073C1C53AD10513 -:100DF00009F477C1C63AD10509F076C102E810E4DA -:100E0000AEC1C83AD10509F472C1C93AD10509F495 -:100E100071C1CA3AD10509F470C1CB3AD10509F4C0 -:100E20006FC1CC3AD10509F46EC1CD3AD10509F4B0 -:100E30006DC1C03BD10509F46CC1CE3AD10509F4AE -:100E40006BC1CF3AD10509F46AC1C13BD10509F4A0 -:100E500069C1C23BD10509F468C1C33BD10509F49E -:100E600067C1C43BD10509F466C1C53BD10509F48E -:100E700065C1C63BD10509F464C1C73BD10509F47E -:100E800063C1C83BD10509F462C1C93BD10509F46E -:100E900061C1CA3BD10509F460C100E014E45FC13F -:100EA0008E0110655CC1CE019F700E947B0658C107 -:100EB000DF708E01106A53C18091DA0181608093E6 -:100EC000DA014DC10E94081E811102C00E94EE1D70 -:100ED0000E94251E90E09093FB018093FA01C2309E -:100EE00080E5D80721F48091FA01816086C0C43082 -:100EF00090E5D90721F48091FA0182607EC0C63066 -:100F000020E5D20721F48091FA01846076C0C830D0 -:100F100080E5D80719F48091FA0127C0CA3090E51E -:100F2000D90721F48091FA01806167C0CC3020E5B7 -:100F3000D20721F48091FA0180625FC0CE3080E553 -:100F4000D80721F48091FA01806457C0C03190E540 -:100F5000D90721F48091FA0180684FC0C23120E5A1 -:100F6000D20729F48091FA018460886046C0C330BA -:100F700080E5D80721F48091FA018E7F3EC0C5300C -:100F800090E5D90721F48091FA018D7F36C0C730F2 -:100F900020E5D20721F48091FA018B7F2EC0C93061 -:100FA00080E5D80719F48091FA0126C0CB3090E58E -:100FB000D90721F48091FA018F7E1FC0CD3020E542 -:100FC000D20721F48091FA018F7D17C0CF3080E5E0 -:100FD000D80721F48091FA018F7B0FC0C13190E5D1 -:100FE000D90721F48091FA018F7707C0C331D0452A -:100FF00031F48091FA018B7F877F8093FA01809191 -:10100000FA010E94291EABC08D2F99278F70992756 -:1010100081309105D9F49E012370332702C0880FD7 -:10102000991F2A95E2F79C688E0144E0000F111F7A -:101030004A95E1F700271370802B912B53E0CC0FDA -:10104000DD1F5A95E1F7C076DD272FC0823091056C -:1010500031F4DC2FCC278E01016F106A80C0833001 -:10106000910569F4CE018370992701E010E002C078 -:10107000000F111F8A95E2F7C8019C680FC08430E9 -:101080009105B9F4CE018370992701E010E002C008 -:10109000000F111F8A95E2F7C8019A6823E0CC0F70 -:1010A000DD1F2A95E1F7C07ED7708C010C2B1D2B1C -:1010B00056C08530910531F4DC2FCC278E01046FAA -:1010C000106A4DC0069709F04AC0CF71DD27DC2FAA -:1010D000CC278E01106243C000E010E040C08E01BA -:1010E0003EC001E810E43BC003E810E438C002EE63 -:1010F00014E435C009EE14E432C00AEE14E42FC043 -:1011000005EB14E42CC006EB14E429C007EB14E44F -:1011100026C00CEC14E423C00DEC14E420C003E85A -:1011200015E41DC00AE815E41AC002E915E417C069 -:1011300004E915E414C001E216E411C003E216E468 -:101140000EC004E216E40BC005E216E408C006E295 -:1011500016E405C007E216E402C00AE216E4C8017C -:10116000DF91CF911F910F91089596E0799FF00143 -:10117000112494E5899FE00DF11D1124E60FF11D66 -:10118000EE0FFF1FE154FE4F85919491803E910533 -:10119000E0F4803C910558F58133910509F46FC066 -:1011A00048F48932910509F463C08A32910509F443 -:1011B0006DC072C089339105E9F082389105D1F094 -:1011C0008533910509F44DC067C0833E910581F1D7 -:1011D00038F4803E9105B9F0823E9105D9F05CC0AB -:1011E000863E910561F1873E9105A1F155C00E94AF -:1011F000730608952091FA0120FD02C021FF4CC022 -:1012000080EE90E049C08091FA0180FFF9CF89E338 -:1012100090E042C08091FA0182FF0EC08091FA01F5 -:1012200084FF03C080E090E037C083EE90E034C0DC -:101230008091FA0182FFF2CF82EE90E02DC0809182 -:10124000FA0183FF0BC08091FA0184FDEBCF87EE9A -:1012500090E022C08091FA0183FFF5CF86EE90E006 -:101260001BC08091FA0185FF07C089E290E014C09D -:101270008091FA0185FFF9CF85E390E00DC0809160 -:10128000FA0186FF07C08AE290E006C08091FA0169 -:1012900086FFF9CF81E390E00E94830608950895C8 -:1012A0000C944F0980916E010895CF93DF9300D085 -:1012B0001F92CDB7DEB79C018091F101843019F502 -:1012C00093E099833B832A839093E9008FEF909179 -:1012D000E800815095FD06C095ED9A95F1F7000064 -:1012E0008111F5CF8091E80085FF0DC040E050E00E -:1012F00063E070E0CE0101960E94BF0B8091E80090 -:101300008E778093E8000F900F900F90DF91CF9130 -:101310000895CF93DF9300D01F92CDB7DEB7209111 -:10132000F101243021F522E029839B838A8383E025 -:101330008093E9008FEF9091E800815095FD06C001 -:1013400095ED9A95F1F700008111F5CF8091E800B5 -:1013500085FF0DC040E050E063E070E0CE010196F3 -:101360000E94BF0B8091E8008E778093E8000F9079 -:101370000F900F90DF91CF9108952091F1012430CB -:10138000F1F422E02093E9002FEF3091E8002150A2 -:1013900035FD06C035ED3A95F1F700002111F5CF86 -:1013A0002091E80025FF0BC040E050E065E070E0D0 -:1013B0000E94BF0B8091E8008E778093E80008952B -:1013C000CF93DF93EC019091F101943009F046C086 -:1013D00080910C018823D9F080910D018823B9F008 -:1013E0009093E9008FEF9091E800815095FD06C041 -:1013F00095E19A95F1F700008111F5CF8091E80011 -:1014000085FF2CC040E050E060E170E017C081E053 -:101410008093E9008FEF9091E800815095FD06C020 -:1014200095ED9A95F1F700008111F5CF8091E800D4 -:1014300085FF14C040E050E068E070E0CE010E94FB -:10144000BF0B8091E8008E778093E80080E1FE0179 -:10145000AEE5B1E001900D928A95E1F7DF91CF9171 -:1014600008958091F001811109C00E94540D0E94DD -:10147000B10D8091E20084608093E20008951092A3 -:10148000F001089508950C9498220E94F91B0E947F -:101490009E220E9457100C94500942E061EC81E0BA -:1014A0000E94CE0C42E061EC82E00E94CE0C42E051 -:1014B00061EC83E00E94CE0C42E161EC84E00C948C -:1014C000CE0C8091F301833009F455C030F48130A3 -:1014D00071F0823009F48EC008958A3009F47AC020 -:1014E0008B3009F460C0893009F09CC020C0809125 -:1014F000F201813A09F096C08091E800877F8093DD -:10150000E8008091F6019091F701892B21F460E1C8 -:101510008EE591E003C060E080E090E070E00E9422 -:101520000A0C8091E8008B778093E8000895809101 -:10153000F201813209F076C08091F6019091F701B5 -:10154000009719F0039709F06DC08091E800877F3C -:101550008093E8008091E80082FD05C08091F10150 -:101560008111F8CF5FC08091F10080936E0180916E -:10157000E8008B7753C08091F201813A09F052C0A4 -:101580008091F6019091F701892B09F04BC0809171 -:10159000E800877F8093E8008091E80080FFFCCF1F -:1015A00080910C0136C08091F2018132D9F5809191 -:1015B000F6019091F701892BA9F58091E800877FCA -:1015C0008093E8000E94030D8091F40180930C0148 -:1015D0000C94F0148091F201813221F58091E800A1 -:1015E000877F8093E8000E94030D8091F50180932E -:1015F0006F0108958091F201813AA1F48091E80091 -:10160000877F8093E8008091E80080FFFCCF809185 -:101610006F018093F1008091E8008E778093E8005D -:101620000C94030D089584B7877F84BF88E10FB6BB -:10163000F89480936000109260000FBE90E080E804 -:101640000FB6F89480936100909361000FBE0E94E2 -:10165000A6100E94540D0E94B10D8091E20084609A -:101660008093E20078940E9437100E94A81082E0D4 -:1016700091E00E9452100E9486228091F1018530F3 -:1016800069F40E94C01B8091EF018823B1F30E948E -:10169000EB1B882391F30E94A90BEFCF0E94AE10A1 -:1016A000ECCF292F332723303105C9F064F42130E2 -:1016B000310581F02230310509F043C08DE690E01C -:1016C0002BEE33E042C021323105F1F022323105F8 -:1016D00041F137C082E190E028E534E036C0992737 -:1016E0008130910541F08230910541F0892B49F517 -:1016F000E7EEF3E005C0EFECF3E002C0E7EBF3E068 -:10170000849190E09F0121C06430D8F4E62FF0E08E -:10171000EE0FFF1FEE5DFE4F2081318189E090E0EA -:1017200014C0643070F470E0FB01EE0FFF1FE65E42 -:10173000FE4F20813181FB01EA5EFE4F808190E007 -:1017400004C080E090E020E030E0FA0131832083A3 -:10175000089580E189BD82E189BD09B400FEFDCF15 -:101760008091D8008F7D8093D8008091E0008260C6 -:101770008093E0008091E00081FDFCCF0895CF923E -:10178000DF92EF92FF920F931F93CF93DF93EC01C1 -:101790008B016A010E94220D811133C0C114D10452 -:1017A00039F0F60180819181081B190BC80FD91FF0 -:1017B000E12CF12C0115110519F18091E80085FD4E -:1017C00016C08091E8008E778093E800C114D104A0 -:1017D00049F0F60180819181E80EF91EF182E082E4 -:1017E00085E00FC00E94220D882321F30AC0899151 -:1017F0008093F10001501109FFEFEF1AFF0ADACFD1 -:1018000080E0DF91CF911F910F91FF90EF90DF90DB -:10181000CF9008952091F8013091F90126173707EC -:1018200048F06115710539F42091E8002E77209376 -:10183000E80001C0B90140E061157105A9F12091EE -:10184000F101222309F443C0253009F442C020915C -:10185000E80023FD40C02091E80022FD32C0209125 -:10186000E80020FFE9CF4091F3002091F20030E042 -:10187000342BFC01CF016115710559F02830310579 -:1018800040F481918093F100615071092F5F3F4FC7 -:10189000F1CF41E02830310509F040E02091E80027 -:1018A0002E772093E800C8CF4111C9CF0AC080919C -:1018B000F101882361F0853061F08091E80083FDBB -:1018C0000AC08091E80082FFF2CF80E0089582E0B4 -:1018D000089583E0089581E008952091F801309102 -:1018E000F9012617370748F06115710539F4209181 -:1018F000E8002E772093E80001C0B901FC0120E048 -:101900006115710591F18091F101882309F440C0BE -:10191000853009F43FC08091E80083FD3DC080918F -:10192000E80082FD2FC08091E80080FFE9CF209180 -:10193000F3008091F20090E0922B6115710559F04F -:101940008830910540F424912093F1003196615044 -:1019500071090196F2CF21E0089709F020E080910B -:10196000E8008E778093E800CBCF2111CCCF0AC05E -:101970008091F101882361F0853061F08091E80069 -:1019800083FD0AC08091E80082FFF2CF80E00895D5 -:1019900082E0089583E0089581E00895982F9730BC -:1019A00058F59093E900981739F07091EC00209168 -:1019B000ED005091F00003C0242F762F50E021FF5E -:1019C00019C03091EB003E7F3093EB003091ED0079 -:1019D0003D7F3093ED003091EB0031603093EB00B0 -:1019E0007093EC002093ED005093F0002091EE00F6 -:1019F00027FF07C09F5FD3CF8F708093E90081E0FE -:101A0000089580E008958091F20187FF11C08091D0 -:101A1000E80082FD05C08091F1018111F8CF11C06D -:101A20008091E8008B770BC08091F101882349F009 -:101A30008091E80080FFF8CF8091E8008E77809356 -:101A4000E80008952091E4003091E50095E640918A -:101A5000EC00842F817040FF22C08091E80080FD5F -:101A60001CC08091F101882391F0853091F0809124 -:101A7000EB0085FD10C04091E4005091E500421755 -:101A8000530729F39A01915011F784E0089582E0F9 -:101A9000089583E0089581E0089580E008954091DD -:101AA000E80042FFDECF08950E94C20D0E94CA0DD9 -:101AB000E0EEF0E0808181608083E8EDF0E08081FD -:101AC0008F77808319BCA7EDB0E08C918E7F8C93CB -:101AD00080818F7E80831092F00108950F931F9371 -:101AE000CF93DF930E94C20D0E94CA0DC8EDD0E0D3 -:101AF00088818F77888388818068888388818F7DBB -:101B0000888319BC1092F1011092ED011092EF013F -:101B10001092EE0100EE10E0F80180818B7F80834F -:101B200088818160888342E060E080E00E94CE0C82 -:101B3000E1EEF0E080818E7F8083E2EEF0E0808154 -:101B400081608083808188608083F80180818E7FBE -:101B50008083888180618883DF91CF911F910F916D -:101B60000895E8EDF0E080818F7E8083E7EDF0E07E -:101B700080818160808384E082BF81E08093F00176 -:101B80000C946E0DE8EDF0E080818E7F80831092E2 -:101B9000E20008951092DA001092E10008951F9279 -:101BA0000F920FB60F9211242F933F934F935F9391 -:101BB0006F937F938F939F93AF93BF93EF93FF9315 -:101BC0008091E10082FF0BC08091E20082FF07C09C -:101BD0008091E1008B7F8093E1000E94361080911C -:101BE000DA0080FF1FC08091D80080FF1BC0809169 -:101BF000DA008E7F8093DA008091D90080FF0DC0DB -:101C000080E189BD82E189BD09B400FEFDCF81E09C -:101C10008093F1010E94310A05C019BC1092F101B4 -:101C20000E943F0A8091E10080FF19C08091E2008C -:101C300080FF15C08091E2008E7F8093E20080914A -:101C4000E20080618093E2008091D80080628093FE -:101C5000D80019BC85E08093F1010E94430A80916D -:101C6000E10084FF30C08091E20084FF2CC080E15D -:101C700089BD82E189BD09B400FEFDCF8091D80005 -:101C80008F7D8093D8008091E1008F7E8093E1006A -:101C90008091E2008F7E8093E2008091E20081607B -:101CA0008093E2008091ED01882311F084E007C069 -:101CB0008091E30087FD02C081E001C083E0809352 -:101CC000F1010E94450A8091E10083FF29C08091C3 -:101CD000E20083FF25C08091E100877F8093E100CF -:101CE00082E08093F1011092ED018091E1008E7FFE -:101CF0008093E1008091E2008E7F8093E2008091EA -:101D0000E20080618093E20042E060E080E00E94B7 -:101D1000CE0C8091F00088608093F0000E94420A0F -:101D2000FF91EF91BF91AF919F918F917F916F91B3 -:101D30005F914F913F912F910F900FBE0F901F9089 -:101D400018951F920F920FB60F9211242F933F9365 -:101D50004F935F936F937F938F939F93AF93BF93B3 -:101D6000CF93DF93EF93FF93C091E900CF70809101 -:101D7000EC00D82FD17080FDD0E81092E90080915E -:101D8000F000877F8093F00078940E94E50E109217 -:101D9000E9008091F00088608093F000CD2BCF7037 -:101DA000C093E900FF91EF91DF91CF91BF91AF9187 -:101DB0009F918F917F916F915F914F913F912F9163 -:101DC0000F900FBE0F901F9018951F93CF93DF9326 -:101DD000CDB7DEB7AA970FB6F894DEBF0FBECDBF62 -:101DE000E2EFF1E088E08E0F9091F10091938E1375 -:101DF000FBCF0E94610A8091E80083FF1FC18091A0 -:101E0000F2019091F301492F50E04A30510508F05A -:101E100015C1FA01EA5AFF4F0C942024803881F052 -:101E2000823809F00BC18091F6018F708093E90030 -:101E30008091EB0085FB882780F91092E90006C0AD -:101E40008091EE019091EF01911182609091E800F4 -:101E5000977F9093E8008093F1001092F100C8C042 -:101E6000282F2D7F09F0EAC0882319F0823061F015 -:101E7000E5C08091F401813009F0E0C0933009F0B1 -:101E800080E08093EF012BC08091F401811127C085 -:101E90008091F6018F7009F4D1C08093E900209100 -:101EA000EB0020FF1CC0933021F48091EB00806296 -:101EB00014C09091EB0090619093EB0021E030E032 -:101EC000A90102C0440F551F8A95E2F74093EA002A -:101ED0001092EA008091EB0088608093EB001092F2 -:101EE000E9008091E800877F86C08111A7C010912A -:101EF000F4011F778091E3008078812B8093E300C9 -:101F00008091E800877F8093E8000E94030D809114 -:101F1000E80080FFFCCF8091E30080688093E300BD -:101F2000111102C082E001C083E08093F10186C0FC -:101F30008058823008F082C08091F4019091F501C0 -:101F40008C3D53E0950779F583E08A838AE28983A3 -:101F50004FB7F894DE01139620E03EE051E2E32F04 -:101F6000F0E050935700E49120FF03C0E295EF703A -:101F70003F5FEF708E2F90E0EA3010F0C79601C0FF -:101F8000C0968D939D932F5F243149F74FBF809169 -:101F9000E800877F8093E8006AE270E0CE01019656 -:101FA0000E940A0C14C0AE014F5F5F4F6091F601B2 -:101FB0000E94510BBC01892B09F440C09091E800AC -:101FC000977F9093E80089819A810E946D0C80919F -:101FD000E8008B778093E80031C0803879F58091F4 -:101FE000E800877F8093E8008091ED018093F10005 -:101FF0008091E8008E778093E8000E94030D1EC058 -:1020000081111CC09091F4019230C0F48091E800DD -:10201000877F8093E8009093ED010E94030D8091EB -:10202000ED01811106C08091E30087FD02C081E0CF -:1020300001C084E08093F1010E944D0A8091E80084 -:1020400083FF0AC08091E800877F8093E800809139 -:10205000EB0080628093EB00AA960FB6F894DEBF87 -:102060000FBECDBFDF91CF911F9108950895CF93FB -:102070008091F1018823A1F0C091E900CF70909187 -:10208000EC00892F817090FD80E8C82B1092E90048 -:102090008091E80083FD0E94E50ECF70C093E900B7 -:1020A000CF91089590937501809374010895E09104 -:1020B0007401F0917501309721F00190F081E02DCD -:1020C000099480E00895E0917401F09175013097D2 -:1020D00021F00280F381E02D09940895E0917401CC -:1020E000F0917501309721F00480F581E02D09947D -:1020F000089520917201309173018217930771F056 -:102100009093730180937201E0917401F0917501D5 -:10211000309721F00680F781E02D099408952091F1 -:102120007001309171018217930771F090937101E2 -:1021300080937001E0917401F0917501309721F066 -:102140000084F185E02D0994089508950C94A5105C -:102150000E94FF1B0E9498040C94C11C9F92AF9296 -:10216000BF92CF92DF92EF92FF920F931F93CF9384 -:10217000DF9300D000D000D0CDB7DEB70E94B0040E -:102180000DE010E0AA24A394B12C902E802F0E9481 -:102190009E05980129583E4F6901F901F080F82603 -:1021A000A1F40150110988F78FEF89838A831B827C -:1021B0000E94081C8160782F9D838C8349815A81FD -:1021C0006B818D810E9445112FC09091DA0191FFA2 -:1021D00004C08E830E94A4058E8125E030E0A50115 -:1021E000022E01C0440F0A94EAF7E42E4F21C1F0F9 -:1021F00029839A828E2191E009F490E09B830E94CA -:10220000081C8160782F9D838C8349815A816B8162 -:102210008D810E944511F6018081E826E08204C08C -:1022200021503109E0F6BDCF0E94A81F1091760120 -:102230000E9457101817B9F00E945710809376012A -:1022400026960FB6F894DEBF0FBECDBFDF91CF91BB -:102250001F910F91FF90EF90DF90CF90BF90AF90C4 -:102260009F900C94500926960FB6F894DEBF0FBECF -:10227000CDBFDF91CF911F910F91FF90EF90DF9035 -:10228000CF90BF90AF909F900895CF93DF93CDB73D -:10229000DEB72B970FB6F894DEBF0FBECDBF4F83CE -:1022A000588769877A878B87DE01119686E0FD0162 -:1022B00011928A95E9F785E0FE01379601900D921B -:1022C0008A95E1F749815A816B817C818D819E815C -:1022D0000E948E172B960FB6F894DEBF0FBECDBFAF -:1022E000DF91CF910895CF93882309F4C2C0C82FFE -:1022F000823859F40E94571081FDBBC089E30E94C7 -:10230000681A0E94351B89E30CC0833879F40E9457 -:10231000571080FDAEC083E50E94681A0E94351BED -:1023200083E50E94AA1ACF910C94351B843859F486 -:102330000E94571082FD9DC087E40E94681A0E9487 -:10234000351B87E4EECF8CEF8C0F813A48F48C2F4D -:102350000E94EB2181118DC08C2F0E94681AE3CF5F -:1023600080E28C0F883048F4C77081E001C0880F8C -:10237000CA95EAF70E94EE1AD6CF8BE58C0F833010 -:1023800078F4C53A29F0C63A31F083E890E005C008 -:1023900081E890E002C082E890E0CF910C9479103F -:1023A00088E58C0F833108F064C0C83A39F1C93A26 -:1023B00041F1CA3A49F1CB3A51F1CC3A59F1CD3A0F -:1023C00061F1C03B69F1CE3A71F1CF3A79F1C13B8D -:1023D00081F1C23B89F1C33B91F1C43B99F1C53B0B -:1023E000A1F1C63BA9F1C73BB1F1C83BB9F1C93B6B -:1023F000C1F1CA3BC9F180E090E038C082EE90E0C4 -:1024000035C089EE90E032C08AEE90E02FC085EBB7 -:1024100090E02CC086EB90E029C087EB90E026C0CE -:102420008CEC90E023C08DEC90E020C083E891E03C -:102430001DC08AE891E01AC082E991E017C084E9E2 -:1024400091E014C081E292E011C083E292E00EC0FC -:1024500084E292E00BC085E292E008C086E292E05E -:1024600005C087E292E002C08AE292E0CF910C942C -:102470008F10CF910895882309F44BC0823859F406 -:102480000E94571081FF45C089E30E94681A0E948C -:10249000351B89E30CC0833871F40E94571080FF0C -:1024A00038C083E50E94681A0E94351B83E50E94AC -:1024B000AA1A0C94351B843859F40E94571082FFD5 -:1024C00028C087E40E94681A0E94351B87E4EFCF7A -:1024D0009CEF980F913A58F390E2980F983050F48F -:1024E000877091E001C0990F8A95EAF7892F0E94C1 -:1024F000F41ADFCF9BE5980F933020F480E090E052 -:102500000C947910885A833120F480E090E00C9488 -:102510008F100895882321F00E94EE1A0C94351B29 -:102520000895882321F00E94F41A0C94351B089515 -:102530007F928F929F92AF92BF92CF92DF92EF9253 -:10254000FF920F931F93CF93DF931F92CDB7DEB708 -:102550007C01C62E772EFC01058102950F70128139 -:1025600011110E940B1B0E94611A882379F011231C -:1025700069F080E28C0D883048F082E00E944A1AAF -:102580000E94611A91E0D82ED92601C0D12CE72DE6 -:10259000E295EF70F0E0E05AFF4F0C942024872D75 -:1025A000807F072D0F70882311F00295007F112383 -:1025B00089F0002309F490C180E28C0D883020F46A -:1025C000802F0E94EE1A03C0802F0E94FE1A0E94E4 -:1025D000351B82C18C2D0E943B12002309F495C14A -:1025E00080E28C0D883020F4802F0E94F41A03C002 -:1025F000802F0E94041B0E94351B87C1972D907F5E -:10260000872D8F70903211F08295807FCC2021F041 -:10261000F1E0CF16B1F01EC0112349F0002309F4F8 -:1026200014C1013009F011C10E941E1B6EC10023AC -:1026300019F0013009F469C189830E94211B898145 -:102640000AC1112321F0023008F05FC1FEC0011160 -:102650005CC101C1112321F0002309F4F6C03CC183 -:10266000002309F4F8C03EC1872D869586958370B6 -:1026700090E0009719F0019761F047C1112321F014 -:102680008C2D972D937002C080E090E00E9479100D -:102690003CC1112321F08C2D972D937002C080E056 -:1026A00090E00E948F1031C18C2D112319F00E94EF -:1026B000B01E02C00E94181F0E949D1F26C1872DB8 -:1026C000837009F052C0111120C18C2D829586951E -:1026D0008770880F880F9C2D9F70892E912CA12CBC -:1026E000B12C082E04C0880C991CAA1CBB1C0A948F -:1026F000D2F7C4FE14C00FE010E020E030E0B901D2 -:10270000A80104C0440F551F661F771F8A95D2F792 -:10271000CB01BA01609570958095909503C060E0FB -:1027200070E0CB01272D26952695237030E02230CE -:10273000310569F02330310589F0682979298A2922 -:102740009B292130310571F00E94D618DEC068291E -:1027500079298A299B290E94F218D7C00E94D6188D -:10276000C501B4010E94BA18D0C0112319F0872DF9 -:10277000817001C08695882309F4C7C08C2D82958D -:1027800086958770880F880F9C2D9F70892E912CBD -:10279000A12CB12C082E04C0880C991CAA1CBB1CAF -:1027A0000A94D2F7C4FE14C00FE010E020E030E03D -:1027B000B901A80104C0440F551F661F771F8A95F1 -:1027C000D2F7CB01BA01609570958095909503C0C2 -:1027D00060E070E0CB01272D269526952370422FCF -:1027E00050E04230510569F04330510589F06829C5 -:1027F00079298A299B294130510571F00E94B0192D -:1028000084C0682979298A299B290E94CC197DC016 -:102810000E94B019C501B4010E94941976C08C2D94 -:1028200090E0FC01E05EF109E531F10508F050C0EF -:10283000E059FF4F0C9420240C2D0F70872D8F71C1 -:10284000112331F00E942D19802F0E948A125DC041 -:102850000E944E19802F0E94911257C0112339F007 -:10286000011153C0872D8F710E9473194EC0023021 -:1028700008F04BC0F7CF112339F0872D8F710E94DC -:102880002D1943C01123C9F3872D8F710E944E1952 -:102890003CC0112329F0872D8F710E94181935C073 -:1028A0000E940E1932C0112351F0172D1F71812F74 -:1028B0000E942D1963E0812F0E94411A26C081E0F9 -:1028C0000E944A1A023008F182E00E944A1A1DC092 -:1028D000112331F0002389F28C2D0E94731115C051 -:1028E000002391F28C2D0E943B120FC0472D4F7098 -:1028F0006C2DC7010E9419030E94321806C0472D93 -:102900004F706C2DC7010E946006DD20F9F00E9417 -:102910003D1A80FD1BC0F70112820E94371A0E94E7 -:102920002D19C7010E94B5140E94371A0F90DF912C -:10293000CF911F910F91FF90EF90DF90CF90BF90BC -:10294000AF909F908F907F900C944E190F90DF91D5 -:10295000CF911F910F91FF90EF90DF90CF90BF909C -:10296000AF909F908F907F9008950F931F93CF9378 -:10297000DF93EC01888199812B813C81232BB9F075 -:102980009F3F11F48F3F99F0CE010E94BE0588232E -:1029900071F0688179818A810E94331A8C010E94CA -:1029A000E8190E94AF18B801CE010E949812DF9179 -:1029B000CF911F910F9108950E940B1B0E941B1B2A -:1029C0000E94E01A0E94351B0E944E200E949D1F0B -:1029D00080E090E00E94791080E090E00C948F10ED -:1029E0000E94FB1A0C94DC140E94281A292F2295AD -:1029F0002F7030E02C3031054CF42A3031056CF466 -:102A00002250310922303105A8F407C02C3031059D -:102A100069F02F30310551F00DC0803F69F018F496 -:102A2000803E40F409C0843F29F406C093FB882708 -:102A300080F9089580E0089581E00895CF93DF93B1 -:102A400000D000D01F92CDB7DEB70F900F900F903F -:102A50000F900F90DF91CF910895CF93DF9300D027 -:102A600000D000D0CDB7DEB726960FB6F894DEBF03 -:102A70000FBECDBFDF91CF9108951F93CF93DF930A -:102A8000C091850116E080918601C81799F0D0E0C9 -:102A90001C9FF0011D9FF00D1124E957FE4F40814E -:102AA000518162817381848195810E942D152196C7 -:102AB000C770E9CFDF91CF911F9108954091B70181 -:102AC0005091B8016091B9017091BA018091BB0138 -:102AD0009091BC010C942D158091BC0182958F7052 -:102AE00009F054C08091B901882309F44FC0809146 -:102AF0008501A09186016091B7017091B801409164 -:102B0000BA015091BB01B6E08A1709F43FC090E0CA -:102B100041155105C1F17F3F11F46F3FA1F1B89FFD -:102B2000F001B99FF00D1124E957FE4F2181721376 -:102B30002AC02081621327C02281211124C0238151 -:102B400034812417350710F421503109241B350B2B -:102B5000283C3105C0F42091BC012F7020612093E6 -:102B6000BC0126E0289FF001299FF00D1124E457B5 -:102B7000FE4F80818F708061808387EB91E00E949F -:102B8000B5140C943D1501968770BECF0895CF9271 -:102B9000DF92EF92FF920F931F93CF93DF93CDB706 -:102BA000DEB762970FB6F894DEBF0FBECDBF8C01C3 -:102BB00085E0F801DE011D9601900D928A95E1F7FE -:102BC000D8014C9111965C91119712966C911297C5 -:102BD0001396CD90DC9014973091B7017091B801A5 -:102BE0008091BA019091BB01009709F46BC17F3FBE -:102BF00019F43F3F09F466C1E090B901EE2009F4F1 -:102C0000C0C02091BC01C816D90628F0F601E81B07 -:102C1000F90BCF0104C0809590958C0D9D1DFF246C -:102C2000F394883C910578F0F12C207F09F0C6C020 -:102C30007C2DD98AC88A89890E941E1587EB91E06C -:102C40000E94B514B1C0822F807F09F046C0751371 -:102C500014C0341312C0611110C02F702061209372 -:102C6000BC010E945E1587EB91E00E94B514809133 -:102C7000BC01D80115968C932EC0CD2819F15F3F69 -:102C800011F44F3FF9F0F62E61111CC080918501BF -:102C90002091860136E0821709F45AC090E0389FEF -:102CA000F001399FF00D1124E957FE4F7181571340 -:102CB00006C07081471303C07281711103C0019671 -:102CC0008770E9CFF62E662309F418C18091BC0104 -:102CD00081608093BC01F12C11C1751308C03413BD -:102CE00006C0611104C08091BC01D801C3C04D87EA -:102CF0005E878D859E856A8B0E94F4146A8988237D -:102D0000E1F16623D1F12091BC01822F82958F7071 -:102D100090E0029774F08091B7019091B801988784 -:102D20008F831986DB86CA862C87CE0107960E9480 -:102D3000B51486E0F801A7EBB1E001900D928A95F9 -:102D4000E1F70E946C150E945E15FF24F394D6C033 -:102D50004D875E878D859E850E94281A292F229592 -:102D60002F7030E0223031050CF0BCC09F7009F0AC -:102D7000B6C0805E883008F4C1C0C8010E94B51496 -:102D8000E4CFC816D90608F453C0F601E81BF90BC6 -:102D9000CF01883C910508F450C0F12C7C2DD98AD4 -:102DA000C88A89890E941E15E7EBF1E086E0DF0101 -:102DB0001D928A95E9F70E945E15A0C0751314C094 -:102DC000341312C0611110C08091BC01F8018583D9 -:102DD000C8010E94B51486E0E7EBF1E0DF011D9227 -:102DE0008A95E9F7FE2C8AC04D875E878D859E8582 -:102DF0006A8B0E94F4146A89882309F4BECF662383 -:102E000009F4BBCF2091BC01822F82958F7090E096 -:102E100002970CF48ECF8091B7019091B8019A83FC -:102E200089831B82DD82CC822E83CE0101967FCFE7 -:102E3000809590958C0D9D1DACCFF62E662309F4E0 -:102E40009CCF75132EC034132CC02091BC0120FDE3 -:102E50001FC0822F82958F70D9F0D80115962C93C0 -:102E600015978F3049F08F5F982F9295907F822F22 -:102E70008F70892B15968C93C8010E94B51486E03B -:102E8000F801A7EBB1E001900D928A95E1F793CF9D -:102E900086E0F801A7EBB1E001900D928A95E1F789 -:102EA0002DC04D875E878D859E850E94F41481110B -:102EB00040CF8091BC0181608093BC01C8010E9419 -:102EC000B5141CC0662309F458CF4D875E878D85E5 -:102ED0009E850E94F414882309F44FCF2ACF8111D4 -:102EE00048CF0CC0243031050CF047CF9F7009F457 -:102EF00040CFF8019581907F09F03BCF8F2D6296EE -:102F00000FB6F894DEBF0FBECDBFDF91CF911F91FA -:102F10000F91FF90EF90DF90CF9008951F93CF9384 -:102F2000DF93CDB7DEB72C970FB6F894DEBF0FBE98 -:102F3000CDBF4F83588769877A878B879C87CE015F -:102F400007960E94C715882369F08F8198852A8586 -:102F50003B85232BF1F19F3F09F063C08F3F09F0C0 -:102F600060C037C086E0FE013796DE011196019001 -:102F70000D928A95E1F76F817885EA85FB85309718 -:102F800041F17F3F11F46F3F21F12091860130E044 -:102F9000C9010196877099274091850150E08417F7 -:102FA000950709F447C069837A83FD83EC8396E033 -:102FB000929FD001939FB00D1124A957BE4FFE01DF -:102FC000319601900D929A95E1F7809386010E94C7 -:102FD0003D1516E080918501909186018917C1F118 -:102FE000189FC001112489579E4F0E94C71588233E -:102FF00079F1E09185011E9FF0011124E957FE4F00 -:103000004081518162817381848195810E942D1557 -:103010008091850190E001968770992780938501C2 -:10302000D9CF4F81588569857A858B859C850E948B -:103030002D15CFCF0E94F0141092860110928501B9 -:10304000E7EBF1E086E0DF011D928A95E9F7C1CF59 -:103050002C960FB6F894DEBF0FBECDBFDF91CF9197 -:103060001F910895EF92FF920F931F93CF93DF93D9 -:103070008C01892B09F46CC0F12CEE24E394E80157 -:103080002196F8018491843740F4843008F051C0CF -:10309000813081F0823019F15BC0853709F444C07A -:1030A000A8F19CE7980F903708F052C08F770E94E4 -:1030B0003B1241C00E5F1F4FFE01C49180E28C0F96 -:1030C000883048F4C7708E2D01C0880FCA95EAF782 -:1030D0000E940E1B14C08C2F0E9473112DC00E5F16 -:1030E0001F4FFE01C49180E28C0F883058F4C770E6 -:1030F0008E2D01C0880FCA95EAF70E94141B0E940A -:10310000351B1AC08C2F0E943B1216C00E5F1F4F3A -:10311000FE01C491CC2381F08FE99FE00197F1F784 -:1031200000C00000C150F6CF0E5F1F4FFE01F490AB -:1031300003C00E9473118E018F2D882309F49FCF45 -:10314000EFE9FFE03197F1F700C000008150F5CFC3 -:10315000DF91CF911F910F91FF90EF900895089507 -:103160006093C1017093C2018093C3019093C40125 -:103170000C94DC140F931F930091C1011091C201B4 -:103180002091C3013091C401DC01CB01802B912B34 -:10319000A22BB32B8093C1019093C201A093C301D2 -:1031A000B093C4011F910F910C94DC140F931F93E3 -:1031B0000091C1011091C2012091C3013091C4015D -:1031C000DC01CB0180239123A223B3238093C1018F -:1031D0009093C201A093C301B093C4011F910F91BA -:1031E0000C94DC140F931F930091C1011091C20144 -:1031F0002091C3013091C401DC01CB0180279127CC -:10320000A227B3278093C1019093C201A093C30169 -:10321000B093C4011F910F910C94DC141092BD0166 -:103220001092BE011092BF011092C0010C94DC14E8 -:1032300041E050E060E070E004C0440F551F661F9D -:10324000771F8A95D2F74093BD015093BE016093DA -:10325000BF017093C0010C94DC1441E050E060E0C9 -:1032600070E004C0440F551F661F771F8A95D2F780 -:103270008091BD019091BE01A091BF01B091C001AC -:10328000482B592B6A2B7B2B4093BD015093BE01D9 -:103290006093BF017093C0010C94DC1441E050E0D6 -:1032A00060E070E004C0440F551F661F771F8A95C9 -:1032B000D2F740955095609570958091BD019091A1 -:1032C000BE01A091BF01B091C001482359236A23D8 -:1032D0007B234093BD015093BE016093BF01709367 -:1032E000C0010C94DC1441E050E060E070E004C0E8 -:1032F000440F551F661F771F8A95D2F78091BD0135 -:103300009091BE01A091BF01B091C00148275927FB -:103310006A277B274093BD015093BE016093BF0194 -:103320007093C0010C94DC140F931F930091BD01A6 -:103330001091BE012091BF013091C001DC01CB0191 -:10334000802B912BA22BB32B8093BD019093BE01B8 -:10335000A093BF01B093C0011F910F910C94DC1496 -:103360000F931F930091BD011091BE012091BF01E9 -:103370003091C001DC01CB0180239123A223B32330 -:103380008093BD019093BE01A093BF01B093C00193 -:103390001F910F910C94DC140F931F930091BD01AA -:1033A0001091BE012091BF013091C001DC01CB0121 -:1033B00080279127A227B3278093BD019093BE0158 -:1033C000A093BF01B093C0011F910F910C94DC1426 -:1033D0000895CF92DF92EF92FF920F931F93CF93B6 -:1033E000DF938C01C090C101D090C201E090C30175 -:1033F000F090C4018091BD019091BE01A091BF01E8 -:10340000B091C001C82AD92AEA2AFB2ACFE1D0E02C -:10341000D701C6010C2E04C0B695A7959795879540 -:103420000A94D2F780FF06C0B8018C2F0E94B5081D -:10343000019721F4219760F780E001C08C2FDF9184 -:10344000CF911F910F91FF90EF90DF90CF90089553 -:10345000CF93DF93EC010E94E919BE010E94B508E9 -:10346000DF91CF910895CB010E94281A0895809191 -:10347000C50185958595859508958091C5018770CD -:10348000089598E0899F90011124262B2093C5016F -:103490000C942D192091C501809582238093C5013C -:1034A000982F977069F430E0482F552747FD5095C5 -:1034B0002417350729F08595859585950C944E1927 -:1034C00008959091C501977081E009F480E0089516 -:1034D00090910C01992321F090910D01911109C057 -:1034E00020910E0130910F01F90132969FEF40E0DB -:1034F0001FC0982F9695969596959F3050F5E09120 -:103500000E01F0910F01E90FF11D877021E030E00D -:10351000A90102C0440F551F8A95E2F7CA019181A3 -:10352000892B818308959F3F39F04F5F4E3041F0E2 -:1035300051915813F8CF0DC05111F7CF942FF5CFFB -:103540009F3F39F0F901E90FF11D97FDFA9582834C -:103550000895089590910C01992321F090910D0107 -:10356000911109C020910E0130910F01F90132969D -:10357000205F3F4F1FC0982F9695969596959F3048 -:10358000F0F4E0910E01F0910F01E90FF11D877049 -:1035900021E030E0A90102C0440F551F8A95E2F7EF -:1035A000CA01809591818923818308953196E2171C -:1035B000F30729F090819813F9CF1082F7CF08957F -:1035C00081E090E0E0910E01F0910F01E80FF91F0A -:1035D0001082019680319105A9F708959091D90143 -:1035E000892B8093D901089580959091D9018923E1 -:1035F0008093D90108951092D90108959091D8012E -:10360000892B8093D801089580959091D8018923C2 -:103610008093D80108951092D80108959091D70110 -:10362000892B8093D701089580959091D7018923A4 -:103630008093D70108951092D70108958093C60111 -:1036400008951092C601089580910E0190910F0186 -:10365000FC0131969C01205F3F4F80E091919111D8 -:103660008F5FE217F307D1F70895E0910E01F09113 -:103670000F018091D9018083E0910E01F0910F013B -:1036800090818091D801892B8083E0910E01F09187 -:103690000F0190818091D701892B80838091C60191 -:1036A000882361F0E0910E01F0910F019081892B48 -:1036B00080830E94241B81111092C60180910E010B -:1036C00090910F010C94631020E0009739F0AC0149 -:1036D00041505109842395232F5FF7CF822F0895FE -:1036E000CF92DF92EF92FF926C01EE24FF24C1147F -:1036F000D104E104F10421F0C701B60120E101C0C9 -:1037000020E0C72ED82EE92EFF24C114D104E104F5 -:10371000F10419F0285FC701B6016B017C0154E088 -:10372000F694E794D794C7945A95D1F7C114D1046D -:10373000E104F10419F02C5FC701B6016B017C01B3 -:1037400042E0F694E794D794C7944A95D1F7C11410 -:10375000D104E104F10419F02E5FC701B601DC01C8 -:10376000CB01B695A79597958795892B8A2B8B2B9F -:1037700009F02F5F822FFF90EF90DF90CF90089598 -:103780008091F101843021F11092DB0120E488E185 -:1037900090E00FB6F894A895809360000FBE209338 -:1037A000600080E00E94500983B7817F846083BFFE -:1037B00083B7816083BF7894889583B78E7F83BFFA -:1037C00088E10FB6F89480936000109260000FBEFD -:1037D0000895089508950E94E91B0E94B0040E9474 -:1037E000EA1B0E94A50591E0811101C090E0892F9C -:1037F00008950E94F0140E9457100C94500982E022 -:1038000084BD93E095BD9AEF97BD80936E000895B7 -:103810002FB7F8948091DC019091DD01A091DE0139 -:10382000B091DF012FBF0895CF92DF92EF92FF9208 -:103830000F931F932FB7F8944091DC015091DD0155 -:103840006091DE017091DF012FBF6A017B01EE24E0 -:10385000FF248C0120E030E0C016D106E206F3061A -:1038600010F4415051099A01281B390BC9011F91CD -:103870000F91FF90EF90DF90CF9008951F920F92DD -:103880000FB60F9211248F939F93AF93BF938091A4 -:10389000DC019091DD01A091DE01B091DF01019684 -:1038A000A11DB11D8093DC019093DD01A093DE0189 -:1038B000B093DF01BF91AF919F918F910F900FBE99 -:1038C0000F901F9018950E94540DF8942FEF87EADF -:1038D00091E6215080409040E1F700C0000087E071 -:1038E00090EBDC018093FB019093FC01A093FD0120 -:1038F000B093FE019CE088E10FB6F894A895809300 -:1039000060000FBE90936000FFCFEF92FF920F9385 -:103910001F93CF93DF93D82FCDE08C2F0E949E056D -:1039200005E010E0E82EF12CC701002E02C09595AD -:1039300087950A94E2F780FF09C0602F7C2F80E012 -:103940000E946106D81302C081E006C0015011092F -:1039500058F7C15010F780E0DF91CF911F910F9180 -:10396000FF90EF900895CF93C82F8CE20E94851CA2 -:10397000882321F08C2FCF910C94851C80E0CF916F -:103980000895CF930E94081E811102C00E94EE1D6F -:10399000C5E6C15049F00E94B0048FE39CE901974D -:1039A000F1F700C00000F5CF89E20E94B31C81113D -:1039B00013C18AE20E94B31C81110E94EE1D85E0B2 -:1039C0000E94B31C81110E94631C0E94131E8093ED -:1039D000DA0187E00E94B31C8823A9F18BE10E94E1 -:1039E000B31C882351F08091DA0181FB222720F952 -:1039F00091E0922790FB81F90EC08EE00E94B31CEB -:103A0000882361F08091DA0182FB222720F991E07E -:103A1000922790FB82F98093DA0115C080E10E9421 -:103A2000B31C9091DA01882341F093FB222720F9FF -:103A300081E0822780FB93F904C0892F809580FB69 -:103A400090F99093DA018091DA010E94171E0E948A -:103A5000251E8093FA0180EE0E94B31C882341F05A -:103A60008091FA01982F909590FB80F98093FA014C -:103A700089E30E94B31C882359F08091FA0181FBED -:103A8000222720F991E0922790FB81F98093FA0197 -:103A900082EE0E94B31C882359F08091FA0182FBC8 -:103AA000222720F991E0922790FB82F98093FA0176 -:103AB00086EE0E94B31C882359F08091FA0183FBA3 -:103AC000222720F991E0922790FB83F98093FA0155 -:103AD00083EE0E94B31C882359F08091FA0184FB85 -:103AE000222720F991E0922790FB84F98093FA0134 -:103AF00085E30E94B31C882359F08091FA0185FB6D -:103B0000222720F991E0922790FB85F98093FA0112 -:103B100081E30E94B31C882359F08091FA0186FB4F -:103B2000222720F991E0922790FB86F98093FA01F1 -:103B300081E10E94B31C882359F08091FA0187FB30 -:103B4000222720F991E0922790FB87F98093FA01D0 -:103B50008091FA010E94291E8091FA0187FB882733 -:103B600080F980930D0187E20E94B31CC82F8EE17B -:103B70000E94B31C8111C2608FE10E94B31C8111AD -:103B8000C46080E20E94B31C8111C86081E20E947F -:103B9000B31C8111C06182E20E94B31C8111C0621A -:103BA00083E20E94B31C8111C06484E20E94B31CB2 -:103BB000882311F0C06802C0CC2329F08C2F0E940A -:103BC000201E6C2F03C00E941C1E682F70E080E036 -:103BD00090E0CF910C94B018CF9108956DEE7EEFE8 -:103BE00080E090E00E945A2460E082E090E00E9431 -:103BF000482460E083E090E00E94482460E084E094 -:103C000090E00E94482460E085E090E00C94482415 -:103C100080E090E00E94422421E08D3E9E4F09F01A -:103C200020E0822F089582E090E00C943A24682FDF -:103C300082E090E00C94482483E090E00C943A24D5 -:103C4000682F83E090E00C94482484E090E00C948A -:103C50003A24682F84E090E00C9448248091E2019B -:103C600080FF0BC06091130185E0689FB0011124B3 -:103C700075956795759567952BC081FF09C0609113 -:103C8000130185E0689FB00111247595679520C0E8 -:103C900082FF07C06091130185E0689FB001112485 -:103CA00017C09091E3019923D1F06091120196170A -:103CB00088F72091130185E0289F90011124929F9D -:103CC000A001939F500D112470E0CA010E940C24A2 -:103CD0006038710540F46115710539F002C065E086 -:103CE00070E0862F08958FE7089581E00895809110 -:103CF000E20180FF08C06091110170E07595679541 -:103D00007595679521C081FF06C06091110170E033 -:103D10007595679519C082FF04C06091110170E02C -:103D200010C09091E3019923C1F0609110019617A2 -:103D3000A0F780911101899FC001112470E00E94B9 -:103D40000C246038710528F46115710521F0862F67 -:103D500008958FE7089581E0089561E070E0F4CF61 -:103D6000803F21F40E942E1E819504C0813F29F4DA -:103D70000E942E1E8093E6010895823F21F40E9446 -:103D80002E1E819504C0833F29F40E942E1E80932D -:103D9000E5010895893F19F40E94771E05C08A3F06 -:103DA00031F40E94771E81958093E70108958B3F3F -:103DB00021F40E94771E819504C08C3F29F40E9453 -:103DC000771E8093E8010895843F21F48091E401F7 -:103DD000816017C0853F21F48091E401826011C0A9 -:103DE000863F21F48091E40184600BC0873F21F479 -:103DF0008091E401886005C0883F31F48091E4013E -:103E000080618093E40108958D3F21F48091E20167 -:103E100081600BC08E3F21F48091E201826005C079 -:103E20008F3F29F48091E20184608093E20108953C -:103E3000803F39F48091E60187FF6CC01092E60163 -:103E400069C0813F29F48091E6011816BCF362C075 -:103E50009091E501823F29F497FF5CC01092E50143 -:103E600059C0833F19F41916CCF354C0893F41F46B -:103E70008091E70118160CF04DC01092E7014AC07E -:103E80008A3F29F48091E70187FF44C0F6CF8B3F3A -:103E900039F48091E80187FF3DC01092E8013AC0F3 -:103EA0008C3F29F48091E8011816BCF333C0843F9D -:103EB00021F48091E4018E7F17C0853F21F4809129 -:103EC000E4018D7F11C0863F21F48091E4018B7F56 -:103ED0000BC0873F21F48091E401877F05C0883FB4 -:103EE00031F48091E4018F7E8093E40113C08D3F13 -:103EF00021F48091E2018E7F0BC08E3F21F48091EE -:103F0000E2018D7F05C08F3F29F48091E2018B7F14 -:103F10008093E2018091E50181110EC08091E6015C -:103F200081110AC08091E701811106C08091E801EA -:103F3000811102C01092E301089584EE91E00E9485 -:103F40006E100E94081C9093E1018093E001089597 -:103F50001F93CF93DF938091E0019091E1010E9444 -:103F6000141CAC019091E301992321F020911401DC -:103F700030E006C0209115018AE0289F90011124AD -:103F80004217530708F486C08091E501C091E6010D -:103F9000D091E7011091E801811107C0C11176C0ED -:103FA000D11174C0111172C075C09F3F19F09F5F8D -:103FB0009093E301181624F40E942E1E8093E501CD -:103FC0008091E50187FF05C00E942E1E8195809398 -:103FD000E5011C1624F40E942E1E8093E6018091B8 -:103FE000E60187FF05C00E942E1E81958093E601A1 -:103FF0006091E501662339F1C091E601CC2319F106 -:10400000772767FD7095872F972F0E941D2323E345 -:1040100033E343E35FE30E9481230E94EA2260933B -:10402000E5016C2F772767FD7095872F972F0E94EA -:104030001D2323E333E343E35FE30E9481230E94D4 -:10404000EA226093E6011D1624F40E94771E8093F5 -:10405000E7018091E70187FF05C00E94771E8195E7 -:104060008093E701111624F40E94771E8093E801E3 -:104070008091E80187FF05C00E94771E819580939B -:10408000E801DF91CF911F910C949D1F9F3F09F094 -:104090008ECF96CFDF91CF911F910895E4EEF1E09E -:1040A00085E0DF011D928A95E9F71092E3011092F5 -:1040B000E2010895833081F128F4813059F0823093 -:1040C000D1F00895853009F449C0B8F1863009F47B -:1040D00056C0089580911501262F30E0280F311D1C -:1040E0002F3F310524F4680F6093150108958FEF79 -:1040F00080931501089580911401262F30E0280F38 -:10410000311D2F3F310524F4680F60931401089589 -:104110008FEF80931401089580911301262F30E0D2 -:10412000280F311D2F3F310524F4680F60931301D0 -:1041300008958FEF80931301089580911201262F27 -:1041400030E0280F311D2F3F310524F4680F6093B4 -:10415000120108958FEF809312010895809111014B -:10416000262F30E0280F311D2F3F310524F4680F32 -:104170006093110108958FEF80931101089580914C -:104180001001262F30E0280F311D2F3F310524F478 -:10419000680F6093100108958FEF809310010895C8 -:1041A000833011F128F4813049F0823091F0089584 -:1041B000853081F120F18630C1F10895809115019B -:1041C000681720F4861B809315010895109215013D -:1041D000089580911401681720F4861B80931401C0 -:1041E000089510921401089580911301681720F426 -:1041F000861B8093130108951092130108958091F6 -:104200001201681720F4861B809312010895109202 -:104210001201089580911101681720F4861B809384 -:1042200011010895109211010895809110016817ED -:1042300020F4861B809310010895109210010895B8 -:104240000F931F938D3109F46BC008F03FC08E307F -:1042500009F47FC0C0F4873009F469C068F486307F -:1042600009F0B1C08091DA01817F8E7F8093DA01FD -:1042700081E08093EA01A8C0883009F4A2C08B30A5 -:1042800009F49FC0A0C0863109F49BC078F4803146 -:1042900009F472C0813109F096C00E94F014909127 -:1042A0000D0181E0892780930D018BC0893109F4CC -:1042B00088C08B3109F087C08091DA0181FB222709 -:1042C00020F991E0922790FB81F94CC0853309F4E5 -:1042D00070C048F4873209F46CC008F459C08932C0 -:1042E00009F467C070C0833438F48A3308F04EC0D4 -:1042F000883309F466C067C0833409F45AC088342F -:1043000009F061C00E94F0140FEF13ED20E301509B -:1043100010402040E1F700C000000E94631C51C023 -:104320000E94A4220E9457100E9450094AC09091F6 -:10433000DA01892F8095817080FB90F929F09660D1 -:1043400098609093DA0140C0997F977F9093DA014B -:1043500038C08091DA0182FB222720F991E0922770 -:1043600090FB82F98093DA01992359F18091DA0167 -:1043700081608093DA0125C08091DA0183FB2227D6 -:1043800020F991E0922790FB83F9ECCF895301C08B -:104390008D5141E050E060E070E08A019B0104C073 -:1043A000000F111F221F331F8A95D2F7C901B801D0 -:1043B00004C061E070E080E090E00E94B0180E94CC -:1043C000F01481E001C080E01F910F91089580E01A -:1043D000089580E00895CF93C82F8091EA0181303D -:1043E00079F018F08230E9F187C0E0910E01F09188 -:1043F0000F018081813169F0823209F07FC009C0EC -:10440000E0910E01F0910F018081813111F0823233 -:1044100061F48C2F0E94E721811104C08C2F0E942F -:1044200020211DC081E090E01AC08C2F0E94E9215C -:10443000811114C0C43179F048F4CB3079F0C03127 -:1044400009F060C082E08093EA0108C0C93219F027 -:10445000C83321F057C01092EA0154C081E0817046 -:1044600053C0C93289F118F5C43171F1A8F4C730CD -:1044700009F046C08AE08093150194E190931401FD -:1044800093E0909313018093120188E080931101CF -:1044900088E28093100134C0CE51C63088F5EC2FED -:1044A000F0E0E65DFE4F80818093E90129C0CE34C3 -:1044B000E9F020F4CB3421F56AE013C0C13579F07E -:1044C000C235F1F461E00DC08091E901882319F053 -:1044D0001092E90115C081E08093EA0115C061E006 -:1044E00006C08091E9010E945A200AC06AE08091CA -:1044F000E9010E94D02004C01092EA0180E004C0CB -:1045000081E002C080E0ABCFCF910895E1E8F0E018 -:104510008081886080838081816080838FB7F894F8 -:1045200093E09093890090ED909388008FBF089559 -:10453000EFE6F0E08081826080830895EFE6F0E0AE -:1045400080818D7F80830895EFE6F0E0908182E0A6 -:104550008927808308951F920F920FB60F9211241E -:104560002F933F934F935F936F937F938F939F937B -:10457000AF93BF93EF93FF938091EB019091EC0188 -:1045800001969093EC018093EB01811103C082E0CE -:104590000E945009E091EC01E695E695F0E0EB59B8 -:1045A000FA4FE4918091EB018E1303C080E00E94EA -:1045B0005009FF91EF91BF91AF919F918F917F91A2 -:1045C0006F915F914F913F912F910F900FBE0F9080 -:1045D0001F90189504D06894B1118DC0089570D0C3 -:1045E00088F09F5790F0B92F9927B751A0F0D1F0DC -:1045F000660F771F881F991F1AF0BA95C9F712C066 -:10460000B13081F077D0B1E0089574C0672F782F72 -:104610008827B85F39F0B93FCCF3869577956795D1 -:10462000B395D9F73EF490958095709561957F4F3D -:104630008F4F9F4F0895E89409C097FB3EF49095E3 -:104640008095709561957F4F8F4F9F4F9923A9F06B -:10465000F92F96E9BB279395F695879577956795FA -:10466000B795F111F8CFFAF4BB0F11F460FF1BC03E -:104670006F5F7F4F8F4F9F4F16C0882311F096E9D1 -:1046800011C0772321F09EE8872F762F05C066237F -:1046900071F096E8862F70E060E02AF09A95660F38 -:1046A000771F881FDAF7880F9695879597F90895F1 -:1046B00057FD9058440F551F59F05F3F71F04795D3 -:1046C000880F97FB991F61F09F3F79F087950895B8 -:1046D000121613061406551FF2CF4695F1DF08C0D7 -:1046E000161617061806991FF1CF869571056105F4 -:1046F00008940895E894BB2766277727CB0197F99C -:1047000008950BD078C069D028F06ED018F09523AA -:1047100009F05AC05FC01124EECFCADFA0F3959F05 -:10472000D1F3950F50E0551F629FF001729FBB2798 -:10473000F00DB11D639FAA27F00DB11DAA1F649F44 -:104740006627B00DA11D661F829F2227B00DA11DF7 -:10475000621F739FB00DA11D621F839FA00D611D7D -:10476000221F749F3327A00D611D231F849F600D9E -:10477000211D822F762F6A2F11249F5750408AF0D7 -:10478000E1F088234AF0EE0FFF1FBB1F661F771F63 -:10479000881F91505040A9F79E3F510570F014C0FA -:1047A000AACF5F3FECF3983EDCF38695779567954B -:1047B000B795F795E7959F5FC1F7FE2B880F911D81 -:1047C0009695879597F9089597F99F6780E870E027 -:1047D00060E008959FEF80EC089500240A94161677 -:1047E000170618060906089500240A9412161306DF -:1047F000140605060895092E0394000C11F488236D -:1048000052F0BB0F40F4BF2B11F460FF04C06F5F88 -:104810007F4F8F4F9F4F089597FB072E16F40094FC -:1048200007D077FD09D00E94262407FC05D03EF46E -:10483000909581959F4F0895709561957F4F08954C -:10484000EE0FFF1F0590F491E02D0994AA1BBB1BEE -:1048500051E107C0AA1FBB1FA617B70710F0A61B80 -:10486000B70B881F991F5A95A9F780959095BC01A1 -:10487000CD010895F999FECF92BD81BDF89A99278F -:1048800080B50895A8E1B0E042E050E00C946224C5 -:10489000262FF999FECF92BD81BDF89A019700B4F9 -:1048A000021639F01FBA20BD0FB6F894FA9AF99A99 -:1048B0000FBE08950196272F0E9449240C94482486 -:1048C000DC01CB01FC01F999FECF06C0F2BDE1BDD0 -:1048D000F89A319600B40D9241505040B8F70895BF -:0448E000F894FFCF7A -:1048E40020025209E009BD09890955090101C701DE -:1048F40028080A03140A3F4D36392605D904A304AF -:104904006A04FD0316042F04480401020304050687 -:044914000708090087 +:1005600075088100C00011241FBECFEFDAE0DEBFA6 +:10057000CDBF04B603FE24C08091F9019091FA0129 +:10058000A091FB01B091FC018730904BA740B04B8C +:10059000B9F41092F9011092FA011092FB01109235 +:1005A000FC0114BE84B7877F84BF88E10FB6F8943E +:1005B00080936000109260000FBEE0E0FFE30995B9 +:1005C00011E0A0E0B1E0E0E2F8E402C005900D9295 +:1005D000A433B107D9F711E0A4E3B1E001C01D9243 +:1005E000A93FB107E1F70E94F60A0C940E240C947F +:1005F0000000FC016230B9F028F4662341F061305C +:1006000061F023C06330A9F06430C9F01EC082815C +:100610008823D9F088EA91E0089582818823A9F09F +:100620008DE891E008958281882379F084E691E055 +:1006300008958281882349F083E391E008958281BF +:10064000882319F08AE091E0089580E090E0089511 +:1006500008956091BD017091BE018091BF0190919C +:10066000C0010E94511B56985E9825982D98269897 +:100670002E9827982F98813019F0823021F0089514 +:10068000259A2D9A0895269A2E9A08950C94290356 +:1006900056985E9825982D9826982E9827982F98EA +:1006A0008FEF90E0909389008093880090938B0067 +:1006B00080938A0090938D0080938C00259A2D9AC8 +:1006C0002FEF80E792E0215080409040E1F700C09A +:1006D0000000269A2E9A2FEF80E792E0215080406A +:1006E0009040E1F700C00000279A2F9A2FEF80E793 +:1006F00092E0215080409040E1F700C00000259832 +:100700002D982FEF80E792E0215080409040E1F754 +:1007100000C0000026982E982FEF80E792E021502D +:1007200080409040E1F700C0000027982F9856982D +:100730005E9825982D9826982E9827982F9808959A +:1007400089EA8093800089E08093810024982C9826 +:100750003F988AB18F748AB96E98479A8BB1806B33 +:100760008BB9769A0E9448030C94280380E2809308 +:1007700000018091340181110EC00E94050481E0C6 +:10078000809334012FEF83ED90E32150804090401F +:10079000E1F700C0000080E40E940B048093000198 +:1007A00081112EC00E94350480930001811128C060 +:1007B0000E94350480930001811122C08FE30E94C2 +:1007C00035048093000181111BC00E942D0480E438 +:1007D0000E940B0480930001811112C08CE00E94E2 +:1007E00035048093000181110BC00E943504809371 +:1007F0000001811105C08FE30E9435048093000140 +:100800000E942D048091000108951092B9008AE0A1 +:100810008093B800089594EA9093BC009091BC0036 +:1008200097FFFCCF9091B900987F983021F09031DC +:1008300011F081E008958093BB0084E88093BC00B0 +:100840008091BC0087FFFCCF8091B900887F883100 +:1008500011F0803471F780E0089584E98093BC0042 +:100860008091BC0084FDFCCF08958093BB0084E898 +:100870008093BC008091BC0087FFFCCF9091B900B1 +:10088000987F81E0983209F480E0089584E88093AD +:10089000BC008091BC0087FFFCCF8091BB00089515 +:1008A00080910001811115C080E40E940B048093A7 +:1008B000000181110CC082E10E9435048093000187 +:1008C000811105C08FEF0E943504809300010E94C2 +:1008D0002D0484B1807F84B985B1807F85B98AB1C8 +:1008E000837F8AB98BB1837F8BB93E9846980895F0 +:1008F0000E94B603809300010E94500480B38C7064 +:1009000080BB81B3836F81BBA6E3B1E0E4E4F1E097 +:100910008EE08E0F11921D928E13FCCF0C94A003CB +:10092000BF92CF92DF92EF92FF920F931F93CF93DC +:10093000DF9380910001882379F0809135018F5FEA +:1009400080933501811108C00E94B6038093000195 +:10095000811102C00E94480306E311E0C0E0D0E02C +:10096000DD24D39482E0C82EEE24E394F12CC7302A +:10097000D10500F580910001811164C080E40E94DE +:100980000B0480930001811112C082E10E943504A2 +:100990008093000181110BC0C7010C2E01C0880F8C +:1009A0000A94EAF780950E943504809300010E9422 +:1009B0002D0448C0CA30A1F028F4C83059F0C9301D +:1009C00061F005C0CC3089F070F0CD3089F0209A0C +:1009D000289810C0219A29980DC0229A2A980AC0F6 +:1009E000239A2B9807C0529A01C0539A5B9802C071 +:1009F0003E9A469890EA9A95F1F79FB1799902C08C +:100A000082E001C080E091709D25982B7C9902C006 +:100A100084E001C080E0892B7D9902C038E001C0EC +:100A200030E0832B7E9902C020E101C020E0822BC0 +:100A30009FB19095991F9927991F9295990F907E34 +:100A4000892B0FC080910001811149C080E40E9470 +:100A50000B0480930001882379F1B12C0E942D04AE +:100A60008B2DF8019081981719F08083C0920101B5 +:100A70000E94500421960F5F1F4FCE30D10509F020 +:100A800076CF80910101882361F18150809301012B +:100A9000882339F08FE99FE00197F1F700C000004B +:100AA00020C0A4E4B1E0E6E3F1E0CF01825F9191E0 +:100AB0009D938E13FCCF15C083E10E943504809373 +:100AC00000018111CACF81E40E940B0480930001D0 +:100AD0008111C3CF0E944604B82EB094BFCF80E0EE +:100AE000C0CF0E94460381E0DF91CF911F910F910B +:100AF000FF90EF90DF90CF90BF900895E82FF0E047 +:100B0000EC5BFE4F8081089508950F931F93CF9360 +:100B1000DF93C4E4D1E010E00C2F025F899190E0F4 +:100B20000E94451B180F0C13F9CF812FDF91CF9135 +:100B30001F910F91089581E0089581E008950C942C +:100B40009D0508950F931F93CF93DF938C01FC01B4 +:100B5000C081D181CE010E94CA19BE010E944B06FC +:100B6000EC01B8010E949F05882309F48DC0F801AB +:100B70008281882309F44AC080915D0181111FC0E0 +:100B8000C431F0E5DF0709F051C00E94A10581E002 +:100B900080935D010E94121C90935C0180935B0125 +:100BA0001092540110925601109255011092580162 +:100BB0001092570110925A011092590165C080910C +:100BC0005B0190915C010E941E1C883C910570F4B1 +:100BD00080915401E82FF0E0EE0FFF1FEB5AFE4F1B +:100BE000D183C0838F5F809354014EC0C43880E5A9 +:100BF000D80721F0C538D04501F13AC0F80182810B +:100C0000882341F01092520182E01EC0C438E0E512 +:100C1000DE0759F580915201811106C086E20E94DB +:100C2000541186E20E941C1282E01CC0C438F0E518 +:100C3000DF0741F3C538D045D9F4F8018281882314 +:100C400031F01092530180E20E946B121DC080911E +:100C50005301811106C087E20E94541187E20E946D +:100C60001C1280E20E9472120FC0C538D04529F3D1 +:100C700081E08093520180935301C801DF91CF91AD +:100C80001F910F910C949B0580E0DF91CF911F91F4 +:100C90000F910895089596E0799FF001112494E54D +:100CA000899FE00DF11D1124E60FF11DEE0FFF1FCE +:100CB000E154FE4F859194910895880F991FFC018E +:100CC000E55CFF4F859194910895880F991FFC0171 +:100CD000E554FE4F8591949108950F931F93CF9300 +:100CE000DF93EC018115904350F5C11580E2D807E0 +:100CF00008F0C3C0CB3BD10590F4C83AD10508F049 +:100D00006AC0C53AD10508F05BC0C430D10508F00F +:100D1000D0C1219709F0CAC101E010E00AC2CF3F5B +:100D2000D10511F008F0C5C1C03FD10508F0A2C03F +:100D3000CE01805E9109089708F4BBC1B7C1C130EC +:100D400090E5D90709F4A2C020F5C0318FE4D80797 +:100D500070F4C11590E4D90708F094C0C11521E3DF +:100D6000D20708F0A3C1DD278E01106CE2C1C115C6 +:100D7000D04509F09BC10E94D1148FEF94E32CE081 +:100D8000815090402040E1F700C000000E946D1C9F +:100D9000D0C1C11597E5D90758F4C03121E5D20774 +:100DA00008F01CC1C43180E5D80708F475C07EC1C5 +:100DB000CE0190578115904108F078C1DF7073C162 +:100DC000C53AD10509F477C1C63AD10509F076C113 +:100DD00002E810E4AEC1C83AD10509F472C1C93ABB +:100DE000D10509F471C1CA3AD10509F470C1CB3AF1 +:100DF000D10509F46FC1CC3AD10509F46EC1CD3AE1 +:100E0000D10509F46DC1C03BD10509F46CC1CE3ADE +:100E1000D10509F46BC1CF3AD10509F46AC1C13BD0 +:100E2000D10509F469C1C23BD10509F468C1C33BCE +:100E3000D10509F467C1C43BD10509F466C1C53BBE +:100E4000D10509F465C1C63BD10509F464C1C73BAE +:100E5000D10509F463C1C83BD10509F462C1C93B9E +:100E6000D10509F461C1CA3BD10509F460C100E0B4 +:100E700014E45FC18E0110655CC1CE019F700E94B9 +:100E8000650658C1DF708E01106A53C18091DA0186 +:100E900081608093DA014DC10E94121E811102C04F +:100EA0000E94F81D0E942F1E90E09093F9018093FC +:100EB000F801C23080E5D80721F48091F801816003 +:100EC00086C0C43090E5D90721F48091F801826092 +:100ED0007EC0C63020E5D20721F48091F8018460FD +:100EE00076C0C83080E5D80719F48091F80127C092 +:100EF000CA3090E5D90721F48091F801806167C07C +:100F0000CC3020E5D20721F48091F80180625FC0E7 +:100F1000CE3080E5D80721F48091F801806457C075 +:100F2000C03190E5D90721F48091F80180684FC065 +:100F3000C23120E5D20729F48091F80184608860ED +:100F400046C0C33080E5D80721F48091F8018E7F38 +:100F50003EC0C53090E5D90721F48091F8018D7F1E +:100F600036C0C73020E5D20721F48091F8018B7F8D +:100F70002EC0C93080E5D80719F48091F80126C049 +:100F8000CB3090E5D90721F48091F8018F7E1FC006 +:100F9000CD3020E5D20721F48091F8018F7D17C074 +:100FA000CF3080E5D80721F48091F8018F7B0FC006 +:100FB000C13190E5D90721F48091F8018F7707C0FE +:100FC000C331D04531F48091F8018B7F877F8093C6 +:100FD000F8018091F8010E94331EABC08D2F992734 +:100FE0008F70992781309105D9F49E0123703327A2 +:100FF00002C0880F991F2A95E2F79C688E0144E091 +:10100000000F111F4A95E1F700271370802B912BD9 +:1010100053E0CC0FDD1F5A95E1F7C076DD272FC0D6 +:101020008230910531F4DC2FCC278E01016F106ADC +:1010300080C08330910569F4CE018370992701E067 +:1010400010E002C0000F111F8A95E2F7C8019C68EA +:101050000FC084309105B9F4CE018370992701E067 +:1010600010E002C0000F111F8A95E2F7C8019A68CC +:1010700023E0CC0FDD1F2A95E1F7C07ED7708C01ED +:101080000C2B1D2B56C08530910531F4DC2FCC275D +:101090008E01046F106A4DC0069709F04AC0CF71E7 +:1010A000DD27DC2FCC278E01106243C000E010E06A +:1010B00040C08E013EC001E810E43BC003E810E4EC +:1010C00038C002EE14E435C009EE14E432C00AEE72 +:1010D00014E42FC005EB14E42CC006EB14E429C083 +:1010E00007EB14E426C00CEC14E423C00DEC14E46C +:1010F00020C003E815E41DC00AE815E41AC002E99F +:1011000015E417C004E915E414C001E216E411C0A7 +:1011100003E216E40EC004E216E40BC005E216E496 +:1011200008C006E216E405C007E216E402C00AE2BF +:1011300016E4C801DF91CF911F910F91089596E0B9 +:10114000799FF001112494E5899FE00DF11D112490 +:10115000E60FF11DEE0FFF1FE154FE4F85919491B4 +:10116000803E9105E0F4803C910558F5813391056E +:1011700009F46FC048F48932910509F463C08A32DA +:10118000910509F46DC072C089339105E9F0823888 +:101190009105D1F08533910509F44DC067C0833EB8 +:1011A000910581F138F4803E9105B9F0823E9105B8 +:1011B000D9F05CC0863E910561F1873E9105A1F1B1 +:1011C00055C00E945D0608952091F80120FD02C0DF +:1011D00021FF4CC080EE90E049C08091F80180FF73 +:1011E000F9CF89E390E042C08091F80182FF0EC000 +:1011F0008091F80184FF03C080E090E037C083EE67 +:1012000090E034C08091F80182FFF2CF82EE90E04E +:101210002DC08091F80183FF0BC08091F80184FDFF +:10122000EBCF87EE90E022C08091F80183FFF5CFED +:1012300086EE90E01BC08091F80185FF07C089E22F +:1012400090E014C08091F80185FFF9CF85E390E02C +:101250000DC08091F80186FF07C08AE290E006C0C9 +:101260008091F80186FFF9CF81E390E00E946D063E +:10127000089508950C94390980916E010895CF93D3 +:10128000DF9300D01F92CDB7DEB79C018091EF01B4 +:10129000843019F593E099833B832A839093E90086 +:1012A0008FEF9091E800815095FD06C095ED9A95DD +:1012B000F1F700008111F5CF8091E80085FF0DC0A6 +:1012C00040E050E063E070E0CE0101960E94A00B88 +:1012D0008091E8008E778093E8000F900F900F9038 +:1012E000DF91CF910895CF93DF9300D01F92CDB7B8 +:1012F000DEB72091EF01243021F522E029839B8382 +:101300008A8383E08093E9008FEF9091E800815019 +:1013100095FD06C095ED9A95F1F700008111F5CF86 +:101320008091E80085FF0DC040E050E063E070E090 +:10133000CE0101960E94A00B8091E8008E778093E9 +:10134000E8000F900F900F90DF91CF9108952091BA +:10135000EF012430F1F422E02093E9002FEF3091E7 +:10136000E800215035FD06C035ED3A95F1F7000053 +:101370002111F5CF2091E80025FF0BC040E050E09F +:1013800065E070E00E94A00B8091E8008E7780936A +:10139000E8000895CF93DF93EC019091EF01943032 +:1013A00009F046C080910C018823D9F080910D018D +:1013B0008823B9F09093E9008FEF9091E800815075 +:1013C00095FD06C095E19A95F1F700008111F5CFE2 +:1013D0008091E80085FF2CC040E050E060E170E0C3 +:1013E00017C081E08093E9008FEF9091E800815071 +:1013F00095FD06C095ED9A95F1F700008111F5CFA6 +:101400008091E80085FF14C040E050E068E070E0A3 +:10141000CE010E94A00B8091E8008E778093E800B7 +:1014200080E1FE01AEE5B1E001900D928A95E1F711 +:10143000DF91CF9108958091EE01811109C00E9442 +:10144000350D0E94920D8091E20084608093E2004D +:1014500008951092EE010895089508950C94DA1BF2 +:1014600042E061EC81E00E94AF0C42E061EC82E07E +:101470000E94AF0C42E061EC83E00E94AF0C42E1BD +:1014800061EC84E00C94AF0C8091F101833009F49D +:1014900055C030F4813071F0823009F48EC0089567 +:1014A0008A3009F47AC08B3009F460C0893009F0C1 +:1014B0009CC020C08091F001813A09F096C08091D3 +:1014C000E800877F8093E8008091F4019091F50116 +:1014D000892B21F460E18EE591E003C060E080E0BB +:1014E00090E070E00E94EB0B8091E8008B77809396 +:1014F000E80008958091F001813209F076C0809172 +:10150000F4019091F501009719F0039709F06DC06F +:101510008091E800877F8093E8008091E80082FD59 +:1015200005C08091EF018111F8CF5FC08091F1007B +:1015300080936E018091E8008B7753C08091F00119 +:10154000813A09F052C08091F4019091F501892B04 +:1015500009F04BC08091E800877F8093E80080917C +:10156000E80080FFFCCF80910C0136C08091F00133 +:101570008132D9F58091F4019091F501892BA9F57B +:101580008091E800877F8093E8000E94E40C8091BE +:10159000F20180930C010C94D1148091F0018132FE +:1015A00021F58091E800877F8093E8000E94E40C99 +:1015B0008091F30180936F0108958091F001813A49 +:1015C000A1F48091E800877F8093E8008091E80093 +:1015D00080FFFCCF80916F018093F1008091E80043 +:1015E0008E778093E8000C94E40C089584B7877F8D +:1015F00084BF88E10FB6F894809360001092600079 +:101600000FBE90E080E80FB6F8948093610090934D +:1016100061000FBE0E9487100E94350D0E94920D3E +:101620008091E20084608093E20078940E94181018 +:101630000E94891082E091E00E9433108091EF01B6 +:10164000853069F40E94A11B8091ED018823B1F3DC +:101650000E94CC1B882391F30E948A0BEFCF0E943B +:101660008F10ECCF292F332723303105C9F064F4D4 +:101670002130310581F02230310509F043C08DE67B +:1016800090E02BEE33E042C021323105F1F02232FE +:10169000310541F137C082E190E028E534E036C001 +:1016A00099278130910541F08230910541F0892BD5 +:1016B00049F5E7EEF3E005C0EFECF3E002C0E7EB3D +:1016C000F3E0849190E09F0121C06430D8F4E62FCC +:1016D000F0E0EE0FFF1FEE5DFE4F2081318189E0CB +:1016E00090E014C0643070F470E0FB01EE0FFF1F57 +:1016F000E65EFE4F20813181FB01EA5EFE4F808174 +:1017000090E004C080E090E020E030E0FA01318316 +:101710002083089580E189BD82E189BD09B400FE7E +:10172000FDCF8091D8008F7D8093D8008091E0001C +:1017300082608093E0008091E00081FDFCCF0895FD +:10174000CF92DF92EF92FF920F931F93CF93DF938D +:10175000EC018B016A010E94030D811133C0C11499 +:10176000D10439F0F60180819181081B190BC80F53 +:10177000D91FE12CF12C0115110519F18091E80018 +:1017800085FD16C08091E8008E778093E800C11433 +:10179000D10449F0F60180819181E80EF91EF182B1 +:1017A000E08285E00FC00E94030D882321F30AC068 +:1017B00089918093F10001501109FFEFEF1AFF0AA0 +:1017C000DACF80E0DF91CF911F910F91FF90EF90E2 +:1017D000DF90CF9008952091F6013091F701261700 +:1017E000370748F06115710539F42091E8002E772C +:1017F0002093E80001C0B90140E061157105A9F12D +:101800002091EF01222309F443C0253009F442C09E +:101810002091E80023FD40C02091E80022FD32C065 +:101820002091E80020FFE9CF4091F3002091F200E1 +:1018300030E0342BFC01CF016115710559F02830DF +:10184000310540F481918093F100615071092F5F5F +:101850003F4FF1CF41E02830310509F040E02091C1 +:10186000E8002E772093E800C8CF4111C9CF0AC005 +:101870008091EF01882361F0853061F08091E8006C +:1018800083FD0AC08091E80082FFF2CF80E00895D6 +:1018900082E0089583E0089581E008952091F601A3 +:1018A0003091F7012617370748F06115710539F4B3 +:1018B0002091E8002E772093E80001C0B901FC01D7 +:1018C00020E06115710591F18091EF01882309F401 +:1018D00040C0853009F43FC08091E80083FD3DC0E1 +:1018E0008091E80082FD2FC08091E80080FFE9CF61 +:1018F0002091F3008091F20090E0922B6115710528 +:1019000059F08830910540F424912093F1003196EC +:10191000615071090196F2CF21E0089709F020E0AB +:101920008091E8008E778093E800CBCF2111CCCF57 +:101930000AC08091EF01882361F0853061F08091C9 +:10194000E80083FD0AC08091E80082FFF2CF80E0CA +:10195000089582E0089583E0089581E00895982F26 +:10196000973058F59093E900981739F07091EC0092 +:101970002091ED005091F00003C0242F762F50E00D +:1019800021FF19C03091EB003E7F3093EB00309186 +:10199000ED003D7F3093ED003091EB0031603093EE +:1019A000EB007093EC002093ED005093F000209139 +:1019B000EE0027FF07C09F5FD3CF8F708093E900B1 +:1019C00081E0089580E008958091F00187FF11C0C3 +:1019D0008091E80082FD05C08091EF018111F8CF70 +:1019E00011C08091E8008B770BC08091EF018823B4 +:1019F00049F08091E80080FFF8CF8091E8008E7771 +:101A00008093E80008952091E4003091E50095E688 +:101A10004091EC00842F817040FF22C08091E8004B +:101A200080FD1CC08091EF01882391F0853091F0FA +:101A30008091EB0085FD10C04091E4005091E500DD +:101A40004217530729F39A01915011F784E0089542 +:101A500082E0089583E0089581E0089580E008958C +:101A60004091E80042FFDECF08950E94A30D0E943E +:101A7000AB0DE0EEF0E0808181608083E8EDF0E086 +:101A800080818F77808319BCA7EDB0E08C918E7F29 +:101A90008C9380818F7E80831092EE0108950F9346 +:101AA0001F93CF93DF930E94A30D0E94AB0DC8ED4F +:101AB000D0E088818F778883888180688883888157 +:101AC0008F7D888319BC1092EF011092EB01109268 +:101AD000ED011092EC0100EE10E0F80180818B7FA7 +:101AE000808388818160888342E060E080E00E949A +:101AF000AF0CE1EEF0E080818E7F8083E2EEF0E0DB +:101B0000808181608083808188608083F80180810A +:101B10008E7F8083888180618883DF91CF911F9140 +:101B20000F910895E8EDF0E080818F7E8083E7EDEE +:101B3000F0E080818160808384E082BF81E08093D7 +:101B4000EE010C944F0DE8EDF0E080818E7F8083F4 +:101B50001092E20008951092DA001092E1000895C8 +:101B60001F920F920FB60F9211242F933F934F9312 +:101B70005F936F937F938F939F93AF93BF93EF93F5 +:101B8000FF938091E10082FF0BC08091E20082FF11 +:101B900007C08091E1008B7F8093E1000E941710C5 +:101BA0008091DA0080FF1FC08091D80080FF1BC0A9 +:101BB0008091DA008E7F8093DA008091D90080FFD7 +:101BC0000DC080E189BD82E189BD09B400FEFDCF71 +:101BD00081E08093EF010E941B0A05C019BC10929E +:101BE000EF010E94290A8091E10080FF19C08091D5 +:101BF000E20080FF15C08091E2008E7F8093E200BA +:101C00008091E20080618093E2008091D800806240 +:101C10008093D80019BC85E08093EF010E942D0AC3 +:101C20008091E10084FF30C08091E20084FF2CC0ED +:101C300080E189BD82E189BD09B400FEFDCF8091BC +:101C4000D8008F7D8093D8008091E1008F7E8093B3 +:101C5000E1008091E2008F7E8093E2008091E200BB +:101C600081608093E2008091EB01882311F084E091 +:101C700007C08091E30087FD02C081E001C083E0DE +:101C80008093EF010E942E0A8091E10083FF29C01A +:101C90008091E20083FF25C08091E100877F8093DF +:101CA000E10082E08093EF011092EB018091E1006E +:101CB0008E7F8093E1008091E2008E7F8093E2002E +:101CC0008091E20080618093E20042E060E080E089 +:101CD0000E94AF0C8091F00088608093F0000E9419 +:101CE0002C0AFF91EF91BF91AF919F918F917F91BE +:101CF0006F915F914F913F912F910F900FBE0F9079 +:101D00001F9018951F920F920FB60F9211242F93C8 +:101D10003F934F935F936F937F938F939F93AF9373 +:101D2000BF93CF93DF93EF93FF93C091E900CF7000 +:101D30008091EC00D82FD17080FDD0E81092E9009E +:101D40008091F000877F8093F00078940E94C60E07 +:101D50001092E9008091F00088608093F000CD2B14 +:101D6000CF70C093E900FF91EF91DF91CF91BF91C8 +:101D7000AF919F918F917F916F915F914F913F9123 +:101D80002F910F900FBE0F901F9018951F93CF9318 +:101D9000DF93CDB7DEB7AA970FB6F894DEBF0FBEBC +:101DA000CDBFE0EFF1E088E08E0F9091F1009193CC +:101DB0008E13FBCF0E94440A8091E80083FF1FC16D +:101DC0008091F0019091F101492F50E04A30510586 +:101DD00008F015C1FA01EA5AFF4F0C94BE2380386F +:101DE00081F0823809F00BC18091F4018F708093EB +:101DF000E9008091EB0085FB882780F91092E900CB +:101E000006C08091EC019091ED019111826090915A +:101E1000E800977F9093E8008093F1001092F10022 +:101E2000C8C0282F2D7F09F0EAC0882319F082301E +:101E300061F0E5C08091F201813009F0E0C093309B +:101E400009F080E08093ED012BC08091F2018111B7 +:101E500027C08091F4018F7009F4D1C08093E9000C +:101E60002091EB0020FF1CC0933021F48091EB0007 +:101E7000806214C09091EB0090619093EB0021E0A0 +:101E800030E0A90102C0440F551F8A95E2F7409344 +:101E9000EA001092EA008091EB0088608093EB00EA +:101EA0001092E9008091E800877F86C08111A7C069 +:101EB0001091F2011F778091E3008078812B80934D +:101EC000E3008091E800877F8093E8000E94E40CA3 +:101ED0008091E80080FFFCCF8091E30080688093D0 +:101EE000E300111102C082E001C083E08093EF01A2 +:101EF00086C08058823008F082C08091F2019091B3 +:101F0000F3018C3D53E0950779F583E08A838AE2FB +:101F100089834FB7F894DE01139620E03EE051E24A +:101F2000E32FF0E050935700E49120FF03C0E295C7 +:101F3000EF703F5FEF708E2F90E0EA3010F0C796A1 +:101F400001C0C0968D939D932F5F243149F74FBFF9 +:101F50008091E800877F8093E8006AE270E0CE011C +:101F600001960E94EB0B14C0AE014F5F5F4F609172 +:101F7000F4010E94320BBC01892B09F440C09091FE +:101F8000E800977F9093E80089819A810E944E0C27 +:101F90008091E8008B778093E80031C0803879F534 +:101FA0008091E800877F8093E8008091EB01809327 +:101FB000F1008091E8008E778093E8000E94E40CA5 +:101FC0001EC081111CC09091F2019230C0F480912A +:101FD000E800877F8093E8009093EB010E94E40C77 +:101FE0008091EB01811106C08091E30087FD02C062 +:101FF00081E001C084E08093EF010E94300A80916B +:10200000E80083FF0AC08091E800877F8093E800A2 +:102010008091EB0080628093EB00AA960FB6F89453 +:10202000DEBF0FBECDBFDF91CF911F910895089500 +:10203000CF938091EF018823A1F0C091E900CF7088 +:102040009091EC00892F817090FD80E8C82B109250 +:10205000E9008091E80083FD0E94C60ECF70C09316 +:10206000E900CF91089590937501809374010895CC +:10207000E0917401F0917501309721F00190F081A9 +:10208000E02D099480E00895E0917401F0917501CC +:10209000309721F00280F381E02D09940895E091BA +:1020A0007401F0917501309721F00480F581E02DE5 +:1020B000099408952091720130917301821793075A +:1020C00071F09093730180937201E0917401F0912B +:1020D0007501309721F00680F781E02D099408956D +:1020E00020917001309171018217930771F09093E4 +:1020F000710180937001E0917401F0917501309746 +:1021000021F00084F185E02D0994089508950C9440 +:1021100086100E94091C0E9478040C94CB1C9F928C +:10212000AF92BF92CF92DF92EF92FF920F931F93E5 +:10213000CF93DF9300D000D000D0CDB7DEB70E94A0 +:1021400090040DE010E0AA24A394B12C902E802FCF +:102150000E947E05980129583E4F6901F901F080DF +:10216000F826A1F40150110988F78FEF89838A833B +:102170001B820E94121C8160782F9D838C83498171 +:102180005A816B818D810E9426112FC09091DA01B6 +:1021900091FF04C08E830E9484058E8125E030E08B +:1021A000A501022E01C0440F0A94EAF7E42E4F2144 +:1021B000C1F029839A828E2191E009F490E09B83FB +:1021C0000E94121C8160782F9D838C8349815A81E3 +:1021D0006B818D810E942611F6018081E826E082C4 +:1021E00004C021503109E0F6BDCF0E94B21F10910A +:1021F00076010E9438101817B9F00E9438108093A9 +:10220000760126960FB6F894DEBF0FBECDBFDF91E4 +:10221000CF911F910F91FF90EF90DF90CF90BF90E3 +:10222000AF909F900C943A0926960FB6F894DEBFB3 +:102230000FBECDBFDF91CF911F910F91FF90EF9017 +:10224000DF90CF90BF90AF909F900895CF93DF9392 +:10225000CDB7DEB72B970FB6F894DEBF0FBECDBF5C +:102260004F83588769877A878B87DE01119686E0CE +:10227000FD0111928A95E9F785E0FE0137960190FC +:102280000D928A95E1F749815A816B817C818D811C +:102290009E810E946F172B960FB6F894DEBF0FBE7B +:1022A000CDBFDF91CF910895CF93882309F4C2C0A9 +:1022B000C82F823859F40E94381081FDBBC089E3D1 +:1022C0000E94491A0E94161B89E30CC0833879F4D6 +:1022D0000E94381080FDAEC083E50E94491A0E941A +:1022E000161B83E50E948B1ACF910C94161B843821 +:1022F00059F40E94381082FD9DC087E40E94491A5B +:102300000E94161B87E4EECF8CEF8C0F813A48F4C5 +:102310008C2F0E94ED2181118DC08C2F0E94491AB3 +:10232000E3CF80E28C0F883048F4C77081E001C0B1 +:10233000880FCA95EAF70E94CF1AD6CF8BE58C0F8B +:10234000833078F4C53A29F0C63A31F083E890E05A +:1023500005C081E890E002C082E890E0CF910C9443 +:102360005A1088E58C0F833108F064C0C83A39F1FF +:10237000C93A41F1CA3A49F1CB3A51F1CC3A59F153 +:10238000CD3A61F1C03B69F1CE3A71F1CF3A79F1C2 +:10239000C13B81F1C23B89F1C33B91F1C43B99F14F +:1023A000C53BA1F1C63BA9F1C73BB1F1C83BB9F1AF +:1023B000C93BC1F1CA3BC9F180E090E038C082EE70 +:1023C00090E035C089EE90E032C08AEE90E02FC0F8 +:1023D00085EB90E02CC086EB90E029C087EB90E085 +:1023E00026C08CEC90E023C08DEC90E020C083E808 +:1023F00091E01DC08AE891E01AC082E991E017C01F +:1024000084E991E014C081E292E011C083E292E09D +:102410000EC084E292E00BC085E292E008C086E242 +:1024200092E005C087E292E002C08AE292E0CF919A +:102430000C947010CF910895882309F44BC0823812 +:1024400059F40E94381081FF45C089E30E94491A5F +:102450000E94161B89E30CC0833871F40E94381067 +:1024600080FF38C083E50E94491A0E94161B83E54D +:102470000E948B1A0C94161B843859F40E94381051 +:1024800082FF28C087E40E94491A0E94161B87E435 +:10249000EFCF9CEF980F913A58F390E2980F983055 +:1024A00050F4877091E001C0990F8A95EAF7892F5F +:1024B0000E94D51ADFCF9BE5980F933020F480E07F +:1024C00090E00C945A10885A833120F480E090E018 +:1024D0000C9470100895882321F00E94CF1A0C9458 +:1024E000161B0895882321F00E94D51A0C94161B00 +:1024F00008957F928F929F92AF92BF92CF92DF9278 +:10250000EF92FF920F931F93CF93DF931F92CDB75C +:10251000DEB77C01C62E772EFC01058102950F7077 +:10252000128111110E94EC1A0E94421A882379F03C +:10253000112369F080E28C0D883048F082E00E941F +:102540002B1A0E94421A91E0D82ED92601C0D12C14 +:10255000E72DE295EF70F0E0E05AFF4F0C94BE23B8 +:10256000872D807F072D0F70882311F00295007F43 +:10257000112389F0002309F490C180E28C0D88308A +:1025800020F4802F0E94CF1A03C0802F0E94DF1AF0 +:102590000E94161B82C18C2D0E941C12002309F47C +:1025A00095C180E28C0D883020F4802F0E94D51ACE +:1025B00003C0802F0E94E51A0E94161B87C1972D29 +:1025C000907F872D8F70903211F08295807FCC2084 +:1025D00021F0F1E0CF16B1F01EC0112349F0002325 +:1025E00009F414C1013009F011C10E94FF1A6EC133 +:1025F000002319F0013009F469C189830E94021B8C +:1026000089810AC1112321F0023008F05FC1FEC0A8 +:1026100001115CC101C1112321F0002309F4F6C0AE +:102620003CC1002309F4F8C03EC1872D86958695EC +:10263000837090E0009719F0019761F047C1112372 +:1026400021F08C2D972D937002C080E090E00E94C5 +:102650005A103CC1112321F08C2D972D937002C08C +:1026600080E090E00E94701031C18C2D112319F090 +:102670000E94BA1E02C00E94221F0E94A71F26C1EC +:10268000872D837009F052C0111120C18C2D8295C5 +:1026900086958770880F880F9C2D9F70892E912CAE +:1026A000A12CB12C082E04C0880C991CAA1CBB1CA0 +:1026B0000A94D2F7C4FE14C00FE010E020E030E02E +:1026C000B901A80104C0440F551F661F771F8A95E2 +:1026D000D2F7CB01BA01609570958095909503C0B3 +:1026E00060E070E0CB01272D26952695237030E021 +:1026F0002230310569F02330310589F068297929C4 +:102700008A299B292130310571F00E94B718DEC05B +:10271000682979298A299B290E94D318D7C00E9449 +:10272000B718C501B4010E949B18D0C0112319F03D +:10273000872D817001C08695882309F4C7C08C2D30 +:10274000829586958770880F880F9C2D9F70892EA3 +:10275000912CA12CB12C082E04C0880C991CAA1C09 +:10276000BB1C0A94D2F7C4FE14C00FE010E020E0B6 +:1027700030E0B901A80104C0440F551F661F771F40 +:102780008A95D2F7CB01BA016095709580959095A6 +:1027900003C060E070E0CB01272D269526952370BD +:1027A000422F50E04230510569F04330510589F025 +:1027B000682979298A299B294130510571F00E94A5 +:1027C000911984C0682979298A299B290E94AD1909 +:1027D0007DC00E949119C501B4010E94751976C08F +:1027E0008C2D90E0FC01E05EF109E531F10508F087 +:1027F00050C0E059FF4F0C94BE230C2D0F70872D55 +:102800008F71112331F00E940E19802F0E946B12DC +:102810005DC00E942F19802F0E94721257C0112391 +:1028200039F0011153C0872D8F710E9454194EC089 +:10283000023008F04BC0F7CF112339F0872D8F718C +:102840000E940E1943C01123C9F3872D8F710E9476 +:102850002F193CC0112329F0872D8F710E94F91880 +:1028600035C00E94EF1832C0112351F0172D1F718F +:10287000812F0E940E1963E0812F0E94221A26C028 +:1028800081E00E942B1A023008F182E00E942B1A8C +:102890001DC0112331F0002389F28C2D0E945411A8 +:1028A00015C0002391F28C2D0E941C120FC0472DE1 +:1028B0004F706C2DC7010E94F9020E94131806C0C8 +:1028C000472D4F706C2DC7010E944A06DD20F9F09C +:1028D0000E941E1A80FD1BC0F70112820E94181A66 +:1028E0000E940E19C7010E9496140E94181A0F9098 +:1028F000DF91CF911F910F91FF90EF90DF90CF90DC +:10290000BF90AF909F908F907F900C942F190F9055 +:10291000DF91CF911F910F91FF90EF90DF90CF90BB +:10292000BF90AF909F908F907F9008950F931F93CB +:10293000CF93DF93EC01888199812B813C81232BFC +:10294000B9F09F3F11F48F3F99F0CE010E94A2058C +:10295000882371F0688179818A810E94141A8C0120 +:102960000E94C9190E949018B801CE010E947912E4 +:10297000DF91CF911F910F9108950E94EC1A0E9450 +:10298000FC1A0E94C11A0E94161B0E9458200E9425 +:10299000A71F80E090E00E945A1080E090E00C9425 +:1029A00070100E94DC1A0C94BD140E94091A292F81 +:1029B00022952F7030E02C3031054CF42A3031054F +:1029C0006CF42250310922303105A8F407C02C30B4 +:1029D000310569F02F30310551F00DC0803F69F0AD +:1029E00018F4803E40F409C0843F29F406C093FBEC +:1029F000882780F9089580E0089581E00895CF93B5 +:102A0000DF9300D000D01F92CDB7DEB70F900F90AC +:102A10000F900F900F90DF91CF910895CF93DF9398 +:102A200000D000D000D0CDB7DEB726960FB6F89410 +:102A3000DEBF0FBECDBFDF91CF9108951F93CF931F +:102A4000DF93C091850116E080918601C81799F047 +:102A5000D0E01C9FF0011D9FF00D1124E957FE4F9F +:102A60004081518162817381848195810E940E151C +:102A70002196C770E9CFDF91CF911F9108954091C2 +:102A8000B7015091B8016091B9017091BA0180917C +:102A9000BB019091BC010C940E158091BC018295F4 +:102AA0008F7009F054C08091B901882309F44FC098 +:102AB00080918501A09186016091B7017091B80164 +:102AC0004091BA015091BB01B6E08A1709F43FC0AA +:102AD00090E041155105C1F17F3F11F46F3FA1F125 +:102AE000B89FF001B99FF00D1124E957FE4F2181E5 +:102AF00072132AC02081621327C02281211124C0B1 +:102B0000238134812417350710F421503109241B07 +:102B1000350B283C3105C0F42091BC012F70206199 +:102B20002093BC0126E0289FF001299FF00D11247D +:102B3000E457FE4F80818F708061808387EB91E046 +:102B40000E9496140C941E1501968770BECF0895AE +:102B5000CF92DF92EF92FF920F931F93CF93DF9369 +:102B6000CDB7DEB762970FB6F894DEBF0FBECDBF0C +:102B70008C0185E0F801DE011D9601900D928A9589 +:102B8000E1F7D8014C9111965C91119712966C91D6 +:102B900012971396CD90DC9014973091B7017091F5 +:102BA000B8018091BA019091BB01009709F46BC103 +:102BB0007F3F19F43F3F09F466C1E090B901EE2070 +:102BC00009F4C0C02091BC01C816D90628F0F6014E +:102BD000E81BF90BCF0104C0809590958C0D9D1DCD +:102BE000FF24F394883C910578F0F12C207F09F0C4 +:102BF000C6C07C2DD98AC88A89890E94FF1487EBB8 +:102C000091E00E949614B1C0822F807F09F046C0E7 +:102C1000751314C0341312C0611110C02F702061DD +:102C20002093BC010E943F1587EB91E00E9496140F +:102C30008091BC01D80115968C932EC0CD2819F136 +:102C40005F3F11F44F3FF9F0F62E61111CC08091E7 +:102C500085012091860136E0821709F45AC090E080 +:102C6000389FF001399FF00D1124E957FE4F718113 +:102C7000571306C07081471303C07281711103C0DE +:102C800001968770E9CFF62E662309F418C180916A +:102C9000BC0181608093BC01F12C11C1751308C087 +:102CA000341306C0611104C08091BC01D801C3C0B7 +:102CB0004D875E878D859E856A8B0E94D5146A89B3 +:102CC0008823E1F16623D1F12091BC01822F829506 +:102CD0008F7090E0029774F08091B7019091B801E5 +:102CE00098878F831986DB86CA862C87CE01079644 +:102CF0000E94961486E0F801A7EBB1E001900D92D6 +:102D00008A95E1F70E944D150E943F15FF24F39428 +:102D1000D6C04D875E878D859E850E94091A292F12 +:102D200022952F7030E0223031050CF0BCC09F702E +:102D300009F0B6C0805E883008F4C1C0C8010E94A6 +:102D40009614E4CFC816D90608F453C0F601E81B60 +:102D5000F90BCF01883C910508F450C0F12C7C2D73 +:102D6000D98AC88A89890E94FF14E7EBF1E086E0DE +:102D7000DF011D928A95E9F70E943F15A0C07513E7 +:102D800014C0341312C0611110C08091BC01F8014D +:102D90008583C8010E94961486E0E7EBF1E0DF012D +:102DA0001D928A95E9F7FE2C8AC04D875E878D8536 +:102DB0009E856A8B0E94D5146A89882309F4BECF48 +:102DC000662309F4BBCF2091BC01822F82958F70BE +:102DD00090E002970CF48ECF8091B7019091B801EA +:102DE0009A8389831B82DD82CC822E83CE01019659 +:102DF0007FCF809590958C0D9D1DACCFF62E6623D0 +:102E000009F49CCF75132EC034132CC02091BC0143 +:102E100020FD1FC0822F82958F70D9F0D8011596A2 +:102E20002C9315978F3049F08F5F982F9295907F54 +:102E3000822F8F70892B15968C93C8010E9496144F +:102E400086E0F801A7EBB1E001900D928A95E1F7D9 +:102E500093CF86E0F801A7EBB1E001900D928A953F +:102E6000E1F72DC04D875E878D859E850E94D51424 +:102E7000811140CF8091BC0181608093BC01C80169 +:102E80000E9496141CC0662309F458CF4D875E87B4 +:102E90008D859E850E94D514882309F44FCF2ACFB3 +:102EA000811148CF0CC0243031050CF047CF9F7002 +:102EB00009F440CFF8019581907F09F03BCF8F2D29 +:102EC00062960FB6F894DEBF0FBECDBFDF91CF91F3 +:102ED0001F910F91FF90EF90DF90CF9008951F9377 +:102EE000CF93DF93CDB7DEB72C970FB6F894DEBF44 +:102EF0000FBECDBF4F83588769877A878B879C87A2 +:102F0000CE0107960E94A815882369F08F819885C5 +:102F10002A853B85232BF1F19F3F09F063C08F3F4A +:102F200009F060C037C086E0FE013796DE011196D9 +:102F300001900D928A95E1F76F817885EA85FB858E +:102F4000309741F17F3F11F46F3F21F120918601CD +:102F500030E0C9010196877099274091850150E0C2 +:102F60008417950709F447C069837A83FD83EC834E +:102F700096E0929FD001939FB00D1124A957BE4FA8 +:102F8000FE01319601900D929A95E1F780938601AA +:102F90000E941E1516E08091850190918601891787 +:102FA000C1F1189FC001112489579E4F0E94A81596 +:102FB000882379F1E09185011E9FF0011124E957E2 +:102FC000FE4F4081518162817381848195810E948D +:102FD0000E158091850190E0019687709927809366 +:102FE0008501D9CF4F81588569857A858B859C85E8 +:102FF0000E940E15CFCF0E94D1141092860110921C +:103000008501E7EBF1E086E0DF011D928A95E9F7A3 +:10301000C1CF2C960FB6F894DEBF0FBECDBFDF91A7 +:10302000CF911F910895EF92FF920F931F93CF932B +:10303000DF938C01892B09F46CC0F12CEE24E3940E +:10304000E8012196F8018491843740F4843008F037 +:1030500051C0813081F0823019F15BC0853709F4AD +:1030600044C0A8F19CE7980F903708F052C08F77C2 +:103070000E941C1241C00E5F1F4FFE01C49180E2EE +:103080008C0F883048F4C7708E2D01C0880FCA9508 +:10309000EAF70E94EF1A14C08C2F0E9454112DC021 +:1030A0000E5F1F4FFE01C49180E28C0F883058F4F0 +:1030B000C7708E2D01C0880FCA95EAF70E94F51AD5 +:1030C0000E94161B1AC08C2F0E941C1216C00E5F85 +:1030D0001F4FFE01C491CC2381F08FE99FE001973F +:1030E000F1F700C00000C150F6CF0E5F1F4FFE0188 +:1030F000F49003C00E9454118E018F2D882309F48F +:103100009FCFEFE9FFE03197F1F700C00000815059 +:10311000F5CFDF91CF911F910F91FF90EF90089520 +:1031200008956093C1017093C2018093C30190938D +:10313000C4010C94BD140F931F930091C101109111 +:10314000C2012091C3013091C401DC01CB01802B6D +:10315000912BA22BB32B8093C1019093C201A0931A +:10316000C301B093C4011F910F910C94BD140F9330 +:103170001F930091C1011091C2012091C3013091B0 +:10318000C401DC01CB0180239123A223B3238093CC +:10319000C1019093C201A093C301B093C4011F91D8 +:1031A0000F910C94BD140F931F930091C1011091C6 +:1031B000C2012091C3013091C401DC01CB01802701 +:1031C0009127A227B3278093C1019093C201A093B6 +:1031D000C301B093C4011F910F910C94BD141092C0 +:1031E000BD011092BE011092BF011092C0010C945B +:1031F000BD1441E050E060E070E004C0440F551F92 +:10320000661F771F8A95D2F74093BD015093BE0188 +:103210006093BF017093C0010C94BD1441E050E075 +:1032200060E070E004C0440F551F661F771F8A9549 +:10323000D2F78091BD019091BE01A091BF01B091E4 +:10324000C001482B592B6A2B7B2B4093BD01509317 +:10325000BE016093BF017093C0010C94BD1441E0A6 +:1032600050E060E070E004C0440F551F661F771FF8 +:103270008A95D2F740955095609570958091BD01E3 +:103280009091BE01A091BF01B091C0014823592384 +:103290006A237B234093BD015093BE016093BF011D +:1032A0007093C0010C94BD1441E050E060E070E008 +:1032B00004C0440F551F661F771F8A95D2F780916F +:1032C000BD019091BE01A091BF01B091C0014827FE +:1032D00059276A277B274093BD015093BE01609315 +:1032E000BF017093C0010C94BD140F931F93009104 +:1032F000BD011091BE012091BF013091C001DC01E0 +:10330000CB01802B912BA22BB32B8093BD019093EB +:10331000BE01A093BF01B093C0011F910F910C9407 +:10332000BD140F931F930091BD011091BE01209118 +:10333000BF013091C001DC01CB0180239123A22386 +:10334000B3238093BD019093BE01A093BF01B093BE +:10335000C0011F910F910C94BD140F931F93009106 +:10336000BD011091BE012091BF013091C001DC016F +:10337000CB0180279127A227B3278093BD0190938B +:10338000BE01A093BF01B093C0011F910F910C9497 +:10339000BD140895CF92DF92EF92FF920F931F9387 +:1033A000CF93DF938C01C090C101D090C201E09017 +:1033B000C301F090C4018091BD019091BE01A09124 +:1033C000BF01B091C001C82AD92AEA2AFB2ACFE15D +:1033D000D0E0D701C6010C2E04C0B695A7959795ED +:1033E00087950A94D2F780FF06C0B8018C2F0E94FF +:1033F0009F08019721F4219760F780E001C08C2F8E +:10340000DF91CF911F910F91FF90EF90DF90CF90C0 +:103410000895CF93DF93EC010E94CA19BE010E9468 +:103420009F08DF91CF910895CB010E94091A08955A +:103430008091C50185958595859508958091C501F3 +:103440008770089598E0899F90011124262B20937E +:10345000C5010C940E192091C5018095822380939B +:10346000C501982F977069F430E0482F552747FD24 +:1034700050952417350729F08595859585950C94E9 +:103480002F1908959091C501977081E009F480E0AB +:10349000089590910C01992321F090910D019111C3 +:1034A00009C020910E0130910F01F90132969FEF72 +:1034B00040E01FC0982F9695969596959F3050F5B1 +:1034C000E0910E01F0910F01E90FF11D877021E0ED +:1034D00030E0A90102C0440F551F8A95E2F7CA01E6 +:1034E0009181892B818308959F3F39F04F5F4E3042 +:1034F00041F051915813F8CF0DC05111F7CF942FCF +:10350000F5CF9F3F39F0F901E90FF11D97FDFA95CD +:1035100082830895089590910C01992321F0909150 +:103520000D01911109C020910E0130910F01F90197 +:103530003296205F3F4F1FC0982F9695969596958F +:103540009F30F0F4E0910E01F0910F01E90FF11DB1 +:10355000877021E030E0A90102C0440F551F8A9511 +:10356000E2F7CA018095918189238183089531967C +:10357000E217F30729F090819813F9CF1082F7CF63 +:10358000089581E090E0E0910E01F0910F01E80FC5 +:10359000F91F1082019680319105A9F70895909145 +:1035A000D901892B8093D901089580959091D901F3 +:1035B00089238093D90108951092D901089590919B +:1035C000D801892B8093D801089580959091D801D6 +:1035D00089238093D80108951092D801089590917D +:1035E000D701892B8093D701089580959091D701B9 +:1035F00089238093D70108951092D701089580936D +:10360000C60108951092C601089580910E0190910F +:103610000F01FC0131969C01205F3F4F80E09191AA +:1036200091118F5FE217F307D1F70895E0910E0132 +:10363000F0910F018091D9018083E0910E01F0910A +:103640000F0190818091D801892B8083E0910E0138 +:10365000F0910F0190818091D701892B8083809117 +:10366000C601882361F0E0910E01F0910F01908175 +:10367000892B80830E94051B81111092C6018091C5 +:103680000E0190910F010C94441020E0009739F046 +:10369000AC0141505109842395232F5FF7CF822F2E +:1036A0000895CF92DF92EF92FF926C01EE24FF24F7 +:1036B000C114D104E104F10421F0C701B60120E1F5 +:1036C00001C020E0C72ED82EE92EFF24C114D1045A +:1036D000E104F10419F0285FC701B6016B017C0118 +:1036E00054E0F694E794D794C7945A95D1F7C1144F +:1036F000D104E104F10419F02C5FC701B6016B019C +:103700007C0142E0F694E794D794C7944A95D1F7A8 +:10371000C114D104E104F10419F02E5FC701B60110 +:10372000DC01CB01B695A79597958795892B8A2BB8 +:103730008B2B09F02F5F822FFF90EF90DF90CF90BF +:1037400008958091EF01843021F11092DB0120E493 +:1037500088E190E00FB6F894A895809360000FBEC2 +:103760002093600080E00E943A0983B7817F8460E3 +:1037700083BF83B7816083BF7894889583B78E7F3A +:1037800083BF88E10FB6F8948093600010926000C8 +:103790000FBE0895089508950E94CA1B0E949004C8 +:1037A0000E94CB1B0E94850591E0811101C090E031 +:1037B000892F08950E94D1140E9438100C943A0960 +:1037C0001F920F920FB60F9211248F939F93AF9376 +:1037D000BF938091DB01811113C08091DC01909136 +:1037E000DD01A091DE01B091DF014196A11DB11D67 +:1037F0008093DC019093DD01A093DE01B093DF01A3 +:10380000BF91AF919F918F910F900FBE0F901F901E +:10381000189582E084BD93E095BD9AEF97BD8093A3 +:103820006E0008952FB7F8948091DC019091DD012E +:10383000A091DE01B091DF012FBF0895CF92DF92FA +:10384000EF92FF920F931F932FB7F8944091DC01F2 +:103850005091DD016091DE017091DF012FBF6A019F +:103860007B01EE24FF248C0120E030E0C016D1065D +:10387000E206F30610F4415051099A01281B390B56 +:10388000C9011F910F91FF90EF90DF90CF900895A5 +:103890001F920F920FB60F9211248F939F93AF93A5 +:1038A000BF938091DC019091DD01A091DE01B09188 +:1038B000DF010196A11DB11D8093DC019093DD0114 +:1038C000A093DE01B093DF01BF91AF919F918F91E3 +:1038D0000F900FBE0F901F9018950E94350DF89411 +:1038E0002FEF87EA91E6215080409040E1F700C039 +:1038F000000087E090EBDC018093F9019093FA01DE +:10390000A093FB01B093FC019CE088E10FB6F89412 +:10391000A895809360000FBE90936000FFCFEF9258 +:10392000FF920F931F93CF93DF93D82FCDE08C2F6F +:103930000E947E0505E010E0E82EF12CC701002E64 +:1039400002C0959587950A94E2F780FF09C0602F21 +:103950007C2F80E00E944B06D81302C081E006C095 +:103960000150110958F7C15010F780E0DF91CF9155 +:103970001F910F91FF90EF900895CF93C82F8CE285 +:103980000E948F1C882321F08C2FCF910C948F1CC8 +:1039900080E0CF910895CF930E94121E811102C042 +:1039A0000E94F81DC5E6C15049F00E9490048FE3C3 +:1039B0009CE90197F1F700C00000F5CF89E20E9471 +:1039C000BD1C811113C18AE20E94BD1C81110E949D +:1039D000F81D85E00E94BD1C81110E946D1C0E9493 +:1039E0001D1E8093DA0187E00E94BD1C8823A9F187 +:1039F0008BE10E94BD1C882351F08091DA0181FB8C +:103A0000222720F991E0922790FB81F90EC08EE0E9 +:103A10000E94BD1C882361F08091DA0182FB22277D +:103A200020F991E0922790FB82F98093DA0115C08A +:103A300080E10E94BD1C9091DA01882341F093FB44 +:103A4000222720F981E0822780FB93F904C0892F87 +:103A5000809580FB90F99093DA018091DA010E94C1 +:103A6000211E0E942F1E8093F80180EE0E94BD1C33 +:103A7000882341F08091F801982F909590FB80F970 +:103A80008093F80189E30E94BD1C882359F080913E +:103A9000F80181FB222720F991E0922790FB81F920 +:103AA0008093F80182EE0E94BD1C882359F080911A +:103AB000F80182FB222720F991E0922790FB82F9FE +:103AC0008093F80186EE0E94BD1C882359F08091F6 +:103AD000F80183FB222720F991E0922790FB83F9DC +:103AE0008093F80183EE0E94BD1C882359F08091D9 +:103AF000F80184FB222720F991E0922790FB84F9BA +:103B00008093F80185E30E94BD1C882359F08091C1 +:103B1000F80185FB222720F991E0922790FB85F997 +:103B20008093F80181E30E94BD1C882359F08091A5 +:103B3000F80186FB222720F991E0922790FB86F975 +:103B40008093F80181E10E94BD1C882359F0809187 +:103B5000F80187FB222720F991E0922790FB87F953 +:103B60008093F8018091F8010E94331E8091F80142 +:103B700087FB882780F980930D0187E20E94BD1C96 +:103B8000C82F8EE10E94BD1C8111C2608FE10E948E +:103B9000BD1C8111C46080E20E94BD1C8111C860FF +:103BA00081E20E94BD1C8111C06182E20E94BD1CA5 +:103BB0008111C06283E20E94BD1C8111C06484E255 +:103BC0000E94BD1C882311F0C06802C0CC2329F0DC +:103BD0008C2F0E942A1E6C2F03C00E94261E682F65 +:103BE00070E080E090E0CF910C949118CF9108950F +:103BF0006DEE7EEF80E090E00E94F82360E082E0CE +:103C000090E00E94E62360E083E090E00E94E623DB +:103C100060E084E090E00E94E62360E085E090E0D0 +:103C20000C94E62380E090E00E94E02321E08D3EAA +:103C30009E4F09F020E0822F089582E090E00C94DE +:103C4000D823682F82E090E00C94E62383E090E094 +:103C50000C94D823682F83E090E00C94E62384E052 +:103C600090E00C94D823682F84E090E00C94E62335 +:103C70008091E20180FF0BC06091130185E0689F95 +:103C8000B001112475956795759567952BC081FFD7 +:103C900009C06091130185E0689FB00111247595FA +:103CA000679520C082FF07C06091130185E0689F7F +:103CB000B001112417C09091E3019923D1F06091D4 +:103CC0001201961788F72091130185E0289F900133 +:103CD0001124929FA001939F500D112470E0CA01FE +:103CE0000E94AA236038710540F46115710539F00E +:103CF00002C065E070E0862F08958FE7089581E0A7 +:103D000008958091E20180FF08C06091110170E088 +:103D1000759567957595679521C081FF06C060917F +:103D2000110170E07595679519C082FF04C060911C +:103D3000110170E010C09091E3019923C1F06091EE +:103D400010019617A0F780911101899FC0011124DD +:103D500070E00E94AA236038710528F4611571058E +:103D600021F0862F08958FE7089581E0089561E09E +:103D700070E0F4CF803F21F40E94381E819504C08A +:103D8000813F29F40E94381E8093E6010895823F06 +:103D900021F40E94381E819504C0833F29F40E94BB +:103DA000381E8093E5010895893F19F40E94811E11 +:103DB00005C08A3F31F40E94811E81958093E701FE +:103DC00008958B3F21F40E94811E819504C08C3F91 +:103DD00029F40E94811E8093E8010895843F21F414 +:103DE0008091E401816017C0853F21F48091E40156 +:103DF000826011C0863F21F48091E40184600BC091 +:103E0000873F21F48091E401886005C0883F31F448 +:103E10008091E40180618093E40108958D3F21F455 +:103E20008091E20181600BC08E3F21F48091E2011C +:103E3000826005C08F3F29F48091E2018460809305 +:103E4000E2010895803F39F48091E60187FF6CC05C +:103E50001092E60169C0813F29F48091E6011816AD +:103E6000BCF362C09091E501823F29F497FF5CC0EA +:103E70001092E50159C0833F19F41916CCF354C0D0 +:103E8000893F41F48091E70118160CF04DC0109263 +:103E9000E7014AC08A3F29F48091E70187FF44C0C7 +:103EA000F6CF8B3F39F48091E80187FF3DC0109237 +:103EB000E8013AC08C3F29F48091E8011816BCF360 +:103EC00033C0843F21F48091E4018E7F17C0853F89 +:103ED00021F48091E4018D7F11C0863F21F480910F +:103EE000E4018B7F0BC0873F21F48091E401877F41 +:103EF00005C0883F31F48091E4018F7E8093E40116 +:103F000013C08D3F21F48091E2018E7F0BC08E3F64 +:103F100021F48091E2018D7F05C08F3F29F48091CB +:103F2000E2018B7F8093E2018091E50181110EC057 +:103F30008091E60181110AC08091E701811106C0DC +:103F40008091E801811102C01092E301089584EE8E +:103F500091E00E944F100E94121C9093E101809307 +:103F6000E00108951F93CF93DF938091E00190913A +:103F7000E1010E941E1CAC019091E301992321F004 +:103F80002091140130E006C0209115018AE0289F9D +:103F9000900111244217530708F486C08091E5016F +:103FA000C091E601D091E7011091E801811107C0AD +:103FB000C11176C0D11174C0111172C075C09F3F7C +:103FC00019F09F5F9093E301181624F40E94381EA5 +:103FD0008093E5018091E50187FF05C00E94381EAE +:103FE00081958093E5011C1624F40E94381E80936D +:103FF000E6018091E60187FF05C00E94381E819589 +:104000008093E6016091E501662339F1C091E601F4 +:10401000CC2319F1772767FD7095872F972F0E9482 +:10402000BB2223E333E343E35FE30E941F230E94A9 +:1040300088226093E5016C2F772767FD7095872FA5 +:10404000972F0E94BB2223E333E343E35FE30E9405 +:104050001F230E9488226093E6011D1624F40E940B +:10406000811E8093E7018091E70187FF05C00E94D0 +:10407000811E81958093E701111624F40E94811E10 +:104080008093E8018091E80187FF05C00E94811EAE +:1040900081958093E801DF91CF911F910C94A71F28 +:1040A0009F3F09F08ECF96CFDF91CF911F9108955A +:1040B000E4EEF1E085E0DF011D928A95E9F71092C8 +:1040C000E3011092E2010895833081F128F48130F8 +:1040D00059F08230D1F00895853009F449C0B8F123 +:1040E000863009F456C0089580911501262F30E0DE +:1040F000280F311D2F3F310524F4680F60931501FF +:1041000008958FEF80931501089580911401262F53 +:1041100030E0280F311D2F3F310524F4680F6093E4 +:10412000140108958FEF8093140108958091130175 +:10413000262F30E0280F311D2F3F310524F4680F62 +:104140006093130108958FEF809313010895809178 +:104150001201262F30E0280F311D2F3F310524F4A6 +:10416000680F6093120108958FEF809312010895F4 +:1041700080911101262F30E0280F311D2F3F31058E +:1041800024F4680F6093110108958FEF809311015B +:10419000089580911001262F30E0280F311D2F3F08 +:1041A000310524F4680F6093100108958FEF809318 +:1041B00010010895833011F128F4813049F08230E4 +:1041C00091F00895853081F120F18630C1F1089594 +:1041D00080911501681720F4861B809315010895BE +:1041E00010921501089580911401681720F4861B20 +:1041F0008093140108951092140108958091130181 +:10420000681720F4861B8093130108951092130100 +:10421000089580911201681720F4861B8093120183 +:10422000089510921201089580911101681720F4E9 +:10423000861B8093110108951092110108958091B9 +:104240001001681720F4861B8093100108951092C6 +:10425000100108950F931F938B3109F475C0A0F5D9 +:104260008E3009F484C0C0F4873009F45BC068F470 +:10427000863009F0AAC08091DA01817F8E7F809319 +:10428000DA0181E08093EA01A1C0883009F496C088 +:104290008B3009F493C099C0813109F472C068F47D +:1042A000803109F092C08091DA0183FB222720F946 +:1042B00091E0922790FB83F950C0863109F47EC0CB +:1042C000893109F47BC081C0853309F479C068F471 +:1042D000873209F475C028F48E3108F476C08D5108 +:1042E0005AC0893209F46CC070C0833438F48A3300 +:1042F00008F050C0883309F461C067C0833409F402 +:104300005FC0883409F061C00E94D1140FEF13ED33 +:1043100020E3015010402040E1F700C000000E945F +:104320006D1C4CC09091DA01892F8095817080FBC3 +:1043300090F929F0966098609093DA0147C0997FD0 +:10434000977F9093DA013AC08091DA0181FB2227AE +:1043500020F991E0922790FB81F98093DA0199236B +:1043600069F18091DA0181608093DA0127C0809140 +:10437000DA0182FB222720F991E0922790FB82F953 +:10438000ECCF0E94D11490910D0181E08927809398 +:104390000D0114C0895341E050E060E070E08A01F3 +:1043A0009B0104C0000F111F221F331F8A95D2F7F3 +:1043B000C901B8010E9491180E94D11481E006C081 +:1043C00061E070E080E090E0F5CF80E01F910F9118 +:1043D000089580E0089580E00895CF93C82F8091DC +:1043E000EA01813079F018F08230E9F187C0E0917C +:1043F0000E01F0910F018081813169F0823209F064 +:104400007FC009C0E0910E01F0910F0180818131E0 +:1044100011F0823261F48C2F0E94E921811104C0D5 +:104420008C2F0E942A211DC081E090E01AC08C2FA1 +:104430000E94EB21811114C0C43179F048F4CB30D3 +:1044400079F0C03109F060C082E08093EA0108C0D1 +:10445000C93219F0C83321F057C01092EA0154C094 +:1044600081E0817053C0C93289F118F5C43171F10E +:10447000A8F4C73009F046C08AE08093150194E1A2 +:104480009093140193E0909313018093120188E0BC +:104490008093110188E28093100134C0CE51C63060 +:1044A00088F5EC2FF0E0E65DFE4F80818093E90116 +:1044B00029C0CE34E9F020F4CB3421F56AE013C0F2 +:1044C000C13579F0C235F1F461E00DC08091E901A8 +:1044D000882319F01092E90115C081E08093EA0168 +:1044E00015C061E006C08091E9010E9464200AC005 +:1044F0006AE08091E9010E94DA2004C01092EA018A +:1045000080E004C081E002C080E0ABCFCF9108958D +:1045100004D06894B1118DC0089570D088F09F5771 +:1045200090F0B92F9927B751A0F0D1F0660F771FFF +:10453000881F991F1AF0BA95C9F712C0B13081F0DF +:1045400077D0B1E0089574C0672F782F8827B85FBF +:1045500039F0B93FCCF3869577956795B395D9F740 +:104560003EF490958095709561957F4F8F4F9F4F4A +:104570000895E89409C097FB3EF490958095709556 +:1045800061957F4F8F4F9F4F9923A9F0F92F96E99F +:10459000BB279395F695879577956795B795F11114 +:1045A000F8CFFAF4BB0F11F460FF1BC06F5F7F4FB1 +:1045B0008F4F9F4F16C0882311F096E911C07723C3 +:1045C00021F09EE8872F762F05C0662371F096E8CC +:1045D000862F70E060E02AF09A95660F771F881F9B +:1045E000DAF7880F9695879597F9089557FD9058B3 +:1045F000440F551F59F05F3F71F04795880F97FBA7 +:10460000991F61F09F3F79F0879508951216130660 +:104610001406551FF2CF4695F1DF08C0161617068F +:104620001806991FF1CF86957105610508940895C4 +:10463000E894BB2766277727CB0197F908950BD01D +:1046400078C069D028F06ED018F0952309F05AC0D0 +:104650005FC01124EECFCADFA0F3959FD1F3950F71 +:1046600050E0551F629FF001729FBB27F00DB11DF6 +:10467000639FAA27F00DB11DAA1F649F6627B00D86 +:10468000A11D661F829F2227B00DA11D621F739F6F +:10469000B00DA11D621F839FA00D611D221F749F7D +:1046A0003327A00D611D231F849F600D211D822FC4 +:1046B000762F6A2F11249F5750408AF0E1F088230B +:1046C0004AF0EE0FFF1FBB1F661F771F881F915018 +:1046D0005040A9F79E3F510570F014C0AACF5F3F2C +:1046E000ECF3983EDCF3869577956795B795F7954B +:1046F000E7959F5FC1F7FE2B880F911D96958795D3 +:1047000097F9089597F99F6780E870E060E0089551 +:104710009FEF80EC089500240A94161617061806D9 +:104720000906089500240A941216130614060506B5 +:104730000895092E0394000C11F4882352F0BB0F46 +:1047400040F4BF2B11F460FF04C06F5F7F4F8F4FA9 +:104750009F4F089597FB072E16F4009407D077FD1E +:1047600009D00E94C42307FC05D03EF490958195A2 +:104770009F4F0895709561957F4F0895EE0FFF1F2D +:104780000590F491E02D0994AA1BBB1B51E107C0D1 +:10479000AA1FBB1FA617B70710F0A61BB70B881FD1 +:1047A000991F5A95A9F780959095BC01CD01089560 +:1047B000F999FECF92BD81BDF89A992780B50895E9 +:1047C000A8E1B0E042E050E00C940024262FF999D3 +:1047D000FECF92BD81BDF89A019700B4021639F060 +:1047E0001FBA20BD0FB6F894FA9AF99A0FBE089531 +:1047F0000196272F0E94E7230C94E623DC01CB01CE +:10480000FC01F999FECF06C0F2BDE1BDF89A3196E0 +:1048100000B40D9241505040B8F70895F894FFCF7E +:1048200020023C09CA09A70973093F090101C70110 +:1048300028080A03140A3F4D36392605D904A30473 +:104840006A04FD0316042F0448040102030405064C +:04485000070809004C :00000001FF From 6428069eb70f5cc47ac1f3f9acf3daea14fb9097 Mon Sep 17 00:00:00 2001 From: Nathan Sharfi Date: Tue, 31 May 2016 16:45:22 -0700 Subject: [PATCH 120/551] zweihander-osx: Use power instead of eject KC_EJCT isn't the OS X Eject key and won't restart your computer. --- keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c | 4 ++-- keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c index f1a2956b59f..69d08d0e17a 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: Media keys * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | â | + * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_EJCT, + LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, diff --git a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex index 44e4ab0f3f3..270a197afd3 100644 --- a/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex +++ b/keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex @@ -56,7 +56,7 @@ :100370000830082F082C0200000100350A520C50EA :10038000002C00A9004D00350852005100AC00AA15 :100390000019080100510C4F00AB00A8000608012D -:1003A0000001000100010001001B08B0000100AEC7 +:1003A0000001000100010001001B08A5000100AED2 :1003B0000001000100000016034500720067006F95 :1003C0000044006F007800200045005A000000162D :1003D000034500720067006F0044006F0078002042 From 73d890a2c9c34b905cd5e74e7146fdd4578dcb96 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 1 Jun 2016 09:22:47 +0300 Subject: [PATCH 121/551] Fix visualizer sleeping too long The documentation for ugfx gEventWait wait is wrong and the function takes the time in milliseconds, instead of system ticks. This caused the the thread to sleep way too long. It also caused somewhat random sleeping behaviour as the MS2ST function overflows at around 43 seconds sleep. The event source is also now initialized correctly, so that the thread actually can be woken up by events. --- visualizer.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/visualizer.c b/visualizer.c index 0e587221fc7..c240734055e 100644 --- a/visualizer.c +++ b/visualizer.c @@ -25,6 +25,9 @@ SOFTWARE. #include "visualizer.h" #include "config.h" #include +#ifdef PROTOCOL_CHIBIOS +#include "ch.h" +#endif #ifdef LCD_ENABLE #include "gfx.h" @@ -67,7 +70,6 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa status1->suspended == status2->suspended; } -static GSourceHandle layer_changed_event; static bool visualizer_enabled = false; #define MAX_SIMULTANEOUS_ANIMATIONS 4 @@ -185,8 +187,8 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize animation->first_update_of_frame = false; } - int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame; - if ((unsigned)wanted_sleep < *sleep_time) { + systemticks_t wanted_sleep = animation->need_update ? gfxMillisecondsToTicks(10) : (unsigned)animation->time_left_in_frame; + if (wanted_sleep < *sleep_time) { *sleep_time = wanted_sleep; } @@ -345,7 +347,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { GListener event_listener; geventListenerInit(&event_listener); - geventAttachSource(&event_listener, layer_changed_event, 0); + geventAttachSource(&event_listener, (GSourceHandle)¤t_status, 0); visualizer_keyboard_status_t initial_status = { .default_layer = 0xFFFFFFFF, @@ -435,6 +437,16 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { } } dprintf("Update took %d, last delta %d, sleep_time %d\n", update_delta, delta, sleep_time); +#ifdef PROTOCOL_CHIBIOS + // The gEventWait function really takes milliseconds, even if the documentation says ticks. + // Unfortunately there's no generic ugfx conversion from system time to milliseconds, + // so let's do it in a platform dependent way. + + // On windows the system ticks is the same as milliseconds anyway + if (sleep_time != TIME_INFINITE) { + sleep_time = ST2MS(sleep_time); + } +#endif geventEventWait(&event_listener, sleep_time); } #ifdef LCD_ENABLE @@ -473,7 +485,7 @@ void visualizer_init(void) { void update_status(bool changed) { if (changed) { - GSourceListener* listener = geventGetSourceListener(layer_changed_event, NULL); + GSourceListener* listener = geventGetSourceListener((GSourceHandle)¤t_status, NULL); if (listener) { geventSendEvent(listener); } From 5988820c99e18e705ddc38dfa3e3487cf0645c26 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:03:01 -0500 Subject: [PATCH 122/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 70 +++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index 8f6dba45e9a..c556d359907 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,3 +1,73 @@ + +* Keymap + +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space| Bksp |------| |------| Tab |Enter | + * |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| + * `--------------------' `----------------------' + */ + +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ + + # ErgoDox EZ Default Configuration ## Changelog From 521a56f5eb0985debc4729a44006a35f868a6014 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:05:59 -0500 Subject: [PATCH 123/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 44 +++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index c556d359907..da50731aee1 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,28 +1,28 @@ -* Keymap +# Keymap -/* Keymap 0: Basic layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| - * ,------|------|------| |------+--------+------. - * | | | Home | | PgUp | | | - * | Space| Bksp |------| |------| Tab |Enter | - * |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| - * `--------------------' `----------------------' - */ +## Keymap 0: Basic layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + |esc/ctrl| A | S | D | F | G |------| |------| H | J | K | L |; / L2|'/ ctrl | + |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | App | LGui | | Alt |Ctrl/Esc| + ,------|------|------| |------+--------+------. + | | | Home | | PgUp | | | + | Space| Bksp |------| |------| Tab |Enter | + |[ctrl]| [gui]|[Alt] | |[Alt] | [gui] |[ctrl]| + `--------------------' `----------------------' +``` /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. From b43b8bdd17af88231793460006a14f6312635af3 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:20:19 -0500 Subject: [PATCH 124/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index da50731aee1..b382e891678 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -1,6 +1,19 @@ +# Introduction + +## Motivation +I created this keymap in an attempt to optimize my typing experience in text editors and the command-line. + +More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. + +## Changes +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. + +## Caveats +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard][https://github.com/adereth/dactyl-keyboard], which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are +* I have relatively large hands (I guarantee you there's no problem; I guarantee you) # Keymap - ## Keymap 0: Basic layer ``` ,--------------------------------------------------. ,--------------------------------------------------. From c72c9a7375a96e767071209c5bece652afd3788c Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:21:27 -0500 Subject: [PATCH 125/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index b382e891678..fb7aeb64a28 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -9,7 +9,7 @@ More specifically, I wanted to have each modifier key controlled by the thumbs, The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. ## Caveats -I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard][https://github.com/adereth/dactyl-keyboard], which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: +I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: * I use DCS keycaps with SA Row 3 keycaps where the Alt keys are * I have relatively large hands (I guarantee you there's no problem; I guarantee you) From ce5e41d362a0f55b0206d505f752aff782cb1c21 Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:31:37 -0500 Subject: [PATCH 126/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 99 +++++++++++------------ 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index fb7aeb64a28..e23c67df1a3 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -6,12 +6,16 @@ I created this keymap in an attempt to optimize my typing experience in text edi More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line. ## Changes -The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. +The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate. ## Caveats +### Thumb Cluster Range I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because: * I use DCS keycaps with SA Row 3 keycaps where the Alt keys are -* I have relatively large hands (I guarantee you there's no problem; I guarantee you) +* I have relatively large hands (I guarantee you there's no problem - I guarantee you) + +### Dangerous positioning +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtation in which disaster could occur with one fell swoop of a keypress. # Keymap ## Keymap 0: Basic layer @@ -36,58 +40,53 @@ I've heard many complaints about the thumb clusters. I agree that the three outt `--------------------' `----------------------' ``` -/* Keymap 1: Symbol Layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ +## Keymap 1: Symbol Layer +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | . | 0 | = | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' +``` +## Keymap 2: Media and mouse keys +``` + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | | | | | | | | | | | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | MsUp | | | | | | | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | | | | Prev | Next | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | |VolUp |VolDn | Mute | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | | |Brwser| + | | |------| |------| |Back | + | | | | | | | | + `--------------------' `--------------------' +``` # ErgoDox EZ Default Configuration -## Changelog - -* Feb 2, 2016 (V1.1): - * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows). - -This is what we ship with out of the factory. :) The image says it all: +As of Feb 2, 2016, the default ErgoDox EZ keymap is: ![Default](default_highres.png) From aea8d4371605600c9cbb224e7aac8a3f2bc7622c Mon Sep 17 00:00:00 2001 From: Mazin Bokhari Date: Wed, 22 Jun 2016 21:32:51 -0500 Subject: [PATCH 127/551] Update readme.md --- keyboard/ergodox_ez/keymaps/maz/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/maz/readme.md b/keyboard/ergodox_ez/keymaps/maz/readme.md index e23c67df1a3..0de7d3646ac 100644 --- a/keyboard/ergodox_ez/keymaps/maz/readme.md +++ b/keyboard/ergodox_ez/keymaps/maz/readme.md @@ -15,7 +15,7 @@ I've heard many complaints about the thumb clusters. I agree that the three outt * I have relatively large hands (I guarantee you there's no problem - I guarantee you) ### Dangerous positioning -I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtation in which disaster could occur with one fell swoop of a keypress. +I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress. # Keymap ## Keymap 0: Basic layer From 132c04746910f7230b63ed33717c4ed65599ed1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=ADaz-Jorge?= Date: Sat, 2 Jul 2016 10:26:04 +0200 Subject: [PATCH 128/551] Fix for '~' in spanish layout --- quantum/keymap_extras/keymap_spanish.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h index 512d8a374b2..af76e39fcb6 100644 --- a/quantum/keymap_extras/keymap_spanish.h +++ b/quantum/keymap_extras/keymap_spanish.h @@ -49,7 +49,7 @@ #define ES_PIPE ALGR(KC_1) #define ES_AT ALGR(KC_2) #define ES_HASH ALGR(KC_3) -#define ES_TILD ALGR(KC_4) +#define ES_TILD ALGR(ES_NTIL) #define ES_EURO ALGR(KC_5) #define ES_NOT ALGR(KC_6) @@ -59,4 +59,4 @@ #define ES_LCBR ALGR(ES_ACUT) #define ES_RCRB ALGR(ES_CCED) -#endif \ No newline at end of file +#endif From 8149924399cf3d31d80444a10477a29f53a4990e Mon Sep 17 00:00:00 2001 From: Joshua Colbeck Date: Sun, 3 Jul 2016 12:24:44 -0500 Subject: [PATCH 129/551] Changed layout of left hand main layer --- keyboards/ergodox_ez/keymaps/default/keymap.c | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c index b48a54a43f6..cbf80c40824 100644 --- a/keyboards/ergodox_ez/keymaps/default/keymap.c +++ b/keyboards/ergodox_ez/keymaps/default/keymap.c @@ -10,18 +10,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * | LShift | Z | X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * | WIN |AltShf| \ | LALT | LCTL | | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | App | LGui | | Alt |Ctrl/Esc| + * | App | LALT | | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space|Backsp|------| |------| Tab |Enter | @@ -32,12 +32,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, - ALT_T(KC_APP), KC_LGUI, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB), + KC_LGUI, LALT(KC_LSFT),KC_BSLS,KC_LALT,KC_LCTL, + CTL_T(KC_APP), KC_LALT, KC_HOME, KC_SPC,KC_BSPC,KC_END, // right hand From 62a92a71d05da1473a6cdf23904fc8b377d76317 Mon Sep 17 00:00:00 2001 From: Josh Colbeck Date: Sun, 3 Jul 2016 21:50:04 -0500 Subject: [PATCH 130/551] Revert "Changed layout of left hand main layer" This reverts commit 8149924399cf3d31d80444a10477a29f53a4990e. --- keyboards/ergodox_ez/keymaps/default/keymap.c | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c index cbf80c40824..b48a54a43f6 100644 --- a/keyboards/ergodox_ez/keymaps/default/keymap.c +++ b/keyboards/ergodox_ez/keymaps/default/keymap.c @@ -10,18 +10,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | ESC | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | + * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | WIN |AltShf| \ | LALT | LCTL | | Up | Down | [ | ] | ~L1 | + * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | App | LALT | | Alt |Ctrl/Esc| + * | App | LGui | | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space|Backsp|------| |------| Tab |Enter | @@ -32,12 +32,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB), - KC_LGUI, LALT(KC_LSFT),KC_BSLS,KC_LALT,KC_LCTL, - CTL_T(KC_APP), KC_LALT, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPC,KC_BSPC,KC_END, // right hand From 8e88d55bfd7c88cb15845e0c6415e4e892532861 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 4 Jul 2016 11:45:58 -0400 Subject: [PATCH 131/551] reverts #343 for the most part (#474) --- quantum/matrix.c | 310 +++++++++++++++++++--------------- tmk_core/common/avr/suspend.c | 6 +- tmk_core/common/bootmagic.c | 16 +- tmk_core/common/keyboard.c | 109 +++++++----- tmk_core/common/matrix.h | 57 +++---- 5 files changed, 271 insertions(+), 227 deletions(-) diff --git a/quantum/matrix.c b/quantum/matrix.c index a38c13f15b1..09491702552 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -26,32 +26,46 @@ along with this program. If not, see . #include "util.h" #include "matrix.h" -#ifdef MATRIX_HAS_GHOST -# error "The universal matrix.c file cannot be used for this keyboard." -#endif +/* Set 0 if debouncing isn't needed */ +/* + * This constant define not debouncing time in msecs, but amount of matrix + * scan loops which should be made to get stable debounced results. + * + * On Ergodox matrix scan rate is relatively low, because of slow I2C. + * Now it's only 317 scans/second, or about 3.15 msec/scan. + * According to Cherry specs, debouncing time is 5 msec. + * + * And so, there is no sense to have DEBOUNCE higher than 2. + */ #ifndef DEBOUNCING_DELAY # define DEBOUNCING_DELAY 5 #endif +static uint8_t debouncing = DEBOUNCING_DELAY; static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; -/* matrix state */ -#if DIODE_DIRECTION == COL2ROW -static matrix_row_t matrix[MATRIX_ROWS]; -#else -static matrix_col_t matrix[MATRIX_COLS]; -#endif -static int8_t debouncing_delay = -1; -#if DIODE_DIRECTION == COL2ROW -static void toggle_row(uint8_t row); -static matrix_row_t read_cols(void); -#else -static void toggle_col(uint8_t col); -static matrix_col_t read_rows(void); +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#if DIODE_DIRECTION == ROW2COL + static matrix_row_t matrix_reversed[MATRIX_COLS]; + static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS]; #endif +#if MATRIX_COLS > 16 + #define SHIFTER 1UL +#else + #define SHIFTER 1 +#endif + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + __attribute__ ((weak)) void matrix_init_quantum(void) { matrix_init_kb(); @@ -80,10 +94,12 @@ __attribute__ ((weak)) void matrix_scan_user(void) { } +inline uint8_t matrix_rows(void) { return MATRIX_ROWS; } +inline uint8_t matrix_cols(void) { return MATRIX_COLS; } @@ -113,161 +129,179 @@ uint8_t matrix_cols(void) { // } void matrix_init(void) { - /* frees PORTF by setting the JTD bit twice within four cycles */ + // To use PORTF disable JTAG with writing JTD bit twice within four cycles. #ifdef __AVR_ATmega32U4__ MCUCR |= _BV(JTD); MCUCR |= _BV(JTD); #endif - /* initializes the I/O pins */ -#if DIODE_DIRECTION == COL2ROW - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - /* DDRxn */ - _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF); - toggle_row(r); + + // initialize row and col + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; } - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - /* PORTxn */ - _SFR_IO8((col_pins[c] >> 4) + 2) |= _BV(col_pins[c] & 0xF); - } -#else - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - /* DDRxn */ - _SFR_IO8((col_pins[c] >> 4) + 1) |= _BV(col_pins[c] & 0xF); - toggle_col(c); - } - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - /* PORTxn */ - _SFR_IO8((row_pins[r] >> 4) + 2) |= _BV(row_pins[r] & 0xF); - } -#endif + matrix_init_quantum(); } +uint8_t matrix_scan(void) +{ + #if DIODE_DIRECTION == COL2ROW -uint8_t matrix_scan(void) { - static matrix_row_t debouncing_matrix[MATRIX_ROWS]; - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - toggle_row(r); - matrix_row_t state = read_cols(); - if (debouncing_matrix[r] != state) { - debouncing_matrix[r] = state; - debouncing_delay = DEBOUNCING_DELAY; + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + wait_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCING_DELAY; } - toggle_row(r); + unselect_rows(); } - if (debouncing_delay >= 0) { - dprintf("Debouncing delay remaining: %X\n", debouncing_delay); - --debouncing_delay; - if (debouncing_delay >= 0) { - wait_ms(1); - } - else { - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - matrix[r] = debouncing_matrix[r]; + + if (debouncing) { + if (--debouncing) { + wait_us(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; } } } - matrix_scan_quantum(); - return 1; -} - -static void toggle_row(uint8_t row) { - /* PINxn */ - _SFR_IO8((row_pins[row] >> 4)) = _BV(row_pins[row] & 0xF); -} - -static matrix_row_t read_cols(void) { - matrix_row_t state = 0; - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - /* PINxn */ - if (!(_SFR_IO8((col_pins[c] >> 4)) & _BV(col_pins[c] & 0xF))) { - state |= (matrix_row_t)1 << c; - } - } - return state; -} - -matrix_row_t matrix_get_row(uint8_t row) { - return matrix[row]; -} - #else -uint8_t matrix_scan(void) { - static matrix_col_t debouncing_matrix[MATRIX_COLS]; - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - toggle_col(c); - matrix_col_t state = read_rows(); - if (debouncing_matrix[c] != state) { - debouncing_matrix[c] = state; - debouncing_delay = DEBOUNCING_DELAY; + for (uint8_t i = 0; i < MATRIX_COLS; i++) { + select_row(i); + wait_us(30); // without this wait read unstable value. + matrix_row_t rows = read_cols(); + if (matrix_reversed_debouncing[i] != rows) { + matrix_reversed_debouncing[i] = rows; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCING_DELAY; } - toggle_col(c); + unselect_rows(); } - if (debouncing_delay >= 0) { - dprintf("Debouncing delay remaining: %X\n", debouncing_delay); - --debouncing_delay; - if (debouncing_delay >= 0) { - wait_ms(1); - } - else { - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - matrix[c] = debouncing_matrix[c]; + + if (debouncing) { + if (--debouncing) { + wait_us(1); + } else { + for (uint8_t i = 0; i < MATRIX_COLS; i++) { + matrix_reversed[i] = matrix_reversed_debouncing[i]; } } } - matrix_scan_quantum(); - return 1; -} - -static void toggle_col(uint8_t col) { - /* PINxn */ - _SFR_IO8((col_pins[col] >> 4)) = _BV(col_pins[col] & 0xF); -} - -static matrix_col_t read_rows(void) { - matrix_col_t state = 0; - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - /* PINxn */ - if (!(_SFR_IO8((row_pins[r] >> 4)) & _BV(row_pins[r] & 0xF))) { - state |= (matrix_col_t)1 << r; + for (uint8_t y = 0; y < MATRIX_ROWS; y++) { + matrix_row_t row = 0; + for (uint8_t x = 0; x < MATRIX_COLS; x++) { + row |= ((matrix_reversed[x] & (1<> y) << x; } + matrix[y] = row; } - return state; -} - -matrix_row_t matrix_get_row(uint8_t row) { - matrix_row_t state = 0; - matrix_col_t mask = (matrix_col_t)1 << row; - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - if (matrix[c] & mask) { - state |= (matrix_row_t)1 << c; - } - } - return state; -} - #endif -bool matrix_is_modified(void) { - if (debouncing_delay >= 0) return false; + matrix_scan_quantum(); + + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; return true; } -bool matrix_is_on(uint8_t row, uint8_t col) { - return matrix_get_row(row) & (matrix_row_t)1 << col; +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1= 0; --r) { - count += bitpop16(matrix_get_row(r)); + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + count += bitpop16(matrix[i]); } return count; } + +static void init_cols(void) +{ +#if DIODE_DIRECTION == COL2ROW + for(int x = 0; x < MATRIX_COLS; x++) { + int pin = col_pins[x]; +#else + for(int x = 0; x < MATRIX_ROWS; x++) { + int pin = row_pins[x]; +#endif + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); + } +} + +static matrix_row_t read_cols(void) +{ + matrix_row_t result = 0; + +#if DIODE_DIRECTION == COL2ROW + for(int x = 0; x < MATRIX_COLS; x++) { + int pin = col_pins[x]; +#else + for(int x = 0; x < MATRIX_ROWS; x++) { + int pin = row_pins[x]; +#endif + result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (SHIFTER << x); + } + return result; +} + +static void unselect_rows(void) +{ +#if DIODE_DIRECTION == COL2ROW + for(int x = 0; x < MATRIX_ROWS; x++) { + int pin = row_pins[x]; +#else + for(int x = 0; x < MATRIX_COLS; x++) { + int pin = col_pins[x]; +#endif + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); + } +} + +static void select_row(uint8_t row) +{ + +#if DIODE_DIRECTION == COL2ROW + int pin = row_pins[row]; +#else + int pin = col_pins[row]; +#endif + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); +} diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index a6f3c644147..8a7272bbc52 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -114,8 +114,10 @@ bool suspend_wakeup_condition(void) matrix_power_up(); matrix_scan(); matrix_power_down(); - if (matrix_key_count()) return true; - return false; + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { + if (matrix_get_row(r)) return true; + } + return false; } // run immediately after wakeup diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c index 90275a18ba7..6730a2a4aab 100644 --- a/tmk_core/common/bootmagic.c +++ b/tmk_core/common/bootmagic.c @@ -106,13 +106,15 @@ void bootmagic(void) } } -static bool scan_keycode(uint8_t keycode) { - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { +static bool scan_keycode(uint8_t keycode) +{ + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { matrix_row_t matrix_row = matrix_get_row(r); - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - if (matrix_row & (matrix_row_t)1 << c) { - keypos_t key = (keypos_t){ .row = r, .col = c }; - if (keycode == keymap_key_to_keycode(0, key)) return true; + for (uint8_t c = 0; c < MATRIX_COLS; c++) { + if (matrix_row & ((matrix_row_t)1<. #endif #ifdef MATRIX_HAS_GHOST -static bool is_row_ghosting(uint8_t row){ - matrix_row_t state = matrix_get_row(row); - /* no ghosting happens when only one key in the row is pressed */ - if (!(state - 1 & state)) return false; - /* ghosting occurs when two keys in the same column are pressed */ - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - if (r != row && matrix_get_row(r) & state) return true; +static bool has_ghost_in_row(uint8_t row) +{ + matrix_row_t matrix_row = matrix_get_row(row); + // No ghost exists when less than 2 keys are down on the row + if (((matrix_row - 1) & matrix_row) == 0) + return false; + + // Ghost occurs when the row shares column line with other row + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + if (i != row && (matrix_get_row(i) & matrix_row)) + return true; } return false; } - #endif __attribute__ ((weak)) @@ -100,72 +103,86 @@ void keyboard_init(void) { #endif } -/* does routine keyboard jobs */ -void keyboard_task(void) { - static uint8_t led_status; - matrix_scan(); - for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { - static matrix_row_t previous_matrix[MATRIX_ROWS]; - matrix_row_t state = matrix_get_row(r); - matrix_row_t changes = state ^ previous_matrix[r]; - if (changes) { +/* + * Do keyboard routine jobs: scan mantrix, light LEDs, ... + * This is repeatedly called as fast as possible. + */ +void keyboard_task(void) +{ + static matrix_row_t matrix_prev[MATRIX_ROWS]; #ifdef MATRIX_HAS_GHOST - static matrix_row_t deghosting_matrix[MATRIX_ROWS]; - if (is_row_ghosting(r)) { - /* debugs the deghosting mechanism */ - /* doesn't update previous_matrix until the ghosting has stopped - * in order to prevent the last key from being lost + static matrix_row_t matrix_ghost[MATRIX_ROWS]; +#endif + static uint8_t led_status = 0; + matrix_row_t matrix_row = 0; + matrix_row_t matrix_change = 0; + + matrix_scan(); + for (uint8_t r = 0; r < MATRIX_ROWS; r++) { + matrix_row = matrix_get_row(r); + matrix_change = matrix_row ^ matrix_prev[r]; + if (matrix_change) { +#ifdef MATRIX_HAS_GHOST + if (has_ghost_in_row(r)) { + /* Keep track of whether ghosted status has changed for + * debugging. But don't update matrix_prev until un-ghosted, or + * the last key would be lost. */ - if (debug_matrix && deghosting_matrix[r] != state) { + if (debug_matrix && matrix_ghost[r] != matrix_row) { matrix_print(); } - deghosting_matrix[r] = state; + matrix_ghost[r] = matrix_row; continue; } - deghosting_matrix[r] = state; + matrix_ghost[r] = matrix_row; #endif if (debug_matrix) matrix_print(); - for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { - matrix_row_t mask = (matrix_row_t)1 << c; - if (changes & mask) { - keyevent_t event; - event.key = (keypos_t){ .row = r, .col = c }; - event.pressed = state & mask; - /* the time should not be 0 */ - event.time = timer_read() | 1; - action_exec(event); - /* records the processed key event */ - previous_matrix[r] ^= mask; - /* processes one key event per call */ - goto event_processed; + for (uint8_t c = 0; c < MATRIX_COLS; c++) { + if (matrix_change & ((matrix_row_t)1<. #include #include -#if MATRIX_COLS <= 8 -typedef uint8_t matrix_row_t; -#elif MATRIX_COLS <= 16 -typedef uint16_t matrix_row_t; -#elif MATRIX_COLS <= 32 -typedef uint32_t matrix_row_t; + +#if (MATRIX_COLS <= 8) +typedef uint8_t matrix_row_t; +#elif (MATRIX_COLS <= 16) +typedef uint16_t matrix_row_t; +#elif (MATRIX_COLS <= 32) +typedef uint32_t matrix_row_t; #else -# error "There are too many columns." +#error "MATRIX_COLS: invalid value" #endif -#if DIODE_DIRECTION == ROW2COL -# if MATRIX_ROWS <= 8 -typedef uint8_t matrix_col_t; -# elif MATRIX_ROWS <= 16 -typedef uint16_t matrix_col_t; -# elif MATRIX_ROWS <= 32 -typedef uint32_t matrix_col_t; -# else -# error "There are too many rows." -# endif -#endif +#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1< Date: Mon, 4 Jul 2016 17:55:32 +0200 Subject: [PATCH 132/551] fix typos --- doc/keycode.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/keycode.txt b/doc/keycode.txt index 44d7e27cd6a..c1134f9bf2e 100644 --- a/doc/keycode.txt +++ b/doc/keycode.txt @@ -62,7 +62,7 @@ KC_NONUS_HASH KC_NUHS 32 Keyboard Non-US # and ~ KC_SCOLON KC_SCLN 33 Keyboard ; and : KC_QUOTE KC_QUOT 34 Keyboard ‘ and “ KC_GRAVE KC_GRV 35 Keyboard Grave Accent and Tilde -KC_COMMA KC_COMM 36 Keyboard, and < +KC_COMMA KC_COMM 36 Keyboard , and < KC_DOT 37 Keyboard . and > KC_SLASH KC_SLSH 38 Keyboard / and ? KC_CAPSLOCK KC_CAPS 39 Keyboard Caps Lock @@ -92,7 +92,7 @@ KC_LEFT 50 Keyboard LeftArrow1 KC_DOWN 51 Keyboard DownArrow1 KC_UP 52 Keyboard UpArrow1 KC_NUMLOCK KC_NLCK 53 Keypad Num Lock and Clear11 -KC_KP_SLASH KC_PSLS 54 Keypad /1 +KC_KP_SLASH KC_PSLS 54 Keypad / KC_KP_ASTERISK KC_PAST 55 Keypad * KC_KP_MINUS KC_PMNS 56 Keypad - KC_KP_PLUS KC_PPLS 57 Keypad + From eafaba6b532a2f013955599fc7aa5c599e638fd3 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 4 Jul 2016 12:01:10 -0400 Subject: [PATCH 133/551] Improves debounce --- keyboards/ergodox_ez/config.h | 10 ++-------- keyboards/ergodox_ez/matrix.c | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h index 6a391ffb541..2bb56731b27 100644 --- a/keyboards/ergodox_ez/config.h +++ b/keyboards/ergodox_ez/config.h @@ -27,7 +27,7 @@ along with this program. If not, see . #define DEVICE_VER 0x0001 #define MANUFACTURER ErgoDox EZ #define PRODUCT ErgoDox EZ -#define DESCRIPTION t.m.k. keyboard firmware for Ergodox +#define DESCRIPTION QMK keyboard firmware for Ergodox EZ /* key matrix size */ #define MATRIX_ROWS 14 @@ -40,12 +40,6 @@ along with this program. If not, see . #define TAPPING_TOGGLE 1 -#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D0, D5, B5, B6 } - -/* COL2ROW or ROW2COL */ -#define DIODE_DIRECTION COL2ROW - /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST @@ -53,7 +47,7 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 2 +#define DEBOUNCE 5 #define TAPPING_TERM 200 #define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.) diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index b87fddbad7e..1bacff2a5d5 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -179,7 +179,7 @@ uint8_t matrix_scan(void) if (debouncing) { if (--debouncing) { - _delay_ms(1); + _delay_ms(2); } else { for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = matrix_debouncing[i]; From 86a7b060efb6f94115f5b1f6d9e3703aa3d6b392 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 4 Jul 2016 12:13:41 -0400 Subject: [PATCH 134/551] Adds wait to i2c (debounce) --- keyboards/ergodox_ez/matrix.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index 1bacff2a5d5..9c1efa1d05a 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -27,7 +27,7 @@ along with this program. If not, see . #include #include #include -#include +#include "wait.h" #include "action_layer.h" #include "print.h" #include "debug.h" @@ -166,6 +166,7 @@ uint8_t matrix_scan(void) for (uint8_t i = 0; i < MATRIX_ROWS; i++) { select_row(i); + wait_us(30); // without this wait read unstable value. matrix_row_t cols = read_cols(i); if (matrix_debouncing[i] != cols) { matrix_debouncing[i] = cols; @@ -179,7 +180,7 @@ uint8_t matrix_scan(void) if (debouncing) { if (--debouncing) { - _delay_ms(2); + wait_us(1); } else { for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = matrix_debouncing[i]; @@ -267,7 +268,6 @@ static matrix_row_t read_cols(uint8_t row) return data; } } else { - _delay_us(30); // without this wait read unstable value. // read from teensy return (PINF&(1<<0) ? 0 : (1<<0)) | From 1650adf29ab678ccc331e9f1dd48ccd32bd5cc8c Mon Sep 17 00:00:00 2001 From: Josh Colbeck Date: Mon, 4 Jul 2016 12:00:06 -0500 Subject: [PATCH 135/551] Added new keymap --- keyboards/ergodox_ez/keymaps/josh/keymap.c | 191 +++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 keyboards/ergodox_ez/keymaps/josh/keymap.c diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox_ez/keymaps/josh/keymap.c new file mode 100644 index 00000000000..4233f7f69b8 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/josh/keymap.c @@ -0,0 +1,191 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +//macros +#define CRT_SFT_T 100 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / CTL | + * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | WIN | ` | LALT | LCTL |AltShf| |AltShf| Left | Down | Up | Right | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LALT | | Alt | CAPS | + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Delete |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, + KC_LGUI, KC_GRV, KC_LALT,KC_LCTL,LALT(KC_LSFT), + CTL_T(KC_APP), KC_LALT, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + M(CRT_SFT_T), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), + KC_FN1, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, + KC_LALT, KC_CAPS, + KC_PGUP, + KC_PGDN,KC_DEL, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | CALC | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_CALC, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_LEFT, KC_DOWN,KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + case CRT_SFT_T: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(T), END); + } + return MACRO(U(LCTL), U(LSFT), END); + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; From 497b92c3bd3ee480e59d08f2a6fb1b780172681c Mon Sep 17 00:00:00 2001 From: Josh Colbeck Date: Mon, 4 Jul 2016 15:22:13 -0500 Subject: [PATCH 136/551] Added macro and readme macros to for often used eclipse shortcuts --- keyboards/ergodox_ez/keymaps/josh/keymap.c | 50 +++++++++++++-------- keyboards/ergodox_ez/keymaps/josh/readme.md | 8 ++++ 2 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 keyboards/ergodox_ez/keymaps/josh/readme.md diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox_ez/keymaps/josh/keymap.c index 4233f7f69b8..4ad22918231 100644 --- a/keyboards/ergodox_ez/keymaps/josh/keymap.c +++ b/keyboards/ergodox_ez/keymaps/josh/keymap.c @@ -7,21 +7,23 @@ #define MDIA 2 // media keys //macros -#define CRT_SFT_T 100 +#define CTL_SFT_T 100 +#define CTL_SFT_G 101 +#define CTL_ALT_T 102 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | = | 1 | 2 | 3 | 4 | 5 | ESC | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * | = | 1 | 2 | 3 | 4 | 5 | ESC | | M 100| 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P | \ | + * |TAB /Alt| Q | W | E | R | T | Meh | | Meh | Y | U | I | O | P |\ / ALT | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | LCTL | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / CTL | * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | WIN | ` | LALT | LCTL |AltShf| |AltShf| Left | Down | Up | Right | + * | WIN | ` | M 102| M 101|AltShf| |AltShf| Left | Down | Up | Right | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | App | LALT | | Alt | CAPS | @@ -39,12 +41,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, - KC_LGUI, KC_GRV, KC_LALT,KC_LCTL,LALT(KC_LSFT), + KC_LGUI, KC_GRV, M(CTL_ALT_T),M(CTL_SFT_G),LALT(KC_LSFT), CTL_T(KC_APP), KC_LALT, KC_HOME, KC_SPC,KC_BSPC,KC_END, // right hand - M(CRT_SFT_T), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), KC_FN1, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, @@ -145,19 +147,31 @@ const uint16_t PROGMEM fn_actions[] = { const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { + switch(id) { case 0: - if (record->event.pressed) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - break; - case CRT_SFT_T: - if (record->event.pressed) { - return MACRO(D(LCTL), D(LSFT), T(T), END); - } - return MACRO(U(LCTL), U(LSFT), END); - break; - } + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + case CTL_SFT_T: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(T), END); + } + return MACRO(U(LCTL), U(LSFT), END); + break; + case CTL_SFT_G: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(G), END); + } + return MACRO(U(LCTL), U(LSFT), END); + break; + case CTL_ALT_T: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LALT), T(T), END); + } + return MACRO(U(LCTL), U(LALT), END); + break; + } return MACRO_NONE; }; diff --git a/keyboards/ergodox_ez/keymaps/josh/readme.md b/keyboards/ergodox_ez/keymaps/josh/readme.md new file mode 100644 index 00000000000..cee19d47ea0 --- /dev/null +++ b/keyboards/ergodox_ez/keymaps/josh/readme.md @@ -0,0 +1,8 @@ +Layout is based on the default layout that comes on the ergodox infinity. Focused mostly on making ctl and alt easy to reach. I spend most my day working in Eclipse which has just so many 3 key shortcuts. + +* Removed numpad keys from symbol layer (I don't use them) +* Added arrow keys under h, j, k, l on symbol layer. vi movement keys! +* Added a few macros for eclipse hotkeys that I used all the time +* Added calc button on symbol layer +* tap vs hold on tab and \. Gives alt, ctl and shift on both sides of the keyboard + From 94d3159d9dbdf711b830c6d7c5a53324097be0a5 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 4 Jul 2016 22:06:22 -0400 Subject: [PATCH 137/551] correct break/return order for planck and preonic defaults --- keyboards/planck/keymaps/default/keymap.c | 16 ++++++++-------- keyboards/preonic/keymaps/default/keymap.c | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index 9b4b33f8214..5f71ae7d19a 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -197,8 +197,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_QWERTY); } - break; return false; + break; case COLEMAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -206,8 +206,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_COLEMAK); } - break; return false; + break; case DVORAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -215,8 +215,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_DVORAK); } - break; return false; + break; case LOWER: if (record->event.pressed) { layer_on(_LOWER); @@ -225,8 +225,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case RAISE: if (record->event.pressed) { layer_on(_RAISE); @@ -235,8 +235,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); @@ -246,8 +246,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { unregister_code(KC_RSFT); } - break; return false; + break; case PLOVER: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -265,8 +265,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { keymap_config.nkro = 1; eeconfig_update_keymap(keymap_config.raw); } - break; return false; + break; case EXT_PLV: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -274,8 +274,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif layer_off(_PLOVER); } - break; return false; + break; } return true; } diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 6d8ef634dd7..9a957f7ee18 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -191,8 +191,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_QWERTY); } - break; return false; + break; case COLEMAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -200,8 +200,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_COLEMAK); } - break; return false; + break; case DVORAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -209,8 +209,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_DVORAK); } - break; return false; + break; case LOWER: if (record->event.pressed) { layer_on(_LOWER); @@ -219,8 +219,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case RAISE: if (record->event.pressed) { layer_on(_RAISE); @@ -229,8 +229,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); @@ -240,8 +240,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { unregister_code(KC_RSFT); } - break; return false; + break; } return true; }; From 1412076df68ac00f9a00173977d2826603c12ddf Mon Sep 17 00:00:00 2001 From: Smilliam Date: Mon, 4 Jul 2016 19:56:08 -0700 Subject: [PATCH 138/551] Allow Space Cadet state to be canceled by alternate Shift key Allows you to press RSHIFT to cancel the insertion of a "(" when holding down LSHIFT. Alternatively, allows you to press LSHIFT to cancel the insertion of a ")" when holding down RSHIFT. This change enables you to renege from outputting a character should you press a shift key erroneously. --- quantum/quantum.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/quantum/quantum.c b/quantum/quantum.c index d59bd5a3f85..65290338d02 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -162,6 +162,10 @@ bool process_record_quantum(keyrecord_t *record) { register_mods(MOD_BIT(KC_LSFT)); } else { + if (get_mods() & MOD_BIT(KC_RSFT)) { + shift_interrupted[0] = true; + shift_interrupted[1] = true; + } if (!shift_interrupted[0]) { register_code(LSPO_KEY); unregister_code(LSPO_KEY); @@ -178,6 +182,10 @@ bool process_record_quantum(keyrecord_t *record) { register_mods(MOD_BIT(KC_RSFT)); } else { + if (get_mods() & MOD_BIT(KC_LSFT)) { + shift_interrupted[0] = true; + shift_interrupted[1] = true; + } if (!shift_interrupted[1]) { register_code(RSPC_KEY); unregister_code(RSPC_KEY); From 6b0c9cc905c0985f96a80306cf5fe0d6724b28fc Mon Sep 17 00:00:00 2001 From: Smilliam Date: Mon, 4 Jul 2016 19:58:26 -0700 Subject: [PATCH 139/551] fixed indentation. --- quantum/quantum.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 65290338d02..71c3c723ba2 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -162,10 +162,10 @@ bool process_record_quantum(keyrecord_t *record) { register_mods(MOD_BIT(KC_LSFT)); } else { - if (get_mods() & MOD_BIT(KC_RSFT)) { - shift_interrupted[0] = true; - shift_interrupted[1] = true; - } + if (get_mods() & MOD_BIT(KC_RSFT)) { + shift_interrupted[0] = true; + shift_interrupted[1] = true; + } if (!shift_interrupted[0]) { register_code(LSPO_KEY); unregister_code(LSPO_KEY); @@ -182,10 +182,10 @@ bool process_record_quantum(keyrecord_t *record) { register_mods(MOD_BIT(KC_RSFT)); } else { - if (get_mods() & MOD_BIT(KC_LSFT)) { - shift_interrupted[0] = true; - shift_interrupted[1] = true; - } + if (get_mods() & MOD_BIT(KC_LSFT)) { + shift_interrupted[0] = true; + shift_interrupted[1] = true; + } if (!shift_interrupted[1]) { register_code(RSPC_KEY); unregister_code(RSPC_KEY); From b11657d1c8a3360779b6b412806d89ca3175fc5f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 13:48:12 +0300 Subject: [PATCH 140/551] Suprojects for ChibiOS testing --- keyboards/chibios_test/Makefile | 14 ++++ keyboards/chibios_test/chibios_test.c | 1 + keyboards/chibios_test/chibios_test.h | 6 ++ .../config.h | 8 +- .../keymaps/default/keymap.c | 2 +- .../stm32_f072_onekey/Makefile | 11 +-- .../stm32_f072_onekey/bootloader_defs.h | 0 .../stm32_f072_onekey/chconf.h | 0 .../chibios_test/stm32_f072_onekey/config.h | 7 ++ .../stm32_f072_onekey/halconf.h | 0 .../stm32_f072_onekey/led.c | 0 .../stm32_f072_onekey/matrix.c | 0 .../stm32_f072_onekey/mcuconf.h | 0 .../stm32_f072_onekey/stm32_f072_onekey.c | 0 .../stm32_f072_onekey/stm32_f072_onekey.h | 2 +- .../stm32_f103_onekey/Makefile | 14 +--- .../boards/GENERIC_STM32_F103/board.c | 0 .../boards/GENERIC_STM32_F103/board.h | 0 .../boards/GENERIC_STM32_F103/board.mk | 0 .../GENERIC_STM32_F103/mini_stm32_mapping.png | Bin .../boards/maple_mini_mapping.png | Bin .../stm32_f103_onekey/bootloader_defs.h | 0 .../stm32_f103_onekey/chconf.h | 0 .../chibios_test/stm32_f103_onekey/config.h | 6 ++ .../stm32_f103_onekey/flash.sh | 0 .../stm32_f103_onekey/halconf.h | 0 .../ld/STM32F103x8_stm32duino_bootloader.ld | 0 .../stm32_f103_onekey/led.c | 0 .../stm32_f103_onekey/matrix.c | 0 .../stm32_f103_onekey/mcuconf.h | 0 .../stm32_f103_onekey/stm32_f103_onekey.c | 0 .../stm32_f103_onekey/stm32_f103_onekey.h | 2 +- .../teensy_lc_onekey/Makefile | 17 +--- .../teensy_lc_onekey/Makefile.3.0 | 0 .../teensy_lc_onekey/Makefile.3.2 | 0 .../teensy_lc_onekey/chconf.h | 0 .../chibios_test/teensy_lc_onekey/config.h | 6 ++ .../teensy_lc_onekey/halconf.h | 0 .../teensy_lc_onekey/instructions.md | 0 .../teensy_lc_onekey/ld/MKL26Z64.ld | 0 .../{ => chibios_test}/teensy_lc_onekey/led.c | 0 .../teensy_lc_onekey/matrix.c | 0 .../teensy_lc_onekey/mcuconf.h | 0 .../teensy_lc_onekey/teensy_lc_onekey.c | 0 .../teensy_lc_onekey/teensy_lc_onekey.h | 2 +- .../keymaps/default/keymap.c | 25 ------ keyboards/stm32_f103_onekey/config.h | 75 ------------------ keyboards/teensy_lc_onekey/config.h | 75 ------------------ .../teensy_lc_onekey/keymaps/default/keymap.c | 32 -------- 49 files changed, 52 insertions(+), 253 deletions(-) create mode 100644 keyboards/chibios_test/Makefile create mode 100644 keyboards/chibios_test/chibios_test.c create mode 100644 keyboards/chibios_test/chibios_test.h rename keyboards/{stm32_f072_onekey => chibios_test}/config.h (91%) rename keyboards/{stm32_f103_onekey => chibios_test}/keymaps/default/keymap.c (96%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/Makefile (77%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/bootloader_defs.h (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/chconf.h (100%) create mode 100644 keyboards/chibios_test/stm32_f072_onekey/config.h rename keyboards/{ => chibios_test}/stm32_f072_onekey/halconf.h (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/led.c (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/matrix.c (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/mcuconf.h (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/stm32_f072_onekey.c (100%) rename keyboards/{ => chibios_test}/stm32_f072_onekey/stm32_f072_onekey.h (71%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/Makefile (76%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/boards/maple_mini_mapping.png (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/bootloader_defs.h (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/chconf.h (100%) create mode 100644 keyboards/chibios_test/stm32_f103_onekey/config.h rename keyboards/{ => chibios_test}/stm32_f103_onekey/flash.sh (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/halconf.h (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/led.c (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/matrix.c (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/mcuconf.h (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/stm32_f103_onekey.c (100%) rename keyboards/{ => chibios_test}/stm32_f103_onekey/stm32_f103_onekey.h (70%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/Makefile (69%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/Makefile.3.0 (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/Makefile.3.2 (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/chconf.h (100%) create mode 100644 keyboards/chibios_test/teensy_lc_onekey/config.h rename keyboards/{ => chibios_test}/teensy_lc_onekey/halconf.h (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/instructions.md (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/ld/MKL26Z64.ld (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/led.c (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/matrix.c (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/mcuconf.h (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/teensy_lc_onekey.c (100%) rename keyboards/{ => chibios_test}/teensy_lc_onekey/teensy_lc_onekey.h (69%) delete mode 100644 keyboards/stm32_f072_onekey/keymaps/default/keymap.c delete mode 100644 keyboards/stm32_f103_onekey/config.h delete mode 100644 keyboards/teensy_lc_onekey/config.h delete mode 100644 keyboards/teensy_lc_onekey/keymaps/default/keymap.c diff --git a/keyboards/chibios_test/Makefile b/keyboards/chibios_test/Makefile new file mode 100644 index 00000000000..d9f2b8b83ba --- /dev/null +++ b/keyboards/chibios_test/Makefile @@ -0,0 +1,14 @@ +SUBPROJECT_DEFAULT = stm32_f072_onekey + +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration +MOUSEKEY_ENABLE ?= yes # Mouse keys +EXTRAKEY_ENABLE ?= yes # Audio control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= yes # Commands for debug and configuration +SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover +CUSTOM_MATRIX ?= yes # Custom matrix file + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/chibios_test/chibios_test.c b/keyboards/chibios_test/chibios_test.c new file mode 100644 index 00000000000..efe2d4a5d63 --- /dev/null +++ b/keyboards/chibios_test/chibios_test.c @@ -0,0 +1 @@ +#include "chibios_test.h" diff --git a/keyboards/chibios_test/chibios_test.h b/keyboards/chibios_test/chibios_test.h new file mode 100644 index 00000000000..25b03177106 --- /dev/null +++ b/keyboards/chibios_test/chibios_test.h @@ -0,0 +1,6 @@ +#ifndef KEYBOARDS_CHIBIOS_TEST_CHIBIOS_TEST_H_ +#define KEYBOARDS_CHIBIOS_TEST_CHIBIOS_TEST_H_ + +#include "quantum.h" + +#endif /* KEYBOARDS_CHIBIOS_TEST_CHIBIOS_TEST_H_ */ diff --git a/keyboards/stm32_f072_onekey/config.h b/keyboards/chibios_test/config.h similarity index 91% rename from keyboards/stm32_f072_onekey/config.h rename to keyboards/chibios_test/config.h index bb5251e1dec..210f150670d 100644 --- a/keyboards/stm32_f072_onekey/config.h +++ b/keyboards/chibios_test/config.h @@ -26,11 +26,11 @@ along with this program. If not, see . #define DEVICE_VER 0x0001 /* in python2: list(u"whatever".encode('utf-16-le')) */ /* at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER "TMK" +#define MANUFACTURER "QMK" #define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' -#define PRODUCT "ChibiOS TMK test" -#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00' -#define DESCRIPTION "TMK keyboard firmware over ChibiOS" +#define PRODUCT "ChibiOS QMK test" +#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00' +#define DESCRIPTION "QMK keyboard firmware test for ChibiOS" /* key matrix size */ #define MATRIX_ROWS 1 diff --git a/keyboards/stm32_f103_onekey/keymaps/default/keymap.c b/keyboards/chibios_test/keymaps/default/keymap.c similarity index 96% rename from keyboards/stm32_f103_onekey/keymaps/default/keymap.c rename to keyboards/chibios_test/keymaps/default/keymap.c index c3b0f084038..239d70007a3 100644 --- a/keyboards/stm32_f103_onekey/keymaps/default/keymap.c +++ b/keyboards/chibios_test/keymaps/default/keymap.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "stm32_f103_onekey.h" +#include "chibios_test.h" const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {{KC_CAPS}}, // test with KC_CAPS, KC_A, KC_BTLD diff --git a/keyboards/stm32_f072_onekey/Makefile b/keyboards/chibios_test/stm32_f072_onekey/Makefile similarity index 77% rename from keyboards/stm32_f072_onekey/Makefile rename to keyboards/chibios_test/stm32_f072_onekey/Makefile index 24abcb0e09b..eae38c4b2bc 100644 --- a/keyboards/stm32_f072_onekey/Makefile +++ b/keyboards/chibios_test/stm32_f072_onekey/Makefile @@ -36,15 +36,6 @@ ARMV = 6 # Build Options # comment out to disable the options. # -#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file - ifndef QUANTUM_DIR - include ../../Makefile + include ../../../Makefile endif diff --git a/keyboards/stm32_f072_onekey/bootloader_defs.h b/keyboards/chibios_test/stm32_f072_onekey/bootloader_defs.h similarity index 100% rename from keyboards/stm32_f072_onekey/bootloader_defs.h rename to keyboards/chibios_test/stm32_f072_onekey/bootloader_defs.h diff --git a/keyboards/stm32_f072_onekey/chconf.h b/keyboards/chibios_test/stm32_f072_onekey/chconf.h similarity index 100% rename from keyboards/stm32_f072_onekey/chconf.h rename to keyboards/chibios_test/stm32_f072_onekey/chconf.h diff --git a/keyboards/chibios_test/stm32_f072_onekey/config.h b/keyboards/chibios_test/stm32_f072_onekey/config.h new file mode 100644 index 00000000000..bbaf0dc4bfb --- /dev/null +++ b/keyboards/chibios_test/stm32_f072_onekey/config.h @@ -0,0 +1,7 @@ +#ifndef KEYBOARDS_CHIBIOS_TEST_STM32_F072_ONEKEY_CONFIG_H_ +#define KEYBOARDS_CHIBIOS_TEST_STM32_F072_ONEKEY_CONFIG_H_ + +#include "../config.h" + + +#endif /* KEYBOARDS_CHIBIOS_TEST_STM32_F072_ONEKEY_CONFIG_H_ */ diff --git a/keyboards/stm32_f072_onekey/halconf.h b/keyboards/chibios_test/stm32_f072_onekey/halconf.h similarity index 100% rename from keyboards/stm32_f072_onekey/halconf.h rename to keyboards/chibios_test/stm32_f072_onekey/halconf.h diff --git a/keyboards/stm32_f072_onekey/led.c b/keyboards/chibios_test/stm32_f072_onekey/led.c similarity index 100% rename from keyboards/stm32_f072_onekey/led.c rename to keyboards/chibios_test/stm32_f072_onekey/led.c diff --git a/keyboards/stm32_f072_onekey/matrix.c b/keyboards/chibios_test/stm32_f072_onekey/matrix.c similarity index 100% rename from keyboards/stm32_f072_onekey/matrix.c rename to keyboards/chibios_test/stm32_f072_onekey/matrix.c diff --git a/keyboards/stm32_f072_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h similarity index 100% rename from keyboards/stm32_f072_onekey/mcuconf.h rename to keyboards/chibios_test/stm32_f072_onekey/mcuconf.h diff --git a/keyboards/stm32_f072_onekey/stm32_f072_onekey.c b/keyboards/chibios_test/stm32_f072_onekey/stm32_f072_onekey.c similarity index 100% rename from keyboards/stm32_f072_onekey/stm32_f072_onekey.c rename to keyboards/chibios_test/stm32_f072_onekey/stm32_f072_onekey.c diff --git a/keyboards/stm32_f072_onekey/stm32_f072_onekey.h b/keyboards/chibios_test/stm32_f072_onekey/stm32_f072_onekey.h similarity index 71% rename from keyboards/stm32_f072_onekey/stm32_f072_onekey.h rename to keyboards/chibios_test/stm32_f072_onekey/stm32_f072_onekey.h index 1f798c82550..0455ad342fa 100644 --- a/keyboards/stm32_f072_onekey/stm32_f072_onekey.h +++ b/keyboards/chibios_test/stm32_f072_onekey/stm32_f072_onekey.h @@ -1,5 +1,5 @@ #ifndef STM32_F072_ONEKEY_H #define STM32_F072_ONEKEY_H -#include "quantum.h" +#include "chibios_test.h" #endif diff --git a/keyboards/stm32_f103_onekey/Makefile b/keyboards/chibios_test/stm32_f103_onekey/Makefile similarity index 76% rename from keyboards/stm32_f103_onekey/Makefile rename to keyboards/chibios_test/stm32_f103_onekey/Makefile index 5c1793c867b..307ca5b198e 100644 --- a/keyboards/stm32_f103_onekey/Makefile +++ b/keyboards/chibios_test/stm32_f103_onekey/Makefile @@ -46,19 +46,7 @@ ARMV = 7 # /tmk_core/tool/chibios/ch-bootloader-jump.patch #STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 -# Build Options -# comment out to disable the options. -# -#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration -## BOOTMAGIC is not supported on STM32 chips yet. -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -# CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file ifndef QUANTUM_DIR - include ../../Makefile + include ../../../Makefile endif diff --git a/keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c b/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c similarity index 100% rename from keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c rename to keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c diff --git a/keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h b/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h similarity index 100% rename from keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h rename to keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h diff --git a/keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk b/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk similarity index 100% rename from keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk rename to keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk diff --git a/keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png b/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png similarity index 100% rename from keyboards/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png rename to keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png diff --git a/keyboards/stm32_f103_onekey/boards/maple_mini_mapping.png b/keyboards/chibios_test/stm32_f103_onekey/boards/maple_mini_mapping.png similarity index 100% rename from keyboards/stm32_f103_onekey/boards/maple_mini_mapping.png rename to keyboards/chibios_test/stm32_f103_onekey/boards/maple_mini_mapping.png diff --git a/keyboards/stm32_f103_onekey/bootloader_defs.h b/keyboards/chibios_test/stm32_f103_onekey/bootloader_defs.h similarity index 100% rename from keyboards/stm32_f103_onekey/bootloader_defs.h rename to keyboards/chibios_test/stm32_f103_onekey/bootloader_defs.h diff --git a/keyboards/stm32_f103_onekey/chconf.h b/keyboards/chibios_test/stm32_f103_onekey/chconf.h similarity index 100% rename from keyboards/stm32_f103_onekey/chconf.h rename to keyboards/chibios_test/stm32_f103_onekey/chconf.h diff --git a/keyboards/chibios_test/stm32_f103_onekey/config.h b/keyboards/chibios_test/stm32_f103_onekey/config.h new file mode 100644 index 00000000000..de0b906f358 --- /dev/null +++ b/keyboards/chibios_test/stm32_f103_onekey/config.h @@ -0,0 +1,6 @@ +#ifndef KEYBOARDS_CHIBIOS_TEST_STM32_F103_ONEKEY_CONFIG_H_ +#define KEYBOARDS_CHIBIOS_TEST_STM32_F103_ONEKEY_CONFIG_H_ + +#include "../config.h" + +#endif /* KEYBOARDS_CHIBIOS_TEST_STM32_F103_ONEKEY_CONFIG_H_ */ diff --git a/keyboards/stm32_f103_onekey/flash.sh b/keyboards/chibios_test/stm32_f103_onekey/flash.sh similarity index 100% rename from keyboards/stm32_f103_onekey/flash.sh rename to keyboards/chibios_test/stm32_f103_onekey/flash.sh diff --git a/keyboards/stm32_f103_onekey/halconf.h b/keyboards/chibios_test/stm32_f103_onekey/halconf.h similarity index 100% rename from keyboards/stm32_f103_onekey/halconf.h rename to keyboards/chibios_test/stm32_f103_onekey/halconf.h diff --git a/keyboards/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/chibios_test/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld similarity index 100% rename from keyboards/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld rename to keyboards/chibios_test/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld diff --git a/keyboards/stm32_f103_onekey/led.c b/keyboards/chibios_test/stm32_f103_onekey/led.c similarity index 100% rename from keyboards/stm32_f103_onekey/led.c rename to keyboards/chibios_test/stm32_f103_onekey/led.c diff --git a/keyboards/stm32_f103_onekey/matrix.c b/keyboards/chibios_test/stm32_f103_onekey/matrix.c similarity index 100% rename from keyboards/stm32_f103_onekey/matrix.c rename to keyboards/chibios_test/stm32_f103_onekey/matrix.c diff --git a/keyboards/stm32_f103_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h similarity index 100% rename from keyboards/stm32_f103_onekey/mcuconf.h rename to keyboards/chibios_test/stm32_f103_onekey/mcuconf.h diff --git a/keyboards/stm32_f103_onekey/stm32_f103_onekey.c b/keyboards/chibios_test/stm32_f103_onekey/stm32_f103_onekey.c similarity index 100% rename from keyboards/stm32_f103_onekey/stm32_f103_onekey.c rename to keyboards/chibios_test/stm32_f103_onekey/stm32_f103_onekey.c diff --git a/keyboards/stm32_f103_onekey/stm32_f103_onekey.h b/keyboards/chibios_test/stm32_f103_onekey/stm32_f103_onekey.h similarity index 70% rename from keyboards/stm32_f103_onekey/stm32_f103_onekey.h rename to keyboards/chibios_test/stm32_f103_onekey/stm32_f103_onekey.h index e4d0dd9c4f9..89a62b2bbe0 100644 --- a/keyboards/stm32_f103_onekey/stm32_f103_onekey.h +++ b/keyboards/chibios_test/stm32_f103_onekey/stm32_f103_onekey.h @@ -1,4 +1,4 @@ #ifndef STM32_F103_ONEKEY_H #define STM32_F103_ONEKEY_H -#include "quantum.h" +#include "chibios_test.h" #endif diff --git a/keyboards/teensy_lc_onekey/Makefile b/keyboards/chibios_test/teensy_lc_onekey/Makefile similarity index 69% rename from keyboards/teensy_lc_onekey/Makefile rename to keyboards/chibios_test/teensy_lc_onekey/Makefile index 064e618159c..43ea9d82d93 100644 --- a/keyboards/teensy_lc_onekey/Makefile +++ b/keyboards/chibios_test/teensy_lc_onekey/Makefile @@ -44,19 +44,6 @@ MCU = cortex-m0plus # I.e. 6 for Teensy LC; 7 for Teensy 3.x ARMV = 6 -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration -## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) -MOUSEKEY_ENABLE ?= yes # Mouse keys -EXTRAKEY_ENABLE ?= yes # Audio control and System control -CONSOLE_ENABLE ?= yes # Console for debug -COMMAND_ENABLE ?= yes # Commands for debug and configuration -SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend -NKRO_ENABLE ?= yes # USB Nkey Rollover -CUSTOM_MATRIX ?= yes # Custom matrix file - ifndef QUANTUM_DIR - include ../../Makefile -endif + include ../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/teensy_lc_onekey/Makefile.3.0 b/keyboards/chibios_test/teensy_lc_onekey/Makefile.3.0 similarity index 100% rename from keyboards/teensy_lc_onekey/Makefile.3.0 rename to keyboards/chibios_test/teensy_lc_onekey/Makefile.3.0 diff --git a/keyboards/teensy_lc_onekey/Makefile.3.2 b/keyboards/chibios_test/teensy_lc_onekey/Makefile.3.2 similarity index 100% rename from keyboards/teensy_lc_onekey/Makefile.3.2 rename to keyboards/chibios_test/teensy_lc_onekey/Makefile.3.2 diff --git a/keyboards/teensy_lc_onekey/chconf.h b/keyboards/chibios_test/teensy_lc_onekey/chconf.h similarity index 100% rename from keyboards/teensy_lc_onekey/chconf.h rename to keyboards/chibios_test/teensy_lc_onekey/chconf.h diff --git a/keyboards/chibios_test/teensy_lc_onekey/config.h b/keyboards/chibios_test/teensy_lc_onekey/config.h new file mode 100644 index 00000000000..d9eb05d2ac2 --- /dev/null +++ b/keyboards/chibios_test/teensy_lc_onekey/config.h @@ -0,0 +1,6 @@ +#ifndef KEYBOARDS_CHIBIOS_TEST_TEENSY_LC_ONEKEY_CONFIG_H_ +#define KEYBOARDS_CHIBIOS_TEST_TEENSY_LC_ONEKEY_CONFIG_H_ + +#include "../config.h" + +#endif /* KEYBOARDS_CHIBIOS_TEST_TEENSY_LC_ONEKEY_CONFIG_H_ */ diff --git a/keyboards/teensy_lc_onekey/halconf.h b/keyboards/chibios_test/teensy_lc_onekey/halconf.h similarity index 100% rename from keyboards/teensy_lc_onekey/halconf.h rename to keyboards/chibios_test/teensy_lc_onekey/halconf.h diff --git a/keyboards/teensy_lc_onekey/instructions.md b/keyboards/chibios_test/teensy_lc_onekey/instructions.md similarity index 100% rename from keyboards/teensy_lc_onekey/instructions.md rename to keyboards/chibios_test/teensy_lc_onekey/instructions.md diff --git a/keyboards/teensy_lc_onekey/ld/MKL26Z64.ld b/keyboards/chibios_test/teensy_lc_onekey/ld/MKL26Z64.ld similarity index 100% rename from keyboards/teensy_lc_onekey/ld/MKL26Z64.ld rename to keyboards/chibios_test/teensy_lc_onekey/ld/MKL26Z64.ld diff --git a/keyboards/teensy_lc_onekey/led.c b/keyboards/chibios_test/teensy_lc_onekey/led.c similarity index 100% rename from keyboards/teensy_lc_onekey/led.c rename to keyboards/chibios_test/teensy_lc_onekey/led.c diff --git a/keyboards/teensy_lc_onekey/matrix.c b/keyboards/chibios_test/teensy_lc_onekey/matrix.c similarity index 100% rename from keyboards/teensy_lc_onekey/matrix.c rename to keyboards/chibios_test/teensy_lc_onekey/matrix.c diff --git a/keyboards/teensy_lc_onekey/mcuconf.h b/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h similarity index 100% rename from keyboards/teensy_lc_onekey/mcuconf.h rename to keyboards/chibios_test/teensy_lc_onekey/mcuconf.h diff --git a/keyboards/teensy_lc_onekey/teensy_lc_onekey.c b/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.c similarity index 100% rename from keyboards/teensy_lc_onekey/teensy_lc_onekey.c rename to keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.c diff --git a/keyboards/teensy_lc_onekey/teensy_lc_onekey.h b/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h similarity index 69% rename from keyboards/teensy_lc_onekey/teensy_lc_onekey.h rename to keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h index f598bcf66d2..747e830a7dc 100644 --- a/keyboards/teensy_lc_onekey/teensy_lc_onekey.h +++ b/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h @@ -1,4 +1,4 @@ #ifndef TEENSY_LC_ONEKEY_H #define TEENSY_LC_ONEKEY_H -#include "quantum.h" +#include "chbibios_test.h" #endif diff --git a/keyboards/stm32_f072_onekey/keymaps/default/keymap.c b/keyboards/stm32_f072_onekey/keymaps/default/keymap.c deleted file mode 100644 index 6c48149f83b..00000000000 --- a/keyboards/stm32_f072_onekey/keymaps/default/keymap.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2012,2013 Jun Wako - -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 . -*/ - -#include "stm32_f072_onekey.h" - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - {{KC_CAPS}}, // test with KC_CAPS, KC_A, KC_BTLD -}; - -const uint16_t fn_actions[] = { -}; diff --git a/keyboards/stm32_f103_onekey/config.h b/keyboards/stm32_f103_onekey/config.h deleted file mode 100644 index 19b14fe61ab..00000000000 --- a/keyboards/stm32_f103_onekey/config.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2015 Jun Wako - -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6464 -#define DEVICE_VER 0x0001 -/* in python2: list(u"whatever".encode('utf-16-le')) */ -/* at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER "TMK" -#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' -#define PRODUCT "ChibiOS TMK test" -#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00' -#define DESCRIPTION "TMK keyboard firmware over ChibiOS" - -/* key matrix size */ -#define MATRIX_ROWS 1 -#define MATRIX_COLS 1 -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* 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 command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - - - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/teensy_lc_onekey/config.h b/keyboards/teensy_lc_onekey/config.h deleted file mode 100644 index 19b14fe61ab..00000000000 --- a/keyboards/teensy_lc_onekey/config.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2015 Jun Wako - -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 . -*/ - -#ifndef CONFIG_H -#define CONFIG_H - - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6464 -#define DEVICE_VER 0x0001 -/* in python2: list(u"whatever".encode('utf-16-le')) */ -/* at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER "TMK" -#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00' -#define PRODUCT "ChibiOS TMK test" -#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', 't', '\x00', 'e', '\x00', 's', '\x00', 't', '\x00' -#define DESCRIPTION "TMK keyboard firmware over ChibiOS" - -/* key matrix size */ -#define MATRIX_ROWS 1 -#define MATRIX_COLS 1 -#define DIODE_DIRECTION COL2ROW - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 - -/* 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 command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - - - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/teensy_lc_onekey/keymaps/default/keymap.c b/keyboards/teensy_lc_onekey/keymaps/default/keymap.c deleted file mode 100644 index a109b49600e..00000000000 --- a/keyboards/teensy_lc_onekey/keymaps/default/keymap.c +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright 2012,2013 Jun Wako - -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 . -*/ - -#include "keycode.h" -#include "action.h" -#include "action_macro.h" -#include "report.h" -#include "host.h" -#include "print.h" -#include "debug.h" -#include "keymap.h" - -const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - {{KC_A}}, -}; // to test: KC_CAPS, KT_BTLD, KC_A - -const uint16_t fn_actions[] = { -}; From 0a040a89e8a16ea1ebfef20cdc05f96b312cc853 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 15:34:35 +0300 Subject: [PATCH 141/551] Move ChibiOS test board and ld Move the ChibiOS test subproject board and ld files to the kebyoard folder, so that the build system can find them --- .../boards/GENERIC_STM32_F103/board.c | 0 .../boards/GENERIC_STM32_F103/board.h | 0 .../boards/GENERIC_STM32_F103/board.mk | 0 .../GENERIC_STM32_F103/mini_stm32_mapping.png | Bin .../boards/maple_mini_mapping.png | Bin .../{teensy_lc_onekey => }/ld/MKL26Z64.ld | 0 .../ld/STM32F103x8_stm32duino_bootloader.ld | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename keyboards/chibios_test/{stm32_f103_onekey => }/boards/GENERIC_STM32_F103/board.c (100%) rename keyboards/chibios_test/{stm32_f103_onekey => }/boards/GENERIC_STM32_F103/board.h (100%) rename keyboards/chibios_test/{stm32_f103_onekey => }/boards/GENERIC_STM32_F103/board.mk (100%) rename keyboards/chibios_test/{stm32_f103_onekey => }/boards/GENERIC_STM32_F103/mini_stm32_mapping.png (100%) rename keyboards/chibios_test/{stm32_f103_onekey => }/boards/maple_mini_mapping.png (100%) rename keyboards/chibios_test/{teensy_lc_onekey => }/ld/MKL26Z64.ld (100%) rename keyboards/chibios_test/{stm32_f103_onekey => }/ld/STM32F103x8_stm32duino_bootloader.ld (100%) diff --git a/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.c rename to keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c diff --git a/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.h rename to keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h diff --git a/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/board.mk rename to keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk diff --git a/keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png b/keyboards/chibios_test/boards/GENERIC_STM32_F103/mini_stm32_mapping.png similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/boards/GENERIC_STM32_F103/mini_stm32_mapping.png rename to keyboards/chibios_test/boards/GENERIC_STM32_F103/mini_stm32_mapping.png diff --git a/keyboards/chibios_test/stm32_f103_onekey/boards/maple_mini_mapping.png b/keyboards/chibios_test/boards/maple_mini_mapping.png similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/boards/maple_mini_mapping.png rename to keyboards/chibios_test/boards/maple_mini_mapping.png diff --git a/keyboards/chibios_test/teensy_lc_onekey/ld/MKL26Z64.ld b/keyboards/chibios_test/ld/MKL26Z64.ld similarity index 100% rename from keyboards/chibios_test/teensy_lc_onekey/ld/MKL26Z64.ld rename to keyboards/chibios_test/ld/MKL26Z64.ld diff --git a/keyboards/chibios_test/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld similarity index 100% rename from keyboards/chibios_test/stm32_f103_onekey/ld/STM32F103x8_stm32duino_bootloader.ld rename to keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld From 6e4f2e18e6cd0abffa52e6481d9761064698ec64 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 15:53:40 +0300 Subject: [PATCH 142/551] Don't include common_config.h for ChibiOS test --- keyboards/chibios_test/config.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/chibios_test/config.h b/keyboards/chibios_test/config.h index 210f150670d..c32a77b37f7 100644 --- a/keyboards/chibios_test/config.h +++ b/keyboards/chibios_test/config.h @@ -18,8 +18,6 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H -#include "config_common.h" - /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6464 From cf6cd15920522b139ba0f6c7e2b52e3d656a45d7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 15:54:59 +0300 Subject: [PATCH 143/551] Fix typo in teensy_lc_onkey.h --- keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h b/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h index 747e830a7dc..ea1c84e2f5a 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h +++ b/keyboards/chibios_test/teensy_lc_onekey/teensy_lc_onekey.h @@ -1,4 +1,4 @@ #ifndef TEENSY_LC_ONEKEY_H #define TEENSY_LC_ONEKEY_H -#include "chbibios_test.h" +#include "chibios_test.h" #endif From 74847a84f8c90c8065f50cee9768f7768b5f856b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 16:45:29 +0300 Subject: [PATCH 144/551] First version of Infinity Ergodox Mostly just adding the files from the fredizzimo repository. Still needs some fixing until it works --- keyboards/infinity_ergodox/MEMO.txt | 385 +++++++++++++ keyboards/infinity_ergodox/Makefile | 68 +++ keyboards/infinity_ergodox/bootloader_defs.h | 1 + keyboards/infinity_ergodox/chconf.h | 524 ++++++++++++++++++ keyboards/infinity_ergodox/config.h | 80 +++ keyboards/infinity_ergodox/halconf.h | 353 ++++++++++++ keyboards/infinity_ergodox/infinity_ergodox.c | 1 + keyboards/infinity_ergodox/infinity_ergodox.h | 44 ++ .../infinity_ergodox/keymaps/default/keymap.c | 111 ++++ keyboards/infinity_ergodox/led.c | 49 ++ keyboards/infinity_ergodox/matrix.c | 170 ++++++ keyboards/infinity_ergodox/mcuconf.h | 74 +++ 12 files changed, 1860 insertions(+) create mode 100644 keyboards/infinity_ergodox/MEMO.txt create mode 100644 keyboards/infinity_ergodox/Makefile create mode 100644 keyboards/infinity_ergodox/bootloader_defs.h create mode 100644 keyboards/infinity_ergodox/chconf.h create mode 100644 keyboards/infinity_ergodox/config.h create mode 100644 keyboards/infinity_ergodox/halconf.h create mode 100644 keyboards/infinity_ergodox/infinity_ergodox.c create mode 100644 keyboards/infinity_ergodox/infinity_ergodox.h create mode 100644 keyboards/infinity_ergodox/keymaps/default/keymap.c create mode 100644 keyboards/infinity_ergodox/led.c create mode 100644 keyboards/infinity_ergodox/matrix.c create mode 100644 keyboards/infinity_ergodox/mcuconf.h diff --git a/keyboards/infinity_ergodox/MEMO.txt b/keyboards/infinity_ergodox/MEMO.txt new file mode 100644 index 00000000000..e2886aa0023 --- /dev/null +++ b/keyboards/infinity_ergodox/MEMO.txt @@ -0,0 +1,385 @@ +flabbergast's TMK/ChibiOS port +============================== +2015/10/16 + + +Build +----- +$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git + +$ cd tmk_keyboard +$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios +or +$ cd tmk_keyboard/tmk_core/tool/chibios +$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios + +$ cd tmk_keyboard/keyboard/infinity_chibios +$ make + + + + +Chibios Configuration +--------------------- +halconf.h: for HAL configuration + placed in project directory + read in chibios/os/hal/hal.mk + included in chibios/os/hal/include/hal.h +mcuconf.h: for MCU configuration + placed in project directory + included in halconf.h + + +Chibios Term +------------ +PAL = Port Abstraction Layer + palWritePad + palReadPad + palSetPad + chibios/os/hal/include/pal.h + +LLD = Low Level Driver + + +Makefile +-------- + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = KINETIS + MCU_SERIES = KL2x + + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT = MKL26Z64 + + # - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP = kl2x + + # Board: it should exist either in /os/hal/boards/ + # or /boards + BOARD = PJRC_TEENSY_LC + + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + +halconf.h +--------- + + +mcuconf.h +--------- + + +chconf.h +-------- + + +ld script +--------- +--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld 2015-10-15 09:08:58.732904304 +0900 ++++ ld/MKL26Z64.ld 2015-10-15 08:48:06.430215496 +0900 +@@ -27,7 +27,8 @@ + { + flash0 : org = 0x00000000, len = 0xc0 + flashcfg : org = 0x00000400, len = 0x10 +- flash : org = 0x00000410, len = 64k - 0x410 ++ flash : org = 0x00000410, len = 62k - 0x410 ++ eeprom_emu : org = 0x0000F800, len = 2k + ram : org = 0x1FFFF800, len = 8k + } + +@@ -35,6 +36,10 @@ + __ram_size__ = LENGTH(ram); + __ram_end__ = __ram_start__ + __ram_size__; + ++__eeprom_workarea_start__ = ORIGIN(eeprom_emu); ++__eeprom_workarea_size__ = LENGTH(eeprom_emu); ++__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__; ++ + SECTIONS + { + . = 0; + + + +Configuration/Startup for Infinity 60% +-------------------------------------- +Configuration: + + +Clock: +Inifinity + FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz + Clock dividor: + SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock + SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock + SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock + Internal reference clock: + MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL + MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable + FLL multipilication: + MCG_C4[DMX32] = 1 + MCG_C4[DRST_DRS] = 01 FLL factor 1464 * 32.768kHz = 48MHz + +chibios/os/hal/ports/KINETIS/K20x/hal_lld.c + k20x_clock_init(): called in __early_init() defined in board.c + disable watchdog and configure clock + + configurable macros: + KINETIS_NO_INIT: whether init or not + KINETIS_MCG_MODE: clock mode + KINETIS_MCG_MODE_FEI + KINETIS_MCG_MODE_PEE + hal/ports/KINETIS/K20x/hal_lld.h + + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h + PALConfig pal_default_config + boardInit() + __early_init() + macro definitions for board infos, freq and mcu type + +chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c + +USB + + +Startup +------- + common/ports/ARMCMx/GCC/crt0_v[67]m.s + Reset_Handler: startup code + common/ports/ARMCMx/GCC/crt1.c + __core_init(): weak + __early_init(): weak + __late_init(): weak + __default_exit(): weak + called from Reset_Handler of crt0 + common/ports/ARMCMx/GCC/vector.c + common/ports/ARMCMx/GCC/ld/*.ld + +chibios/os/common/ports/ARMCMx/compilers/GCC/ +├── crt0_v6m.s +├── crt0_v7m.s +├── crt1.c +├── ld +│   ├── MK20DX128BLDR3.ld +│   ├── MK20DX128BLDR4.ld +│   ├── MK20DX128.ld +│   ├── MK20DX256.ld +│   ├── MKL25Z128.ld +│   ├── MKL26Z128.ld +│   ├── MKL26Z64.ld +│   └── STM32L476xG.ld +├── mk +│   ├── startup_k20x5.mk +│   ├── startup_k20x7.mk +│   ├── startup_k20x.mk +│   ├── startup_kl2x.mk +│   └── startup_stm32l4xx.mk +├── rules.ld +├── rules.mk +└── vectors.c + +chibios/os/hal/ +├── boards +│   ├── FREESCALE_FREEDOM_K20D50M +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── MCHCK_K20 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_3_1 +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── PJRC_TEENSY_LC +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── readme.txt +│   ├── simulator +│   │   ├── board.c +│   │   ├── board.h +│   │   └── board.mk +│   ├── ST_NUCLEO_F030R8 +│   │   ├── board.c +│   │   ├── board.h +│   │   ├── board.mk +│   │   └── cfg +│   │   └── board.chcfg +├── hal.mk +├── include +│   ├── adc.h +│   ├── can.h +│   ├── dac.h +│   ├── ext.h +│   ├── gpt.h +│   ├── hal_channels.h +│   ├── hal_files.h +│   ├── hal.h +│   ├── hal_ioblock.h +│   ├── hal_mmcsd.h +│   ├── hal_queues.h +│   ├── hal_streams.h +│   ├── i2c.h +│   ├── i2s.h +│   ├── icu.h +│   ├── mac.h +│   ├── mii.h +│   ├── mmc_spi.h +│   ├── pal.h +│   ├── pwm.h +│   ├── rtc.h +│   ├── sdc.h +│   ├── serial.h +│   ├── serial_usb.h +│   ├── spi.h +│   ├── st.h +│   ├── uart.h +│   └── usb.h +├── lib +│   └── streams +│   ├── chprintf.c +│   ├── chprintf.h +│   ├── memstreams.c +│   ├── memstreams.h +│   ├── nullstreams.c +│   └── nullstreams.h +├── osal +│   ├── nil +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   ├── os-less +│   │   └── ARMCMx +│   │   ├── osal.c +│   │   ├── osal.h +│   │   └── osal.mk +│   └── rt +│   ├── osal.c +│   ├── osal.h +│   └── osal.mk +├── ports +│   ├── AVR +│   ├── common +│   │   └── ARMCMx +│   │   ├── mpu.h +│   │   ├── nvic.c +│   │   └── nvic.h +│   ├── KINETIS +│   │   ├── K20x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.dox +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   ├── pwm_lld.h +│   │   │   ├── spi_lld.c +│   │   │   └── spi_lld.h +│   │   ├── KL2x +│   │   │   ├── hal_lld.c +│   │   │   ├── hal_lld.h +│   │   │   ├── kinetis_registry.h +│   │   │   ├── platform.mk +│   │   │   ├── pwm_lld.c +│   │   │   └── pwm_lld.h +│   │   ├── LLD +│   │   │   ├── adc_lld.c +│   │   │   ├── adc_lld.h +│   │   │   ├── ext_lld.c +│   │   │   ├── ext_lld.h +│   │   │   ├── gpt_lld.c +│   │   │   ├── gpt_lld.h +│   │   │   ├── i2c_lld.c +│   │   │   ├── i2c_lld.h +│   │   │   ├── pal_lld.c +│   │   │   ├── pal_lld.h +│   │   │   ├── serial_lld.c +│   │   │   ├── serial_lld.h +│   │   │   ├── st_lld.c +│   │   │   ├── st_lld.h +│   │   │   ├── usb_lld.c +│   │   │   └── usb_lld.h +│   │   └── README.md +│   ├── LPC +│   ├── simulator +│   └── STM32 +├── src +│   ├── adc.c +│   ├── can.c +│   ├── dac.c +│   ├── ext.c +│   ├── gpt.c +│   ├── hal.c +│   ├── hal_mmcsd.c +│   ├── hal_queues.c +│   ├── i2c.c +│   ├── i2s.c +│   ├── icu.c +│   ├── mac.c +│   ├── mmc_spi.c +│   ├── pal.c +│   ├── pwm.c +│   ├── rtc.c +│   ├── sdc.c +│   ├── serial.c +│   ├── serial_usb.c +│   ├── spi.c +│   ├── st.c +│   ├── uart.c +│   └── usb.c +└── templates + ├── adc_lld.c + ├── adc_lld.h + ├── can_lld.c + ├── can_lld.h + ├── dac_lld.c + ├── dac_lld.h + ├── ext_lld.c + ├── ext_lld.h + ├── gpt_lld.c + ├── gpt_lld.h + ├── halconf.h + ├── hal_lld.c + ├── hal_lld.h + ├── i2c_lld.c + ├── i2c_lld.h + ├── i2s_lld.c + ├── i2s_lld.h + ├── icu_lld.c + ├── icu_lld.h + ├── mac_lld.c + ├── mac_lld.h + ├── mcuconf.h + ├── osal + │   ├── osal.c + │   ├── osal.h + │   └── osal.mk + ├── pal_lld.c + ├── pal_lld.h + ├── platform.mk + ├── pwm_lld.c + ├── pwm_lld.h + ├── rtc_lld.c + ├── rtc_lld.h + ├── sdc_lld.c + ├── sdc_lld.h + ├── serial_lld.c + ├── serial_lld.h + ├── spi_lld.c + ├── spi_lld.h + ├── st_lld.c + ├── st_lld.h + ├── uart_lld.c + ├── uart_lld.h + ├── usb_lld.c + └── usb_lld.h diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile new file mode 100644 index 00000000000..6ea3bd69162 --- /dev/null +++ b/keyboards/infinity_ergodox/Makefile @@ -0,0 +1,68 @@ +## chip/board settings +# - the next two should match the directories in +# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) +# - For Teensies, FAMILY = KINETIS and SERIES is either +# KL2x (LC) or K20x (3.0,3.1,3.2). +# - For Infinity KB, SERIES = K20x +MCU_FAMILY = KINETIS +MCU_SERIES = K20x + +# Linker script to use +# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ +# or /ld/ +# - NOTE: a custom ld script is needed for EEPROM on Teensy LC +# - LDSCRIPT = +# - MKL26Z64 for Teensy LC +# - MK20DX128 for Teensy 3.0 +# - MK20DX256 for Teensy 3.1 and 3.2 +# - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader +# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader +MCU_LDSCRIPT = MK20DX256BLDR8 + +# Startup code to use +# - it should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/ +# - STARTUP = +# - kl2x for Teensy LC +# - k20x5 for Teensy 3.0 and Infinity 60% +# - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox +MCU_STARTUP = k20x7 + +# Board: it should exist either in /os/hal/boards/ +# or /boards +# - BOARD = +# - PJRC_TEENSY_LC for Teensy LC +# - PJRC_TEENSY_3 for Teensy 3.0 +# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2 +# - MCHCK_K20 for Infinity KB +#BOARD = MCHCK_K20 +BOARD = PJRC_TEENSY_3_1 + +# Cortex version +# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4 +MCU = cortex-m4 + +# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 +# I.e. 6 for Teensy LC; 7 for Teensy 3.x +ARMV = 7 + +# Vector table for application +# 0x00000000-0x00001000 area is occupied by bootlaoder.*/ +# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB +OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000 + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration +## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.) +MOUSEKEY_ENABLE ?= yes # Mouse keys +EXTRAKEY_ENABLE ?= yes # Audio control and System control +CONSOLE_ENABLE ?= yes # Console for debug +COMMAND_ENABLE ?= yes # Commands for debug and configuration +SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover +CUSTOM_MATRIX ?= yes # Custom matrix file + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/infinity_ergodox/bootloader_defs.h b/keyboards/infinity_ergodox/bootloader_defs.h new file mode 100644 index 00000000000..c67153be602 --- /dev/null +++ b/keyboards/infinity_ergodox/bootloader_defs.h @@ -0,0 +1 @@ +#define KIIBOHD_BOOTLOADER diff --git a/keyboards/infinity_ergodox/chconf.h b/keyboards/infinity_ergodox/chconf.h new file mode 100644 index 00000000000..d59c35eb68b --- /dev/null +++ b/keyboards/infinity_ergodox/chconf.h @@ -0,0 +1,524 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef _CHCONF_H_ +#define _CHCONF_H_ + +#define _CHIBIOS_RT_CONF_ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16 or 32 bits. + */ +#define CH_CFG_ST_RESOLUTION 32 + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#define CH_CFG_ST_FREQUENCY 100000 + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#define CH_CFG_ST_TIMEDELTA 0 + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#define CH_CFG_TIME_QUANTUM 20 + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#define CH_CFG_MEMCORE_SIZE 0 + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#define CH_CFG_NO_IDLE_THREAD FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#define CH_CFG_OPTIMIZE_SPEED TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_TM FALSE + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_REGISTRY TRUE + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_WAITEXIT TRUE + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_SEMAPHORES TRUE + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MUTEXES TRUE + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#define CH_CFG_USE_CONDVARS TRUE + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_EVENTS TRUE + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MESSAGES TRUE + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#define CH_CFG_USE_MAILBOXES TRUE + +/** + * @brief I/O Queues APIs. + * @details If enabled then the I/O queues APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_QUEUES TRUE + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMCORE TRUE + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#define CH_CFG_USE_HEAP TRUE + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#define CH_CFG_USE_MEMPOOLS TRUE + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#define CH_CFG_USE_DYNAMIC TRUE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_STATISTICS FALSE + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_SYSTEM_STATE_CHECK FALSE + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_CHECKS FALSE + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_ASSERTS FALSE + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the context switch circular trace buffer is + * activated. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_ENABLE_TRACE FALSE + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#define CH_DBG_ENABLE_STACK_CHECK FALSE + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#define CH_DBG_FILL_THREADS FALSE + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#define CH_DBG_THREADS_PROFILING FALSE + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p chThdInit() API. + * + * @note It is invoked from within @p chThdInit() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + * + * @note It is inserted into lock zone. + * @note It is also invoked when the threads simply return in order to + * terminate. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* _CHCONF_H_ */ + +/** @} */ diff --git a/keyboards/infinity_ergodox/config.h b/keyboards/infinity_ergodox/config.h new file mode 100644 index 00000000000..d24ee0f0565 --- /dev/null +++ b/keyboards/infinity_ergodox/config.h @@ -0,0 +1,80 @@ +/* +Copyright 2015 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +/* in python2: list(u"whatever".encode('utf-16-le')) */ +/* at most 32 characters or the ugly hack in usb_main.c borks */ +#define MANUFACTURER "TMK" +#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00' +#define PRODUCT "Infinity keyboard/TMK" +#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00' + +/* key matrix size */ +#define MATRIX_ROWS 18 +#define MATRIX_COLS 5 +#define LOCAL_MATRIX_ROWS 9 + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* 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 command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Keymap for Infiity prototype */ +#define INFINITY_PROTOTYPE + +#define SERIAL_LINK_BAUD 562500 +#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1) +// The visualizer needs gfx thread priorities +#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/infinity_ergodox/halconf.h b/keyboards/infinity_ergodox/halconf.h new file mode 100644 index 00000000000..55dd5e88da1 --- /dev/null +++ b/keyboards/infinity_ergodox/halconf.h @@ -0,0 +1,353 @@ +/* + ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EXT subsystem. + */ +#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__) +#define HAL_USE_EXT FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C TRUE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL TRUE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB TRUE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI TRUE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB TRUE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 128 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 64 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c new file mode 100644 index 00000000000..34aded1a734 --- /dev/null +++ b/keyboards/infinity_ergodox/infinity_ergodox.c @@ -0,0 +1 @@ +#include "infinity_ergodox.h" diff --git a/keyboards/infinity_ergodox/infinity_ergodox.h b/keyboards/infinity_ergodox/infinity_ergodox.h new file mode 100644 index 00000000000..de726759460 --- /dev/null +++ b/keyboards/infinity_ergodox/infinity_ergodox.h @@ -0,0 +1,44 @@ +#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ +#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ + +#include "quantum.h" + +#define KEYMAP( \ + A80, A70, A60, A50, A40, A30, A20, \ + A81, A71, A61, A51, A41, A31, A21, \ + A82, A72, A62, A52, A42, A32, \ + A83, A73, A63, A53, A43, A33, A23, \ + A84, A74, A64, A54, A44, \ + A13, A03, \ + A04, \ + A34, A24, A14, \ + B20, B30, B40, B50, B60, B70, B80, \ + B21, B31, B41, B51, B61, B71, B81, \ + B32, B42, B52, B62, B72, B82, \ + B23, B33, B43, B53, B63, B73, B83, \ + B44, B54, B64, B74, B84, \ + B03, B13, \ + B04, \ + B14, B24, B34 \ +) { \ + { KC_NO, KC_NO, KC_NO, KC_##A03, KC_##A04 }, \ + { KC_NO, KC_NO, KC_NO, KC_##A13, KC_##A14 }, \ + { KC_##A20, KC_##A21, KC_NO, KC_##A23, KC_##A24 }, \ + { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \ + { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \ + { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \ + { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \ + { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \ + { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \ + { KC_NO, KC_NO, KC_NO, KC_##B03, KC_##B04 }, \ + { KC_NO, KC_NO, KC_NO, KC_##B13, KC_##B14 }, \ + { KC_##B20, KC_##B21, KC_NO, KC_##B23, KC_##B24 }, \ + { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \ + { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \ + { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \ + { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \ + { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \ + { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 } \ +} + +#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */ diff --git a/keyboards/infinity_ergodox/keymaps/default/keymap.c b/keyboards/infinity_ergodox/keymaps/default/keymap.c new file mode 100644 index 00000000000..c33fb7b9260 --- /dev/null +++ b/keyboards/infinity_ergodox/keymaps/default/keymap.c @@ -0,0 +1,111 @@ +/* +Copyright 2016 Fred Sundvik +Jun Wako + +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 . +*/ + +#include "infinity_ergodox.h" + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + KEYMAP( // layer 0 : default + // left hand + EQL, 1, 2, 3, 4, 5, ESC, + BSLS,Q, W, E, R, T, FN1, + TAB, A, S, D, F, G, + LSFT,Z, X, C, V, B, FN0, + LGUI,GRV, BSLS,LEFT,RGHT, + LCTL,LALT, + HOME, + BSPC,DEL, END, + // right hand + FN2, 6, 7, 8, 9, 0, MINS, + LBRC,Y, U, I, O, P, RBRC, + H, J, K, L, SCLN,QUOT, + FN0, N, M, COMM,DOT, SLSH,RSFT, + LEFT,DOWN,UP, RGHT,RGUI, + RALT,RCTL, + PGUP, + PGDN,ENT, SPC + ), + + KEYMAP( // layer 1 : function and symbol keys + // left hand + TRNS,F1, F2, F3, F4, F5, F11, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + F12, F6, F7, F8, F9, F10, TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // layer 2 : keyboard functions + // left hand + BTLD,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), + + KEYMAP( // layer 3: numpad + // left hand + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS,TRNS,TRNS,TRNS, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS, + // right hand + TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC, + TRNS,NO, P7, P8, P9, PMNS,BSPC, + NO, P4, P5, P6, PPLS,PENT, + TRNS,NO, P1, P2, P3, PPLS,PENT, + P0, PDOT,SLSH,PENT,PENT, + TRNS,TRNS, + TRNS, + TRNS,TRNS,TRNS + ), +}; +const uint16_t fn_actions[] = { + ACTION_LAYER_MOMENTARY(1), // FN0 - switch to Layer1 + ACTION_LAYER_SET(2, ON_PRESS), // FN1 - set Layer2 + ACTION_LAYER_TOGGLE(3), // FN2 - toggle Layer3 aka Numpad layer + ACTION_LAYER_SET(0, ON_PRESS), // FN3 - set Layer0 +}; diff --git a/keyboards/infinity_ergodox/led.c b/keyboards/infinity_ergodox/led.c new file mode 100644 index 00000000000..77195bb358e --- /dev/null +++ b/keyboards/infinity_ergodox/led.c @@ -0,0 +1,49 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#include "hal.h" + +#include "led.h" + + +void led_set(uint8_t usb_led) { +// The LCD backlight functionality conflicts with this simple +// red backlight +#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE) + // PTC1: LCD Backlight Red(0:on/1:off) + GPIOC->PDDR |= (1<<1); + PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + if (usb_led & (1<PCOR |= (1<<1); + } else { + GPIOC->PSOR |= (1<<1); + } +#elif !defined(LCD_BACKLIGHT_ENABLE) + (void)usb_led; + GPIOC->PDDR |= (1<<1); + PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<1); + GPIOC->PDDR |= (1<<2); + PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<2); + GPIOC->PDDR |= (1<<3); + PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1); + GPIOC->PSOR |= (1<<3); +#else + (void)usb_led; +#endif +} diff --git a/keyboards/infinity_ergodox/matrix.c b/keyboards/infinity_ergodox/matrix.c new file mode 100644 index 00000000000..fd93967a82c --- /dev/null +++ b/keyboards/infinity_ergodox/matrix.c @@ -0,0 +1,170 @@ +/* +Copyright 2016 Fred Sundvik +Jun Wako + +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 . +*/ +#include +#include +#include +#include "hal.h" +#include "timer.h" +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "matrix.h" +#include "serial_link/system/serial_link.h" + + +/* + * Infinity ErgoDox Pinusage: + * Column pins are input with internal pull-down. Row pins are output and strobe with high. + * Key is high or 1 when it turns on. + * + * col: { PTD1, PTD4, PTD5, PTD6, PTD7 } + * row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 } + */ +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS]; +static bool debouncing = false; +static uint16_t debouncing_time = 0; + + +void matrix_init(void) +{ + /* Column(sense) */ + palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN); + palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN); + + /* Row(strobe) */ + palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL); + palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); + + memset(matrix, 0, MATRIX_ROWS); + memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS); +} + +uint8_t matrix_scan(void) +{ + for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { + matrix_row_t data = 0; + + // strobe row + switch (row) { + case 0: palSetPad(GPIOB, 2); break; + case 1: palSetPad(GPIOB, 3); break; + case 2: palSetPad(GPIOB, 18); break; + case 3: palSetPad(GPIOB, 19); break; + case 4: palSetPad(GPIOC, 0); break; + case 5: palSetPad(GPIOC, 9); break; + case 6: palSetPad(GPIOC, 10); break; + case 7: palSetPad(GPIOC, 11); break; + case 8: palSetPad(GPIOD, 0); break; + } + + // need wait to settle pin state + // if you wait too short, or have a too high update rate + // the keyboard might freeze, or there might not be enough + // processing power to update the LCD screen properly. + // 20us, or two ticks at 100000Hz seems to be OK + wait_us(20); + + // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 } + data = ((palReadPort(GPIOD) & 0xF0) >> 3) | + ((palReadPort(GPIOD) & 0x02) >> 1); + + // un-strobe row + switch (row) { + case 0: palClearPad(GPIOB, 2); break; + case 1: palClearPad(GPIOB, 3); break; + case 2: palClearPad(GPIOB, 18); break; + case 3: palClearPad(GPIOB, 19); break; + case 4: palClearPad(GPIOC, 0); break; + case 5: palClearPad(GPIOC, 9); break; + case 6: palClearPad(GPIOC, 10); break; + case 7: palClearPad(GPIOC, 11); break; + case 8: palClearPad(GPIOD, 0); break; + } + + if (matrix_debouncing[row] != data) { + matrix_debouncing[row] = data; + debouncing = true; + debouncing_time = timer_read(); + } + } + + uint8_t offset = 0; +#ifdef MASTER_IS_ON_RIGHT + if (is_serial_link_master()) { + offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS; + } +#endif + + if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { + for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) { + matrix[offset + row] = matrix_debouncing[row]; + } + debouncing = false; + } + return 1; +} + +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & (1< Date: Tue, 5 Jul 2016 16:50:30 +0300 Subject: [PATCH 145/551] Infinity Ergodox - Add matrix.c and led.c --- keyboards/infinity_ergodox/Makefile | 4 ++++ keyboards/infinity_ergodox/matrix.c | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile index 6ea3bd69162..fb21aae5ebc 100644 --- a/keyboards/infinity_ergodox/Makefile +++ b/keyboards/infinity_ergodox/Makefile @@ -1,3 +1,7 @@ +# project specific files +SRC = matrix.c \ + led.c + ## chip/board settings # - the next two should match the directories in # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) diff --git a/keyboards/infinity_ergodox/matrix.c b/keyboards/infinity_ergodox/matrix.c index fd93967a82c..2b806cd6498 100644 --- a/keyboards/infinity_ergodox/matrix.c +++ b/keyboards/infinity_ergodox/matrix.c @@ -24,7 +24,6 @@ along with this program. If not, see . #include "print.h" #include "debug.h" #include "matrix.h" -#include "serial_link/system/serial_link.h" /* From f9a6e34c28f6de0f6ec505144acc287b90326436 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 5 Jul 2016 19:28:17 +0300 Subject: [PATCH 146/551] Add dfu-util command for programming Also add .bin generation, which is needed for dfu-util. --- tmk_core/avr.mk | 1 + tmk_core/chibios.mk | 6 +++++- tmk_core/rules.mk | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 72be5e6da1c..3bf2b34f88f 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -10,6 +10,7 @@ AR = avr-ar rcs NM = avr-nm HEX = $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature EEP = $(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) +BIN = diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index 0abb933a8d7..cb67ac6f25b 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -113,6 +113,7 @@ AR = arm-none-eabi-ar NM = arm-none-eabi-nm HEX = $(OBJCOPY) -O $(FORMAT) EEP = +BIN = $(OBJCOPY) -O binary THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB @@ -151,4 +152,7 @@ else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","") endif # List any extra directories to look for libraries here. -EXTRALIBDIRS = $(RULESPATH)/ld \ No newline at end of file +EXTRALIBDIRS = $(RULESPATH)/ld + +dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter + dfu-util -D $(BUILD_DIR)/$(TARGET).bin \ No newline at end of file diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 7d3d8f9a6b2..352e9314b61 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -234,6 +234,7 @@ MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: +MSG_BIN = Creating binary load file for Flash: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: @@ -369,6 +370,11 @@ gccversion : $(eval CMD=$(NM) -n $< > $@ ) @$(BUILD_CMD) +%.bin: %.elf + @$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD) + $(eval CMD=$(BIN) $< $@ || exit 0) + @$(BUILD_CMD) + # Create library from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).a .PRECIOUS : $(OBJ) From 96f44e120295e677d21d3dbb9dc4bf642ba2af09 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 5 Jul 2016 18:36:02 -0400 Subject: [PATCH 147/551] one half working --- keyboards/lets-split/Makefile | 73 ++++++++++++++++ keyboards/lets-split/config.h | 87 +++++++++++++++++++ keyboards/lets-split/keymaps/default/keymap.c | 42 +++++++++ keyboards/lets-split/lets-split.c | 48 ++++++++++ keyboards/lets-split/lets-split.h | 4 + keyboards/lets-split/readme.md | 0 6 files changed, 254 insertions(+) create mode 100644 keyboards/lets-split/Makefile create mode 100644 keyboards/lets-split/config.h create mode 100644 keyboards/lets-split/keymaps/default/keymap.c create mode 100644 keyboards/lets-split/lets-split.c create mode 100644 keyboards/lets-split/lets-split.h create mode 100644 keyboards/lets-split/readme.md diff --git a/keyboards/lets-split/Makefile b/keyboards/lets-split/Makefile new file mode 100644 index 00000000000..247f978f017 --- /dev/null +++ b/keyboards/lets-split/Makefile @@ -0,0 +1,73 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= yes # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/lets-split/config.h b/keyboards/lets-split/config.h new file mode 100644 index 00000000000..5b464147d32 --- /dev/null +++ b/keyboards/lets-split/config.h @@ -0,0 +1,87 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x3060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Wootpatoot +#define PRODUCT Lets Split +#define DESCRIPTION A split keyboard for the cheap makers + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 6 + +#define MATRIX_ROW_PINS { B5, B4, E6, D7, } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* 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 command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif \ No newline at end of file diff --git a/keyboards/lets-split/keymaps/default/keymap.c b/keyboards/lets-split/keymaps/default/keymap.c new file mode 100644 index 00000000000..00602394fed --- /dev/null +++ b/keyboards/lets-split/keymaps/default/keymap.c @@ -0,0 +1,42 @@ +#include "lets-split.h" +#include "action_layer.h" + +#define BASE 0 + +enum preonic_keycodes { + KC_IDK = SAFE_RANGE, + PM_RESET +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[BASE] = { + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T }, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G }, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B }, + {KC_IDK, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, PM_RESET } +} + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_IDK: + if (record->event.pressed) { + SEND_STRING("IDK. "); + } + return false; + break; + case PM_RESET: + if (record->event.pressed) { + promicro_bootloader_jmp(true); + } + return false; + break; + } + return true; +}; \ No newline at end of file diff --git a/keyboards/lets-split/lets-split.c b/keyboards/lets-split/lets-split.c new file mode 100644 index 00000000000..ee987230379 --- /dev/null +++ b/keyboards/lets-split/lets-split.c @@ -0,0 +1,48 @@ +#include "lets-split.h" + +#ifdef AUDIO_ENABLE + float tone_startup[][2] = SONG(STARTUP_SOUND); + float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void matrix_init_kb(void) { + + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + + // green led on + DDRD |= (1<<5); + PORTD &= ~(1<<5); + + // orange led on + DDRB |= (1<<0); + PORTB &= ~(1<<0); + + matrix_init_user(); +}; + +void promicro_bootloader_jmp(bool program) { + + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); + #endif + + uint16_t *const bootKeyPtr = (uint16_t *)0x0800; + + // Value used by Caterina bootloader use to determine whether to run the + // sketch or the bootloader programmer. + uint16_t bootKey = program ? 0x7777 : 0; + + *bootKeyPtr = bootKey; + + // setup watchdog timeout + wdt_enable(WDTO_60MS); + + while(1) {} // wait for watchdog timer to trigger +} + + diff --git a/keyboards/lets-split/lets-split.h b/keyboards/lets-split/lets-split.h new file mode 100644 index 00000000000..c82b95a3765 --- /dev/null +++ b/keyboards/lets-split/lets-split.h @@ -0,0 +1,4 @@ +#include "quantum.h" +#include + +void promicro_bootloader_jmp(bool program); \ No newline at end of file diff --git a/keyboards/lets-split/readme.md b/keyboards/lets-split/readme.md new file mode 100644 index 00000000000..e69de29bb2d From d707738616c140f8d9c8eded7b64e5fc806f4b24 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 5 Jul 2016 23:27:10 -0400 Subject: [PATCH 148/551] i2c working --- keyboards/lets-split/lets-split.h | 4 - keyboards/{lets-split => lets_split}/Makefile | 6 +- keyboards/{lets-split => lets_split}/config.h | 10 +- keyboards/lets_split/i2c.c | 159 ++++++++ keyboards/lets_split/i2c.h | 31 ++ .../keymaps/default/keymap.c | 14 +- .../lets-split.c => lets_split/lets_split.c} | 14 +- keyboards/lets_split/lets_split.h | 21 + keyboards/lets_split/matrix.c | 310 ++++++++++++++ keyboards/lets_split/pro_micro.h | 362 +++++++++++++++++ .../{lets-split => lets_split}/readme.md | 0 keyboards/lets_split/split_util.c | 67 ++++ keyboards/lets_split/split_util.h | 20 + keyboards/lets_split/uno-slave/Makefile | 226 +++++++++++ .../lets_split/uno-slave/keyboard-i2c-slave.c | 42 ++ keyboards/lets_split/uno-slave/readme.md | 1 + keyboards/lets_split/uno-slave/uno-matrix.c | 160 ++++++++ keyboards/lets_split/uno-slave/uno-matrix.h | 19 + keyboards/lets_split/usbconfig.h | 377 ++++++++++++++++++ tmk_core/common/matrix.h | 5 + 20 files changed, 1827 insertions(+), 21 deletions(-) delete mode 100644 keyboards/lets-split/lets-split.h rename keyboards/{lets-split => lets_split}/Makefile (97%) rename keyboards/{lets-split => lets_split}/config.h (93%) create mode 100644 keyboards/lets_split/i2c.c create mode 100644 keyboards/lets_split/i2c.h rename keyboards/{lets-split => lets_split}/keymaps/default/keymap.c (55%) rename keyboards/{lets-split/lets-split.c => lets_split/lets_split.c} (83%) create mode 100644 keyboards/lets_split/lets_split.h create mode 100644 keyboards/lets_split/matrix.c create mode 100644 keyboards/lets_split/pro_micro.h rename keyboards/{lets-split => lets_split}/readme.md (100%) create mode 100644 keyboards/lets_split/split_util.c create mode 100644 keyboards/lets_split/split_util.h create mode 100644 keyboards/lets_split/uno-slave/Makefile create mode 100644 keyboards/lets_split/uno-slave/keyboard-i2c-slave.c create mode 100644 keyboards/lets_split/uno-slave/readme.md create mode 100644 keyboards/lets_split/uno-slave/uno-matrix.c create mode 100644 keyboards/lets_split/uno-slave/uno-matrix.h create mode 100644 keyboards/lets_split/usbconfig.h diff --git a/keyboards/lets-split/lets-split.h b/keyboards/lets-split/lets-split.h deleted file mode 100644 index c82b95a3765..00000000000 --- a/keyboards/lets-split/lets-split.h +++ /dev/null @@ -1,4 +0,0 @@ -#include "quantum.h" -#include - -void promicro_bootloader_jmp(bool program); \ No newline at end of file diff --git a/keyboards/lets-split/Makefile b/keyboards/lets_split/Makefile similarity index 97% rename from keyboards/lets-split/Makefile rename to keyboards/lets_split/Makefile index 247f978f017..d8e283896e8 100644 --- a/keyboards/lets-split/Makefile +++ b/keyboards/lets_split/Makefile @@ -1,4 +1,6 @@ - +SRC += matrix.c \ + i2c.c \ + split_util.c # MCU name #MCU = at90usb1287 @@ -68,6 +70,8 @@ RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +CUSTOM_MATRIX = yes + ifndef QUANTUM_DIR include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/lets-split/config.h b/keyboards/lets_split/config.h similarity index 93% rename from keyboards/lets-split/config.h rename to keyboards/lets_split/config.h index 5b464147d32..e68787e0b5d 100644 --- a/keyboards/lets-split/config.h +++ b/keyboards/lets_split/config.h @@ -29,12 +29,18 @@ along with this program. If not, see . #define DESCRIPTION A split keyboard for the cheap makers /* key matrix size */ -#define MATRIX_ROWS 4 +#define MATRIX_ROWS 8 #define MATRIX_COLS 6 -#define MATRIX_ROW_PINS { B5, B4, E6, D7, } +// wiring of each half +#define MATRIX_ROW_PINS { B5, B4, E6, D7 } #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } +#define USE_I2C + +// #define I2C_MASTER_LEFT +#define I2C_MASTER_RIGHT + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c new file mode 100644 index 00000000000..c72789403e5 --- /dev/null +++ b/keyboards/lets_split/i2c.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include "i2c.h" + +// Limits the amount of we wait for any one i2c transaction. +// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is +// 9 bits, a single transaction will take around 90μs to complete. +// +// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit +// poll loop takes at least 8 clock cycles to execute +#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 + +#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) + +volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +static volatile uint8_t slave_buffer_pos; +static volatile bool slave_has_register_set = false; + +// Wait for an i2c operation to finish +inline static +void i2c_delay(void) { + uint16_t lim = 0; + while(!(TWCR & (1<10. + // Check datasheets for more info. + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// Start a transaction with the given i2c slave address. The direction of the +// transfer is set with I2C_READ and I2C_WRITE. +// returns: 0 => success +// 1 => error +uint8_t i2c_master_start(uint8_t address) { + TWCR = (1< slave ACK +// 1 => slave NACK +uint8_t i2c_master_write(uint8_t data) { + TWDR = data; + TWCR = (1<= SLAVE_BUFFER_SIZE ) { + ack = 0; + slave_buffer_pos = 0; + } + slave_has_register_set = true; + } else { + i2c_slave_buffer[slave_buffer_pos] = TWDR; + BUFFER_POS_INC(); + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // master has addressed this device as a slave transmitter and is + // requesting data. + TWDR = i2c_slave_buffer[slave_buffer_pos]; + BUFFER_POS_INC(); + break; + + case TW_BUS_ERROR: // something went wrong, reset twi state + TWCR = 0; + default: + break; + } + // Reset everything, so we are ready for the next TWI interrupt + TWCR |= (1< + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#define I2C_READ 1 +#define I2C_WRITE 0 + +#define I2C_ACK 1 +#define I2C_NACK 0 + +#define SLAVE_BUFFER_SIZE 0x10 + +// i2c SCL clock frequency +#define SCL_CLOCK 100000L + +extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +void i2c_master_init(void); +uint8_t i2c_master_start(uint8_t address); +void i2c_master_stop(void); +uint8_t i2c_master_write(uint8_t data); +uint8_t i2c_master_read(int); +void i2c_reset_state(void); +void i2c_slave_init(uint8_t address); + +#endif diff --git a/keyboards/lets-split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c similarity index 55% rename from keyboards/lets-split/keymaps/default/keymap.c rename to keyboards/lets_split/keymaps/default/keymap.c index 00602394fed..01e3593c226 100644 --- a/keyboards/lets-split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "lets-split.h" +#include "lets_split.h" #include "action_layer.h" #define BASE 0 @@ -14,12 +14,12 @@ enum preonic_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = { - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T }, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G }, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B }, - {KC_IDK, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, PM_RESET } -} +[BASE] = KEYMAP( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + KC_IDK, KC_LCTL, KC_LALT, KC_LGUI, PM_RESET,KC_SPC, KC_SPC, PM_RESET,KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +) }; diff --git a/keyboards/lets-split/lets-split.c b/keyboards/lets_split/lets_split.c similarity index 83% rename from keyboards/lets-split/lets-split.c rename to keyboards/lets_split/lets_split.c index ee987230379..1859dc20a77 100644 --- a/keyboards/lets-split/lets-split.c +++ b/keyboards/lets_split/lets_split.c @@ -1,4 +1,4 @@ -#include "lets-split.h" +#include "lets_split.h" #ifdef AUDIO_ENABLE float tone_startup[][2] = SONG(STARTUP_SOUND); @@ -12,13 +12,13 @@ void matrix_init_kb(void) { PLAY_NOTE_ARRAY(tone_startup, false, 0); #endif - // green led on - DDRD |= (1<<5); - PORTD &= ~(1<<5); + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); - // orange led on - DDRB |= (1<<0); - PORTB &= ~(1<<0); + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); matrix_init_user(); }; diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h new file mode 100644 index 00000000000..e59aed59213 --- /dev/null +++ b/keyboards/lets_split/lets_split.h @@ -0,0 +1,21 @@ +#include "quantum.h" +#include + +void promicro_bootloader_jmp(bool program); + +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \ + k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \ + k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \ + k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \ + ) \ + { \ + { k00, k01, k02, k03, k04, k05 }, \ + { k10, k11, k12, k13, k14, k15 }, \ + { k20, k21, k22, k23, k24, k25 }, \ + { k30, k31, k32, k33, k34, k35 }, \ + { k40, k41, k42, k43, k44, k45 }, \ + { k50, k51, k52, k53, k54, k55 }, \ + { k60, k61, k62, k63, k64, k65 }, \ + { k70, k71, k72, k73, k74, k75 } \ + } \ No newline at end of file diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c new file mode 100644 index 00000000000..16c2ba0badf --- /dev/null +++ b/keyboards/lets_split/matrix.c @@ -0,0 +1,310 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "i2c.h" +#include "split_util.h" +#include "pro_micro.h" +#include "config.h" + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +#define ERROR_DISCONNECT_COUNT 5 + +static uint8_t debouncing = DEBOUNCE; +static const int ROWS_PER_HAND = MATRIX_ROWS/2; +static uint8_t error_count = 0; + +static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + debug_enable = true; + debug_matrix = true; + debug_mouse = true; + // initialize row and col + unselect_rows(); + init_cols(); + + TX_RX_LED_INIT; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); +} + +uint8_t _matrix_scan(void) +{ + // Right hand is stored after the left in the matirx so, we need to offset it + int offset = isLeftHand ? 0 : (ROWS_PER_HAND); + + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + select_row(i); + _delay_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i+offset] != cols) { + matrix_debouncing[i+offset] = cols; + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + matrix[i+offset] = matrix_debouncing[i+offset]; + } + } + } + + return 1; +} + +// Get rows from other half over i2c +int i2c_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); + if (err) goto i2c_error; + + // start of matrix stored at 0x00 + err = i2c_master_write(0x00); + if (err) goto i2c_error; + + // Start read + err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); + if (err) goto i2c_error; + + if (!err) { + int i; + for (i = 0; i < ROWS_PER_HAND-1; ++i) { + matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); + } + matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); + i2c_master_stop(); + } else { +i2c_error: // the cable is disconnceted, or something else went wrong + i2c_reset_state(); + return err; + } + + return 0; +} + +#ifndef USE_I2C +int serial_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + if (serial_update_buffers()) { + return 1; + } + + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = serial_slave_buffer[i]; + } + return 0; +} +#endif + +uint8_t matrix_scan(void) +{ + int ret = _matrix_scan(); + + + +#ifdef USE_I2C + if( i2c_transaction() ) { +#else + if( serial_transaction() ) { +#endif + // turn on the indicator led when halves are disconnected + TXLED1; + + error_count++; + + if (error_count > ERROR_DISCONNECT_COUNT) { + // reset other half if disconnected + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = 0; + } + } + } else { + // turn off the indicator led on no error + TXLED0; + error_count = 0; + } + + matrix_scan_quantum(); + + return ret; +} + +void matrix_slave_scan(void) { + _matrix_scan(); + + int offset = (isLeftHand) ? 0 : (MATRIX_ROWS / 2); + +#ifdef USE_I2C + for (int i = 0; i < ROWS_PER_HAND; ++i) { + /* i2c_slave_buffer[i] = matrix[offset+i]; */ + i2c_slave_buffer[i] = matrix[offset+i]; + } +#else + for (int i = 0; i < ROWS_PER_HAND; ++i) { + serial_slave_buffer[i] = matrix[offset+i]; + } +#endif +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(col_pins[x] & 0xF); + _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF); + } +} + +static matrix_row_t read_cols(void) +{ + matrix_row_t result = 0; + for(int x = 0; x < MATRIX_COLS; x++) { + result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); + } + return result; +} + +static void unselect_rows(void) +{ + for(int x = 0; x < ROWS_PER_HAND; x++) { + _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); + _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); + } +} + +static void select_row(uint8_t row) +{ + _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF); + _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF); +} diff --git a/keyboards/lets_split/pro_micro.h b/keyboards/lets_split/pro_micro.h new file mode 100644 index 00000000000..09e219b7b17 --- /dev/null +++ b/keyboards/lets_split/pro_micro.h @@ -0,0 +1,362 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + 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., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +// Workaround for wrong definitions in "iom32u4.h". +// This should be fixed in the AVR toolchain. +#undef UHCON +#undef UHINT +#undef UHIEN +#undef UHADDR +#undef UHFNUM +#undef UHFNUML +#undef UHFNUMH +#undef UHFLEN +#undef UPINRQX +#undef UPINTX +#undef UPNUM +#undef UPRST +#undef UPCONX +#undef UPCFG0X +#undef UPCFG1X +#undef UPSTAX +#undef UPCFG2X +#undef UPIENX +#undef UPDATX +#undef TCCR2A +#undef WGM20 +#undef WGM21 +#undef COM2B0 +#undef COM2B1 +#undef COM2A0 +#undef COM2A1 +#undef TCCR2B +#undef CS20 +#undef CS21 +#undef CS22 +#undef WGM22 +#undef FOC2B +#undef FOC2A +#undef TCNT2 +#undef TCNT2_0 +#undef TCNT2_1 +#undef TCNT2_2 +#undef TCNT2_3 +#undef TCNT2_4 +#undef TCNT2_5 +#undef TCNT2_6 +#undef TCNT2_7 +#undef OCR2A +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 +#undef OCR2B +#undef OCR2_0 +#undef OCR2_1 +#undef OCR2_2 +#undef OCR2_3 +#undef OCR2_4 +#undef OCR2_5 +#undef OCR2_6 +#undef OCR2_7 + +#define NUM_DIGITAL_PINS 30 +#define NUM_ANALOG_INPUTS 12 + +#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) +#define TXLED0 PORTD |= (1<<5) +#define TXLED1 PORTD &= ~(1<<5) +#define RXLED0 PORTB |= (1<<0) +#define RXLED1 PORTB &= ~(1<<0) + +static const uint8_t SDA = 2; +static const uint8_t SCL = 3; +#define LED_BUILTIN 13 + +// Map SPI port to 'new' pins D14..D17 +static const uint8_t SS = 17; +static const uint8_t MOSI = 16; +static const uint8_t MISO = 14; +static const uint8_t SCK = 15; + +// Mapping of analog pins as digital I/O +// A6-A11 share with digital pins +static const uint8_t A0 = 18; +static const uint8_t A1 = 19; +static const uint8_t A2 = 20; +static const uint8_t A3 = 21; +static const uint8_t A4 = 22; +static const uint8_t A5 = 23; +static const uint8_t A6 = 24; // D4 +static const uint8_t A7 = 25; // D6 +static const uint8_t A8 = 26; // D8 +static const uint8_t A9 = 27; // D9 +static const uint8_t A10 = 28; // D10 +static const uint8_t A11 = 29; // D12 + +#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) 0 +#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0)) +#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) + +// __AVR_ATmega32U4__ has an unusual mapping of pins to channels +extern const uint8_t PROGMEM analog_pin_to_channel_PGM[]; +#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) ) + +#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT))))) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA32U4 / ARDUINO LEONARDO +// +// D0 PD2 RXD1/INT2 +// D1 PD3 TXD1/INT3 +// D2 PD1 SDA SDA/INT1 +// D3# PD0 PWM8/SCL OC0B/SCL/INT0 +// D4 A6 PD4 ADC8 +// D5# PC6 ??? OC3A/#OC4A +// D6# A7 PD7 FastPWM #OC4D/ADC10 +// D7 PE6 INT6/AIN0 +// +// D8 A8 PB4 ADC11/PCINT4 +// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5 +// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6 +// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 +// D12 A11 PD6 T1/#OC4D/ADC9 +// D13# PC7 PWM10 CLK0/OC4A +// +// A0 D18 PF7 ADC7 +// A1 D19 PF6 ADC6 +// A2 D20 PF5 ADC5 +// A3 D21 PF4 ADC4 +// A4 D22 PF1 ADC1 +// A5 D23 PF0 ADC0 +// +// New pins D14..D17 to map SPI port to digital pins +// +// MISO D14 PB3 MISO,PCINT3 +// SCK D15 PB1 SCK,PCINT1 +// MOSI D16 PB2 MOSI,PCINT2 +// SS D17 PB0 RXLED,SS/PCINT0 +// +// Connected LEDs on board for TX and RX +// TXLED D24 PD5 XCK1 +// RXLED D17 PB0 +// HWB PE2 HWB + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, // D0 - PD2 + PD, // D1 - PD3 + PD, // D2 - PD1 + PD, // D3 - PD0 + PD, // D4 - PD4 + PC, // D5 - PC6 + PD, // D6 - PD7 + PE, // D7 - PE6 + + PB, // D8 - PB4 + PB, // D9 - PB5 + PB, // D10 - PB6 + PB, // D11 - PB7 + PD, // D12 - PD6 + PC, // D13 - PC7 + + PB, // D14 - MISO - PB3 + PB, // D15 - SCK - PB1 + PB, // D16 - MOSI - PB2 + PB, // D17 - SS - PB0 + + PF, // D18 - A0 - PF7 + PF, // D19 - A1 - PF6 + PF, // D20 - A2 - PF5 + PF, // D21 - A3 - PF4 + PF, // D22 - A4 - PF1 + PF, // D23 - A5 - PF0 + + PD, // D24 - PD5 + PD, // D25 / D6 - A7 - PD7 + PB, // D26 / D8 - A8 - PB4 + PB, // D27 / D9 - A9 - PB5 + PB, // D28 / D10 - A10 - PB6 + PD, // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(2), // D0 - PD2 + _BV(3), // D1 - PD3 + _BV(1), // D2 - PD1 + _BV(0), // D3 - PD0 + _BV(4), // D4 - PD4 + _BV(6), // D5 - PC6 + _BV(7), // D6 - PD7 + _BV(6), // D7 - PE6 + + _BV(4), // D8 - PB4 + _BV(5), // D9 - PB5 + _BV(6), // D10 - PB6 + _BV(7), // D11 - PB7 + _BV(6), // D12 - PD6 + _BV(7), // D13 - PC7 + + _BV(3), // D14 - MISO - PB3 + _BV(1), // D15 - SCK - PB1 + _BV(2), // D16 - MOSI - PB2 + _BV(0), // D17 - SS - PB0 + + _BV(7), // D18 - A0 - PF7 + _BV(6), // D19 - A1 - PF6 + _BV(5), // D20 - A2 - PF5 + _BV(4), // D21 - A3 - PF4 + _BV(1), // D22 - A4 - PF1 + _BV(0), // D23 - A5 - PF0 + + _BV(5), // D24 - PD5 + _BV(7), // D25 / D6 - A7 - PD7 + _BV(4), // D26 / D8 - A8 - PB4 + _BV(5), // D27 / D9 - A9 - PB5 + _BV(6), // D28 / D10 - A10 - PB6 + _BV(6), // D29 / D12 - A11 - PD6 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + TIMER0B, /* 3 */ + NOT_ON_TIMER, + TIMER3A, /* 5 */ + TIMER4D, /* 6 */ + NOT_ON_TIMER, + + NOT_ON_TIMER, + TIMER1A, /* 9 */ + TIMER1B, /* 10 */ + TIMER0A, /* 11 */ + + NOT_ON_TIMER, + TIMER4A, /* 13 */ + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +const uint8_t PROGMEM analog_pin_to_channel_PGM[] = { + 7, // A0 PF7 ADC7 + 6, // A1 PF6 ADC6 + 5, // A2 PF5 ADC5 + 4, // A3 PF4 ADC4 + 1, // A4 PF1 ADC1 + 0, // A5 PF0 ADC0 + 8, // A6 D4 PD4 ADC8 + 10, // A7 D6 PD7 ADC10 + 11, // A8 D8 PB4 ADC11 + 12, // A9 D9 PB5 ADC12 + 13, // A10 D10 PB6 ADC13 + 9 // A11 D12 PD6 ADC9 +}; + +#endif /* ARDUINO_MAIN */ + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +#endif /* Pins_Arduino_h */ diff --git a/keyboards/lets-split/readme.md b/keyboards/lets_split/readme.md similarity index 100% rename from keyboards/lets-split/readme.md rename to keyboards/lets_split/readme.md diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c new file mode 100644 index 00000000000..c394596e0c7 --- /dev/null +++ b/keyboards/lets_split/split_util.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include "split_util.h" +#include "matrix.h" +#include "i2c.h" +#include "keyboard.h" +#include "config.h" + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { + isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C + i2c_master_init(); +#else + serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { +#ifdef USE_I2C + i2c_slave_init(SLAVE_I2C_ADDRESS); +#else + serial_slave_init(); +#endif +} + +bool has_usb(void) { + USBCON |= (1 << OTGPADE); //enables VBUS pad + _delay_us(5); + return (USBSTA & (1< + +#define EECONFIG_BOOTMAGIC_END (uint8_t *)10 +#define EECONFIG_HANDEDNESS EECONFIG_BOOTMAGIC_END + +#define SLAVE_I2C_ADDRESS 0x32 + +extern volatile bool isLeftHand; + +// slave version of matix scan, defined in matrix.c +void matrix_slave_scan(void); + +void split_keyboard_setup(void); +bool has_usb(void); +void keyboard_slave_loop(void); + +#endif diff --git a/keyboards/lets_split/uno-slave/Makefile b/keyboards/lets_split/uno-slave/Makefile new file mode 100644 index 00000000000..84e67de113b --- /dev/null +++ b/keyboards/lets_split/uno-slave/Makefile @@ -0,0 +1,226 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = atmega328p +FORMAT = ihex +TARGET = keyboard-i2c-slave +SRC = \ + $(TARGET).c \ + uno-matrix.c \ + ../serial.c \ + ../i2c-slave.c + +ASRC = +OPT = s + +# Programming support using avrdude. Settings and variables. + +AVRDUDE_PROGRAMMER = arduino +AVRDUDE_PORT = /dev/ttyACM0 + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here +CDEFS = + +# Place -I options here +CINCS = + + +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) +CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) \ + -fno-aggressive-loop-optimizations + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend diff --git a/keyboards/lets_split/uno-slave/keyboard-i2c-slave.c b/keyboards/lets_split/uno-slave/keyboard-i2c-slave.c new file mode 100644 index 00000000000..2043e7b94f9 --- /dev/null +++ b/keyboards/lets_split/uno-slave/keyboard-i2c-slave.c @@ -0,0 +1,42 @@ +#include "../i2c-slave.h" +#include "../serial.h" +#include "uno-matrix.h" + +#include +#include +#include + +void setup(void) { + // give some time for noise to clear + _delay_us(1000); + + // turn off arduino uno's led on pin 13 + DDRB |= (1 << 5); + PORTB &= ~(1 << 5); + + matrix_init(); + /* i2c_slave_init(0x32); */ + serial_slave_init(); + + /* serial_slave_buffer[0] = 0xa1; */ + /* serial_slave_buffer[1] = 0x52; */ + /* serial_slave_buffer[2] = 0xa2; */ + /* serial_slave_buffer[3] = 0x67; */ + + // need interrupts for i2c slave code to work + sei(); +} + +void loop(void) { + matrix_scan(); + for(int i=0; i +#include +#include + +#include "uno-matrix.h" + +#define debug(X) NULL +#define debug_hex(X) NULL + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + //debug_enable = true; + //debug_matrix = true; + //debug_mouse = true; + // initialize row and col + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } +} + +uint8_t matrix_scan(void) +{ + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + _delay_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + //Serial.println(cols, BIN); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1< + +typedef uint8_t matrix_row_t; + +uint8_t matrix_rows(void); +uint8_t matrix_cols(void); +void matrix_init(void); +uint8_t matrix_scan(void); +bool matrix_is_modified(void); +bool matrix_is_on(uint8_t row, uint8_t col); +matrix_row_t matrix_get_row(uint8_t row); + +#endif diff --git a/keyboards/lets_split/usbconfig.h b/keyboards/lets_split/usbconfig.h new file mode 100644 index 00000000000..d0ca4c717e5 --- /dev/null +++ b/keyboards/lets_split/usbconfig.h @@ -0,0 +1,377 @@ +/* Name: usbconfig.h + * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers + * Author: Christian Starkjohann + * Creation Date: 2005-04-01 + * Tabsize: 4 + * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) + * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ + */ + +#ifndef __usbconfig_h_included__ +#define __usbconfig_h_included__ + + +/* +General Description: +This file is an example configuration (with inline documentation) for the USB +driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is +also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may +wire the lines to any other port, as long as D+ is also wired to INT0 (or any +other hardware interrupt, as long as it is the highest level interrupt, see +section at the end of this file). +*/ + +/* ---------------------------- Hardware Config ---------------------------- */ + +#define USB_CFG_IOPORTNAME D +/* This is the port where the USB bus is connected. When you configure it to + * "B", the registers PORTB, PINB and DDRB will be used. + */ +#define USB_CFG_DMINUS_BIT 3 +/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. + * This may be any bit in the port. + */ +#define USB_CFG_DPLUS_BIT 2 +/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. + * This may be any bit in the port. Please note that D+ must also be connected + * to interrupt pin INT0! [You can also use other interrupts, see section + * "Optional MCU Description" below, or you can connect D- to the interrupt, as + * it is required if you use the USB_COUNT_SOF feature. If you use D- for the + * interrupt, the USB interrupt will also be triggered at Start-Of-Frame + * markers every millisecond.] + */ +#define USB_CFG_CLOCK_KHZ (F_CPU/1000) +/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, + * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code + * require no crystal, they tolerate +/- 1% deviation from the nominal + * frequency. All other rates require a precision of 2000 ppm and thus a + * crystal! + * Since F_CPU should be defined to your actual clock rate anyway, you should + * not need to modify this setting. + */ +#define USB_CFG_CHECK_CRC 0 +/* Define this to 1 if you want that the driver checks integrity of incoming + * data packets (CRC checks). CRC checks cost quite a bit of code size and are + * currently only available for 18 MHz crystal clock. You must choose + * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. + */ + +/* ----------------------- Optional Hardware Config ------------------------ */ + +/* #define USB_CFG_PULLUP_IOPORTNAME D */ +/* If you connect the 1.5k pullup resistor from D- to a port pin instead of + * V+, you can connect and disconnect the device from firmware by calling + * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). + * This constant defines the port on which the pullup resistor is connected. + */ +/* #define USB_CFG_PULLUP_BIT 4 */ +/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined + * above) where the 1.5k pullup resistor is connected. See description + * above for details. + */ + +/* --------------------------- Functional Range ---------------------------- */ + +#define USB_CFG_HAVE_INTRIN_ENDPOINT 1 +/* Define this to 1 if you want to compile a version with two endpoints: The + * default control endpoint 0 and an interrupt-in endpoint (any other endpoint + * number). + */ +#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1 +/* Define this to 1 if you want to compile a version with three endpoints: The + * default control endpoint 0, an interrupt-in endpoint 3 (or the number + * configured below) and a catch-all default interrupt-in endpoint as above. + * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. + */ +#define USB_CFG_EP3_NUMBER 3 +/* If the so-called endpoint 3 is used, it can now be configured to any other + * endpoint number (except 0) with this macro. Default if undefined is 3. + */ +/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ +/* The above macro defines the startup condition for data toggling on the + * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. + * Since the token is toggled BEFORE sending any data, the first packet is + * sent with the oposite value of this configuration! + */ +#define USB_CFG_IMPLEMENT_HALT 0 +/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature + * for endpoint 1 (interrupt endpoint). Although you may not need this feature, + * it is required by the standard. We have made it a config option because it + * bloats the code considerably. + */ +#define USB_CFG_SUPPRESS_INTR_CODE 0 +/* Define this to 1 if you want to declare interrupt-in endpoints, but don't + * want to send any data over them. If this macro is defined to 1, functions + * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if + * you need the interrupt-in endpoints in order to comply to an interface + * (e.g. HID), but never want to send any data. This option saves a couple + * of bytes in flash memory and the transmit buffers in RAM. + */ +#define USB_CFG_INTR_POLL_INTERVAL 10 +/* If you compile a version with endpoint 1 (interrupt-in), this is the poll + * interval. The value is in milliseconds and must not be less than 10 ms for + * low speed devices. + */ +#define USB_CFG_IS_SELF_POWERED 0 +/* Define this to 1 if the device has its own power supply. Set it to 0 if the + * device is powered from the USB bus. + */ +#define USB_CFG_MAX_BUS_POWER 100 +/* Set this variable to the maximum USB bus power consumption of your device. + * The value is in milliamperes. [It will be divided by two since USB + * communicates power requirements in units of 2 mA.] + */ +#define USB_CFG_IMPLEMENT_FN_WRITE 1 +/* Set this to 1 if you want usbFunctionWrite() to be called for control-out + * transfers. Set it to 0 if you don't need it and want to save a couple of + * bytes. + */ +#define USB_CFG_IMPLEMENT_FN_READ 0 +/* Set this to 1 if you need to send control replies which are generated + * "on the fly" when usbFunctionRead() is called. If you only want to send + * data from a static buffer, set it to 0 and return the data from + * usbFunctionSetup(). This saves a couple of bytes. + */ +#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 +/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. + * You must implement the function usbFunctionWriteOut() which receives all + * interrupt/bulk data sent to any endpoint other than 0. The endpoint number + * can be found in 'usbRxToken'. + */ +#define USB_CFG_HAVE_FLOWCONTROL 0 +/* Define this to 1 if you want flowcontrol over USB data. See the definition + * of the macros usbDisableAllRequests() and usbEnableAllRequests() in + * usbdrv.h. + */ +#define USB_CFG_DRIVER_FLASH_PAGE 0 +/* If the device has more than 64 kBytes of flash, define this to the 64 k page + * where the driver's constants (descriptors) are located. Or in other words: + * Define this to 1 for boot loaders on the ATMega128. + */ +#define USB_CFG_LONG_TRANSFERS 0 +/* Define this to 1 if you want to send/receive blocks of more than 254 bytes + * in a single control-in or control-out transfer. Note that the capability + * for long transfers increases the driver size. + */ +/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ +/* This macro is a hook if you want to do unconventional things. If it is + * defined, it's inserted at the beginning of received message processing. + * If you eat the received message and don't want default processing to + * proceed, do a return after doing your things. One possible application + * (besides debugging) is to flash a status LED on each packet. + */ +/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ +/* This macro is a hook if you need to know when an USB RESET occurs. It has + * one parameter which distinguishes between the start of RESET state and its + * end. + */ +/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ +/* This macro (if defined) is executed when a USB SET_ADDRESS request was + * received. + */ +#define USB_COUNT_SOF 0 +/* define this macro to 1 if you need the global variable "usbSofCount" which + * counts SOF packets. This feature requires that the hardware interrupt is + * connected to D- instead of D+. + */ +/* #ifdef __ASSEMBLER__ + * macro myAssemblerMacro + * in YL, TCNT0 + * sts timer0Snapshot, YL + * endm + * #endif + * #define USB_SOF_HOOK myAssemblerMacro + * This macro (if defined) is executed in the assembler module when a + * Start Of Frame condition is detected. It is recommended to define it to + * the name of an assembler macro which is defined here as well so that more + * than one assembler instruction can be used. The macro may use the register + * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages + * immediately after an SOF pulse may be lost and must be retried by the host. + * What can you do with this hook? Since the SOF signal occurs exactly every + * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in + * designs running on the internal RC oscillator. + * Please note that Start Of Frame detection works only if D- is wired to the + * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! + */ +#define USB_CFG_CHECK_DATA_TOGGLING 0 +/* define this macro to 1 if you want to filter out duplicate data packets + * sent by the host. Duplicates occur only as a consequence of communication + * errors, when the host does not receive an ACK. Please note that you need to + * implement the filtering yourself in usbFunctionWriteOut() and + * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable + * for each control- and out-endpoint to check for duplicate packets. + */ +#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 +/* define this macro to 1 if you want the function usbMeasureFrameLength() + * compiled in. This function can be used to calibrate the AVR's RC oscillator. + */ +#define USB_USE_FAST_CRC 0 +/* The assembler module has two implementations for the CRC algorithm. One is + * faster, the other is smaller. This CRC routine is only used for transmitted + * messages where timing is not critical. The faster routine needs 31 cycles + * per byte while the smaller one needs 61 to 69 cycles. The faster routine + * may be worth the 32 bytes bigger code size if you transmit lots of data and + * run the AVR close to its limit. + */ + +/* -------------------------- Device Description --------------------------- */ + +#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF) +/* USB vendor ID for the device, low byte first. If you have registered your + * own Vendor ID, define it here. Otherwise you may use one of obdev's free + * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) +/* This is the ID of the product, low byte first. It is interpreted in the + * scope of the vendor ID. If you have registered your own VID with usb.org + * or if you have licensed a PID from somebody else, define it here. Otherwise + * you may use one of obdev's free shared VID/PID pairs. See the file + * USB-IDs-for-free.txt for details! + * *** IMPORTANT NOTE *** + * This template uses obdev's shared VID/PID pair for Vendor Class devices + * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand + * the implications! + */ +#define USB_CFG_DEVICE_VERSION 0x00, 0x01 +/* Version number of the device: Minor number first, then major number. + */ +#define USB_CFG_VENDOR_NAME 't', '.', 'm', '.', 'k', '.' +#define USB_CFG_VENDOR_NAME_LEN 6 +/* These two values define the vendor name returned by the USB device. The name + * must be given as a list of characters under single quotes. The characters + * are interpreted as Unicode (UTF-16) entities. + * If you don't want a vendor name string, undefine these macros. + * ALWAYS define a vendor name containing your Internet domain name if you use + * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for + * details. + */ +#define USB_CFG_DEVICE_NAME 'P', 'S', '/', '2', ' ', 'k', 'e', 'y', 'b', 'o', 'a', 'r', 'd', ' ', 'c', 'o', 'n', 'v', 'e', 'r', 't', 'e', 'r' +#define USB_CFG_DEVICE_NAME_LEN 23 +/* Same as above for the device name. If you don't want a device name, undefine + * the macros. See the file USB-IDs-for-free.txt before you assign a name if + * you use a shared VID/PID. + */ +/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ +/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ +/* Same as above for the serial number. If you don't want a serial number, + * undefine the macros. + * It may be useful to provide the serial number through other means than at + * compile time. See the section about descriptor properties below for how + * to fine tune control over USB descriptors such as the string descriptor + * for the serial number. + */ +#define USB_CFG_DEVICE_CLASS 0 +#define USB_CFG_DEVICE_SUBCLASS 0 +/* See USB specification if you want to conform to an existing device class. + * Class 0xff is "vendor specific". + */ +#define USB_CFG_INTERFACE_CLASS 3 /* HID */ +#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ +#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ +/* See USB specification if you want to conform to an existing device class or + * protocol. The following classes must be set at interface level: + * HID class is 3, no subclass and protocol required (but may be useful!) + * CDC class is 2, use subclass 2 and protocol 1 for ACM + */ +#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 +/* Define this to the length of the HID report descriptor, if you implement + * an HID device. Otherwise don't define it or define it to 0. + * If you use this define, you must add a PROGMEM character array named + * "usbHidReportDescriptor" to your code which contains the report descriptor. + * Don't forget to keep the array and this define in sync! + */ + +/* #define USB_PUBLIC static */ +/* Use the define above if you #include usbdrv.c instead of linking against it. + * This technique saves a couple of bytes in flash memory. + */ + +/* ------------------- Fine Control over USB Descriptors ------------------- */ +/* If you don't want to use the driver's default USB descriptors, you can + * provide our own. These can be provided as (1) fixed length static data in + * flash memory, (2) fixed length static data in RAM or (3) dynamically at + * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more + * information about this function. + * Descriptor handling is configured through the descriptor's properties. If + * no properties are defined or if they are 0, the default descriptor is used. + * Possible properties are: + * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched + * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is + * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if + * you want RAM pointers. + * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found + * in static memory is in RAM, not in flash memory. + * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), + * the driver must know the descriptor's length. The descriptor itself is + * found at the address of a well known identifier (see below). + * List of static descriptor names (must be declared PROGMEM if in flash): + * char usbDescriptorDevice[]; + * char usbDescriptorConfiguration[]; + * char usbDescriptorHidReport[]; + * char usbDescriptorString0[]; + * int usbDescriptorStringVendor[]; + * int usbDescriptorStringDevice[]; + * int usbDescriptorStringSerialNumber[]; + * Other descriptors can't be provided statically, they must be provided + * dynamically at runtime. + * + * Descriptor properties are or-ed or added together, e.g.: + * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) + * + * The following descriptors are defined: + * USB_CFG_DESCR_PROPS_DEVICE + * USB_CFG_DESCR_PROPS_CONFIGURATION + * USB_CFG_DESCR_PROPS_STRINGS + * USB_CFG_DESCR_PROPS_STRING_0 + * USB_CFG_DESCR_PROPS_STRING_VENDOR + * USB_CFG_DESCR_PROPS_STRING_PRODUCT + * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER + * USB_CFG_DESCR_PROPS_HID + * USB_CFG_DESCR_PROPS_HID_REPORT + * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) + * + * Note about string descriptors: String descriptors are not just strings, they + * are Unicode strings prefixed with a 2 byte header. Example: + * int serialNumberDescriptor[] = { + * USB_STRING_DESCRIPTOR_HEADER(6), + * 'S', 'e', 'r', 'i', 'a', 'l' + * }; + */ + +#define USB_CFG_DESCR_PROPS_DEVICE 0 +#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 +#define USB_CFG_DESCR_PROPS_STRINGS 0 +#define USB_CFG_DESCR_PROPS_STRING_0 0 +#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 +#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 +#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 +//#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC +#define USB_CFG_DESCR_PROPS_HID 0 +#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC +//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 +#define USB_CFG_DESCR_PROPS_UNKNOWN 0 + +/* ----------------------- Optional MCU Description ------------------------ */ + +/* The following configurations have working defaults in usbdrv.h. You + * usually don't need to set them explicitly. Only if you want to run + * the driver on a device which is not yet supported or with a compiler + * which is not fully supported (such as IAR C) or if you use a differnt + * interrupt than INT0, you may have to define some of these. + */ +/* #define USB_INTR_CFG MCUCR */ +/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ +/* #define USB_INTR_CFG_CLR 0 */ +/* #define USB_INTR_ENABLE GIMSK */ +/* #define USB_INTR_ENABLE_BIT INT0 */ +/* #define USB_INTR_PENDING GIFR */ +/* #define USB_INTR_PENDING_BIT INTF0 */ +/* #define USB_INTR_VECTOR INT0_vect */ + +#endif /* __usbconfig_h_included__ */ diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index 71153a5f583..cee3593eee4 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -72,6 +72,11 @@ void matrix_scan_kb(void); void matrix_init_user(void); void matrix_scan_user(void); +#ifdef I2C_SPLIT + void slave_matrix_init(void); + uint8_t slave_matrix_scan(void); +#endif + #ifdef __cplusplus } #endif From ce01f88c43adef9344727998f53bb1cf74913f65 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 5 Jul 2016 23:40:54 -0400 Subject: [PATCH 149/551] images, docks, clean-up [skip ci] --- .../imgs/split-keyboard-i2c-schematic.png | Bin 0 -> 26565 bytes .../imgs/split-keyboard-serial-schematic.png | Bin 0 -> 19487 bytes keyboards/lets_split/matrix.c | 1 + keyboards/lets_split/readme.md | 102 ++++++++ keyboards/lets_split/serial.c | 225 ++++++++++++++++++ keyboards/lets_split/serial.h | 26 ++ keyboards/lets_split/split_util.c | 9 + keyboards/lets_split/split_util.h | 6 +- .../{uno-slave => uno_slave}/Makefile | 0 .../keyboard-i2c-slave.c | 0 .../{uno-slave => uno_slave}/readme.md | 0 .../{uno-slave => uno_slave}/uno-matrix.c | 0 .../{uno-slave => uno_slave}/uno-matrix.h | 0 13 files changed, 367 insertions(+), 2 deletions(-) create mode 100644 keyboards/lets_split/imgs/split-keyboard-i2c-schematic.png create mode 100644 keyboards/lets_split/imgs/split-keyboard-serial-schematic.png create mode 100644 keyboards/lets_split/serial.c create mode 100644 keyboards/lets_split/serial.h rename keyboards/lets_split/{uno-slave => uno_slave}/Makefile (100%) rename keyboards/lets_split/{uno-slave => uno_slave}/keyboard-i2c-slave.c (100%) rename keyboards/lets_split/{uno-slave => uno_slave}/readme.md (100%) rename keyboards/lets_split/{uno-slave => uno_slave}/uno-matrix.c (100%) rename keyboards/lets_split/{uno-slave => uno_slave}/uno-matrix.h (100%) diff --git a/keyboards/lets_split/imgs/split-keyboard-i2c-schematic.png b/keyboards/lets_split/imgs/split-keyboard-i2c-schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..8882947187b15ae4c0cf70c90725d67fb2386d87 GIT binary patch literal 26565 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 Yy9>onw)Hgg6Sq#eBqNc0;l{oH1LK2XbN~PV literal 0 HcmV?d00001 diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c index 16c2ba0badf..1d768c59b32 100644 --- a/keyboards/lets_split/matrix.c +++ b/keyboards/lets_split/matrix.c @@ -29,6 +29,7 @@ along with this program. If not, see . #include "util.h" #include "matrix.h" #include "i2c.h" +#include "serial.h" #include "split_util.h" #include "pro_micro.h" #include "config.h" diff --git a/keyboards/lets_split/readme.md b/keyboards/lets_split/readme.md index e69de29bb2d..73fdb0f789d 100644 --- a/keyboards/lets_split/readme.md +++ b/keyboards/lets_split/readme.md @@ -0,0 +1,102 @@ +Let's Split +====== + +This readme and most of the code are from https://github.com/ahtn/tmk_keyboard/ + +Split keyboard firmware for Arduino Pro Micro or other ATmega32u4 +based boards. + +Features +-------- + +Some features supported by the firmware: + +* Either half can connect to the computer via USB, or both halves can be used + independently. +* You only need 3 wires to connect the two halves. Two for VCC and GND and one + for serial communication. +* Optional support for I2C connection between the two halves if for some + reason you require a faster connection between the two halves. Note this + requires an extra wire between halves and pull-up resistors on the data lines. + +Required Hardware +----------------- + +Apart from diodes and key switches for the keyboard matrix in each half, you +will need: + +* 2 Arduino Pro Micro's. You can find theses on aliexpress for ≈3.50USD each. +* 2 TRS sockets +* 1 TRS cable. + +Alternatively, you can use any sort of cable and socket that has at least 3 +wires. If you want to use I2C to communicate between halves, you will need a +cable with at least 4 wires and 2x 4.7kΩ pull-up resistors + +Optional Hardware +----------------- + +A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`. + +Wiring +------ + +The 3 wires of the TRS cable need to connect GND, VCC, and digital pin 3 (i.e. +PD0 on the ATmega32u4) between the two Pro Micros. + +Then wire your key matrix to any of the remaining 17 IO pins of the pro micro +and modify the `matrix.c` accordingly. + +The wiring for serial: + +![serial wiring](imgs/split-keyboard-serial-schematic.png) + +The wiring for i2c: + +![i2c wiring](imgs/split-keyboard-i2c-schematic.png) + +The pull-up resistors may be placed on either half. It is also possible +to use 4 resistors and have the pull-ups in both halves, but this is +unnecessary in simple use cases. + +Notes on Software Configuration +------------------------------- + +Configuring the firmware is similar to any other TMK project. One thing +to note is that `MATIX_ROWS` in `config.h` is the total number of rows between +the two halves, i.e. if your split keyboard has 4 rows in each half, then +`MATRIX_ROWS=8`. + +Also the current implementation assumes a maximum of 8 columns, but it would +not be very difficult to adapt it to support more if required. + + +Flashing +-------- + +If you define `EE_HANDS` in your `config.h`, you will need to set the +EEPROM for the left and right halves. The EEPROM is used to store whether the +half is left handed or right handed. This makes it so that the same firmware +file will run on both hands instead of having to flash left and right handed +versions of the firmware to each half. To flash the EEPROM file for the left +half run: +``` +make eeprom-left +``` +and similarly for right half +``` +make eeprom-right +``` + +After you have flashed the EEPROM for the first time, you then need to program +the flash memory: +``` +make program +``` +Note that you need to program both halves, but you have the option of using +different keymaps for each half. You could program the left half with a QWERTY +layout and the right half with a Colemak layout. Then if you connect the left +half to a computer by USB the keyboard will use QWERTY and Colemak when the +right half is connected. + + diff --git a/keyboards/lets_split/serial.c b/keyboards/lets_split/serial.c new file mode 100644 index 00000000000..f439c2f20bf --- /dev/null +++ b/keyboards/lets_split/serial.c @@ -0,0 +1,225 @@ +/* + * WARNING: be careful changing this code, it is very timing dependent + */ + +#ifndef F_CPU +#define F_CPU 16000000 +#endif + +#include +#include +#include +#include + +#include "serial.h" + +// Serial pulse period in microseconds. Its probably a bad idea to lower this +// value. +#define SERIAL_DELAY 24 + +uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + +#define SLAVE_DATA_CORRUPT (1<<0) +volatile uint8_t status = 0; + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + +// make the serial pin an input with pull-up resistor +inline static +void serial_input(void) { + SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +uint8_t serial_read_pin(void) { + return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +void serial_master_init(void) { + serial_output(); + serial_high(); +} + +void serial_slave_init(void) { + serial_input(); + + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +} + +// Used by the master to synchronize timing with the slave. +static +void sync_recv(void) { + serial_input(); + // This shouldn't hang if the slave disconnects because the + // serial line will float to high if the slave does disconnect. + while (!serial_read_pin()); + serial_delay(); +} + +// Used by the slave to send a synchronization signal to the master. +static +void sync_send(void) { + serial_output(); + + serial_low(); + serial_delay(); + + serial_high(); +} + +// Reads a byte from the serial line +static +uint8_t serial_read_byte(void) { + uint8_t byte = 0; + serial_input(); + for ( uint8_t i = 0; i < 8; ++i) { + byte = (byte << 1) | serial_read_pin(); + serial_delay(); + _delay_us(1); + } + + return byte; +} + +// Sends a byte with MSB ordering +static +void serial_write_byte(uint8_t data) { + uint8_t b = 8; + serial_output(); + while( b-- ) { + if(data & (1 << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +// interrupt handle to be used by the slave device +ISR(SERIAL_PIN_INTERRUPT) { + sync_send(); + + uint8_t checksum = 0; + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_slave_buffer[i]); + sync_send(); + checksum += serial_slave_buffer[i]; + } + serial_write_byte(checksum); + sync_send(); + + // wait for the sync to finish sending + serial_delay(); + + // read the middle of pulses + _delay_us(SERIAL_DELAY/2); + + uint8_t checksum_computed = 0; + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_master_buffer[i] = serial_read_byte(); + sync_send(); + checksum_computed += serial_master_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_send(); + + serial_input(); // end transaction + + if ( checksum_computed != checksum_received ) { + status |= SLAVE_DATA_CORRUPT; + } else { + status &= ~SLAVE_DATA_CORRUPT; + } +} + +inline +bool serial_slave_DATA_CORRUPT(void) { + return status & SLAVE_DATA_CORRUPT; +} + +// Copies the serial_slave_buffer to the master and sends the +// serial_master_buffer to the slave. +// +// Returns: +// 0 => no error +// 1 => slave did not respond +int serial_update_buffers(void) { + // this code is very time dependent, so we need to disable interrupts + cli(); + + // signal to the slave that we want to start a transaction + serial_output(); + serial_low(); + _delay_us(1); + + // wait for the slaves response + serial_input(); + serial_high(); + _delay_us(SERIAL_DELAY); + + // check if the slave is present + if (serial_read_pin()) { + // slave failed to pull the line low, assume not present + sei(); + return 1; + } + + // if the slave is present syncronize with it + sync_recv(); + + uint8_t checksum_computed = 0; + // receive data from the slave + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_slave_buffer[i] = serial_read_byte(); + sync_recv(); + checksum_computed += serial_slave_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_recv(); + + if (checksum_computed != checksum_received) { + sei(); + return 1; + } + + uint8_t checksum = 0; + // send data to the slave + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_master_buffer[i]); + sync_recv(); + checksum += serial_master_buffer[i]; + } + serial_write_byte(checksum); + sync_recv(); + + // always, release the line when not in use + serial_output(); + serial_high(); + + sei(); + return 0; +} diff --git a/keyboards/lets_split/serial.h b/keyboards/lets_split/serial.h new file mode 100644 index 00000000000..15fe4db7b4c --- /dev/null +++ b/keyboards/lets_split/serial.h @@ -0,0 +1,26 @@ +#ifndef MY_SERIAL_H +#define MY_SERIAL_H + +#include "config.h" +#include + +/* TODO: some defines for interrupt setup */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD0) +#define SERIAL_PIN_INTERRUPT INT0_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +// Buffers for master - slave communication +extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + +void serial_master_init(void); +void serial_slave_init(void); +int serial_update_buffers(void); +bool serial_slave_data_corrupt(void); + +#endif diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c index c394596e0c7..65003a71a46 100644 --- a/keyboards/lets_split/split_util.c +++ b/keyboards/lets_split/split_util.c @@ -7,13 +7,22 @@ #include "split_util.h" #include "matrix.h" #include "i2c.h" +#include "serial.h" #include "keyboard.h" #include "config.h" volatile bool isLeftHand = true; static void setup_handedness(void) { + #ifdef EE_HANDS isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + #ifdef I2C_MASTER_RIGHT + isLeftHand = !has_usb(); + #else + isLeftHand = has_usb(); + #endif + #endif } static void keyboard_master_setup(void) { diff --git a/keyboards/lets_split/split_util.h b/keyboards/lets_split/split_util.h index cf6890d37fd..6b896679cac 100644 --- a/keyboards/lets_split/split_util.h +++ b/keyboards/lets_split/split_util.h @@ -3,8 +3,10 @@ #include -#define EECONFIG_BOOTMAGIC_END (uint8_t *)10 -#define EECONFIG_HANDEDNESS EECONFIG_BOOTMAGIC_END +#ifdef EE_HANDS + #define EECONFIG_BOOTMAGIC_END (uint8_t *)10 + #define EECONFIG_HANDEDNESS EECONFIG_BOOTMAGIC_END +#endif #define SLAVE_I2C_ADDRESS 0x32 diff --git a/keyboards/lets_split/uno-slave/Makefile b/keyboards/lets_split/uno_slave/Makefile similarity index 100% rename from keyboards/lets_split/uno-slave/Makefile rename to keyboards/lets_split/uno_slave/Makefile diff --git a/keyboards/lets_split/uno-slave/keyboard-i2c-slave.c b/keyboards/lets_split/uno_slave/keyboard-i2c-slave.c similarity index 100% rename from keyboards/lets_split/uno-slave/keyboard-i2c-slave.c rename to keyboards/lets_split/uno_slave/keyboard-i2c-slave.c diff --git a/keyboards/lets_split/uno-slave/readme.md b/keyboards/lets_split/uno_slave/readme.md similarity index 100% rename from keyboards/lets_split/uno-slave/readme.md rename to keyboards/lets_split/uno_slave/readme.md diff --git a/keyboards/lets_split/uno-slave/uno-matrix.c b/keyboards/lets_split/uno_slave/uno-matrix.c similarity index 100% rename from keyboards/lets_split/uno-slave/uno-matrix.c rename to keyboards/lets_split/uno_slave/uno-matrix.c diff --git a/keyboards/lets_split/uno-slave/uno-matrix.h b/keyboards/lets_split/uno_slave/uno-matrix.h similarity index 100% rename from keyboards/lets_split/uno-slave/uno-matrix.h rename to keyboards/lets_split/uno_slave/uno-matrix.h From dd2522ba8b4acbf4bcd882d5e81df6410d9b69fb Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 5 Jul 2016 23:52:18 -0400 Subject: [PATCH 150/551] add options to config.h --- keyboards/lets_split/config.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index e68787e0b5d..5937ca44e2c 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -29,6 +29,7 @@ along with this program. If not, see . #define DESCRIPTION A split keyboard for the cheap makers /* key matrix size */ +// Rows are doubled-up #define MATRIX_ROWS 8 #define MATRIX_COLS 6 @@ -38,8 +39,10 @@ along with this program. If not, see . #define USE_I2C -// #define I2C_MASTER_LEFT -#define I2C_MASTER_RIGHT +// #define EE_HANDS + +#define I2C_MASTER_LEFT +// #define I2C_MASTER_RIGHT /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW From cb410729e631af9f962726c394956401b7c18079 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 5 Jul 2016 23:56:42 -0400 Subject: [PATCH 151/551] remove uno_slave for now, even though it's freakin cool --- keyboards/lets_split/uno_slave/Makefile | 226 ------------------ .../lets_split/uno_slave/keyboard-i2c-slave.c | 42 ---- keyboards/lets_split/uno_slave/readme.md | 1 - keyboards/lets_split/uno_slave/uno-matrix.c | 160 ------------- keyboards/lets_split/uno_slave/uno-matrix.h | 19 -- 5 files changed, 448 deletions(-) delete mode 100644 keyboards/lets_split/uno_slave/Makefile delete mode 100644 keyboards/lets_split/uno_slave/keyboard-i2c-slave.c delete mode 100644 keyboards/lets_split/uno_slave/readme.md delete mode 100644 keyboards/lets_split/uno_slave/uno-matrix.c delete mode 100644 keyboards/lets_split/uno_slave/uno-matrix.h diff --git a/keyboards/lets_split/uno_slave/Makefile b/keyboards/lets_split/uno_slave/Makefile deleted file mode 100644 index 84e67de113b..00000000000 --- a/keyboards/lets_split/uno_slave/Makefile +++ /dev/null @@ -1,226 +0,0 @@ -# Hey Emacs, this is a -*- makefile -*- - -# AVR-GCC Makefile template, derived from the WinAVR template (which -# is public domain), believed to be neutral to any flavor of "make" -# (GNU make, BSD make, SysV make) - - -MCU = atmega328p -FORMAT = ihex -TARGET = keyboard-i2c-slave -SRC = \ - $(TARGET).c \ - uno-matrix.c \ - ../serial.c \ - ../i2c-slave.c - -ASRC = -OPT = s - -# Programming support using avrdude. Settings and variables. - -AVRDUDE_PROGRAMMER = arduino -AVRDUDE_PORT = /dev/ttyACM0 - -# Name of this Makefile (used for "make depend"). -MAKEFILE = Makefile - -# Debugging format. -# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. -# AVR (extended) COFF requires stabs, plus an avr-objcopy run. -DEBUG = stabs - -# Compiler flag to set the C Standard level. -# c89 - "ANSI" C -# gnu89 - c89 plus GCC extensions -# c99 - ISO C99 standard (not yet fully implemented) -# gnu99 - c99 plus GCC extensions -CSTANDARD = -std=gnu99 - -# Place -D or -U options here -CDEFS = - -# Place -I options here -CINCS = - - -CDEBUG = -g$(DEBUG) -CWARN = -Wall -Wstrict-prototypes -CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) -CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) \ - -fno-aggressive-loop-optimizations - -#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs - - -#Additional libraries. - -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -PRINTF_LIB = - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -SCANF_LIB = - -MATH_LIB = -lm - -# External memory options - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - -#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref -LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) - - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) - - -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -MV = mv -f - -# Define all object files. -OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) - -# Define all listing files. -LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - -# Default target. -all: build - -build: elf hex eep - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT=$(OBJCOPY) --debugging \ ---change-section-address .data-0x800000 \ ---change-section-address .bss-0x800000 \ ---change-section-address .noinit-0x800000 \ ---change-section-address .eeprom-0x810000 - - -coff: $(TARGET).elf - $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof - - -extcoff: $(TARGET).elf - $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof - - -.SUFFIXES: .elf .hex .eep .lss .sym - -.elf.hex: - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -.elf.eep: - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create extended listing file from ELF output file. -.elf.lss: - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -.elf.sym: - $(NM) -n $< > $@ - - - -# Link: create ELF output file from object files. -$(TARGET).elf: $(OBJ) - $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -.c.o: - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -.c.s: - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -.S.o: - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - - -# Target: clean project. -clean: - $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ - $(TARGET).map $(TARGET).sym $(TARGET).lss \ - $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) - -depend: - if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ - then \ - sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ - $(MAKEFILE).$$$$ && \ - $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ - fi - echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ - >> $(MAKEFILE); \ - $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) - -.PHONY: all build elf hex eep lss sym program coff extcoff clean depend diff --git a/keyboards/lets_split/uno_slave/keyboard-i2c-slave.c b/keyboards/lets_split/uno_slave/keyboard-i2c-slave.c deleted file mode 100644 index 2043e7b94f9..00000000000 --- a/keyboards/lets_split/uno_slave/keyboard-i2c-slave.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "../i2c-slave.h" -#include "../serial.h" -#include "uno-matrix.h" - -#include -#include -#include - -void setup(void) { - // give some time for noise to clear - _delay_us(1000); - - // turn off arduino uno's led on pin 13 - DDRB |= (1 << 5); - PORTB &= ~(1 << 5); - - matrix_init(); - /* i2c_slave_init(0x32); */ - serial_slave_init(); - - /* serial_slave_buffer[0] = 0xa1; */ - /* serial_slave_buffer[1] = 0x52; */ - /* serial_slave_buffer[2] = 0xa2; */ - /* serial_slave_buffer[3] = 0x67; */ - - // need interrupts for i2c slave code to work - sei(); -} - -void loop(void) { - matrix_scan(); - for(int i=0; i -#include -#include - -#include "uno-matrix.h" - -#define debug(X) NULL -#define debug_hex(X) NULL - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif - -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - //debug_enable = true; - //debug_matrix = true; - //debug_mouse = true; - // initialize row and col - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } -} - -uint8_t matrix_scan(void) -{ - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - //Serial.println(cols, BIN); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - return 1; -} - -bool matrix_is_modified(void) -{ - if (debouncing) return false; - return true; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1< - -typedef uint8_t matrix_row_t; - -uint8_t matrix_rows(void); -uint8_t matrix_cols(void); -void matrix_init(void); -uint8_t matrix_scan(void); -bool matrix_is_modified(void); -bool matrix_is_on(uint8_t row, uint8_t col); -matrix_row_t matrix_get_row(uint8_t row); - -#endif From 3577e26fd9916ceab58779ec6323d43da54eb3b5 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 6 Jul 2016 00:24:31 -0400 Subject: [PATCH 152/551] fix/annotate wait_us lines --- keyboards/ergodox_ez/matrix.c | 12 ++++++++++++ quantum/matrix.c | 14 ++------------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c index 9c1efa1d05a..dc29cf5cd03 100644 --- a/keyboards/ergodox_ez/matrix.c +++ b/keyboards/ergodox_ez/matrix.c @@ -39,6 +39,17 @@ along with this program. If not, see . #include "timer.h" #endif +/* + * This constant define not debouncing time in msecs, but amount of matrix + * scan loops which should be made to get stable debounced results. + * + * On Ergodox matrix scan rate is relatively low, because of slow I2C. + * Now it's only 317 scans/second, or about 3.15 msec/scan. + * According to Cherry specs, debouncing time is 5 msec. + * + * And so, there is no sense to have DEBOUNCE higher than 2. + */ + #ifndef DEBOUNCE # define DEBOUNCE 5 #endif @@ -181,6 +192,7 @@ uint8_t matrix_scan(void) if (debouncing) { if (--debouncing) { wait_us(1); + // this should be wait_ms(1) but has been left as-is at EZ's request } else { for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = matrix_debouncing[i]; diff --git a/quantum/matrix.c b/quantum/matrix.c index 09491702552..3174e07390c 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -27,16 +27,6 @@ along with this program. If not, see . #include "matrix.h" /* Set 0 if debouncing isn't needed */ -/* - * This constant define not debouncing time in msecs, but amount of matrix - * scan loops which should be made to get stable debounced results. - * - * On Ergodox matrix scan rate is relatively low, because of slow I2C. - * Now it's only 317 scans/second, or about 3.15 msec/scan. - * According to Cherry specs, debouncing time is 5 msec. - * - * And so, there is no sense to have DEBOUNCE higher than 2. - */ #ifndef DEBOUNCING_DELAY # define DEBOUNCING_DELAY 5 @@ -168,7 +158,7 @@ uint8_t matrix_scan(void) if (debouncing) { if (--debouncing) { - wait_us(1); + wait_ms(1); } else { for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = matrix_debouncing[i]; @@ -192,7 +182,7 @@ uint8_t matrix_scan(void) if (debouncing) { if (--debouncing) { - wait_us(1); + wait_ms(1); } else { for (uint8_t i = 0; i < MATRIX_COLS; i++) { matrix_reversed[i] = matrix_reversed_debouncing[i]; From 3ac52b2e7623152f177670549b780492a0447c12 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 13:09:51 +0300 Subject: [PATCH 153/551] Remove serial_link .gitignore and .gitmodules --- quantum/serial_link/.gitignore | 1 - quantum/serial_link/.gitmodules | 3 --- 2 files changed, 4 deletions(-) delete mode 100644 quantum/serial_link/.gitignore delete mode 100644 quantum/serial_link/.gitmodules diff --git a/quantum/serial_link/.gitignore b/quantum/serial_link/.gitignore deleted file mode 100644 index 2d68e206e81..00000000000 --- a/quantum/serial_link/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.stackdump diff --git a/quantum/serial_link/.gitmodules b/quantum/serial_link/.gitmodules deleted file mode 100644 index 991cfe96d76..00000000000 --- a/quantum/serial_link/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "cgreen/cgreen"] - path = cgreen/cgreen - url = http://github.com/cgreen-devs/cgreen From c5bf090d16cf1fc4d8186f1e8fbbd62457e72da6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 13:10:30 +0300 Subject: [PATCH 154/551] Remove CGreen make files --- quantum/serial_link/cgreen/Makefile | 38 ----------------------- quantum/serial_link/cgreen/Makefile.build | 33 -------------------- quantum/serial_link/cgreen/cgreen | 1 - 3 files changed, 72 deletions(-) delete mode 100644 quantum/serial_link/cgreen/Makefile delete mode 100644 quantum/serial_link/cgreen/Makefile.build delete mode 160000 quantum/serial_link/cgreen/cgreen diff --git a/quantum/serial_link/cgreen/Makefile b/quantum/serial_link/cgreen/Makefile deleted file mode 100644 index 6b31a3f9232..00000000000 --- a/quantum/serial_link/cgreen/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# This Makefile ensures that the build is made out of source in a subdirectory called 'build' -# If it doesn't exist, it is created and a Makefile created there (from Makefile.build) -# -# This Makefile also contains delegation of the most common make commands -# -# If you have cmake installed you should be able to do: -# -# make -# make test -# make install -# make package -# -# That should build cgreen for C and C++, run some tests, install it locally and -# generate two distributable packages. - -all: build - cd $(CGREEN_BUILD_DIR); make all - -test: build - cd $(CGREEN_BUILD_DIR); make test - -clean: build - cd $(CGREEN_BUILD_DIR); make clean - -package: build - cd $(CGREEN_BUILD_DIR); make package - -install: - cd $(CGREEN_BUILD_DIR); make install - -############# Internal - -build: - mkdir -p $(CGREEN_BUILD_DIR) - cp Makefile.build $(CGREEN_BUILD_DIR)/Makefile - - -.SILENT: diff --git a/quantum/serial_link/cgreen/Makefile.build b/quantum/serial_link/cgreen/Makefile.build deleted file mode 100644 index f76165244ca..00000000000 --- a/quantum/serial_link/cgreen/Makefile.build +++ /dev/null @@ -1,33 +0,0 @@ -# This Makefile is copied from the cgreen top directory (where it is -# named Makefile.build) and put in a subdirectory called 'build' where -# builds are made This Makefile then automatically creates -# subdirectories for C and C++ builds configuring them using the cmake -# command. Once created you can always tweak the cmake setup as with -# any cmake build directory - -all: build-c build-c++ - for d in build-* ; do cd $$d; make ; cd .. ; done - -clean: - for d in build-* ; do cd $$d; make clean ; cd .. ; done - -check test: - for d in build-* ; do cd $$d; make check ; cd .. ; done - -package: - for d in build-* ; do cd $$d; make package ; cd .. ; done - -install: - for d in build-* ; do cd $$d; make install ; cd .. ; done - -############ Internal - -build-c: - mkdir build-c - cd build-c; cmake -G "Unix Makefiles" $(CGREEN_DIR) - -build-c++: - mkdir build-c++ - cd build-c++; cmake -G "Unix Makefiles" -DWITH_CXX:bool=ON $(CGREEN_DIR) - -.SILENT: diff --git a/quantum/serial_link/cgreen/cgreen b/quantum/serial_link/cgreen/cgreen deleted file mode 160000 index d4d438dda1b..00000000000 --- a/quantum/serial_link/cgreen/cgreen +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d4d438dda1b7131f0bd0530b2c258e9dea6a2a9f From d5e7603d551a31836bf0c59db259ddc3593a1aa7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 13:26:20 +0300 Subject: [PATCH 155/551] Remove extra serial_link subdirectory --- quantum/serial_link/README.md | 2 +- .../{serial_link => }/protocol/byte_stuffer.c | 0 .../{serial_link => }/protocol/byte_stuffer.h | 0 .../{serial_link => }/protocol/frame_router.c | 0 .../{serial_link => }/protocol/frame_router.h | 0 .../protocol/frame_validator.c | 0 .../protocol/frame_validator.h | 0 .../{serial_link => }/protocol/physical.h | 0 .../{serial_link => }/protocol/transport.c | 0 .../{serial_link => }/protocol/transport.h | 0 .../protocol/triple_buffered_object.c | 0 .../protocol/triple_buffered_object.h | 0 quantum/serial_link/serial_link.mk | 27 --------------- quantum/serial_link/serial_link_tests.mk | 34 ------------------- .../{serial_link => }/system/serial_link.c | 0 .../{serial_link => }/system/serial_link.h | 0 .../{serial_link => }/tests/Makefile | 0 .../tests/byte_stuffer_tests.c | 0 .../tests/frame_router_tests.c | 0 .../tests/frame_validator_tests.c | 0 .../{serial_link => }/tests/transport_tests.c | 0 .../tests/triple_buffered_object_tests.c | 0 22 files changed, 1 insertion(+), 62 deletions(-) rename quantum/serial_link/{serial_link => }/protocol/byte_stuffer.c (100%) rename quantum/serial_link/{serial_link => }/protocol/byte_stuffer.h (100%) rename quantum/serial_link/{serial_link => }/protocol/frame_router.c (100%) rename quantum/serial_link/{serial_link => }/protocol/frame_router.h (100%) rename quantum/serial_link/{serial_link => }/protocol/frame_validator.c (100%) rename quantum/serial_link/{serial_link => }/protocol/frame_validator.h (100%) rename quantum/serial_link/{serial_link => }/protocol/physical.h (100%) rename quantum/serial_link/{serial_link => }/protocol/transport.c (100%) rename quantum/serial_link/{serial_link => }/protocol/transport.h (100%) rename quantum/serial_link/{serial_link => }/protocol/triple_buffered_object.c (100%) rename quantum/serial_link/{serial_link => }/protocol/triple_buffered_object.h (100%) delete mode 100644 quantum/serial_link/serial_link.mk delete mode 100644 quantum/serial_link/serial_link_tests.mk rename quantum/serial_link/{serial_link => }/system/serial_link.c (100%) rename quantum/serial_link/{serial_link => }/system/serial_link.h (100%) rename quantum/serial_link/{serial_link => }/tests/Makefile (100%) rename quantum/serial_link/{serial_link => }/tests/byte_stuffer_tests.c (100%) rename quantum/serial_link/{serial_link => }/tests/frame_router_tests.c (100%) rename quantum/serial_link/{serial_link => }/tests/frame_validator_tests.c (100%) rename quantum/serial_link/{serial_link => }/tests/transport_tests.c (100%) rename quantum/serial_link/{serial_link => }/tests/triple_buffered_object_tests.c (100%) diff --git a/quantum/serial_link/README.md b/quantum/serial_link/README.md index 94af9125cef..e8490e290dd 100644 --- a/quantum/serial_link/README.md +++ b/quantum/serial_link/README.md @@ -1 +1 @@ -# tmk_serial_link \ No newline at end of file +# qmk_serial_link \ No newline at end of file diff --git a/quantum/serial_link/serial_link/protocol/byte_stuffer.c b/quantum/serial_link/protocol/byte_stuffer.c similarity index 100% rename from quantum/serial_link/serial_link/protocol/byte_stuffer.c rename to quantum/serial_link/protocol/byte_stuffer.c diff --git a/quantum/serial_link/serial_link/protocol/byte_stuffer.h b/quantum/serial_link/protocol/byte_stuffer.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/byte_stuffer.h rename to quantum/serial_link/protocol/byte_stuffer.h diff --git a/quantum/serial_link/serial_link/protocol/frame_router.c b/quantum/serial_link/protocol/frame_router.c similarity index 100% rename from quantum/serial_link/serial_link/protocol/frame_router.c rename to quantum/serial_link/protocol/frame_router.c diff --git a/quantum/serial_link/serial_link/protocol/frame_router.h b/quantum/serial_link/protocol/frame_router.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/frame_router.h rename to quantum/serial_link/protocol/frame_router.h diff --git a/quantum/serial_link/serial_link/protocol/frame_validator.c b/quantum/serial_link/protocol/frame_validator.c similarity index 100% rename from quantum/serial_link/serial_link/protocol/frame_validator.c rename to quantum/serial_link/protocol/frame_validator.c diff --git a/quantum/serial_link/serial_link/protocol/frame_validator.h b/quantum/serial_link/protocol/frame_validator.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/frame_validator.h rename to quantum/serial_link/protocol/frame_validator.h diff --git a/quantum/serial_link/serial_link/protocol/physical.h b/quantum/serial_link/protocol/physical.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/physical.h rename to quantum/serial_link/protocol/physical.h diff --git a/quantum/serial_link/serial_link/protocol/transport.c b/quantum/serial_link/protocol/transport.c similarity index 100% rename from quantum/serial_link/serial_link/protocol/transport.c rename to quantum/serial_link/protocol/transport.c diff --git a/quantum/serial_link/serial_link/protocol/transport.h b/quantum/serial_link/protocol/transport.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/transport.h rename to quantum/serial_link/protocol/transport.h diff --git a/quantum/serial_link/serial_link/protocol/triple_buffered_object.c b/quantum/serial_link/protocol/triple_buffered_object.c similarity index 100% rename from quantum/serial_link/serial_link/protocol/triple_buffered_object.c rename to quantum/serial_link/protocol/triple_buffered_object.c diff --git a/quantum/serial_link/serial_link/protocol/triple_buffered_object.h b/quantum/serial_link/protocol/triple_buffered_object.h similarity index 100% rename from quantum/serial_link/serial_link/protocol/triple_buffered_object.h rename to quantum/serial_link/protocol/triple_buffered_object.h diff --git a/quantum/serial_link/serial_link.mk b/quantum/serial_link/serial_link.mk deleted file mode 100644 index e164cc5ff36..00000000000 --- a/quantum/serial_link/serial_link.mk +++ /dev/null @@ -1,27 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2016 Fred Sundvik -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -UINCDIR += $(SERIAL_DIR) -SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c) -SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c) -SRC += serial_link_hal.c -OPT_DEFS += -DUSE_SERIAL_LINK diff --git a/quantum/serial_link/serial_link_tests.mk b/quantum/serial_link/serial_link_tests.mk deleted file mode 100644 index e292f582a98..00000000000 --- a/quantum/serial_link/serial_link_tests.mk +++ /dev/null @@ -1,34 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2016 Fred Sundvik -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -CGREEN_LIB = $(BUILDDIR)/cgreen/build-c/src/libcgreen.a - -CGREEN_DIR = "$(CURDIR)/$(SERIAL_DIR)/cgreen/cgreen" -CGREEN_BUILD_DIR = "$(CURDIR)/$(BUILDDIR)/cgreen" -export CGREEN_DIR -export CGREEN_BUILD_DIR -$(CGREEN_LIB): - @make -C $(SERIAL_DIR)/cgreen - -.PHONY serialtest: -serialtest : $(CGREEN_LIB) - @make -C $(SERIAL_DIR)/serial_link/tests BUILDDIR=../../../$(BUILDDIR) \ No newline at end of file diff --git a/quantum/serial_link/serial_link/system/serial_link.c b/quantum/serial_link/system/serial_link.c similarity index 100% rename from quantum/serial_link/serial_link/system/serial_link.c rename to quantum/serial_link/system/serial_link.c diff --git a/quantum/serial_link/serial_link/system/serial_link.h b/quantum/serial_link/system/serial_link.h similarity index 100% rename from quantum/serial_link/serial_link/system/serial_link.h rename to quantum/serial_link/system/serial_link.h diff --git a/quantum/serial_link/serial_link/tests/Makefile b/quantum/serial_link/tests/Makefile similarity index 100% rename from quantum/serial_link/serial_link/tests/Makefile rename to quantum/serial_link/tests/Makefile diff --git a/quantum/serial_link/serial_link/tests/byte_stuffer_tests.c b/quantum/serial_link/tests/byte_stuffer_tests.c similarity index 100% rename from quantum/serial_link/serial_link/tests/byte_stuffer_tests.c rename to quantum/serial_link/tests/byte_stuffer_tests.c diff --git a/quantum/serial_link/serial_link/tests/frame_router_tests.c b/quantum/serial_link/tests/frame_router_tests.c similarity index 100% rename from quantum/serial_link/serial_link/tests/frame_router_tests.c rename to quantum/serial_link/tests/frame_router_tests.c diff --git a/quantum/serial_link/serial_link/tests/frame_validator_tests.c b/quantum/serial_link/tests/frame_validator_tests.c similarity index 100% rename from quantum/serial_link/serial_link/tests/frame_validator_tests.c rename to quantum/serial_link/tests/frame_validator_tests.c diff --git a/quantum/serial_link/serial_link/tests/transport_tests.c b/quantum/serial_link/tests/transport_tests.c similarity index 100% rename from quantum/serial_link/serial_link/tests/transport_tests.c rename to quantum/serial_link/tests/transport_tests.c diff --git a/quantum/serial_link/serial_link/tests/triple_buffered_object_tests.c b/quantum/serial_link/tests/triple_buffered_object_tests.c similarity index 100% rename from quantum/serial_link/serial_link/tests/triple_buffered_object_tests.c rename to quantum/serial_link/tests/triple_buffered_object_tests.c From eb6e17be6fc378fdfb8c5c2c7253c17ffc07d225 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 6 Jul 2016 09:04:04 -0400 Subject: [PATCH 156/551] adds eep, removes usbconfig.h --- keyboards/lets_split/eeprom-lefthand.eep | 2 + keyboards/lets_split/eeprom-righthand.eep | 2 + keyboards/lets_split/usbconfig.h | 377 ---------------------- 3 files changed, 4 insertions(+), 377 deletions(-) create mode 100644 keyboards/lets_split/eeprom-lefthand.eep create mode 100644 keyboards/lets_split/eeprom-righthand.eep delete mode 100644 keyboards/lets_split/usbconfig.h diff --git a/keyboards/lets_split/eeprom-lefthand.eep b/keyboards/lets_split/eeprom-lefthand.eep new file mode 100644 index 00000000000..a92200b124a --- /dev/null +++ b/keyboards/lets_split/eeprom-lefthand.eep @@ -0,0 +1,2 @@ +:080000000000000000000001F7 +:00000001FF diff --git a/keyboards/lets_split/eeprom-righthand.eep b/keyboards/lets_split/eeprom-righthand.eep new file mode 100644 index 00000000000..91a68317045 --- /dev/null +++ b/keyboards/lets_split/eeprom-righthand.eep @@ -0,0 +1,2 @@ +:080000000000000000000000F8 +:00000001FF diff --git a/keyboards/lets_split/usbconfig.h b/keyboards/lets_split/usbconfig.h deleted file mode 100644 index d0ca4c717e5..00000000000 --- a/keyboards/lets_split/usbconfig.h +++ /dev/null @@ -1,377 +0,0 @@ -/* Name: usbconfig.h - * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers - * Author: Christian Starkjohann - * Creation Date: 2005-04-01 - * Tabsize: 4 - * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH - * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) - * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $ - */ - -#ifndef __usbconfig_h_included__ -#define __usbconfig_h_included__ - - -/* -General Description: -This file is an example configuration (with inline documentation) for the USB -driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is -also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may -wire the lines to any other port, as long as D+ is also wired to INT0 (or any -other hardware interrupt, as long as it is the highest level interrupt, see -section at the end of this file). -*/ - -/* ---------------------------- Hardware Config ---------------------------- */ - -#define USB_CFG_IOPORTNAME D -/* This is the port where the USB bus is connected. When you configure it to - * "B", the registers PORTB, PINB and DDRB will be used. - */ -#define USB_CFG_DMINUS_BIT 3 -/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. - * This may be any bit in the port. - */ -#define USB_CFG_DPLUS_BIT 2 -/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. - * This may be any bit in the port. Please note that D+ must also be connected - * to interrupt pin INT0! [You can also use other interrupts, see section - * "Optional MCU Description" below, or you can connect D- to the interrupt, as - * it is required if you use the USB_COUNT_SOF feature. If you use D- for the - * interrupt, the USB interrupt will also be triggered at Start-Of-Frame - * markers every millisecond.] - */ -#define USB_CFG_CLOCK_KHZ (F_CPU/1000) -/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000, - * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code - * require no crystal, they tolerate +/- 1% deviation from the nominal - * frequency. All other rates require a precision of 2000 ppm and thus a - * crystal! - * Since F_CPU should be defined to your actual clock rate anyway, you should - * not need to modify this setting. - */ -#define USB_CFG_CHECK_CRC 0 -/* Define this to 1 if you want that the driver checks integrity of incoming - * data packets (CRC checks). CRC checks cost quite a bit of code size and are - * currently only available for 18 MHz crystal clock. You must choose - * USB_CFG_CLOCK_KHZ = 18000 if you enable this option. - */ - -/* ----------------------- Optional Hardware Config ------------------------ */ - -/* #define USB_CFG_PULLUP_IOPORTNAME D */ -/* If you connect the 1.5k pullup resistor from D- to a port pin instead of - * V+, you can connect and disconnect the device from firmware by calling - * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h). - * This constant defines the port on which the pullup resistor is connected. - */ -/* #define USB_CFG_PULLUP_BIT 4 */ -/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined - * above) where the 1.5k pullup resistor is connected. See description - * above for details. - */ - -/* --------------------------- Functional Range ---------------------------- */ - -#define USB_CFG_HAVE_INTRIN_ENDPOINT 1 -/* Define this to 1 if you want to compile a version with two endpoints: The - * default control endpoint 0 and an interrupt-in endpoint (any other endpoint - * number). - */ -#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1 -/* Define this to 1 if you want to compile a version with three endpoints: The - * default control endpoint 0, an interrupt-in endpoint 3 (or the number - * configured below) and a catch-all default interrupt-in endpoint as above. - * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature. - */ -#define USB_CFG_EP3_NUMBER 3 -/* If the so-called endpoint 3 is used, it can now be configured to any other - * endpoint number (except 0) with this macro. Default if undefined is 3. - */ -/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */ -/* The above macro defines the startup condition for data toggling on the - * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1. - * Since the token is toggled BEFORE sending any data, the first packet is - * sent with the oposite value of this configuration! - */ -#define USB_CFG_IMPLEMENT_HALT 0 -/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature - * for endpoint 1 (interrupt endpoint). Although you may not need this feature, - * it is required by the standard. We have made it a config option because it - * bloats the code considerably. - */ -#define USB_CFG_SUPPRESS_INTR_CODE 0 -/* Define this to 1 if you want to declare interrupt-in endpoints, but don't - * want to send any data over them. If this macro is defined to 1, functions - * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if - * you need the interrupt-in endpoints in order to comply to an interface - * (e.g. HID), but never want to send any data. This option saves a couple - * of bytes in flash memory and the transmit buffers in RAM. - */ -#define USB_CFG_INTR_POLL_INTERVAL 10 -/* If you compile a version with endpoint 1 (interrupt-in), this is the poll - * interval. The value is in milliseconds and must not be less than 10 ms for - * low speed devices. - */ -#define USB_CFG_IS_SELF_POWERED 0 -/* Define this to 1 if the device has its own power supply. Set it to 0 if the - * device is powered from the USB bus. - */ -#define USB_CFG_MAX_BUS_POWER 100 -/* Set this variable to the maximum USB bus power consumption of your device. - * The value is in milliamperes. [It will be divided by two since USB - * communicates power requirements in units of 2 mA.] - */ -#define USB_CFG_IMPLEMENT_FN_WRITE 1 -/* Set this to 1 if you want usbFunctionWrite() to be called for control-out - * transfers. Set it to 0 if you don't need it and want to save a couple of - * bytes. - */ -#define USB_CFG_IMPLEMENT_FN_READ 0 -/* Set this to 1 if you need to send control replies which are generated - * "on the fly" when usbFunctionRead() is called. If you only want to send - * data from a static buffer, set it to 0 and return the data from - * usbFunctionSetup(). This saves a couple of bytes. - */ -#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0 -/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints. - * You must implement the function usbFunctionWriteOut() which receives all - * interrupt/bulk data sent to any endpoint other than 0. The endpoint number - * can be found in 'usbRxToken'. - */ -#define USB_CFG_HAVE_FLOWCONTROL 0 -/* Define this to 1 if you want flowcontrol over USB data. See the definition - * of the macros usbDisableAllRequests() and usbEnableAllRequests() in - * usbdrv.h. - */ -#define USB_CFG_DRIVER_FLASH_PAGE 0 -/* If the device has more than 64 kBytes of flash, define this to the 64 k page - * where the driver's constants (descriptors) are located. Or in other words: - * Define this to 1 for boot loaders on the ATMega128. - */ -#define USB_CFG_LONG_TRANSFERS 0 -/* Define this to 1 if you want to send/receive blocks of more than 254 bytes - * in a single control-in or control-out transfer. Note that the capability - * for long transfers increases the driver size. - */ -/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */ -/* This macro is a hook if you want to do unconventional things. If it is - * defined, it's inserted at the beginning of received message processing. - * If you eat the received message and don't want default processing to - * proceed, do a return after doing your things. One possible application - * (besides debugging) is to flash a status LED on each packet. - */ -/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */ -/* This macro is a hook if you need to know when an USB RESET occurs. It has - * one parameter which distinguishes between the start of RESET state and its - * end. - */ -/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */ -/* This macro (if defined) is executed when a USB SET_ADDRESS request was - * received. - */ -#define USB_COUNT_SOF 0 -/* define this macro to 1 if you need the global variable "usbSofCount" which - * counts SOF packets. This feature requires that the hardware interrupt is - * connected to D- instead of D+. - */ -/* #ifdef __ASSEMBLER__ - * macro myAssemblerMacro - * in YL, TCNT0 - * sts timer0Snapshot, YL - * endm - * #endif - * #define USB_SOF_HOOK myAssemblerMacro - * This macro (if defined) is executed in the assembler module when a - * Start Of Frame condition is detected. It is recommended to define it to - * the name of an assembler macro which is defined here as well so that more - * than one assembler instruction can be used. The macro may use the register - * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages - * immediately after an SOF pulse may be lost and must be retried by the host. - * What can you do with this hook? Since the SOF signal occurs exactly every - * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in - * designs running on the internal RC oscillator. - * Please note that Start Of Frame detection works only if D- is wired to the - * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES! - */ -#define USB_CFG_CHECK_DATA_TOGGLING 0 -/* define this macro to 1 if you want to filter out duplicate data packets - * sent by the host. Duplicates occur only as a consequence of communication - * errors, when the host does not receive an ACK. Please note that you need to - * implement the filtering yourself in usbFunctionWriteOut() and - * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable - * for each control- and out-endpoint to check for duplicate packets. - */ -#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 -/* define this macro to 1 if you want the function usbMeasureFrameLength() - * compiled in. This function can be used to calibrate the AVR's RC oscillator. - */ -#define USB_USE_FAST_CRC 0 -/* The assembler module has two implementations for the CRC algorithm. One is - * faster, the other is smaller. This CRC routine is only used for transmitted - * messages where timing is not critical. The faster routine needs 31 cycles - * per byte while the smaller one needs 61 to 69 cycles. The faster routine - * may be worth the 32 bytes bigger code size if you transmit lots of data and - * run the AVR close to its limit. - */ - -/* -------------------------- Device Description --------------------------- */ - -#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF) -/* USB vendor ID for the device, low byte first. If you have registered your - * own Vendor ID, define it here. Otherwise you may use one of obdev's free - * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules! - * *** IMPORTANT NOTE *** - * This template uses obdev's shared VID/PID pair for Vendor Class devices - * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand - * the implications! - */ -#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF) -/* This is the ID of the product, low byte first. It is interpreted in the - * scope of the vendor ID. If you have registered your own VID with usb.org - * or if you have licensed a PID from somebody else, define it here. Otherwise - * you may use one of obdev's free shared VID/PID pairs. See the file - * USB-IDs-for-free.txt for details! - * *** IMPORTANT NOTE *** - * This template uses obdev's shared VID/PID pair for Vendor Class devices - * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand - * the implications! - */ -#define USB_CFG_DEVICE_VERSION 0x00, 0x01 -/* Version number of the device: Minor number first, then major number. - */ -#define USB_CFG_VENDOR_NAME 't', '.', 'm', '.', 'k', '.' -#define USB_CFG_VENDOR_NAME_LEN 6 -/* These two values define the vendor name returned by the USB device. The name - * must be given as a list of characters under single quotes. The characters - * are interpreted as Unicode (UTF-16) entities. - * If you don't want a vendor name string, undefine these macros. - * ALWAYS define a vendor name containing your Internet domain name if you use - * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for - * details. - */ -#define USB_CFG_DEVICE_NAME 'P', 'S', '/', '2', ' ', 'k', 'e', 'y', 'b', 'o', 'a', 'r', 'd', ' ', 'c', 'o', 'n', 'v', 'e', 'r', 't', 'e', 'r' -#define USB_CFG_DEVICE_NAME_LEN 23 -/* Same as above for the device name. If you don't want a device name, undefine - * the macros. See the file USB-IDs-for-free.txt before you assign a name if - * you use a shared VID/PID. - */ -/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */ -/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */ -/* Same as above for the serial number. If you don't want a serial number, - * undefine the macros. - * It may be useful to provide the serial number through other means than at - * compile time. See the section about descriptor properties below for how - * to fine tune control over USB descriptors such as the string descriptor - * for the serial number. - */ -#define USB_CFG_DEVICE_CLASS 0 -#define USB_CFG_DEVICE_SUBCLASS 0 -/* See USB specification if you want to conform to an existing device class. - * Class 0xff is "vendor specific". - */ -#define USB_CFG_INTERFACE_CLASS 3 /* HID */ -#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */ -#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */ -/* See USB specification if you want to conform to an existing device class or - * protocol. The following classes must be set at interface level: - * HID class is 3, no subclass and protocol required (but may be useful!) - * CDC class is 2, use subclass 2 and protocol 1 for ACM - */ -#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 -/* Define this to the length of the HID report descriptor, if you implement - * an HID device. Otherwise don't define it or define it to 0. - * If you use this define, you must add a PROGMEM character array named - * "usbHidReportDescriptor" to your code which contains the report descriptor. - * Don't forget to keep the array and this define in sync! - */ - -/* #define USB_PUBLIC static */ -/* Use the define above if you #include usbdrv.c instead of linking against it. - * This technique saves a couple of bytes in flash memory. - */ - -/* ------------------- Fine Control over USB Descriptors ------------------- */ -/* If you don't want to use the driver's default USB descriptors, you can - * provide our own. These can be provided as (1) fixed length static data in - * flash memory, (2) fixed length static data in RAM or (3) dynamically at - * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more - * information about this function. - * Descriptor handling is configured through the descriptor's properties. If - * no properties are defined or if they are 0, the default descriptor is used. - * Possible properties are: - * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched - * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is - * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if - * you want RAM pointers. - * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found - * in static memory is in RAM, not in flash memory. - * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash), - * the driver must know the descriptor's length. The descriptor itself is - * found at the address of a well known identifier (see below). - * List of static descriptor names (must be declared PROGMEM if in flash): - * char usbDescriptorDevice[]; - * char usbDescriptorConfiguration[]; - * char usbDescriptorHidReport[]; - * char usbDescriptorString0[]; - * int usbDescriptorStringVendor[]; - * int usbDescriptorStringDevice[]; - * int usbDescriptorStringSerialNumber[]; - * Other descriptors can't be provided statically, they must be provided - * dynamically at runtime. - * - * Descriptor properties are or-ed or added together, e.g.: - * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18)) - * - * The following descriptors are defined: - * USB_CFG_DESCR_PROPS_DEVICE - * USB_CFG_DESCR_PROPS_CONFIGURATION - * USB_CFG_DESCR_PROPS_STRINGS - * USB_CFG_DESCR_PROPS_STRING_0 - * USB_CFG_DESCR_PROPS_STRING_VENDOR - * USB_CFG_DESCR_PROPS_STRING_PRODUCT - * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER - * USB_CFG_DESCR_PROPS_HID - * USB_CFG_DESCR_PROPS_HID_REPORT - * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver) - * - * Note about string descriptors: String descriptors are not just strings, they - * are Unicode strings prefixed with a 2 byte header. Example: - * int serialNumberDescriptor[] = { - * USB_STRING_DESCRIPTOR_HEADER(6), - * 'S', 'e', 'r', 'i', 'a', 'l' - * }; - */ - -#define USB_CFG_DESCR_PROPS_DEVICE 0 -#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC -//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0 -#define USB_CFG_DESCR_PROPS_STRINGS 0 -#define USB_CFG_DESCR_PROPS_STRING_0 0 -#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0 -#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0 -#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0 -//#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC -#define USB_CFG_DESCR_PROPS_HID 0 -#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC -//#define USB_CFG_DESCR_PROPS_HID_REPORT 0 -#define USB_CFG_DESCR_PROPS_UNKNOWN 0 - -/* ----------------------- Optional MCU Description ------------------------ */ - -/* The following configurations have working defaults in usbdrv.h. You - * usually don't need to set them explicitly. Only if you want to run - * the driver on a device which is not yet supported or with a compiler - * which is not fully supported (such as IAR C) or if you use a differnt - * interrupt than INT0, you may have to define some of these. - */ -/* #define USB_INTR_CFG MCUCR */ -/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */ -/* #define USB_INTR_CFG_CLR 0 */ -/* #define USB_INTR_ENABLE GIMSK */ -/* #define USB_INTR_ENABLE_BIT INT0 */ -/* #define USB_INTR_PENDING GIFR */ -/* #define USB_INTR_PENDING_BIT INTF0 */ -/* #define USB_INTR_VECTOR INT0_vect */ - -#endif /* __usbconfig_h_included__ */ From a7e3e4e652a2b9f172282f3876d74ee247a63105 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 14:29:46 +0300 Subject: [PATCH 157/551] Add serial_link compilation to Infinity Ergodox --- Makefile | 12 +++++++++++- keyboards/infinity_ergodox/Makefile | 1 + keyboards/infinity_ergodox/infinity_ergodox.c | 10 ++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c285dabad49..79f9e8b42ce 100644 --- a/Makefile +++ b/Makefile @@ -198,10 +198,20 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) endif ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) - OPT_DEFS += -DTAP_DANCE_ENABLE + OPT_DEFS += -DTAP_DANCE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c endif +ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) + SERIAL_DIR = $(QUANTUM_DIR)/serial_link + SERIAL_PATH = $(QUANTUM_PATH)/serial_link + SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) + SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) + SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) + OPT_DEFS += -DUSE_SERIAL_LINK + VAPTH += $(SERIAL_PATH) +endif + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile index fb21aae5ebc..efa32e037d5 100644 --- a/keyboards/infinity_ergodox/Makefile +++ b/keyboards/infinity_ergodox/Makefile @@ -66,6 +66,7 @@ COMMAND_ENABLE ?= yes # Commands for debug and configuration SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend NKRO_ENABLE ?= yes # USB Nkey Rollover CUSTOM_MATRIX ?= yes # Custom matrix file +SERIAL_LINK_ENABLE = yes ifndef QUANTUM_DIR include ../../Makefile diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c index 34aded1a734..85054775e84 100644 --- a/keyboards/infinity_ergodox/infinity_ergodox.c +++ b/keyboards/infinity_ergodox/infinity_ergodox.c @@ -1 +1,11 @@ #include "infinity_ergodox.h" +#include "ch.h" +#include "hal.h" +#include "serial_link/system/serial_link.h" + +void init_serial_link_hal(void) { + PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2); + PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2); + PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3); + PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3); +} From 4b45deb652045aac73e5fdd7412a73bcef19c0c8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 15:22:34 +0300 Subject: [PATCH 158/551] Enable serial_link support for ChibiOS --- Makefile | 2 +- tmk_core/common/keyboard.c | 11 +++++++++-- tmk_core/protocol/chibios/main.c | 30 +++++++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 79f9e8b42ce..cfbe0e994d7 100644 --- a/Makefile +++ b/Makefile @@ -208,7 +208,7 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) - OPT_DEFS += -DUSE_SERIAL_LINK + OPT_DEFS += -DSERIAL_LINK_ENABLE VAPTH += $(SERIAL_PATH) endif diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 81df8eb73bf..3a1262a9f9a 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -49,6 +49,9 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE # include "rgblight.h" #endif +#ifdef SERIAL_LINK_ENABLE +# include "serial_link/system/serial_link.h" +#endif #ifdef MATRIX_HAS_GHOST static bool has_ghost_in_row(uint8_t row) @@ -167,11 +170,15 @@ MATRIX_LOOP_END: #endif #ifdef SERIAL_MOUSE_ENABLE - serial_mouse_task(); + serial_mouse_task(); #endif #ifdef ADB_MOUSE_ENABLE - adb_mouse_task(); + adb_mouse_task(); +#endif + +#ifdef SERIAL_LINK_ENABLE + serial_link_update(); #endif // update LED diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index 54bb6a8f556..aeb11752f42 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -35,6 +35,9 @@ #ifdef SLEEP_LED_ENABLE #include "sleep_led.h" #endif +#ifdef SERIAL_LINK_ENABLE +#include "serial_link/system/serial_link.h" +#endif #include "suspend.h" @@ -98,9 +101,27 @@ int main(void) { /* init printf */ init_printf(NULL,sendchar_pf); - /* Wait until the USB is active */ - while(USB_DRIVER.state != USB_ACTIVE) +#ifdef SERIAL_LINK_ENABLE + init_serial_link(); +#endif + + host_driver_t* driver = NULL; + + /* Wait until the USB or serial link is active */ + while (true) { + if(USB_DRIVER.state == USB_ACTIVE) { + driver = &chibios_driver; + break; + } +#ifdef SERIAL_LINK_ENABLE + if(is_serial_link_connected()) { + driver = get_serial_link_driver(); + break; + } + serial_link_update(); +#endif chThdSleepMilliseconds(50); + } /* Do need to wait here! * Otherwise the next print might start a transfer on console EP @@ -113,7 +134,7 @@ int main(void) { /* init TMK modules */ keyboard_init(); - host_set_driver(&chibios_driver); + host_set_driver(driver); #ifdef SLEEP_LED_ENABLE sleep_led_init(); @@ -128,6 +149,9 @@ int main(void) { print("[s]"); while(USB_DRIVER.state == USB_SUSPENDED) { /* Do this in the suspended state */ +#ifdef SERIAL_LINK_ENABLE + serial_link_update(); +#endif suspend_power_down(); // on AVR this deep sleeps for 15ms /* Remote wakeup */ if((USB_DRIVER.status & 2) && suspend_wakeup_condition()) { From e5726b017a9de2922ea923818c6e215600f68a85 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 15:36:45 +0300 Subject: [PATCH 159/551] Add setting of the master side to the makefile --- Makefile | 14 ++++++++++++++ tmk_core/common.mk | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/Makefile b/Makefile index cfbe0e994d7..7c00ce2cc88 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,12 @@ ifndef KEYBOARD KEYBOARD=planck endif +MASTER ?= left +ifdef master + MASTER = $(master) +endif + + # converts things to keyboards/subproject ifneq (,$(findstring /,$(KEYBOARD))) TEMP:=$(KEYBOARD) @@ -212,6 +218,14 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) VAPTH += $(SERIAL_PATH) endif +ifeq ($(MASTER),right) + OPT_DEFS += -DMASTER_IS_ON_RIGHT +else + ifneq ($(MASTER),left) +$(error MASTER does not have a valid value(left/right)) + endif +endif + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax diff --git a/tmk_core/common.mk b/tmk_core/common.mk index d71fba9bc19..5bae0d762f4 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -97,6 +97,15 @@ ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) endif endif +ifeq ($(MASTER),right) + OPT_DEFS += -DMASTER_IS_ON_RIGHT +else + ifneq ($(MASTER),left) +$(error MASTER does not have a valid value(left/right)) + endif +endif + + # Version string OPT_DEFS += -DVERSION=$(shell (git describe --always --dirty || echo 'unknown') 2> /dev/null) From f727801bc69b3db28f84b7b8986756193bbfd21e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 6 Jul 2016 20:17:16 +0300 Subject: [PATCH 160/551] Delete .gitmodules from visualizer --- quantum/visualizer/.gitmodules | 3 --- quantum/visualizer/ugfx | 1 - 2 files changed, 4 deletions(-) delete mode 100644 quantum/visualizer/.gitmodules delete mode 160000 quantum/visualizer/ugfx diff --git a/quantum/visualizer/.gitmodules b/quantum/visualizer/.gitmodules deleted file mode 100644 index b320458c0eb..00000000000 --- a/quantum/visualizer/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "ugfx"] - path = ugfx - url = https://bitbucket.org/fredizzimo/ugfx.git diff --git a/quantum/visualizer/ugfx b/quantum/visualizer/ugfx deleted file mode 160000 index e221a690616..00000000000 --- a/quantum/visualizer/ugfx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e221a690616e20f87e0b0088baffdbd5427be862 From 10f3a1b6215af2a1c74b0245e46f5b6352ee18a4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 00:17:32 +0300 Subject: [PATCH 161/551] Add ugfx submodule --- .gitmodules | 3 +++ lib/ugfx | 1 + 2 files changed, 4 insertions(+) create mode 160000 lib/ugfx diff --git a/.gitmodules b/.gitmodules index 1576b8dc0b9..7e3c92d0312 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "lib/chibios-contrib"] path = lib/chibios-contrib url = https://github.com/ChibiOS/ChibiOS-Contrib.git +[submodule "lib/ugfx"] + path = lib/ugfx + url = https://bitbucket.org/Tectu/ugfx diff --git a/lib/ugfx b/lib/ugfx new file mode 160000 index 00000000000..13e084ae623 --- /dev/null +++ b/lib/ugfx @@ -0,0 +1 @@ +Subproject commit 13e084ae6231857cd0d472c529f34be07d93c08b From 70797bb8f21c72cba15b314b2d0a6684bfedc369 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 00:20:20 +0300 Subject: [PATCH 162/551] Makefile changes and files to compile Visualizer --- Makefile | 15 +- keyboards/infinity_ergodox/Makefile | 3 + keyboards/infinity_ergodox/gfxconf.h | 331 ++++++++++++++++++ .../infinity_ergodox/lcd_backlight_hal.c | 84 +++++ keyboards/infinity_ergodox/visualizer_user.c | 168 +++++++++ quantum/visualizer/visualizer.c | 2 - quantum/visualizer/visualizer.h | 2 - quantum/visualizer/visualizer.mk | 22 +- 8 files changed, 604 insertions(+), 23 deletions(-) create mode 100644 keyboards/infinity_ergodox/gfxconf.h create mode 100644 keyboards/infinity_ergodox/lcd_backlight_hal.c create mode 100644 keyboards/infinity_ergodox/visualizer_user.c diff --git a/Makefile b/Makefile index 7c00ce2cc88..a7a10bf3264 100644 --- a/Makefile +++ b/Makefile @@ -218,14 +218,6 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) VAPTH += $(SERIAL_PATH) endif -ifeq ($(MASTER),right) - OPT_DEFS += -DMASTER_IS_ON_RIGHT -else - ifneq ($(MASTER),left) -$(error MASTER does not have a valid value(left/right)) - endif -endif - # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax @@ -257,10 +249,17 @@ ifeq ($(PLATFORM),AVR) else ifeq ($(PLATFORM),CHIBIOS) include $(TMK_PATH)/protocol/chibios.mk include $(TMK_PATH)/chibios.mk + OPT_OS = chibios else $(error Unknown platform) endif +ifeq ($(strip $(VISUALIZER_ENABLE)), yes) + VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer + VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer + include $(VISUALIZER_PATH)/visualizer.mk +endif + include $(TMK_PATH)/rules.mk GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile index efa32e037d5..8be2f51b1f0 100644 --- a/keyboards/infinity_ergodox/Makefile +++ b/keyboards/infinity_ergodox/Makefile @@ -67,6 +67,9 @@ SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend NKRO_ENABLE ?= yes # USB Nkey Rollover CUSTOM_MATRIX ?= yes # Custom matrix file SERIAL_LINK_ENABLE = yes +VISUALIZER_ENABLE ?= yes +LCD_ENABLE ?= yes +LCD_BACKLIGHT_ENABLE ?= yes ifndef QUANTUM_DIR include ../../Makefile diff --git a/keyboards/infinity_ergodox/gfxconf.h b/keyboards/infinity_ergodox/gfxconf.h new file mode 100644 index 00000000000..8caa577b739 --- /dev/null +++ b/keyboards/infinity_ergodox/gfxconf.h @@ -0,0 +1,331 @@ +/** + * This file has a different license to the rest of the uGFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +/** + * Copy this file into your project directory and rename it as gfxconf.h + * Edit your copy to turn on the uGFX features you want to use. + * The values below are the defaults. + * + * Only remove the comments from lines where you want to change the + * default value. This allows definitions to be included from + * driver makefiles when required and provides the best future + * compatibility for your project. + * + * Please use spaces instead of tabs in this file. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + + +/////////////////////////////////////////////////////////////////////////// +// GOS - One of these must be defined, preferably in your Makefile // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_USE_OS_CHIBIOS TRUE +//#define GFX_USE_OS_FREERTOS FALSE +// #define GFX_FREERTOS_USE_TRACE FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE +//#define GFX_USE_OS_ECOS FALSE +//#define GFX_USE_OS_RAWRTOS FALSE +//#define GFX_USE_OS_ARDUINO FALSE +//#define GFX_USE_OS_KEIL FALSE +//#define GFX_USE_OS_CMSIS FALSE +//#define GFX_USE_OS_RAW32 FALSE +// #define INTERRUPTS_OFF() optional_code +// #define INTERRUPTS_ON() optional_code +// These are not defined by default for some reason +#define GOS_NEED_X_THREADS FALSE +#define GOS_NEED_X_HEAP FALSE + +// Options that (should where relevant) apply to all operating systems + #define GFX_NO_INLINE FALSE +// #define GFX_COMPILER GFX_COMPILER_UNKNOWN +// #define GFX_CPU GFX_CPU_UNKNOWN +// #define GFX_OS_HEAP_SIZE 0 +// #define GFX_OS_NO_INIT FALSE +// #define GFX_OS_INIT_NO_WARNING FALSE +// #define GFX_OS_PRE_INIT_FUNCTION myHardwareInitRoutine +// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine +// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine + + +/////////////////////////////////////////////////////////////////////////// +// GDISP // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GDISP TRUE + +//#define GDISP_NEED_AUTOFLUSH FALSE +//#define GDISP_NEED_TIMERFLUSH FALSE +//#define GDISP_NEED_VALIDATION TRUE +//#define GDISP_NEED_CLIP TRUE +#define GDISP_NEED_CIRCLE TRUE +#define GDISP_NEED_ELLIPSE TRUE +#define GDISP_NEED_ARC TRUE +#define GDISP_NEED_ARCSECTORS TRUE +#define GDISP_NEED_CONVEX_POLYGON TRUE +//#define GDISP_NEED_SCROLL FALSE +#define GDISP_NEED_PIXELREAD TRUE +#define GDISP_NEED_CONTROL TRUE +//#define GDISP_NEED_QUERY FALSE +//#define GDISP_NEED_MULTITHREAD FALSE +//#define GDISP_NEED_STREAMING FALSE +#define GDISP_NEED_TEXT TRUE +// #define GDISP_NEED_TEXT_WORDWRAP FALSE +// #define GDISP_NEED_ANTIALIAS FALSE +// #define GDISP_NEED_UTF8 FALSE + #define GDISP_NEED_TEXT_KERNING TRUE +// #define GDISP_INCLUDE_FONT_UI1 FALSE +// #define GDISP_INCLUDE_FONT_UI2 FALSE // The smallest preferred font. +// #define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS10 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24 FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32 FALSE + #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12 TRUE +// #define GDISP_INCLUDE_FONT_FIXED_10X20 FALSE +// #define GDISP_INCLUDE_FONT_FIXED_7X14 FALSE + #define GDISP_INCLUDE_FONT_FIXED_5X8 TRUE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA FALSE +// #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA FALSE +// #define GDISP_INCLUDE_USER_FONTS FALSE + +//#define GDISP_NEED_IMAGE FALSE +// #define GDISP_NEED_IMAGE_NATIVE FALSE +// #define GDISP_NEED_IMAGE_GIF FALSE +// #define GDISP_NEED_IMAGE_BMP FALSE +// #define GDISP_NEED_IMAGE_BMP_1 FALSE +// #define GDISP_NEED_IMAGE_BMP_4 FALSE +// #define GDISP_NEED_IMAGE_BMP_4_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_8 FALSE +// #define GDISP_NEED_IMAGE_BMP_8_RLE FALSE +// #define GDISP_NEED_IMAGE_BMP_16 FALSE +// #define GDISP_NEED_IMAGE_BMP_24 FALSE +// #define GDISP_NEED_IMAGE_BMP_32 FALSE +// #define GDISP_NEED_IMAGE_JPG FALSE +// #define GDISP_NEED_IMAGE_PNG FALSE +// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE +#ifdef EMULATOR +#define GDISP_NEED_PIXMAP TRUE +#endif +// #define GDISP_NEED_PIXMAP_IMAGE FALSE + +//#define GDISP_DEFAULT_ORIENTATION GDISP_ROTATE_LANDSCAPE // If not defined the native hardware orientation is used. +//#define GDISP_LINEBUF_SIZE 128 +//#define GDISP_STARTUP_COLOR Black +#define GDISP_NEED_STARTUP_LOGO FALSE + +//#define GDISP_TOTAL_DISPLAYS 2 + +#ifndef EMULATOR +#define GDISP_DRIVER_LIST GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX +#else +#define GDISP_DRIVER_LIST GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX +#endif + + #ifdef GDISP_DRIVER_LIST + // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability + #define GDISP_HARDWARE_STREAM_WRITE FALSE + #define GDISP_HARDWARE_STREAM_READ FALSE + #define GDISP_HARDWARE_STREAM_POS FALSE + #define GDISP_HARDWARE_DRAWPIXEL TRUE + #define GDISP_HARDWARE_CLEARS FALSE + #define GDISP_HARDWARE_FILLS FALSE + #define GDISP_HARDWARE_BITFILLS FALSE + #define GDISP_HARDWARE_SCROLL FALSE + #define GDISP_HARDWARE_PIXELREAD TRUE + #define GDISP_HARDWARE_CONTROL TRUE + #define GDISP_HARDWARE_QUERY FALSE + #define GDISP_HARDWARE_CLIP FALSE + + #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB888 + #endif + +// The custom format is not defined for some reason, so define it as error +// so we don't get compiler warnings +#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR + +#define GDISP_USE_GFXNET FALSE +// #define GDISP_GFXNET_PORT 13001 +// #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP FALSE +// #define GDISP_DONT_WAIT_FOR_NET_DISPLAY FALSE +// #define GDISP_GFXNET_UNSAFE_SOCKETS FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GWIN // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GWIN FALSE + +//#define GWIN_NEED_WINDOWMANAGER FALSE +// #define GWIN_REDRAW_IMMEDIATE FALSE +// #define GWIN_REDRAW_SINGLEOP FALSE +// #define GWIN_NEED_FLASHING FALSE +// #define GWIN_FLASHING_PERIOD 250 + +//#define GWIN_NEED_CONSOLE FALSE +// #define GWIN_CONSOLE_USE_HISTORY FALSE +// #define GWIN_CONSOLE_HISTORY_AVERAGING FALSE +// #define GWIN_CONSOLE_HISTORY_ATCREATE FALSE +// #define GWIN_CONSOLE_ESCSEQ FALSE +// #define GWIN_CONSOLE_USE_BASESTREAM FALSE +// #define GWIN_CONSOLE_USE_FLOAT FALSE +//#define GWIN_NEED_GRAPH FALSE +//#define GWIN_NEED_GL3D FALSE + +//#define GWIN_NEED_WIDGET FALSE +//#define GWIN_FOCUS_HIGHLIGHT_WIDTH 1 +// #define GWIN_NEED_LABEL FALSE +// #define GWIN_LABEL_ATTRIBUTE FALSE +// #define GWIN_NEED_BUTTON FALSE +// #define GWIN_BUTTON_LAZY_RELEASE FALSE +// #define GWIN_NEED_SLIDER FALSE +// #define GWIN_SLIDER_NOSNAP FALSE +// #define GWIN_SLIDER_DEAD_BAND 5 +// #define GWIN_SLIDER_TOGGLE_INC 20 +// #define GWIN_NEED_CHECKBOX FALSE +// #define GWIN_NEED_IMAGE FALSE +// #define GWIN_NEED_IMAGE_ANIMATION FALSE +// #define GWIN_NEED_RADIO FALSE +// #define GWIN_NEED_LIST FALSE +// #define GWIN_NEED_LIST_IMAGES FALSE +// #define GWIN_NEED_PROGRESSBAR FALSE +// #define GWIN_PROGRESSBAR_AUTO FALSE +// #define GWIN_NEED_KEYBOARD FALSE +// #define GWIN_KEYBOARD_DEFAULT_LAYOUT VirtualKeyboard_English1 +// #define GWIN_NEED_KEYBOARD_ENGLISH1 TRUE +// #define GWIN_NEED_TEXTEDIT FALSE +// #define GWIN_FLAT_STYLING FALSE +// #define GWIN_WIDGET_TAGS FALSE + +//#define GWIN_NEED_CONTAINERS FALSE +// #define GWIN_NEED_CONTAINER FALSE +// #define GWIN_NEED_FRAME FALSE +// #define GWIN_NEED_TABSET FALSE +// #define GWIN_TABSET_TABHEIGHT 18 + + +/////////////////////////////////////////////////////////////////////////// +// GEVENT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GEVENT TRUE + +//#define GEVENT_ASSERT_NO_RESOURCE FALSE +//#define GEVENT_MAXIMUM_SIZE 32 +//#define GEVENT_MAX_SOURCE_LISTENERS 32 + + +/////////////////////////////////////////////////////////////////////////// +// GTIMER // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GTIMER FALSE + +//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY +//#define GTIMER_THREAD_WORKAREA_SIZE 2048 + + +/////////////////////////////////////////////////////////////////////////// +// GQUEUE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GQUEUE FALSE + +//#define GQUEUE_NEED_ASYNC FALSE +//#define GQUEUE_NEED_GSYNC FALSE +//#define GQUEUE_NEED_FSYNC FALSE +//#define GQUEUE_NEED_BUFFERS FALSE + +/////////////////////////////////////////////////////////////////////////// +// GINPUT // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GINPUT FALSE + +//#define GINPUT_NEED_MOUSE FALSE +// #define GINPUT_TOUCH_STARTRAW FALSE +// #define GINPUT_TOUCH_NOTOUCH FALSE +// #define GINPUT_TOUCH_NOCALIBRATE FALSE +// #define GINPUT_TOUCH_NOCALIBRATE_GUI FALSE +// #define GINPUT_MOUSE_POLL_PERIOD 25 +// #define GINPUT_MOUSE_CLICK_TIME 300 +// #define GINPUT_TOUCH_CXTCLICK_TIME 700 +// #define GINPUT_TOUCH_USER_CALIBRATION_LOAD FALSE +// #define GINPUT_TOUCH_USER_CALIBRATION_SAVE FALSE +// #define GMOUSE_DRIVER_LIST GMOUSEVMT_Win32, GMOUSEVMT_Win32 +//#define GINPUT_NEED_KEYBOARD FALSE +// #define GINPUT_KEYBOARD_POLL_PERIOD 200 +// #define GKEYBOARD_DRIVER_LIST GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 +// #define GKEYBOARD_LAYOUT_OFF FALSE +// #define GKEYBOARD_LAYOUT_SCANCODE2_US FALSE +//#define GINPUT_NEED_TOGGLE FALSE +//#define GINPUT_NEED_DIAL FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GFILE // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GFILE FALSE + +//#define GFILE_NEED_PRINTG FALSE +//#define GFILE_NEED_SCANG FALSE +//#define GFILE_NEED_STRINGS FALSE +//#define GFILE_NEED_FILELISTS FALSE +//#define GFILE_NEED_STDIO FALSE +//#define GFILE_NEED_NOAUTOMOUNT FALSE +//#define GFILE_NEED_NOAUTOSYNC FALSE + +//#define GFILE_NEED_MEMFS FALSE +//#define GFILE_NEED_ROMFS FALSE +//#define GFILE_NEED_RAMFS FALSE +//#define GFILE_NEED_FATFS FALSE +//#define GFILE_NEED_NATIVEFS FALSE +//#define GFILE_NEED_CHBIOSFS FALSE + +//#define GFILE_ALLOW_FLOATS FALSE +//#define GFILE_ALLOW_DEVICESPECIFIC FALSE +//#define GFILE_MAX_GFILES 3 + +/////////////////////////////////////////////////////////////////////////// +// GADC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GADC FALSE + +//#define GADC_MAX_LOWSPEED_DEVICES 4 + + +/////////////////////////////////////////////////////////////////////////// +// GAUDIO // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GAUDIO FALSE +// There seems to be a bug in the ugfx code, the wrong define is used +// So define it in order to avoid warnings +#define GFX_USE_GAUDIN GFX_USE_GAUDIO +// #define GAUDIO_NEED_PLAY FALSE +// #define GAUDIO_NEED_RECORD FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GMISC // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GMISC TRUE + +//#define GMISC_NEED_ARRAYOPS FALSE +//#define GMISC_NEED_FASTTRIG FALSE +//#define GMISC_NEED_FIXEDTRIG FALSE +//#define GMISC_NEED_INVSQRT FALSE +// #define GMISC_INVSQRT_MIXED_ENDIAN FALSE +// #define GMISC_INVSQRT_REAL_SLOW FALSE +#define GMISC_NEED_MATRIXFLOAT2D TRUE +#define GMISC_NEED_MATRIXFIXED2D FALSE + +#endif /* _GFXCONF_H */ diff --git a/keyboards/infinity_ergodox/lcd_backlight_hal.c b/keyboards/infinity_ergodox/lcd_backlight_hal.c new file mode 100644 index 00000000000..05fc810b4b5 --- /dev/null +++ b/keyboards/infinity_ergodox/lcd_backlight_hal.c @@ -0,0 +1,84 @@ +/* +Copyright 2016 Fred Sundvik +Jun Wako + +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 . +*/ +#include "lcd_backlight.h" +#include "hal.h" + +#define RED_PIN 1 +#define GREEN_PIN 2 +#define BLUE_PIN 3 +#define CHANNEL_RED FTM0->CHANNEL[0] +#define CHANNEL_GREEN FTM0->CHANNEL[1] +#define CHANNEL_BLUE FTM0->CHANNEL[2] + +#define RGB_PORT PORTC +#define RGB_PORT_GPIO GPIOC + +// Base FTM clock selection (72 MHz system clock) +// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period +// Higher pre-scalar will use the most power (also look the best) +// Pre-scalar calculations +// 0 - 72 MHz -> 549 Hz +// 1 - 36 MHz -> 275 Hz +// 2 - 18 MHz -> 137 Hz +// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) +// 4 - 4 500 kHz -> 34 Hz (Visible flickering) +// 5 - 2 250 kHz -> 17 Hz +// 6 - 1 125 kHz -> 9 Hz +// 7 - 562 500 Hz -> 4 Hz +// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced +// Which will reduce the brightness range +#define PRESCALAR_DEFINE 0 + +void lcd_backlight_hal_init(void) { + // Setup Backlight + SIM->SCGC6 |= SIM_SCGC6_FTM0; + FTM0->CNT = 0; // Reset counter + + // PWM Period + // 16-bit maximum + FTM0->MOD = 0xFFFF; + + // Set FTM to PWM output - Edge Aligned, Low-true pulses +#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) + CHANNEL_RED.CnSC = CNSC_MODE; + CHANNEL_GREEN.CnSC = CNSC_MODE; + CHANNEL_BLUE.CnSC = CNSC_MODE; + + // System clock, /w prescalar setting + FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); + + CHANNEL_RED.CnV = 0; + CHANNEL_GREEN.CnV = 0; + CHANNEL_BLUE.CnV = 0; + + RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); + RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); + RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); + +#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) + RGB_PORT->PCR[RED_PIN] = RGB_MODE; + RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; + RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; +} + +void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { + CHANNEL_RED.CnV = r; + CHANNEL_GREEN.CnV = g; + CHANNEL_BLUE.CnV = b; +} + diff --git a/keyboards/infinity_ergodox/visualizer_user.c b/keyboards/infinity_ergodox/visualizer_user.c new file mode 100644 index 00000000000..c0d335ce6a8 --- /dev/null +++ b/keyboards/infinity_ergodox/visualizer_user.c @@ -0,0 +1,168 @@ +/* +Copyright 2016 Fred Sundvik + +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 . +*/ + +// Currently we are assuming that both the backlight and LCD are enabled +// But it's entirely possible to write a custom visualizer that use only +// one of them +#ifndef LCD_BACKLIGHT_ENABLE +#error This visualizer needs that LCD backlight is enabled +#endif + +#ifndef LCD_ENABLE +#error This visualizer needs that LCD is enabled +#endif + +#include "visualizer.h" +#include "led_test.h" + +static const char* welcome_text[] = {"TMK", "Infinity Ergodox"}; + +// Just an example how to write custom keyframe functions, we could have moved +// all this into the init function +bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) { + (void)animation; + // Read the uGFX documentation for information how to use the displays + // http://wiki.ugfx.org/index.php/Main_Page + gdispClear(White); + // You can use static variables for things that can't be found in the animation + // or state structs + gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black); + gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black); + // Always remember to flush the display + gdispFlush(); + // you could set the backlight color as well, but we won't do it here, since + // it's part of the following animation + // lcd_backlight_color(hue, saturation, intensity); + // We don't need constant updates, just drawing the screen once is enough + return false; +} + +// Feel free to modify the animations below, or even add new ones if needed + +// Don't worry, if the startup animation is long, you can use the keyboard like normal +// during that time +static keyframe_animation_t startup_animation = { + .num_frames = 4, + .loop = false, + .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, + .frame_functions = { + display_welcome, + keyframe_animate_backlight_color, + keyframe_no_operation, + enable_visualization + }, +}; + +// The color animation animates the LCD color when you change layers +static keyframe_animation_t color_animation = { + .num_frames = 2, + .loop = false, + // Note that there's a 200 ms no-operation frame, + // this prevents the color from changing when activating the layer + // momentarily + .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)}, + .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, +}; + +// The LCD animation alternates between the layer name display and a +// bitmap that displays all active layers +static keyframe_animation_t lcd_animation = { + .num_frames = 2, + .loop = true, + .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)}, + .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap}, +}; + +static keyframe_animation_t suspend_animation = { + .num_frames = 3, + .loop = false, + .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0}, + .frame_functions = { + keyframe_display_layer_text, + keyframe_animate_backlight_color, + keyframe_disable_lcd_and_backlight, + }, +}; + +static keyframe_animation_t resume_animation = { + .num_frames = 5, + .loop = false, + .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0}, + .frame_functions = { + keyframe_enable_lcd_and_backlight, + display_welcome, + keyframe_animate_backlight_color, + keyframe_no_operation, + enable_visualization, + }, +}; + +void initialize_user_visualizer(visualizer_state_t* state) { + // The brightness will be dynamically adjustable in the future + // But for now, change it here. + lcd_backlight_brightness(0x50); + state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF); + state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); + start_keyframe_animation(&startup_animation); + start_keyframe_animation(&led_test_animation); +} + +void update_user_visualizer_state(visualizer_state_t* state) { + // Add more tests, change the colors and layer texts here + // Usually you want to check the high bits (higher layers first) + // because that's the order layers are processed for keypresses + // You can for check for example: + // state->status.layer + // state->status.default_layer + // state->status.leds (see led.h for available statuses) + if (state->status.layer & 0x8) { + state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF); + state->layer_text = "Numpad"; + } + else if (state->status.layer & 0x4) { + state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF); + state->layer_text = "KBD functions"; + } + else if (state->status.layer & 0x2) { + state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF); + state->layer_text = "Function keys"; + } + else { + state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF); + state->layer_text = "Default"; + } + // You can also stop existing animations, and start your custom ones here + // remember that you should normally have only one animation for the LCD + // and one for the background. But you can also combine them if you want. + start_keyframe_animation(&lcd_animation); + start_keyframe_animation(&color_animation); +} + +void user_visualizer_suspend(visualizer_state_t* state) { + state->layer_text = "Suspending..."; + uint8_t hue = LCD_HUE(state->current_lcd_color); + uint8_t sat = LCD_SAT(state->current_lcd_color); + state->target_lcd_color = LCD_COLOR(hue, sat, 0); + start_keyframe_animation(&suspend_animation); +} + +void user_visualizer_resume(visualizer_state_t* state) { + state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00); + state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF); + start_keyframe_animation(&resume_animation); + start_keyframe_animation(&led_test_animation); +} diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index c240734055e..abca22d85f8 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -29,9 +29,7 @@ SOFTWARE. #include "ch.h" #endif -#ifdef LCD_ENABLE #include "gfx.h" -#endif #ifdef LCD_BACKLIGHT_ENABLE #include "lcd_backlight.h" diff --git a/quantum/visualizer/visualizer.h b/quantum/visualizer/visualizer.h index 45cfa9aa97f..53e250725cf 100644 --- a/quantum/visualizer/visualizer.h +++ b/quantum/visualizer/visualizer.h @@ -28,9 +28,7 @@ SOFTWARE. #include #include -#ifdef LCD_ENABLE #include "gfx.h" -#endif #ifdef LCD_BACKLIGHT_ENABLE #include "lcd_backlight.h" diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 56525ffd939..b5dfad8e1a6 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -20,14 +20,14 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -GFXLIB = $(VISUALIZER_DIR)/ugfx SRC += $(VISUALIZER_DIR)/visualizer.c -UINCDIR += $(GFXINC) $(VISUALIZER_DIR) +EXTRAINCDIRS += $(GFXINC) $(VISUALIZER_DIR) +GFXLIB = $(LIB_PATH)/ugfx +VPATH += $(VISUALIZER_PATH) ifdef LCD_ENABLE -UDEFS += -DLCD_ENABLE +OPT_DEFS += -DLCD_ENABLE ULIBS += -lm -USE_UGFX = yes endif ifdef LCD_BACKLIGHT_ENABLE @@ -35,21 +35,21 @@ SRC += $(VISUALIZER_DIR)/lcd_backlight.c ifndef EMULATOR SRC += lcd_backlight_hal.c endif -UDEFS += -DLCD_BACKLIGHT_ENABLE +OPT_DEFS += -DLCD_BACKLIGHT_ENABLE endif ifdef LED_ENABLE SRC += $(VISUALIZER_DIR)/led_test.c UDEFS += -DLED_ENABLE -USE_UGFX = yes endif -ifdef USE_UGFX include $(GFXLIB)/gfx.mk -SRC += $(GFXSRC) -UDEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) -ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS))) -endif +#SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) +#SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) +#SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) +#SRC += $(GFXSRC) +OPT_DEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) +#ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS))) ifndef VISUALIZER_USER VISUALIZER_USER = visualizer_user.c From 5ed673d82d6cf91aa966a3e903ac37adb519f12c Mon Sep 17 00:00:00 2001 From: Josh Colbeck Date: Wed, 6 Jul 2016 20:24:57 -0500 Subject: [PATCH 163/551] Changed layer switching to momentary corrected macro --- keyboards/ergodox_ez/keymaps/josh/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox_ez/keymaps/josh/keymap.c index 4ad22918231..de5664a25a3 100644 --- a/keyboards/ergodox_ez/keymaps/josh/keymap.c +++ b/keyboards/ergodox_ez/keymaps/josh/keymap.c @@ -9,7 +9,7 @@ //macros #define CTL_SFT_T 100 #define CTL_SFT_G 101 -#define CTL_ALT_T 102 +#define CTL_ALT_H 102 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -40,8 +40,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, ALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, ALL_T(KC_NO), KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, - KC_LGUI, KC_GRV, M(CTL_ALT_T),M(CTL_SFT_G),LALT(KC_LSFT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(SYMB), + KC_LGUI, KC_GRV, M(CTL_ALT_H),M(CTL_SFT_G),LALT(KC_LSFT), CTL_T(KC_APP), KC_LALT, KC_HOME, KC_SPC,KC_BSPC,KC_END, @@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { M(CTL_SFT_T),KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, MEH_T(KC_NO),KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),CTL_T(KC_QUOT), - KC_FN1, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, + MO(SYMB), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_LALT, KC_CAPS, KC_PGUP, @@ -165,9 +165,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } return MACRO(U(LCTL), U(LSFT), END); break; - case CTL_ALT_T: + case CTL_ALT_H: if (record->event.pressed) { - return MACRO(D(LCTL), D(LALT), T(T), END); + return MACRO(D(LCTL), D(LALT), T(H), END); } return MACRO(U(LCTL), U(LALT), END); break; From a4bf46f9b1d0a0be0cecb2cd0f0d941aa7c71bd3 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 6 Jul 2016 22:48:19 -0400 Subject: [PATCH 164/551] default keymap, reset sorted out for now, added serial to makefile --- keyboards/atreus/Makefile | 1 + keyboards/lets_split/Makefile | 3 +- keyboards/lets_split/config.h | 6 +- keyboards/lets_split/keymaps/default/keymap.c | 200 ++++++++++++++++-- keyboards/lets_split/lets_split.c | 26 +-- keyboards/lets_split/lets_split.h | 8 +- quantum/quantum.c | 2 +- tmk_core/common/avr/bootloader.c | 54 +++-- 8 files changed, 241 insertions(+), 59 deletions(-) diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile index 72b694faac1..95ee1d4d7b1 100644 --- a/keyboards/atreus/Makefile +++ b/keyboards/atreus/Makefile @@ -5,6 +5,7 @@ ifdef TEENSY2 ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex else OPT_DEFS += -DATREUS_ASTAR + OPT_DEFS += -DCATERINA_BOOTLOADER ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) endif diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile index d8e283896e8..b9f07636be0 100644 --- a/keyboards/lets_split/Makefile +++ b/keyboards/lets_split/Makefile @@ -1,6 +1,7 @@ SRC += matrix.c \ i2c.c \ - split_util.c + split_util.c \ + serial.c # MCU name #MCU = at90usb1287 diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 5937ca44e2c..6f90997ab49 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -37,7 +37,9 @@ along with this program. If not, see . #define MATRIX_ROW_PINS { B5, B4, E6, D7 } #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 } -#define USE_I2C +#define CATERINA_BOOTLOADER + +// #define USE_I2C // #define EE_HANDS @@ -51,7 +53,7 @@ along with this program. If not, see . //#define MATRIX_HAS_GHOST /* number of backlight levels */ -#define BACKLIGHT_LEVELS 3 +// #define BACKLIGHT_LEVELS 3 /* Set 0 if debouncing isn't needed */ #define DEBOUNCING_DELAY 5 diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 01e3593c226..0d2d94b6726 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -1,11 +1,27 @@ #include "lets_split.h" #include "action_layer.h" +#include "eeconfig.h" -#define BASE 0 +extern keymap_config_t keymap_config; -enum preonic_keycodes { - KC_IDK = SAFE_RANGE, - PM_RESET +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, }; // Fillers to make layering more clear @@ -14,29 +30,185 @@ enum preonic_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ - KC_IDK, KC_LCTL, KC_LALT, KC_LGUI, PM_RESET,KC_SPC, KC_SPC, PM_RESET,KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) + }; +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case KC_IDK: + case QWERTY: if (record->event.pressed) { - SEND_STRING("IDK. "); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); } return false; break; - case PM_RESET: + case COLEMAK: if (record->event.pressed) { - promicro_bootloader_jmp(true); + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); } return false; break; } return true; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c index 1859dc20a77..574c116a754 100644 --- a/keyboards/lets_split/lets_split.c +++ b/keyboards/lets_split/lets_split.c @@ -23,26 +23,8 @@ void matrix_init_kb(void) { matrix_init_user(); }; -void promicro_bootloader_jmp(bool program) { - - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); - #endif - - uint16_t *const bootKeyPtr = (uint16_t *)0x0800; - - // Value used by Caterina bootloader use to determine whether to run the - // sketch or the bootloader programmer. - uint16_t bootKey = program ? 0x7777 : 0; - - *bootKeyPtr = bootKey; - - // setup watchdog timeout - wdt_enable(WDTO_60MS); - - while(1) {} // wait for watchdog timer to trigger +void shutdown_user(void) { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); } - - diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h index e59aed59213..fe7ae076792 100644 --- a/keyboards/lets_split/lets_split.h +++ b/keyboards/lets_split/lets_split.h @@ -1,5 +1,7 @@ +#ifndef LETS_SPLIT_H +#define LETS_SPLIT_H + #include "quantum.h" -#include void promicro_bootloader_jmp(bool program); @@ -18,4 +20,6 @@ void promicro_bootloader_jmp(bool program); { k50, k51, k52, k53, k54, k55 }, \ { k60, k61, k62, k63, k64, k65 }, \ { k70, k71, k72, k73, k74, k75 } \ - } \ No newline at end of file + } + +#endif \ No newline at end of file diff --git a/quantum/quantum.c b/quantum/quantum.c index d59bd5a3f85..d8e43a4655e 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -89,7 +89,7 @@ bool process_record_quantum(keyrecord_t *record) { shutdown_user(); #endif wait_ms(250); - #ifdef ATREUS_ASTAR + #ifdef CATERINA_BOOTLOADER *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific #endif bootloader_jump(); diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c index 7c744e8c79e..fb9bf2d1c33 100644 --- a/tmk_core/common/avr/bootloader.c +++ b/tmk_core/common/avr/bootloader.c @@ -73,27 +73,47 @@ uint32_t reset_key __attribute__ ((section (".noinit"))); /* initialize MCU status by watchdog reset */ void bootloader_jump(void) { -#ifdef PROTOCOL_LUFA - USB_Disable(); - cli(); - _delay_ms(2000); -#endif + #ifndef CATERINA_BOOTLOADER -#ifdef PROTOCOL_PJRC - cli(); - UDCON = 1; - USBCON = (1< Date: Thu, 7 Jul 2016 12:45:34 +0300 Subject: [PATCH 165/551] Add Infinity Ergodox display drivers --- .../gdisp/IS31FL3731C/board_IS31FL3731C.h | 113 ++++++ .../drivers/gdisp/IS31FL3731C/driver.mk | 2 + .../gdisp/IS31FL3731C/gdisp_IS31FL3731C.c | 333 ++++++++++++++++++ .../gdisp/IS31FL3731C/gdisp_lld_config.h | 36 ++ .../drivers/gdisp/emulator_lcd/driver.mk | 2 + .../drivers/gdisp/emulator_lcd/emulator_lcd.c | 10 + .../drivers/gdisp/emulator_led/driver.mk | 2 + .../drivers/gdisp/emulator_led/emulator_led.c | 10 + .../gdisp/st7565ergodox/board_ST7565.h | 127 +++++++ .../drivers/gdisp/st7565ergodox/driver.mk | 2 + .../gdisp/st7565ergodox/gdisp_lld_ST7565.c | 292 +++++++++++++++ .../gdisp/st7565ergodox/gdisp_lld_config.h | 26 ++ .../drivers/gdisp/st7565ergodox/st7565.h | 37 ++ 13 files changed, 992 insertions(+) create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h create mode 100644 keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h new file mode 100644 index 00000000000..2ea73f1fb3c --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h @@ -0,0 +1,113 @@ +/* +Copyright 2016 Fred Sundvik + +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 . +*/ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +static const I2CConfig i2ccfg = { + 400000 // clock speed (Hz); 400kHz max for IS31 +}; + +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 + +static const uint8_t led_mask[] = { + 0xFF, 0x00, /* C1-1 -> C1-16 */ + 0xFF, 0x00, /* C2-1 -> C2-16 */ + 0xFF, 0x00, /* C3-1 -> C3-16 */ + 0xFF, 0x00, /* C4-1 -> C4-16 */ + 0x3F, 0x00, /* C5-1 -> C5-16 */ + 0x00, 0x00, /* C6-1 -> C6-16 */ + 0x00, 0x00, /* C7-1 -> C7-16 */ + 0x00, 0x00, /* C8-1 -> C8-16 */ + 0x00, 0x00, /* C9-1 -> C9-16 */ +}; + +// The address of the LED +#define LA(c, r) (c + r * 16 ) +// Need to be an address that is not mapped, but inside the range of the controller matrix +#define NA LA(8, 8) + +// The numbers in the comments are the led numbers DXX on the PCB +// The mapping is taken from the schematic of left hand side +static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { +// 45 44 43 42 41 40 39 + { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, +// 52 51 50 49 48 47 46 + { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, +// 58 57 56 55 54 53 N/A + { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, +// 67 66 65 64 63 62 61 + { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, +// 76 75 74 73 72 60 59 + { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, +// N/A N/A N/A N/A N/A N/A 68 + { NA, NA, NA, NA, NA, NA, LA(5, 4) }, +// N/A N/A N/A N/A 71 70 69 + { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, +}; + + +#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND +#define IS31_TIMEOUT 5000 + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + /* I2C pins */ + palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL + palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA + palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); + palClearPad(GPIOB, 16); + /* start I2C */ + i2cStart(&I2CD1, &i2ccfg); + // try high drive (from kiibohd) + I2CD1.i2c->C2 |= I2Cx_C2_HDRS; + // try glitch fixing (from kiibohd) + I2CD1.i2c->FLT = 4; +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { + (void) g; + return led_mask; +} + +static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) +{ + (void) g; + return led_mapping[y][x]; +} + +static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { + (void) g; + if(!shutdown) { + palSetPad(GPIOB, 16); + } + else { + palClearPad(GPIOB, 16); + } +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk new file mode 100644 index 00000000000..f32d0d86853 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/IS31FL3731C +GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c new file mode 100644 index 00000000000..1d21f0c498e --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c @@ -0,0 +1,333 @@ +/* +Copyright 2016 Fred Sundvik + +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 . +*/ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_ERGODOX +#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_IS31FL3731C.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 9 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 16 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#define IS31_ADDR_DEFAULT 0x74 + +#define IS31_REG_CONFIG 0x00 +// bits in reg +#define IS31_REG_CONFIG_PICTUREMODE 0x00 +#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 +#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 +// D2:D0 bits are starting frame for autoplay mode + +#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode + +#define IS31_REG_AUTOPLAYCTRL1 0x02 +// D6:D4 number of loops (000=infty) +// D2:D0 number of frames to be used + +#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) + +#define IS31_REG_DISPLAYOPT 0x05 +#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames +#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 +// D2:D0 bits blink period time (*0.27s) + +#define IS31_REG_AUDIOSYNC 0x06 +#define IS31_REG_AUDIOSYNC_ENABLE 0x1 + +#define IS31_REG_FRAMESTATE 0x07 + +#define IS31_REG_BREATHCTRL1 0x08 +// D6:D4 fade out time (26ms*2^i) +// D2:D0 fade in time (26ms*2^i) + +#define IS31_REG_BREATHCTRL2 0x09 +#define IS31_REG_BREATHCTRL2_ENABLE 0x10 +// D2:D0 extinguish time (3.5ms*2^i) + +#define IS31_REG_SHUTDOWN 0x0A +#define IS31_REG_SHUTDOWN_OFF 0x0 +#define IS31_REG_SHUTDOWN_ON 0x1 + +#define IS31_REG_AGCCTRL 0x0B +#define IS31_REG_ADCRATE 0x0C + +#define IS31_COMMANDREGISTER 0xFD +#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' +#define IS31_FUNCTIONREG_SIZE 0xD + +#define IS31_FRAME_SIZE 0xB4 + +#define IS31_PWM_REG 0x24 +#define IS31_PWM_SIZE 0x90 + +#define IS31_LED_MASK_SIZE 0x12 +#define IS31_SCREEN_WIDTH 16 + +#define IS31 + +//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm +const unsigned char cie[256] = { + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, + 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, + 13, 14, 14, 15, 15, 15, 16, 16, 17, 17, + 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, + 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, + 28, 28, 29, 29, 30, 31, 31, 32, 32, 33, + 34, 34, 35, 36, 37, 37, 38, 39, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, 47, 48, + 49, 50, 51, 52, 53, 54, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 70, 71, 72, 73, 74, 75, 76, 77, 79, + 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, + 92, 94, 95, 96, 98, 99, 100, 102, 103, 105, + 106, 108, 109, 110, 112, 113, 115, 116, 118, 120, + 121, 123, 124, 126, 128, 129, 131, 132, 134, 136, + 138, 139, 141, 143, 145, 146, 148, 150, 152, 154, + 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, + 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, + 196, 198, 200, 202, 204, 207, 209, 211, 214, 216, + 218, 220, 223, 225, 228, 230, 232, 235, 237, 240, + 242, 245, 247, 250, 252, 255, +}; + + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + uint8_t write_buffer_offset; + uint8_t write_buffer[IS31_FRAME_SIZE]; + uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; + uint8_t page; +}__attribute__((__packed__)) PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +static GFXINLINE void write_page(GDisplay* g, uint8_t page) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = IS31_COMMANDREGISTER; + tx[1] = page; + write_data(g, tx, 2); +} + +static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { + uint8_t tx[2] __attribute__((aligned(2))); + tx[0] = reg; + tx[1] = data; + write_page(g, page); + write_data(g, tx, 2); +} + +static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { + PRIV(g)->write_buffer_offset = offset; + write_page(g, page); + write_data(g, (uint8_t*)PRIV(g), length + 1); +} + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + __builtin_memset(PRIV(g), 0, sizeof(PrivData)); + PRIV(g)->page = 0; + + // Initialise the board interface + init_board(g); + gfxSleepMilliseconds(10); + + // zero function page, all registers (assuming full_page is all zeroes) + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + set_hardware_shutdown(g, false); + gfxSleepMilliseconds(10); + // software shutdown + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + gfxSleepMilliseconds(10); + // zero function page, all registers + write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); + gfxSleepMilliseconds(10); + + + // zero all LED registers on all 8 pages, and enable the mask + __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); + for(uint8_t i=0; i<8; i++) { + write_ram(g, i, 0, IS31_FRAME_SIZE); + gfxSleepMilliseconds(1); + } + + // software shutdown disable (i.e. turn stuff on) + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + gfxSleepMilliseconds(10); + + // Finish Init + post_init_board(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + PRIV(g)->page++; + PRIV(g)->page %= 2; + // TODO: some smarter algorithm for this + // We should run only one physical page at a time + // This way we don't need to send so much data, and + // we could use slightly less memory + uint8_t* src = PRIV(g)->frame_buffer; + for (int y=0;ywrite_buffer[get_led_address(g, x, y)]=cie[*src]; + ++src; + } + } + write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); + gfxSleepMilliseconds(1); + write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = g->p.y; + break; + } + return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + break; + case powerOn: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h new file mode 100644 index 00000000000..bb28ad775e2 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h @@ -0,0 +1,36 @@ +/* +Copyright 2016 Fred Sundvik + +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 . +*/ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk new file mode 100644 index 00000000000..16c3f80f53b --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_lcd +GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c new file mode 100644 index 00000000000..babfe2b3671 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LCD_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 128 +#define GDISP_SCREEN_HEIGHT 32 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk new file mode 100644 index 00000000000..2554344321b --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/emulator_led +GFXSRC += drivers/gdisp/emulator_led/emulator_led.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c new file mode 100644 index 00000000000..b0ebcdc4750 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c @@ -0,0 +1,10 @@ +#define GDISP_DRIVER_VMT GDISPVMT_EMULATOR_LED_ERGODOX +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +#define GDISP_SCREEN_WIDTH 7 +#define GDISP_SCREEN_HEIGHT 7 +#define ROTATE_180_IS_FLIP + +#include "emulator/emulator_driver_impl.h" diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h new file mode 100644 index 00000000000..290571ce5b4 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h @@ -0,0 +1,127 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_BOARD_H +#define _GDISP_LLD_BOARD_H + +#include "print.h" + +#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 +#define ST7565_ADC ST7565_ADC_NORMAL +#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC +#define ST7565_PAGE_ORDER 0,1,2,3 +/* + * Custom page order for several LCD boards, e.g. HEM12864-99 + * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 + */ + +#define ST7565_GPIOPORT GPIOC +#define ST7565_PORT PORTC +#define ST7565_A0_PIN 7 +#define ST7565_RST_PIN 8 +#define ST7565_MOSI_PIN 6 +#define ST7565_SLCK_PIN 5 +#define ST7565_SS_PIN 4 + +#define palSetPadModeRaw(portname, bits) \ + ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits + +#define palSetPadModeNamed(portname, portmode) \ + palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) + +#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) +// DSPI Clock and Transfer Attributes +// Frame Size: 8 bits +// MSB First +// CLK Low by default +static const SPIConfig spi1config = { + NULL, + /* HW dependent part.*/ + ST7565_GPIOPORT, + ST7565_SS_PIN, + SPIx_CTARn_FMSZ(7) + | SPIx_CTARn_ASC(7) + | SPIx_CTARn_DT(7) + | SPIx_CTARn_CSSCK(7) + | SPIx_CTARn_PBR(0) + | SPIx_CTARn_BR(7) + //SPI_CR1_BR_0 +}; + +static bool_t st7565_is_data_mode = 1; + +static GFXINLINE void init_board(GDisplay *g) { + (void) g; + palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + st7565_is_data_mode = 1; + palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + palSetPadModeRaw(MOSI, ST7565_SPI_MODE); + palSetPadModeRaw(SLCK, ST7565_SPI_MODE); + palSetPadModeRaw(SS, ST7565_SPI_MODE); + + spiInit(); + spiStart(&SPID1, &spi1config); + spiSelect(&SPID1); +} + +static GFXINLINE void post_init_board(GDisplay *g) { + (void) g; +} + +static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { + (void) g; + if (state) { + palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } + else { + palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); + } +} + +static GFXINLINE void acquire_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to acquire + // spiAcquireBus(&SPID1); +} + +static GFXINLINE void release_bus(GDisplay *g) { + (void) g; + // Only the LCD is using the SPI bus, so no need to release + //spiReleaseBus(&SPID1); +} + +static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { + (void) g; + if (st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 0; + } + spiSend(&SPID1, 1, &cmd); +} + +static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { + (void) g; + if (!st7565_is_data_mode) { + // The sleeps need to be at lest 10 vs 25 ns respectively + // So let's sleep two ticks, one tick might not be enough + // if we are at the end of the tick + chThdSleep(2); + palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); + chThdSleep(2); + st7565_is_data_mode = 1; + } + spiSend(&SPID1, length, data); +} + +#endif /* _GDISP_LLD_BOARD_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk new file mode 100644 index 00000000000..889a1a0317f --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk @@ -0,0 +1,2 @@ +GFXINC += drivers/gdisp/st7565ergodox +GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c new file mode 100644 index 00000000000..c33aea81a87 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c @@ -0,0 +1,292 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#include "gfx.h" + +#if GFX_USE_GDISP + +#define GDISP_DRIVER_VMT GDISPVMT_ST7565_ERGODOX +#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h" +#include "src/gdisp/gdisp_driver.h" + +#include "board_ST7565.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#ifndef GDISP_SCREEN_HEIGHT + #define GDISP_SCREEN_HEIGHT 32 +#endif +#ifndef GDISP_SCREEN_WIDTH + #define GDISP_SCREEN_WIDTH 128 +#endif +#ifndef GDISP_INITIAL_CONTRAST + #define GDISP_INITIAL_CONTRAST 0 +#endif +#ifndef GDISP_INITIAL_BACKLIGHT + #define GDISP_INITIAL_BACKLIGHT 100 +#endif + +#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) + +#include "drivers/gdisp/st7565ergodox/st7565.h" + +/*===========================================================================*/ +/* Driver config defaults for backward compatibility. */ +/*===========================================================================*/ +#ifndef ST7565_LCD_BIAS + #define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 +#endif +#ifndef ST7565_ADC + #define ST7565_ADC ST7565_ADC_NORMAL +#endif +#ifndef ST7565_COM_SCAN + #define ST7565_COM_SCAN ST7565_COM_SCAN_INC +#endif +#ifndef ST7565_PAGE_ORDER + #define ST7565_PAGE_ORDER 0,1,2,3 +#endif + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +typedef struct{ + bool_t buffer2; + uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; +}PrivData; + +// Some common routines and macros +#define PRIV(g) ((PrivData*)g->priv) +#define RAM(g) (PRIV(g)->ram) +#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } +#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } + +// Some common routines and macros +#define delay(us) gfxSleepMicroseconds(us) +#define delay_ms(ms) gfxSleepMilliseconds(ms) + +#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) +#define xybit(y) (1<<((y)&7)) + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/* + * As this controller can't update on a pixel boundary we need to maintain the + * the entire display surface in memory so that we can do the necessary bit + * operations. Fortunately it is a small display in monochrome. + * 64 * 128 / 8 = 1024 bytes. + */ + +LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { + // The private area is the display surface. + g->priv = gfxAlloc(sizeof(PrivData)); + PRIV(g)->buffer2 = false; + + // Initialise the board interface + init_board(g); + + // Hardware reset + setpin_reset(g, TRUE); + gfxSleepMilliseconds(20); + setpin_reset(g, FALSE); + gfxSleepMilliseconds(20); + + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + write_cmd(g, ST7565_LCD_BIAS); + write_cmd(g, ST7565_ADC); + write_cmd(g, ST7565_COM_SCAN); + + write_cmd(g, ST7565_START_LINE | 0); + + write_cmd(g, ST7565_RESISTOR_RATIO | 0x6); + + // turn on voltage converter (VC=1, VR=0, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x04); + delay_ms(50); + + // turn on voltage regulator (VC=1, VR=1, VF=0) + write_cmd(g, ST7565_POWER_CONTROL | 0x06); + delay_ms(50); + + // turn on voltage follower (VC=1, VR=1, VF=1) + write_cmd(g, ST7565_POWER_CONTROL | 0x07); + delay_ms(50); + + write_cmd(g, 0xE2); + write_cmd(g, ST7565_COM_SCAN); + write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101); + //write_cmd2(g, ST7565_CONTRAST, 0); + write_cmd(g, ST7565_DISPLAY_ON); + write_cmd(g, ST7565_ALLON_NORMAL); + write_cmd(g, ST7565_INVERT_DISPLAY); + + write_cmd(g, ST7565_RMW); + + // Finish Init + post_init_board(g); + + // Release the bus + release_bus(g); + + /* Initialise the GDISP structure */ + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Orientation = GDISP_ROTATE_0; + g->g.Powermode = powerOn; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; + return TRUE; +} + +#if GDISP_HARDWARE_FLUSH + LLDSPEC void gdisp_lld_flush(GDisplay *g) { + unsigned p; + + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) + return; + + acquire_bus(g); + unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0); + for (p = 0; p < 4; p++) { + write_cmd(g, ST7565_PAGE | (p + dstOffset)); + write_cmd(g, ST7565_COLUMN_MSB | 0); + write_cmd(g, ST7565_COLUMN_LSB | 0); + write_cmd(g, ST7565_RMW); + write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); + } + unsigned line = (PRIV(g)->buffer2 ? 32 : 0); + write_cmd(g, ST7565_START_LINE | line); + PRIV(g)->buffer2 = !PRIV(g)->buffer2; + release_bus(g); + + g->flags &= ~GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_DRAWPIXEL + LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + if (gdispColor2Native(g->p.color) != Black) + RAM(g)[xyaddr(x, y)] |= xybit(y); + else + RAM(g)[xyaddr(x, y)] &= ~xybit(y); + g->flags |= GDISP_FLG_NEEDFLUSH; + } +#endif + +#if GDISP_HARDWARE_PIXELREAD + LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; + + switch(g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT-1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH-1 - g->p.x; + y = GDISP_SCREEN_HEIGHT-1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT-1 - g->p.y; + y = g->p.x; + break; + } + return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; + } +#endif + +#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL + LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch(g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) + return; + switch((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_OFF); + release_bus(g); + break; + case powerOn: + acquire_bus(g); + write_cmd(g, ST7565_DISPLAY_ON); + release_bus(g); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; + return; + + case GDISP_CONTROL_ORIENTATION: + if (g->g.Orientation == (orientation_t)g->p.ptr) + return; + switch((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; + } + g->g.Orientation = (orientation_t)g->p.ptr; + return; + + case GDISP_CONTROL_CONTRAST: + if ((unsigned)g->p.ptr > 100) + g->p.ptr = (void *)100; + acquire_bus(g); + write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F); + release_bus(g); + g->g.Contrast = (unsigned)g->p.ptr; + return; + } + } +#endif // GDISP_NEED_CONTROL + +#endif // GFX_USE_GDISP diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h new file mode 100644 index 00000000000..48587b9e143 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h @@ -0,0 +1,26 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _GDISP_LLD_CONFIG_H +#define _GDISP_LLD_CONFIG_H + +#if GFX_USE_GDISP + +/*===========================================================================*/ +/* Driver hardware support. */ +/*===========================================================================*/ + +#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +#define GDISP_HARDWARE_DRAWPIXEL TRUE +#define GDISP_HARDWARE_PIXELREAD TRUE +#define GDISP_HARDWARE_CONTROL TRUE + +#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO + +#endif /* GFX_USE_GDISP */ + +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h new file mode 100644 index 00000000000..48636b33d63 --- /dev/null +++ b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h @@ -0,0 +1,37 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +#ifndef _ST7565_H +#define _ST7565_H + +#define ST7565_CONTRAST 0x81 +#define ST7565_ALLON_NORMAL 0xA4 +#define ST7565_ALLON 0xA5 +#define ST7565_POSITIVE_DISPLAY 0xA6 +#define ST7565_INVERT_DISPLAY 0xA7 +#define ST7565_DISPLAY_OFF 0xAE +#define ST7565_DISPLAY_ON 0xAF + +#define ST7565_LCD_BIAS_7 0xA3 +#define ST7565_LCD_BIAS_9 0xA2 + +#define ST7565_ADC_NORMAL 0xA0 +#define ST7565_ADC_REVERSE 0xA1 + +#define ST7565_COM_SCAN_INC 0xC0 +#define ST7565_COM_SCAN_DEC 0xC8 + +#define ST7565_START_LINE 0x40 +#define ST7565_PAGE 0xB0 +#define ST7565_COLUMN_MSB 0x10 +#define ST7565_COLUMN_LSB 0x00 +#define ST7565_RMW 0xE0 + +#define ST7565_RESISTOR_RATIO 0x20 +#define ST7565_POWER_CONTROL 0x28 + +#endif /* _ST7565_H */ From 07d0d5cbe48d7afaf0bc8c9916d40179ec51cb42 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 12:46:10 +0300 Subject: [PATCH 166/551] Makefile fixes and update of Visualizer --- keyboards/infinity_ergodox/Makefile | 9 +++++++++ quantum/visualizer/led_test.c | 4 ++-- quantum/visualizer/visualizer.mk | 8 +++----- tmk_core/common/keyboard.c | 8 ++++++++ tmk_core/protocol/chibios/main.c | 7 +++++++ 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile index 8be2f51b1f0..7edc03d8cc1 100644 --- a/keyboards/infinity_ergodox/Makefile +++ b/keyboards/infinity_ergodox/Makefile @@ -69,8 +69,17 @@ CUSTOM_MATRIX ?= yes # Custom matrix file SERIAL_LINK_ENABLE = yes VISUALIZER_ENABLE ?= yes LCD_ENABLE ?= yes +LED_ENABLE ?= yes LCD_BACKLIGHT_ENABLE ?= yes +ifdef LCD_ENABLE +include drivers/gdisp/st7565ergodox/driver.mk +endif + +ifdef LED_ENABLE +include drivers/gdisp/IS31FL3731C/driver.mk +endif + ifndef QUANTUM_DIR include ../../Makefile endif \ No newline at end of file diff --git a/quantum/visualizer/led_test.c b/quantum/visualizer/led_test.c index c2ea30b55ba..a9abace8df8 100644 --- a/quantum/visualizer/led_test.c +++ b/quantum/visualizer/led_test.c @@ -89,8 +89,8 @@ static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS]; static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; static uint8_t compute_gradient_color(float t, float index, float num) { - const float two_pi = 2.0f * PI; - float normalized_index = (1.0f - index / (num - 1)) * two_pi; + const float two_pi = M_2_PI; + float normalized_index = (1.0f - index / (num - 1.0f)) * two_pi; float x = t * two_pi + normalized_index; float v = 0.5 * (cosf(x) + 1.0f); return (uint8_t)(255.0f * v); diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index b5dfad8e1a6..149968de72d 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -25,6 +25,8 @@ EXTRAINCDIRS += $(GFXINC) $(VISUALIZER_DIR) GFXLIB = $(LIB_PATH)/ugfx VPATH += $(VISUALIZER_PATH) +OPT_DEFS += -DVISUALIZER_ENABLE + ifdef LCD_ENABLE OPT_DEFS += -DLCD_ENABLE ULIBS += -lm @@ -44,12 +46,8 @@ UDEFS += -DLED_ENABLE endif include $(GFXLIB)/gfx.mk -#SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) -#SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) -#SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) -#SRC += $(GFXSRC) +SRC += $(patsubst $(TOP_DIR)/%,%,$(GFXSRC)) OPT_DEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) -#ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS))) ifndef VISUALIZER_USER VISUALIZER_USER = visualizer_user.c diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 3a1262a9f9a..c46a701b3bf 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -29,6 +29,7 @@ along with this program. If not, see . #include "sendchar.h" #include "eeconfig.h" #include "backlight.h" +#include "action_layer.h" #ifdef BOOTMAGIC_ENABLE # include "bootmagic.h" #else @@ -52,6 +53,9 @@ along with this program. If not, see . #ifdef SERIAL_LINK_ENABLE # include "serial_link/system/serial_link.h" #endif +#ifdef VISUALIZER_ENABLE +# include "visualizer/visualizer.h" +#endif #ifdef MATRIX_HAS_GHOST static bool has_ghost_in_row(uint8_t row) @@ -181,6 +185,10 @@ MATRIX_LOOP_END: serial_link_update(); #endif +#ifdef VISUALIZER_ENABLE + visualizer_update(default_layer_state, layer_state, host_keyboard_leds()); +#endif + // update LED if (led_status != host_keyboard_leds()) { led_status = host_keyboard_leds(); diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index aeb11752f42..6bf9c16681f 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -38,6 +38,9 @@ #ifdef SERIAL_LINK_ENABLE #include "serial_link/system/serial_link.h" #endif +#ifdef VISUALIZER_ENABLE +#include "visualizer/visualizer.h" +#endif #include "suspend.h" @@ -101,6 +104,10 @@ int main(void) { /* init printf */ init_printf(NULL,sendchar_pf); +#ifdef VISUALIZER_ENABLE + visualizer_init(); +#endif + #ifdef SERIAL_LINK_ENABLE init_serial_link(); #endif From 7229751ba9d402b2a6c9dc1b7b29385b5162fe41 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 14:01:20 +0300 Subject: [PATCH 167/551] Fix visualizer crash at startup Visualizer and serial link initialized in the wrong order. The LED_ENABLED define wasn't set properly uGfx is always initialized --- quantum/visualizer/visualizer.c | 2 -- quantum/visualizer/visualizer.mk | 2 +- tmk_core/protocol/chibios/main.c | 7 ++++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index abca22d85f8..dfa2ff4eea5 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -456,9 +456,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { } void visualizer_init(void) { -#ifdef LCD_ENABLE gfxInit(); -#endif #ifdef LCD_BACKLIGHT_ENABLE lcd_backlight_init(); diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 149968de72d..379496fb664 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -42,7 +42,7 @@ endif ifdef LED_ENABLE SRC += $(VISUALIZER_DIR)/led_test.c -UDEFS += -DLED_ENABLE +OPT_DEFS += -DLED_ENABLE endif include $(GFXLIB)/gfx.mk diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index 6bf9c16681f..36fd45d458b 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -104,13 +104,14 @@ int main(void) { /* init printf */ init_printf(NULL,sendchar_pf); +#ifdef SERIAL_LINK_ENABLE + init_serial_link(); +#endif + #ifdef VISUALIZER_ENABLE visualizer_init(); #endif -#ifdef SERIAL_LINK_ENABLE - init_serial_link(); -#endif host_driver_t* driver = NULL; From dae7c9bfb3325412c542fbbe4342c9c8e0fc1904 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 14:12:56 +0300 Subject: [PATCH 168/551] Fix the SERIAL_LINK_ENABLE macro in Visualizer Rename from USE_SERIAL_LINK -> SERIAL_LINK_ENABLE --- quantum/visualizer/visualizer.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index dfa2ff4eea5..54f6faaa42b 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -43,7 +43,7 @@ SOFTWARE. #include "nodebug.h" #endif -#ifdef USE_SERIAL_LINK +#ifdef SERIAL_LINK_ENABLE #include "serial_link/protocol/transport.h" #include "serial_link/system/serial_link.h" #endif @@ -73,7 +73,7 @@ static bool visualizer_enabled = false; #define MAX_SIMULTANEOUS_ANIMATIONS 4 static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {}; -#ifdef USE_SERIAL_LINK +#ifdef SERIAL_LINK_ENABLE MASTER_TO_ALL_SLAVES_OBJECT(current_status, visualizer_keyboard_status_t); static remote_object_t* remote_objects[] = { @@ -462,7 +462,7 @@ void visualizer_init(void) { lcd_backlight_init(); #endif -#ifdef USE_SERIAL_LINK +#ifdef SERIAL_LINK_ENABLE add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) ); #endif @@ -486,7 +486,7 @@ void update_status(bool changed) { geventSendEvent(listener); } } -#ifdef USE_SERIAL_LINK +#ifdef SERIAL_LINK_ENABLE static systime_t last_update = 0; systime_t current_update = chVTGetSystemTimeX(); systime_t delta = current_update - last_update; @@ -506,7 +506,7 @@ void visualizer_update(uint32_t default_state, uint32_t state, uint32_t leds) { // Alternatively a mutex could be used instead of the volatile variables bool changed = false; -#ifdef USE_SERIAL_LINK +#ifdef SERIAL_LINK_ENABLE if (is_serial_link_connected ()) { visualizer_keyboard_status_t* new_status = read_current_status(); if (new_status) { From bcbd8f1c50c6bc6169fe8afadafd6a21e182fa1f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 14:22:45 +0300 Subject: [PATCH 169/551] Add suspend support to the ChibiOS visualizer --- tmk_core/protocol/chibios/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tmk_core/protocol/chibios/main.c b/tmk_core/protocol/chibios/main.c index 36fd45d458b..b0eb9aef81c 100644 --- a/tmk_core/protocol/chibios/main.c +++ b/tmk_core/protocol/chibios/main.c @@ -155,6 +155,9 @@ int main(void) { if(USB_DRIVER.state == USB_SUSPENDED) { print("[s]"); +#ifdef VISUALIZER_ENABLE + visualizer_suspend(); +#endif while(USB_DRIVER.state == USB_SUSPENDED) { /* Do this in the suspended state */ #ifdef SERIAL_LINK_ENABLE @@ -172,6 +175,10 @@ int main(void) { #ifdef MOUSEKEY_ENABLE mousekey_send(); #endif /* MOUSEKEY_ENABLE */ + +#ifdef VISUALIZER_ENABLE + visualizer_resume(); +#endif } keyboard_task(); From aaac254ebce2005272e7385488b5690bbbe6d7c8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 14:29:53 +0300 Subject: [PATCH 170/551] Delete lcd_backlight_hal.c The functionality can now be found in the infinity_erogodox.c file instead. --- keyboards/infinity_ergodox/infinity_ergodox.c | 65 ++++++++++++++ .../infinity_ergodox/lcd_backlight_hal.c | 84 ------------------- quantum/visualizer/visualizer.mk | 3 - 3 files changed, 65 insertions(+), 87 deletions(-) delete mode 100644 keyboards/infinity_ergodox/lcd_backlight_hal.c diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c index 85054775e84..87ed40fabf2 100644 --- a/keyboards/infinity_ergodox/infinity_ergodox.c +++ b/keyboards/infinity_ergodox/infinity_ergodox.c @@ -2,6 +2,7 @@ #include "ch.h" #include "hal.h" #include "serial_link/system/serial_link.h" +#include "lcd_backlight.h" void init_serial_link_hal(void) { PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2); @@ -9,3 +10,67 @@ void init_serial_link_hal(void) { PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3); PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3); } + +#define RED_PIN 1 +#define GREEN_PIN 2 +#define BLUE_PIN 3 +#define CHANNEL_RED FTM0->CHANNEL[0] +#define CHANNEL_GREEN FTM0->CHANNEL[1] +#define CHANNEL_BLUE FTM0->CHANNEL[2] + +#define RGB_PORT PORTC +#define RGB_PORT_GPIO GPIOC + +// Base FTM clock selection (72 MHz system clock) +// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period +// Higher pre-scalar will use the most power (also look the best) +// Pre-scalar calculations +// 0 - 72 MHz -> 549 Hz +// 1 - 36 MHz -> 275 Hz +// 2 - 18 MHz -> 137 Hz +// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) +// 4 - 4 500 kHz -> 34 Hz (Visible flickering) +// 5 - 2 250 kHz -> 17 Hz +// 6 - 1 125 kHz -> 9 Hz +// 7 - 562 500 Hz -> 4 Hz +// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced +// Which will reduce the brightness range +#define PRESCALAR_DEFINE 0 + +void lcd_backlight_hal_init(void) { + // Setup Backlight + SIM->SCGC6 |= SIM_SCGC6_FTM0; + FTM0->CNT = 0; // Reset counter + + // PWM Period + // 16-bit maximum + FTM0->MOD = 0xFFFF; + + // Set FTM to PWM output - Edge Aligned, Low-true pulses +#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) + CHANNEL_RED.CnSC = CNSC_MODE; + CHANNEL_GREEN.CnSC = CNSC_MODE; + CHANNEL_BLUE.CnSC = CNSC_MODE; + + // System clock, /w prescalar setting + FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); + + CHANNEL_RED.CnV = 0; + CHANNEL_GREEN.CnV = 0; + CHANNEL_BLUE.CnV = 0; + + RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); + RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); + RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); + +#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) + RGB_PORT->PCR[RED_PIN] = RGB_MODE; + RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; + RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; +} + +void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { + CHANNEL_RED.CnV = r; + CHANNEL_GREEN.CnV = g; + CHANNEL_BLUE.CnV = b; +} diff --git a/keyboards/infinity_ergodox/lcd_backlight_hal.c b/keyboards/infinity_ergodox/lcd_backlight_hal.c deleted file mode 100644 index 05fc810b4b5..00000000000 --- a/keyboards/infinity_ergodox/lcd_backlight_hal.c +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright 2016 Fred Sundvik -Jun Wako - -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 . -*/ -#include "lcd_backlight.h" -#include "hal.h" - -#define RED_PIN 1 -#define GREEN_PIN 2 -#define BLUE_PIN 3 -#define CHANNEL_RED FTM0->CHANNEL[0] -#define CHANNEL_GREEN FTM0->CHANNEL[1] -#define CHANNEL_BLUE FTM0->CHANNEL[2] - -#define RGB_PORT PORTC -#define RGB_PORT_GPIO GPIOC - -// Base FTM clock selection (72 MHz system clock) -// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period -// Higher pre-scalar will use the most power (also look the best) -// Pre-scalar calculations -// 0 - 72 MHz -> 549 Hz -// 1 - 36 MHz -> 275 Hz -// 2 - 18 MHz -> 137 Hz -// 3 - 9 MHz -> 69 Hz (Slightly visible flicker) -// 4 - 4 500 kHz -> 34 Hz (Visible flickering) -// 5 - 2 250 kHz -> 17 Hz -// 6 - 1 125 kHz -> 9 Hz -// 7 - 562 500 Hz -> 4 Hz -// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced -// Which will reduce the brightness range -#define PRESCALAR_DEFINE 0 - -void lcd_backlight_hal_init(void) { - // Setup Backlight - SIM->SCGC6 |= SIM_SCGC6_FTM0; - FTM0->CNT = 0; // Reset counter - - // PWM Period - // 16-bit maximum - FTM0->MOD = 0xFFFF; - - // Set FTM to PWM output - Edge Aligned, Low-true pulses -#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0) - CHANNEL_RED.CnSC = CNSC_MODE; - CHANNEL_GREEN.CnSC = CNSC_MODE; - CHANNEL_BLUE.CnSC = CNSC_MODE; - - // System clock, /w prescalar setting - FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE); - - CHANNEL_RED.CnV = 0; - CHANNEL_GREEN.CnV = 0; - CHANNEL_BLUE.CnV = 0; - - RGB_PORT_GPIO->PDDR |= (1 << RED_PIN); - RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN); - RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN); - -#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4) - RGB_PORT->PCR[RED_PIN] = RGB_MODE; - RGB_PORT->PCR[GREEN_PIN] = RGB_MODE; - RGB_PORT->PCR[BLUE_PIN] = RGB_MODE; -} - -void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) { - CHANNEL_RED.CnV = r; - CHANNEL_GREEN.CnV = g; - CHANNEL_BLUE.CnV = b; -} - diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 379496fb664..449957d63fc 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -34,9 +34,6 @@ endif ifdef LCD_BACKLIGHT_ENABLE SRC += $(VISUALIZER_DIR)/lcd_backlight.c -ifndef EMULATOR -SRC += lcd_backlight_hal.c -endif OPT_DEFS += -DLCD_BACKLIGHT_ENABLE endif From caedec92d2c22480313c43a364408fb920c55364 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 14:42:16 +0300 Subject: [PATCH 171/551] Move the visualizer_user file to keymap folder Also rename it to visualizer.c --- .../default/visualizer.c} | 0 quantum/visualizer/visualizer.mk | 11 ++++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) rename keyboards/infinity_ergodox/{visualizer_user.c => keymaps/default/visualizer.c} (100%) diff --git a/keyboards/infinity_ergodox/visualizer_user.c b/keyboards/infinity_ergodox/keymaps/default/visualizer.c similarity index 100% rename from keyboards/infinity_ergodox/visualizer_user.c rename to keyboards/infinity_ergodox/keymaps/default/visualizer.c diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 449957d63fc..2f4a41d66f9 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -46,10 +46,15 @@ include $(GFXLIB)/gfx.mk SRC += $(patsubst $(TOP_DIR)/%,%,$(GFXSRC)) OPT_DEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) -ifndef VISUALIZER_USER -VISUALIZER_USER = visualizer_user.c +ifneq ("$(wildcard $(KEYMAP_PATH)/visualizer.c)","") + SRC += keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/visualizer.c +else + ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/visualizer.c)","") +$(error "$(KEYMAP_PATH)/visualizer.c" does not exist) + else + SRC += keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/visualizer.c + endif endif -SRC += $(VISUALIZER_USER) ifdef EMULATOR UINCDIR += $(TMK_DIR)/common From 589df84d6cd19ad7d776cc19bcddade1cd178ddc Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 7 Jul 2016 09:58:44 -0400 Subject: [PATCH 172/551] corrects quantum template --- quantum/template/template.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/template/template.c b/quantum/template/template.c index dcc4b0a221a..3057557eae4 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -18,7 +18,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) { // put your per-action keyboard code here // runs for every action, just before processing by the firmware - return process_action_user(record); + return process_record_user(record); } void led_set_kb(uint8_t usb_led) { From 57e08eb8badc5db2fb44d2df684f32ea48cce411 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 7 Jul 2016 11:33:32 -0400 Subject: [PATCH 173/551] updates rgblight implementation, makes non-timer stuff compatible with audio --- keyboards/clueboard/rev1/config.h | 5 +- keyboards/clueboard/rev2/config.h | 5 +- keyboards/cluepad/config.h | 13 ++-- keyboards/kc60/keymaps/ws2812/config.h | 5 +- keyboards/lets_split/config.h | 5 +- keyboards/phantom/config.h | 13 ++-- .../planck/keymaps/experimental/Makefile | 6 +- .../planck/keymaps/experimental/config.h | 8 ++ .../planck/keymaps/experimental/keymap.c | 73 ++++++++++++++++++- keyboards/planck/keymaps/pvc/config.h | 5 +- keyboards/planck/keymaps/yang/config.h | 5 +- keyboards/preonic/config.h | 5 +- keyboards/satan/config.h | 14 ++-- quantum/light_ws2812.c | 25 +++++-- quantum/rgblight.c | 23 +++++- quantum/rgblight.h | 7 +- readme.md | 17 ++--- 17 files changed, 160 insertions(+), 74 deletions(-) diff --git a/keyboards/clueboard/rev1/config.h b/keyboards/clueboard/rev1/config.h index 9bb58f56e82..8c949723247 100644 --- a/keyboards/clueboard/rev1/config.h +++ b/keyboards/clueboard/rev1/config.h @@ -25,9 +25,8 @@ /* Underlight configuration */ -#define ws2812_PORTREG PORTB -#define ws2812_DDRREG DDRB -#define ws2812_pin 2 +#define RGB_DI_PIN B2 +#define RGBLIGHT_TIMER #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard/rev2/config.h index e2f8336beb1..02982ff2999 100644 --- a/keyboards/clueboard/rev2/config.h +++ b/keyboards/clueboard/rev2/config.h @@ -29,9 +29,8 @@ /* Underlight configuration */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin 7 +#define RGB_DI_PIN D7 +#define RGBLIGHT_TIMER #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/cluepad/config.h b/keyboards/cluepad/config.h index 0955e0f7026..bae05fade38 100644 --- a/keyboards/cluepad/config.h +++ b/keyboards/cluepad/config.h @@ -69,13 +69,12 @@ along with this program. If not, see . /* Underlight configuration */ - #define ws2812_PORTREG PORTF - #define ws2812_DDRREG DDRF - #define ws2812_pin 6 - #define RGBLED_NUM 4 // Number of LEDs - #define RGBLIGHT_HUE_STEP 10 - #define RGBLIGHT_SAT_STEP 17 - #define RGBLIGHT_VAL_STEP 17 +#define RGB_DI_PIN F6 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 4 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 /* * Feature disable options diff --git a/keyboards/kc60/keymaps/ws2812/config.h b/keyboards/kc60/keymaps/ws2812/config.h index 933bb0d2d1a..2f39ea8e55e 100644 --- a/keyboards/kc60/keymaps/ws2812/config.h +++ b/keyboards/kc60/keymaps/ws2812/config.h @@ -1,9 +1,8 @@ #include "../../config.h" /* WS2812B RGB Underglow LED */ -#define ws2812_PORTREG PORTF -#define ws2812_DDRREG DDRF -#define ws2812_pin PF5 // Based on wiring depicted in ws2812_wiring.jpg +#define RGB_DI_PIN F5 // Based on wiring depicted in ws2812_wiring.jpg +#define RGBLIGHT_TIMER #define RGBLED_NUM 16 // Number of LEDs. Change this to match your use case. #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h index 6f90997ab49..833818ce60e 100644 --- a/keyboards/lets_split/config.h +++ b/keyboards/lets_split/config.h @@ -69,9 +69,8 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 +#define RGB_DI_PIN D2 +#define RGBLIGHT_TIMER #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/phantom/config.h b/keyboards/phantom/config.h index d5878766f0a..983a1d73f29 100644 --- a/keyboards/phantom/config.h +++ b/keyboards/phantom/config.h @@ -62,13 +62,12 @@ along with this program. If not, see . /* Underlight configuration */ - #define ws2812_PORTREG PORTE - #define ws2812_DDRREG DDRE - #define ws2812_pin 2 - #define RGBLED_NUM 20 // Number of LEDs - #define RGBLIGHT_HUE_STEP 10 - #define RGBLIGHT_SAT_STEP 17 - #define RGBLIGHT_VAL_STEP 17 +#define RGB_DI_PIN E2 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 20 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 /* * Feature disable options diff --git a/keyboards/planck/keymaps/experimental/Makefile b/keyboards/planck/keymaps/experimental/Makefile index 581e08cd02a..877c4aed0ea 100644 --- a/keyboards/planck/keymaps/experimental/Makefile +++ b/keyboards/planck/keymaps/experimental/Makefile @@ -10,12 +10,12 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls -AUDIO_ENABLE = yes # Audio output on port C6 +AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/planck/keymaps/experimental/config.h b/keyboards/planck/keymaps/experimental/config.h index 985e250ab54..52acd1905eb 100644 --- a/keyboards/planck/keymaps/experimental/config.h +++ b/keyboards/planck/keymaps/experimental/config.h @@ -6,4 +6,12 @@ #define LEADER_TIMEOUT 300 #define BACKLIGHT_BREATHING + +/* ws2812 RGB LED */ +#define RGB_DI_PIN B1 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 + #endif diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c index 8ec335d7d26..d9303fcae59 100644 --- a/keyboards/planck/keymaps/experimental/keymap.c +++ b/keyboards/planck/keymaps/experimental/keymap.c @@ -15,7 +15,7 @@ extern keymap_config_t keymap_config; // The underscores don't mean anything - you can have a layer called STUFF or any other name. // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. -#define _QWERTY 0 +#define _QWERTY 10 #define _COLEMAK 1 #define _DVORAK 2 #define _LOWER 3 @@ -31,7 +31,15 @@ enum planck_keycodes { LOWER, RAISE, BACKLIT, - EXT_PLV + EXT_PLV, + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, }; // Fillers to make layering more clear @@ -39,14 +47,20 @@ enum planck_keycodes { #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { + {KC_NO, KC_NO, KC_NO, KC_NO, RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, RGBLED_DECREASE_HUE, RGBLED_INCREASE_SAT, RGBLED_DECREASE_SAT, RGBLED_INCREASE_VAL, RGBLED_DECREASE_VAL}, + {KC_NO, KC_NO, KC_NO, KC_NO, RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, RGBLED_DECREASE_HUE, RGBLED_INCREASE_SAT, RGBLED_DECREASE_SAT, RGBLED_INCREASE_VAL, RGBLED_DECREASE_VAL}, + {KC_NO, KC_NO, KC_NO, KC_NO, RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, RGBLED_DECREASE_HUE, RGBLED_INCREASE_SAT, RGBLED_DECREASE_SAT, RGBLED_INCREASE_VAL, RGBLED_DECREASE_VAL}, + {KC_NO, KC_NO, KC_NO, KC_NO, RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, RGBLED_DECREASE_HUE, RGBLED_INCREASE_SAT, RGBLED_DECREASE_SAT, RGBLED_INCREASE_VAL, RGBLED_DECREASE_VAL} +}, /* Qwerty - * ,-----------------------------------------------------------------------------------. + ,-----------------------------------------------------------------------------------. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| * | Esc | A | S | D | F | G | H | J | K | L | ; | " | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * | Shift| Z | X | C | V | B | N | M |, | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' @@ -292,6 +306,57 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; return false; + case RGBLED_TOGGLE: + //led operations + if (record->event.pressed) { + rgblight_toggle(); + } + return false; + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + return false; + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + return false; + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + return false; + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + return false; + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + return false; + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + return false; + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + return false; + break; + + } return true; }; diff --git a/keyboards/planck/keymaps/pvc/config.h b/keyboards/planck/keymaps/pvc/config.h index b6489310819..c857a3e89db 100644 --- a/keyboards/planck/keymaps/pvc/config.h +++ b/keyboards/planck/keymaps/pvc/config.h @@ -60,9 +60,8 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 +#define RGB_DI_PIN D1 +#define RGBLIGHT_TIMER #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/planck/keymaps/yang/config.h b/keyboards/planck/keymaps/yang/config.h index 5921e9377c4..feb5a119013 100644 --- a/keyboards/planck/keymaps/yang/config.h +++ b/keyboards/planck/keymaps/yang/config.h @@ -4,9 +4,8 @@ #include "../../config.h" /* ws2812 RGB LED */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 +#define RGB_DI_PIN D1 +#define RGBLIGHT_TIMER #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h index 04946f7fbbf..3fb978c2f6b 100644 --- a/keyboards/preonic/config.h +++ b/keyboards/preonic/config.h @@ -62,9 +62,8 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 +#define RGB_DI_PIN D1 +#define RGBLIGHT_TIMER #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/satan/config.h b/keyboards/satan/config.h index a7ea8f904c0..7e9f91cc829 100644 --- a/keyboards/satan/config.h +++ b/keyboards/satan/config.h @@ -65,13 +65,13 @@ along with this program. If not, see . /* Underlight configuration */ - #define ws2812_PORTREG PORTE - #define ws2812_DDRREG DDRE - #define ws2812_pin 2 - #define RGBLED_NUM 8 // Number of LEDs - #define RGBLIGHT_HUE_STEP 10 - #define RGBLIGHT_SAT_STEP 17 - #define RGBLIGHT_VAL_STEP 17 + +#define RGB_DI_PIN E2 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 /* * Feature disable options diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index f20043067e1..401845e8552 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -19,12 +19,16 @@ // Setleds for standard RGB void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds) { - ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); + // ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); + ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF)); } void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask) { - ws2812_DDRREG |= pinmask; // Enable DDR + // ws2812_DDRREG |= pinmask; // Enable DDR + // new universal format (DDR) + _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask; + ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask); _delay_us(50); } @@ -32,14 +36,17 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin // Setleds for SK6812RGBW void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) { - ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR - ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin)); + // ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR + // new universal format (DDR) + _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF); + + ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF)); _delay_us(80); } void ws2812_sendarray(uint8_t *data,uint16_t datlen) { - ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin)); + ws2812_sendarray_mask(data,datlen,_BV(RGB_DI_PIN & 0xF)); } /* @@ -108,8 +115,10 @@ void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi) uint8_t curbyte,ctr,masklo; uint8_t sreg_prev; - masklo =~maskhi&ws2812_PORTREG; - maskhi |= ws2812_PORTREG; + // masklo =~maskhi&ws2812_PORTREG; + // maskhi |= ws2812_PORTREG; + masklo =~maskhi&_SFR_IO8((RGB_DI_PIN >> 4) + 2); + maskhi |= _SFR_IO8((RGB_DI_PIN >> 4) + 2); sreg_prev=SREG; cli(); @@ -173,7 +182,7 @@ w_nop16 " dec %0 \n\t" // '1' [+2] '0' [+2] " brne loop%=\n\t" // '1' [+3] '0' [+4] : "=&d" (ctr) - : "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo) + : "r" (curbyte), "I" (_SFR_IO_ADDR(_SFR_IO8((RGB_DI_PIN >> 4) + 2))), "r" (maskhi), "r" (masklo) ); } diff --git a/quantum/rgblight.c b/quantum/rgblight.c index c29ffedc38c..b1b0f035d58 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -146,7 +146,9 @@ void rgblight_init(void) { } eeconfig_debug_rgblight(); // display current eeprom values - rgblight_timer_init(); // setup the timer + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_init(); // setup the timer + #endif if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); @@ -192,14 +194,19 @@ void rgblight_mode(uint8_t mode) { eeconfig_update_rgblight(rgblight_config.raw); xprintf("rgblight mode: %u\n", rgblight_config.mode); if (rgblight_config.mode == 1) { - rgblight_timer_disable(); + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_disable(); + #endif } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) { // MODE 2-5, breathing // MODE 6-8, rainbow mood // MODE 9-14, rainbow swirl // MODE 15-20, snake // MODE 21-23, knight - rgblight_timer_enable(); + + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_enable(); + #endif } rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val); } @@ -211,7 +218,10 @@ void rgblight_toggle(void) { if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); } else { - rgblight_timer_disable(); + + #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + rgblight_timer_disable(); + #endif _delay_ms(50); rgblight_set(); } @@ -328,6 +338,9 @@ void rgblight_set(void) { } } + +#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + // Animation timer -- AVR Timer3 void rgblight_timer_init(void) { static uint8_t rgblight_timer_is_init = 0; @@ -503,3 +516,5 @@ void rgblight_effect_knight(uint8_t interval) { } } + +#endif \ No newline at end of file diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 64f92523e03..def26c428cd 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -1,8 +1,11 @@ #ifndef RGBLIGHT_H #define RGBLIGHT_H -#ifndef RGBLIGHT_MODES -#define RGBLIGHT_MODES 23 + +#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER) + #define RGBLIGHT_MODES 23 +#else + #define RGBLIGHT_MODES 1 #endif #ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH diff --git a/readme.md b/readme.md index c24d951d8df..e8748125154 100644 --- a/readme.md +++ b/readme.md @@ -704,23 +704,18 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring RGBLIGHT_ENABLE = yes -Please note that the underglow is not compatible with audio output. So you cannot enable both of them at the same time. +In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile). -Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the F4 by default: - - #define ws2812_PORTREG PORTF - #define ws2812_DDRREG DDRF - #define ws2812_pin PF4 +Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default: + + #define RGB_DI_PIN F4 // The pin your RGB strip is wired to + #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 14 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 -You'll need to edit `PORTF`, `DDRF`, and `PF4` on the first three lines to the port/pin you have your LED(s) wired to, eg for B3 change things to: - - #define ws2812_PORTREG PORTB - #define ws2812_DDRREG DDRB - #define ws2812_pin PB3 +You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to. The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. For details, please check this keymap. `keyboards/planck/keymaps/yang/keymap.c` From c1dfb636ef61159456bdb24f4fee3f27e5babbeb Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 7 Jul 2016 12:22:10 -0400 Subject: [PATCH 174/551] fixes quantum template (actually) --- quantum/template/template.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/template/template.c b/quantum/template/template.c index 3057557eae4..5ef349583cb 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -18,7 +18,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) { // put your per-action keyboard code here // runs for every action, just before processing by the firmware - return process_record_user(record); + return process_record_user(keycode, record); } void led_set_kb(uint8_t usb_led) { From 9870082a06386eba8c0c5f22da90d0256ef6244b Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 19:48:39 +0300 Subject: [PATCH 175/551] Fix the range for consumer keys --- quantum/keymap_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 76872ac5920..d0a8312c1ed 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -62,7 +62,7 @@ action_t action_for_key(uint8_t layer, keypos_t key) case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); break; - case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: + case KC_AUDIO_MUTE ... KC_MEDIA_REWIND: action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode)); break; case KC_MS_UP ... KC_MS_ACCEL2: From 0bfb6086158c64960f039524bbc2bb9e7bbee378 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 19:56:55 +0300 Subject: [PATCH 176/551] Remove unhandled KC_BTLD, RESET should be used instead --- keyboards/chibios_test/keymaps/default/keymap.c | 2 +- keyboards/infinity_ergodox/keymaps/default/keymap.c | 5 ++++- tmk_core/common/keycode.h | 5 ----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/keyboards/chibios_test/keymaps/default/keymap.c b/keyboards/chibios_test/keymaps/default/keymap.c index 239d70007a3..a362e2ccf67 100644 --- a/keyboards/chibios_test/keymaps/default/keymap.c +++ b/keyboards/chibios_test/keymaps/default/keymap.c @@ -18,7 +18,7 @@ along with this program. If not, see . #include "chibios_test.h" const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - {{KC_CAPS}}, // test with KC_CAPS, KC_A, KC_BTLD + {{KC_CAPS}}, // test with KC_CAPS, KC_A, RESET }; const uint16_t fn_actions[] = { diff --git a/keyboards/infinity_ergodox/keymaps/default/keymap.c b/keyboards/infinity_ergodox/keymaps/default/keymap.c index c33fb7b9260..f1e6b1c8ae4 100644 --- a/keyboards/infinity_ergodox/keymaps/default/keymap.c +++ b/keyboards/infinity_ergodox/keymaps/default/keymap.c @@ -18,6 +18,9 @@ along with this program. If not, see . #include "infinity_ergodox.h" +// Workaround for old keymap format +#define KC_RESET RESET + const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KEYMAP( // layer 0 : default // left hand @@ -63,7 +66,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KEYMAP( // layer 2 : keyboard functions // left hand - BTLD,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, + RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h index 448195306f1..fc66dc0efcb 100644 --- a/tmk_core/common/keycode.h +++ b/tmk_core/common/keycode.h @@ -156,8 +156,6 @@ along with this program. If not, see . #define KC_WSTP KC_WWW_STOP #define KC_WREF KC_WWW_REFRESH #define KC_WFAV KC_WWW_FAVORITES -/* Jump to bootloader */ -#define KC_BTLD KC_BOOTLOADER /* Transparent */ #define KC_TRANSPARENT 1 #define KC_TRNS KC_TRANSPARENT @@ -428,9 +426,6 @@ enum internal_special_keycodes { KC_MEDIA_FAST_FORWARD, KC_MEDIA_REWIND, /* 0xBC */ - /* Jump to bootloader */ - KC_BOOTLOADER = 0xBF, - /* Fn key */ KC_FN0 = 0xC0, KC_FN1, From a2eae81927ab0e817857d5b6ba2c7ce4a4b751b6 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 7 Jul 2016 20:04:27 +0300 Subject: [PATCH 177/551] Fix IS_CONSUMER macro --- tmk_core/common/keycode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h index fc66dc0efcb..2f208c54e04 100644 --- a/tmk_core/common/keycode.h +++ b/tmk_core/common/keycode.h @@ -31,7 +31,7 @@ along with this program. If not, see . #define IS_SPECIAL(code) ((0xA5 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) #define IS_SYSTEM(code) (KC_PWR <= (code) && (code) <= KC_WAKE) -#define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_WFAV) +#define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_MRWD) #define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN31) #define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) #define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) From 50c686587ed49d8079ba1b11d45ceb6a55d6cd4b Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Thu, 7 Jul 2016 23:34:33 -0400 Subject: [PATCH 178/551] Create keycodes for RGB control functions Moves RGB controls out of the macro function and assigns them their own keycodes: RGB_TOG (toggle on/off) RGB_MOD (mode step) RGB_HUI (increase hue) RGB_HUD (decrease hue) RGB_SAI (increase saturation) RGB_SAD (decrease saturation) RGB_VAI (increase brightness) RGB_VAD (decrease brightness) --- keyboards/clueboard/keymaps/default/keymap.c | 72 ++----------------- keyboards/clueboard/keymaps/max/keymap.c | 66 ++---------------- keyboards/cluepad/keymaps/default/keymap.c | 67 ++---------------- keyboards/kc60/keymaps/stanleylai/keymap.c | 67 +----------------- keyboards/kc60/keymaps/ws2812/keymap.c | 65 +---------------- keyboards/phantom/keymaps/default/keymap.c | 69 +----------------- keyboards/planck/keymaps/yang/keymap.c | 62 +---------------- keyboards/satan/keymaps/default/keymap.c | 68 +----------------- keyboards/satan/keymaps/sethbc/keymap.c | 73 +------------------- quantum/keymap.h | 10 +++ quantum/quantum.c | 50 ++++++++++++++ 11 files changed, 83 insertions(+), 586 deletions(-) diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard/keymaps/default/keymap.c index 89f71e83a74..896bc7ebcc5 100644 --- a/keyboards/clueboard/keymaps/default/keymap.c +++ b/keyboards/clueboard/keymaps/default/keymap.c @@ -67,11 +67,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_RS] = KEYMAP( #ifdef RGBLIGHT_ENABLE - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), F(7), \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)), + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI), #else KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ @@ -83,30 +83,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -132,49 +112,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - //led operations - #ifdef RGBLIGHT_ENABLE - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/keyboards/clueboard/keymaps/max/keymap.c b/keyboards/clueboard/keymaps/max/keymap.c index 82c93401db5..080b4930b9c 100644 --- a/keyboards/clueboard/keymaps/max/keymap.c +++ b/keyboards/clueboard/keymaps/max/keymap.c @@ -66,78 +66,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `----------------------------------------------------------------------------------' */ [_RS] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(0), F(6), \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(7), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \ KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(4), \ - KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(1), F(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(3), F(5), F(2)), + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI), }; enum function_id { - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL, }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(RGBLED_TOGGLE), - [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { - case RGBLED_TOGGLE: - //led operations - if (record->event.pressed) { - rgblight_toggle(); - } - - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; } } diff --git a/keyboards/cluepad/keymaps/default/keymap.c b/keyboards/cluepad/keymaps/default/keymap.c index 8ba49952f60..10881e8dee3 100644 --- a/keyboards/cluepad/keymaps/default/keymap.c +++ b/keyboards/cluepad/keymaps/default/keymap.c @@ -1,7 +1,6 @@ #include "cluepad.h" #include "backlight.h" -#include "rgblight.h" // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -46,77 +45,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * '-------------------' */ [_FL] = KEYMAP( - LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, F(0), \ - KC_TRNS, F(4), KC_TRNS, F(6), \ - F(3), BL_STEP, F(2), \ - KC_TRNS, F(5), KC_TRNS, F(7), \ - F(1), KC_TRNS) + LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, RGB_TOG, \ + KC_TRNS, RGB_SAI, KC_TRNS, RGB_VAI, \ + RGB_HUD, BL_STEP, RGB_HUI, \ + KC_TRNS, RGB_SAD, KC_TRNS, RGB_VAD, \ + RGB_MOD, KC_TRNS) }; enum function_id { - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL, }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(RGBLED_TOGGLE), - [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; } } diff --git a/keyboards/kc60/keymaps/stanleylai/keymap.c b/keyboards/kc60/keymaps/stanleylai/keymap.c index a7ea6040d53..057c73bf4d7 100644 --- a/keyboards/kc60/keymaps/stanleylai/keymap.c +++ b/keyboards/kc60/keymaps/stanleylai/keymap.c @@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_TRNS,KC_NO, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\ + KC_TRNS,KC_NO, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS), #else RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ @@ -52,30 +52,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL, - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -102,50 +82,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - - #ifdef RGBLIGHT_ENABLE - - case RGBLED_TOGGLE: - //led operations - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/keyboards/kc60/keymaps/ws2812/keymap.c b/keyboards/kc60/keymaps/ws2812/keymap.c index bd5bef787bf..1c0574df093 100644 --- a/keyboards/kc60/keymaps/ws2812/keymap.c +++ b/keyboards/kc60/keymaps/ws2812/keymap.c @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, KC_DEL, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET), #else 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, KC_DEL, \ @@ -65,30 +65,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -114,48 +94,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - //led operations - #ifdef RGBLIGHT_ENABLE - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/keyboards/phantom/keymaps/default/keymap.c b/keyboards/phantom/keymaps/default/keymap.c index 1368226aa94..a4fc319ac8b 100644 --- a/keyboards/phantom/keymaps/default/keymap.c +++ b/keyboards/phantom/keymaps/default/keymap.c @@ -1,9 +1,5 @@ #include "phantom.h" -#ifdef RGBLIGHT_ENABLE -#include "rgblight.h" -#endif - // Used for SHIFT_ESC #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -59,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, \ - KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #else KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ @@ -73,30 +69,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -122,48 +98,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - //led operations - #ifdef RGBLIGHT_ENABLE - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/keyboards/planck/keymaps/yang/keymap.c b/keyboards/planck/keymaps/yang/keymap.c index 541b1a57e42..5f2907a08a4 100644 --- a/keyboards/planck/keymaps/yang/keymap.c +++ b/keyboards/planck/keymaps/yang/keymap.c @@ -51,33 +51,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RGB] = { /* RGBLIGHT */ {KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, - {KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} } }; enum function_id { - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL, + }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_LAYER_TAP_KEY(_RGB, KC_SPC), - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -100,47 +85,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { - case RGBLED_TOGGLE: - //led operations - if (record->event.pressed) { - rgblight_toggle(); - } - - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; + } } diff --git a/keyboards/satan/keymaps/default/keymap.c b/keyboards/satan/keymaps/default/keymap.c index b19404afc7c..35dbbb77b2e 100644 --- a/keyboards/satan/keymaps/default/keymap.c +++ b/keyboards/satan/keymaps/default/keymap.c @@ -1,8 +1,5 @@ #include "satan.h" -#ifdef RGBLIGHT_ENABLE -#include "rgblight.h" -#endif // Used for SHIFT_ESC #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -53,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #else KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ @@ -66,30 +63,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -115,48 +92,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - //led operations - #ifdef RGBLIGHT_ENABLE - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/keyboards/satan/keymaps/sethbc/keymap.c b/keyboards/satan/keymaps/sethbc/keymap.c index 0ea4a7ae4f6..f8991f9fd78 100644 --- a/keyboards/satan/keymaps/sethbc/keymap.c +++ b/keyboards/satan/keymaps/sethbc/keymap.c @@ -1,9 +1,5 @@ #include "satan.h" -#ifdef RGBLIGHT_ENABLE -#include "rgblight.h" -#endif - // Used for SHIFT_ESC #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -44,39 +40,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #else 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, KC_TRNS, RESET, \ - KC_CAPS, KC_TRNS, F(1), F(2), F(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, F(4), F(5), F(6), KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - KC_TRNS, F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_CAPS, KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + KC_TRNS, RGB_VAI,RGB_VAD,KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), #endif }; enum function_id { SHIFT_ESC, - #ifdef RGBLIGHT_ENABLE - RGBLED_TOGGLE, - RGBLED_STEP_MODE, - RGBLED_INCREASE_HUE, - RGBLED_DECREASE_HUE, - RGBLED_INCREASE_SAT, - RGBLED_DECREASE_SAT, - RGBLED_INCREASE_VAL, - RGBLED_DECREASE_VAL - #endif }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_FUNCTION(SHIFT_ESC), - #ifdef RGBLIGHT_ENABLE - [1] = ACTION_FUNCTION(RGBLED_TOGGLE), - [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), - [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), - [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), - [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), - #endif }; void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -102,48 +78,5 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } break; - //led operations - #ifdef RGBLIGHT_ENABLE - case RGBLED_TOGGLE: - if (record->event.pressed) { - rgblight_toggle(); - } - break; - case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); - } - break; - case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); - } - break; - case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); - } - break; - case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); - } - break; - case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); - } - break; - case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); - } - break; - case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); - } - break; - #endif } } diff --git a/quantum/keymap.h b/quantum/keymap.h index 73f99f8211b..a1586518398 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -156,6 +156,16 @@ enum quantum_keycodes { BL_INC, BL_TOGG, BL_STEP, + + // RGB functionality + RGB_TOG, + RGB_MOD, + RGB_HUI, + RGB_HUD, + RGB_SAI, + RGB_SAD, + RGB_VAI, + RGB_VAD, // Left shift, open paren KC_LSPO, diff --git a/quantum/quantum.c b/quantum/quantum.c index d8e43a4655e..5c0b53e2213 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -103,6 +103,56 @@ bool process_record_quantum(keyrecord_t *record) { return false; } break; + #ifdef RGBLIGHT_ENABLE + case RGB_TOG: + if (record->event.pressed) { + rgblight_toggle(); + return false; + } + break; + case RGB_MOD: + if (record->event.pressed) { + rgblight_step(); + return false; + } + break; + case RGB_HUI: + if (record->event.pressed) { + rgblight_increase_hue(); + return false; + } + break; + case RGB_HUD: + if (record->event.pressed) { + rgblight_decrease_hue(); + return false; + } + break; + case RGB_SAI: + if (record->event.pressed) { + rgblight_increase_sat(); + return false; + } + break; + case RGB_SAD: + if (record->event.pressed) { + rgblight_decrease_sat(); + return false; + } + break; + case RGB_VAI: + if (record->event.pressed) { + rgblight_increase_val(); + return false; + } + break; + case RGB_VAD: + if (record->event.pressed) { + rgblight_decrease_val(); + return false; + } + break; + #endif case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: if (record->event.pressed) { // MAGIC actions (BOOTMAGIC without the boot) From ccfa7351add03eb6c3e081cd37893fc2da519c4b Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Thu, 7 Jul 2016 23:50:04 -0400 Subject: [PATCH 179/551] Fix compile error on Clueboard --- keyboards/clueboard/keymaps/max/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/clueboard/keymaps/max/keymap.c b/keyboards/clueboard/keymaps/max/keymap.c index 080b4930b9c..193809840b4 100644 --- a/keyboards/clueboard/keymaps/max/keymap.c +++ b/keyboards/clueboard/keymaps/max/keymap.c @@ -73,8 +73,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI), }; -enum function_id { -}; +/*enum function_id { +};*/ const uint16_t PROGMEM fn_actions[] = { }; From e2ec45a755741a29ecd814e6151f4d4860b20386 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Thu, 7 Jul 2016 23:57:11 -0400 Subject: [PATCH 180/551] Fix cluepad and planck --- keyboards/cluepad/keymaps/default/keymap.c | 4 ++-- keyboards/planck/keymaps/yang/keymap.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/cluepad/keymaps/default/keymap.c b/keyboards/cluepad/keymaps/default/keymap.c index 10881e8dee3..66827fe48ba 100644 --- a/keyboards/cluepad/keymaps/default/keymap.c +++ b/keyboards/cluepad/keymaps/default/keymap.c @@ -52,8 +52,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RGB_MOD, KC_TRNS) }; -enum function_id { -}; +/*enum function_id { +};*/ const uint16_t PROGMEM fn_actions[] = { }; diff --git a/keyboards/planck/keymaps/yang/keymap.c b/keyboards/planck/keymaps/yang/keymap.c index 5f2907a08a4..0ce849050b3 100644 --- a/keyboards/planck/keymaps/yang/keymap.c +++ b/keyboards/planck/keymaps/yang/keymap.c @@ -57,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -enum function_id { - -}; +/*enum function_id { + +};*/ const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_LAYER_TAP_KEY(_RGB, KC_SPC), From 66ffb1cb3a21c670719263f187e3470fd888f42a Mon Sep 17 00:00:00 2001 From: Robbie Gill Date: Thu, 7 Jul 2016 21:03:20 -0700 Subject: [PATCH 181/551] port missing support for hhkb-jp from tmk --- keyboards/hhkb/Makefile | 4 ++ keyboards/hhkb/config.h | 6 ++- keyboards/hhkb/hhkb.h | 27 +++++++++++ keyboards/hhkb/keymaps/jp/Makefile | 1 + keyboards/hhkb/keymaps/jp/keymap.c | 58 +++++++++++++++++++++++ keyboards/hhkb/keymaps/rdg_jp/Makefile | 1 + keyboards/hhkb/keymaps/rdg_jp/keymap.c | 65 ++++++++++++++++++++++++++ 7 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 keyboards/hhkb/keymaps/jp/Makefile create mode 100644 keyboards/hhkb/keymaps/jp/keymap.c create mode 100644 keyboards/hhkb/keymaps/rdg_jp/Makefile create mode 100644 keyboards/hhkb/keymaps/rdg_jp/keymap.c diff --git a/keyboards/hhkb/Makefile b/keyboards/hhkb/Makefile index 53eece39690..6fe973e1ebb 100644 --- a/keyboards/hhkb/Makefile +++ b/keyboards/hhkb/Makefile @@ -78,6 +78,10 @@ ifndef QUANTUM_DIR include ../../Makefile endif +ifneq (, $(findstring yes, $(HHKB_JP))) + OPT_DEFS += -DHHKB_JP +endif + debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION debug-on: all diff --git a/keyboards/hhkb/config.h b/keyboards/hhkb/config.h index ee66e44571f..3f0528b4b97 100644 --- a/keyboards/hhkb/config.h +++ b/keyboards/hhkb/config.h @@ -29,7 +29,11 @@ along with this program. If not, see . #define DESCRIPTION q.m.k keyboard firmware for HHKB /* key matrix size */ -#define MATRIX_ROWS 8 +#ifdef HHKB_JP +# define MATRIX_ROWS 16 +#else +# define MATRIX_ROWS 8 +#endif #define MATRIX_COLS 8 #define TAPPING_TERM 200 diff --git a/keyboards/hhkb/hhkb.h b/keyboards/hhkb/hhkb.h index cc756c4565c..e95125efcb2 100644 --- a/keyboards/hhkb/hhkb.h +++ b/keyboards/hhkb/hhkb.h @@ -21,4 +21,31 @@ { K70, K71, K72, K73, K74, K75, K76, KC_NO } \ } + +#define KEYMAP_JP( \ + K02, K32, K62, K22, K12, K52, K72, KA2, K92, K82, KB2, KE2, KF2, KD2, KC2, \ + K03, K63, K23, K13, K53, K73, KA3, K93, K83, KB3, KE3, KF3, KD3, \ + K06, K66, K26, K16, K56, K76, KA6, K96, K86, KB6, KE6, KF6, KD6, KC6, \ + K05, K65, K25, K15, K55, K75, KA5, K95, K85, KB5, KE5, KF5, KD5, KC5, \ + K04, K34, K64, K24, K14, K74, K94, K84, KB4, KE4, KF4, KD4, KC4) \ +{ \ + { KC_NO, KC_NO, K02, K03, K04, K05, K06, KC_NO }, \ + { KC_NO, KC_NO, K12, K13, K14, K15, K16, KC_NO }, \ + { KC_NO, KC_NO, K22, K23, K24, K25, K26, KC_NO }, \ + { KC_NO, KC_NO, K32, KC_NO, K34, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { KC_NO, KC_NO, K52, K53, KC_NO, K55, K56, KC_NO }, \ + { KC_NO, KC_NO, K62, K63, K64, K65, K66, KC_NO }, \ + { KC_NO, KC_NO, K72, K73, K74, K75, K76, KC_NO }, \ + { KC_NO, KC_NO, K82, K83, K84, K85, K86, KC_NO }, \ + { KC_NO, KC_NO, K92, K93, K94, K95, K96, KC_NO }, \ + { KC_NO, KC_NO, KA2, KA3, KC_NO, KA5, KA6, KC_NO }, \ + { KC_NO, KC_NO, KB2, KB3, KB4, KB5, KB6, KC_NO }, \ + { KC_NO, KC_NO, KC2, KC_NO, KC4, KC5, KC6, KC_NO }, \ + { KC_NO, KC_NO, KD2, KD3, KD4, KD5, KD6, KC_NO }, \ + { KC_NO, KC_NO, KE2, KE3, KE4, KE5, KE6, KC_NO }, \ + { KC_NO, KC_NO, KF2, KF3, KF4, KF5, KF6, KC_NO } \ +} + + #endif diff --git a/keyboards/hhkb/keymaps/jp/Makefile b/keyboards/hhkb/keymaps/jp/Makefile new file mode 100644 index 00000000000..92986292a23 --- /dev/null +++ b/keyboards/hhkb/keymaps/jp/Makefile @@ -0,0 +1 @@ +HHKB_JP=yes diff --git a/keyboards/hhkb/keymaps/jp/keymap.c b/keyboards/hhkb/keymaps/jp/keymap.c new file mode 100644 index 00000000000..8525adce59d --- /dev/null +++ b/keyboards/hhkb/keymaps/jp/keymap.c @@ -0,0 +1,58 @@ +#include "hhkb.h" + +#define _______ KC_TRNS + + +/* Layer 0: HHKB JP + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | + * |------------------------------------------------------` Ent| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | + * |-----------------------------------------------------------| + * |Shft | Z| X| C| V| B| N| M| ,| .| /| \| Up|Sft| + * |-----------------------------------------------------------| + * | ||Ctl|Alt|Cmd| | Spc |Bsp| | | ||Lft|Dwn|Rgh| + * `-----------------------------------------------------------' + */ + +/* Layer 1: HHKB mode (HHKB Fn) + * ,-----------------------------------------------------------. + * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Caps | | | | | | | |Psc|Slk|Pus|Up | | | + * |------------------------------------------------------` | + * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig| | | + * |-----------------------------------------------------------| + * | | | | | | | +| -|End|PgD|Dow| | | | + * |-----------------------------------------------------------| + * | || | | | | | | | | || | | | + * `-----------------------------------------------------------' + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = KEYMAP_JP( + 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_JYEN, KC_BSPC, + 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, 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_RO, KC_UP, KC_RSFT, + MO(1), KC_ZKHK, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_HENK, KC_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = KEYMAP_JP( + KC_PWR, 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_INS, KC_DEL, + KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { + return MACRO_NONE; +} + +const uint16_t PROGMEM fn_actions[] = { + +}; diff --git a/keyboards/hhkb/keymaps/rdg_jp/Makefile b/keyboards/hhkb/keymaps/rdg_jp/Makefile new file mode 100644 index 00000000000..92986292a23 --- /dev/null +++ b/keyboards/hhkb/keymaps/rdg_jp/Makefile @@ -0,0 +1 @@ +HHKB_JP=yes diff --git a/keyboards/hhkb/keymaps/rdg_jp/keymap.c b/keyboards/hhkb/keymaps/rdg_jp/keymap.c new file mode 100644 index 00000000000..700ba3a0b76 --- /dev/null +++ b/keyboards/hhkb/keymaps/rdg_jp/keymap.c @@ -0,0 +1,65 @@ +#include "hhkb.h" + +#define _______ KC_TRNS + +enum { + ZER, + HDN, + OSY +}; + + +#define CTL_ESC CTL_T(KC_ESC) +#define SFT_BSP SFT_T(KC_BSPC) + +#define SCRNS3 LGUI(LCTL(LSFT(KC_3))) +#define SCRNS4 LGUI(LCTL(LSFT(KC_4))) + + +/* hhkb jp ~ layout + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | + * |------------------------------------------------------` Ent| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | + * |-----------------------------------------------------------| + * |Shft | Z| X| C| V| B| N| M| ,| .| /| \| Up|Sft| + * |-----------------------------------------------------------| + * | ||Ctl|Alt|Cmd| | Spc |Bsp| | | ||Lft|Dwn|Rgh| + * `-----------------------------------------------------------' + */ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [ZER] = KEYMAP_JP( + 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_INS, KC_BSPC, + 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, + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV, 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_BSLS, KC_UP, KC_RSFT, + MO(HDN), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC, SFT_BSP, MO(HDN), MO(OSY), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [HDN] = KEYMAP_JP( + 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, _______, KC_DEL, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, + _______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, KC_ENT, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + ), + + [OSY] = KEYMAP_JP( + _______, _______, _______, SCRNS3, SCRNS4, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { + return MACRO_NONE; +} + +const uint16_t PROGMEM fn_actions[] = { + +}; From f7a86822266603b8ffd21e9f89ec1de8d4950791 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Fri, 8 Jul 2016 03:32:28 -0400 Subject: [PATCH 182/551] Move return out of event if block According to Jack, this makes the return case not be processed. Doesn't break anything in the firmware. --- quantum/quantum.c | 52 +++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 5c0b53e2213..09daa471270 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -93,65 +93,65 @@ bool process_record_quantum(keyrecord_t *record) { *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific #endif bootloader_jump(); - return false; } + return false; break; case DEBUG: if (record->event.pressed) { print("\nDEBUG: enabled.\n"); debug_enable = true; - return false; } + return false; break; #ifdef RGBLIGHT_ENABLE case RGB_TOG: if (record->event.pressed) { rgblight_toggle(); - return false; - } - break; + } + return false; + break; case RGB_MOD: if (record->event.pressed) { rgblight_step(); - return false; - } - break; + } + return false; + break; case RGB_HUI: if (record->event.pressed) { rgblight_increase_hue(); - return false; - } - break; + } + return false; + break; case RGB_HUD: if (record->event.pressed) { rgblight_decrease_hue(); - return false; - } - break; + } + return false; + break; case RGB_SAI: if (record->event.pressed) { rgblight_increase_sat(); - return false; - } - break; + } + return false; + break; case RGB_SAD: if (record->event.pressed) { rgblight_decrease_sat(); - return false; - } - break; + } + return false; + break; case RGB_VAI: if (record->event.pressed) { rgblight_increase_val(); - return false; - } - break; + } + return false; + break; case RGB_VAD: if (record->event.pressed) { rgblight_decrease_val(); - return false; - } - break; + } + return false; + break; #endif case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI: if (record->event.pressed) { From 564c743aa025c094f9c31ba2049aa50e15d76ab7 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Fri, 8 Jul 2016 03:40:05 -0400 Subject: [PATCH 183/551] Fix a function mismatch that was causing LEDs to not properly initialize See #430. Name of function being called at init was updated to led_init_ports(), but the call itself wasn't renamed. --- keyboards/phantom/led.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/phantom/led.c b/keyboards/phantom/led.c index b2459c77433..69dba7d40e7 100644 --- a/keyboards/phantom/led.c +++ b/keyboards/phantom/led.c @@ -19,7 +19,7 @@ along with this program. If not, see . #include "stdint.h" #include "led.h" -void led_init(void) { +void led_init_ports(void) { // * Set our LED pins as output DDRB |= (1<<6); DDRB |= (1<<7); From b86b0480d530c9d5f40bbe835f120b1c1b563e47 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 17:20:37 +0300 Subject: [PATCH 184/551] Speed up compilation by not using recusive make The cleaning is done outside the targets, by checking the requested target name. --- tmk_core/rules.mk | 59 +++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 352e9314b61..a518fc0c3f8 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -271,23 +271,10 @@ ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) # Default target. -all: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) clean_list # force clean each time - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end +all: build sizeafter # Quick make that doesn't clean -quick: - @$(MAKE) begin - @$(MAKE) gccversion - @$(MAKE) sizebefore - @$(MAKE) build - @$(MAKE) sizeafter - @$(MAKE) end +quick: build sizeafter # Change the build target to build a HEX file or a library. build: elf hex @@ -303,13 +290,7 @@ sym: $(BUILD_DIR)/$(TARGET).sym LIBNAME=lib$(TARGET).a lib: $(LIBNAME) - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @$(SECHO) $(MSG_BEGIN) +check_submodule: git submodule status --recursive | \ while IFS= read -r x; do \ case "$$x" in \ @@ -318,10 +299,6 @@ begin: esac \ done -end: - @$(SECHO) $(MSG_END) - - # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf @@ -331,7 +308,7 @@ sizebefore: @if test -f $(TARGET).hex; then $(SECHO) $(MSG_SIZE_BEFORE); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi -sizeafter: +sizeafter: $(BUILD_DIR)/$(TARGET).hex @if test -f $(TARGET).hex; then $(SECHO); $(SECHO) $(MSG_SIZE_AFTER); $(SILENT) || $(HEXSIZE); \ 2>/dev/null; $(SECHO); fi # test file sizes eventually @@ -386,9 +363,9 @@ gccversion : # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: $(OBJ) +%.elf: gccversion sizebefore check_submodule $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. @@ -429,14 +406,7 @@ $(OBJDIR)/%.o : %.S $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. -clean: begin clean_list end - -clean_list : - @$(REMOVE) -r $(BUILD_DIR) - @$(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR) - @$(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR) - @if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi - @$(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR) +clean: show_path: @echo VPATH=$(VPATH) @@ -496,6 +466,19 @@ all-keymaps-%: all-keymaps: all-keymaps-all +GOAL=$(MAKECMDGOALS) +ifeq ($(MAKECMDGOALS),) +GOAL = all +endif +CLEANING_GOALS=clean clean_list all +ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),) +$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null) +$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR)) +$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR)) +$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi) +$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR)) +endif + # Create build directory $(shell mkdir $(BUILD_DIR) 2>/dev/null) @@ -508,7 +491,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) # Listing of phony targets. -.PHONY : all quick begin finish end sizebefore sizeafter gccversion \ +.PHONY : all quick finish sizebefore sizeafter gccversion \ build elf hex eep lss sym coff extcoff \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ From ccebceeb6f24aeee102f6ef3180f4f563ca025a8 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 17:44:41 +0300 Subject: [PATCH 185/551] Don't run git describe for ever file that is built --- tmk_core/common.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 5bae0d762f4..aa05b9491d5 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -107,7 +107,7 @@ endif # Version string -OPT_DEFS += -DVERSION=$(shell (git describe --always --dirty || echo 'unknown') 2> /dev/null) +OPT_DEFS += -DVERSION=$(GIT_VERSION) # Bootloader address ifdef STM32_BOOTLOADER_ADDRESS From 1e3db59097f8c396d69179fdd66ef0131a6ba80d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 18:18:33 +0300 Subject: [PATCH 186/551] Fix the link target --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index a518fc0c3f8..543d3da8a0b 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -365,7 +365,7 @@ gccversion : .PRECIOUS : $(OBJ) %.elf: gccversion sizebefore check_submodule $(OBJ) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out gccversion sizebefore check_submodule,$^) --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. From e8e300d5c4dd05b806869b648b93feeff1f8a7dc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 22:59:09 +0300 Subject: [PATCH 187/551] Fix name of makefile dep files The files can't start with a .dot, as the wildcard function wont find them. So this is fixed by removing the BUILD_DIR from the name. --- tmk_core/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 543d3da8a0b..8d843cc983e 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -260,7 +260,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst # Compiler flags to generate dependency files. #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d -GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$@).d +GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d # Combine all necessary flags and optional flags. From 6911ead027202da981862c9259ff4d962d51a519 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Fri, 8 Jul 2016 23:19:48 +0300 Subject: [PATCH 188/551] Use order only prerequisites to avoid re-linking The prerequisites at the start of the build process are order-only so that the trget don't link again. Also added as a dependency to the compilation to force the messages to be printed at the start --- tmk_core/rules.mk | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index 8d843cc983e..f13351ea19b 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk @@ -360,49 +360,51 @@ gccversion : $(eval CMD=$(AR) $@ $(OBJ) ) @$(BUILD_CMD) +BEGIN = gccversion check_submodule sizebefore + # Link: create ELF output file from object files. .SECONDARY : $(BUILD_DIR)/$(TARGET).elf .PRECIOUS : $(OBJ) -%.elf: gccversion sizebefore check_submodule $(OBJ) +%.elf: $(OBJ) | $(BEGIN) @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) - $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out gccversion sizebefore check_submodule,$^) --output $@ $(LDFLAGS)) + $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) @$(BUILD_CMD) # Compile: create object files from C source files. -$(OBJDIR)/%.o : %.c +$(OBJDIR)/%.o : %.c | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create object files from C++ source files. -$(OBJDIR)/%.o : %.cpp +$(OBJDIR)/%.o : %.cpp | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C source files. -%.s : %.c +%.s : %.c | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@) @$(BUILD_CMD) # Compile: create assembler files from C++ source files. -%.s : %.cpp +%.s : %.cpp | $(BEGIN) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@) @$(BUILD_CMD) # Assemble: create object files from assembler source files. -$(OBJDIR)/%.o : %.S +$(OBJDIR)/%.o : %.S | $(BEGIN) @mkdir -p $(@D) @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD) $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@) @$(BUILD_CMD) # Create preprocessed source for use in sending a bug report. -%.i : %.c +%.i : %.c | $(BEGIN) $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ # Target: clean project. @@ -492,7 +494,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) # Listing of phony targets. .PHONY : all quick finish sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ +build elf hex eep lss sym coff extcoff check_submodule \ clean clean_list debug gdb-config show_path \ program teensy dfu flip dfu-ee flip-ee dfu-start \ all-keyboards-defaults all-keyboards all-keymaps \ From c444f4f702739633b11e548575cdbe8369d0a98b Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Fri, 8 Jul 2016 21:40:57 -0400 Subject: [PATCH 189/551] Documents tap dance --- readme.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/readme.md b/readme.md index e8748125154..3657d2c15ab 100644 --- a/readme.md +++ b/readme.md @@ -353,6 +353,81 @@ void matrix_scan_user(void) { As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously. +### Tap Dance: A single key can do 3, 5, or 100 different things + +Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how Algernon describes the feature: + +With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter. + +To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap. + +With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be send first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly. + +The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time. + +But lets start with how to use it, first! + +First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array. + +This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options: + +* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. +* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action. + +The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. + +And that's the bulk of it! + +Do note, however, that this implementation does have some consequences: keys do not register until either they reach the tapping ceiling, or they time out. This means that if you hold the key, nothing happens, no repeat, no nothing. It is possible to detect held state, and register an action then too, but that's not implemented yet. Keys also unregister immediately after being registered, so you can't even hold the second tap. This is intentional, to be consistent. + +And now, on to the explanation of how it works! + +The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer. + +This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness. + +Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys. + +For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros. + +In the end, let's see a full example! + +```c +enum { + CT_SE = 0, + CT_CLN, + CT_EGG +}; + +/* Have the above three on the keymap, TD(CT_SE), etc... */ + +void dance_cln (qk_tap_dance_state_t *state) { + if (state->count == 1) { + register_code (KC_RSFT); + register_code (KC_SCLN); + unregister_code (KC_SCLN); + unregister_code (KC_RSFT); + } else { + register_code (KC_SCLN); + unregister_code (KC_SCLN); + reset_tap_dance (state); + } +} + +void dance_egg (qk_tap_dance_state_t *state) { + if (state->count >= 100) { + SEND_STRING ("Safety dance!"); + reset_tap_dance (state); + } +} + +const qk_tap_dance_action_t tap_dance_actions[] = { + [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) + ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln) + ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) +}; +``` + ### Temporarily setting the default layer `DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. From 1ab527a4dbf6ad14c04b07dc6190470c8119b030 Mon Sep 17 00:00:00 2001 From: Max Whittingham Date: Sat, 9 Jul 2016 03:20:58 -0500 Subject: [PATCH 190/551] Cleaning up repo --- keyboards/gh60/keymaps/robotmaxtron/Makefile | 112 +++++++++ .../keymaps/robotmaxtron/WS2812-wiring.jpg | Bin 0 -> 1038926 bytes keyboards/gh60/keymaps/robotmaxtron/config.h | 190 +++++++++++++++ keyboards/gh60/keymaps/robotmaxtron/keymap.c | 228 ++++++++++++++++++ keyboards/gh60/keymaps/robotmaxtron/readme.md | 16 ++ 5 files changed, 546 insertions(+) create mode 100644 keyboards/gh60/keymaps/robotmaxtron/Makefile create mode 100644 keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg create mode 100644 keyboards/gh60/keymaps/robotmaxtron/config.h create mode 100644 keyboards/gh60/keymaps/robotmaxtron/keymap.c create mode 100644 keyboards/gh60/keymaps/robotmaxtron/readme.md diff --git a/keyboards/gh60/keymaps/robotmaxtron/Makefile b/keyboards/gh60/keymaps/robotmaxtron/Makefile new file mode 100644 index 00000000000..2e69aee2981 --- /dev/null +++ b/keyboards/gh60/keymaps/robotmaxtron/Makefile @@ -0,0 +1,112 @@ +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device. +# Please customize your programmer settings(PROGRAM_CMD) +# +# make teensy = Download the hex file to the device, using teensy_loader_cli. +# (must have teensy_loader_cli installed). +# +# make dfu = Download the hex file to the device, using dfu-programmer (must +# have dfu-programmer installed). +# +# make flip = Download the hex file to the device, using Atmel FLIP (must +# have Atmel FLIP installed). +# +# make dfu-ee = Download the eeprom file to the device, using dfu-programmer +# (must have dfu-programmer installed). +# +# make flip-ee = Download the eeprom file to the device, using Atmel FLIP +# (must have Atmel FLIP installed). +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +# CONSOLE_ENABLE ?= yes # Console for debug(+400) +# COMMAND_ENABLE ?= yes # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE ?= yes # Allow locking of keyboard via magic key +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +# MIDI_ENABLE ?= YES # MIDI controls +# UNICODE_ENABLE ?= YES # Unicode +# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + diff --git a/keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg b/keyboards/gh60/keymaps/robotmaxtron/WS2812-wiring.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ab8cc31ac9a0fef320befdedc1aef931c9c19ef GIT binary patch literal 1038926 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%0D3f=7@xI3X2H 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

  • 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
  • pc^76gFYtZ^FE-Wx8 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�x@`ZXphULG@)5=e>VVSQ+S-_hiG9H)>xA%Y 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 z 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