Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Barcode Scanning on Motorola, Intermec and Psion

3 May 2012 1  
Resco offers classes that create universal interface that can access barcode scanners of various devices. This means that one application will be able to scan barcodes from different devices.

This article is in the Product Showcase section for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers.

In the earlier days the logistics and warehouseing was much simpler than today. Each item was handpicked and moved to another location. People were using standard cashiers or just a pen and a piece of paper to keep the lists of inventories. Those days are just gone!

Today everything needs to be done quickly. Customer places order and items need to be shipped almost immediately. Goods arrive to warehouse and warehouse manager needs to know where to place them. He also needs to add them to his inventory. Barcodes can rapidly speed up the logistics of the company. You simply scan a single code and you will access various information that you need to make the decision.

Until now the developers needed to create separate application for each device. Now, Resco offers classes that create universal interface that can access barcode scanners of various devices. This means that one application will be able to scan barcodes from different devices. We support:

  • Symbol - Motorola
  • Intermec
  • Psion

All you need to do is to download SDK of device manufacturers. You can find them here:

Here is the sample code that will help you to handle the barcode scanning on any type of device:

private TagReader m_tagReader = null;

//new TagReader instance for current DeviceType
m_tagReader = BarcodeMgr.CreateInstance();

//this event triggered when a barcode is read
m_tagReader.TagRead += new EventHandler<TagEventArgs>(m_tagReader_TagRead);

private void m_tagReader_TagRead(object sender, TagEventArgs e)
{
	//statement to call if the HandleBarCode method is in the same thread
	if (this.InvokeRequired)
	this.Invoke(new Action(m_tagReader_TagRead), sender, e);
	else
	HandleBarCode(e.Text);
}

private void HandleBarCode(string code)
{
	//TO DO: Here you can add a code for the barcode handling 
	uiTextBoxProductID.Text = code;
}

How to add another miscellaneous scanning devices

If you need to add another type of device that is not yet supported by our barcode scanning interface, you can simply follow these steps (Please note that just for an example, we demonstrated how to add Opticon device):

  1. Open the BarCodeMgr class.
  2. Add to the BarCodeReaderDeviceType enum new "Opticon" option.
  3. Add into the CreateInstance method new Opticon deviceType. It should look as follows:
/// <summary>
/// Creates and initializes a new <see cref="TagReader"/> instance.
/// </summary>
public static TagReader CreateInstance()
{
	BarCodeReaderDeviceType deviceType = BarCodeReaderDeviceType.None;
	
	if (BarCodeUtil.IsSymbolDevice())
		deviceType = BarCodeReaderDeviceType.Symbol;
	else if (BarCodeUtil.IsIngenicoDevice())
		deviceType = BarCodeReaderDeviceType.Ingenico;
	else if (BarCodeUtil.IsPsionDevice())
		deviceType = BarCodeReaderDeviceType.Psion;
	
	// ******************** START Custom Code
	else if (BarCodeUtil.IsOpticonDevice())
		deviceType = BarCodeReaderDeviceType.Opticon;
	// ******************** END Custom Code
	
	else
		deviceType = BarCodeReaderDeviceType.Intermec;
	
	string className = null;
	switch(deviceType)
	{
	// ******************** START Custom Code
		case BarCodeReaderDeviceType.Opticon:
        	className = "UIOptionView.BarCodeReaderOpticon";
			break;
	// ******************** END Custom Code

		case BarCodeReaderDeviceType.Symbol:
			className = "UIOptionView.BarCodeReaderSymbol";
			break;
		
		case BarCodeReaderDeviceType.Intermec:
			className = "UIOptionView.BarCodeReaderIntermec";
			break;
		
		case BarCodeReaderDeviceType.Ingenico:
			className = "UIOptionView.BarCodeReaderIngenico";
			break;
		
		case BarCodeReaderDeviceType.Psion:
			className = "UIOptionView.BarCodeReaderPsion";
			break;
		
		default:
			case BarCodeReaderDeviceType.None:
			break;
	}

	// if no device detected return null
	if (string.IsNullOrEmpty(className))
		return null; //throw new NotSupportedException("BarCode Reader not supported on that device");
	
	// get device bar code reader
	#if DEBUG
	TagReader reader;
	try
	{
		reader = (TagReader)Activator.CreateInstance(Type.GetType(className));
	}
	catch
	{
		reader = new BarCodeReaderDebug();
	}
	reader.IsEnabled = true;
	#else
	var reader = (TagReader)Activator.CreateInstance(Type.GetType(className));
	reader.IsEnabled = true;
	#endif
	return reader;
}
  1. Add into the BarCodeUtil class new IsOpticonDevice method to get whether the device is Opticon.
  2. Now, you need to create your own BarCodeReaderOpticon class. This new class is inherited from the TagReader object.
  3. In this class, you need to override the IsEnabled property to get or set whether barcode reading is enabled.
  4. E.g. check the BarCodeReaderPsion.cs where you can find how to do that.
  5. Into the event, which fires when the device is reading a barcode, call the OnTagRead method.
  6. E.g. check the BarCodeReaderPsion.cs where you can find how to do that.

Barcode scanner sample will be accessible only for users with active subscription.

Product info: http://www.resco.net/developer/mobileformstoolkit/

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here