Bonjour les zéro ! C'est encore tonton Komega le newbie !
Mon premier post sur ma R.A.T 9 fut un succès et je vous en remercie.
Petite piqûre de rappel, il s'agissait de faire une application (réalisé avec Visual Studio) affichant le niveau de batterie de ma souris sans fil (R.A.T 9 de chez Cyborg) .
Ceci fut donc fait :
Maintenant, je souhaiterai que cette fenêtre soit compatible et apparaisse dans mon petit écran LCD intégré à mon clavier G19 de chez Logitech afin de ne plus être surpris en plein milieu de partie par une souris à 0% de batterie (même si le changement se fait rapidement a haut niveau c'est un handicap, les gamers comprendrons) .
Il y a donc le SDK de chez Logitech pour se faire qui m'indique les bases à réaliser, soit voici le fichier "readme" tel quel :
This package is aimed at PC game developers and other users who are interested in creating applications to run on a Logitech monochrome or
color LCD, such as the ones found on the G15 and G19 keyboards, the G13, or the Z-10 speakers.
It greatly simplifies the task for creating screens by generating bitmaps for you based on what text, progress bars or bitmaps you want
to display. Furthermore it takes care of all the plumbing that is otherwise needed when using the Core SDK's library directly. => très cordial tout ceci mais...
This package contains the following components:
- Doc folder: contains documentation that describes the api and its methods. =>oulalah !
- Libs: lglcd.lib library used to connect to the LCD Manager software running on your machine. The LCD Manager is started automatically after the Logitech GamePanel Software is installed.
- Samples: sample program that demonstrates the use of every method available in the LCD SDK. =>reoulalah !
- Src: full source code for the LCD SDK. =>achevez moi !
1. Add all files contained in "Src" to your project. => OK c'est fait .
2. Add lgLcd.lib contained in "Lib" to your project. => OK c'est fait .
3. See sample program for an example on how to use all of the wrapper's methods. => La je pige pas tout non plus (c'est quoi un wrapper's ? moi je connais que le pti wrap a mac'do )
In "Doc" directory: api.html contains the necessary information for all the available methods. => Et la pour comprendre cet doc faut vraiment être calé en programmation, et comme vous le savez certainement déjà "i'am a big big big newbie !"
Toutes infos seront les bienvenues !
Sachant que mon projet (ou bien mon rêve du moment) serait ceci au final (c'est un simple montage je vous rassure) :
- Edité par komega 13 juin 2013 à 22:07:13
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
"La je pige pas tout non plus (c'est quoi un wrapper's ? moi je connais que le pti wrap a mac'do )"
Un wrapper, c'est un composant qui encapsule plein de trucs pour te faciliter l'usage d'autre chose.
Par exemple : Faire une fenêtre en Win32 (C++), ça nécessite pas mal d'initialisation diverses avant de pouvoir l'afficher. Pour en simplifier la création, le .NET encapsule tout le nécessaire dans la classe Form. Du coup, on peut dire que la classe Form est un wrapper Win32 vers tout ce qui permet de gérer les fenêtres sous Windows.
Dans ce cas là, il est probable que Logitech aie développé le composant logiciel permettant de piloter l'écran du G19 en C(++?...voir autre chose)...Pour en simplifier l'usage dans d'autres technologies (comme le .NET), ils mettent probablement à disposition des wrappers dans les technos cibles pour encapsuler des trucs.
"très cordial tout ceci mais..."
En rapport avec ce qui est dit au dessus, ils te précisent juste que ce SDK te fait tout le boulot et que tu as juste à indiquer quel texte, progress barre ou autre doivent être affichés et le SDK se charge pour toi de générer les images à envoyer au périphérique...chose que tu es censé faire toi même si tu utilise le noyau seul du SDK.
"oulalah"
La doc, tu pourras pas t'en passer. A moins de tomber sur un 0 qui aura fait un projet similaire, personne ne saura te répondre quant aux questions relatives à l'usage de ce SDK....en dehors de la doc bien sûr
Le dossier SRC, tu peux le laisser tomber. Il doit probablement contenir le code source du SDK...Dès fois que t'aies un besoin spécifique qui nécessite de modifier le code du SDK.
Le dossier sample, tu peux t'en passer, mais il reste super utile. T'y trouvera probablement des exemples concret de comment utiliser leur SDK. Par exemple, quand tu démarres avec DirectX 9, tu as un SDK à installer...il contient plein de mini-projet-exemple pour t'aider à comprendre...Ca va du simple "Voici un projet affichant une fenêtre vide accélérée matériellement en utilisant DirectX" (c'est inutile mais ça te montre concrètement comment initialiser DirectX pour commencer à s'en servir) à "Voici un projet-exemple montrant une façon d'implémenter un système d'éclairage différé complexe". Dans le cas présent, il y aura peut-être un projet-exemple montrant comment afficher "Hello World" sur l'écran du clavier...
"La je pige pas trop ni pourquoi ni comment je compile tout ce bazar ?"
Comme dit ci-dessus, tu n'es pas obligé de le faire. Cependant, si tu le fait, c'est un moyen "simple" de vérifier que ton environnement dispose bien de tous les prérequis nécessaires à son bon fonctionnement (Par extension : Si les exemples fonctionnent, tout est ok, vous pouvez commencer à bricoler)
En fait je ne sais pas trop par ou commencer, le SDK ne dispose pas d'une interface IDE tel que visual studio que je pourrai édité facilement . Je doit, si j'ai bien compris me servir de l'interface de visual studio puis par le biais de je ne sais que compilation (en y intégrant les bon élément) à faire apparaître une application compatible G19..."rame, rame, rame..."
- Edité par komega 14 juin 2013 à 14:10:33
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
Déjà il faudrait identifier dans quelle technologie est faite le SDK en question.
Visual Studio peut compiler autre chose que du .NET....Comme du C/C++ classique par exemple (Microsoft édite un des nombreux compilateur C/C++ disponibles : MSVC). Là encore, il faut bien faire la différence...Car il y a le C++ "traditionnel" (celui qui génère du code natif sans rien de plus) et le C++/CLI, qui réutilise des segments bas-niveau du système .NET (comme le garbage-collector par exemple) pour faire un environnement plus ".NET-like" en C++ (mais bon...C'est pas encore du .NET...On va dire plutôt que c'est du super-C++...)
Si le SDK est effectivement en C/C++ classique, il te faudra trouver un moyen de faire la transition entre le SDK indiqué et le .NET.
Pour ça, .NET propose de quoi faire du P/Invoke (opération visant à appeler du code non-managé à partir d'une application managée [en .NET]). Dans les grandes lignes, il faudrait récupérer une version dynamique des binaires du SDK (des .dll) pour pouvoir les charger/appeler depuis une application .NET.
Pour le C++/CLI, je ne sais pas du tout ce qui est possible (j'ai jamais touché au C++/CLI)...Mais vu que les deux sont assez proche, il y a peut-être moyen d'inclure une librairie dynamique de C++/CLI directement dans un programme .NET.
"le SDK ne dispose pas d'une interface IDE tel que visual studio que je pourrai édité facilement"
SDK ne veut pas dire qu'il y a forcément un logiciel fourni avec. Un SDK (Software Development Kit) peut-être très bien n'être composé que de binaires à intégrer dans un autre projet avec un peu de doc et éventuellement des exemples (comme ce qui semble être le cas ici).
Pti up' les z'amis zeros, un tuto pour débutant serait tellement appréciable pour ce clavier qui ne dispose pas de beaucoup d'applet . En VB.NET ou autre quelque chose avec une interface graphique similaire (delphi,etc...) par example .
Au prix qu'il coûte c'est plutôt dommage d'être aussi restreint :)
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
En même temps, ce produit est à champ tellement restreint (fonctionnel uniquement sur clavier logitech Gxx qui coûtent une blinde pour un clavier et vise donc une niche plus que la masse) que je doute que tu puisse trouver quelconque autre support que celui fournit par Logitech.
Tout à fait vrai, en attendant un tuto (qui ne viendra peut être jamais 'snif' je vais essayer de faire différemment en utilisant un "applet" qui se nomme LCDhost que l'on peut customizer un peu comme avec une interface IDE . Reste à savoir comment importer ma .dll dans cette applet mais ca me semble tout a fait réalisable .
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
-Une form (Visual studio par exemple) qui récupère la valeur de charge batterie via la .dll et qui envoie la valeur dans un fichier texte . Donc voici le code (j'ai supprimé les élément superflue ainsi que les menu de réglages personels )
Imports Saitek.Devices
Public Class Form1
Private SaitekDevices_List As Saitek.Devices.DeviceList
Private SaitekDevice_Object As Saitek.Devices.SaitekDevice
Dim SaitekMouse_MouseLink As String
Dim SaitekMouse_ProfilActuel As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' En premier, on crée une nouvelle liste de périphérique dont le GUID ( identifiant unique )
' est égal a celui fourni par la DLL, via TorontoDevice.InterfaceGuid
' Il semble que TorontoDevice designe le modèle de la R.A.T 9.
SaitekDevices_List = New Saitek.Devices.DeviceList(TorontoDevice.InterfaceGuid)
' Ensuite, nous devons forcer notre nouvelle liste à se raffraichir.
' Si ceci n'est pas fait, elle reste totalement vide, et rend le code d'après inopérant.
SaitekDevices_List.EnumerateExistingDevices()
' Nous récupérons ensuite le "LinkName". Il s'agit d'un espèce de chaine de caractère désignant votre souris.
' Nous en aurons besoin pour obtenir une variable contennant notre R.A.T 9.
SaitekMouse_MouseLink = SaitekDevices_List.Devices(0).LinkName
' Et pour finir, nous stockons notre R.A.T 9 dans cette variable, grâce au LinkName.
SaitekDevice_Object = New Saitek.Devices.SaitekDevice(SaitekMouse_MouseLink)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
' Tout ce passage est optionel mais ne sachant pas encore parametrer LCDhost pour jouer des alertes, etc... c'est la form visualstudio qui se chargera de jouer les alertes audio, etc...
'Il faut aussi écréter la valeur de charge batterie lors des veilles car cette dernière = 201 lors des veillle profonde et = valeur actuel+100 lors des veilles dite courte ou simple . Ceci afin de ne jamais dépasser la valeur max de la progress bar qui conduit à une erreur sinon
' Si la souris n'est pas en veille (donc sa valeur <= 100 % )
If SaitekDevice_Object.GetBatteryChargeLevel() <= 100 Then
ProgressBar1.Maximum = 100
' Affichage dans la progressbar1 du niveau de batterie
ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()
'Affichage du pourcentage dans le label1
Label1.Text = ProgressBar1.Value.ToString + "%"
'NotifyIcon Affichage de la charge batterie
NotifyIcon1.Text = "Charge batterie = " + Label1.Text
' Sinon si elle est en veille longue ( valeur charge = 201%)
ElseIf SaitekDevice_Object.GetBatteryChargeLevel() = 201 Then
ProgressBar1.Maximum = 201
Label1.Text = "Veille P"
ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()
' Sinon veille simple ( valeur charge + 100 )
ElseIf SaitekDevice_Object.GetBatteryChargeLevel() > 100 And SaitekDevice_Object.GetBatteryChargeLevel() < 201 Then
ProgressBar1.Maximum = 201
Label1.Text = "Veille"
ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()
End If
' Changement des couleur progressbar et affichage du label en %
'Alerte courte !
If ProgressBar1.Value <= NumericUpDown4.Value And Panel1.Visible = False Then
' le timer d'alerte courte se règle
Timer2.Interval = NumericUpDown3.Value * 1000
ProgressBar1.ForeColor = Color.DarkRed
Label1.ForeColor = Color.DarkRed
'Alerte simple
ElseIf (ProgressBar1.Value <= NumericUpDown1.Value And ProgressBar1.Value > NumericUpDown4.Value) And Panel1.Visible = False Then
' le timer d'alerte simple se règle
Timer2.Interval = NumericUpDown2.Value * 1000
ProgressBar1.ForeColor = Color.OrangeRed
Label1.ForeColor = Color.OrangeRed
Else
ProgressBar1.ForeColor = Color.Lime
Label1.ForeColor = Color.Lime
End If
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
'Jouer alerte batterie basse quand la valeur de charge batterie est a la fois compris entre votre réglage (pour moi une numerique bar qui n'apparait pas dans mon code mais vous pouvez mettre ce que vous voulez) et 1% (pas 0% car peut etre synonime de souris éteinte) et aussi lorsque ma checkbox autorisant l'alarme est coché (optionel)
If (Panel1.Visible = False And ProgressBar1.Value <= NumericUpDown1.Value And CheckBox1.Checked = True And ProgressBar1.Value > 0) Then
My.Computer.Audio.Play("C:\Users\VOTRENOMDUTILISATEUR\documents\visual studio 2010\Projects\WindowsApplication1\WindowsApplication1\Resources\alerte.wav", _
AudioPlayMode.WaitToComplete)
'Stopper alerte batterie basse dans les autres cas
ElseIf ProgressBar1.Value > NumericUpDown1.Value Then
My.Computer.Audio.Stop()
End If
End Sub
Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
'Envoie pour LCDhost dans un fichier texte de la valeur du niveau de la batterie .
' écrase l'ancienne valeur toute les timer4.secondes
My.Computer.FileSystem.WriteAllText("C:\Users\VOTRENOMDUTILISATEUR\Documents\LCDHost\layouts\g19-eos\fichierdestockagedelavaleurbatterie.txt", ProgressBar1.Value , False)
End Sub
End Class
Ensuite vous installez Logitech Game Panel puis LCD host
Vous allez dans Logitech Game Panel et vous cochez la case activant LCDhost (cherchez donc un peu c'est facile)
De la devrait apparaître le layout de base dans l'écran de votre G19
Ensuite vous compilez la petite application dont le code est ci dessus vous la lancez et vérifiez que le fichier texte apparait dans le dossier layout\g19-eos\... et affiche la valeur batterie
Puis dans LCDhost vous créez dans l'onglet layout>classes>static>text(files) que vous clic'n'drag sur votre layout, puis vous cliquez dessus et dans le champ file vous mettez votre fichier texte qui contient la valeur batterie (devrait apparaitre en numérique dans votre text (file) plus qu'a rajouter un jolie % avec un static text)
Ensuite vous glissez un static>color swatch hors du layout et vous cliquez a coté du champ current value le petit bouton (c'est un link) vers layout>votrenom.xml>text(file)>~hiddenText (vous voyez le changement dans Valuefield)
Puis vous glissez dynamic>data Bar dans votre layout (pour avoir une progressbar) et vous linkez le champ data template à Layout>votrenom.xml>color swatch>currentvalue (de la s'affiche la valeur numérique dans le champ)
Cela devrez donc afficher au final la valeur en numérique dans le champ statictext et la progression dans la data bar .
Attention parfois l'application crash, pas de panique fermez LCDhost LogitechGamePanel et votre application VisualBasic puis relancez dans l'ordre le GamePanel, LCDhost et votre appli, tout devrez fonctionner .
Et voilou une jolie Applet pour G19 avec affichage de la batterie de la Cyborg R.A.T 9 !
- Edité par komega 8 juillet 2013 à 11:38:24
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
Bonjour, je déterre ce "tuto". Komega, est ce que tu peux mettre en fichier téléchargeable le fichier de paramétrage complet qui correspond à ta capture d'écran. Je la trouve très intéressante et je viens d'acquérir un clavier G19 et une souris rat9.
Bonjour, j'allais poster un message pour savoir si vous arrivez toujours à utiliser LCD Host, car j'avais moi même un problème lors du lancement du programme (suite à la réinstallation de Windows 10) j'avais ce message : Erreur d'application L'application n'a pas réussi à démarrer correctement (0x000007b).
Mais je viens de trouver la solution et je la donne ici, ça peut faire des heureux En fait il faut installer ce package Microsoft : visual C++ redistributable for visual studio 2010 update 4
Rendons à César, c'est grâce à cette vidéo youtube que j'ai trouvé ce qu'il fallait faire : https://www.youtube.com/watch?v=8cVuKQLVrsU
J'étais vraiment dégouté de ne plus pouvoir utiliser le petit écran LCD de mon logitech G510s. Perso je couple LCD Host avec GPU-Z et c'est top, on peut afficher pleins d'infos exactement où l'on veut sur l'écran. Il est aussi possible d'utiliser d'autres programme de monitoring comme CoreTemp, Fraps, HWinfo, SpeedFan, ...
Si y a besoin d'aide pas problème, je sais qu'il est un peu galère à prendre en main LCD Host.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération