Condividi tramite


Decodifica dei dati (documentazione di POS per .NET v1.14 SDK)

La ScannerBase classe fornisce due metodi, DecodeDataLabel e DecodeScanDataType per decodificare la data in ingresso. Questi metodi vengono chiamati quando si accede rispettivamente alle proprietà ScanDataLabel e ScanDataType. La classe ScannerBase rinvia la decodifica dei dati finché l'applicazione non accede alle proprietà dei dati e i dati decodificati verranno memorizzati nella cache per letture future.

La classe ScannerBase implementa l'attributo ScannerBase.DecodeData come richiesto dalla specifica Unified Point Of Service (UnifiedPOS). Se DecodeData non è impostato su true quando l'applicazione legge la proprietà ScanDataLabel , verrà restituita una matrice di byte vuota. Analogamente, ScanDataType restituisce BarCodeSymbology.Unknown. Questa funzionalità viene implementata nella classe ScannerBase ed è trasparente sia per l'applicazione che per l'oggetto servizio.

Per implementare DecodeScanDataLabel

  1. Eseguire l'override del membro protetto e virtuale ScannerBasicDecodeScanDataLabel.

  2. DecodeScanData accetta un argomento scanData che contiene il buffer di dati completo. Non è necessario memorizzare nella cache dati aggiuntivi nel codice dell'oggetto servizio.

  3. DecodeScanData deve elaborare i dati analizzati per rimuovere le informazioni di intestazione e tipo all'inizio e alla fine del buffer di dati. Il buffer modificato verrà restituito in una matrice di byte.

Per l'implementazione di DecodeScanDataType

  1. Eseguire l'override del membro protetto e virtuale ScannerBasicDecodeScanDataType.

  2. Come DecodeScanDataLabel, DecodeScanDataType riceve un argomento contenente il buffer analizzato completo.

  3. DecodeScanDataType esamina il buffer per trovare il tipo di dati analizzato e restituisce il valore BarCodeSymbology appropriato.

Example

Il codice seguente illustra un metodo tipico che lo sviluppatore dell'oggetto servizio può implementare per estrarre valori di etichetta e dati da un buffer analizzato. Si noti che questo codice è dimostrativo di un particolare dispositivo. Diversi oggetti servizio richiederanno la decodifica specifica del dispositivo.

// Decode the incoming scanner data, removing header and
// type information.
override protected byte[] DecodeScanDataLabel(
                byte[] scanData)
{
    int i;
    int len = 0;

    // Get length of label data.
    for (i = 5; i < (int)scanData[1]
                && (int)scanData[i] > 31; i++)
    {
        len++;
    }

    // Copy label data into buffer.
    byte[] label = new byte[len];
    len = 0;

    for (i = 5; i < (int)scanData[1]
                && (int)scanData[i] > 31; i++)
    {
        label[len++] = scanData[i];
    }

    return label;
}

// Process the incoming scanner data to find the data type.
override protected BarCodeSymbology DecodeScanDataType(
                byte[] scanData)
{
    int i;

    for (i = 5; i < (int)scanData[1]
                && (int)scanData[i] > 31; i++)
    {
    }

    // last 3 (or 1) bytes indicate symbology.
    if (i + 2 <= (int)ScanData[1])
    {
        return GetSymbology(
                ScanData[i],
                ScanData[i + 1],
                ScanData[i + 2]);
    }
    else
    {
        return GetSymbology(ScanData[i], 0, 0);
    }
}

// This method determines the data type by examining
// the end of the scanned data buffer. Either 1 byte
// or 3 byte is used to determine the type, depending on
// the incoming buffer.
static private BarCodeSymbology GetSymbology(
            byte b1,
            byte b2,
            byte b3)
{
    if (b1 == 0 && b3 == 11)
    {
        // Use all 3 bytes to determine the date type.
        switch (b2)
        {
            case 10:
                return BarCodeSymbology.Code39;
            case 13:
                return BarCodeSymbology.Itf;
            case 14:
                return BarCodeSymbology.Codabar;
            case 24:
                return BarCodeSymbology.Code128;
            case 25:
                return BarCodeSymbology.Code93;
            case 37:
                return BarCodeSymbology.Ean128;
            case 255:
                return BarCodeSymbology.Rss14;
            default:
                break;
        }

    }
    else if (b2 == 0 && b3 == 0)
    {
        // Only use the first byte to determine the data type.
        switch (b1)
        {
            case 13:
                return BarCodeSymbology.Upca;
            case 22:
                return BarCodeSymbology.EanJan13;
            case 12:
                return BarCodeSymbology.EanJan8;
            default:
                break;
        }
    }

    return BarCodeSymbology.Other;
}

Altre informazioni su come estrarre i dati di etichetta e tipo da un buffer di dati analizzati sono disponibili nella specifica UPOS.

Compilazione del codice

Vedere anche

Reference

Altre risorse