안녕하세요
C로 마이크로프로세서에 프로그래밍은 해본 적이 있는데, java는 처음인 초보입니다.
일단 급하게 앱이 필요해서 간단한 예제들 몇 가지 따라해보고, 부랴부랴 구글 USB host 개발자 페이지를 보고 코드를 짜맞췄는데, 작동을 하지 않습니다.
micro 5pin 단자에 USB 케이블로 아두이노와 같은 프로세서를 사용하는 보드와 연결한 후, 보드에서 보내주는 숫자를 화면에만 띄울 수 있으면 됩니다. (아두이노를 사용하지는 않습니다)
device를 스마트폰과 연결한 후, 어플리케이션에서 장치가 연결됐는 지 확인, 그리고 permission을 받은 다음 데이터를 주고받는 순서로 동작하는 것은 알겠습니다만, 구체적으로 코드에 어떤 부분이 문제인 지를 잘 모르겠습니다.
도움을 부탁드립니다
package com.example.usb_test;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView display;
Intent intent = getIntent();
private PendingIntent mPermissionIntent;
private static final String TAG = "USB,MainActivity";
private byte[] bytes;
private static int TIMEOUT = 0;
private boolean forceClaim = true;
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
private static final String ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if(device != null){
//call method to set up device communication
}
}
else {
Log.d(TAG, "permission denied for device " + device);
}
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.num_display);
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void run(){
int num = 0;
UsbInterface intf = device.getInterface(0);
UsbEndpoint endpoint = intf.getEndpoint(1);
UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbDeviceConnection connection = mUsbManager.openDevice(device);
connection.claimInterface(intf, forceClaim);
num = connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT);
display.setText("Number is " + num);
}
}