Logitech G19 Bildschirm ansprechen und etwas anzeigen

  • Hallo,

    Ich verzweifel jetzt endgültig...
    Bitte erst komplett lesen und mir dann versuchen zu helfen.

    Ich habe jetzt 7-8 Stunden damit verbracht irgendwie mit irgendeinem Script etwas auf meiner Logitech G19 anzuzeigen.
    Weder die Logitech SDK (die ich nicht verstehe da ich selbst die samples dort nicht ans laufen bekomme) oder die UDF hier aus dem Forum helfen mir.
    Selbst Hello-World versuche mit der SDK in C++ in visual studio habe ich nicht hinbekommen, da immer irgendein Fehler mit den includes oder einfach nichts kam, aber das Programm ausgeführt wird.

    Dann habe ich mich weiter durchgekämpft auf der Suche nach alternativen zur SDK und ich bin doch echt in die Vertrautere autoit Sprache gekommen.
    Undzwar mit diesem Thread: https://autoit.de/index.php?page=Thread&threadID=22024

    Nach 1,5h rumprobieren das überhaupt irgendwas auf dem Display angezeigt wird gebe ich auf!
    Es wird noch nichtmals ein Applet geladen OBWOHL die Funktion keinen Fehler zurückgibt.

    Ich verstehs einfach nicht. Meine Idee ist ja, dass die Logitech Gaming Software geupdated wurde und alles nichtmehr Kompatibel ist.
    Oder ich bin einfach zu unfähig.

    Zusammenfassung:
    C++ Visual Studio mit der SDK von Logitech -> keine reaktion
    Autoit mit der UDF -> keine reaktion

    Mein letzter Stand mit Autoit:
    (Denke aber das dort fehler drin sind aber ist schonmal ein ansatz evtl ist dort ja schon etwas komplett verkehrt

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <g19.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    LcdInitialize()

    [/autoit] [autoit][/autoit] [autoit]

    $mylcd=LcdCreateApplet("Mein LCD", $LCD_DEVICE_COLOR, 0, 0)
    LcdSelectDevice($mylcd, $LCD_DEVICE_COLOR)

    [/autoit] [autoit][/autoit] [autoit]

    LcdSetPriority($mylcd,$LCD_PRIORITY_NORMAL,True)

    [/autoit] [autoit][/autoit] [autoit]

    if LcdAppletActive($mylcd)=true then MsgBox(0,0,0)
    if LcdAppletEnabled($mylcd)=true then MsgBox(0,0,0)
    if LcdAppletOpened($mylcd)=true then MsgBox(0,0,0)

    [/autoit] [autoit][/autoit] [autoit]

    LcdLoadFont("Arial",50,$LCD_FONT_DEFAULT,"C:\Windows\Fonts")

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    LcdWaitActivation($mylcd)
    LcdClear($mylcd)
    LcdSelectDevice($mylcd, $LCD_DEVICE_COLOR)
    LcdDrawText($mylcd, "TEST", 10, 10)
    LcdUpdate($mylcd,0)
    sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    LcdDeleteApplet($mylcd)
    LcdDeInitialize()
    Exit

    [/autoit]

    Jetzt würde ich gerne einen Fähigen Programmierer bitten mir einfach ein Hello-World Programm zu schreiben was mir eine einfache ausgabe oder einen Farbwechsel auf dem Display anzeigt.
    Mir relativ egal ob in c++ oder autoit. Doch autoit würde ich bevorzugen.

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

    2 Mal editiert, zuletzt von blackdeath911 (29. Dezember 2013 um 17:38)

  • Spoiler anzeigen

    Hab kein G19, aber mit der G13 funktioniert es.
    Laut der Docu musst du nur noch statt BYTE DWORD verwenden und jedes Mono (auf die Konstanten achten) auf Color umstellen.
    Vor deinem Post hab ich mich damit aber noch nicht auseinander gesetzt.

    PS: LogiLcdIsConnected() gibt mir nur true zurück, wenn ich explizit auf MONO stelle.
    Edit: Ist ja logisch, da ja ansonsten auf ein Color und ein Mono Device gewartet wird.

    Einmal editiert, zuletzt von CentuCore (29. Dezember 2013 um 21:30)

  • DANKE!

    Ich weiß nicht warum ich es nicht hinbekommen habe aber irgendwie wollte es nicht.

    Hier mal ein Code der auf der G19 Funktioniert und den Hintergrund Bunt macht:

    [autoit]

    #include <Windows.h>
    #include <LogitechLcd.h>
    #include <sstream>
    #include <cstdio>
    #include <iostream>
    #include <stddef.h>

    [/autoit][autoit][/autoit][autoit]

    #pragma comment(lib, "gdiplus.lib")
    #pragma comment(lib, "Msimg32.lib")
    #pragma comment(lib, "LogitechLcd.lib")

    [/autoit][autoit][/autoit][autoit]

    using namespace std;

    [/autoit][autoit][/autoit][autoit]

    int main()
    {
    if( !LogiLcdInit(L"MyApplet", LOGI_LCD_TYPE_COLOR) )
    {
    cout << "!LogiLcdInit()" << endl;
    return( -1 );
    }

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    LogiLcdColorSetText(0, L"Hello World!",255 ,255 ,255);

    [/autoit][autoit][/autoit][autoit]

    BYTE colorBitmap[LOGI_LCD_COLOR_WIDTH * LOGI_LCD_COLOR_HEIGHT * 4];

    [/autoit][autoit][/autoit][autoit]

    for (int i = 0; i < (LOGI_LCD_COLOR_WIDTH * LOGI_LCD_COLOR_HEIGHT * 4); i++)
    {
    colorBitmap[i] = (BYTE)rand();
    }

    [/autoit][autoit][/autoit][autoit]

    LogiLcdColorSetBackground(colorBitmap);
    LogiLcdUpdate();

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    getchar();
    LogiLcdShutdown();
    return 0;
    }

    [/autoit]

    :) Jetzt kann ich versuchen weiterzuarbeiten :)
    Danke dir!

    Kleiner AutoIt Lehrling :)

  • Wieso
    LOGI_LCD_COLOR_HEIGHT * 4
    ?

    Warum "bemalst" du die vierfache Höhe des Bildschirms?
    Braucht nur mehr Rechenleistung und Zeit. Außerdem werden 3/4 davon ja eh nie zu sehen sein.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Ich schätze mal Darter meinte, warum du BYTE verwendest anstatt DWORD (= schnellerer Durchlauf).
    Die einzelnen Kanäle kannst du dann per BitOr immer noch individuell setzen.

    Spoiler anzeigen

    5 Mal editiert, zuletzt von CentuCore (30. Dezember 2013 um 21:59)