Scanner Config for ITF(2 of 5) / Code-2of5 Interleaved in EMDK Library - Xamarin

I am trying to scan ITF(2 of 5) / Code-2of5 Interleaved barcode using emdk for Xamarin but which not working in my application.
I believe the issue is something related to my configuration. But not sure what went wrong in my code. Please find the source code I am using for your reference.

# I am attaching the barcode which I am trying to scan for your reference.
# Also Please find the Full sample app, That may help you to debug.

Link to download the sample app.

https://drive.google.com/open?id=1RFrSDa7n9Dct7TGF8IbAI7V-dXDM3kUO

public class EMDKWrapper : Java.Lang.Object, EMDKManager.IEMDKListener
{
#region Properties
EMDKManager _emdkManager;
BarcodeManager _barcodeManager;
Scanner _scanner;
Context pageContext;
#endregion

#region Delegates
public Action<ScanDataCollection.ScanData> ScannedDataResponse;
#endregion

#region .ctor
public EMDKWrapper(Context context)
{
pageContext = context;
}
#endregion

#region Public Methods
public void InitializeScanner()
{
var results = EMDKManager.GetEMDKManager(pageContext, this);
if (results.StatusCode != EMDKResults.STATUS_CODE.Success)
{
#if DEBUG
Toast.MakeText(pageContext, "Error opening the EMDK Manager", ToastLength.Long).Show();
#endif
}
else
{
#if DEBUG
Toast.MakeText(pageContext, "EMDK Manager is available", ToastLength.Long).Show();
#endif
}

}
public void InitScanner()
{
if (_emdkManager != null)
{

if (_barcodeManager == null)
{
try
{
//Get the feature object such as BarcodeManager object for accessing the feature.
_barcodeManager = (BarcodeManager)_emdkManager.GetInstance(EMDKManager.FEATURE_TYPE.Barcode);

_scanner = _barcodeManager.GetDevice(BarcodeManager.DeviceIdentifier.Default);

if (_scanner != null)
{

//Attahch the Data Event handler to get the data callbacks.
_scanner.Data += Scanner_Data;

//Attach Scanner Status Event to get the status callbacks.
_scanner.Status += Scanner_Status;

_scanner.Enable();

//EMDK: Configure the scanner settings
var config = _scanner.GetConfig();
config.SkipOnUnsupported = ScannerConfig.SkipOnUnSupported.None;
config.ScanParams.DecodeLEDFeedback = true;
config.ReaderParams.ReaderSpecific.ImagerSpecific.PicklistEx = ScannerConfig.PicklistEx.Software;
config.DecoderParams.Code39.Enabled = true;
config.DecoderParams.Code93.Enabled = true;
config.DecoderParams.Code128.Enabled = true;
config.DecoderParams.Ean8.Enabled = true;
config.DecoderParams.Ean13.Enabled = true;
config.DecoderParams.Pdf417.Enabled = true;
config.DecoderParams.I2of5.Enabled = true;
_scanner.SetConfig(config);

}
}
catch (ScannerException e)
{
Console.WriteLine(@"InitScanner :: ScannerException -> {0}", e.Message);
// ignored
}
catch (Exception ex)
{
Console.WriteLine(@"InitScanner :: Exception -> {0}", ex.Message);
// ignored
}
}
}
}
public void DeinitScanner()
{
if (_emdkManager != null)
{

if (_scanner != null)
{
try
{
_scanner.Data -= Scanner_Data;
_scanner.Status -= Scanner_Status;
_scanner.Disable();
}
catch (ScannerException e)
{
Console.WriteLine(@"InitScanner :: ScannerException -> {0}", e.Message);
// ignored
}
}

if (_barcodeManager != null)
{
_emdkManager.Release(EMDKManager.FEATURE_TYPE.Barcode);
}
_barcodeManager = null;
_scanner = null;
}
}
/// <summary>
/// Method to toggle the Scanner
/// </summary>
/// <param name="status"></param>
public void ToggleScanner(bool status)
{
try
{
if (status)
{
if (null != _scanner && !_scanner.IsEnabled)
{
_scanner.Enable();
}
}
else
{
if (null != _scanner && _scanner.IsEnabled)
{
_scanner.Disable();
}
}
}
catch (Exception)
{
//Ignore
}
}
#endregion

#region Events
void Scanner_Data(object sender, Scanner.DataEventArgs e)
{
var scanDataCollection = e.P0;

if ((scanDataCollection != null) && scanDataCollection.Result == ScannerResults.Success)
{
var scanData = scanDataCollection.GetScanData();
var data = scanData[0];
ScannedDataResponse?.Invoke(data);
}
}

void Scanner_Status(object sender, Scanner.StatusEventArgs e)
{
//EMDK: The status will be returned on multiple cases. Check the state and take the action.
StatusData.ScannerStates state = e.P0.State;

if (state == StatusData.ScannerStates.Idle)
{
try
{
if (_scanner.IsEnabled && !_scanner.IsReadPending)
{
_scanner.Read();
}
}
catch (ScannerException ex)
{
Console.WriteLine(@"InitScanner :: ScannerException -> {0}", ex.Message);
// ignored
}
}
if (state == StatusData.ScannerStates.Waiting)
{
Console.WriteLine(@"InitScanner :: Status -> {0}", StatusData.ScannerStates.Waiting);
}
if (state == StatusData.ScannerStates.Scanning)
{
Console.WriteLine(@"InitScanner :: Status -> {0}", StatusData.ScannerStates.Scanning);
}
if (state == StatusData.ScannerStates.Disabled)
{
Console.WriteLine(@"InitScanner :: Status -> {0}", StatusData.ScannerStates.Disabled);
}
if (state == StatusData.ScannerStates.Error)
{
Console.WriteLine(@"InitScanner :: Status{0} -> ", StatusData.ScannerStates.Error);
}
}
#endregion

#region IEMDKListener

public void OnClosed()
{
if (_emdkManager != null)
{
_emdkManager.Release();
_emdkManager = null;
}
}

public void OnOpened(EMDKManager manager)
{
_emdkManager = manager;
InitScanner();
}

public new void Dispose()
{
// Dispose
//Clean up the emdkManager
if (_emdkManager == null) return;
//EMDK: Release the EMDK manager object
_emdkManager.Release();
_emdkManager = null;
_barcodeManager = null;
_scanner = null;
}
#endregion
}
}

I am using Zebra TC 56 & 57 for testing

Attachments: 
Darryn Campbell
Hi, it is not obvious from

Hi, it is not obvious from the EMDK for Xamarin sample (https://github.com/Zebra/samples-emdkforxamarin-3_0/blob/master/BarcodeSample1/BarcodeSample1/MainActivity.cs) but if you take a look at the EMDK for Android sample (https://github.com/Zebra/samples-emdkforandroid-7_3/blob/master/BarcodeSample1/app/src/main/java/com/symbol/barcodesample1/MainActivity.java) you will see that the decoders are being set whilst the scanner is IDLE.  Please move your call to set the scanner config to just before your call to _scanner.read() and I2of5 should now be enabled

Vote: 
Vote up!
Vote down!

Points: 1

You voted ‘up’


Rakesh R Nair
I move the Set Config to IDLE

I move the Set Config to IDLE. And everything working fine. Let me clarify the point that calling this method multiple time will not affect the performance of the app / scanning right?

Vote: 
Vote up!
Vote down!

Points: 1

You voted ‘up’


Log in to post comments