Aktuelle Zeit: 18.12.2018 13:40

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Logitech G19 LCD ansprechen
BeitragVerfasst: 04.12.2009 23:45 
Offline
Benutzeravatar

Registriert: 01.09.2004 22:51
Hi,

hier hat sich nicht zufällig mal Jemand eine Logitech G19 Tastatur zugelegt und sich damit beschäftigt deren LCD Farbdisplay anzusprechen?

Ich hab mich auch schon selbst daran versucht, war aber nicht sehr erfolgreich dabei, da ich bisher noch nie selbst so eine Schnittstelle für eine DLL geschrieben habe und mir doch deutlich der Durchblick gefehlt hat, leider fehlt mir in der Hinsicht doch noch einiges Wissen. Logitech hat zwar dem Treiber ein gutes SDK mit guter Dokumentation beigelegt, aber so wirklich weitergeholfen hat es mir leider nicht. Bevor ich mich hier jetzt noch weiter die Haare raufe (fehlen schon genug ;) ), frag ich dann doch mal lieber hier nach. Vielleicht hat sich ja schon mal inzwischen Jemand damit beschäftigt.

Gruß
Hoto


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 06.12.2009 23:24 
Offline
Benutzeravatar

Registriert: 29.08.2004 09:31
Hier mal ein lauffähiges stück Code das Dir einen teil Deines Desktops anzeigt.
Hab da einiges gekürzt damit es nicht zu gross und besser überschaubar ist.
Ich hoffe Du kommst damit klar.

Code:
#LGLCD_INVALID_CONNECTION = -1
#LGLCD_INVALID_DEVICE = -1
#LGLCDBUTTON_LEFT = $00000100
#LGLCDBUTTON_RIGHT = $00000200
#LGLCDBUTTON_OK = $00000400
#LGLCDBUTTON_CANCEL = $00000800
#LGLCDBUTTON_UP = $00001000
#LGLCDBUTTON_DOWN = $00002000
#LGLCDBUTTON_MENU = $00004000
#LGLCDBUTTON_BUTTON0 = $00000001
#LGLCDBUTTON_BUTTON1 = $00000002
#LGLCDBUTTON_BUTTON2 = $00000004
#LGLCDBUTTON_BUTTON3 = $00000008
#LGLCDBUTTON_BUTTON4 = $00000010
#LGLCDBUTTON_BUTTON5 = $00000020
#LGLCDBUTTON_BUTTON6 = $00000040
#LGLCDBUTTON_BUTTON7 = $00000080

#LGLCD_AUDIO_WHEEL_UP        = $00001000
#LGLCD_AUDIO_WHEEL_DOWN      = $00001010
#LGLCD_AUDIO_SKIP_LAST       = $00001020
#LGLCD_AUDIO_SKIP_NEXT       = $00001040
#LGLCD_AUDIO_STOP            = $00001080
#LGLCD_AUDIO_PLAY            = $00001100
#LGLCD_AUDIO_MUTE            = $00001200

Structure lgLcdDeviceDesc
  Width.l
  Height.l
  Bpp.l
  NumSoftButtons.l
EndStructure

