For educational reasons I've decided to create my own CA. Here is what I learned.
Lets get some context first.
const byte voicePins[] PROGMEM = {2, 3, 4, 5, 6, 7}; | |
byte voiceEnabled[6]; | |
byte voiceType[6]; | |
byte states[6]; | |
byte noiseCount[6]; | |
unsigned long start[6]; | |
unsigned int periods[6]; | |
unsigned long nextFlip[6]; | |
byte noise = 0; |
/* | |
* Inspired by, but a nearly complete rewrite of: | |
* slowcat.c - slow down the display of a file | |
* copyright (c) 2001,2002,2007 dave w capella All Rights Reserved | |
* found here: | |
* https://grox.net/software/mine/slowcat/ | |
* in August 2020. | |
* | |
* Original license (unchanged): | |
* * distributed under the terms of the GNU Public license |
use nannou::prelude::*; | |
mod midi; | |
use std::sync::mpsc; | |
fn main() { | |
nannou::app(model).update(update).run(); | |
} | |
struct Model { | |
_window: window::Id, |
#! /usr/bin/env python | |
import re | |
import subprocess | |
import textwrap | |
RE_LOGITECH_ID = rb"Logitech MX Ergo[\s\-\w]+id=(\d+).*pointer" | |
def set_ergo_scroll() -> None: |