Hallo Leute,
ich stecke gerade etwas fest.
Ich versuche meine Kommunikation mit dem XMEGA-USBSmart auf Fehler abzufangen und entsprechend zu reagieren.
Ich möchte das mein Board vom Windows-Programm beim einstecken automatisch erkannt wird, den Treiber aktiviert und ein Statustelegramm abfordert..
Das klappt alles auch ganz gut mit:
Egal, ob ich den XMEGA Resete, Abschalte, aus- und wieder einstecke. Das
kann das Windows-Programm ohne Probleme ab....ABER
Gerade eben ist mir aufgefallen, das diese Routine bei JEDEM DeviceChange einen neuen Connect meines XMEGAs ausführt
Das will ich aber gar nicht
Hat Jemand eine Idee, wie ich das "message WM_DEVICECHANGE" nur auf meine PID/VID beziehen kann?
Gruß
Thorsten
ich stecke gerade etwas fest.
Ich versuche meine Kommunikation mit dem XMEGA-USBSmart auf Fehler abzufangen und entsprechend zu reagieren.
Ich möchte das mein Board vom Windows-Programm beim einstecken automatisch erkannt wird, den Treiber aktiviert und ein Statustelegramm abfordert..
Das klappt alles auch ganz gut mit:
Code
public { Public declarations }
procedure WMDeviceChange(var Msg:TMessage); message WM_DEVICECHANGE;
....
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var i:integer;
Dev:TnrUsbDevice;
begin
nrUSB1.Update;
Screen.Cursor := crHourGlass;
try
i := nrUsb1.DeviceIndex;
nrUsb1.WMDeviceChange(Msg);
nrUsb1.DeviceIndex := i;
if (i = -1) AND (nrUsb1.DeviceCount >= 1) then
begin
nrUsb1.DeviceIndex:= nrUsb1.DeviceCount -1;
end
else
begin
nrUSB1.Active := False;
nrUSBPipePair1.Active := False;
end;
Screen.Cursor := crDefault;
UpdateControls; // hier wird der Treiber auf Aktiv gesetzt und das 1. Statuspaket abgeholt
except
nrUSB1.Active := False;
nrUSBPipePair1.Active := False;
Screen.Cursor := crDefault;
end;
end;
procedure WMDeviceChange(var Msg:TMessage); message WM_DEVICECHANGE;
....
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var i:integer;
Dev:TnrUsbDevice;
begin
nrUSB1.Update;
Screen.Cursor := crHourGlass;
try
i := nrUsb1.DeviceIndex;
nrUsb1.WMDeviceChange(Msg);
nrUsb1.DeviceIndex := i;
if (i = -1) AND (nrUsb1.DeviceCount >= 1) then
begin
nrUsb1.DeviceIndex:= nrUsb1.DeviceCount -1;
end
else
begin
nrUSB1.Active := False;
nrUSBPipePair1.Active := False;
end;
Screen.Cursor := crDefault;
UpdateControls; // hier wird der Treiber auf Aktiv gesetzt und das 1. Statuspaket abgeholt
except
nrUSB1.Active := False;
nrUSBPipePair1.Active := False;
Screen.Cursor := crDefault;
end;
end;
Egal, ob ich den XMEGA Resete, Abschalte, aus- und wieder einstecke. Das
kann das Windows-Programm ohne Probleme ab....ABER
Gerade eben ist mir aufgefallen, das diese Routine bei JEDEM DeviceChange einen neuen Connect meines XMEGAs ausführt

Das will ich aber gar nicht

Hat Jemand eine Idee, wie ich das "message WM_DEVICECHANGE" nur auf meine PID/VID beziehen kann?
Gruß
Thorsten