package com.youchain.rfid; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Calendar; import java.util.HashSet; import java.util.Vector; import javax.swing.*; import com.uhf.api.cls.BackReadOption; import com.uhf.api.cls.GpiInfo_ST; import com.uhf.api.cls.GpiTriggerBoundaryListener; import com.uhf.api.cls.GpiTriggerBoundaryReasonType; import com.uhf.api.cls.GpiTriggerBoundaryType; import com.uhf.api.cls.GpiTriggerListener; import com.uhf.api.cls.GpiTrigger_Type; import com.uhf.api.cls.ReadExceptionListener; import com.uhf.api.cls.ReadListener; import com.uhf.api.cls.Reader; import com.uhf.api.cls.Reader.AntPower; import com.uhf.api.cls.Reader.AntPowerConf; import com.uhf.api.cls.Reader.EmbededData_ST; import com.uhf.api.cls.Reader.Inv_Potl; import com.uhf.api.cls.Reader.Inv_Potls_ST; import com.uhf.api.cls.Reader.Lock_Obj; import com.uhf.api.cls.Reader.Lock_Type; import com.uhf.api.cls.Reader.Mtr_Param; import com.uhf.api.cls.Reader.READER_ERR; import com.uhf.api.cls.Reader.SL_TagProtocol; import com.uhf.api.cls.Reader.TAGINFO; import com.uhf.api.cls.Reader.TagFilter_ST; import com.youchain.utils.BaseStatus; public class LongTermAsyncRead extends JFrame{ JButton jbt1; JButton jbt2; Vector vt=new Vector(); JList jlist; ReaderExceptionChecker rechecker = new ReaderExceptionChecker(3, 60); public LongTermAsyncRead(int h,int w) { super(); Container coter=this.getContentPane(); this.setLayout(null); jbt1=new JButton("开始盘存"); jbt1.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if (StartReadTags()!= READER_ERR.MT_OK_ERR) { MessageBox("开始盘存失败"); return; } } }); jbt2=new JButton("停止盘存"); jbt2.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // System.out.println("盘存打印:"+vt); // TODO Auto-generated method stub if (rdr.StopReading() != READER_ERR.MT_OK_ERR) { MessageBox("停止盘存失败"); return; } } }); jlist=new JList(); coter.add(jbt1); coter.add(jbt2); coter.add(jlist); int stx=50,sty=20,ey=20,bx=100,by=25; jbt1.setBounds(stx, sty, bx, by); jbt2.setBounds(stx, sty+ey+by, bx, by); jlist.setBounds(jbt1.location().x+jbt1.size().width+50, jbt1.location().y, 400, 200); // this.setContentPane(coter); this.setBounds(0, 0, w, h); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setVisible(true); if(OpenReader()!=READER_ERR.MT_OK_ERR) { MessageBox("初始化读写器失败,请检查设备地址以及类型,重新打开"); return; } setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if(rdr!=null) { rdr.StopReading(); rdr.CloseReader(); } System.exit(0); } }); } void MessageBox(String mes) { JOptionPane.showMessageDialog(null, mes, "消息提示", JOptionPane.INFORMATION_MESSAGE); } ReadListener RL=new ReadListener() { @Override public void tagRead(Reader r, final TAGINFO[] tag) { // TODO Auto-generated method stub //可以对读到的标签做进一步的读,写,锁和GPIO等操作****************************** /* //以下示例写入两个块的数据到盘存到的标签的USER区中。 //注:只有在非高速盘存模式下才可以进行其它的标签操作,高速盘存模式下禁 //止再进行其它标签操作,否则盘存操作将被终止,其它的标签操作也不会成功。 //但GPIO的操作是例外,不论哪种盘存模式都可以在此处操作GPIO TagFilter_ST oldfilter=rdr.new TagFilter_ST(); byte[] wdata=new byte[4]; wdata[0] = 0x12; wdata[1] = 0x34; wdata[2] = 0x56; wdata[3] = 0x78; READER_ERR er = READER_ERR.MT_OK_ERR; //先将盘存的过滤条件保存,因为对标签进行写操作的时候也需要设置过滤条件, //此过滤条件可能和盘存的过滤条件不同,在完成写操作后还需要将盘存的过滤 //条件恢复。不用检查返回值,不会失败 er=rdr.ParamGet(Mtr_Param.MTR_PARAM_TAG_FILTER, oldfilter); TagFilter_ST newfilter=rdr.new TagFilter_ST(); newfilter.bank=1; newfilter.fdata=tag[0].EpcId; newfilter.flen=tag[0].Epclen*8; newfilter.isInvert=0; newfilter.startaddr=32; //设置写标签操作时的过滤条件(以标签的EPC码为过滤条件) er=rdr.ParamSet(Mtr_Param.MTR_PARAM_TAG_FILTER, newfilter); //一般使用标签被盘存到时的天线编号作为进一步操作的天线 er = rdr.WriteTagData(tag[0].AntennaID, (char)3, 0, wdata, 4, null, (short)1000); if (er != READER_ERR.MT_OK_ERR) { //操作有可能失败(很多原因可能造成操作失败,常见的比如标签速度过快, //已经不在天线场内) } if (oldfilter.flen == 0) //表示盘存时没有设置过滤条件 rdr.ParamSet(Mtr_Param.MTR_PARAM_TAG_FILTER, null); else //恢复盘存时的过滤条件 rdr.ParamSet(Mtr_Param.MTR_PARAM_TAG_FILTER, oldfilter); //设置GPO1为1 //* if (rdr.SetGPO(1, 1) != READER_ERR.MT_OK_ERR) { //操作有可能失败,比如由于断网 } //*/ SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { //System.out.println("update ui ..."); for(int i=0;i