From c7aa8e6a4d22a8e4091e8f0b201be19ae9a9c342 Mon Sep 17 00:00:00 2001 From: coelner Date: Thu, 3 Nov 2022 19:01:58 +0100 Subject: [PATCH] adaligth --- ambilight.md | 244 +++++++++++++++++++++++++++++++++++++++++++++++++++ archlinux.md | 26 +++++- 2 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 ambilight.md diff --git a/ambilight.md b/ambilight.md new file mode 100644 index 0000000..34f4fe5 --- /dev/null +++ b/ambilight.md @@ -0,0 +1,244 @@ +## ambilight +### adaligth fastLED sketch +[https://github.com/dmadison/Adalight-FastLED] +``` +/\* + \* Project Adalight FastLED + \* @author David Madison + \* @link github.com/dmadison/Adalight-FastLED + \* @license LGPL - Copyright (c) 2017 David Madison + \* + \* This program 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 3 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 Lesser General Public License for more details. + \* + \* You should have received a copy of the GNU Lesser General Public License + \* along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +#include <Arduino.h> + +// \-\-\- General Settings +const uint16_t + Num_Leds = 80; // strip length +const uint8_t + Brightness = 255; // maximum brightness + +// \-\-\- FastLED Setings +#define LED_TYPE WS2812B // led strip type for FastLED +#define COLOR_ORDER GRB // color order for bitbang +#define PIN_DATA 6 // led data output pin +// #define PIN_CLOCK 7 // led data clock pin (uncomment if you're using a 4-wire LED type) + +// \-\-\- Serial Settings +const unsigned long + SerialSpeed = 115200; // serial port speed +const uint16_t + SerialTimeout = 60; // time before LEDs are shut off if no data (in seconds), 0 to disable + +// \-\-\- Optional Settings (uncomment to add) +#define SERIAL_FLUSH // Serial buffer cleared on LED latch +// #define CLEAR\_ON\_START // LEDs are cleared on reset + +// \-\-\- Debug Settings (uncomment to add) +// #define DEBUG_LED 13 // toggles the Arduino's built-in LED on header match +// #define DEBUG_FPS 8 // enables a pulse on LED latch + +// -------------------------------------------------------------------- + +#include <FastLED.h> + +CRGB leds\[Num_Leds\]; +uint8\_t * ledsRaw = (uint8\_t *)leds; + +// A 'magic word' (along with LED count & checksum) precedes each block +// of LED data; this assists the microcontroller in syncing up with the +// host-side software and properly issuing the latch (host I/O is +// likely buffered, making usleep() unreliable for latch). You may see +// an initial glitchy frame or two until the two come into alignment. +// The magic word can be whatever sequence you like, but each character +// should be unique, and frequent pixel values like 0 and 255 are +// avoided -- fewer false positives. The host software will need to +// generate a compatible header: immediately following the magic word +// are three bytes: a 16-bit count of the number of LEDs (high byte +// first) followed by a simple checksum value (high byte XOR low byte +// XOR 0x55). LED data follows, 3 bytes per LED, in order R, G, B, +// where 0 = off and 255 = max brightness. + +const uint8_t magic\[\] = { + 'A','d','a'}; +#define MAGICSIZE sizeof(magic) + +// Check values are header byte # - 1, as they are indexed from 0 +#define HICHECK (MAGICSIZE) +#define LOCHECK (MAGICSIZE + 1) +#define CHECKSUM (MAGICSIZE + 2) + +enum processModes_t {Header, Data} mode = Header; + +int16_t c; // current byte, must support -1 if no data available +uint16_t outPos; // current byte index in the LED array +uint32_t bytesRemaining; // count of bytes yet received, set by checksum +unsigned long t, lastByteTime, lastAckTime; // millisecond timestamps + +void headerMode(); +void dataMode(); +void timeouts(); + +// Macros initialized +#ifdef SERIAL_FLUSH + #undef SERIAL_FLUSH + #define SERIAL_FLUSH while(Serial.available() > 0) { Serial.read(); } +#else + #define SERIAL_FLUSH +#endif + +#ifdef DEBUG_LED + #define ON 1 + #define OFF 0 + + #define D\_LED(x) do {digitalWrite(DEBUG\_LED, x);} while(0) +#else + #define D_LED(x) +#endif + +#ifdef DEBUG_FPS + #define D\_FPS do {digitalWrite(DEBUG\_FPS, HIGH); digitalWrite(DEBUG_FPS, LOW);} while (0) +#else + #define D_FPS +#endif + +void setup(){ + #ifdef DEBUG_LED + pinMode(DEBUG_LED, OUTPUT); + digitalWrite(DEBUG_LED, LOW); + #endif + + #ifdef DEBUG_FPS + pinMode(DEBUG_FPS, OUTPUT); + #endif + + #if defined(PIN\_CLOCK) && defined(PIN\_DATA) + FastLED.addLeds<LED\_TYPE, PIN\_DATA, PIN\_CLOCK, COLOR\_ORDER>(leds, Num_Leds); + #elif defined(PIN_DATA) + FastLED.addLeds<LED\_TYPE, PIN\_DATA, COLOR\_ORDER>(leds, Num\_Leds); + #else + #error "No LED output pins defined. Check your settings at the top." + #endif + + FastLED.setBrightness(Brightness); + + #ifdef CLEAR\_ON\_START + FastLED.show(); + #endif + + Serial.begin(SerialSpeed); + Serial.print("Ada\\n"); // Send ACK string to host + + lastByteTime = lastAckTime = millis(); // Set initial counters +} + +void loop(){ + t = millis(); // Save current time + + // If there is new serial data + if((c = Serial.read()) >= 0){ + lastByteTime = lastAckTime = t; // Reset timeout counters + + switch(mode) { + case Header: + headerMode(); + break; + case Data: + dataMode(); + break; + } + } + else { + // No new data + timeouts(); + } +} + +void headerMode(){ + static uint8_t + headPos, + hi, lo, chk; + + if(headPos < MAGICSIZE){ + // Check if magic word matches + if(c == magic\[headPos\]) {headPos++;} + else {headPos = 0;} + } + else{ + // Magic word matches! Now verify checksum + switch(headPos){ + case HICHECK: + hi = c; + headPos++; + break; + case LOCHECK: + lo = c; + headPos++; + break; + case CHECKSUM: + chk = c; + if(chk == (hi ^ lo ^ 0x55)) { + // Checksum looks valid. Get 16-bit LED count, add 1 + // (# LEDs is always > 0) and multiply by 3 for R,G,B. + D_LED(ON); + bytesRemaining = 3L * (256L * (long)hi + (long)lo + 1L); + outPos = 0; + memset(leds, 0, Num_Leds * sizeof(struct CRGB)); + mode = Data; // Proceed to latch wait mode + } + headPos = 0; // Reset header position regardless of checksum result + break; + } + } +} + +void dataMode(){ + // If LED data is not full + if (outPos < sizeof(leds)){ + ledsRaw\[outPos++\] = c; // Issue next byte + } + bytesRemaining--; + + if(bytesRemaining == 0) { + // End of data -- issue latch: + mode = Header; // Begin next header search + FastLED.show(); + D_FPS; + D_LED(OFF); + SERIAL_FLUSH; + } +} + +void timeouts(){ + // No data received. If this persists, send an ACK packet + // to host once every second to alert it to our presence. + if((t - lastAckTime) >= 1000) { + Serial.print("Ada\\n"); // Send ACK string to host + lastAckTime = t; // Reset counter + + // If no data received for an extended time, turn off all LEDs. + if(SerialTimeout != 0 && (t - lastByteTime) >= (uint32_t) SerialTimeout * 1000) { + memset(leds, 0, Num_Leds * sizeof(struct CRGB)); //filling Led array by zeroes + FastLED.show(); + mode = Header; + lastByteTime = t; // Reset counter + } + } +} +``` +### arduino nano clone +- use the old bootloader (or update it) +- sometimes the sketch get lost?, reflash it diff --git a/archlinux.md b/archlinux.md index 91fb73f..9bb889e 100644 --- a/archlinux.md +++ b/archlinux.md @@ -109,4 +109,28 @@ cat /etc/tmpfiles.d/acpi-lid.conf # Path Mode UID GID Age Argument w /proc/acpi/wakeup - - - - LID -``` \ No newline at end of file +``` + +### usbguard gnome +``` +/etc/polkit-1/rules.d/70-allow-usbguard.rules + +// Allow users in wheel group to communicate with USBGuard +polkit.addRule(function(action, subject) { + if ((action.id == "org.usbguard.Policy1.listRules" || + action.id == "org.usbguard.Policy1.appendRule" || + action.id == "org.usbguard.Policy1.removeRule" || + action.id == "org.usbguard.Devices1.applyDevicePolicy" || + action.id == "org.usbguard.Devices1.listDevices" || + action.id == "org.usbguard1.getParameter" || + action.id == "org.usbguard1.setParameter") && + subject.active == true && subject.local == true && + subject.isInGroup("wheel")) { + return polkit.Result.YES; + } +}); +``` +to activate it for gnome: +`$ gsettings set org.gnome.desktop.privacy usb-protection true` +and to harden it further: +`$ gsettings set org.gnome.desktop.privacy usb-protection-level always` \ No newline at end of file