java Source

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 24 Stories :: 8 Comments :: 0 Trackbacks
1.Library:RXTXComm.jar



/*

 * GPSSerialPortScaner.java
 * Copyright (C) 2009  <JustinLei@gmail.com>
 *
 *        This program is free software; you can redistribute it and/or modify
 *        it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *     (at your option) any later version.
 *
 *       This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *        GNU General Public License for more details.
 *
 
*/
package org.lambdasoft.serial.gps;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;

import java.io.InputStream;
import java.util.Enumeration;

import org.lambdasoft.ui.dialog.BubbleDialog;
import org.lambdasoft.ui.systray.statusbar.StatusBar;
import org.lambdasoft.util.StringUtils;

/**
 * 
@author lei.tang (justinlei@gmail.com)
 * @date 2010-3-8
 * 
@version
 
*/
public class GPSSerialPortScaner {
    
private static GPSSerialPortScaner finder;
    
private static final int SCANTIME = 2000;
    
private static final int[] PORTSPEED = new int[]{4800,9600};
    
private GPSSerialPortScaner() {}
    
    
public static GPSSerialPortScaner getScaner() {
        
if(finder == null)
            finder 
= new GPSSerialPortScaner();
        
return finder;
    }

    
public String scan() {
        BubbleDialog.getBubble().display(
"GPS设备自动搜索中",false,false);
        
for (int speed : PORTSPEED) {
            String port 
= scan(speed);
            
if(StringUtils.isNotEmpty(port))
                
return port;
        }
        
return null;
    }
    
    @SuppressWarnings(
"unchecked")
    
public String scan(Integer speed) {
        StatusBar statusBar 
= StatusBar.getBar();
        Enumeration
<CommPortIdentifier> commons = CommPortIdentifier.getPortIdentifiers();
        CommPortIdentifier com 
= null;
        CommPort serialPort 
= null;
        
while (commons.hasMoreElements()) {
            com 
= commons.nextElement();
            
if(statusBar != null)
                statusBar.setGPSInfo(
"扫描GPS设备:" + com.getName() + " 扫描速率:" + speed);
            
try {
                serialPort 
= com.open("PortOpener"10);
            } 
catch (PortInUseException piue) {
                serialPort 
= null;
                
continue;
            }
            
if (com.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                SerialPort sp 
= (SerialPort) serialPort;
                
try {
                    
// Settings for B&G Hydra
                    sp.setSerialPortParams(speed.intValue(), SerialPort.DATABITS_8,
                            SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                } 
catch (UnsupportedCommOperationException ucoe) {
                    serialPort 
= null;
                    
continue;
                }
            }
            
try {
                InputStream input 
= serialPort.getInputStream();
                
int readChar = -1;
                
long currentTime = System.currentTimeMillis();
                
while((System.currentTimeMillis() - currentTime) <= SCANTIME) {
                    
if((readChar = input.read()) == -1) {
                        
continue;
                    }
                    
if((char)readChar == '$') {
                        StringBuilder builder 
= new StringBuilder();
                        
for (int j = 0; j < 5; j++) {
                            builder.append((
char)(input.read()));
                        }
                        String head 
= builder.toString();
                        
if(head.equals("GPGGA")) {
                            serialPort.close();
                            
if(statusBar != null) {
                                String successMsg 
= "GPS设备在端口" + com.getName() +"初始化成功,速率: " + speed;
                                BubbleDialog.getBubble().display(successMsg,
false,true);
                                statusBar.setGPSInfo(successMsg);
                            }
                            
return com.getName();
                        }
                    }
                }
            } 
catch (Exception e) {
                
return null;
            }
            serialPort.close();
        }
        
if(serialPort != null)
            serialPort.close();
        
return null;
    }
}
posted on 2010-04-06 16:47 JustinLei 阅读(1471) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: