NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Avatar
Filip Oliva
Člen
Avatar
Filip Oliva:11.9.2016 3:32

Řeším problém s odesláním příkazu na zařízení v USB portu. Myslím, že mám chybu ve struktuře příkazu.
Podle manuálu je právný formát příkazu je \x1B COMMAND \n (bez mezer mezi obsahem a značkami). V pythonu je fungující příklad následující:

os.write(self.fd, "\x1b"+command+"\n")

Ale v javě si nejsem jistý, jak by měla být struktura Stringu.

package usbTest4;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;

public class UsbTest4 {
    static Enumeration portList;
    static CommPortIdentifier portId;
    static String messageString = "ENROLL:0 PGX:0 PGY:1 ALARM:0 BEEP:NONE";

    static SerialPort serialPort;
    static OutputStream outputStream;

    public static void main(String[] args) {

        portList = CommPortIdentifier.getPortIdentifiers();
        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            System.out.println(portList);
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                if (portId.getName().equals("/dev/ttyUSB0")) {

                    try {
                        serialPort = (SerialPort) portId.open("SimpleWriteApp", 2000);
                    } catch (PortInUseException e) {
                    }
                    try {
                        outputStream = serialPort.getOutputStream();
                    } catch (IOException e) {
                    }
                    try {
                        serialPort.setSerialPortParams(57600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                                SerialPort.PARITY_NONE);
                    } catch (UnsupportedCommOperationException e) {
                    }
                    try {
                        outputStream.write(messageString.getBytes());
                    } catch (IOException e) {
                    }
                }
            }
        }
    }
}

Díky za jakoukoli radu.

 
Odpovědět
11.9.2016 3:32
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:13.9.2016 0:00

problém je, že když si dáš output před while loop a vypíšeš si třeba nextElement(), tak ti to vyhodí null, protože to nikde nenaplňuješ. A jestli to spouštíš z cli, tak to nenaplňuješ polem Stringů. Takže toto by měl být prvotní problém.
Jinak jestli jsem to dobře pochopil, tak ty potřebuješ zjistit velikost zařízení připojeného do USB portu?

Nahoru Odpovědět
13.9.2016 0:00
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Filip Oliva
Člen
Avatar
Filip Oliva:13.9.2016 0:22

Potřebuji jen jednoduše odeslat příkaz do USB zařízení. Původně jsem myslel, že jen mám špatně strukturu příkazu, že špatně připojuji k příkazu ASCII znaky, ale začal jsem to řešit takto:

char ESC = (char) 27;
 char LN = (char) 10;
 String cmd = "command";
 String cmdString = ESC + cmd + LN;
 
Nahoru Odpovědět
13.9.2016 0:22
Avatar
Filip Oliva
Člen
Avatar
Filip Oliva:14.9.2016 13:04

Tak problém vyřešen. Použil jsem jinou knihovnu a začal lépe číst dokumentaci :D

package jssc;
import jssc.*;
public class Main {

    public static void main(String[] args) {
        char ESC = (char) 27; // Ascii character for Escape
        char LN = (char) 10;
        String message = "ENROLL:0 PGX:0 PGY:0 ALARM:0 BEEP:NONE";
        String cmd = ESC + message + LN;
        SerialPort serialPort = new SerialPort("/dev/ttyUSB0");
        try {

            serialPort.openPort();
            serialPort.setParams(SerialPort.BAUDRATE_57600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.writeString(cmd);

            serialPort.closePort();
        } catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }
}
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
14.9.2016 13:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.