Port zwraca wys?ane dane

Witam,

piszę w javie aplikację do obsługi modemu GSM. Kod aplikacji:

public static void main(String[] args) { try { CommPortIdentifier cpi = CommPortIdentifier.getPortIdentifier("COM10");

SerialPort port = (SerialPort) cpi.open("app1", 2000); port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

InputStream is = port.getInputStream(); OutputStream os = port.getOutputStream();

InputStreamReader isr = new InputStreamReader(is); Scanner scanner = new Scanner(isr);

for(;;) { InputStreamReader systemIn = new InputStreamReader(System.in); Scanner systemScanner = new Scanner(systemIn);

String line = systemScanner.nextLine(); if (line.equals("END")) { break; }

os.write((line + "\n").getBytes()); System.out.println(scanner.nextLine()); }

port.close();

} catch (NoSuchPortException ex) { ex.printStackTrace(); } catch (PortInUseException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (UnsupportedCommOperationException ex) { ex.printStackTrace(); }

}

(pomijam importy i nazwę klasy).

Mam następujący problem - po wysłaniu na port komendy AT zamiast oczekiwanego OK otrzymuję dokładnie te same dane. Mam pewność, że port na którym zainstalowano modem to COM9.

Czy znacie przyczynę takiego zachowania się portu?

Pozdrawiam, Tomasz Jurkiewicz

Reply to
Jurkiewicz.Tomek
Loading thread data ...

oczywiscie mam pewnosc ze to COM10 a nie COM9.

Reply to
Jurkiewicz.Tomek

A telefon podlaczony ? modemy lubia zrobic echo, ate0 wylacza.

Dane do telefonu dochodza ? [czyli czy komendy wykonuje]

J.

Reply to
J.F.

snipped-for-privacy@gmail.com przemówił ludzkim głosem:

Echo to nie wina portu, tylko modemu (trzeba wyłączyć w nim echo). A co do braku odpowiedzi, to sprawdź na jaki znak końca linii reaguje modem ( \n, czy \r, a może oba?).

Reply to
Zbych

Dzieki za odpowiedzi.

Telefon nie odpowiada chyba tak jak trzeba. Za pomoca hyperterminala wykonalem nastepujace operacje (nieparzyste linie to komendy, parzyste to odpowiedzi)

AT OK AT+CMGF=1 OK AT+CMGL="ALL" CMS ERROR: 500

Kod bledu 500 to 'nieznany blad'.

Od momentu tej sekwencji, nie moge ani nic wyslac hyperterminalem, a dane wysylane z mojej aplikacji juz nie odbijaja (aplikacja jest napisana w ten sposob, ze zawiesza sie w oczekiwaniu na odpowiedz modemu - ktora nie nadchodzi). Co wiecej - przy uzyciu aplikacji globetrotter ciagle moge laczyc sie z internetem, itp. Od czasu do czasu (zupelnie losowo, czasem w mojej aplikacji, czasem w hyperterminalu) karta zwraca sekwencje: _OSIGQ: n, 0 gdzie 10<n<20 mniej wiecej. To sa jakies parametry syglnalu sieci - wniosek: karta (jakos) dziala.

Wyglada wiec na to, ze mam jakis wiekszy problem z ta karta. Jesli uda mi sie go rozwiazac, to odpisze, tymczasem czekam na kolejne pomysly co moze byc nie tak.

Pozdr, Tomek

Reply to
Jurkiewicz.Tomek

Ustaw moze mgf=0 i zobacz czy wyrzuci w pdu.

J.

Reply to
J.F.

Problem rozwiazalem juz. Okazalo sie, ze wszystkie komendy wysylane sa dobrze. Po prostu zapychalem bufor. Nie wiem czemu, ale modem wysyla bardzo duzo pustych linii (co 2 linia wyslana z modemu jest pusta). Stad wrazenie, ze modem nie reaguje. Do tego dochodzi mnostwo danych kontrolnych wysylanych co jakis czas. Ogolnie rzecz biorac, nie da sie napisac tego typu aplikacji niewspolbieznie ;)

Ponizej wklejam dzialajacy kod aplikacji, ktora pozwala na rozmawianie z modemem GSM z poziomu stdin i stdout. Wymagania: Java 6 sdk, zainstalowane javax.comm (pod windows nalezy pobrac API ze strony sun, i sterowniki comm.jar, javax.comm.properties oraz win32comm.dll i zainstalowac w odpowiednich katalogach. dla linux wystarcza javax.comm).

Dziekuje bardzo za rady, moze komus przyda sie ta mini-dyskusja.

Pozdrawiam, Tomek

Reply to
Jurkiewicz.Tomek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.