[Code] Logitech G15

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Mir wär der Deal auch recht^^
Hat sich eigentlich bei der G19 auch die Auflösung geändert?
(\/) (°,,,°) (\/)
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Ja, auf 320x240 32bit. Damit kann man schon ordentlich was anfangen, vor allem weil man mehr Platz für Infos hat. Auch ist das Display nun schnell genug um z.B. Videos drauf laufen zu lassen, kann man je nach Applet auch für anderes gut gebrauchen, wo eben ein schneller Bildwechsel benötigt wird.

Inzwischen blick ich nun schon etwas mehr durch, hier und da konnte ich schon einiges einbinden (z.B. die Strukturen), aber das kann wohl noch dauern bis das Ganze auch wirklich funktioniert.

Wie gesagt würde ich den Code gerne so umschreiben, dass man sowohl das G15 bzw. G13 (selbes Display) ebenso wie die G19 in seinem Prog unterstützen kann, was ich nämlich in einem meiner aktuellen kleineren Projekte gerne tun würde. Vielleicht schreib ich den Code auch komplett neu, in fertigem Code rum basteln ist immer so ne Sache.

Und hergeben tue ich die G19 nicht mehr, die hat meine G15 abgelöst und ist noch mal deutlich besser.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

Hoto hat geschrieben: dass man sowohl das G15 bzw. G13 (selbes Display) ebenso wie die G19 in seinem Prog unterstützen kann.
Als Alternative kanns Du auch MyLCD benutzen,dort
werden mehr als nur Logitech-LCD's unterstützt.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Klingt zwar nett, aber ich würde gerne auf zusätzliche externe Libs verzichten.

Leider kam ich noch nicht so recht weiter mit der G19 Unterstützung in PB.
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Da dürftest du eh Zeit genug haben.

Ich würde mal tippen, ausser dir nennt etwa ein anderer User in diesem Board dieses Keyboard sein eigen.

Beim G15 hab ich schon lange überlegt, ob ich bereit bin den Betrag zu berappen, aber das G19 ist meines Erachtens beim Preis jenseits von Gut und Böse.
Immerhin ist es trotz allem Schnickschnack doch "nur" ein Keyboard.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Der Preis wird mit der Zeit auch noch etwas weiter nach unten gehen und für den Preis kriegt man wirklich eine 1A Tastatur, vor allem die Verarbeitung und alles wirkt noch mal ne Klasse besser als bei der G15 und dort war sie schon sehr gut. Ich bereue den Kauf jedenfalls nicht und Jeder der sie sich bisher zugelegt hat auch nicht (auf g15-applets.de zumindest). Und je mehr Software es gibt, die die Tastatur unterstützt, desto interessanter wird sie auch, trotz des Preises (akt. bei ca. 127 Euro).

Für mein Projekt ist jedenfalls das G19 Display ein wichtiger Bestandteil, ich komm nur zur Zeit nicht so recht zum programmieren, langsam aber sicher komme ich aber hinter den Aufbau der Treiber und ich hoffe die G19 bald in PB zum laufen zu kriegen.

Versteht sich von selbst, dass ich dann den Source hier veröffentlichen werde.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: [Code] Logitech G15

Beitrag von Bisonte »

So ... da nun PB4.5 intern die Images mit 24Bit als Minimum ansieht,
funktioniert diese Include nun nicht mehr.

Aber mit einer minimalen Änderung geht es trotzdem :

In der Prozedur G15_MakeImage() muss man kurzerhand die Imagetiefe festsetzen !

Code: Alles auswählen

Procedure G15_MakeImage(Image, *bitmap.lgLcdBitmap160x43x1)
   Protected A.l, x.l, y.l, w.l, h.l, d.l, Result.l, hDC, *bmi.BITMAPINFO, *Buffer
   Protected *H1.BYTE, *H2.LONG

   If IsImage(Image) = 0
      ProcedureReturn #False
   EndIf

   w = ImageWidth(Image)
   h = ImageHeight(Image)
   d = 8 ; ImageDepth(Image) ;###### HIER IST DIE Änderung
   
   If d <> 8 Or w > #LGLCD_BMP_WIDTH Or h > #LGLCD_BMP_HEIGHT
      ProcedureReturn #False
   EndIf
   [...]
EndProcedure
Man muss halt nur selber aufpassen, dass man für das G15 Display nur Schwarz
und Weiss zum malen nehmen darf !

Ok. Ist dirty, aber irgendwie muss ich als Anfänger das Ding doch zum laufen kriegen ;)

By the way ... diese Include funktioniert auch mit der G19 !
(Hat doch zufällig ein G19 Nutzer nicht lesen können und einfach mein Applet
gestartet und es lief... :mrgreen: )

Dort wird dann das Bild "hochskaliert". Ob es allerdings mit anderen Auflösungen und Farben
läuft, kann ich aus Ermangelung einer solchen Tastatur nicht sagen.
Und die 4 Buttons funktionieren ebenfalls ...
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: [Code] Logitech G15

Beitrag von HeX0R »

Ich hab noch die Ur-Fassung gefunden, in der ich noch alle möglichen Bittiefen verarbeitet hatte.
Der Einfachheithalber hatte ich das irgendwann rausgeworfen, konnte ja nicht ahnen, dass es wieder gebraucht wird.

Code: Alles auswählen

