forked from gmfe/gm_pda_scanner
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
471 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
103 changes: 103 additions & 0 deletions
103
scanner/src/main/java/cn/guanmai/scanner/devices/sg6900/SG6900ScannerManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
|
||
} | ||
} |
116 changes: 116 additions & 0 deletions
116
scanner/src/main/java/cn/guanmai/scanner/devices/sg6900/ScanThread.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.