package com.smartisan.cplcTest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.simalliance.openmobileapi.Channel;
import org.simalliance.openmobileapi.Reader;
import org.simalliance.openmobileapi.SEService;
import org.simalliance.openmobileapi.Session;
import java.io.IOException;
public class CplcTestActivity extends Activity implements View.OnClickListener {
public static final String TAG = "CplcTestActivity";
public static final String openChannelCommand = "A000000151000000";
public static final String getCplcCommand = "80CA9F7F00";
private SEService mSEservice;
private Reader[] mReaders;
private Context mContext;
private Button mBtn_sendCommand;
private TextView mTxtShowCplc;
private String mStrCplc;
public class OMASEServiceCallBack implements SEService.CallBack {
@Override
public void serviceConnected(SEService seService) {
Log.d(TAG, "connect to SEService");
mSEservice = seService;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
setContentView(R.layout.activity_cplc_layout);
mBtn_sendCommand = (Button) findViewById(R.id.bt_sendCommand);
mBtn_sendCommand.setOnClickListener(this);
mTxtShowCplc = (TextView) findViewById(R.id.txt_showCplc);
getSEService();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onClick(View view) {
if(view.getId() == R.id.bt_sendCommand) {
if (sendCommand()) {
mTxtShowCplc.setText(mStrCplc);
}
}
}
private Reader getEseReader(Reader[] readers){
Reader eseReader = null;
Log.d(TAG, "getReader start");
if(readers != null && readers.length >= 1){
int idx = 0;
for(Reader reader : readers){
if(reader.getName().startsWith("eSE")){
break;
}
idx++;
}
if(idx < readers.length){
eseReader = readers[idx];
}else{
Log.d(TAG, "eSE reader not exist");
}
}else{
Log.d(TAG, "_readers is null");
}
Log.d(TAG,"getReader end");
return eseReader;
}
//这是初始化reader上一个session,一个reader可以打开多个会话。会话里建立的所有通道的访问规则是一样的。
private Session initSession(Reader[] readers) {
Log.d(TAG, "initSession start");
Session session = null;
try {
session = getEseReader(readers).openSession();
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "initSession end");
if (session == null){
Log.d(TAG, "session null, re-connect");
if (mSEservice != null && mSEservice.isConnected())
mSEservice.shutdown();
SEService seService = getSEService();
if (seService == null){
return null;
}
mReaders = seService.getReaders();
try {
session = getEseReader(mReaders).openSession();
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "re-connect end session is " + session);
}
return session;
}
private SEService getSEService() {
Log.d(TAG, "getSEService");
if (mSEservice != null && mSEservice.isConnected()){
return mSEservice;
} else {
Log.d(TAG, "getSEService init");
mReaders = null;
OMASEServiceCallBack mCallBack = new OMASEServiceCallBack();
new SEService(mContext, mCallBack);
return mSEservice;
}
}
synchronized private boolean sendCommand() {
boolean result = true;
Session session = null;
Channel channel = null;
if (mSEservice == null) {
Log.d(TAG, "init failed !!!");
return false;
}
try {
if (mReaders == null) {
mReaders = mSEservice.getReaders();
}
session = initSession(mReaders);
if (session == null) {
return false;
}
byte[] openChannelAidByte = CplcUtils.hexStringToBytes(openChannelCommand);
channel = session.openBasicChannel(openChannelAidByte);
Log.d(TAG, "sendCommand openBasicChannel");
if (channel != null) {
byte[] respSetstatus = channel.transmit(CplcUtils.hexStringToBytes(getCplcCommand));
mStrCplc = CplcUtils.bytesToHexString(respSetstatus);
Log.d(TAG, "aid response" + mStrCplc);
channel.close();
}
session.close();
}
catch (IOException e) {
e.printStackTrace();
return false;
} catch (Exception e1) {
e1.printStackTrace();
return false;
} finally {
if (channel != null && !channel.isClosed()) {
channel.close();
}
if (session != null && !session.isClosed()) {
session.close();
}
}
return true;
}
}
android通过oma获取ESE的CPLC
4星 · 超过85%的资源 需积分: 48 100 浏览量
2017-12-27
18:36:30
上传
评论 2
收藏 67KB ZIP 举报
迷茫的Jerry
- 粉丝: 8
- 资源: 1