Komunikacja z modemem GSM w telefonie komórkowym

0

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.

0

zweryfikuj czy telefon/modem nie używa 2 portów - wtedy spróbuj inny.
Sprawdź innym programem (terminalowym np termite) czy wysyłanie poleceń działa.

0

Hej.

Dzięki za odpowiedź.

Telefon używa tylko jednego portu ( COM7 ). Przesyłanie poleceń AT do modemu GSM sprawdziłem również poprzez Hyper Terminal.

Pozdrawiam

0

oto moja funkcja łącząca:

string port="COM7"; //NP
//nowe polaczenie-ustawienia
            /* *
                8N1
                baudrate: 115200
                DTR:OFF
             * */
            PhoneSerialPort = new SerialPort(port, 115200);
            PhoneSerialPort.DataBits = 8;
            PhoneSerialPort.StopBits = StopBits.One; 
            PhoneSerialPort.BaudRate = 115200;
            PhoneSerialPort.DtrEnable = false;

            PhoneSerialPort.ReadTimeout = 250;          //guessing
            PhoneSerialPort.Parity = Parity.None;       //guessing
            PhoneSerialPort.Handshake = Handshake.None; //guessing
            //===================

            //nowe polaczenie-otwórz
            try
            {
                PhoneSerialPort.Open();
            }
            catch (TimeoutException)
            {
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
            //======================= 

oraz funkcja do wysyłania:

/*
         * napisz do portu 
         */
        public bool Write(string message)
        {
            if (PhoneSerialPort == null) return false;
            if (!PhoneSerialPort.IsOpen) return false;

            message = message.Replace("\n", "");
            message = message.Replace("\r", "");
            try
            {
                byte[] buffer = Encoding.ASCII.GetBytes(message + "\r\n");
                PhoneSerialPort.Write(buffer, 0, buffer.Length);
            }
            catch (Exception ex)
            {
                throw ex;
                //return false;
            }

            return true;
        } 
0

Hej.

Dzięki za przykładowy kod.

Aczkolwiek sytuacja się nie zmieniła, telefon zawiesza się - zaczynam podejrzewać, że to specyfika telefonu.

Spróbuje z innym, wtedy będę miał pewność.

0

Połącz się tym programem z HyperTerminalem i zobacz co on wysyła.

1 użytkowników online, w tym zalogowanych: 0, gości: 1