Procedure G15_MakeImage(Image, *bitmap.lgLcdBitmap160x43x1, Invers = 0)
	Protected A, x, y, w, h, d, Result, hDC, *bmi.BITMAPINFO, *Buffer
	Protected *HB.BYTE, *HW.WORD, *HL.LONG, *H2.LONG

	If IsImage(Image) = 0
		ProcedureReturn #False
	EndIf

	w = ImageWidth(Image)
	h = ImageHeight(Image)
	d = ImageDepth(Image)

	; 	If w > #LGLCD_BMP_WIDTH Or h > #LGLCD_BMP_HEIGHT
	; 		ProcedureReturn #False
	; 	EndIf
	; fix widths and heights
	If d = 1
		d = 8
	EndIf
	If w > #LGLCD_BMP_WIDTH
		w = #LGLCD_BMP_WIDTH
		h = h * #LGLCD_BMP_WIDTH / ImageWidth(Image)
		If h > #LGLCD_BMP_HEIGHT
			h = #LGLCD_BMP_HEIGHT
			w = w * #LGLCD_BMP_HEIGHT / ImageHeight(Image)
		EndIf
	ElseIf h > #LGLCD_BMP_HEIGHT
		h = #LGLCD_BMP_HEIGHT
		w = w * #LGLCD_BMP_HEIGHT / ImageHeight(Image)
		If w > #LGLCD_BMP_WIDTH
			w = #LGLCD_BMP_WIDTH
			h = h * #LGLCD_BMP_WIDTH / ImageWidth(Image)
		EndIf
	EndIf
	If w <> ImageWidth(Image) Or h <> ImageHeight(Image)
		ResizeImage(Image, w, h)
	EndIf

	If MyG15\Simulate & #LCD_SIMULATE
		CopyImage(Image, MyG15\ImageID)
		ResizeImage(MyG15\ImageID, w*2, h*2)
		If *bitmap = 0
			ProcedureReturn #True
		EndIf
	EndIf

	*bitmap\hdr\Format = #LGLCD_BMP_FORMAT_160x43x1
	hDC                = StartDrawing(ImageOutput(Image))
	If hDC
		*bmi = AllocateMemory(SizeOf(BITMAPINFO) + 255 * SizeOf(RGBQUAD))
		If *bmi
			*bmi\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
			*bmi\bmiheader\biWidth       =  w
			*bmi\bmiheader\biHeight      = - h
			*bmi\bmiheader\biPlanes      = 1
			*bmi\bmiheader\biBitCount    = d
			*bmi\bmiheader\biCompression = #BI_RGB

			*Buffer = AllocateMemory(w * h * (d / 8))
			If *Buffer = 0
				StopDrawing()
			Else
				Result = GetDIBits_(hDC, ImageID(Image), 0, h, *Buffer, *bmi, #DIB_RGB_COLORS)
				StopDrawing()
				If Result
					Select d

						Case 8
							*HB = *Buffer
							For y = 0 To #LGLCD_BMP_HEIGHT - 1
								For x = 0 To #LGLCD_BMP_WIDTH - 1
									If y >= h Or x >= w
										A = 255
									Else
										*H2 = *bmi\bmiColors + (*HB\b & $FF) * SizeOf(RGBQUAD)
										A   = (*H2\l & $FF) + ((*H2\l >> 8) & $FF) + ((*H2\l >> 16) & $FF)
										*HB + 1
									EndIf
									If Invers
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = B / 3
									Else
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = 255 - (A / 3)
									EndIf
								Next x
							Next y

						Case 16
							*HW = *Buffer
							For y = 0 To #LGLCD_BMP_HEIGHT - 1
								For x = 0 To #LGLCD_BMP_WIDTH - 1
									If y >= h Or x >= w
										A = 510
									Else
										A = (*HW\w & $ff) + ((*HW\w >> 8) & $ff)
										*HW + 2
									EndIf
									If Invers
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = A / 2
									Else
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = 255 - (A / 2)
									EndIf
								Next x
							Next y

						Case 24
							*HL = *Buffer
							For y = 0 To #LGLCD_BMP_HEIGHT - 1
								For x = 0 To #LGLCD_BMP_WIDTH - 1
									If y >= h Or x >= w
										A = 765
									Else
										A = (*HL\l & $FF) + ((*HL\l >> 8) & $FF) + ((*HL\L >> 16) & $FF)
										*HL + 3
									EndIf
									If Invers
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = A / 3
									Else
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = 255 - (A / 3)
									EndIf
								Next x
							Next y

						Case 32
							*HL = *Buffer
							For y = 0 To #LGLCD_BMP_HEIGHT - 1
								For x = 0 To #LGLCD_BMP_WIDTH - 1
									If y >= h Or x >= w
										A = 765
									Else
										A = (*HL\l & $FF) + ((*HL\l >> 8) & $FF) + ((*HL\L >> 16) & $FF)
										*HL + 4
									EndIf
									If Invers
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = A / 3
									Else
										*bitmap\pixels[y * #LGLCD_BMP_WIDTH + x] = 255 - (A / 3)
									EndIf
								Next x
							Next y

					EndSelect
				EndIf
				FreeMemory(*Buffer)
			EndIf
			FreeMemory(*bmi)
		Else
			StopDrawing()
		EndIf
	EndIf

	ProcedureReturn Result
EndProcedure
(Gibt ausserdem noch die Möglichkeit das Bild Invers darzustellen)


Edit:
Ich hab das auch mal in das Original eingepflegt.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: [Code] Logitech G15

Beitrag von Bisonte »

Thx G15 Chef ;)
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten