b07046c9 by 17205857019@139.com

11

1 parent 25374a84
......@@ -10,6 +10,7 @@
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/ddtest" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
......
File mode changed
......@@ -26,4 +26,6 @@ dependencies {
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.github.freyskill:SerialPortHelper:v1.0.1'
implementation project(':ddtest')
}
......
......@@ -14,6 +14,8 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.example.ddtest.HexTool;
import top.keepempty.sph.library.SerialPortConfig;
import top.keepempty.sph.library.SerialPortFinder;
import top.keepempty.sph.library.SerialPortHelper;
......@@ -65,25 +67,24 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String ett =getFinalHex(String.valueOf(et.getText(),String.valueOf(et2.getText(),String.valueOf(et3.getText(),String.valueOf(et4.getText());
String ett = HexTool.generateFinalHex(String.valueOf(et.getText()), String.valueOf(et2.getText()), String.valueOf(et3.getText()), String.valueOf(et4.getText()));
mSendDataEt.setText(ett);
}
});
}
public String getFinalHex(String pizhong,String zhongliang,String danjia,String zongjia){
return (chineseToHexStr("皮重","10 00") +
chineseToHexStr(pizhong,"20 00") +
chineseToHexStr("重量","30 00")
+ chineseToHexStr(zhongliang,"40 00")
+ chineseToHexStr("单价 元","50 00") +
chineseToHexStr(danjia,"60 00")
+ chineseToHexStr("总价 元","70 00")
+ chineseToHexStr(zongjia,"80 00") + " 00 00 00").replace(" ","");
public String getFinalHex(String pizhong, String zhongliang, String danjia, String zongjia) {
return (chineseToHexStr("皮重", "10 00") +
chineseToHexStr(pizhong, "20 00") +
chineseToHexStr("重量", "30 00")
+ chineseToHexStr(zhongliang, "40 00")
+ chineseToHexStr("单价 元", "50 00") +
chineseToHexStr(danjia, "60 00")
+ chineseToHexStr("总价 元", "70 00")
+ chineseToHexStr(zongjia, "80 00") + " 00 00 00").replace(" ", "");
}
public String chineseToHexStr(String text, String number) {
try {
// 将中文文本编码为 UTF-16 BE 字节数据
......@@ -104,7 +105,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
// 将长度转换为十六进制字符串,不足两位补 0
String lengthHexStr = String.format(" %02X", length);
return ("5A A5" + lengthHexStr + hexStr).replace(" ","");
return ("5A A5" + lengthHexStr + hexStr).replace(" ", "");
} catch (Exception e) {
e.printStackTrace();
return null;
......@@ -146,12 +147,12 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
@Override
public void onClick(View v) {
String sendTxt = mSendDataEt.getText().toString().trim();
if(TextUtils.isEmpty(sendTxt)){
Toast.makeText(MainActivity.this,"请输入发送命令!",Toast.LENGTH_LONG).show();
if (TextUtils.isEmpty(sendTxt)) {
Toast.makeText(MainActivity.this, "请输入发送命令!", Toast.LENGTH_LONG).show();
return;
}
if (sendTxt.length() % 2 == 1) {
Toast.makeText(MainActivity.this,"命令错误!",Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, "命令错误!", Toast.LENGTH_LONG).show();
return;
}
serialPortHelper.addCommands(sendTxt);
......@@ -161,10 +162,10 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
mOpenBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isOpen){
if (isOpen) {
serialPortHelper.closeDevice();
isOpen = false;
}else{
} else {
openSerialPort();
}
showState();
......@@ -175,7 +176,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
/**
* 打开串口
*/
private void openSerialPort(){
private void openSerialPort() {
/**
* 串口参数
......@@ -195,8 +196,8 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
serialPortHelper.setConfigInfo(serialPortConfig);
// 开启串口
isOpen = serialPortHelper.openDevice();
if(!isOpen){
Toast.makeText(this,"串口打开失败!",Toast.LENGTH_LONG).show();
if (!isOpen) {
Toast.makeText(this, "串口打开失败!", Toast.LENGTH_LONG).show();
}
serialPortHelper.setSphResultCallback(new SphResultCallback() {
@Override
......@@ -250,15 +251,15 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
}
private void showState(){
if(isOpen){
Toast.makeText(this,"串口打开成功!",Toast.LENGTH_LONG).show();
private void showState() {
if (isOpen) {
Toast.makeText(this, "串口打开成功!", Toast.LENGTH_LONG).show();
mOpenBtn.setText("关闭串口");
mOpenBtn.setTextColor(ContextCompat.getColor(this,R.color.org));
mOpenBtn.setTextColor(ContextCompat.getColor(this, R.color.org));
mOpenBtn.setBackgroundResource(R.drawable.button_style_stroke);
}else {
} else {
mOpenBtn.setText("打开串口");
mOpenBtn.setTextColor(ContextCompat.getColor(this,R.color.white));
mOpenBtn.setTextColor(ContextCompat.getColor(this, R.color.white));
mOpenBtn.setBackgroundResource(R.drawable.button_style_org);
}
}
......
......@@ -3,7 +3,6 @@ plugins {
}
android {
namespace 'com.example.ddtest'
compileSdkVersion 28
defaultConfig {
......@@ -23,4 +22,5 @@ android {
}
dependencies {
implementation 'com.github.freyskill:SerialPortHelper:v1.0.1'
}
\ No newline at end of file
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<manifest package="com.example.ddtest" xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
\ No newline at end of file
......
package top.keepempty.utils;
package com.example.ddtest;
import java.io.UnsupportedEncodingException;
......
package com.example.ddtest;
import top.keepempty.sph.library.SerialPortConfig;
import top.keepempty.sph.library.SerialPortHelper;
import top.keepempty.sph.library.SphResultCallback;
public class SerialPortManager {
private static final String TAG = "SerialPortManager";
private static SerialPortManager instance;
private SerialPortHelper serialPortHelper;
private SerialPortConfig config;
private SphResultCallback callback;
private boolean isOpen;
// 默认配置
private static final String DEFAULT_PATH = "/dev/ttyS5";
private static final int DEFAULT_BAUD_RATE = 115200;
private static final int DEFAULT_DATA_BITS = 8;
private static final char DEFAULT_PARITY = 'N';
private static final int DEFAULT_STOP_BITS = 1;
private SerialPortManager() {
initDefaultConfig();
}
public static synchronized SerialPortManager getInstance() {
if (instance == null) {
instance = new SerialPortManager();
}
return instance;
}
private void initDefaultConfig() {
config = new SerialPortConfig();
config.path = DEFAULT_PATH;
config.baudRate = DEFAULT_BAUD_RATE;
config.dataBits = DEFAULT_DATA_BITS;
config.parity = DEFAULT_PARITY;
config.stopBits = DEFAULT_STOP_BITS;
}
// 配置参数方法
public void setPath(String path) {
config.path = path;
}
public void setBaudRate(int baudRate) {
config.baudRate = baudRate;
}
public void setDataBits(int dataBits) {
config.dataBits = dataBits;
}
public void setParity(char parity) {
config.parity = parity;
}
public void setStopBits(int stopBits) {
config.stopBits = stopBits;
}
// 初始化串口
public void init() {
serialPortHelper = new SerialPortHelper(16);
serialPortHelper.setConfigInfo(config);
}
// 打开/关闭串口
public boolean openPort() {
if (isOpen) return true;
isOpen = serialPortHelper.openDevice();
if (!isOpen) {
notifyOpenFailed();
}
return isOpen;
}
public void closePort() {
if (!isOpen) return;
serialPortHelper.closeDevice();
isOpen = false;
notifyPortClosed();
}
// 发送数据
public void sendData(String hexData) {
if (hexData == null || hexData.length() % 2 != 0) {
throw new IllegalArgumentException("Invalid hex data");
}
serialPortHelper.addCommands(hexData);
}
// 设置回调
public void setCallback(SphResultCallback callback) {
this.callback = callback;
}
private void notifyOpenFailed() {
if (callback != null) {
callback.onComplete();
}
}
private void notifyPortClosed() {
if (callback != null) {
callback.onComplete();
}
}
public boolean isOpen() {
return isOpen;
}
}
\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!