Chvalov
@Chvalov

Как получить ответ от контролера, библиотека usb-serial-for-android?

Весь проект - Скачать и глянуть

Как мне получать ответ в виде массива и вывести его в TV_Otvet.setText(Arrays.toString(массив));

Вот мое MainActivity:
package com.ovis.andrey.melnitsacontroler;

import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

import com.hoho.android.usbserial.driver.UsbSerialDriver;
import com.hoho.android.usbserial.driver.UsbSerialPort;
import com.hoho.android.usbserial.driver.UsbSerialProber;

import java.io.IOException;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    TextView TV_Errors, TV_Otvet;

    private static UsbSerialPort sPort = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TV_Errors = (TextView) findViewById(R.id.TV_Errors);
        TV_Otvet = (TextView) findViewById(R.id.TV_Otvet);

        // Находим все доступные устройства для роботы
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
        List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
        if (availableDrivers.isEmpty()) {
            return;
        }

        // Соединяемся с первым устройством (У нас всего оно 1)
        UsbSerialDriver driver = availableDrivers.get(0);
        UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
        if (connection == null) {
            // Возможо нужны вызвать UsbManager.requestPermission(driver.getDevice(), ..)
            return;
        }

        try {
            sPort = driver.getPorts().get(0);
            sPort.open(connection);
            sPort.setParameters(19200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
            Log.e("OvisLog", "Заданны настройки");
        } catch (IOException e) {
            // Deal with error.
            try {
                sPort.close();
            } catch (IOException e2) {
                // Ignore.
            }
            sPort = null;
            return;
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void OnClick_On1(View view) {
        byte[] send = new byte[]{1, 5, 0, 5, 0, 1, 28, 11};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_On2(View view){
        byte[] send = new byte[]{1, 5, 1, 5, 0, 1, 29, -9};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_On3(View view){
        byte[] send = new byte[]{1, 5, 2, 5, 0, 1, 29, -77};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_On4(View view){
        byte[] send = new byte[]{1, 5, 3, 5, 0, 1, 28, 79};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void OnClick_On5(View view){
        byte[] send = new byte[]{1, 5, 4, 5, 0, 1, 29, 59};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_Off1(View view) {
        byte[] send = new byte[]{1, 5, 0, 1, 0, 1, 93, -54};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_Off2(View view){
        byte[] send = new byte[]{1, 5, 1, 1, 0, 1, 92, 54};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_Off3(View view){
        byte[] send = new byte[]{1, 5, 2, 1, 0, 1, 92, 114};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void OnClick_Off4(View view){
        byte[] send = new byte[]{1, 5, 3, 1, 0, 1, 93, -114};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void OnClick_Off5(View view){
        byte[] send = new byte[]{1, 5, 4, 1, 0, 1, 92, -6};
        try {
            sPort.write(send, 100);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void OnClick_Exit(View view){
        finish();
    }
}
  • Вопрос задан
  • 832 просмотра
Решения вопроса 1
@moryakov
Конкретно по этой библиотеке не скажу, но возможно вам нужен листенер события от com-порта.
Кроме того, вам потребуется что-то вроде очереди, в которую вы в этом событии будете писать байты от порта.
И отдельный поток, который будет читать из этой очереди для дальнейшей обработки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы