99import android .widget .Button ;
1010import android .widget .CheckBox ;
1111import android .widget .EditText ;
12+ import android .widget .ImageButton ;
1213import android .widget .LinearLayout ;
1314import android .widget .RadioButton ;
1415import android .widget .TextView ;
@@ -53,8 +54,8 @@ public class MainActivity extends BaseActivity {
5354 NiceSpinner mSpinnerBaudrate ;
5455 @ BindView (R .id .btn_switch )
5556 Button mBtnSwitch ;
56- @ BindView (R .id .area_device )
57- LinearLayout mAreaDevice ;
57+ @ BindView (R .id .area_serial )
58+ LinearLayout mAreaSerial ;
5859 @ BindView (R .id .label_fun )
5960 TextView mLabelFun ;
6061 @ BindView (R .id .rb_func01 )
@@ -113,6 +114,17 @@ public class MainActivity extends BaseActivity {
113114 Button mBtnSwitchTcp ;
114115 @ BindView (R .id .area_tcp )
115116 LinearLayout mAreaTcp ;
117+ @ BindView (R .id .spinner_databits )
118+ NiceSpinner mSpinnerDatabits ;
119+ @ BindView (R .id .spinner_parity )
120+ NiceSpinner mSpinnerParity ;
121+ @ BindView (R .id .spinner_stopbits )
122+ NiceSpinner mSpinnerStopbits ;
123+ @ BindView (R .id .area_serial2 )
124+ LinearLayout mAreaSerial2 ;
125+ @ BindView (R .id .btn_more_params )
126+ ImageButton mBtnMoreParams ;
127+
116128 private String [] mDevicePaths ;
117129 private String [] mBaudrateStrs ;
118130 private DeviceConfig mDeviceConfig ;
@@ -129,6 +141,9 @@ public class MainActivity extends BaseActivity {
129141 public static final int MODE_SERIAL = 1 ;
130142 public static final int MODE_TCP = 2 ;
131143 private int mMode ;
144+ private int mDataBits ;
145+ private int mParity ;
146+ private int mStopBits ;
132147
133148 @ IntDef ({
134149 MODE_SERIAL , MODE_TCP
@@ -160,17 +175,23 @@ public void onCheckedChanged(XRadioGroup xRadioGroup, int i) {
160175
161176 onRadioGroupUpdate (mRgFunc .getCheckedRadioButtonId ());
162177
178+ initSerialWidgets ();
179+
180+ updateDeviceSwitchButton ();
181+ updateMoreParamsButtonImage ();
182+ }
183+
184+ /**
185+ * 初始化串口相关的控件
186+ */
187+ private void initSerialWidgets () {
163188 mDeviceConfig = DeviceConfig .get ();
164189 mDevicePaths = mDeviceConfig .getDevicePaths ();
165190 mBaudrateStrs = mDeviceConfig .getBaudrateStrs ();
166191 mBaudrates = mDeviceConfig .getBaudrates ();
167192
193+ // 串口地址选择
168194 mSpinnerDevices .attachDataSource (Arrays .asList (mDevicePaths ));
169- mSpinnerBaudrate .attachDataSource (Arrays .asList (mBaudrateStrs ));
170-
171- mDeviceIndex = mDeviceConfig .findDeviceIndex (mDeviceConfig .getDevice ());
172- mBaudrateIndex = mDeviceConfig .findBaudrateIndex (mDeviceConfig .getBaudrate ());
173-
174195 mSpinnerDevices .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
175196 @ Override
176197 public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
@@ -182,7 +203,11 @@ public void onNothingSelected(AdapterView<?> parent) {
182203
183204 }
184205 });
206+ mDeviceIndex = mDeviceConfig .findDeviceIndex (mDeviceConfig .getDevice ());
207+ mSpinnerDevices .setSelectedIndex (mDeviceIndex );
185208
209+ // 波特率选择
210+ mSpinnerBaudrate .attachDataSource (Arrays .asList (mBaudrateStrs ));
186211 mSpinnerBaudrate .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
187212 @ Override
188213 public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
@@ -194,29 +219,83 @@ public void onNothingSelected(AdapterView<?> parent) {
194219
195220 }
196221 });
197-
198- mSpinnerDevices .setSelectedIndex (mDeviceIndex );
222+ mBaudrateIndex = mDeviceConfig .findBaudrateIndex (mDeviceConfig .getBaudrate ());
199223 mSpinnerBaudrate .setSelectedIndex (mBaudrateIndex );
200224
201- updateDeviceSwitchButton ();
225+ // 数据位
226+ final int [] dataBitsArray = { 5 , 6 , 7 , 8 };
227+ mSpinnerDatabits .attachDataSource (Arrays .asList ("5" , "6" , "7" , "8" ));
228+ mSpinnerDatabits .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
229+ @ Override
230+ public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
231+ mDataBits = dataBitsArray [position ];
232+ }
233+
234+ @ Override
235+ public void onNothingSelected (AdapterView <?> parent ) {
236+
237+ }
238+ });
239+ mDataBits = dataBitsArray [3 ];
240+ mSpinnerDatabits .setSelectedIndex (3 );
241+
242+ // 校验位
243+ final int [] parityArray = { 0 , 1 , 2 };
244+ mSpinnerParity .attachDataSource (Arrays .asList ("0 (NONE)" , "1 (ODD)" , "2 (EVEN)" ));
245+ mSpinnerParity .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
246+ @ Override
247+ public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
248+ mParity = parityArray [position ];
249+ }
250+
251+ @ Override
252+ public void onNothingSelected (AdapterView <?> parent ) {
253+
254+ }
255+ });
256+ mParity = parityArray [0 ];
257+ mSpinnerParity .setSelectedIndex (0 );
258+
259+ // 停止位
260+ final int [] stopBitsArray = { 1 , 2 };
261+ mSpinnerStopbits .attachDataSource (Arrays .asList ("1" , "2" ));
262+ mSpinnerStopbits .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
263+ @ Override
264+ public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
265+ mStopBits = stopBitsArray [position ];
266+ }
267+
268+ @ Override
269+ public void onNothingSelected (AdapterView <?> parent ) {
270+
271+ }
272+ });
273+ mStopBits = stopBitsArray [0 ];
274+ mSpinnerStopbits .setSelectedIndex (0 );
202275 }
203276
204277 private void resolveIntent (Bundle savedInstanceState ) {
205278 Intent intent = getIntent ();
206279 mMode = intent .getIntExtra ("mode" , MODE_SERIAL );
207280 if (savedInstanceState != null ) {
208281 mMode = savedInstanceState .getInt ("mode" , MODE_SERIAL );
282+ //mDataBits = savedInstanceState.getInt("dataBits", 8);
283+ //mParity = savedInstanceState.getInt("parity", 0);
284+ //mStopBits = savedInstanceState.getInt("stopBits", 1);
209285 }
210286
211287 LogPlus .e ("mode=" + mMode );
212288
213- mAreaDevice .setVisibility (mMode == MODE_SERIAL ? View .VISIBLE : View .GONE );
289+ mAreaSerial .setVisibility (mMode == MODE_SERIAL ? View .VISIBLE : View .GONE );
214290 mAreaTcp .setVisibility (mMode == MODE_TCP ? View .VISIBLE : View .GONE );
215291 }
216292
217293 @ Override
218294 protected void onSaveInstanceState (Bundle outState ) {
219295 outState .putInt ("mode" , mMode );
296+ //outState.putInt("dataBits", mDataBits);
297+ //outState.putInt("parity", mParity);
298+ //outState.putInt("stopBits", mStopBits);
220299 super .onSaveInstanceState (outState );
221300 }
222301
@@ -227,10 +306,22 @@ protected void onDestroy() {
227306 }
228307
229308 @ OnClick ({
230- R .id .btn_switch , R .id .btn_send , R .id .btn_clear_record , R .id .btn_switch_tcp
309+ R .id .btn_switch , R .id .btn_send , R .id .btn_clear_record , R .id .btn_switch_tcp ,
310+ R .id .btn_more_params
231311 })
232312 public void onClick (View view ) {
233313 switch (view .getId ()) {
314+ case R .id .btn_more_params : {
315+
316+ if (mAreaSerial2 .getVisibility () == View .VISIBLE ) {
317+ mAreaSerial2 .setVisibility (View .GONE );
318+ } else {
319+ mAreaSerial2 .setVisibility (View .VISIBLE );
320+ }
321+
322+ updateMoreParamsButtonImage ();
323+ break ;
324+ }
234325 case R .id .btn_switch :
235326 case R .id .btn_switch_tcp :
236327 openDevice ();
@@ -244,6 +335,15 @@ public void onClick(View view) {
244335 }
245336 }
246337
338+ /**
339+ * 更新更多参数按钮的图标
340+ */
341+ private void updateMoreParamsButtonImage () {
342+ mBtnMoreParams .setImageResource (mAreaSerial2 .getVisibility () == View .VISIBLE
343+ ? R .drawable .ic_keyboard_arrow_up_black_32dp
344+ : R .drawable .ic_keyboard_arrow_down_black_32dp );
345+ }
346+
247347 /**
248348 * 打开设备
249349 */
@@ -263,7 +363,11 @@ private void openDevice() {
263363 int baudrate = mBaudrates [mBaudrateIndex ];
264364
265365 mDeviceConfig .updateSerialConfig (path , baudrate );
266- param = SerialParam .create (path , baudrate ).setTimeout (1000 ).setRetries (0 ); // 不重试
366+ param = SerialParam .create (path , baudrate ) // 串口地址和波特率
367+ .setDataBits (mDataBits ) // 数据位
368+ .setParity (mParity ) // 校验位
369+ .setStopBits (mStopBits ) // 停止位
370+ .setTimeout (1000 ).setRetries (0 ); // 不重试
267371 } else {
268372 // TCP
269373 String host = mEtHost .getText ().toString ().trim ();
@@ -303,10 +407,16 @@ public void onFinally() {
303407 * 切换界面状态
304408 */
305409 private void updateDeviceSwitchButton () {
306- if (ModbusManager .get ().isModbusOpened ()) {
410+ boolean modbusOpened = ModbusManager .get ().isModbusOpened ();
411+
412+ if (modbusOpened ) {
307413 mBtnSwitch .setText ("断开" );
308414 mSpinnerDevices .setEnabled (false );
309415 mSpinnerBaudrate .setEnabled (false );
416+ mAreaSerial2 .setEnabled (false );
417+ mSpinnerDatabits .setEnabled (false );
418+ mSpinnerParity .setEnabled (false );
419+ mSpinnerStopbits .setEnabled (false );
310420
311421 mBtnSwitchTcp .setText ("断开" );
312422 mEtHost .setEnabled (false );
@@ -317,6 +427,10 @@ private void updateDeviceSwitchButton() {
317427 mBtnSwitch .setText ("连接" );
318428 mSpinnerDevices .setEnabled (true );
319429 mSpinnerBaudrate .setEnabled (true );
430+ mAreaSerial2 .setEnabled (true );
431+ mSpinnerDatabits .setEnabled (true );
432+ mSpinnerParity .setEnabled (true );
433+ mSpinnerStopbits .setEnabled (true );
320434
321435 mBtnSwitchTcp .setText ("连接" );
322436 mEtHost .setEnabled (true );
@@ -373,7 +487,6 @@ private void appendError(String func, Throwable tr) {
373487 private void appendText (String text ) {
374488 mTvConsole .append (text );
375489 }
376-
377490
378491 private void send01 () {
379492
0 commit comments