|
Autor |
Nachricht |
fuchs
Developer
Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland
|
|
Hi,
einige von euch haben ja schon erfahrung mit der ansteuerung eines handys via bluetooth mit virtuellem comport.
folgendes problem tritt auf, wenn entweder das handy nicht eingeschaltet ist, oder der bluetooth dongle nicht gesteckt ist.
wenn ich den comport öffne und daten raussende, dann reagiert meine anwendung nicht mehr.
aus diesem zustand kommt man dann nur raus, wenn man entweder das programm über den taskmanager beendet oder die bluetoothverbindung von hand herstellt.
falls ich in der anwendung den port nur öffne, aber keine daten raussende, dann gibt es keine probleme. erst beim ersten senden auf den comport.
ich denke, es müßte irgendwie möglich sein, die comport verbindung abzufragen, bevor man daten raussendet.
wie habt ihr das gelöst?
danke,
fuchs
|
|
|
|
Zuletzt bearbeitet von fuchs am Do 23 Jun, 2005 00:11, insgesamt einmal bearbeitet
|
|
|
|
|
Joshua
Frischfleisch
Anmeldung: 20.06.2004
Beiträge: 8
|
|
Hallo Fuchs,
ich könnte hier eine Lösung in klassischem c++ mit einem schuss MFC für die Win32 API anbieten.
Die Methode checkt einfach ob ein logischer Comport "ansprechbar" ist oder nicht. Ob das jetzt ein virtueller BT/USB/IRDA Com-Port ist oder ein physikalischer ist egal.
BOOL Comport::CheckCOMPort( int portnumber)
{
HANDLE hPort;
CString sPortName;
// get phys. port name from configuration
sPortName.Format ("\\\\.\\COM%d",portnumber);
// a valid portname ?
if (sPortName.Find ("COM") >= 0)
{
// open port to check, if it is available
if((hPort = CreateFile( sPortName,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0)) != INVALID_HANDLE_VALUE)
{
CloseHandle(hPort);
return TRUE;
}
else return FALSE;
}
return FALSE;
}
Leider ist die Formatierung etwas durcheinandergeraten aber ich denke du kommst damit zurecht.
Da mich generell dein Ansatz ein cell phone in Cpos einzubinden sehr interessiert hier vielleicht noch eine kleine Anregung um das Feature für möglichst viele Telefone zur Verfügung zu stellen:
Ein dicker Brocken ist sicherlich das Auslesen des Telefonbuches
Bei Siemens Geräten funktioniert es zwar prinzipiell aber ich bekomme mit der aktuellen Cpos beta nur 3 Nummern von der SIM-Karte. Das interne Adressbuch wo ich die meisten nummern abgespeichert habe geht gar nicht
Lösung: du machst in die Phone.ini ein mini telefonbuch nach dem prinzip
+4912345532 Peter Lustig
+4323423423 Willi Mustermann
...
das optional zu dem auf der Sim karte des phones verwendet werden kann, denn ne nummer zu wählen sollte bei 99% aller Telefone funktionieren, das auslesen der verschiedenen Adress / Sim-telefonbüchern ist von phone zu phone verschieden und du müsstest viele Herstellerspezifische Haken und Ösen einbauen außerdem könnte man dann auch längere namen verwenden als das auf der Sim karte möglich ist
Ansonsten kann ich nur sagen weiter so .... Cpos ist ne tolle Software
|
|
|
|
|
|
|
|
fuchs
Developer
Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland
|
|
Hi joshua,
danke für die tipps, das problem ist, dass der comport ja ganz normal reagiert, als ob er vorhanden wäre.
erst beim schreiben gibt es das problem.
die abspeicherung des telefonbuchs wollte ich in der art machen, wie du es beschreibst.
das interne adressbuch/ sim adressbuch zu lesen ist eigentlich nicht schwer.
bei den siemens handys gibt es anscheinend ein timing problem.
die abfrage muß mit einer verzögerung erfolgen.
der dicke brocken ist im moment die verbindungserkennung .
ich wüßte gern, wie andere es gelöst haben, oder bin ich der einzige mit diesem problem?
gruß,
fuchs
|
|
|
|
|
|
|
|
Joshua
Frischfleisch
Anmeldung: 20.06.2004
Beiträge: 8
|
|
Hi Fuchs
ich habe gerade nochmals den Debugger bemüht. Du hast recht, der Com-Port kann auch erfolgreich geöffnet werden,
wenn das über BT verbundene Phone aus ist, jedenfalls liefert bei mir die Funktion zum Com Port öffnen
einen gültigen File Handle.
m_hCom = CreateFile ("\\\\.\\COM7", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
Wenn ich dann aber was auf den Port schreiben will, dann liefert mir das WriteFile im parameter bytesSent 0 zurück
und ich weiss daß das schreiben nicht geht, also irgendwas mit der Virtuellen COM Verbindung nicht stimmt.
if (!WriteFile (m_hCom, (const char*)DataOut, count,&bytesSent, NULL))
{
// error
return FALSE;
}
if (bytesSent != count)
{
// error
return FALSE;
}
Ich vermute daß bei dir die Timeouts für das schreiben zu hoch sind, denn der COM Treiber versucht bei mir so lange was
zu schreiben bis der vorher konfigurierte Timeout für den Com Port zuschlägt. Nun kenne ich mich mit dem mscomm
objekt leider nicht aus aber ich denke wenn du den timeout fürs schreiben konfigurierst kommt der PC in endlicher
Zeit wieder zurück. Auf die schnelle hab ich da im MSDN was mit object.CommandTimeout [=number] gefunden. Default ist
wohl 30 sekunden. Ich konnte aber nicht rausfinden ob das auch auf das MSCOmm Obj anwendbar ist
Vielleicht versuchst du nach dem erfolgreichen Öffnen des Ports einfach mal ein freundliches "AT" an das Telefon zu schicken und schaust ob ein "OK" zurückkommt. Den Timeout für das MSComm Obj. würde ich mal auf 2 sek setzten, das sollte dicke reichen.
Ich drücke auf alle Fälle mal die Daumen daß es mit dem Timeout besser wird.
Gruß Joshua
|
|
|
|
|
|
|
|
|
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum nicht herunterladen
|
|
|