Skip to content

Commit

Permalink
增加适配厂商
Browse files Browse the repository at this point in the history
  • Loading branch information
h11g committed Sep 16, 2019
1 parent 1dea43d commit 33e842d
Show file tree
Hide file tree
Showing 12 changed files with 471 additions and 5 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
- [江苏东大集成电路系统工程技术有限公司](https://www.seuic.com/)
- [优博讯](http://www.urovo.com/)
- [无锡盈达聚力科技 idata 95w](http://www.idatachina.com/)
- [深圳市思感科技有限公司](http://www.hualuoyun.com/)

### Demo

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.result);
mTextView.setText("制造商:" + Build.MANUFACTURER);
mTextView.setText("制造商:" + Build.MANUFACTURER + "\n" + "型号:" + Build.MODEL);
Button clearText = findViewById(R.id.clear);
clearText.setOnClickListener(new View.OnClickListener() {
@Override
Expand Down
9 changes: 9 additions & 0 deletions scanner/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ android {
targetSdkVersion project.hasProperty('targetSdkVersion') ? project.targetSdkVersion : DEFAULT_TARGET_SDK_VERSION
versionCode 1
versionName "1.0"
ndk {
abiFilters "armeabi", "armeabi-v7a"
}
}

buildTypes {
Expand All @@ -24,6 +27,12 @@ android {
}
}

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

}

dependencies {
Expand Down
Binary file added scanner/libs/armeabi-v7a/libdevapi.so
Binary file not shown.
Binary file added scanner/libs/armeabi-v7a/libirdaSerialPort.so
Binary file not shown.
Binary file added scanner/libs/armeabi/libdevapi.so
Binary file not shown.
Binary file added scanner/libs/armeabi/libirdaSerialPort.so
Binary file not shown.
18 changes: 14 additions & 4 deletions scanner/src/main/java/cn/guanmai/scanner/SupporterManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import android.support.annotation.NonNull;
import android.view.KeyEvent;

import cn.guanmai.scanner.devices.sg6900.SG6900ScannerManager;

public class SupporterManager<T extends IScannerManager> {
private static SupporterManager<IScannerManager> instance;
private T scannerManager;
Expand All @@ -15,9 +17,10 @@ public class SupporterManager<T extends IScannerManager> {
* QCOM: 东大集成
* SEUIC: 东大集成
* UBX: 优博讯
* 型号SG6900: 深圳市思感科技有限公司
*/
public enum ScannerSupporter {
SUNMI("SUNMI"), alps("alps"), SEUIC("SEUIC"), UBX("UBX"), OTHER("OTHER"), idata("idata");
SUNMI("SUNMI"), alps("alps"), SEUIC("SEUIC"), UBX("UBX"), OTHER("OTHER"), idata("idata"), SG6900("SG6900");

ScannerSupporter(String name) {
}
Expand All @@ -26,9 +29,13 @@ public enum ScannerSupporter {
public SupporterManager(Context context, @NonNull IScanListener listener) {
ScannerSupporter scannerSupporter;
try {
scannerSupporter = ScannerSupporter.valueOf(Build.MANUFACTURER);
scannerSupporter = ScannerSupporter.valueOf(Build.MODEL); // 先匹配型号
} catch (Exception e) {
scannerSupporter = ScannerSupporter.OTHER;
try {
scannerSupporter = ScannerSupporter.valueOf(Build.MANUFACTURER); // 如果没有,则匹配厂商
} catch (Exception e1) {
scannerSupporter = ScannerSupporter.OTHER;
}
}
switch (scannerSupporter) {
case SUNMI:
Expand All @@ -44,7 +51,10 @@ public SupporterManager(Context context, @NonNull IScanListener listener) {
scannerManager = (T) UBXScannerManager.getInstance(context);
break;
case idata:
scannerManager = (T)IDataScannerManager.getInstance(context);
scannerManager = (T) IDataScannerManager.getInstance(context);
break;
case SG6900:
scannerManager = (T)SG6900ScannerManager.getInstance(context);
break;
default:
scannerManager = (T) new OtherScannerManager(context);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package cn.guanmai.scanner.devices.sg6900;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.view.KeyEvent;

import java.io.IOException;

import cn.guanmai.scanner.IScannerManager;
import cn.guanmai.scanner.SupporterManager;

public class SG6900ScannerManager implements IScannerManager {
private Context activity;
private static SG6900ScannerManager instance;
private SupporterManager.IScanListener listener;
private ScanThread scanThread;

@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == ScanThread.SCAN) {
String data = msg.getData().getString("data");
if (data != null && !data.isEmpty()) {
listener.onScannerResultChange(data);
}
}
}
};

private SG6900ScannerManager(Context activity) {
this.activity = activity;
}

public static SG6900ScannerManager getInstance(Context activity) {
if (instance == null) {
synchronized (SG6900ScannerManager.class) {
if (instance == null) {
instance = new SG6900ScannerManager(activity);
}
}
}
return instance;
}

@Override
public void init() {
try {
scanThread = new ScanThread(mHandler);
listener.onScannerServiceConnected();
} catch (IOException e) {
listener.onScannerInitFail();
return;
}
scanThread.start();
}

@Override
public void recycle() {
scanThread.close();
}

@Override
public void setScannerListener(@NonNull SupporterManager.IScanListener listener) {
this.listener = listener;
}

@Override
public void sendKeyEvent(KeyEvent key) {

}

@Override
public int getScannerModel() {
return 0;
}

@Override
public void scannerEnable(boolean enable) {

}

@Override
public void setScanMode(String mode) {

}

@Override
public void setDataTransferType(String type) {

}

@Override
public void singleScan(boolean bool) {
scanThread.scan();
}

@Override
public void continuousScan(boolean bool) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package cn.guanmai.scanner.devices.sg6900;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import cn.pda.serialport.SerialPort;

public class ScanThread extends Thread {

private SerialPort mSerialPort;
private InputStream is;
private OutputStream os;
/* serialport parameter */
private int port = 0;
private int baudrate = 9600;
private int flags = 0;

private Handler handler;

public static int SCAN = 1001; // messege recv mode

/**
* if throw exception, serialport initialize fail.
*
* @throws SecurityException
* @throws IOException
*/
public ScanThread(Handler handler) throws SecurityException, IOException {
this.handler = handler;
mSerialPort = new SerialPort(port, baudrate, flags);
mSerialPort.scaner_poweron();
is = mSerialPort.getInputStream();
os = mSerialPort.getOutputStream();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/** clear useless data **/
byte[] temp = new byte[128];
is.read(temp);
}

@Override
public void run() {
try {
int size = 0;
byte[] buffer = new byte[2048];
int available = 0;
while (!isInterrupted()) {
available = is.available();
if (available > 0) {
size = is.read(buffer);
if (size > 0) {
sendMessege(buffer, size, SCAN);
}
}
}
} catch (IOException e) {
// 返回错误信息
e.printStackTrace();
}
super.run();
}

private void sendMessege(byte[] data, int dataLen, int mode) {
try {
String dataStr = new String(data, 0, dataLen);
Bundle bundle = new Bundle();
bundle.putString("data", dataStr);
Message msg = new Message();
msg.what = mode;
msg.setData(bundle);
handler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}

public void scan() {
if (mSerialPort.scaner_trig_stat() == true) {
mSerialPort.scaner_trigoff();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mSerialPort.scaner_trigon();
}

public void close() {
if (mSerialPort != null) {
mSerialPort.scaner_poweroff();
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
mSerialPort.close(port);
}
}

}
Loading

0 comments on commit 33e842d

Please sign in to comment.