/*********************************************************************************
* TotalCross Software Development Kit *
* Copyright (C) 2000-2012 SuperWaba Ltda. *
* All Rights Reserved *
* *
* This library and virtual machine 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. *
* *
* This file is covered by the GNU LESSER GENERAL PUBLIC LICENSE VERSION 3.0 *
* A copy of this license is located in file license.txt at the root of this *
* SDK or can be downloaded here: *
* http://www.gnu.org/licenses/lgpl-3.0.txt *
* *
*********************************************************************************/
package totalcross.android.scanners;
import android.view.*;
import com.intermec.aidc.*;
import java.util.concurrent.*;
import totalcross.*;
import totalcross.android.*;
/**
* Scanner class for Android.
*/
public class IntermecScanner implements IScanner
{
private final static int INTERMEC_AUSTRALIAN_POST = 1;
private final static int INTERMEC_AZTEC = 2;
private final static int INTERMEC_BPO = 3;
private final static int INTERMEC_CANADA_POST = 4;
private final static int INTERMEC_CODABAR = 5;
private final static int INTERMEC_CODABLOCK_A = 6;
private final static int INTERMEC_CODABLOCK_F = 7;
private final static int INTERMEC_CODE_11 = 8;
private final static int INTERMEC_CODE_128 = 9;
private final static int INTERMEC_CODE_GS1_128 = 10;
private final static int INTERMEC_CODE_ISBT_128 = 11;
private final static int INTERMEC_CODE_39 = 12;
private final static int INTERMEC_CODE_93 = 13;
private final static int INTERMEC_DATA_MATRIX = 14;
private final static int INTERMEC_DUTCH_POST = 15;
private final static int INTERMEC_EAN_UPC_EAN_13 = 16;
private final static int INTERMEC_EAN_UPC_EAN_8 = 17;
private final static int INTERMEC_EAN_UPC_UPCA = 18;
private final static int INTERMEC_EAN_UPC_UPC_E = 19;
private final static int INTERMEC_EAN_UPC_UPC_E1 = 20;
private final static int INTERMEC_GS1_COMPOSITE = 21;
private final static int INTERMEC_GS1_COMPOSITE_C = 22;
private final static int INTERMEC_GS1_DATA_BAR_EXPANDED = 23;
private final static int INTERMEC_GS1_DATA_BAR_LIMITED = 24;
private final static int INTERMEC_GS1_OMINI_DIRECTIONAL = 25;
private final static int INTERMEC_HAN_XIN = 26;
private final static int INTERMEC_INFOMAIL = 27;
private final static int INTERMEC_INTELLIGENT_MAIL = 28;
private final static int INTERMEC_INTERLEAVED_2_OF_5 = 29;
private final static int INTERMEC_JAPAN_POST = 30;
private final static int INTERMEC_MATRIX_2_OF_5 = 31;
private final static int INTERMEC_MAXICODE = 32;
private final static int INTERMEC_MICRO_PDF_417 = 33;
private final static int INTERMEC_MSI = 34;
private final static int INTERMEC_PDF_417 = 35;
private final static int INTERMEC_PLANET = 36;
private final static int INTERMEC_PLESSEY = 37;
private final static int INTERMEC_POSTNET = 38;
private final static int INTERMEC_QR_CODE = 39;
private final static int INTERMEC_STANDARD_2_OF_5 = 40;
private final static int INTERMEC_SWEDEN_POST = 41;
private final static int INTERMEC_TELEPEN = 42;
private final static int INTERMEC_TLC_39 = 43;
private BarcodeReader bcr;
private VirtualWedge wedg;
private boolean isOk;
private Semaphore semaphore = new Semaphore(1);
public boolean scannerActivate()
{
// Make sure the BarcodeReader dependent service is connected and
// register a callback to service connect and disconnect events.
AidcManager.connectService(Launcher4A.loader, new AidcManager.IServiceListener()
{
public void onConnect()
{
try
{
semaphore.acquire();
}
catch (InterruptedException exception) {}
attachBarcodeReader(); // The dependent service is connected and it is ready to receive barcode requests.
semaphore.release();
}
public void onDisconnect() {}
});
return isOk;
}
public boolean setBarcodeParam(int barcodeType, boolean enable)
{
if (bcr == null)
return false;
try
{
semaphore.acquire();
}
catch (InterruptedException exception) {}
switch (barcodeType)
{
case INTERMEC_AUSTRALIAN_POST:
bcr.symbology.australianPost.setEnable(enable);
break;
case INTERMEC_AZTEC:
bcr.symbology.aztec.setEnable(enable);
break;
case INTERMEC_BPO:
bcr.symbology.bpo.setEnable(enable);
break;
case INTERMEC_CANADA_POST:
bcr.symbology.canadaPost.setEnable(enable);
break;
case INTERMEC_CODABAR:
bcr.symbology.codabar.setEnable(enable);
break;
case INTERMEC_CODABLOCK_A:
bcr.symbology.codablockA.setEnable(enable);
break;
case INTERMEC_CODABLOCK_F:
bcr.symbology.codablockF.setEnable(enable);
break;
case INTERMEC_CODE_11:
bcr.symbology.code11.setEnable(enable);
break;
case INTERMEC_CODE_128:
bcr.symbology.code128.setEnable(enable);
break;
case INTERMEC_CODE_GS1_128:
bcr.symbology.code128.setGS1_128Enable(enable);
break;
case INTERMEC_CODE_ISBT_128:
bcr.symbology.code128.setISBT128Enable(enable);
break;
case INTERMEC_CODE_39:
bcr.symbology.code39.setEnable(enable);
break;
case INTERMEC_CODE_93:
bcr.symbology.code93.setEnable(enable);
break;
case INTERMEC_DATA_MATRIX:
bcr.symbology.datamatrix.setEnable(enable);
break;
case INTERMEC_DUTCH_POST:
bcr.symbology.dutchPost.setEnable(enable);
break;
case INTERMEC_EAN_UPC_EAN_13:
bcr.symbology.eanUpc.setEan13Enable(enable);
break;
case INTERMEC_EAN_UPC_EAN_8:
bcr.symbology.eanUpc.setEan8Enable(enable);
break;
case INTERMEC_EAN_UPC_UPCA:
bcr.symbology.eanUpc.setUPCAEnable(enable);
break;
case INTERMEC_EAN_UPC_UPC_E:
bcr.symbology.eanUpc.setUPCEEnable(enable);
break;
case INTERMEC_EAN_UPC_UPC_E1:
bcr.symbology.eanUpc.setUPCE1Enable(enable);
break;
case INTERMEC_GS1_COMPOSITE:
bcr.symbology.gs1Composite.setEnable(enable);
break;
case INTERMEC_GS1_COMPOSITE_C:
bcr.symbology.gs1Composite.setGS1CompositeCEnable(enable);
break;
case INTERMEC_GS1_DATA_BAR_EXPANDED:
bcr.symbology.gs1DataBarExpanded.setEnable(enable);
break;
case INTERMEC_GS1_DATA_BAR_LIMITED:
bcr.symbology.gs1DataBarLimited.setEnable(enable);
break;
case INTERMEC_GS1_OMINI_DIRECTIONAL:
bcr.symbology.gs1DataBarOmniDirectional.setEnable(enable);
break;
case INTERMEC_HAN_XIN:
bcr.symbology.hanXin.setEnable(enable);
break;
case INTERMEC_INFOMAIL:
bcr.symbology.infomail.setEnable(enable);
break;
case INTERMEC_INTELLIGENT_MAIL:
bcr.symbology.intelligentMail.setEnable(enable);
break;
case INTERMEC_INTERLEAVED_2_OF_5:
bcr.symbology.interleaved2Of5.setEnable(enable);
break;
case INTERMEC_JAPAN_POST:
bcr.symbology.japanPost.setEnable(enable);
break;
case INTERMEC_MATRIX_2_OF_5:
bcr.symbology.matrix2Of5.setEnable(enable);
break;
case INTERMEC_MAXICODE:
bcr.symbology.maxicode.setEnable(enable);
break;
case INTERMEC_MICRO_PDF_417:
bcr.symbology.microPdf417.setEnable(enable);
break;
case INTERMEC_MSI:
bcr.symbology.msi.setEnable(enable);
break;
case INTERMEC_PDF_417:
bcr.symbology.pdf417.setEnable(enable);
break;
case INTERMEC_PLANET:
bcr.symbology.planet.setEnable(enable);
break;
case INTERMEC_PLESSEY:
bcr.symbology.plessey.setEnable(enable);
break;
case INTERMEC_POSTNET:
bcr.symbology.postnet.setEnable(enable);
break;
case INTERMEC_QR_CODE:
bcr.symbology.qrCode.setEnable(enable);
break;
case INTERMEC_STANDARD_2_OF_5:
bcr.symbology.standard2Of5.setEnable(enable);
break;
case INTERMEC_SWEDEN_POST:
bcr.symbology.swedenPost.setEnable(enable);
break;
case INTERMEC_TELEPEN:
bcr.symbology.telepen.setEnable(enable);
break;
case INTERMEC_TLC_39:
bcr.symbology.tlc39.setEnable(enable);
break;
}
semaphore.release();
return true;
}
public String getData()
{
String strBarcodeData;
Semaphore loaderSemaphore = Loader.semaphore;
try
{
loaderSemaphore.acquire();
}
catch (InterruptedException exception) {}
strBarcodeData = Launcher4A.loader.strBarcodeData;
loaderSemaphore.release();
return strBarcodeData;
}
public boolean deactivate()
{
if (bcr == null) return true;
boolean ret = true;
try
{
if (bcr != null)
{
bcr.removeBarcodeReadListener(Launcher4A.loader);
bcr.setScannerEnable(false);
bcr.close();
}
}
catch (Exception exception)
{
String message = exception.getMessage();
AndroidUtils.debug(message != null? message : "Could not deactivate scanner.");
ret = false;
}
try
{
if (wedg != null)
{
wedg.setEnable(true);
wedg = null;
}
}
catch (Exception exception)
{
String message = exception.getMessage();
AndroidUtils.debug(message != null? message : "Could not deactivate scanner.");
ret = false;
}
try
{
AidcManager.disconnectService(); //disconnect from data collection service
}
catch (Exception exception)
{
String message = exception.getMessage();
AndroidUtils.debug(message != null? message : "Could not deactivate scanner.");
ret = false;
}
bcr = null;
return ret;
}
private void attachBarcodeReader()
{
isOk = true;
try
{
if ((wedg = new VirtualWedge()).isEnabled())
wedg.setEnable(false); // disable virtual wedge
}
catch (Exception exception)
{
String message = exception.getMessage();
AndroidUtils.debug(message != null? message : "Could not activate scanner.");
wedg = null;
isOk = false;
}
try
{
if (!(bcr = new BarcodeReader()).isScannerEnabled())
bcr.setScannerEnable(true); // set barcode reader object for internal scanner
bcr.addBarcodeReadListener(Launcher4A.loader); // add barcode reader listener
}
catch (Exception exception)
{
String message = exception.getMessage();
AndroidUtils.debug(message != null? message : "Could not activate scanner.");
bcr = null;
isOk = false;
}
}
public boolean checkScanner(KeyEvent event)
{
return false;
}
}