Skip to content

Commit 2b38b39

Browse files
authored
Merge pull request #31 from cl-6666/2024-04-18-v4.0.1
打开效验位相关代码
2 parents e3a4f24 + 68b5b64 commit 2b38b39

File tree

2 files changed

+74
-52
lines changed

2 files changed

+74
-52
lines changed

app/src/main/java/com/cl/myapplication/MainJavaActivity.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,7 @@ public void openState(SerialPortEnum serialPortEnum, File device, SerialStatus s
157157
binding.spDatabits.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
158158
@Override
159159
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
160-
updateViewState(false);
161-
SerialUtils.getInstance().serialPortClose();
160+
closeSerialPort();
162161
SerialUtils.getInstance().getmSerialConfig().setDatabits(Integer.parseInt(databits[position]));
163162
}
164163

@@ -175,8 +174,7 @@ public void onNothingSelected(AdapterView<?> parent) {
175174
binding.spParity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
176175
@Override
177176
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
178-
updateViewState(false);
179-
SerialUtils.getInstance().serialPortClose();
177+
closeSerialPort();
180178
if (position == 0) {
181179
SerialUtils.getInstance().getmSerialConfig().setParity(0);
182180
} else if (position == 1) {
@@ -203,8 +201,7 @@ public void onNothingSelected(AdapterView<?> parent) {
203201
binding.spStopbits.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
204202
@Override
205203
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
206-
updateViewState(false);
207-
SerialUtils.getInstance().serialPortClose();
204+
closeSerialPort();
208205
SerialUtils.getInstance().getmSerialConfig().setStopbits(Integer.parseInt(stopbits[position]));
209206
}
210207

@@ -226,8 +223,7 @@ public void onNothingSelected(AdapterView<?> parent) {
226223

227224
binding.btnOpenDevice.setOnClickListener(v -> {
228225
if (mOpened) {
229-
SerialUtils.getInstance().serialPortClose();
230-
mOpened = false;
226+
closeSerialPort();
231227
} else {
232228
//多串口演示
233229
List<Driver> list = new ArrayList<>();
@@ -244,6 +240,11 @@ public void onNothingSelected(AdapterView<?> parent) {
244240
onSend();
245241
});
246242
}
243+
private void closeSerialPort() {
244+
SerialUtils.getInstance().serialPortClose();
245+
mOpened = false;
246+
updateViewState(mOpened);
247+
}
247248

248249
public static void verifyStoragePermissions(Activity activity) {
249250
try {

serial_lib/src/main/cpp/SerialPort.c

Lines changed: 65 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
13
/*
24
* Copyright 2009-2011 Cedric Priscal
35
*
@@ -32,40 +34,40 @@ static const char *TAG="serial_port";
3234

3335
static speed_t getBaudrate(jint baudrate)
3436
{
35-
switch(baudrate) {
36-
case 0: return B0;
37-
case 50: return B50;
38-
case 75: return B75;
39-
case 110: return B110;
40-
case 134: return B134;
41-
case 150: return B150;
42-
case 200: return B200;
43-
case 300: return B300;
44-
case 600: return B600;
45-
case 1200: return B1200;
46-
case 1800: return B1800;
47-
case 2400: return B2400;
48-
case 4800: return B4800;
49-
case 9600: return B9600;
50-
case 19200: return B19200;
51-
case 38400: return B38400;
52-
case 57600: return B57600;
53-
case 115200: return B115200;
54-
case 230400: return B230400;
55-
case 460800: return B460800;
56-
case 500000: return B500000;
57-
case 576000: return B576000;
58-
case 921600: return B921600;
59-
case 1000000: return B1000000;
60-
case 1152000: return B1152000;
61-
case 1500000: return B1500000;
62-
case 2000000: return B2000000;
63-
case 2500000: return B2500000;
64-
case 3000000: return B3000000;
65-
case 3500000: return B3500000;
66-
case 4000000: return B4000000;
67-
default: return -1;
68-
}
37+
switch(baudrate) {
38+
case 0: return B0;
39+
case 50: return B50;
40+
case 75: return B75;
41+
case 110: return B110;
42+
case 134: return B134;
43+
case 150: return B150;
44+
case 200: return B200;
45+
case 300: return B300;
46+
case 600: return B600;
47+
case 1200: return B1200;
48+
case 1800: return B1800;
49+
case 2400: return B2400;
50+
case 4800: return B4800;
51+
case 9600: return B9600;
52+
case 19200: return B19200;
53+
case 38400: return B38400;
54+
case 57600: return B57600;
55+
case 115200: return B115200;
56+
case 230400: return B230400;
57+
case 460800: return B460800;
58+
case 500000: return B500000;
59+
case 576000: return B576000;
60+
case 921600: return B921600;
61+
case 1000000: return B1000000;
62+
case 1152000: return B1152000;
63+
case 1500000: return B1500000;
64+
case 2000000: return B2000000;
65+
case 2500000: return B2500000;
66+
case 3000000: return B3000000;
67+
case 3500000: return B3500000;
68+
case 4000000: return B4000000;
69+
default: return -1;
70+
}
6971
}
7072

7173
/*
@@ -151,23 +153,42 @@ JNIEXPORT jobject JNICALL Java_com_kongqw_serialportlibrary_SerialPort_open
151153
return NULL;
152154
}
153155

154-
// Set parity
155156
switch (parity) {
156-
case 0: // None
157-
cfg.c_cflag &= ~PARENB;
157+
case 0:
158+
cfg.c_cflag &= ~PARENB; //PARITY OFF
158159
break;
159-
case 1: // Odd
160-
cfg.c_cflag |= PARENB;
161-
cfg.c_cflag |= PARODD;
160+
case 1:
161+
cfg.c_cflag |= (PARODD | PARENB); //PARITY ODD
162+
cfg.c_iflag &= ~IGNPAR;
163+
cfg.c_iflag |= PARMRK;
164+
cfg.c_iflag |= INPCK;
162165
break;
163-
case 2: // Even
166+
case 2:
167+
cfg.c_iflag &= ~(IGNPAR | PARMRK); //PARITY EVEN
168+
cfg.c_iflag |= INPCK;
164169
cfg.c_cflag |= PARENB;
165170
cfg.c_cflag &= ~PARODD;
166171
break;
172+
case 3:
173+
// PARITY SPACE
174+
cfg.c_iflag &= ~IGNPAR; // Make sure wrong parity is not ignored
175+
cfg.c_iflag |= PARMRK; // Marks parity error, parity error
176+
// is given as three char sequence
177+
cfg.c_iflag |= INPCK; // Enable input parity checking
178+
cfg.c_cflag |= PARENB | CMSPAR; // Enable parity and set space parity
179+
cfg.c_cflag &= ~PARODD; //
180+
break;
181+
case 4:
182+
// PARITY MARK
183+
cfg.c_iflag &= ~IGNPAR; // Make sure wrong parity is not ignored
184+
cfg.c_iflag |= PARMRK; // Marks parity error, parity error
185+
// is given as three char sequence
186+
cfg.c_iflag |= INPCK; // Enable input parity checking
187+
cfg.c_cflag |= PARENB | CMSPAR | PARODD;
188+
break;
167189
default:
168-
LOGE("Invalid parity");
169-
close(fd);
170-
return NULL;
190+
cfg.c_cflag &= ~PARENB;
191+
break;
171192
}
172193

173194
// Set baud rate

0 commit comments

Comments
 (0)