Ich konnte die Schmach von heute Nacht nicht auf mir sitzen lassen... Wobei ich da schon einiges gelernt habe - war mein erstes Mal, wo ich an einem SMD-Connector direkt Pins gelötet habe. Das weiße Papier ist wichtig, da auf der Platine einige Leitungen vermutlich zu Debugzwecken nicht isoliert sind - vermutlich war das das Problem in der Nacht. Masse klaue ich mir derzeit von der Kühlerbefestigung.
Es tut
Adapter - noch nicht verklebt:
Adapter - fixiert:
Aufbau - im Notebook:
I2C - erstes Bild:
I2C - zweites Bild:
I2C - Kommandoübersicht:
Anscheinend werden da in einem bestimmten Muster Befehle abgeschickt. Die Screenshots wurden bei laufendem Notebook erstellt - ohne Akku. Wenn das Notebook aus ist (aber an Strom hängt) ist Ruhe. Beim Anschalten des Notebooks werden sofort 3 Kommandos direkt hintereinander abgeschickt, danach gehts nahtlos in diesen 4+2 Rhythmus. Wen ich die Feststelltaste drücke wird sofort ein Kommando geschickt, worüber wohl die LED aktiviert ist. Bei Tastendrücken am Tablet sehe ich auch 2 Kommandos (vermute "Tastenabfrage" und "IRQ-Leitung zurücksetzen".
Sieht also nicht allzu komplex aus
Ich suche jetzt aber erstmal den Logikanalyser raus
1. Ergänzung:
Tastendrücke habe ich bereits herausbekommen
So sieht ein Signal aus:
Man sieht sehr schön, dass erst die IRQ-Leitung heruntergezogen wird. Danach wird dem Gerät 0x10 0x25 geschrieben - was wohl sowas wie "Wähle das Register aus" bedeutet. Danach wird vom Notebook vom Gerät 0x10 gelesen - da kommen 2 Bytes an - in diesem Beispiel 0x08 0x08. Direkt nach dem 1. Byte wird dann auch wieder die IRQ-Leitung losgelassen.
Der kleine Knopf hat 0x00 0x09, Bilddrehen hat 0x08 0x08, Escape 0x04 0x08, Toolbox 0x01 0x08.
Enter ist 0x02 0x08, links 0x20 0x08, rechts 0x10 0x08, oben 0x80 0x08, unten 0x40 0x08.
Wenn die Taste losgelassen wird kommt 0x00 0x08.
Kling also nach einem einfachen Bitfeld. Der kleine Knopf passt nicht mehr in ein 8 Bit großes Bitfeld, also wurde es ins 2. Byte verschoben
Wenn ich das Notebook zu klappe kommt ein 0x00 0x0A, beim aufmachen wieder das bekannte 0x00 0x08.
Das drehen selbst produziert keinen IRQ, wenn ich nach dem Drehen im Tabletmodus zuklappe kommt ein 0x00 0x0C.
Damit wäre die Richtung Displayeinheit -> Notebook alles abgehandelt, oder?
2. Ergänzung
Startsequenz:
Die 3 Befehle sehen folgendermaßen aus:
Es wird nur zum Gerät 0x10 gesendet.
Das erste ist ein Schreiben mit den beiden Werten 0x81 0xCF Klingt nach Initialisierung bzw. Reset. EDIT: Ist die Initialisierung der LEDs.
25 ms später wird das bekannte 0x25 geschrieben und direkt danach gelesen. Wie beim Tastenlesen. da kommt ein 0x00 0x00(!) zurück. Gleichzeitig wird die IRQ-Leitung losgelassen. Ist wohl eine Initialisierung des IRQ-Betriebes.
ca. 12 ms später wird die IRQ-Leitung heruntergezogen. Dann kommt wieder das bekannte Muster - 0x25 schreiben. Beim direkt darauffolgenden Lesen kommt dann auch wieder das gewohnte 0x00 0x08 zurück.
3, Ergänzung
Die regelmäßigen Signale:
Hinweis: Leider komme ich da mit meinem Logikanalyser an die Grenzen der Speichertiefe. Ich versuche die zeitliche Reihenfolge durch wiederholtes Sampeln und manuelle Aneinanderreihung hinzubekommen.
Da wird anscheinend nur das Gerät 0x4D angesprochen, und zwar immer ein Byte schreiben und direkt danach ein Byte lesen.
t=0000ms: 0x03 -> 0x3D (1x gesehen) (das gleiche wie das Letzte in der Liste)
t=0651ms: 0x02 -> 0x31 (2x gesehen); 0x30 (1x gesehen)
t=0788ms: 0x07 -> 0x30 (4x gesehen)
t=1636ms: 0x04 -> 0x2A (3x gesehen)
t=1704ms: 0x01 -> 0x40 (3x gesehen)
t=1835ms: 0x04 -> 0x2A (1x gesehen)
t=1971ms: 0x04 -> 0x2A (1x gesehen)
t=2284ms: 0x03 -> 0x3D (1x gesehen)
Korrespondiert gut zum 2+5 Muster, was ich im Oszi gesehen habe, auch die Zeitabstände (700ms Pause -> 2 Befehle -> knappe Sek Pause -> 5 Befehle) passen. Sogar dass der 1. und 2. Befehl im 5er-Block näher beisammen sind passt.
Was die Werte bedeuten? Keine Ahnung - ich wüsste auf Anhieb nicht, was man außer den Tasten von der Displayeinheit lesen müsste... ist auch ein anderes Device. Bis auf den einen Wert ist es scheinbar auch immer gleich. Gesampelt habe ich, während der Rechner im Grub war.
4. Ergänzung:
LEDs.
Habe mit den Tastatur-LEDs angefangen.
Die LEDs werden ebenfalls an das Gerät 0x10 gesendet, und zwar jeweils mit 0x81 <Byte>.
Im Grundzustand ist nur Bluetooth, Gerät an und AC aktiv
Caps-Lock tockelt zwischen 0xEE und 0xFE.
Num-Lock tockelt zwischen 0xDE und 0xFE.
LEDs sind also an, wenn das entsprechende Bit NICHT gesetzt ist. Ist wieder ein Bitfeld (wenn Caps und Num-Lock aktiv sind kommt ein 0xCE raus).
Bleiben also noch 2x Bat (rot/grün) AC und Standby. Gut, da muss ich mir erstmal Mut holen ;-)
5. Ergänzung:
Wenn (nur) die Batterie (dauerhaft grün) drin ist habe ich 0xF7, wenn Akku und AC leuchten 0xF6. Passt mit dem Ergebnis zusammen, das ich bei nur AC 0xFE hatte.
Das heißt dass das vordere Nibble für die Lock-Leds und das hintere für die Batterie+AC-LED zuständig ist.
Wenn ich in den Standby gehe (mit Akku + AC) toggelt es zwischen 0xF6 und 0xF4 hin und her.
Übersicht:
0x10: Caps-Lock
0x20: Num-Lock
0x01: AC
0x02: Standby
0x04: Batterie (Orange) - MUTMASSUNG!!!
0x08: Batterie (Grün)
Hiermit wäre das Reverse Engineering für den Umbau soweit ich sehen kann komplett. Das 0x10 Gerät ist für die LEDs + Tasten zuständig. Was das 0x4D Gerät macht weiß ich nicht, irgendwie klingt das nach Speicher oder Sensor? Der nächste Schritt meinerseits ist es, die bearbeitete Platine auf das x62 Mobo zu setzen und eigene Kommandos zu senden.
6. Ergänzung:
Die Kombination x62 mobo + Led/Tastenkontroller funktioniert
Ich habe mit meinem Logikanalyser einfach die beiden Signale für Numlock an/aus abgespielt.
Aufbau:
Beweisvideo:
https://mifritscher.de/austausch/x62/capslock_x62.MOV (kam so von meinem Fotoapparat)
das x62 Mobo scheint auf dem I2C Bus nichts zu machen, zumindest konnte ich keine Aktivitäten feststellen, auch wenn ich die *-Lock Tasten gedrückt habe. Zum Glück sind die Pullups aber vorhanden.
So, jetzt kommt der geradezu langweilige Teil: Die AVR-Firmware anpassen
Zum Glück kann der AVR ja von Haus aus i2c, und zufälligerweise hab ich damit sogar schon rumgespielt :-D Aber nicht mehr heute ;-)