Car-PC.info

Developer - mscomm objekt und bluetooth

fuchs - Di 21 Jun, 2005 22:51
Titel: mscomm objekt und bluetooth
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. Sad

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
Joshua - Mi 22 Jun, 2005 10:09
Titel:
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 Shock

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 Wink 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 - Do 23 Jun, 2005 01:10
Titel:
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 - Do 23 Jun, 2005 15:37
Titel:
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. Embarassed

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 Question

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
Alle Zeiten sind GMT + 1 Stunde
Powered by phpBB2 Plus and Kostenloses Forum based on phpBB