Das mit dem Display klappt auch schon ganz gut, nur bei der Fernbedienung gibts Probleme.
Bin gerade an der Lautstärke und Versuche die Lautstärke von Winamp zu verändern. Ich habe den IOW 24 und benutze Visual C++ MFC.
Um das Infrarot Modul zu aktivieren starte ich einen THread, welcher immer den Read aufruft. Poste hier mal den relevanten Code.
Das Problem ist nun, das es zwar generell funktioniert, aber er scheinbar zuviel abarbeiten muss oder wie auch immer, auf jedenfall, wenn ich den knopf gedrückt halte für die lautstärke, dann kommt er öftermal ins stocken.
Vielleicht hat ja jemand ne Idee was zu tun ist.
Vielen Dank im vorraus.
Hier nun die Funktion die durch den Thread aufgerufen wird, der Thread hat übrigens die höchste Priorität.
Wenn er diese nicht hat, stockt er nochmehr...
Code: Select all
void CIOWProjectDlg::IRSteuerung()
{
int IRCode, IRGeraet;
while(TRUE)
{
IOWKIT_HANDLE m_ioHandle;
m_ioHandle = IowKitOpenDevice();
IOWKIT_SPECIAL_REPORT rep; //Variable für SpecialMode erstellen
rep.ReportID = 0x0c; //ReportID 12 für IR
rep.Bytes[0] = 0x01; // IR einschalten
IOWKIT_SPECIAL_REPORT repnew; //Variable zum ERgebnis auslesen des IR
//' zum IOW schreiben mit numpipe =1 für Specialmode
IowKitWrite(m_ioHandle, 1,
(PCHAR) &rep, IOWKIT_SPECIAL_REPORT_SIZE);
//' vom IOW lesen mit numpipe =1 für Specialmode und 8-Bytes lang
IowKitRead(m_ioHandle, 1,
(PCHAR) &repnew, IOWKIT_SPECIAL_REPORT_SIZE);
//Einschalten des Displays laut SDK
//IR Signal ausweiter, erstmal aufspaltung, was ist es für eine Funktion
IRCode = (int) repnew.Bytes[0];
IRGeraet = repnew.Bytes[1];
IRGeraet = (IRGeraet & 0x1f);
//WinampVolume(WINAMP_VOLUMEDOWN);
switch (IRGeraet)
{
case 20:
switch (IRCode)
{
case 55:
VolumeWinamp(WINAMP_VOLUMEDOWN);
break;
case 57:
VolumeWinamp(WINAMP_VOLUMEUP);
break;
}
break;
case 16:
switch (IRCode)
{
case 16:
VolumeSystem();
break;
case 17:
VolumeSystem();
break;
}
break;
}
}
}
void CIOWProjectDlg::VolumeWinamp(int WABefehl)
{
int i=0, intWinampLautst,intFullVol;
HWND hwndWinamp = ::FindWindow("Winamp v1.x", NULL);
for (i;i<3;i++) //GEschwindigkeit des Reglers über die Forschleife einstellen
{
::SendMessage(hwndWinamp, WM_COMMAND,WABefehl,0);
}
KillTimer(TIMERID_LAUFTEXT);
KillTimer(TIMERID_ZEITAKT);
ClearLCD();
//Wie Teilt man die Lautstärke jetzt auf die 16 übrigbleibenden Kästchen
intWinampLautst = ::SendMessage(hwndWinamp,WM_WA_IPC,-666,IPC_SETVOLUME); //Ergebnis mit eine int Zahl von 0 bis 255
intFullVol = (intWinampLautst+1) / 16;
//Diese Zahl dann durch 16 für jedes Käschen und bei den einzelnen Kästchen nochmal durch 5
LCDWriteEinzeilig(1, 0, "Lautstärke Winamp");
LCDWriteEinzeilig(3, 0, "- "); //Beschreibt die ersten 2 Zeichen der Zeile
for (i=2; i <= intFullVol+1;i++)
{
LCDWriteEinzeilig(3, i, '\xD6',0); //Die 0 als Optionaler Parameter sorgt dafür, das Sonderzeichen nicht ersetzt werden
}
for (i;i<=18;i++)
{
LCDWriteEinzeilig(3, i, '\x20',0); //Die 0 als Optionaler Parameter sorgt dafür, das Sonderzeichen nicht ersetzt werden
}
LCDWriteEinzeilig(3, 18, " +");
KillTimer(TIMERID_BACKSCREEN);
SetTimer(TIMERID_BACKSCREEN, 1000, NULL); //startet das Timerereignis zum scrollen des Texts
}