ich nutze den IR-Empfänger nicht - habe da noch einen ATRIC.
Zur Karte:
Läuft seit damals immer noch sehr gut (derzeit mit Kernel 5.4.0-91-generic) . Das mit dem nvidia-Treiber hat sich auch seit längeren erledigt (hier: 340.108-0ubuntu0.18.04.1).
ich nutze den IR-Empfänger nicht - habe da noch einen ATRIC.
Zur Karte:
Läuft seit damals immer noch sehr gut (derzeit mit Kernel 5.4.0-91-generic) . Das mit dem nvidia-Treiber hat sich auch seit längeren erledigt (hier: 340.108-0ubuntu0.18.04.1).
Ich war schon drauf und dran Logging anzustellen und einen Scan zu machen, aber jetzt werden beide Fernbedienungen wieder korrekt erkannt! Der einzige mir bewusste Unterschied: es ist jetzt etwas kühler.
Ich werde da nicht mehr Zeit investieren und lasse das auf sich beruhen.
Anbei noch ein Bild des Innenlebens der Fernbedienung.
Sorry - da war noch eine offene Frage zu einer MCE Fernbedienung.
ich habe das Problem mit der MCE RCE nicht weiter verfolgt. Ich habe eine andere Fernbedienung verwendet, die immer sehr gut klappte und andere IR-Empfänger zum Test hatte ich nicht da. Nachdem die SW dann dank M-Reimer funktionierte, habe ich es dabei belassen.
Im Kühlen habe ich es noch nicht getestet - die Gartenlaube wo der VDR steht ist zwar jetzt kühl, aber quasi "eingewintert".
Super - Danke für den Link zur "Matrix" und die Infos.
Ich meine sogar das dort bekannte Problem bei mir wiederzuerkennen:
"VDPAU mit ffmpeg 3.4/3.3
bei SAT-Empfang in Verbindung Crashes auf bestimmten Sendern, in dem Fall eine der Varianten mit ffmpeg 2.8 verwenden."
Eine Frage hierzu noch: Was ist der Unterschied in Spalte "HEVC" zwischen Hardware und VAAPI (Tabelle für 18.04). VAAPI ist doch m.E. die Schnittstelle (bei Intel) für das Hw-Decoding.
Werde mich mal durchtesten...
Das ist nachvollziehbar und selbst kompilieren fällt dann auch für mich aus, bei diesen Klimmzügen.
Welches shd-x ist denn das von lnj?
Ohne das man hier tausend Threads durchliest, blicke ich da inzwischen nicht mehr durch. Genial wäre ja eine Matrix, was diese Versionen können (vdpau, vaapi, HVEC, 4K etc.).
Ich habe hier Linux Mint 20 (also quasi focal) auf meinem Desktop-PC mit einem i5-6400@2.70GHz und VA-API version: 1.7 (libva 2.6.0).
Welches s-device wäre hier zu empfehlen bzw. welches ist das von lnj?
Hallo seahawk1986,
ich nutze hier unter bionic Dein yavdr-PPA. Unter anderem verwende ich
"vdr-plugin-softhddevice-vdpau-hevc 0.7.0+git20180203-724-3781118-pesintta-2yavdr3~bionic"
Gibt es einen Grund, warum es dies für focal nicht mehr gibt?
Aus den ganzen -zig softhd-devices war dies das am besten funktionierende für meine Intelrechner (SD, HD und DVB-T2 mit HEVC).
Marcus
Ich beobachte das jetzt mal, ob der Rechner nochmal hängt. Bisher war es nicht mehr reproduzierbar...
Hmmm...neues Problem oder nicht?
Wenn der PC aus ist und mit dem Empfänger eingeschaltet wird, mag er nicht booten.
2x konnte ich es reproduzieren, beim 3. und 4. mal nicht mehr.
Der Arduino meldet beim Einschalten des PC:
"Got unknown request from PC
EC"
Übrigens liegt keine Spannung am PS/2, wenn der Rechner im Standby ist.
Komisch...auch beim 5. Mal geht es nun - mal weiter beobachten.
Also mit Debug true kommen folgende Meldungen beim Start. Auch beim 5. WakeOnLAN mit Empfänger dran, bootet er nun.
Got request from PC
EC
Got unknown request from PC
EC
Got request from PC
F5
Got request from PC
F5
Got request from PC
FF
Got request from PC
F3
Got request from PC
F2
Got request from PC
ED
Got request from PC
F4
Got request from PC
F2
Got request from PC
F5
Got request from PC
ED
Got request from PC
F3
Got request from PC
F4
Display More
Das ist ein FUJITSU SIEMENS ESPRIMO E5625 - ich habe da bisher noch nichts im BIOS finden können.
Stand war eigentlich kurz vor meinem Thread - meine IDE sagt gerade, dass das hier im Quellcode ist:
#define BYTE_SPACING 2 //ms
Das war ja die Änderung von vor ca. 2h.
Wenn ab und an doppelte Tasten empfangen werden, muss ich die RELEASE_TIME etwas erhöhen?
Manchmal wertet er derzeit 2 Tastendrücke am Anfang.
Bezüglich der Wiederholung: irmpdump aus meinem Repo in den Arduino und eine FB-Taste gedrückt halten. Dabei wird im seriellen Monitor auch die Wiederholzeit ausgegeben. Die mit in die config.h eintragen (RELEASE_TIME).
Das hatte ich noch vergessen. Habe nun 107 statt der Standard 120 und auch das klappt nun!
Danke für das Update und nun schaue ich mal, ob in der Live-VDR/Kodi-Bedienung noch etwas auffällt. Leider hat mein PC wohl kein Wake-On-PS/2 Keyboard, aber damit kann ich leben.
Ich bau jetzt wieder meine LED-Empfangssignalisierung ein - daran lag es ja nun nicht
Hier was zum Ansehen:
Kennen viele evtl. noch von früher von ihrer Hauppauge WinTV-Karte
Ich habe immer erstmal hier geschaut, was von Linux wie supported wird:
https://www.linuxtv.org/wiki/index.php/DVB-S2_PCIe_Cards
Soviel bleibt da aber nicht übrig - wenn auch das nun auch bei Digital Devices so ist...meine alte DD CineS2 (V6.x??) läuft hier seit Jahren ohne Eigenkopfstände. Wobei ich jetzt auch bei meiner TBS 6981 lange nichts mehr selbst machen musste (z.B. Kernel 4.x auf 5.x)...vermutlich Dank seahawks PPA.
Vielen Dank - jetzt klappt es auch mit LEFT/RIGHT etc.
Ein Punkt wäre da noch:
Wenn ich eine Taste auf der FB gedrückt halte, bekomme ich derzeit keine Wiederholungen. "1" drücken und halten gibt genau eine 1.
Das macht sich insbesondere bei der Lautstärke nicht gut.
Kann man da noch was ergänzen? IRMP gibt ja auch die "Wiederholungen" aus.
@seahawk:
Soweit ich es verstehe, geht es nicht um diese Pause. Die write Funktion prüft ja, ob der PC die Daten annehmen kann (1 CLK & 1 DATA) - wenn eines davon 0 ist gibt write -1 oder -2 zurück.
if (digitalRead(_ps2clk) == LOW) {
return -1;
}
if (digitalRead(_ps2data) == LOW) {
return -2;
}
Es geht dann um das Timing (hier wohl das Stopbit) im Wiki-Bild "Diagramm PS/2 Schnittstelle: Daten vom KBD"
EDIT: Achso - Du meinst sicher Punkt 7? (Zur Bestätigung der empfangenen Daten legt der PC Clock auf low
, bis die interne Verarbeitung abgeschlossen ist.)
Sehr gut - es geht wieder mehr.
Also ich kann nun 123456, SPACE, BACKSPACE eingeben, sobald ich aber z.B. LINKS drücke, hängt er wieder.
Hier den Ausgaben:
Got request from PC
F2
Got request from PC
F5
Got request from PC
ED
Got request from PC
F3
Got request from PC
F4
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Status schreiben Release-Byte (0xF0): 0
Status schreiben zweites Byte: 0
Display More
Und hier meine FB-Konfig:
KeyTable REMOTE_KEYS[] = {
// TERRATEC IR
// Number keys
{{0x02,0xeb14,0x000c,0x00}, MOD_NONE, KEY_0},
{{0x02,0xeb14,0x0002,0x00}, MOD_NONE, KEY_1},
{{0x02,0xeb14,0x0003,0x00}, MOD_NONE, KEY_2},
{{0x02,0xeb14,0x0004,0x00}, MOD_NONE, KEY_3},
{{0x02,0xeb14,0x0005,0x00}, MOD_NONE, KEY_4},
{{0x02,0xeb14,0x0006,0x00}, MOD_NONE, KEY_5},
{{0x02,0xeb14,0x0007,0x00}, MOD_NONE, KEY_6},
{{0x02,0xeb14,0x0008,0x00}, MOD_NONE, KEY_7},
{{0x02,0xeb14,0x0009,0x00}, MOD_NONE, KEY_8},
{{0x02,0xeb14,0x000a,0x00}, MOD_NONE, KEY_9},
// Arrow keys
{{0x02,0xeb14,0x0011,0x00}, MOD_NONE, KEY_LEFT},
{{0x02,0xeb14,0x0013,0x00}, MOD_NONE, KEY_RIGHT},
{{0x02,0xeb14,0x0010,0x00}, MOD_NONE, KEY_UP},
{{0x02,0xeb14,0x0014,0x00}, MOD_NONE, KEY_DOWN},
// OK-Button
{{0x02,0xeb14,0x0012,0x00}, MOD_NONE, KEY_ENTER},
// Back or Exit
{{0x02,0xeb14,0x004d,0x00}, MOD_NONE, KEY_BACKSPACE},
// HOME => ESC
{{0x02,0xeb14,0x0041,0x00}, MOD_NONE, KEY_ESC},
// (I) => Info-Key
{{0x02,0xeb14,0x0016,0x00}, MOD_NONE, KEY_I},
// EPG => Menu
{{0x02,0xeb14,0x000f,0x00}, MOD_NONE, KEY_M},
// DVD MENU => Context menu
{{0x02,0xeb14,0x0042,0x00}, MOD_NONE, KEY_C},
// TELETEXT
{{0x02,0xeb14,0x0044,0x00}, MOD_NONE, KEY_V},
// SUBTITLES
{{0x02,0xeb14,0x0043,0x00}, MOD_NONE, KEY_T},
// A/B => AUDIO TRACK
{{0x02,0xeb14,0x000d,0x00}, MOD_NONE, KEY_A},
// AV => FULLSCREEN/ZOOM
{{0x02,0xeb14,0x000b,0x00}, MOD_NONE, KEY_TAB},
// EPG guide
{{0x02,0xeb14,0x0046,0x00}, MOD_NONE, KEY_E},
// DVD
{{0x02,0xeb14,0x0047,0x00}, MOD_CTRL, KEY_D},
// VIDEO
{{0x02,0xeb14,0x0049,0x00}, MOD_CTRL, KEY_V},
// MUSIC
{{0x02,0xeb14,0x004a,0x00}, MOD_CTRL, KEY_M},
// PICTURES
{{0x02,0xeb14,0x004b,0x00}, MOD_CTRL, KEY_P},
// RECORD
{{0x02,0xeb14,0x0058,0x00}, MOD_CTRL, KEY_R},
// DELETE
{{0x02,0xeb14,0x0045,0x00}, MOD_NONE, KEY_DELETE},
// Play
{{0x02,0xeb14,0x004c,0x00}, MOD_NONE, KEY_P},
// Pause
{{0x02,0xeb14,0x0040,0x00}, MOD_NONE, KEY_SPACE},
// Stop
{{0x02,0xeb14,0x0048,0x00}, MOD_NONE, KEY_X},
// Fast forward
{{0x02,0xeb14,0x004f,0x00}, MOD_NONE, KEY_F},
// Rewind
{{0x02,0xeb14,0x004e,0x00}, MOD_NONE, KEY_R},
// Next
{{0x02,0xeb14,0x005c,0x00}, MOD_NONE, KEY_PERIOD},
// Previous
{{0x02,0xeb14,0x0054,0x00}, MOD_NONE, KEY_COMMA},
// Volume up
{{0x02,0xeb14,0x001c,0x00}, MOD_NONE, KEYPAD_ADD},
// Volume down
{{0x02,0xeb14,0x001e,0x00}, MOD_NONE, KEYPAD_SUBTRACT},
// Channel up
{{0x02,0xeb14,0x001b,0x00}, MOD_NONE, KEY_PAGE_UP},
// Channel down
{{0x02,0xeb14,0x001f,0x00}, MOD_NONE, KEY_PAGE_DOWN},
// Mute
{{0x02,0xeb14,0x001d,0x00}, MOD_NONE, KEY_F8},
// Red
{{0x02,0xeb14,0x0017,0x00}, MOD_NONE, KEY_F1},
// Green
{{0x02,0xeb14,0x0018,0x00}, MOD_NONE, KEY_F2},
// Yellow
{{0x02,0xeb14,0x0019,0x00}, MOD_NONE, KEY_F3},
// Blue
{{0x02,0xeb14,0x001a,0x00}, MOD_NONE, KEY_F4},
// Shutdown menu
{{0x02,0xeb14,0x0001,0x00}, MOD_NONE, KEY_S},
Display More
farblich markierte habe ich getestet: grün geht einwandfrei, rot führt zum Einfrieren des Empfängers.
EDIT:
=> mhhh, CODE lässt keine Farben zu? In der Vorschau ging es.
Also alle Buchstaben und Zahlen gehen, wenn ich LINKS oder RECHTS drücke => Einfireren.
Hallo - bin erst leider jetzt wieder dazu gekommen.
Langsam scheint die Lösung näher zu kommen.
Teilerfolgt: Mit dem Update kann ich zumindest genau eine Taste drücken (die erste die an den IR-Receiver gesendet wird), die wird dann auch am Monitor genauso wie von einer Tastatur angezeigt.
Nachdem ich einmal die Taste gedrückt habe, hängt er dann aber in der while-Schleife von Keyboard.release() fest. Ich kann dann auf der FB drücken was ich will - es geht nichts mehr.
gebastelte Debug- Ausgaben aus der while-Schleife:
IR receiver started!
Got request from PC
F2
Got request from PC
F5
Got request from PC
ED
Got request from PC
F3
Got request from PC
F4
before Keyboard.releaseAll
before Keyboard.press
after Keyboard.press
entered while loop in Keyboard.release
while loop Keyboard.release: if k.bytes[1] != 0xFF
while loop Keyboard.release: if write(k.bytes[0])
entered while loop in Keyboard.release
while loop Keyboard.release: if k.bytes[1] != 0xFF
while loop Keyboard.release: if write(k.bytes[0])
entered while loop in Keyboard.release
while loop Keyboard.release: if k.bytes[1] != 0xFF
while loop Keyboard.release: if write(k.bytes[0])
entered while loop in Keyboard.release
while loop Keyboard.release: if k.bytes[1] != 0xFF
while loop Keyboard.release: if write(k.bytes[0])
entered while loop in Keyboard.release
...
Display More
Er hängt also in der while-Schleife mit dem if (write(k.bytes[0])) (innerhalb des if (k.bytes[1] != 0xFF)) fest.
Also folgender Stand:
- na zum Glück ist die alte Tastatur nooch nicht im Müll - PS/2 Tastatur angeschlossen, PC gestartet, funktioniert
- Empfänger anstelle Tastatur bei laufenden PC angeschlossen, selbiges Problem/selbe Ausgabe wie oben
- alle Debugausgaben und die LED-Ansteuerung aus dem Code entfernt (Timing?) - geht weiterhin nicht
- Tastatur wieder im laufen Betrieb angeschlossen => geht
Ich könnte jetzt nur noch Debugausgaben in den PS/2 Sendezweig einbauen. Ein Oszi habe ich nicht.
Evtl. finde ich für Arduino nen Beispiel was auch PS/2 ansteuert um es damit zu vergleichen...
So ich habe DEBUG aktiviert für PS/2 - hier die Ausgaben nachdem ich den PS/2 Stecker eingesteckt habe.
Nach F4 ist Ruhe, bis ich die Fernbedienungstaste drücke. Nach dem Empfang (IR received) friert er quasi ein.
Wo soll ich ggf. noch ansetzen/mehr Debugausgaben einbauen?
Got request from PC
F2
Got request from PC
F5
Got request from PC
ED
Got request from PC
F3
Got request from PC
F4
IR received: P:2 A:EB14 C:12 F:0
Display More
Die Fehlermeldung bei dmesg scheint weg zu sein:
[ 32.546916] TSC found unstable after boot, most likely due to broken BIOS. Use 'tsc=unstable'.
[ 32.546919] sched_clock: Marking unstable (32534648817, 12264475)<-(32556106309, -9191600)
[ 32.547070] clocksource: Switched to clocksource hpet
[ 387.278779] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input13
Mit noch mehr Debugausgaben scheint er nach Keyboard.releaseAll(); zu hängen:
IR received: P:2 A:EB14 C:12 F:0
check for FDC protocol
Keyboard releaseAll
CODE:
if (memcmp(&data, &REMOTE_KEYS[index], sizeof(IRMP_DATA) - 1) == 0) {
//Serial.println("Pressing");
#ifdef DEBUG
Serial.println(F("Keyboard releaseAll"));
#endif
Keyboard.releaseAll();
#ifdef DEBUG
Serial.println(F("check and press keyboard modifier"));
#endif
Display More
Auf dem läuft noch LinVDR - never change a running system - solange bis SD abgeschaltet wurde. Eigentlich habe ich den nur für den Notfall stehen lassen - wurde aber nie gebraucht.
Ich hab es soeben noch einmal geprüft. Am männlichen Stecker ist nach diesem Bild:
Arduino D2 => 2 (Data)
Arduino D3 => 6 (Clock)
Arduino 5V => 3
Arduino GND => 4
Die Anschlüsse werden für die o.g. PINs aber für den weiblichen angegeben:
Data => 1
GND => 3
VCC => 4
CLK => 5
Sollte also auch "gespiegelt" passen.
Im Code wird es ja so aufgerufen:
"PS2Keyboard Keyboard(3,2); //(2:data, 3:clock)"
Stimmt also auch.
Muss ich doch irgendwie in das PS/2 Debugging kommen. Es müsste ja ausreichen, wenn ich am Arduino nur die TX/RX Leitungen, ggf. Masse abgreife, oder?
Für die Pro Mini habe ich so einen Adapter, wenn ich den auf 5V stelle und nur TX/RX (GND?) abgreife, müsste ich ja die Debugausgaben auf PC2 sehen, wenn der Arduino per PS/2 an PC1 angeschlossen ist, oder?
Auch wenn man lange nicht aktiv war - ich stelle fest: geholfen wird einem hier weiterhin.
Der VDR läuft einfach zu gut und oft verirrt man sich nur zum Updaten hier her
Da muss ich doch mal meinen Pentium III 400MHz?? mit FF-DVB-S V1.6 und IDE-Platten wieder anwerfen - der steht hier immer noch hoffentlich lauffähig aber verstaubt, seit es xine, VDPAU & Co. gibt...das war vor 16 Jahren..ohjeee
Der Empfänger scheint nun zu laufen. Ich glaube der alte TSOP war doch defekt / hat ne Macke.
Habe nun folgende Ausgangsbasis:
- den TSOP aus dem ausgeschlachteten Empfänger
- IRMP2Keyboard nochmal neu aus dem GIT - ohne update-Skript!
- ich habe ein paar Debug-Ausgaben eingebaut
- ich habe eine LED ergänzt, die kurz angeht, wenn eine Taste gedrückt wird
Hier mal die Ausgaben zweier Fernbedienungen (Protokoll, Adresse, Command, Flags):
IR received: P:2 A:EB14 C:12 F:0
PS/2 key pressed: 5A
IR received: P:2 A:EB14 C:12 F:1
IR received: P:2 A:EB14 C:12 F:1
IR received: P:2 A:EB14 C:10 F:0
PS/2 key pressed: E075
IR received: P:2 A:EB14 C:10 F:1
IR received: P:2 A:EB14 C:10 F:1
IR received: P:2 A:EB14 C:14 F:0
PS/2 key pressed: E072
IR received: P:2 A:EB14 C:14 F:1
IR received: P:2 A:EB14 C:14 F:1
IR received: P:2 A:EB14 C:12 F:0
PS/2 key pressed: 5A
IR received: P:2 A:EB14 C:12 F:1
IR received: P:2 A:EB14 C:12 F:0
PS/2 key pressed: 5A
IR received: P:2 A:EB14 C:12 F:1
IR received: P:2 A:EB14 C:12 F:1
IR received: P:15 A:F C:422 F:0
PS/2 key pressed: 5A
IR received: P:15 A:F C:422 F:1
IR received: P:15 A:F C:422 F:0
PS/2 key pressed: 5A
IR received: P:15 A:F C:422 F:0
PS/2 key pressed: 5A
IR received: P:15 A:F C:422 F:1
Display More
Nun das nächste Problem - irgendwie will das Teil nicht als PS/2 Tastatur.
Nochmal zum Prüfen der PS/2 Verbindung:
NANO <=> PS/2
D3 <=> Data
D2 <=> Clock
5V <=> 5V
GND <=> Ground
Wenn ich den Empfänger anschließe und eine Taste drücke, leuchtet meine LED dauerhaft - als ob er nicht mehr aus dem "if (irmp_get_data(&data)" herauskommt. Debuggen ist ja etwas schwierig => 5V vom PC1 und 5V über USB vom PC2 klingt nicht gut.
dmesg (Linux unter Ubuntu 18.04) sagt folgendes beim Anstecken:
atkbd serio0: Failed to enable keyboard on isa0060/serio0
input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
Was könnte nun noch falsch sein?
Hier der Code mit den minimalen Änderungen:
/*
IRMP2Keyboard infrared remote to PS2/USB keyboard converter
Copyright (C) 2019 Manuel Reimer <manuel.reimer@gmx.de>
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 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 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 <https://www.gnu.org/licenses/>.
*/
//
// IRMP2Keyboard "Main Firmware"
//
// This "sketch" receives infrared remote control codes using the "IRMP" library:
// https://www.mikrocontroller.net/articles/IRMP
// "Known" codes are mapped to keyboard keypresses using "config_keybindings.h"
// The resulting keypresses are either sent to the PC using USB (HID-Project needed!)
// or are communicated via PS2-port over Pin 2 (data) and Pin 3 (clock).
//
// Dependencies: TimerOne
// HID-Project (for USB support)
// USBStatus (if you uncomment "WAKEUP_CODE" in config.h)
//
// Have a look at "config.h" and "config_keybindings.h" for more info!
//
// Wiring: Infrared input (TSOP)
// Pin 8 (D8) on Arduino Pro Micro (or Leonardo)
// Pin 12 (D12) on Arduino Nano (or Uno)
// PS2 Output (if configured for PS2 in config.h)
// Pin 2 (D2) Keyboard data
// Pin 3 (D3) Keyboard clock
//
#define SIG_LED 8
#define DEBUG
#include <TimerOne.h>
#include "Arduino.h"
#include "src/irmp/irmp.h"
#include <digitalWriteFast.h>
// Include config first (defines which kind of keyboard we will emulate)
#include "config.h"
// The PS2 keyboard code is part of this project
#ifdef PS2_KEYBOARD
#include "PS2Keyboard.h"
PS2Keyboard Keyboard(3,2); //(2:data, 3:clock)
// For the USB keyboard, the "HID-Project" library will provide everything we need.
#else
#include <HID-Project.h>
#endif
// If we build with wakeup feature enabled, then we need the USBStatus library
#ifdef WAKEUP_CODE
#include <USBStatus.h>
#endif
// The struct used in "config_keybindings.h"
struct KeyTable {
IRMP_DATA irkey;
uint8_t modifiers;
KeyboardKeycode key;
};
// Modifier bits used in "config_keybindings.h"
#define MOD_NONE 0x00
#define MOD_CTRL 0x01
#define MOD_SHIFT 0x02
#define MOD_ALT 0x04
#define MOD_ALTGR 0x08
#include "config_keybindings.h"
void setup() {
pinMode(SIG_LED, OUTPUT);
digitalWriteFast(SIG_LED, LOW);
Serial.begin(9600);
irmp_init();
Timer1.initialize(1000000 / F_INTERRUPTS);
Timer1.attachInterrupt(timerinterrupt);
Keyboard.begin();
}
void timerinterrupt() {
irmp_ISR();
}
IRMP_DATA lastbutton = {0x00, 0x0000, 0x0000, 0x00};
unsigned long pressed_time;
bool fdc_mode = false;
void loop() {
IRMP_DATA data;
// The PS2 keyboard needs regular polling for host communication attempts
#ifdef PS2_KEYBOARD
if (Keyboard.poll())
return;
#endif
if (irmp_get_data(&data)) {
digitalWriteFast(SIG_LED, HIGH);
#ifdef DEBUG
Serial.print(F("IR received: P:"));
Serial.print(data.protocol, HEX);
Serial.print(F(" A:"));
Serial.print(data.address, HEX);
Serial.print(F(" C:"));
Serial.print(data.command, HEX);
Serial.print(F(" F:"));
Serial.println(data.flags, HEX);
#endif
// WAKEUP_CODE feature.
#if defined(__AVR_ATmega32U4__) && defined(WAKEUP_CODE)
if (USBStatus.isShutDown()) {
IRMP_DATA wakeup_button = WAKEUP_CODE;
if (memcmp(&data, &wakeup_button, sizeof(IRMP_DATA) - 1) == 0) {
pinMode(A3, OUTPUT);
delay(100);
pinMode(A3, INPUT);
}
// Don't continue if USB is suspended!
// Whole microcontroller will hang up otherwise!
return;
}
#endif
// Once the first packet with FDC protocol comes in, switch mode
if (data.protocol == IRMP_FDC_PROTOCOL)
fdc_mode = true;
// All "non-keyboard" remote controls.
// Release is done with a timeout.
if (!fdc_mode) {
if (memcmp(&data, &lastbutton, sizeof(IRMP_DATA) - 1) == 0)
pressed_time = millis();
else {
for (unsigned int index = 0; index < (sizeof(REMOTE_KEYS) / sizeof(KeyTable)); index++) {
if (memcmp(&data, &REMOTE_KEYS[index], sizeof(IRMP_DATA) - 1) == 0) {
//Serial.println("Pressing");
Keyboard.releaseAll();
if (REMOTE_KEYS[index].modifiers & MOD_CTRL)
Keyboard.press(KEY_LEFT_CTRL);
if (REMOTE_KEYS[index].modifiers & MOD_SHIFT)
Keyboard.press(KEY_LEFT_SHIFT);
if (REMOTE_KEYS[index].modifiers & MOD_ALT)
Keyboard.press(KEY_LEFT_ALT);
if (REMOTE_KEYS[index].modifiers & MOD_ALTGR)
Keyboard.press(KEY_RIGHT_ALT);
Keyboard.press(REMOTE_KEYS[index].key);
#ifdef DEBUG
Serial.print(F("PS/2 key pressed: "));
Serial.println(REMOTE_KEYS[index].key, HEX);
#endif
pressed_time = millis();
lastbutton = data;
break;
}
}
}
}
// Special handling for the FDC-3402 keyboard.
// Actually sends "release codes" to tell us to release a key.
else if (data.protocol == IRMP_FDC_PROTOCOL) {
pressed_time = millis();
lastbutton = data;
// Read and clear the "button released" bit
bool pressed = (data.command & 0x0080) ? false : true;
data.command &= ~0x0080;
for (unsigned int index = 0; index < (sizeof(REMOTE_KEYS) / sizeof(KeyTable)); index++) {
if (memcmp(&data, &REMOTE_KEYS[index], sizeof(IRMP_DATA) - 1) == 0) {
if (pressed) {
Keyboard.press(REMOTE_KEYS[index].key);
if (data.command == 0x007E) { // Release Ein/Aus key
delay(10);
Keyboard.release(REMOTE_KEYS[index].key);
}
}
else
Keyboard.release(REMOTE_KEYS[index].key);
break;
}
}
}
digitalWriteFast(SIG_LED, LOW);
}
// Releasetime for FDC is always 1s. Use configured release time for all the others
unsigned long releasetime = (fdc_mode) ? 1000 : RELEASE_TIME;
if (lastbutton.protocol && (millis() - pressed_time) > releasetime) {
//Serial.println("Releasing");
Keyboard.releaseAll();
lastbutton.protocol = 0x00;
fdc_mode = false;
}
}
Display More
SMART Werte überwache ich im Betrieb (OMV bringt da ja auch etwas mit).
Ist wohl eine Philosophiefrage - wenn die beim Quälen gleich kaputt gehen, habe ich das nicht erst später, wenn produktive Daten geschrieben werden.
Ich denke es sind genug Infos/Erfahrungen/Tipps getauscht.
Zusammenfassend zur Ausgangsfrage:
RAID5 lasse ich sein und nehme wie bisher ein RAID1. Dieses kommt in folgendes neues System:
- Asrock J4105-ITX mit PicoPSU (hat 4x SATA und läuft in 2 VDRs schon sehr gut)
- 16 GB Speicher
- OpenMediaVault
- Systemfestplatte 2,5 SSD über SATA->USB3.0 Adapter
- Inter-Tech IPC SC-4004, Mini-ITX Gehäuse (Platz für 4x 3,5 HDD und 1x 2,5 HDD), durch den bereits eingebauten Molex-> SATA Anschluss für alle 4 Platten, ist das 3V3 Reset Thema der WD MyBook auch gelöst
=> läuft bereits mit einer 3,5 HDD
Die 4 Festplatten werden:
erstes RAID1: die 2 neuen 10 TB WD MyBook
zweites RAID1: die 2 alten 4 TB WD RED aus meinem alten Zyxel NAS
Ich nehme an, dass OMV (Debian etc.) das alte Zyxel RAID auch erkennt? Oder sind diese NAS-Systeme da speziell? Das sind doch letztlich auch nur Linux-Software-RAIDS, oder?
Zumindest konnte ich bisher immer eine Platte aus dem Zyxel NAS (RAID1) unter Linux problemlos mounten.