Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
zhouzhou
/
new_ser
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
b07046c9
authored
2025-02-21 17:03:04 +0800
by
17205857019@139.com
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
11
1 parent
25374a84
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
151 additions
and
32 deletions
.idea/gradle.xml
aa.txt
app/build.gradle
app/src/main/java/top/keepempty/MainActivity.java
ddtest/build.gradle
ddtest/src/main/AndroidManifest.xml
ddtest/src/main/java/com/example/ddtest/HexTool.java
ddtest/src/main/java/com/example/ddtest/SerialPortManager.java
.idea/gradle.xml
View file @
b07046c
...
...
@@ -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"
/>
...
...
aa.txt
0 → 100644
View file @
b07046c
File mode changed
app/build.gradle
View file @
b07046c
...
...
@@ -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'
)
}
...
...
app/src/main/java/top/keepempty/MainActivity.java
View file @
b07046c
...
...
@@ -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
;
...
...
@@ -137,8 +138,8 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
mSerialPortFinder
=
new
SerialPortFinder
();
entryValues
=
mSerialPortFinder
.
getAllDevicesPath
();
ArrayAdapter
<
String
>
adapter
=
new
ArrayAdapter
<
String
>(
this
,
android
.
R
.
layout
.
simple_spinner_item
,
entryValues
);
this
,
android
.
R
.
layout
.
simple_spinner_item
,
entryValues
);
mPathSpinner
.
setAdapter
(
adapter
);
mSendBtn
=
findViewById
(
R
.
id
.
sph_sendBtn
);
...
...
@@ -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
()
{
/**
* 串口参数
...
...
@@ -185,7 +186,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
serialPortConfig
.
path
=
path
;
serialPortConfig
.
baudRate
=
baudRate
;
serialPortConfig
.
dataBits
=
dataBits
;
serialPortConfig
.
parity
=
checkBits
;
serialPortConfig
.
parity
=
checkBits
;
serialPortConfig
.
stopBits
=
stopBits
;
...
...
@@ -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
);
}
}
...
...
ddtest/build.gradle
View file @
b07046c
...
...
@@ -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
...
...
ddtest/src/main/AndroidManifest.xml
View file @
b07046c
<?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
...
...
ddtest/src/main/java/com/example/ddtest/HexTool.java
View file @
b07046c
package
top
.
keepempty
.
utils
;
package
com
.
example
.
ddtest
;
import
java.io.UnsupportedEncodingException
;
...
...
ddtest/src/main/java/com/example/ddtest/SerialPortManager.java
0 → 100644
View file @
b07046c
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
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment