Partager via


Décodage des données (documentation du SDK POS pour .NET v1.14)

La ScannerBase classe fournit deux méthodes, DecodeDataLabel et DecodeScanDataType pour décoder la date entrante. Ces méthodes sont appelées lorsque les propriétés ScanDataLabel et ScanDataType, respectivement, sont accessibles. La classe ScannerBase reporte le décodage des données jusqu’à ce que l’application accède aux propriétés de données et que les données décodées soient mises en cache pour les lectures futures.

La classe ScannerBase implémente l’attribut ScannerBase.DecodeData comme requis par la spécification Unified Point Of Service (UnifiedPOS). Si DecodeData n’est pas défini sur true lorsque l’application lit la propriété ScanDataLabel , un tableau d’octets vide est retourné. De même, ScanDataType retourne BarCodeSymbology.Unknown. Cette fonctionnalité est implémentée dans la classe ScannerBase et est transparente pour l’application et l’objet de service.

Pour implémenter DecodeScanDataLabel

  1. Remplacez le membre protégé et virtuel ScannerBasicDecodeScanDataLabel.

  2. DecodeScanData prend un argument, scanData, qui contient la mémoire tampon de données complète. Il n’est pas nécessaire de mettre en cache des données supplémentaires dans le code de l’objet de service.

  3. DecodeScanData doit traiter les données analysées pour supprimer les informations d’en-tête et de type au début et à la fin de la mémoire tampon de données. La mémoire tampon modifiée est retournée dans un tableau d’octets.

Pour implémenter DecodeScanDataType

  1. Remplacez le membre protégé et virtuel ScannerBasicDecodeScanDataType.

  2. Comme DecodeScanDataLabel, DecodeScanDataType reçoit un argument contenant la mémoire tampon analysée complète.

  3. DecodeScanDataType examine la mémoire tampon pour rechercher le type de données des données analysées et retourne la valeur BarCodeSymbology appropriée.

Example

Le code suivant illustre une méthode classique que le développeur d’objets de service peut implémenter afin d’extraire des valeurs d’étiquette et de données à partir d’une mémoire tampon analysée. Notez que ce code est démontratif d’un appareil particulier. Différents objets de service nécessitent un décodage spécifique à l’appareil.

// 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;
}

Vous trouverez plus d’informations sur la façon dont les données d’étiquette et de type doivent être extraites d’une mémoire tampon de données scannées dans la spécification UPOS.

Compilation du code

Voir aussi

Reference

Autres ressources