Structure lgLcdDeviceDescEx
  deviceFamilyId.l
  deviceDisplayName.c[#MAX_PATH]
  Width.l
  Height.l
  Bpp.l
  NumSoftButtons.l
  Reserved1.l
  Reserved2.l
EndStructure


#LGLCD_BMP_FORMAT_160x43x1 = $00000001
#LGLCD_BMP_FORMAT_QVGAx32 = $00000003
#LGLCD_BMP_WIDTH = 160
#LGLCD_BMP_HEIGHT = 43
#LGLCD_BMP_BPP = 1
#LGLCD_BW_BMP_WIDTH = 160
#LGLCD_BW_BMP_HEIGHT = 43
#LGLCD_BW_BMP_BPP = 1
#LGLCD_QVGA_BMP_WIDTH = 320
#LGLCD_QVGA_BMP_HEIGHT = 240
#LGLCD_QVGA_BMP_BPP = 4
Structure lgLcdBitmapHeader
  Format.l
EndStructure

Structure lgLcdBitmap160x43x1
  hdr.lgLcdBitmapHeader
  pixels.b[#LGLCD_BMP_WIDTH * #LGLCD_BMP_HEIGHT * #LGLCD_BMP_BPP]
EndStructure

Structure lgLcdBitmapQVGAx32
  hdr.lgLcdBitmapHeader
  pixels.b[#LGLCD_QVGA_BMP_WIDTH * #LGLCD_QVGA_BMP_HEIGHT * #LGLCD_QVGA_BMP_BPP]
EndStructure

#LGLCD_PRIORITY_IDLE_NO_SHOW = 0
#LGLCD_PRIORITY_BACKGROUND = 64
#LGLCD_PRIORITY_NORMAL = 128
#LGLCD_PRIORITY_ALERT = 255
#LGLCD_LCD_FOREGROUND_APP_NO = 0
#LGLCD_LCD_FOREGROUND_APP_YES = 1
#LGLCD_DEVICE_FAMILY_BW_160x43_GAMING = $00000001
#LGLCD_DEVICE_FAMILY_KEYBOARD_G15 = $00000001
#LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO = $00000002
#LGLCD_DEVICE_FAMILY_SPEAKERS_Z10 = $00000002
#LGLCD_DEVICE_FAMILY_JACKBOX = $00000004
#LGLCD_DEVICE_FAMILY_BW_160x43_BASIC = $00000008
#LGLCD_DEVICE_FAMILY_LCDEMULATOR_G15 = $00000008
#LGLCD_DEVICE_FAMILY_RAINBOW = $00000010
#LGLCD_DEVICE_FAMILY_QVGA_BASIC = $00000020
#LGLCD_DEVICE_FAMILY_QVGA_GAMING = $00000040
#LGLCD_DEVICE_FAMILY_GAMEBOARD_G13 = $00000080
#LGLCD_DEVICE_FAMILY_OTHER = $80000000
#LGLCD_DEVICE_FAMILY_ALL_BW_160x43 = #LGLCD_DEVICE_FAMILY_BW_160x43_GAMING| #LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO| #LGLCD_DEVICE_FAMILY_JACKBOX| #LGLCD_DEVICE_FAMILY_BW_160x43_BASIC| #LGLCD_DEVICE_FAMILY_RAINBOW| #LGLCD_DEVICE_FAMILY_GAMEBOARD_G13
#LGLCD_DEVICE_FAMILY_ALL_QVGA = #LGLCD_DEVICE_FAMILY_QVGA_BASIC| #LGLCD_DEVICE_FAMILY_QVGA_GAMING
#LGLCD_DEVICE_FAMILY_ALL = #LGLCD_DEVICE_FAMILY_ALL_BW_160x43| #LGLCD_DEVICE_FAMILY_ALL_QVGA
#LGLCD_APPLET_CAP_BASIC = $00000000
#LGLCD_APPLET_CAP_BW = $00000001
#LGLCD_APPLET_CAP_QVGA = $00000002
#LGLCD_NOTIFICATION_DEVICE_ARRIVAL = $00000001
#LGLCD_NOTIFICATION_DEVICE_REMOVAL = $00000002
#LGLCD_NOTIFICATION_CLOSE_CONNECTION = $00000003
#LGLCD_NOTIFICATION_APPLET_DISABLED = $00000004
#LGLCD_NOTIFICATION_APPLET_ENABLED = $00000005
#LGLCD_NOTIFICATION_TERMINATE_APPLET = $00000006
#LGLCD_DEVICE_BW = $00000001
#LGLCD_DEVICE_QVGA = $00000002



Prototype.l lgLcdOnConfigureCB(Connection.l, *pContext.l)
Prototype.l lgLcdOnNotificationCB(Connection.l, notificationCode.l, notifyParm1.l, notifyParm2.l, notifyParm3.l, notifyParm4.l)
Prototype.l lgLcdOnSoftButtonsCB(device.l, dwButtons.l, *pContext.l)

Structure lgLcdConfigureContext
  configCallback.lgLcdOnConfigureCB
  configContext.l
EndStructure

Structure lgLcdNotificationContext
  notificationCallback.lgLcdOnNotificationCB
  notificationContext.l
EndStructure

Structure lgLcdConnectContext
  *appFriendlyName.l
  isPersistent.l
  isAutostartable.l
  onConfigure.lgLcdConfigureContext
  connection.l
EndStructure


Structure lgLcdConnectContextEx
  *appFriendlyName.l
  isPersistent.l
  isAutostartable.l
  onConfigure.lgLcdConfigureContext
  connection.l
  dwAppletCapabilitiesSupported.l
  dwReserved1.l
  onNotify.lgLcdNotificationContext
EndStructure


Structure lgLcdSoftbuttonsChangedContext
  softbuttonsChangedCallback.lgLcdOnSoftButtonsCB
  softbuttonsChangedContext.l
EndStructure

Structure lgLcdOpenContext
  connection.l
  index.l
  onSoftbuttonsChanged.lgLcdSoftbuttonsChangedContext
  device.l
EndStructure

Structure lgLcdOpenByTypeContext
  connection.l
  deviceType.l
  onSoftbuttonsChanged.lgLcdSoftbuttonsChangedContext
  device.l
EndStructure



Import "lglcd.lib"
  g_lgLcdLibIsInitialized() AS "_g_lgLcdLibIsInitialized"
  g_lgLcdLibLinkedRemoteInterface.l() AS "_g_lgLcdLibLinkedRemoteInterface"
  lgLcdClose(device.l) AS "_lgLcdClose@4"
  CompilerIf #PB_Compiler_Unicode
    lgLcdConnect(*ctx.lgLcdConnectContext) AS "_lgLcdConnectW@4"
    lgLcdConnectEx(*ctx.lgLcdConnectContextEx) AS "_lgLcdConnectExW@4"
    lgLcdEnumerateEx(connection.l, index.l, *description.lgLcdDeviceDescEx) AS "_lgLcdEnumerateExW@12"
   CompilerElse
    lgLcdConnect(*ctx.lgLcdConnectContext) AS "_lgLcdConnectA@4"
    lgLcdConnectEx(*ctx.lgLcdConnectContextEx) AS "_lgLcdConnectExA@4"
    lgLcdEnumerateEx(connection.l, index.l, *description.lgLcdDeviceDescEx) AS "_lgLcdEnumerateExA@12"
   
   CompilerEndIf
 
  lgLcdDeInit() AS "_lgLcdDeInit@0"
  lgLcdDisconnect(connection.l) AS "_lgLcdDisconnect@4"
  lgLcdEnumerate(connection.l, index.l, *description.lgLcdDeviceDesc) AS "_lgLcdEnumerate@12"
  lgLcdInit() AS "_lgLcdInit@0"
  lgLcdOpen(*ctx.lgLcdOpenContext) AS "_lgLcdOpen@4"
  lgLcdOpenByType(*ctx.lgLcdOpenByTypeContext) AS "_lgLcdOpenByType@4"
  lgLcdReadSoftButtons(device.l, *buttons.l) AS "_lgLcdReadSoftButtons@8"
  lgLcdSetAsLCDForegroundApp(device.l, foregroundYesNoFlag.l) AS "_lgLcdSetAsLCDForegroundApp@8"
  lgLcdSetDeviceFamiliesToUse(connection.l,dwDeviceFamiliesSupported.l,dwReserved1.l) AS "_lgLcdSetDeviceFamiliesToUse@12"
  lgLcdUpdateBitmap(device.l, *bitmap.lgLcdBitmapHeader, priority.l) AS "_lgLcdUpdateBitmap@12"
EndImport

Procedure.l LGLCD_SYNC_UPDATE(priority.l)
  ProcedureReturn ($80000000 | priority)
EndProcedure

Procedure.l LGLCD_ASYNC_UPDATE(priority.l)
  ProcedureReturn priority
EndProcedure

Procedure.l LGLCD_SYNC_COMPLETE_WITHIN_FRAME(priority.l)
  ProcedureReturn ($C0000000 | priority)
EndProcedure

Structure KBDLLHOOKSTRUCT
  vkCode.l
  scanCode.l
  flags.l
  time.l
  dwExtraInfo.l
EndStructure

Global connectContext.lgLcdConnectContext
Global openContext.lgLcdOpenByTypeContext ;
Global *bmp.lgLcdBitmapQVGAx32 =AllocateMemory(SizeOf(lgLcdBitmapQVGAx32))

Procedure.l lgLcdOnSoftButtonsCB(device.l, dwButtons.l, pContext.l)
  select dwButtons
      case #LGLCDBUTTON_BUTTON0
      debug "Button0";links
      case #LGLCDBUTTON_BUTTON1
      debug "Button1";rechts
      case #LGLCDBUTTON_BUTTON2
      debug "Button2";hoch
      case #LGLCDBUTTON_BUTTON3
      debug "Button3";runter
      case #LGLCD_AUDIO_SKIP_LAST
      debug "Button_SKIP_LAST"
      case #LGLCD_AUDIO_SKIP_NEXT
      debug "Button_SKIP_NEXT"
      case #LGLCD_AUDIO_STOP
      debug "Button_STOP"
      case #LGLCD_AUDIO_PLAY
      debug "Button_PLAY"
   EndSelect
EndProcedure

Procedure.l G15_KeyboardHook(nCode.l, wParam.l, *p.KBDLLHOOKSTRUCT)
 
  If nCode = #HC_ACTION And wParam = #WM_KEYDOWN
    Select *p\vkCode
         Case 173
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_MUTE, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 174
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_WHEEL_DOWN, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 175
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_WHEEL_UP, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 176
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_SKIP_NEXT, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 177
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_SKIP_LAST, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 178
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_STOP, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
         Case 179
        lgLcdOnSoftButtonsCB(openContext\device,#LGLCD_AUDIO_PLAY, openContext\onSoftbuttonsChanged\softbuttonsChangedContext)
      EndSelect
   EndIf
 
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure

Macro image2lcd(dc,Image)
  Define TemporaryBitmap.BITMAP, TemporaryBitmapInfo.BITMAPINFO
  hBmp = ImageID(Image)
  GetObject_(hBmp, SizeOf(BITMAP), TemporaryBitmap.BITMAP)
  TemporaryBitmapInfo\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
  TemporaryBitmapInfo\bmiHeader\biWidth       = TemporaryBitmap\bmWidth
  TemporaryBitmapInfo\bmiHeader\biHeight      = -TemporaryBitmap\bmHeight
  TemporaryBitmapInfo\bmiHeader\biPlanes      = 1
  TemporaryBitmapInfo\bmiHeader\biBitCount    = 32
  TemporaryBitmapInfo\bmiHeader\biCompression = #BI_RGB
  GetDIBits_(DC, hBmp, 0, TemporaryBitmap\bmHeight, @*bmp\pixels, TemporaryBitmapInfo, #DIB_RGB_COLORS)
  lgLcdUpdateBitmap(openContext\device, @*bmp\hdr, LGLCD_ASYNC_UPDATE(#LGLCD_PRIORITY_NORMAL))
EndMacro

Procedure MakeDesktopSCREENSHOT()
   
  Shared dkx,dky,tdesk,desk,info,fix,quality.l,hCursor.l,piconinfo.ICONINFO
  static xm.d,ym.d,dmx.l,dmy.l,dkwx.l,dkwy.l
  dmx=DesktopMouseX()
  dmy=DesktopMouseY()
 
 
      desk=0
      dkx=DesktopWidth(desk)
      dky=DesktopHeight(desk)
      
    Width=xzoom:Height=yzoom
    bltImage=CreateImage(#PB_Any,320, 240,32)
    hImage = CreateImage(#PB_Any,320, 240,32)
    ImageDC    = StartDrawing(ImageOutput(bltImage)) 
      DeskDC =CreateDC_("DISPLAY", 0, 0, 0)
      ImageDC2 =CreateCompatibleDC_(ImageDC)
      SelectObject_(ImageDC2, ImageID(hImage))
         BitBlt_(ImageDC2,0,0,320,240,DeskDC,dmx-160,dmy-120,#SRCCOPY)
         DrawIcon_(ImageDC2, 160-piconinfo\xHotspot,120-piconinfo\yHotspot,hCursor )
         StretchBlt_(ImageDC,0,0,320,240,ImageDC2,0,0,320,240,#SRCCOPY  );
         DeleteDC_ (ImageDC2)

      image2lcd(ImageDC,bltImage) 
         
      StopDrawing() 
   
    DeleteDC_(DeskDC)
    FreeImage(hImage) 
    FreeImage(bltImage)
EndProcedure


If Not  lgLcdInit()
 
 
  ZeroMemory_(@connectContext, SizeOf(connectContext))
  connectContext\appFriendlyName = @"Zoom"
  connectContext\isAutostartable = #True
  connectContext\isPersistent = #True
  connectContext\onConfigure\configCallback = #NULL
  connectContext\onConfigure\configContext = #Null
  connectContext\connection = #LGLCD_INVALID_CONNECTION
  If Not lgLcdConnect(connectContext)
   
   
    ZeroMemory_(@openContext, SizeOf(openContext));
    openContext\connection = connectContext\connection;
    openContext\deviceType = #LGLCD_DEVICE_QVGA;
    openContext\onSoftbuttonsChanged\softbuttonsChangedCallback = @lgLcdOnSoftButtonsCB()
    global openContext\onSoftbuttonsChanged\softbuttonsChangedContext
    global openContext\device = #LGLCD_INVALID_DEVICE;
    If Not lgLcdOpenByType(openContext);
     
      *bmp\hdr\Format = #LGLCD_BMP_FORMAT_QVGAx32;
      ZeroMemory_(@*bmp\pixels, SizeOf(*bmp\pixels))
         
         ; ab hier kannst du mit deinem eigenen code beginnen
         ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         
         desk=ExamineDesktops()-1
      CreatePopupMenu(0)
         
      MenuBar()
      MenuItem(3, "Ende")
      MenuBar()
     
         fps=60 ; Framerate festlegen
     
      Window_0=OpenWindow(#PB_Any, 0, 0, 160, 30, "Zoom", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
      ShowWindow_(WindowID(Window_0),#SW_HIDE)
      SetWindowsHookEx_(#WH_KEYBOARD_LL, @G15_KeyboardHook(), GetModuleHandle_(0), #Null)
      AddSysTrayIcon(1, WindowID(Window_0), CatchImage(10, ?Screenshoticon))
      SysTrayIconToolTip(1, "G19 Desktop Viewer,use the Softbuttons")
      hCursor=LoadCursor_(0,#IDC_ARROW   )
      GetIconInfo_(hCursor,@piconinfo.ICONINFO)
         
      SetTimer_(WindowID(Window_0),1,1000/fps,@MakeDesktopSCREENSHOT())
         
      Quit=0
     
      Repeat
        EventID = waitWindowEvent(500)
            
        If EventID = #PB_Event_SysTray
          Select EventType()
                  Case #PB_EventType_RightClick,#PB_EventType_LeftClick
              DisplayPopupMenu(0, WindowID(Window_0))
               EndSelect
            EndIf
        If EventID = #PB_Event_Menu
          Select EventMenu()
                  Case 3 ; Quit
              KillTimer_(WindowID(Window_0),1)
              Quit=1
               EndSelect
            EndIf
         Until Quit=1
         
         ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         ; und hier endet dein code
         
      EndIf
   EndIf
EndIf

DataSection
  Screenshoticon:
  IncludeBinary "player.ico"
 
EndDataSection


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 07.12.2009 01:09 
Offline
Benutzeravatar

Registriert: 01.09.2004 22:51
Vielen Dank! Hab den Code jetzt nur mal überflogen, sieht sehr vielversprechend aus, aber mit einigem hätte ich mich selbst wohl ziemlich schwer getan. Werde damit die Tage mal rumspielen. Wenn das wirklich klappt, werd ich wohl die nächste Zeit zu nicht mehr viel Anderem kommen außer zum coden. Dann kann ich endlich an einem Projekt weiter machen. ;)

Edit: mal etwas rumgespielt, läuft soweit alles super bis auf eine Kleinigkeit, weder OK, Menu noch Chancel Button werden erkannt, alle andere Tasten kann ich abfragen. Schon einiges rumgebastelt und auch die neuen (laut lglcd.h Comment) LGLCDBUTTON_LEFT usw. probiert, da erkennt er gleich gar nichts von. Komme einfach nicht dahinter woran das liegen könnte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 07.12.2009 11:15 
Offline
Benutzeravatar

Registriert: 29.08.2004 09:31
Ich habe kein spezielles include sondern ich passe mir das immer so an wie ich es brauche.
Wenn Du dich damit mal befasst hättest ,dann hättest Du Dir das ColorAnd2Mono Sample aus
der SDK geschnappt und nach PB convertiert. /:->
Hier gehen alle ausser Media-Tasten da ohne KeyboardHook.

Code:
#LGLCD_INVALID_CONNECTION = -1
#LGLCD_INVALID_DEVICE = -1
#LGLCDBUTTON_LEFT = $00000100
#LGLCDBUTTON_RIGHT = $00000200
#LGLCDBUTTON_OK = $00000400
#LGLCDBUTTON_CANCEL = $00000800
#LGLCDBUTTON_UP = $00001000
#LGLCDBUTTON_DOWN = $00002000
#LGLCDBUTTON_MENU = $00004000
#LGLCDBUTTON_BUTTON0 = $00000001
#LGLCDBUTTON_BUTTON1 = $00000002
#LGLCDBUTTON_BUTTON2 = $00000004
#LGLCDBUTTON_BUTTON3 = $00000008
#LGLCDBUTTON_BUTTON4 = $00000010
#LGLCDBUTTON_BUTTON5 = $00000020
#LGLCDBUTTON_BUTTON6 = $00000040
#LGLCDBUTTON_BUTTON7 = $00000080

#LGLCD_AUDIO_WHEEL_UP        = $00001000
#LGLCD_AUDIO_WHEEL_DOWN      = $00001010
#LGLCD_AUDIO_SKIP_LAST       = $00001020
#LGLCD_AUDIO_SKIP_NEXT       = $00001040
#LGLCD_AUDIO_STOP            = $00001080
#LGLCD_AUDIO_PLAY            = $00001100
#LGLCD_AUDIO_MUTE            = $00001200

Structure lgLcdDeviceDesc
  Width.l
  Height.l
  Bpp.l
  NumSoftButtons.l
EndStructure

Structure lgLcdDeviceDescEx
  deviceFamilyId.l
  deviceDisplayName.c[#MAX_PATH]
  Width.l
  Height.l
  Bpp.l
  NumSoftButtons.l
  Reserved1.l
  Reserved2.l
EndStructure


#LGLCD_BMP_FORMAT_160x43x1 = $00000001
#LGLCD_BMP_FORMAT_QVGAx32 = $00000003
#LGLCD_BMP_WIDTH = 160
#LGLCD_BMP_HEIGHT = 43
#LGLCD_BMP_BPP = 1
#LGLCD_BW_BMP_WIDTH = 160
#LGLCD_BW_BMP_HEIGHT = 43
#LGLCD_BW_BMP_BPP = 1
#LGLCD_QVGA_BMP_WIDTH = 320
#LGLCD_QVGA_BMP_HEIGHT = 240
#LGLCD_QVGA_BMP_BPP = 4
Structure lgLcdBitmapHeader
  Format.l
EndStructure

Structure lgLcdBitmap160x43x1
  hdr.lgLcdBitmapHeader
  pixels.b[#LGLCD_BMP_WIDTH * #LGLCD_BMP_HEIGHT * #LGLCD_BMP_BPP]
EndStructure

Structure lgLcdBitmapQVGAx32
  hdr.lgLcdBitmapHeader
  pixels.b[#LGLCD_QVGA_BMP_WIDTH * #LGLCD_QVGA_BMP_HEIGHT * #LGLCD_QVGA_BMP_BPP]
EndStructure

#LGLCD_PRIORITY_IDLE_NO_SHOW = 0
#LGLCD_PRIORITY_BACKGROUND = 64
#LGLCD_PRIORITY_NORMAL = 128
#LGLCD_PRIORITY_ALERT = 255
#LGLCD_LCD_FOREGROUND_APP_NO = 0
#LGLCD_LCD_FOREGROUND_APP_YES = 1
#LGLCD_DEVICE_FAMILY_BW_160x43_GAMING = $00000001
#LGLCD_DEVICE_FAMILY_KEYBOARD_G15 = $00000001
#LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO = $00000002
#LGLCD_DEVICE_FAMILY_SPEAKERS_Z10 = $00000002
#LGLCD_DEVICE_FAMILY_JACKBOX = $00000004
#LGLCD_DEVICE_FAMILY_BW_160x43_BASIC = $00000008
#LGLCD_DEVICE_FAMILY_LCDEMULATOR_G15 = $00000008
#LGLCD_DEVICE_FAMILY_RAINBOW = $00000010
#LGLCD_DEVICE_FAMILY_QVGA_BASIC = $00000020
#LGLCD_DEVICE_FAMILY_QVGA_GAMING = $00000040
#LGLCD_DEVICE_FAMILY_GAMEBOARD_G13 = $00000080
#LGLCD_DEVICE_FAMILY_OTHER = $80000000
#LGLCD_DEVICE_FAMILY_ALL_BW_160x43 = #LGLCD_DEVICE_FAMILY_BW_160x43_GAMING| #LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO| #LGLCD_DEVICE_FAMILY_JACKBOX| #LGLCD_DEVICE_FAMILY_BW_160x43_BASIC| #LGLCD_DEVICE_FAMILY_RAINBOW| #LGLCD_DEVICE_FAMILY_GAMEBOARD_G13
#LGLCD_DEVICE_FAMILY_ALL_QVGA = #LGLCD_DEVICE_FAMILY_QVGA_BASIC| #LGLCD_DEVICE_FAMILY_QVGA_GAMING
#LGLCD_DEVICE_FAMILY_ALL = #LGLCD_DEVICE_FAMILY_ALL_BW_160x43| #LGLCD_DEVICE_FAMILY_ALL_QVGA
#LGLCD_APPLET_CAP_BASIC = $00000000
#LGLCD_APPLET_CAP_BW = $00000001
#LGLCD_APPLET_CAP_QVGA = $00000002
#LGLCD_NOTIFICATION_DEVICE_ARRIVAL = $00000001
#LGLCD_NOTIFICATION_DEVICE_REMOVAL = $00000002
#LGLCD_NOTIFICATION_CLOSE_CONNECTION = $00000003
#LGLCD_NOTIFICATION_APPLET_DISABLED = $00000004
#LGLCD_NOTIFICATION_APPLET_ENABLED = $00000005
#LGLCD_NOTIFICATION_TERMINATE_APPLET = $00000006
#LGLCD_DEVICE_BW = $00000001
#LGLCD_DEVICE_QVGA = $00000002



Prototype.l lgLcdOnConfigureCB(Connection.l, *pContext.l)
Prototype.l lgLcdOnNotificationCB(Connection.l, notificationCode.l, notifyParm1.l, notifyParm2.l, notifyParm3.l, notifyParm4.l)
Prototype.l lgLcdOnSoftButtonsCB(device.l, dwButtons.l, *pContext.l)

Structure lgLcdConfigureContext
  configCallback.lgLcdOnConfigureCB
  configContext.l
EndStructure

Structure lgLcdNotificationContext
  notificationCallback.lgLcdOnNotificationCB
  notificationContext.l
EndStructure

Structure lgLcdConnectContext
  *appFriendlyName.l
  isPersistent.l
  isAutostartable.l
  *onConfigure.lgLcdConfigureContext
  connection.l
EndStructure


Structure lgLcdConnectContextEx
  *appFriendlyName.l
  isPersistent.l
  isAutostartable.l
  onConfigure.lgLcdConfigureContext
  connection.l
  dwAppletCapabilitiesSupported.l
  dwReserved1.l
  onNotify.lgLcdNotificationContext
EndStructure


Structure lgLcdSoftbuttonsChangedContext
  softbuttonsChangedCallback.lgLcdOnSoftButtonsCB
  softbuttonsChangedContext.l
EndStructure

Structure lgLcdOpenContext
  connection.l
  index.l
  onSoftbuttonsChanged.lgLcdSoftbuttonsChangedContext
  device.l
EndStructure

Structure lgLcdOpenByTypeContext
  connection.l
  deviceType.l
  onSoftbuttonsChanged.lgLcdSoftbuttonsChangedContext
  device.l
EndStructure



Import "lglcd.lib"
  g_lgLcdLibIsInitialized() AS "_g_lgLcdLibIsInitialized"
  g_lgLcdLibLinkedRemoteInterface.l() AS "_g_lgLcdLibLinkedRemoteInterface"
  lgLcdClose(device.l) AS "_lgLcdClose@4"
  CompilerIf #PB_Compiler_Unicode
    lgLcdConnect(*ctx.lgLcdConnectContext) AS "_lgLcdConnectW@4"
    lgLcdConnectEx(*ctx.lgLcdConnectContextEx) AS "_lgLcdConnectExW@4"
    lgLcdEnumerateEx(connection.l, index.l, *description.lgLcdDeviceDescEx) AS "_lgLcdEnumerateExW@12"
   CompilerElse
    lgLcdConnect(*ctx.lgLcdConnectContext) AS "_lgLcdConnectA@4"
    lgLcdConnectEx(*ctx.lgLcdConnectContextEx) AS "_lgLcdConnectExA@4"
    lgLcdEnumerateEx(connection.l, index.l, *description.lgLcdDeviceDescEx) AS "_lgLcdEnumerateExA@12"
   
   CompilerEndIf
 
  lgLcdDeInit() AS "_lgLcdDeInit@0"
  lgLcdDisconnect(connection.l) AS "_lgLcdDisconnect@4"
  lgLcdEnumerate(connection.l, index.l, *description.lgLcdDeviceDesc) AS "_lgLcdEnumerate@12"
  lgLcdInit() AS "_lgLcdInit@0"
  lgLcdOpen(*ctx.lgLcdOpenContext) AS "_lgLcdOpen@4"
  lgLcdOpenByType(*ctx.lgLcdOpenByTypeContext) AS "_lgLcdOpenByType@4"
  lgLcdReadSoftButtons(device.l, *buttons.l) AS "_lgLcdReadSoftButtons@8"
  lgLcdSetAsLCDForegroundApp(device.l, foregroundYesNoFlag.l) AS "_lgLcdSetAsLCDForegroundApp@8"
  lgLcdSetDeviceFamiliesToUse(connection.l,dwDeviceFamiliesSupported.l,dwReserved1.l) AS "_lgLcdSetDeviceFamiliesToUse@12"
  lgLcdUpdateBitmap(device.l, *bitmap.lgLcdBitmapHeader, priority.l) AS "_lgLcdUpdateBitmap@12"
EndImport

Procedure.l LGLCD_SYNC_UPDATE(priority.l)
  ProcedureReturn ($80000000 | priority)
EndProcedure

Procedure.l LGLCD_ASYNC_UPDATE(priority.l)
  ProcedureReturn priority
EndProcedure

Procedure.l LGLCD_SYNC_COMPLETE_WITHIN_FRAME(priority.l)
  ProcedureReturn ($C0000000 | priority)
EndProcedure

; LCD device state
Structure LCD_DEVICE_STATE
  nDeviceId.l
  dwButtonState.l
EndStructure

; Applet state
Structure APPLET_STATE
  Color.LCD_DEVICE_STATE
  Mono.LCD_DEVICE_STATE
  isEnabled.b
endStructure

; Global Variables:
Global g_hWnd            = #NULL;
Global g_hInst           = #NULL;
Global g_szName.l        = @"ColorAnd2Mono Sample";
Global g_dwTimerId       = $ABBABABE;
Global g_LCDConnectionCtx.lgLcdConnectContextEx
Global g_AppletState.APPLET_STATE


Declare OnLCDNotificationCallback(connection,pContext,notificationCode,notifyParm1,notifyParm2,notifyParm3,notifyParm4)
Declare OnTimerCallback()

; When an LGLCD notification occurs, we transfer it as a message
; so that it is processed by the main thread
; PostMessage messages
#WM_LGLCD_DEVICE_ARRIVAL    =     #WM_APP + 1
#WM_LGLCD_DEVICE_REMOVAL    =     #WM_APP + 2
#WM_LGLCD_CONNECTION_CLOSED =     #WM_APP + 3
#WM_LGLCD_APPLET_ENABLED    =     #WM_APP + 4
#WM_LGLCD_BUTTON_EVENT      =     #WM_APP + 5


; Forward declarations of functions included in this code module:
; DWORD CALLBACK      OnLCDButtonsCallback(int device, DWORD dwButtons, const PVOID pContext);
; DWORD CALLBACK      OnLCDNotificationCallback(int connection,
; const PVOID pContext,
; DWORD notificationCode,
; DWORD notifyParm1,
; DWORD notifyParm2,
; DWORD notifyParm3,
; DWORD notifyParm4);


;************************************************************************
;
; InitializeLCD
;
; This is where we will do the main LCD library initialization
;************************************************************************

Procedure.l  InitializeLCD()
  ret = 0;
 
  ; The first thing to do is initialize the library using lgLcdInit
  ; This requires that the Logitech GamePanel software is installed
  ; on the target
  ret = lgLcdInit();
  if ret <> #ERROR_SUCCESS
   
    ; ERROR. Most likely the GamePanel software is not installed
    Procedurereturn #FALSE;
   endif
 
  ; Inititalize the applet state
  ZeroMemory_(@g_AppletState, sizeof(g_AppletState));
  g_AppletState\isEnabled = #TRUE;
  g_AppletState\Color\nDeviceId = #LGLCD_INVALID_DEVICE;
  g_AppletState\Mono\nDeviceId = #LGLCD_INVALID_DEVICE;
 
  ; Initialize our connection state
  ZeroMemory_(@g_LCDConnectionCtx, sizeof(g_LCDConnectionCtx));
  ; appFriendlyName: Display name of the applet
  g_LCDConnectionCtx\appFriendlyName = g_szName;
  ; isAutostartable: Set to TRUE if you want your applet to start when LCD Manager starts
  g_LCDConnectionCtx\isAutostartable = #FALSE;         
  ; dwAppletCapabilitiesSupported: We support color and monochrome
  g_LCDConnectionCtx\dwAppletCapabilitiesSupported = (#LGLCD_APPLET_CAP_BW|#LGLCD_APPLET_CAP_QVGA);
  ; connection: Initialize with LGLCD_INVALID_CONNECTION
  g_LCDConnectionCtx\connection = #LGLCD_INVALID_CONNECTION;
  ; onNotify: Set our internal callback
  g_LCDConnectionCtx\onNotify\notificationCallback = @OnLCDNotificationCallback()
  g_LCDConnectionCtx\onNotify\notificationContext = #NULL;
 
  ; Start our loop
  g_dwTimerId = SetTimer_(g_hWnd, g_dwTimerId, 100, @OnTimerCallback());
 
  Procedurereturn #TRUE;
EndProcedure


;************************************************************************
;
; OnTimerCallback
;
; Where the display output happens. We will:
;
; - Check if we need to attempt connect with the LCD Manager
; - If we have a color device, output data to that color device
; - If we have a monochrome device, output data to that monochrome device
;************************************************************************

Procedure OnTimerCallback()
 
  ; Check if we have an invalid connection. If so, attempt a connection
  if g_LCDConnectionCtx\connection=#LGLCD_INVALID_CONNECTION
   
    ; attempt to connect
    if  lgLcdConnectEx(@g_LCDConnectionCtx) <> #ERROR_SUCCESS
      Procedurereturn;
      else
      Debug"Connected to LCD Manager"
      endif
   endif
 
  ; If the applet is disabled, then we don't need to bother displaying
  ; anything
  if g_AppletState\isEnabled= #FALSE
    Procedurereturn;
   endif
 
  ; Check if we have a color device
  if  g_AppletState\Color\nDeviceId <> #LGLCD_INVALID_DEVICE
    ColorFrame.lgLcdBitmapQVGAx32
    ; draw color
      
    ; Use the tick count to determine a color
    ; Colors are in the RGBA format
    ; Let's alternate between red, green, and blue
    ColorFrame\hdr\Format = #LGLCD_BMP_FORMAT_QVGAx32;
   
    static nCurColor = 0;
   
    Dim colors(2)
    colors(0)=#red     ; Red
    colors(1)=#green     ; Green
    colors(2)=#blue      ; Blue
      
      for  i = 0 to (#LGLCD_QVGA_BMP_WIDTH * #LGLCD_QVGA_BMP_HEIGHT)-1
      *pPixel.long = @ColorFrame\pixels[i*#LGLCD_QVGA_BMP_BPP];
      *pPixel\l =  i*(nCurColor*nCurColor+i*i) % #White
     
      nCurColor+1
      next
      
    lgLcdUpdateBitmap(g_AppletState\Color\nDeviceId, @ColorFrame\hdr,LGLCD_ASYNC_UPDATE(#LGLCD_PRIORITY_NORMAL));
   endif
 
  ; Check if we have a BW device
  if  g_AppletState\Mono\nDeviceId <> #LGLCD_INVALID_DEVICE
   
    ; draw monochrome
    MonoFrame.lgLcdBitmap160x43x1
   
    ; Draw (somewhat) random bytes
    ; Note: >= 128 is ON and < 128 is OFF
    MonoFrame\hdr\Format = #LGLCD_BMP_FORMAT_160x43x1;
    *bPixel.byte = MonoFrame\pixels;
    for  i = 0 to (#LGLCD_BW_BMP_WIDTH * #LGLCD_BW_BMP_HEIGHT)-1
     
      *bPixel\b+i = random(1);
      next
   
    lgLcdUpdateBitmap(g_AppletState\Mono\nDeviceId, @MonoFrame\hdr,LGLCD_ASYNC_UPDATE(#LGLCD_PRIORITY_NORMAL));
   endif
EndProcedure


;************************************************************************
;
; HandleButtonPress
;
;************************************************************************

Procedure HandleButtonPress()
 
  Debug "BUTTON EVENT"
 
  ; Handle the monochrome button state
  if (g_AppletState\Mono\dwButtonState)
   
    Debug"  MONOCHROME: "
    if (g_AppletState\Mono\dwButtonState & #LGLCDBUTTON_BUTTON0)
     
      Debug"BUTTON0 "
      endif
    if (g_AppletState\Mono\dwButtonState & #LGLCDBUTTON_BUTTON1)
     
      Debug"BUTTON1 "
      endif
    if (g_AppletState\Mono\dwButtonState & #LGLCDBUTTON_BUTTON2)
     
      Debug"BUTTON2 "
      endif
    if (g_AppletState\Mono\dwButtonState & #LGLCDBUTTON_BUTTON3)
     
      Debug"BUTTON3 "
      endif
   endif
 
  ; Handle the color button state
  if (g_AppletState\Color\dwButtonState)
   
    Debug"  COLOR: "
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_LEFT)
     
      Debug"LGLCDBUTTON_LEFT "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_RIGHT)
     
      Debug"LGLCDBUTTON_RIGHT "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_UP)
     
      Debug"LGLCDBUTTON_UP "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_DOWN)
     
      Debug"LGLCDBUTTON_DOWN "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_OK)
     
      Debug"LGLCDBUTTON_OK "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_MENU)
     
      Debug"LGLCDBUTTON_MENU "
      endif
    if (g_AppletState\Color\dwButtonState & #LGLCDBUTTON_CANCEL)
     
      Debug"LGLCDBUTTON_CANCEL "
      endif
   endif
EndProcedure



;************************************************************************
;
; OnLCDNotificationCallback
;
; IMPORTANT: This is called from a different thread than the main
; thread. You must take care to be thread-safe and return fast
;
; All we do here is pass on the notification to the main thread
;************************************************************************

Procedure OnLCDNotificationCallback(connection,pContext,notificationCode,notifyParm1,notifyParm2,notifyParm3,notifyParm4)
 
  Debug"OnLCDNotificationCallback"
  select notificationCode
     
      case #LGLCD_NOTIFICATION_DEVICE_ARRIVAL:
      PostMessage_(g_hWnd, #WM_LGLCD_DEVICE_ARRIVAL, notifyParm1, 0);
     
      case #LGLCD_NOTIFICATION_DEVICE_REMOVAL:
      PostMessage_(g_hWnd, #WM_LGLCD_DEVICE_REMOVAL, notifyParm1, 0);
     
      case #LGLCD_NOTIFICATION_APPLET_ENABLED:
      case #LGLCD_NOTIFICATION_APPLET_DISABLED:
      PostMessage_(g_hWnd, #WM_LGLCD_APPLET_ENABLED, notificationCode, 0);
     
      case #LGLCD_NOTIFICATION_CLOSE_CONNECTION:
      PostMessage_(g_hWnd, #WM_LGLCD_CONNECTION_CLOSED, notificationCode, 0);
     
   EndSelect
 
  Procedurereturn 1;
EndProcedure


;************************************************************************
;
; OnLCDButtonsCallback
;
; IMPORTANT: This is called from a different thread than the main
; thread. You must take care to be thread-safe and return fast
;************************************************************************

Procedure OnLCDButtonsCallback(device, dwButtons, pContext)
 
  PostMessage_(g_hWnd, #WM_LGLCD_BUTTON_EVENT, dwButtons, device);
  Procedurereturn 0;
EndProcedure


;************************************************************************
;
; WndProc
;
;************************************************************************

Procedure WndProc(hWnd, message, wParam, lParam)
 
  select message
     
         ; case #WM_TIMER:
      ; OnTimerCallback();
     
      case #WM_DESTROY:
      PostQuitMessage_(0);
     
         
      case #WM_LGLCD_DEVICE_ARRIVAL:
      ; Check the capability of the new device, and then open up the
      ; appropriate device
      ; You will only get ONE arrival per device capability
      ; So, if you have 2 monochrome devices, you will still only get
      ; 1 arrival, but writing to that one device will multicast the
      ; the output to both devices
     
      OpenCtx.lgLcdOpenByTypeContext;
      ZeroMemory_(@OpenCtx, sizeof(OpenCtx));
     
      nDeviceType = wParam;
     
      ;The connection class has already filled in the connection index.
      ;OpenCtx.connection = doesn't matter
      OpenCtx\device = #LGLCD_INVALID_DEVICE;
      OpenCtx\deviceType = nDeviceType;
      OpenCtx\connection = g_LCDConnectionCtx\connection;
      OpenCtx\onSoftbuttonsChanged\softbuttonsChangedCallback = @OnLCDButtonsCallback()
      OpenCtx\onSoftbuttonsChanged\softbuttonsChangedContext = #NULL;
      if lgLcdOpenByType(@OpenCtx)= #ERROR_SUCCESS
       
        if (wParam = #LGLCD_DEVICE_BW)
         
          Debug"Monochrome device was found"
          g_AppletState\Mono\nDeviceId = OpenCtx\device;
         
            elseif (wParam = #LGLCD_DEVICE_QVGA)
         
          Debug"Color device was found"
          g_AppletState\Color\nDeviceId = OpenCtx\device;
            endif
         endif
     
      case #WM_LGLCD_DEVICE_REMOVAL:
      ; It's important that the devices are closed upon notification
      ; Note that the notification is NOT the device ID, but rather
      ; the device capability
      if ( wParam = #LGLCD_DEVICE_BW)
       
        Debug"Monochrome device was removed"
        lgLcdClose(g_AppletState\Mono\nDeviceId );
        g_AppletState\Mono\nDeviceId = #LGLCD_INVALID_DEVICE;
       
         elseif (wParam = #LGLCD_DEVICE_QVGA)
       
        Debug"Color device was removed"
        lgLcdClose(g_AppletState\Color\nDeviceId );
        g_AppletState\Color\nDeviceId = #LGLCD_INVALID_DEVICE;
         endif
     
      case #WM_LGLCD_APPLET_ENABLED:
      ; One good optimization is to disable LCD rendering if the applet
      ; is disabled
      if wParam=#LGLCD_NOTIFICATION_APPLET_ENABLED
            g_AppletState\isEnabled =  #TRUE
         else
            g_AppletState\isEnabled = #FALSE 
         endif
      if (g_AppletState\isEnabled)
       
        Debug"Applet was enabled"
       
         else
       
        Debug"Applet was disabled"
         endif
     
      case #WM_LGLCD_CONNECTION_CLOSED:
      ; Dereference the connection handle, and close all the open devices
      Debug"LCD Manager has closed its connection"
      if not g_LCDConnectionCtx\connection=#LGLCD_INVALID_CONNECTION
       
        lgLcdDisconnect(g_LCDConnectionCtx\connection);
        g_LCDConnectionCtx\connection = #LGLCD_INVALID_CONNECTION;
         endif
     
      if not g_AppletState\Mono\nDeviceId=#LGLCD_INVALID_DEVICE
       
        lgLcdClose(g_AppletState\Mono\nDeviceId);
        g_AppletState\Mono\nDeviceId = #LGLCD_INVALID_DEVICE;
         endif
     
      if not g_AppletState\Color\nDeviceId=#LGLCD_INVALID_DEVICE
       
        lgLcdClose(g_AppletState\Color\nDeviceId);
        g_AppletState\Color\nDeviceId = #LGLCD_INVALID_DEVICE;
         endif
     
      case #WM_LGLCD_BUTTON_EVENT:
      ; Handling of the button state is left as an exercice t
      if (lParam = g_AppletState\Mono\nDeviceId)
       
        g_AppletState\Mono\dwButtonState = wParam;
         endif
     
      if (lParam = g_AppletState\Color\nDeviceId)
       
        g_AppletState\Color\dwButtonState = wParam;
         endif
      HandleButtonPress();
     
      default:
      Procedurereturn DefWindowProc_(hWnd, message, wParam, lParam);
   endselect
  Procedurereturn 0;
EndProcedure


;************************************************************************
;
; InitInstance
;
;************************************************************************


Procedure InitInstance()
 
  Window_0=OpenWindow(#PB_Any, 0, 0, 330, 264, ":)")
  g_hWnd = WindowID(Window_0)
 
  if not g_hWnd
   
    Procedurereturn #FALSE;
   endif
  SetWindowCallback(@wndproc())
  Procedurereturn #TRUE;
endProcedure
;************************************************************************
;
; WinMain
;
;************************************************************************

Procedure _tWinMain()
 
 
  ; Perform application initialization:
  if not InitInstance ()
   
    Procedurereturn #FALSE;
   endif
 
  ; seed
  RandomSeed( GetTickCount_() );
 
  ; Initialize the LCD portion
  initializeLCD();
 
  ; Main message loop:
  msg.MSG
  result = GetMessage_(@msg, #Null, #Null, #Null)
  While result <> 0
    If result = -1 ; GetMessage failed
      MessageRequester("Error", "Failure in GetMessage Loop", #MB_ICONERROR)
      Break
      EndIf
    TranslateMessage_(@msg);
    DispatchMessage_(@msg);
    result = GetMessage_(@msg.MSG, #Null, #Null, #Null) 
   wend
 
  ; De-initialize the library
  lgLcdDeInit();
 
  Procedurereturn  msg\wParam;
endProcedure

_tWinMain()



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 28.12.2009 20:24 
Offline
Benutzeravatar

Registriert: 01.09.2004 22:51
Mal noch ein danke für den Code, funktioniert sehr gut.

Wenn ich C könnte, hätte ich das selbst probiert. Ich hatte mich vor Monaten schon mal vergeblich daran versucht. Selbst bei dem PB Code hier jetzt hab ich eine Weile gebraucht um dahinter zu steigen wie er genau funktioniert. Ich bin leider auch nicht mehr der jüngste und daher so langsam aber sich auch etwas Begriffsstutziger als früher, zumal ich halt das Ganze hier nur rein als Hobby mache und deshalb auch mal ein paar Monate gar nichts programmiere und so immer wieder etwas verlerne. Also nichts für ungut. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 29.12.2009 14:34 
Offline
Benutzeravatar

Registriert: 29.08.2004 09:31
Hoto hat geschrieben:
Wenn ich C könnte, hätte ich das selbst probiert.

Die Ausrede zählt nicht,ich habe mit C auch nix am Hut. :D
Hoto hat geschrieben:
Ich bin leider auch nicht mehr der jüngste und daher so langsam aber sich auch etwas Begriffsstutziger als früher, zumal ich halt das Ganze hier nur rein als Hobby mache und deshalb auch mal ein paar Monate gar nichts programmiere und so immer wieder etwas verlerne. Also nichts für ungut. ;)

Mal schauen wie alt Du bist.......mhh nee haste nicht angegeben also schätze ich mal u13 ? :lol:
Der Rest trifft für mich auch zu.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 12.10.2010 21:27 
Offline

Registriert: 01.11.2007 11:10
Wohnort: Schwelm
Hallo,

das Thema ist zwar schon älter, aber vielleicht kann man es "wiederbeleben"... Hab das Beispiel mit dem Bildschirmausschnitt zu einer Lupe umgebaut und geht in der IDE ohne Probleme. Die App startet und setzt sich in den Vordergrund auf den Display. Sobald ich aber ne exe raus mache, muss ich schon Glück haben wenn sie startet. Sehr wackelig eben. Das andere Beispiel hab ich eins zu eins ausprobiert... Selbe Reaktion. Naja... das ist eigentlich nicht die Frage, sondern wie ich die Apps dazu bringe sich automatisch in den Vorderund zu setzten ? Hat da jemand ne Ahnung ? Achja, wenn jetzt jemand sagt das geht nicht... guckst du hier => LCDHost... Vielen Dank !!!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 16.10.2010 17:44 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Joebo2572 hat geschrieben:
[...]
Achja, wenn jetzt jemand sagt das geht nicht... guckst du hier => LCDHost... Vielen Dank !!!!


Wie ... guckst du hier? Wird das mal ein Link, wenn es groß ist?
Aber, um deine Frage zu beantworten, um Apps in den Vordergrund zu drängeln gibt es das Flag
#LGLCD_LCD_FOREGROUND_APP_YES.
Allerdings habe ich vergessen, wo man das setzen muss, ... ach nee, das war ja => hier.


( :lol: )

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 25.10.2010 23:40 
Offline
Benutzeravatar

Registriert: 29.08.2004 09:31
HeX0R hat geschrieben:
... ach nee, das war ja => hier.

:lol: Der war gut.
Joebo2572 hat geschrieben:
Hab das Beispiel mit dem Bildschirmausschnitt zu einer Lupe umgebaut..

Darfst gerne MEINE benutzen. :wink:
Joebo2572 hat geschrieben:
Die App startet und setzt sich in den Vordergrund auf den Display.

Macht es nur wenn keine anderen laufen,wenn ich das richtig beobachtet habe.
Ich fände es nicht sehr prickelnd wenn sich ene App ständig in der Fordergrund drängelt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Logitech G19 LCD ansprechen
BeitragVerfasst: 30.10.2010 19:15 
Offline

Registriert: 01.11.2007 11:10
Wohnort: Schwelm
Sorry, wollte den Link für LCDHost eigentlich reinkopieren, hat wohl nicht geklappt. Man hätte auch googeln können... Konnte ja nicht ahnen das man hier so angep...t reagiert . Also hier ist der Link: http://www.linkdata.se/software/lcdhost . Das Lustige ist, dass es in Purebasic die Anwendung sofort auf dem Display erscheint, wenn ich sie compiliert habe muss ich sie erst auswählen und starten. Wäre toll wenn jemand eine Lösung hat.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye