Tuesday, November 30, 2010

Reading and writing(To Database) data from comm port in Java

This code reads data from comm port and writes it to the data base(MS-Access) to work with this code you may need javax.comm library, this code works with 8051 micro-controller, this code first writes 0x80(128) to comm port and my code in assembly sends it back 0x32(50). and then the code sends 7 bits more with 0x70 to terminate the communication, This code is written with NetBeans IDE you can change accordingly your IDE

import java.io.*;
import java.util.*;
import javax.comm.*;
import java.sql.Connection;
import  java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Fms implements Runnable{
    static Enumeration portList;
    static CommPortIdentifier portId;
    static SerialPort serialPort;
    static OutputStream outputStream;
    static InputStream inputStream;
    static Thread readThread,dataBase;
    static int crf;
    static int cwf;
    static byte cxc[] = new byte[4];
    static int cxm = 128;//0x80
    static byte[] creadBuffer;//1byte read
    static int creadBuff[];
    write rt=new write();
    static read rd;

     public void run() {
     };

    public static void main(String[] args) {

        int a=10;
        write wr = new write();
        read rd = new read(1);
       
        int speed=0,tcount=0,jcount=0,status=0;
     
            try{
        wr.cwritemain(a);
         rd.cmainx(a);         
         readThread.sleep(1000);
            }
            catch(Exception e){
               
            }
            if(j==0){
                status =creadBuff[1];
                jcount =creadBuff[5];
          System.out.println("results : "+status +"\t"+jcount);
            }
            if(j==1){
                speed =creadBuff[1]*256+creadBuff[2];
                tcount =creadBuff[6];
          System.out.println("results : "+speed +"\t"+tcount);
            }     
          try{                
                ResultSet rs;
            Statement stmt;
            Connection con;
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\Documents and Settings\\accounts\\My Documents\\FMSDB.mdb");
      stmt=con.createStatement();
      stmt.executeUpdate("INSERT INTO Job_Status (Speed,Job_Count, Total_Count)" + "VALUES('"+speed+"','"+jcount+"','"+tcount+"')" );
     // rs=stmt.executeQuery("Select * from Job_Status where Date = '27-11-2010'" );
      stmt.close();
      con.close();
       }     
         catch(Exception e1) 
      { 
             System.out.println(e1);
      }
     
    }
   static class write{       
         public void cwritemain(int m)
  {
          //   System.out.println("in cwritemain");
             cwf = m;
             cxc[0] = 0x26;
             portList = CommPortIdentifier.getPortIdentifiers();
             System.out.println(portList.hasMoreElements());

   while (portList.hasMoreElements()) {
                                    //    System.out.println("in while");
                                        portId = (CommPortIdentifier) portList.nextElement();
                                        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                                      //  System.out.println("in port");
     if (portId.getName().equals("COM1"))
     {
                                     //   System.out.println("in com");
      try {
       serialPort = (SerialPort) portId.open("SimpleWriteApp32", 2000);
                                                     //   System.out.println("in open");
      } catch (PortInUseException e) {
      }
      try {
       outputStream = serialPort.getOutputStream();
      } catch (Exception e) {
      }
      try {
       serialPort.setSerialPortParams(9600,
         SerialPort.DATABITS_8,
         SerialPort.STOPBITS_1,
         SerialPort.PARITY_NONE);
      } catch (Exception e) {
      }
                                               if(cwf==10){
       try {
       // System.out.println("in 400");
        outputStream.write(cxm);// 0x80 written
        //System.out.println("0x80 is written");
        serialPort.close();
                                                                outputStream.close();
        
       } catch (Exception e) {
       }
                                               }
                                        }
                                }
                        }
         }
       
    }

   static class read implements SerialPortEventListener{
      public read(int s) {

  }
      public void cmainx(int cp) {
   crf = 10;

   portList = CommPortIdentifier.getPortIdentifiers();

   while (portList.hasMoreElements()) {

    portId = (CommPortIdentifier) portList.nextElement();
    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
     if (portId.getName().equals("COM1")) {
      try {
                                                    serialPort = (SerialPort) portId.open("readapp32",
         2000);
      } catch (PortInUseException e) {
       System.out.println(e.getMessage());
      }
      try {
       inputStream = serialPort.getInputStream();
       // System.out.println("ready reading");
      } catch (Exception e) {
       System.out.println(e);
      }
      try {
       serialPort.addEventListener(this);
      } catch (Exception e) {
       System.out.println(e);
      }
      serialPort.notifyOnDataAvailable(true);
      try {
       serialPort.setSerialPortParams(9600,
         SerialPort.DATABITS_8,
         SerialPort.STOPBITS_1,
         SerialPort.PARITY_NONE);
                                                     //   System.out.println("Kam rady hai!!!");
      } catch (Exception e) {
       System.out.println(e);
      }
     }
    }
   }                     
  }
        public void serialEvent(SerialPortEvent event) {
             //System.out.println("Kam rady hai bhai!!!");
           
            switch (event.getEventType()) {
   case SerialPortEvent.DATA_AVAILABLE:
    creadBuffer = new byte[8];
                                creadBuff= new int[8];
    try {
                                   int i = 0;
                             
     while (inputStream.available() > 0) {
   
      
                                          creadBuff[i]=inputStream.read();
                                          System.out.println("Data available is: "+creadBuff[i]);
                                        //       if(i==1)
                                          //     System.out.println("Data available is: "+creadBuff[1]*256);
                                               
                                               i++;
     }
                                      inputStream.close();
    } catch (IOException e) {
    }
                                System.out.println("event");
    System.out.println("recieved \t"+creadBuffer[0] );

    if (creadBuffer[0] == 0x70) {
                                    System.out.println("Mil gaya 0x70"+creadBuffer[0] );
     serialPort.close();
     rd = new read(5);
     rd.cmainx(1);// ag
                                }
                                if (creadBuffer[0] == 0x32) {
                                    System.out.println("Mil gaya"+creadBuffer[0] );
     serialPort.close();                               
                                }
                                serialPort.close();
            }
        }
   } 
   }