Witam.
Krótki opis :
Telefon podłączam do komputera za pośrednictwem Bluetooth. Wówczas tworzony jest wirtualny port COM ( w moim przypadku o numerze 7). Moim celem, jest komunikacja z modemem GSM wbudowanym w telefon komórkowy za pośrednictwem portu COM oraz komend AT.
Aby mieć pewność, że telefon komunikuje się z komputerem po porcie COM połączyłem się z komórką za pomocą Putty. Wszystko jest OK. Mogę wydawać polecenia AT ( wysyłać, odbierać SMS-y, itd. ).
Problem pojawia się gdy chcę zarządzać komunikacją z poziomu kodu mojej aplikacji.
Oto fragment programu :
public static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = SP.ReadLine();
Console.WriteLine(data);
}
SerialPort SP = new SerialPort("COM7", 19200);
// 19200 - prędkość transmisji
// konfiguracja portu jest taka sama jakiej użyłem przy połączeniu przez Putty
SP.Parity = Parity.None;
SP.DataBits = 8;
SP.StopBits = StopBits.One;
SP.Encoding = Encoding.ASCII;
SP.WriteTimeout = 500;
SP.ReadTimeout = 500;
SP.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
SP.Open();
if (SP.IsOpen)
{
// pozostała część kodu nie jest istotna
SP.Write("AT" + (Char)13);
SP.Close();
}
EDIT : Telefon Samsung Avila GTS5230
Problem polega na tym, iż nawet w przypadku wykonania najprostszego polecenia ( jakim jest AT - informuje o gotowości modemu GSM do działania ) aplikacja zawiesza telefon komórkowy.
Wydawało mi się, że telefon zawiesza się ponieważ nie odbieram rezultatu polecenia AT.
SP.DiscardInBuffer()
SP.DiscardOutBuffer()
Usunięcie danych z bufora również nie działa.
Użycie funkcji SP.ReadExisting() zaraz po wykonaniu polecenia AT również nie poprawia sytuacji - telefon zawiesza się.
Będę wdzięczny za wskazówki.