123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- #define TEST_FOR_EXTENSION_OF_LIB
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.OcrReaders.IOSS
- {
- static partial class Wid110LibConst
- {
- // ====================================================================
- /// <summary>
- /// Constants that should be used overall WID110 library software.
- /// </summary>
- // ====================================================================
- // local system resources
- //
- public static string tmpImage = "testImage_WidLib.bmp";
- // return values: these must correspond with 'WID110Dll.h'
- // these are return values only for c-function calls
- //
- // function executed sucessfully
- public const int rcNoError = 1; // RETVAL_NO_ERROR
- // function failed, calls to FGetLastError()
- // and FGetErrorDescription() possible
- public const int rcError = 0; // RETVAL_ERROR
- // function parameter contained invalid lib handle, call
- // to FGetErrorDescription() possible
- public const int rcInvObj = -1; // RETVAL_INV_OBJ
- // error codes: these must correspond with 'WID110Dll.h'
- // these are values for internal lib errors returned by FGetLastError()
- // an error description can be retrieved by calling FGetErrorDescription()
- //
- public static int ecInvObj = -1; // RETVAL_INV_OBJ
- public static int ecNone = 0; // ERROR_NONE
- public static int ecNotInit = 1; // ERROR_NOT_INIT
- public static int ecNotFound = 2; // ERROR_READER_NOTFOUND
- public static int ecNetInit = 3; // ERROR_NETWORK_INIT
- public static int ecNetIP = 4; // ERROR_NETWORK_IP
- public static int ecNetSend = 5; // ERROR_NETWORK_SEND
- public static int ecNetRecv = 6; // ERROR_NETWORK_RECEIVE
- public static int ecFileName = 7; // ERROR_FILENAME
- public static int ecImgSave = 8; // ERROR_IMG_SAVE
- public static int ecParLoad = 9; // ERROR_PARAM_LOAD
- public static int ecNoProcTrg = 10; // ERROR_NO_PROC_TRIGGERSTR
- public static int ecArgBufSz = 11; // ERROR_ARGBUFFERSIZE
- public static int ecNoFailSt = 12; // ERROR_NO_FAILSTR
- public static int ecNoMoreImg = 13; // ERROR_NO_MORE_IMAGES
- public static int ecNoResult = 14; // ERROR_NO_VALID_RESULT
- public static int ecNoImage = 15; // ERROR_NO_VALID_IMAGE
- public static int ecNoTrgStr = 16; // ERROR_NO_TRIGGERSTRING
- public static int ecNoVersPar = 17; // ERROR_VERSION_PARAMETERSET
- public static int ecPOutOfRng = 18; // ERROR_PARAMETER_OUTOFRANGE
- public static int ecNetTrig = 19; // ERROR_NET_TRIGGERING
- public static int ecReaderTimeout = 20; //ERROR_READER_TIMEOUT
- public static int ecReaderNotRunning = 21; //ERROR_READER_NOT_RUNNING
- // parameter values for FProcessGetImage(type)
- // these must correspond with 'WID110Dll.h'
- //
- public static int pvImgBest = 0; // IMG_PROCESS_BEST
- public static int pvImgAll = 1; // IMG_PROCESS_ALL
- // dummy results
- //
- public static string rsltFAIL = "fail";
- public static string rsltOK = "OK";
- public static string rsltERROR = "no read result";
- public static string rsltBLANK = " ";
- public static string rsltREAD = "READ: ";
- public static string rsltNOREAD = "NOREAD: ";
- // return value for FGetCodeQualityX()
- // if there is no quality retrieved, call GetLastError() then
- public static int rsltNoCodeQuality = -1;
- // return value for FGetCodeTime()
- // if there is no time retrieved, call GetLastError() then
- public static int rsltNoCodeTime = -1;
- // dummy error messages
- //
- public static string errNO = "no error";
- public static string errDESC = "ERROR; no error description";
- // string buffer sizes
- //
- public static int errLen = 256;
- public static int versLenCS = 63;
- public static int versLenC = versLenCS + 1;
- public static int rsltLenCS = 259;
- public static int rsltLenC = rsltLenCS + 1;
- }
- }
- /**********************************************************************************************//**
- * @struct WID_CAPTURE
- *
- * @brief WID120 Grabbing data
- *
- * @author Jg
- * @date 10.05.2017
- **************************************************************************************************/
- public struct WID_CAPTURE
- {
- public int widColor; //!< light color (0..2)
- public int widChannel; //!< light channel (0..6)
- public int widIntensity; //!< light intensity (0..180) 0=off
- public int widRotated; //!< Image Rotated (0..1)
- public int widFlipped; //!< Image Flipped (0..1)
- };
- /**********************************************************************************************//**
- * @struct WID_ROI
- *
- * @brief A wid region of interest
- *
- * @author Jg
- * @date 14.06.2017
- **************************************************************************************************/
- public struct WID_ROI
- {
- public int roiXS; //!< X-Start (0..960)
- public int roiXL; //!< X-Length (64..960)
- public int roiYS; //!< Y-Start (0..304)
- public int roiYL; //!< Y-Length (64..368)
- };
- /**********************************************************************************************//**
- * @struct Unsafe WID_OCR
- *
- * @brief WID120 OCR parameter (Internal used by <see cref="Wid110LibUser.Wid110Lib"/>
- *
- * @author Jg
- * @date 10.05.2017
- **************************************************************************************************
- * 16.04.2020 MAI Changed char array to fixed byte. Added StructLayout attribute.
- [**************************************************************************************************/
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public unsafe struct WID_OCR_Unsafe
- {
- public fixed byte widFontName[12]; //!< Name of font "semi_5x9","semi_org","semi_lin","ocra"
- public fixed byte widFielding[32]; //!< Fielding of String "aannnn-nn-cc"
- public fixed byte widFormat[32]; //!< Fielding of String "++++++++++++"
- public fixed byte widResult[32]; //!< Result of String "Reading Result"
- public int widMinSimilarity; //!< minimum Similarity (50..75)
- public int widAccSimilarity; //!< accepted Similarity (85..99)
- public int widSpacing; //!< Spacing of Character (80..200)
- public int widRotation; //!< Rotation of charactor (..90..)
- public int widAdjustSpace; //!< Adjust Spacing (0..1)
- public int widAdjustSize; //!< Adjust Size of Characters (0..1)
- public int widFilter; //!< Filter (0..40)
- public int widCharSizeX; //!< Character Size in X (15.. 60)
- public int widCharSizeY; //!< Character Size in Y (27..108)
- public int widCharPosX; //!< Character Position in X (64..960)
- public int widCharPosY; //!< Character Position in Y (64..304)
- public WID_ROI widRoi; //!< Region of Interrest
- };
- /**********************************************************************************************//**
- * @class WID_OCR
- *
- * @brief WID120 OCR parameter
- *
- * @author MAI
- * @date 16.04.2020
- **************************************************************************************************/
- public class WID_OCR
- {
- public string widFontName; //!< Name of font "semi_5x9","semi_org","semi_lin","ocra"
- public string widFielding; //!< Fielding of String "aannnn-nn-cc"
- public string widFormat; //!< Fielding of String "++++++++++++"
- public string widResult; //!< Result of String "Reading Result"
- public int widMinSimilarity; //!< minimum Similarity (50..75)
- public int widAccSimilarity; //!< accepted Similarity (85..99)
- public int widSpacing; //!< Spacing of Character (80..200)
- public int widRotation; //!< Rotation of charactor (..90..)
- public int widAdjustSpace; //!< Adjust Spacing (0..1)
- public int widAdjustSize; //!< Adjust Size of Characters (0..1)
- public int widFilter; //!< Filter (0..40)
- public int widCharSizeX; //!< Character Size in X (15.. 60)
- public int widCharSizeY; //!< Character Size in Y (27..108)
- public int widCharPosX; //!< Character Position in X (64..960)
- public int widCharPosY; //!< Character Position in Y (64..304)
- public WID_ROI widRoi; //!< Region of Interrest
- public WID_OCR() { }
- public unsafe WID_OCR(WID_OCR_Unsafe s)
- {
- widFontName = TypeConversion.FixedByteToString(s.widFontName);
- widFielding = TypeConversion.FixedByteToString(s.widFielding);
- widFormat = TypeConversion.FixedByteToString(s.widFormat);
- widResult = TypeConversion.FixedByteToString(s.widResult);
- widMinSimilarity = s.widMinSimilarity;
- widAccSimilarity = s.widAccSimilarity;
- widSpacing = s.widSpacing;
- widRotation = s.widRotation;
- widAdjustSpace = s.widAdjustSpace;
- widAdjustSize = s.widAdjustSize;
- widFilter = s.widFilter;
- widCharSizeX = s.widCharSizeX;
- widCharSizeY = s.widCharSizeY;
- widCharPosX = s.widCharPosX;
- widCharPosY = s.widCharPosY;
- widRoi = s.widRoi;
- }
- public unsafe WID_OCR_Unsafe ToUnsafeStruct()
- {
- WID_OCR_Unsafe s = new WID_OCR_Unsafe();
- TypeConversion.StringToFixedByte(widFontName, s.widFontName, 12);
- TypeConversion.StringToFixedByte(widFielding, s.widFielding, 32);
- TypeConversion.StringToFixedByte(widFormat, s.widFormat, 32);
- TypeConversion.StringToFixedByte(widResult, s.widResult, 32);
- s.widMinSimilarity = widMinSimilarity;
- s.widAccSimilarity = widAccSimilarity;
- s.widSpacing = widSpacing;
- s.widRotation = widRotation;
- s.widAdjustSpace = widAdjustSpace;
- s.widAdjustSize = widAdjustSize;
- s.widFilter = widFilter;
- s.widCharSizeX = widCharSizeX;
- s.widCharSizeY = widCharSizeY;
- s.widCharPosX = widCharPosX;
- s.widCharPosY = widCharPosY;
- s.widRoi = widRoi;
- return s;
- }
- }
- // ====================================================================
- /// <summary>
- /// Type Conversion class.
- /// </summary>
- // ====================================================================
- public static class TypeConversion
- {
- // ====================================================================
- /// <summary>
- /// Convert from unsafe fixed byte array to managed string
- /// </summary>
- /// <param name="sender">fixed byte array</param>
- /// <returns>string</returns>
- // ====================================================================
- public static unsafe string FixedByteToString(byte* sender)
- {
- List<byte> data = new List<byte>();
- for (byte* counter = sender; *counter != 0; counter++)
- {
- data.Add(*counter);
- }
- return System.Text.Encoding.ASCII.GetString(data.ToArray()).Trim('\0');
- }
- // ====================================================================
- /// <summary>
- /// Convert from managed string to unsafe fixed byte array
- /// </summary>
- /// <param name="value">input string</param>
- /// <param name="result">fixed byte array (output)</param>
- // ====================================================================
- public static unsafe void StringToFixedByte(string value, byte* result, int length)
- {
- if (string.IsNullOrEmpty(value)) value = "";
- byte[] valueBytes = System.Text.Encoding.ASCII.GetBytes(value);
- byte* counter = result;
- for (int index = 0; index < length; index++)
- {
- if (index < value.Length) *counter = valueBytes[index];
- else *counter = 0x00;
- counter++;
- }
- }
- }
- /**********************************************************************************************//**
- * @struct Unsafe WID_BCR
- *
- * @brief WID120 Barcode Parameter (Internal used by <see cref="Wid110LibUser.Wid110Lib"/>
- *
- * @author Jg
- * @date 10.05.2017
- **************************************************************************************************
- * 16.04.2020 MAI Changed char array to fixed byte. Added StructLayout attribute.
- **************************************************************************************************/
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public unsafe struct WID_BCR_Unsafe
- {
- public fixed byte widFormat[32]; //!< Format of String "++++++++++++"
- public fixed byte widConversion[48]; //!< IBM- Conversion Table ("000102030405060708091011121314151517")
- public int widIBM_RtoL; //!< Activate IBM BC412 (0..1)
- public int widIBM_LtoR; //!< Activate IBM BC412 (0..1)
- public int widIBMConversion; //!< IBM- Conversion (0..2) None,Base 35,Custom A, Custom V, Custom R, Programmable
- public int widSemi; //!< Activate Semi Barcode (0..1)
- public int widTIConversion; //!< TI Conversion (0..3) None,Base 35, Custom, Custom Checksum
- public int widBarCodeLength; //!< Code Length (0..18) 0=auto
- public int widSeparator; //!< Separator Character (0..4) none,DASH,POINT,SPACE,HASH
- public int widDigits; //!< Wafer Number (0..3) 2 digits, suppress leading zero, 3 digits
- public int widEnableAltis; //!< Enable Altis (0..1)
- public int widCheckSum; //!< Show Check Character (0..1)
- public int widResolution; //!< Resolution of Barcode (0..2) Standard, High Resolution, Standard & High Resolution
- public int widLowContrast; //!< Contrast of Barcode (0..1) Activate Low Contrast Codes
- public WID_ROI widRoi; //!< Region of Interrest
- };
- /**********************************************************************************************//**
- * @class WID_BCR
- *
- * @brief WID120 Barcode parameter
- *
- * @author MAI
- * @date 16.04.2020
- **************************************************************************************************/
- public class WID_BCR
- {
- public string widFormat; //!< Format of String "++++++++++++"
- public string widConversion; //!< IBM- Conversion Table ("000102030405060708091011121314151517")
- public int widIBM_RtoL; //!< Activate IBM BC412 (0..1)
- public int widIBM_LtoR; //!< Activate IBM BC412 (0..1)
- public int widIBMConversion; //!< IBM- Conversion (0..2) None,Base 35,Custom A, Custom V, Custom R, Programmable
- public int widSemi; //!< Activate Semi Barcode (0..1)
- public int widTIConversion; //!< TI Conversion (0..3) None,Base 35, Custom, Custom Checksum
- public int widBarCodeLength; //!< Code Length (0..18) 0=auto
- public int widSeparator; //!< Separator Character (0..4) none,DASH,POINT,SPACE,HASH
- public int widDigits; //!< Wafer Number (0..3) 2 digits, suppress leading zero, 3 digits
- public int widEnableAltis; //!< Enable Altis (0..1)
- public int widCheckSum; //!< Show Check Character (0..1)
- public int widResolution; //!< Resolution of Barcode (0..2) Standard, High Resolution, Standard & High Resolution
- public int widLowContrast; //!< Contrast of Barcode (0..1) Activate Low Contrast Codes
- public WID_ROI widRoi; //!< Region of Interrest
- public WID_BCR() { }
- public unsafe WID_BCR(WID_BCR_Unsafe s)
- {
- widFormat = TypeConversion.FixedByteToString(s.widFormat);
- widConversion = TypeConversion.FixedByteToString(s.widConversion);
- widIBM_RtoL = s.widIBM_RtoL;
- widIBM_LtoR = s.widIBM_LtoR;
- widIBMConversion = s.widIBMConversion;
- widSemi = s.widSemi;
- widTIConversion = s.widTIConversion;
- widBarCodeLength = s.widBarCodeLength;
- widSeparator = s.widSeparator;
- widDigits = s.widDigits;
- widEnableAltis = s.widEnableAltis;
- widCheckSum = s.widCheckSum;
- widResolution = s.widResolution;
- widLowContrast = s.widLowContrast;
- widRoi = s.widRoi;
- }
- public unsafe WID_BCR_Unsafe ToUnsafeStruct()
- {
- WID_BCR_Unsafe s = new WID_BCR_Unsafe();
- TypeConversion.StringToFixedByte(widFormat, s.widFormat, 32);
- TypeConversion.StringToFixedByte(widConversion, s.widConversion, 48);
- s.widIBM_RtoL = widIBM_RtoL;
- s.widIBM_LtoR = widIBM_LtoR;
- s.widIBMConversion = widIBMConversion;
- s.widSemi = widSemi;
- s.widTIConversion = widTIConversion;
- s.widBarCodeLength = widBarCodeLength;
- s.widSeparator = widSeparator;
- s.widDigits = widDigits;
- s.widEnableAltis = widEnableAltis;
- s.widCheckSum = widCheckSum;
- s.widResolution = widResolution;
- s.widLowContrast = widLowContrast;
- s.widRoi = widRoi;
- return s;
- }
- }
- /**********************************************************************************************//**
- * @struct Unsafe WID_DMR
- *
- * @brief WID120 2D-Code Parameter (Internal used by <see cref="Wid110LibUser.Wid110Lib"/>
- *
- * @author Jg
- * @date 10.05.2017
- **************************************************************************************************
- * 16.04.2020 MAI Changed char array to fixed byte. Added StructLayout attribute.
- **************************************************************************************************/
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public unsafe struct WID_DMR_Unsafe
- {
- public int widSymbol; //!< Activate Code Type (0 = DataMatrix, 1 = QR-Code
- public int widLinNrm; //!< linear Code (normal) (0/1) off/on
- public int widLinInv; //!< linear Code (invers) (0/1) off/on
- public int widDotNrm; //!< Punkt Code (normal) (0/1) off/on
- public int widDotInv; //!< Punkt Code (invers) (0/1) off/on
- public int widCodeType; //!< Activate Code Type (0/1) normal/mirrored
- public int widCodeSize; //!< Module Size of Code (0..3) large, semi, small, tiny
- public fixed byte widFormat[32]; //!< Format of String "++++++++++++"
- public WID_ROI widRoi; //!< Region of Interrest
- };
- /**********************************************************************************************//**
- * @class WID_DMR
- *
- * @brief WID120 2D-Code parameter
- *
- * @author MAI
- * @date 16.04.2020
- **************************************************************************************************/
- public class WID_DMR
- {
- public int widSymbol; //!< Activate Code Type (0 = DataMatrix, 1 = QR-Code
- public int widLinNrm; //!< linear Code (normal) (0/1) off/on
- public int widLinInv; //!< linear Code (invers) (0/1) off/on
- public int widDotNrm; //!< Punkt Code (normal) (0/1) off/on
- public int widDotInv; //!< Punkt Code (invers) (0/1) off/on
- public int widCodeType; //!< Activate Code Type (0/1) normal/mirrored
- public int widCodeSize; //!< Module Size of Code (0..3) large, semi, small, tiny
- public string widFormat; //!< Format of String "++++++++++++"
- public WID_ROI widRoi; //!< Region of Interrest
- public WID_DMR() { }
- public unsafe WID_DMR(WID_DMR_Unsafe s)
- {
- widSymbol = s.widSymbol;
- widLinNrm = s.widLinNrm;
- widLinInv = s.widLinInv;
- widDotNrm = s.widDotNrm;
- widDotInv = s.widDotInv;
- widCodeType = s.widCodeType;
- widCodeSize = s.widCodeSize;
- widFormat = TypeConversion.FixedByteToString(s.widFormat);
- widRoi = s.widRoi;
- }
- public unsafe WID_DMR_Unsafe ToUnsafeStruct()
- {
- WID_DMR_Unsafe s = new WID_DMR_Unsafe();
- s.widSymbol = widSymbol;
- s.widLinNrm = widLinNrm;
- s.widLinInv = widLinInv;
- s.widDotNrm = widDotNrm;
- s.widDotInv = widDotInv;
- s.widCodeType = widCodeType;
- s.widCodeSize = widCodeSize;
- TypeConversion.StringToFixedByte(widFormat, s.widFormat, 32);
- s.widRoi = widRoi;
- return s;
- }
- }
|