Intermec Technologies 700C-SMC45 Pen-notepad computer with Radio Interfaces User Manual back let85x11
Intermec Technologies Corporation Pen-notepad computer with Radio Interfaces back let85x11
Contents
User Manual pt 3
Printer Support The 700 Series Color Mobile Computer works with the following printers from Intermec Technologies. Contact an Intermec Representative for information about these printers. S 6820 A full-page, 80-column printer. S 6808 A 4-inch belt-mount printer. S 781T A 2-inch belt-mount printer with a Bluetooth compatible module from Socket Communications. S 782T A 2-inch workboard printer. 700 Series Color Mobile Computer User’s Manual 127 Chapter 5 — Printer Support Printing ASCII The following methods for printing using Pocket PC at this time is as follows: S Add port drivers to print ASCII directly to the port. S Use LinePrinter ActiveX Control from the Software Developer’ s Kit (SDK) - see the SDK User’ s Manual for more information. S Via wireless printing - see the Wireless Printing Development Guide on the 700C Software Tools CD for more information. Directly to a Port Printing directly to the port sends RAW data to the printer. The format of this data depends upon your application and the printer capabilities. You must understand the printer commands available for your specific printer. Generally, applications just send raw ASCII text to the printer. Since you are sending data to the printer from your application directly to the port you are in complete control of the printers operations. This allows you to do line printing (print one line at a time) rather than the page format printing offered by the GDI approach. It is also much faster since data does not have to be converted from one graphics format to the other (display to printer). Most Intermec printers use Epson Escape Sequences to control print format operations. These commands are available in documentation you receive with your printers or from technical support. Win32 APIs are required to print directly to the port. Directly to a Generic Serial Port To print directly to a generic serial port printer (non-Intermec printers): S Use CreateFile() to open ports - COM1: can be opened on most devices. S Use WriteFile() to send data directly to the printer. S Use CloseHandle() when you are finished printing to close the port. IrDA Printer Driver IrDA printing is only available on the certain devices and is supported directly by the Windows CE load via the IrSock API provided by the Microsoft Win32 API without need for additional drivers. Intermec 6804, 6805, 6806, 6808 and 6820 and other IrDA printers are supported. 128 700 Series Color Mobile Computer User’s Manual Chapter 5 — Printer Support NPCP Printer Driver The NPCP printer communications driver (NPCPPORT.DLL) is a Stream Device Driver built into the operating system. The driver supports only NPCP communications to and from the 6820 and 4820 printers over a selected serial port. All applications use WIN32 API functions to access the drivers. Basic operations are easily implemented by applications through the CreateFile(), WriteFile(), ReadFile(), DeviceIOControl(), and CloseHandle() Win32 APIs. Operations to upgrade printer modules, perform printer diagnostics, and get printer configuration are performed largely via DeviceIOControl() functions. About NPCP NPCP (Norand Portable Communications Protocol) is a proprietary protocol that provides session, network, and datalink services for Intermec mobile computers in the Intermec LAN environment used with printers and data communications. NPCP Driver Installation and Removal Use LPT9: for the NPCP printer device and COM1 for the last parameter. COM1 is the connection available via the 700 Series Computer. Applications use the RegisterDevice() function to install the driver. DeregisterDevice() uninstalls the device driver and frees memory space when the driver is not required. Use the HANDLE returned by RegisterDevice() as the parameter to DeregisterDevice(). Use the RegisterDevice() function call as demonstrated below. Specify the full path name to the driver starting at the root for the RegisterDevice() function to work properly. The last parameter to RegisterDevice() is a DWORD that represents the name of the port for the NPCP stream driver to use. Build this parameter on the stack if it is not to be paged out during the call. The first parameter “LPT” (Device Name) and the second parameter “9’ (index), indicate the name of the registered device, such as LPT9. This is used in the CreateFile() function call. Install() HANDLE hDevice; TCHAR port[6]; port[0] = TCHAR(‘C’); port[1] = TCHAR(‘O’); port[2] = TCHAR(‘M’); port[3] = TCHAR(‘1’); port[4] = TCHAR(‘:’); port[5] = TCHAR(0); hDevice = RegisterDevice ( (TEXT(”LPT”), 9, TEXT(“\\STORAGE CARD\\WINDOWS\\NPCPPORT.dll”), (DWORD)port); 700 Series Color Mobile Computer User’s Manual 129 Chapter 5 — Printer Support Opening the NPCP Driver The application opens the NPCP driver by using the CreateFile() function. The call can be implemented as follows. The first parameter “LPT9:” must reflect the device name and index used in the RegisterDevice() function call and will fail for any of the following reasons: hFile = CreateFile(_T(”LPT9:”), GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); S The port associated with the device during RegisterDevice() is in use. S The NPCP device is already open. S The share mode is not set to zero. The device cannot be shared. S Access permissions are not set to GENERIC_WRITE | GENERIC_READ. Both modes must be specified. Closing the NPCP Driver Using the CloseHandle() (hFile) function closes the NPCP driver. Where hFile is the handle returned by the CreateFile() function call. S TRUE = the device is successfully closed. S FALSE = an attempt to close NULL HANDLE or an already closed device. Reading from the NPCP Driver Reading of the NPCP printers is not supported since all responses from the printer are the result of commands sent to the printer. DeviceIoControl() functions are provided where data is to be received from the printer. Writing to the NPCP Driver All Print data can be sent to the printer using the WriteFile() function. The print data written to the driver must contain the proper printer commands for formatting. If the function returns FALSE, the NPCP error may be retrieved using IOCTL_NPCP_ERROR. See the description on the next page. 130 700 Series Color Mobile Computer User’s Manual Chapter 5 — Printer Support NPCP Driver I/O Controls An application uses the DeviceIoControl() function to specify an printer operation to be performed. Certain I/O controls are required to bind and close communication sessions with the printer, and must be completed before any other commands to the driver can execute properly. The function returns TRUE to indicate the device successfully completed its specified I/O control operation, otherwise it returns FALSE. The following I/O control codes are defined: #define IOCTL_NPCP_CANCEL CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x400,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_BIND CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x401,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_CLOSE CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x402,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_ERROR CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x403,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_FLUSH CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x404,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_IOCTL CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x405,METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_NPCP_PRTVER CTL_CODE(FILE_DEVICE_SERIAL_PORT,0x406,METHOD_BUFFERED,FILE_ANY_ACCESS) S IOCTL_NPCP_CANCEL This cancels all printing at the printer. It flushes the printer buffers and reinitializes the printer to its default state. No parameters are required. S IOCTL_NPCP_BIND This command is required before any data is sent or received by the printer. Once the driver is opened, the application must bind the communications session with the printer before any data can be sent or received by the printer. If an error occurs during the bind, the application may use IOCTL_NPCP_ERROR to get the current extended error code. No parameters are required. S IOCTL_NPCP_CLOSE This command closes the current session with the printer. This function always returns TRUE. No parameters are required. S IOCTL_NPCP_ERROR This command returns the extended NPCP error code in PL/N format. The word returned will contain the PL/N compatible error code in the low byte and completion flags in the high byte. If the frame that returned an error was not received correctly by the printer the FRAME_NOT_ACKED bit will be set in the high byte. This operation always returns TRUE. An output buffer of at least 2 bytes is required. See “NPCP Error Codes” on page 133. S IOCTL_NPCP_FLUSH This command allows the application to poll the printer for errors while the report is completing the print process at the printer. If an error occurs during the polling process, the operation will return FALSE and the application can get the extended error code by using IOCTL_NPCP_ERROR. No parameters are required. 700 Series Color Mobile Computer User’s Manual 131 Chapter 5 — Printer Support NPCP Printer Communications All NPCP printer communications should be based on the following flow: 1 Use CreateFile(); to open the printer driver. 2 Use IOCTL_NPCP_BIND to bind a session with the printer; IOCTL_NPCP_ERROR to check for errors on the bind to ensure success; and IOCTL_NPCP_CANCEL to cancel any outstanding print jobs. 3 Use IOCTL_NPCP_FLUSH to poll the printer to free up printer buffer resources. Use IOCTL_NPCP_FLUSH to poll the printer’ s status. If an error is reported by the IOCTL, then use IOCTL_NPCP_ERROR to get the error and determine the correct recovery procedure. 4 Use WriteFile(); to write your data to the printer. Check for errors and that all data were written. Use IOCTL_NPCP_ERROR to get the extended error. If the error is critical in nature, use IOCTL_NPCP_CLOSE, followed by CloseFile(), to end the communications session. Start a new session, beginning with step 1 to ensure proper printing. For noncritical errors display the error and retry the operation. 5 After all data is sent to the printer, ensure that the printer continues to print the report properly by polling the printer’ s status. Use IOCTL_NPCP_FLUSH to poll the printer’ s status. If an error is reported by the IOCTL, then use IOCTL_NPCP_ERROR to get the error and determine the correct recovery procedure. Sample Code See sample code in the “\700 Color Dev Tools\Installable Drivers\Port Drivers\Npcp\NPCPPrint\” directory for more details on printing, printer communications and error code handling. 132 700 Series Color Mobile Computer User’s Manual Chapter 5 — Printer Support NPCP Error Codes Call the IOCTL_NPCP_ERROR I/O control function to receive PL/N compatible error codes. Applications must decide how to act upon the data returned. // Definition of NPCP communications Errors and Printer Errors #define PNRDY (BYTE)102 // link not ready error #define RXTMO (BYTE)104 // link no receive error #define TXTMO (BYTE)106 // link no transmit error #define BADADR (BYTE)111 // frame address error #define GAPERR (BYTE)112 // link gap error (timeout) in receive data #define LSRPE (BYTE)113 // frame parity error on length field #define IFTS (BYTE)120 // session layer - invalid frame this state #define NS_NE_VR (BYTE)121 // session layer sequence error #define NR_NE_VS (BYTE)122 // session layer sequence error #define MAC_CRCERR (BYTE)124 // MAC CRC error #define RLENERR (BYTE)123 // MAC too much data received #define FRMERR (BYTE)200 // Frame Reject #define FRMERR_IF (BYTE)201 // Frame Reject - Invalid Frame #define FRMERR_NR (BYTE)202 // Frame Reject - NR Mismatch #define FRMERR_NS (BYTE)203 // Frame Reject - NS Mismatch #define NDMERR (BYTE)204 // Normal Disconnect mode error #define BINDERR (BYTE)210 // bind error #define IPLDUR (BYTE)221 // invalid presentation layer response #define HEADJAM (BYTE)222 // printer head jam #define PAPEROUT (BYTE)223 // printer paper out #define LOWVOLTS (BYTE)224 // printer low voltage #define HIVOLTS (BYTE)225 // printer over voltage #define LOWBAT (BYTE)226 // printer low battery #define COVEROFF (BYTE)227 // printer cover off error #define HEADFAULT (BYTE)228 // printer head short or driver short error #define PFFAULT (BYTE)229 // paper feed motor fault. #define FRAME_NOT_ACKED 0x8000 // frame was not received by printer and need to be resent. 700 Series Color Mobile Computer User’s Manual 133 Chapter 5 — Printer Support O’ Neil Printer Driver The DTR printer communications driver is a Stream Device Driver named ONEIL.DLL. All applications use WIN32 API functions to access drivers. Basic operations are easily implemented by applications through the CreateFile(), WriteFile(), DeviceIOControl() and CloseHandle() Win32 APIs. The driver supports communications to 6804DM, 6804T, 6805A, 6806, 6808, 681T, and 781 printers over a selected serial port. DTR Driver Installation and Removal Your application must install the device driver by using the RegisterDevice() function. The driver name is ONEIL.DLL. We recommend that you use “DTR” for the Device Name parameter, “1” for the Device Driver index parameter, and use any of the following strings for the last parameter: S NULL (==0) Defaults to COM1 @ 9600 S “COM1” only COM port specified defaults to 9600 S “COM1:9600” sets to COM port and specified bit rate S “COM1:19200” sets to COM port and specified bit rate Use the HANDLE returned by RegisterDevice() as the parameter to DeregisterDevice(). The correct usage of the RegisterDevice() function call is demonstrated below. You may use DeregisterDevice() to uninstall the driver. Install() HANDLE hDevice; TCHAR port[6]; port[0] = TCHAR(‘C’); port[1] = TCHAR(‘O’); port[2] = TCHAR(‘M’); port[3] = TCHAR(‘1’); port[4] = TCHAR(‘:’); port[5] = TCHAR(0); hDevice = RegisterDevice ( (TEXT(”DTR”), 1, TEXT(”\\WINDOWS\\ONEIL.DLL”), (DWORD)port); 134 700 Series Color Mobile Computer User’s Manual Chapter 5 — Printer Support Opening the DTR Driver The application opens the DTR driver by using the CreateFile() function. The call can be implemented as follows: hFile = CreateFile(_T(”DTR1:”), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); The first parameter “DTR1:” must reflect the device name and index used in the RegisterDevice() function call. The function call will fail for any of the following reasons: S The port associated with the device during RegisterDevice() is currently in use. S The DTR device is already open. S The share mode is not set to zero. The device cannot be shared. S Access permissions are not set to GENERIC_WRITE. Closing the DTR Driver Using the CloseHandle() (hFile) function closes the DTR driver. Where hFile is the handle returned by the CreateFile() function call. S TRUE indicates the device is successfully closed. S FALSE indicates an attempt to close a NULL HANDLE or an already closed device. Writing to the DTR Driver You can use the WriteFile() function to send all Print data to the printer. The print data being written must contain the proper formatting printer commands. DTR Printer Communications All DTR printer communications should be based on the following flow: 1 Use CreateFile(); to open the printer driver. 2 Use WriteFile() to write your data to the printer. Check for errors and that all data were written. 3 Use CloseHandle() to close the driver. 700 Series Color Mobile Computer User’s Manual 135 Chapter 5 — Printer Support 136 700 Series Color Mobile Computer User’s Manual 6 Scanner Support The 700 Series Color Mobile Computer is available with imaging or laser scanning technologies, including the following: S APS linear imager: Reads 1D symbologies and PDF 417 bar codes. Linear imaging using Vista Scanning technology reads low-contrast bar codes, laminated bar codes, and bar codes displayed on CRT or TRT displays. This imaging uses harmless LEDs for illumination and does not require any warning labels. Vista Scanning is more reliable than lasers as it is a completely solid state with no moving parts or oscillating mirrors. S 2D Imager: This decodes several stacked 1D and 2D symbologies, including PDF 417 and Data Matrix without “painting.” It can also read 1D codes from any orientation, for example the scan beam does not need to be aligned perpendicular to the symbol in order to read it. Photography is a secondary application; the lens in the device will favor bar code reading. Photos are 640x480, 256 gray-scale. S 1D laser scanner: Traditional laser scanner that decodes 1D bar codes. S PDF 417 laser scanner: Higher speed laser scanner that can read PDF 417 labels by “painting” the label. 700 Series Color Mobile Computer User’s Manual 137 Chapter 6 — Scanner Support Scanner Control and Data Transfer Note: To use the methods described below, enable Data Collection functionality on the 700 Computer using the bootloader configuration menu. See Chapter 3, “Installing Applications” for more information. The Data Server and associated software provide several ways to manipulate scanner control and data transfer between the scanner subsystem and user applications: S Automatic Data Collection COM Interfaces: These COM interfaces allow user applications to receive bar code data, and configure and control the bar code reader engine. S ITCAxBarCodeReaderControl functions: These ActiveX controls allow user applications to collect bar code data from the scanner, to configure the scanner, and to configure audio and visual notification when data arrives. For more information, see the SDK User’ s Manual. S ITCAxReaderCommand functions: Use these ActiveX controls to modify and retrieve configuration information using the reader interface commands. For more information, see the SDK User’ s Manual. S Scanning EasySet bar code labels: You can use the EasySet bar code creation software from Intermec Technologies Corporation to print configuration labels. Scan the labels to change the scanner configuration and data transfer settings. Automatic Data Collection COM Interfaces Data collection configuration and functionality cannot be accessed by any means (including control panel applets or remote management applications) until after the 700 Series Computer has completed initialization, which occurs during a warm- or cold-boot or after a firmware upgrade. When initialization is complete, the green LED on the 700 Series Computer stops flashing. Changes made to configuration settings remain after a warm boot. After a cold-boot, all configuration settings are reset to their defaults with the exception of scanner configurations, which remain except for the Symbology Identifier transmission option or the Preamble and Postamble strings. To reset all configuration settings to the factory defaults, the S9C scanner firmware must be reloaded. 138 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support The Automatic Data Collection (ADC) functions are accessed through custom COM interfaces. These interfaces allow the application to receive bar code data and configure and control the bar code reader engine. The COM interfaces include the following functions: S IADC (starting on page 151) S IBarCodeReaderControl (starting on page 159) S IS9CConfig (starting on page 172) S IS9CConfig2 (starting on page 204) S IS9CConfig3 (starting on page 216) S IImage Interface (starting on page 221) Multiple ADC COM Object Support A 700 Series Computer may have multiple reader engines to decode different types of ADC data. For example, a bar code reader engine decodes raw bar code data and passes it to a bar code reader COM object. An RFID reader engine decodes raw RFID tag data and passes it to an RFID tag reader COM object. ADC COM interfaces are implemented as in-process COM objects. An instance of the ADC COM object creates a logical connection to access or control the reader engine. Specifically, the IBarCodeReadConfig or IBarCodeReaderControl COM objects can manage the bar code scanner configuration while the ADC COM object can gather data simultaneously. These ADC COM objects or connections can be created in a single application or multiple applications. Up to seven instances of a COM object can be created for a reader engine. For more information, see “How to Create and Use the ADC COM Interfaces” below. For data collection features, ADC COM objects also provide for read ahead and non-read ahead data access and grid data editing. 700 Series Color Mobile Computer User’s Manual 139 Chapter 6 — Scanner Support How to Create and Use the ADC COM Interfaces You can also use the Input Device Functions (starting on page 149) to create and use the ADC COM interfaces. 1 Create and initialize the in-process Bar Code Reader object using ITCDeviceOpen() (see page 149). This function returns a COM Interface pointer to the Bar Code Reader Object created by the function. 2 Set the data grid if data filtering is desired (default grid gives the application all the data). Below is a sample code of how to set the grid to accept Code 39 data that starts with the letter “A” and is not a reader command. ITC_BARCODEREADER_GRID stBCGrid; stBCGrid.stDIGrid.szDataMask = TEXT(”A%s”); stBCGrid.stDDGrid.dwSymbologyMask = BARCODE_SYMBOLOGY_CODE39; stBCGrid.dwDataSourceTypeMask = ITC_DATASOURCE_USERINPUT; HRESULT hrStatus = pIBCControl->SetAttribute( ITC_RDRATTR_GRID, reinterpret_cast(&stBCGrid), sizeof(stBCGrid) ); 3 Issue a read to accept the bar code data. The timestamp, symbology, and data type are put into the ITC_BARCODE_DATA_DETAILS structure. Passing in a pointer to this structure is optional. The following sample code uses an infinite timeout. ITC_BARCODE_DATA_DETAILS stBCDetails; BYTE rgbBCData[1024]; // Buffer used to accept the bar code data DWORD dwBytesReceived; // Number of bytes in the return data. HRESULT hrStatus = pIBCControl->Read( rgbBCData, sizeof(rgbBCData), &dwBytesReceived, & stBCDetails, INFINITE ); 4 Compile and link the application. Read-Ahead Bar Code Data Access The Bar Code Reader COM object delivers ADC data to the connection in read-ahead mode. In this mode, the data is queued until a COM connection is ready to read it. Read-ahead mode decouples reader device performance from the application performance. That is, data is read as fast as the user can scan it, independent of the connection processing load. No data will be scanned until the first Read() function is posted. 140 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Grid Data Filtering The virtual wedge retrieves scanned Automatic Data Collection (ADC) data and sends it to the keypad driver so that the 700 Series Computer can receive and interpret the data as keypad input. The data can be filtered so that only data conforming to a certain text pattern or symbology will be sent to an application. After the data is filtered, it can be edited by adding, deleting, or rearranging portions of the text or by extracting portions of text for further editing. To filter and edit data, you need to define the virtual wedge grid parameters. S Grid Processing: Grid processing takes place in two steps: S Compilation: In which the user’ s grid expressions are checked for errors and reduced to a binary form for faster matching. This is done whenever the virtual wedge grid is set or changed by configuration software. S Matching: In which data is tested against the grids set in compilation. Matching can be performed multiple times after a compilation. The AIM symbology ID of the data being tested, including the enclosing angle brackets, must be prepended to the incoming data. Syntax The basic syntax of each grid expression is: filter-expression= > editing-expression where: S symID Is the AIM symbology ID (see the AIM Symbology ID Defaults table starting on page 219). S filterexpression Is any character string that includes valid filter expression values (see the “Filter Expression Values” table on the next page). S editing-expression Is any character string that includes valid editing expression values (see the “Editing Expression Values” table on page 144). 700 Series Color Mobile Computer User’s Manual 141 Chapter 6 — Scanner Support Filter Expression Values A filter-expression can be any string of text containing the operators listed below. Filter Expression Values Operator Meaning Example Any character string not containing the special characters: . ? [ ] { } or \ (period, question mark, left/right brackets, left/right curly brackets, backslash). Match the string literally. super20 matches super20 \c where c is any of the special characters: . ? [ ] { } or \ (period, question mark, left/right brackets, left/right curly brackets, backslash) Remove any special meaning of c. \* matches * . (period) Any character. . matches x ^ (tarot) Anchor the match at the beginning of the string. ^abc matches abc, but not aabc $ (dollar sign) Anchor the match at the end of the string. abc$ matches abc but not abcc ? (question mark) Repeat the preceding expression zero or one time. aa? matches a or aa * (asterisk) Repeat the preceding expression zero or more times. ab*c matches ac, abc, abbc, etc. + (plus symbol) Repeat the preceding expression one or more times. ab+c matches abc, abbc, etc. [characterclass] A series of nonrepeating characters denoting a class. [abcdefhijklmnopqrstuvwxyz] is the class of all lowercase alphas. [rangel`rangeh] A sequential range of nonrepeating characters denoting a class. [a-z] is the class of all lowercase alphas. [^characterclass] Any character except those denoted by a character class. [^a-z] matches a numeric digit or a punctuation mark. [characterclass_tag] [:alnum:] - Alphanumeric characters [[:alpha:]]* matches Dynaction, [:alpha:] - Alphabetic characters Selmer, or NewWonder but not Su[:blank:] - Tab and space per20 [:cntrl:] - Control characters [:digit:] - Numeric characters [:graph:] - All printable characters except space [:lower:] - Lowercase letters [:print:] - All printable characters [:punct:] - Punctuation [:space:] - White space characters [:upper:] - Uppercase letters [:xdigit:] - Hexadecimal digits {num} Matches exactly num repetitions. a{3} matches only aaa {min,} Matches at least num repetitions. a{3,} matches aaaa but not aa 142 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Filter Expression Values (continued) Operator Meaning Example {min,max} A repetition operator like + or *, ex- [a-z]{1,3} matches a, ab, or aab, but cept the number of repetitions is spe- not aabc cified by min and max. (expr1)|(expr2) Matches expr1 or expr2. a|b matches a or b (subexpression) Grouping operator to consolidate terms into a subexpression, which can override the order of evaluation. Overriding evaluation order: (ab)*c matches c, abc, ababc, etc. Back-referencing: (aa)bb\1 matches The subexpression is available for lat- aabbaa. er matching or editing by means of \index, where \index is between 1-9 and refers to the index-th group in the string, counting from left to right. \0 refers to the whole expression. 700 Series Color Mobile Computer User’s Manual 143 Chapter 6 — Scanner Support Editing Expression Values This table lists the valid operators for editing expressions. Operator Meaning \index The index-th subexpression (reading left-right) M([0-9]{6})= > \1 produces 270494 when in the matched string. index must be between M270494 is scanned, stripping off the first 0`9. \0 is the matched expression itself. character. & or \0 The matched expression itself. M[0-9]{6}= > \0-Conn and M[0-9]{6}= > &-Conn both produce M270494-Conn when M270494 is scanned. \xhh A concise representation of the lower 256 characters in the Unicode set. When converted, this is still a 16-bit value. \x0d inserts a carriage return. any character string Inserts any character string in the output string. Example See previous examples. S is optional. If present, only data in the indicated symbology is accepted. S If the entire expression is blank, all data is passed unchanged. If = > editing-expression is omitted, then all data that passes through the filter is returned unchanged. If = > editing expression is present, the data is transformed by editing-expression. S Multiple grid expressions can be compiled and are related in a logical OR fashion. These are expressed as single grid expressions separated by semicolons. When matching is attempted, the first grid expression from left to right that achieves a match will cause the data to be accepted. S All pattern expressions and parsed data are in Unicode. Grid Filter Example 1 This accepts a serial number in which the encoded number is a six-character string beginning with M followed by six numeric characters. S Filter M[0-9]{6} S Effect When a bar code, such as M270494, is scanned, all data is passed. Grid Filter Example 2 This formats a scanned Social Security number and forms it into an XML element tagged “SSN”. S Filter ([0-9]{3})([0-9]{2})([0-9]{4})= > \1-\2-\3 S Effect A bar code, such as 123456789, is passed and reformatted to123-45-6789 144 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Grid Filter Example 3 This deletes the first three and last five characters of a 21-character Code 128 label and deletes the first two characters of a 10-character Interleaved 2 of 5 label. S Filter <]C > ...(.{13}).....= > \1; <]I > ..(........)= > \1 S Effect If Code 128, AAA1234567890123BBBBB becomes 1234567890123 If Interleaved 2 of 5, AA12345678 becomes 12345678 Grid Filter Example 4 This inverts data such that the first alphabetic string (like a first name) and second alphabetic string (like a last name) are reversed and separated by a comma and a space. S Filter ([[:alpha:]])+ ([[:alpha:]])+= > \2, \1 S Effect When a bar code with the data “Dexter Gordon” is scanned, the data is modified to read “Gordon, Dexter”. ADC Connection A 700 Series Computer can have both Bar Code and RFID reader engines with each engine supporting multiple connections. Each connection allows an application to access data or manage a configuration. An application could have multiple connections. // Get an instance of the ADC COM object that corresponds integrated scanner IBarCodeReaderControl *pIBCControl; // Pointer to the Bar Code Reader object HRESULT hrStatus = ITCDeviceOpen( TEXT(”default”), IID_IBarCodeReaderControl, ITC_DHDEVFLAG_READAHEAD, (LPVOID *) &pIBCControl); // If the ADC object was successfully created and initialized, accept bar code data. ITC_BARCODE_DATA_DETAILS stBCDetails; stBCDetails.wStructSize = sizeof(stBCDetails); BYTE rgbBCData[1024]; //Buffer used to accept the bar code data DWORD dwBytesReceived; // Number of bytes in the return data. HRESULT hrStatus = pIBCControl->Read( rgbBCData, sizeof(rgbBCData), &dwBytesReceived, & stBCDetails, INFINITE ); 700 Series Color Mobile Computer User’s Manual 145 Chapter 6 — Scanner Support 2D Imager Overview The 700 Color optional integrated 2D Imager captures 640x480 256-grayscale images at 20 frames per second. The imager features can be categorized into data collection features and image acquisition features as follows: Data Collection Features The imager includes a decode engine capable of decoding 2D matrix symbologies such as Data Matrix as well as the traditional 1D and stacked symbologies (see the table on the next page for supported symbologies). The application programming interfaces used to collect bar code data and configure the imager are the same as those used for the laser scanner. This includes the keyboard wedge as well as the ADC COM interfaces and includes functionality such as data editing and data filtering. In addition, the imager has the following configuration features (see “IS9CConfig3 Functions” starting on page 216 for configuration details): S Aimer LED: A small, rectangular-aiming LED is displayed periodically during the image capture and decoding process. The initial duration (after scan buttons are pressed) of the aimer LED can be configured. This helps to select the specific bar code to be scanned with multiple bar codes in the image. S Scaled Illumination LED: When the ambient light is not sufficient to decode the bar code, the red illumination LEDs will be turned on to brighten the image. The intensity of the illumination LEDs is scaled to brighten the image just enough for decode. The reduces power consumption and the effect of specular reflection. S Window size and position: The default window size (640x480) can be reduced in size and positioned. This is useful in applications where multiple bar codes may be present in the image and the specific bar code must be selected to be read. For example, the window can be sized and positioned around the aimer LED. The entire bar code must reside in the configured window for a good decode. Omni-directional scanning is a feature that does not require configuration. 1D and stacked symbologies as well as 2D matrix symbologies can be scanned with the 700 Series Computer in any orientation. Thus, time is not needed to orient the 700 horizontal as with laser scanners. 146 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support The following table shows which bar code symbologies are supported either by an imager or by a laser scanner. Bar Code Symbology Imager Laser Scanner Code 39 Interleaved 2 of 5 Standard 2 of 5 Matrix 2 of 5 Code 128 Code 93 Codabar MSI Plessey UPC EAN/EAN 128 Code 11 PDF 417 Micro PDF 417 Telepen Data Matrix QR Code Image Acquisition Features The integrated imager provides the following image acquisition features: S Real-time and Still Image Acquisition: This includes functions that start and stop image acquisition and read acquired images. S Signature Capture: This allows the application to retrieve an image of the normalized signature. This means the image is always oriented as if the picture were taken at right angles to the signature, at the same distance, and in the center of the image no matter in what orientation the picture was taken. Signature capture requires a PDF 417 or Code 128 bar code symbology to be present in the image and requires the application to identify the X,Y offsets relative to the center the bar code, the X,Y dimension of image to be captured, and the aspect ratio of the bar code. Note the units are in terms of the narrow element width of the bar code. 700 Series Color Mobile Computer User’s Manual 147 Chapter 6 — Scanner Support See the following example signature capture label and dimensions. These image acquisition features are provided through the IImage Interface defined on page 221. Y-axis Bar code height –X Intelligent bar code units –Y 148 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Create and Delete ADC COM Object Functions Use these functions to create and release ADC COM interfaces. ITCDEVMGMT.H is the header file and ITCDEVMGMT.LIB is the library. ITCDeviceOpen This function opens and initializes a communication channel to the device. In C++, this function returns a pointer to an interface on which the methods are called. In C, this function returns a handle, which is the first parameter in each of the interface function calls. Syntax HRESULT ITCDeviceOpen( LPCTSTR pszDeviceName, REFIID iid, ITC_DEVICE_FLAGS eDeviceFlags, void** ppvObject ); Parameters pszDevice [in] Pointer to a string that contains the device name on which to initialize the logical connection. The device name (Merlin 1) identifies a communications port. Use “default” for all internal scanners, such as Imager, SE900, etc. Use “ExtScanner” for tethered scanners. iid [in] The identifier of the interface being requested. eDeviceFlags [in] Enumeration that identifies the read characteristics as follows: S ITC_DHDEVFLAG_READAHEAD Data is buffered on behalf of the calling applications. Data Buffering starts after the first call to IADC::Read (). S ITC_DHDEVFLAG_NODATA The client application is managing the device to set its configuration or control its interface but not to collect data from the device. ppvObject [out] A pointer to the interface pointer identified by iid. If the object does not support this interface, ppvObject is set to NULL. Return Values HRESULT that indicates success or failure. Remarks None. See Also S ITCDeviceClose 700 Series Color Mobile Computer User’s Manual 149 Chapter 6 — Scanner Support ITCDeviceClose This function closes the interface opened with ITCDeviceOpen. Syntax: HRESULT ITCDeviceClose( IUnknown** ppvObject ); Parameters ppvObject [in,out] A pointer to the interface pointer created by ITCDeviceOpen. If successful on output, this pointer is set to NULL. Return Values None. Remarks On Windows, this interface decrements the reference count. So alternatively, IUnknown::Release() could be used and must be used if reference counting is performed with IUnknown::AddRef(). On DOS, this function closes all resources associated with the channel. See Also None. 150 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IADC Functions IADC functions provide ADC data in an input device independent manner. This interface can receive bar code data, RFID data, and other ADC data from data collection engines, such as a bar code scanner. Use IADC functions if bar code specifics such as symbology are not important to the application. IADC functions are the following. IADC.H is the header file and ITCUUID.LIB contains the IID_IADC Interface GUID value used to obtain the interface. S IADC::CancelReadRequest (page 152) S IADC::Initialize (page 153) S IADC::QueryAttribute (page 154) S IADC::QueryData (page 155) S IADC::Read (page 156) S IADC::SetAttribute (page 157) 700 Series Color Mobile Computer User’s Manual 151 Chapter 6 — Scanner Support IADC::CancelReadRequest This function cancels a pending Read() request. This call can be made on a separate thread as a Read() or on the same thread. On a separate thread, the function is useful in unblocking a blocked Read() so that other operations can be performed. On the same thread, this function is useful in stopping data from being collected on behalf of a Read Ahead Client. Syntax HRESULT IADC::CancelReadRequest( BOOL FlushBufferedData,WORD *pwTotalDiscardedMessages, DWORD *pdwTotalDiscardedBytes ); Parameters FlushBufferedData [in] True Flush and discard all already buffered data. False Do not discard data, data will be returned on the next read call. pwTotalDiscardedMessages [in/out] Total number of discarded buffered labels or tags. pdwTotalDiscardedBytes Total number of discarded bytes. Return Values HRESULT that indicates success or failure. Remarks The return value indicates whether a read was pending. See Also S IADC::Initialize S IADC::QueryAttribute S IADC::QueryData S IADC::Read S IADC::SetAttribute 152 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IADC::Initialize This function initializes a connection by opening a communications channel with a logical reader engine. The communications port is implicitly identified. This communication channel is required to collect data or configure the device. Syntax HRESULT IADC::Initialize ( LPCTSTR pszDeviceName, ITC_DEVICE_FLAGS eDeviceFlags ) ; Parameters pszDeviceName [in] Pointer to a string that contains the device name on which to initialize the logical connection. The device name (Merlin 1) identifies a communications port. Use “default” for all internal scanners, such as Imager, SE900, etc. Use “ExtScanner” for tethered scanners. eDeviceFlags [in] Enumeration that identifies the read characteristic as follows: S ITC_DHDEVFLAG_READAHEAD Data is buffered on behalf of the calling application. Data buffering starts after the first call to IADC::Read (). Return Values HRESULT that indicates success or failure. Remarks None. See Also S IADC::CancelReadRequest S IADC::QueryAttribute S IADC::QueryData S IADC::Read S IADC::SetAttribute 700 Series Color Mobile Computer User’s Manual 153 Chapter 6 — Scanner Support IADC::QueryAttribute This function retrieves a specified attribute that is device-independent. The specified attribute can be a grid or multiclient enable status. Syntax HRESULT IADC::QueryAttribute ( ITC_ADC_ATTRIBUTE_ID eAttribID, BYTE rgbBuffer[], DWORD dwBufferSize, DWORD *pnBufferData ); Parameters eAttribID [in] Specifies the attribute. Only one attribute can be queried at a time. See IADC::SetAttribute. rgbBuffer [out] Contains buffer for the attribute to be queried. The structure of lpBuffer depends on the attribute being queried. See IADC::SetAttribute for a description of these structures. dwBufferSize [in] The maximum number of bytes rgbBuffer can store. pnBufferData [out] Pointer to the DWORD location to put the number of bytes stored in rgbBuffer. Return Values HRESULT that indicates success or failure. Remarks None. See Also S IADC::CancelReadRequest S IADC::Initialize S IADC::QueryData S IADC::Read S IADC::SetAttribute 154 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IADC::QueryData This function returns the status of user input data that has been buffered. Syntax HRESULT IADC::QueryData ( DWORD *dwTotalBufferedBytes, WORD *wNumberOfMessages, DWORD *dwNextMessageSize ); Parameters dwTotalBufferedBytes [out] Total bytes buffered for connection. wNumberOfMessages [out] Total messages buffered. For example, each buffer contains a single bar code scan. dwNextMessageSize [out] Size (in bytes) of the next buffered message. Return Values A standard status code that indicates success or failure. Remarks None. See Also S IADC::CancelReadRequest S IADC::Initialize S IADC::QueryAttribute S IADC::Read S IADC::SetAttribute 700 Series Color Mobile Computer User’s Manual 155 Chapter 6 — Scanner Support IADC::Read This function requests user input data from the reader engine. This is a blocking function that returns either when there is data or after a timeout. Syntax HRESULT IADC::Read ( BYTE rgbDataBuffer[], DWORD dwDataBufferSize, DWORD pnBytesReturned, SYSTEMTIME pSystemTime, DWORD dwTimeout ); Parameters rgbDataBuffer [in] Pointer to the buffer that receives the data from the device. dwDataBufferSize [in] Maximum number of bytes that can be stored in rgbDataBuffer. pnBytesReturned [out] Pointer to the DWORD location to store the number of bytes returned in rgbDataBuffer. pSystemTime [out] Pointer to a SYSTEMTIME structure that will hold the time stamp of the received data. This can be NULL if a timestamp is not needed. dwTimeout [in] Number of milliseconds caller waits for data. This parameter is ignored if the Read Ahead flag is not set. S 0 If data is not available, returns quickly. S INFINITE Waits until data is available. Return Values HRESULT that indicates success or failure. Remarks None. See Also S IADC::CancelReadRequest S IADC::Initialize S IADC::QueryAttribute S IADC::QueryData S IADC::SetAttribute 156 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IADC::SetAttribute This function changes an attribute such as a grid specification. Syntax HRESULT IADC::SetAttribute ( ITC_ADC_ATTRIBUTE_ID eAttribID, BYTE rgbData[], DWORD nBufferSize ); Parameters eAttribID rgbData [in] Identifies the attribute to set. Only one attribute can be set at a time. The attribute is: S ITC_MULTICLIENT_ENABLE Indicates whether this client can coexist with other clients. [in] Contains data for the attribute to be set. Depending on the eAttribID, this will be mapped to the appropriate structure as follows: S ITC_MULTICLIENT_ENABLE BOOL is the rgbData Data Structure. S TRUE, Client can receive data with other clients (default). S FALSE, Data stream to this client is turned off when there are other clients. S ITC_DHATTR_READFILTER ITC_READFILTER is the rgbData Data Structure. The ITC_READFILE structure is defined in IADCDEVICE.H as follows: typedef struct #define ITC_MAXFILTER_CHARS 240 WORD nFilterChars; TCHAR szFilter[ITC_MAXFILTER_CHARS]; } ITC_READFILTER; where: S ITC_MAXFILTER_CHARS Maximum number of characters in a filter specification. Includes NULL termination. S nFilterChars Number of characters in pszDataMask. S szFilter Data mask specification. See “Grid Data Filtering.” nBufferSize [in] Number of bytes in rgbData. ITC_DHATTR_READFILTER Regular expression that performs data filtering and data editing. See “Grid Data Filtering” on page 141 for more information. Return Values A standard status code that indicates success or failure. Remarks None. 700 Series Color Mobile Computer User’s Manual 157 Chapter 6 — Scanner Support See Also S IADC::CancelReadRequest S IADC::Initialize S IADC::QueryAttribute S IADC::QueryData S IADC::Read 158 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl Functions IBarCodeReaderControl functions provide functionality for bar code collection and control only. These functions allow an application to: S Trigger the bar code laser scanner S Disable the scanner S Receive a bar code with details such as symbology scanned, data type (Unicode, ASCII), and the time the data was received. These functions include the following. IBARCODEREADER.H is the header file and ITCUUID.LIB contains the IID_IADC Interface GUID value used to obtain the interface. S IBarCodeReaderControl::CancelReadRequest (page 160) S IBarCodeReaderControl::ControlLED (page 161) S IBarCodeReaderControl::Initialize (page 162) S IBarCodeReaderControl::IssueBeep (page 163) S IBarCodeReaderControl::QueryAttribute (page 164) S IBarCodeReaderControl::Read (page 165) S IBarCodeReaderControl::SetAttribute (page 167) S IBarCodeReaderControl::TriggerScanner (page 171) 700 Series Color Mobile Computer User’s Manual 159 Chapter 6 — Scanner Support IBarCodeReaderControl::CancelReadRequest This function cancels a pending IBarCodeReaderControl::Read request. If the read request is blocked, issue the CancelReadRequest from a separate thread. Syntax HRESULT IBarCodeReaderControl::CancelReadRequest( BOOL FlushBufferedData, WORD *pwTotalDiscardedMessages,WORD *pwTotalDiscardedBytes ); Parameters FlushBufferedData [in] TRUE FALSE Flushes and discards all buffered data. Does not discard data; data will be returned on the next read call. pwTotalDiscardedMessages [in/out] Total number of discarded buffered labels or tags. pwTotalDiscardedBytes Total number of discarded bytes. Return Values HRESULT that indicates success or failure. Remarks None. See Also S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 160 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl::ControlLED This function controls LED illumination on a tethered scanner. The good read LED and any valid LEDs will be turned on and off based on defined parameters. Syntax HRESULT IBarCodeReaderControl::ControlLED( ITC_BARCODE_LASER_LED_ID eLED, BOOL fLedOn ); Parameters eLED [in] The specified LED identifier. S ITC_BARCODE_LASER_GOOD_READ_LED Identifies the good read LED. fLedOn [in] TRUE turns on the LED. FALSE turns off the LED. Return Values HRESULT that indicates success or failure. Remarks This function does not coordinate LED control with the scanner. If the scanner LED control is enabled, function results will be unpredictable. See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 700 Series Color Mobile Computer User’s Manual 161 Chapter 6 — Scanner Support IBarCodeReaderControl::Initialize This function opens and initializes a communications channel with a logical bar code reader engine. Syntax HRESULT IBarCodeReaderControl::Initialize ( LPCTSTR pszDeviceName, ITC_DEVICE_FLAGS eDeviceFlags ) ; Parameters pszDeviceName [in] Pointer to a string with device on which to initialize the logical connection. The device identifies a communications port. Use “default” for all internal scanners, such as Imager, SE900, etc. Use “ExtScanner” for tethered scanners. eDeviceFlags [in] Enumeration that identifies the read characteristic as follows: S ITC_DHDEVFLAG_READAHEAD Data is buffered on behalf of the calling applications. Data Buffering starts after the first call to IADC::Read (). Return Values HRESULT that indicates success or failure. Remarks None. See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 162 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl::IssueBeep This function causes the reader engine to generate a high beep, a low beep, or a custom beep. The high beep and low beep are preconfigured beep tones and durations. The custom beep allows the client to specify the frequency and duration. The volume is the current volume setting. Note this is not implemented. Syntax HRESULT IBarCodeReaderControl::IssueBeep( ITC_BEEP_SPEC rgBeepRequests[], DWORD dwNumberOfBeeps ); Parameters rgBeepRequests [in] Array of ITC_BEEP_SPEC structures that identifies the beep type. The beep structure is: typedef struct tagITCBeepSpec ITC_BEEP_TYPE eBeepType; // Identifies the type of beep // Following fields used only if the beep type is ITC_CUSTOM_BEEP. WORD wPitch; // Frequency, in Hz, of the beep. WORD wOnDuration; // Duration, in milliseconds, of Beep On. WORD wOffDuration; // Duration, in milliseconds, of Beep Off // Beep Off is used to separate individual beeps } ITC_BEEP_SPEC; typedef enum tagITCBeepType ITC_LOW_BEEP, // Issue the default low beep. ITC_HIGH_BEEP, // Issue the default high beep. ITC_CUSTOM_BEEP, // Issue a custom beep. } ITC_BEEP_TYPE; dwNumberOfBeeps [in] Identifies the total number of beeps in rgBeepRequests. Return Values E_NOTIMPL as this function is not implemented. Remarks None. See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 700 Series Color Mobile Computer User’s Manual 163 Chapter 6 — Scanner Support IBarCodeReaderControl::QueryAttribute This function retrieves the device-specific grid, the scanner enable status, and the LED control status for the current bar code reader engine. Syntax HRESULT IBarCodeReaderControl::QueryAttribute ( ITC_BARCODEREADER_ATTRIBUTE_ID eAttr, BYTE rgbAttrBuffer[], DWORD dwAttrBufferSize ); Parameters eAttr [in] Specifies the attribute. See IBarCodeReaderControl::SetAttribute on page 167 for the attributes. rgbAttrBuffer [out] Contains buffer for the attribute to be queried. The structure of rgbAttrBuffer depends on the attribute being queried. See IBarCodeReaderControl::SetAttritbute for a description of these structures. dwAttrBufferSize [in] The maximum number of bytes that rgbAttrBuffer can store. Return Values A standard status code that indicates success or failure. Remarks The following attributes are not supported on the imager: S ITC_RDRATTR_TONE_ENABLE S ITC_RDRATTR_VOLUME_LEVEL S ITC_RDRATTR_TONE_FREQUENCY S ITC_RDRATTR_GOOD_READ_BEEPS_NUMBER S ITC_RDRATTR_GOOD_READ_BEEP_DURATION See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 164 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl::Read This function reads data from the bar code input device. This method performs the same function as IADC::Read () except that it provides additional information about data received such as bar code symbology used, data type, and time stamp of received data. Syntax HRESULT IBarCodeReaderControl::Read ( BYTE rgbDataBuffer[],DWORD dwDataBufferSize, DWORD pnBytesReturned,ITC_BARCODE_DATA_DETAILS pBarCodeDataDetails, DWORD dwTimeout ); Parameters rgbDataBuffer [in] Pointer to the buffer that receives data from the device. dwDataBufferSize [in] Maximum number of bytes that can be stored in rgbDataBuffer. pnBytesReturned [out] Pointer to the DWORD location that will store the bytes returned in rgbDataBuffer. pBarCodeDataDetails [in] Address of data structure in which to put the data details. This may be NULL. The ITC_BARCODE_DATA_DETAILS is: typedef struct tagITCBarCodeDetails WORD wStructSize, ITC_BARCODE_SYMBOLOGY_ID eSymbology, ITC_BARCODE_DATATYPE eDataType, SYSTEMTIME stTimeStamp, }ITC_BARCODE_DATA_DETAILS; typedef enum tagBarCodeDataType BARCODE_DATA_TYPE_UNKNOWN = 1, BARCODE_DATA_TYPE_ASCII, BARCODE_DATA_TYPE_UNICODE, }ITC_BARCODE_DATATYPE; where: S wStructSize Size of structure. Used for versioning structure. S eSymbology Symbology of the returned data. S eDataType Identifies data types as ASCII, UNICODE, etc. S stTimeStamp Timestamp of the received data. S BARCODE_DATA_TYPE_UNKNOWN Data in unknown. S BARCODE_DATA_TYPE_ASCII Data is ASCII. S BARCODE_DATA_TYPE_UNICODE Data is UNICODE. 700 Series Color Mobile Computer User’s Manual 165 Chapter 6 — Scanner Support dwTimeout [in] Number of milliseconds caller waits for data. If you set a timeout, the call will be blocked until data is received. S 0 If data not available, returns quickly. S INFINITE Waits until data is available. Return Values HRESULT that indicates success or failure. Remarks None. See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::SetAttribute S IBarCodeReaderControl::TriggerScanner 166 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl::SetAttribute This function enables and disables the laser scanner, sets the bar code reader engine specific grid, and enables or disables the reader engine LED control. Syntax HRESULT IBarCodeReaderControl::SetAttribute ( ITC_BARCODEREADER_ATTRIBUTE_ID eAttr, BYTE rgbAttrBuffer[], DWORD dwAttrBufferSize ); Parameters eAttr [in] Identifies the attribute to set. Only one attribute can be set at a time. The attributes are: S ITC_RDRATTR_SCANNER_ENABLE Enable or disable scanner for all connections. S ITC_RDRATTR_GOOD_READ_LED_ENABLE Enables and disables the reader engine from controlling the good read LED. S ITC_RDRATTR_TONE_ENABLE Enables and disables the reader engine from issuing beeps. S ITC_RDRATTR_VOLUME_LEVEL Sets beep volume level. S ITC_RDRATTR_TONE_FREQUENCY Sets beep frequency. S ITC_RDRATTR_GOOD_READ_BEEPS_NUMBER Sets number of beeps for a good read. S ITC_RDRATTR_GOOD_READ_BEEP_DURATION Sets duration of beeps for a good read. S ITC_DHATTR_READFILTER The ITC_READFILTER is the rgbData Data Structure. The ITC_READFILE structure is defined in IADCDEVICE.H as follows: typedef struct #define ITC_MAXFILTER_CHARS 240 WORD nFilterChars; TCHAR szFilter[ITC_MAXFILTER_CHARS]; } ITC_READFILTER; where: S nFilterChars Number of characters in pszDataMask. S szFilter Data mask specification. See “Grid Data Filtering.” S ITC_MAXFILTER_CHARS Maximum number of characters in a filter specification. Includes NULL termination. 700 Series Color Mobile Computer User’s Manual 167 Chapter 6 — Scanner Support rgbAttrBuffer [in] Contains data for the attribute to be set. Depending on eAttr, the rgbAttrData will be mapped to the appropriate structure as shown in the following table . rgbAttrBuffer Data Structures eAttr Data Structure contained in rgbAttrBuffer ITC_RDRATTR_GRID ITC_BARCODEREADER_READER_GRID Reader Engine specific grid only. ITC_RDRATTR_SCANNER_ENABLE BOOL TRUE Enable scanner. FALSE Disable scanner. ITC_RDRATTR_GOOD_READ_LED_ENABLE BOOL TRUE Reader Engine controls good read LED. FALSE Good read LED is not controlled. ITC_RDRATTR_DATA_VALID_LED_ENABLE BOOL TRUE Reader Engine controls data valid LED. FALSE Data valid LED is not controlled. ITC_RDRATTR_TONE_ENABLE BOOL TRUE Reader Engine issues beeps. FALSE Beeps are not issued. ITC_RDRATTR_VOLUME_LEVEL ITC_BEEP_VOLUME An enumerator that identifies the beep volume level control. Valid range for S9C: typedef enum tagBeepVolume ITC_BEEP_VOLUME_LOW = 0, ITC_BEEP_VOLUME_MEDIUM = 2, ITC_BEEP_VOLUME_HIGH = 1 //Default }ITC_BEEP_VOLUME Note: Due to the hardware design on this 700 Series Computer, the volume level can be either OFF (ITC_BEEP_VOLUME_LOW) or ON (ITC_BEEP_VOLUME_MEDIUM/HIGH). ITC_RDRATTR_TONE_FREQUENCY 168 DWORD A value that identifies the tone frequency in Hz. Valid range for S9C: 1000`4095 Hz (default: 2090). Note: Value is divided by 10 for storage. On retrieval, the scanner rounds off the value to the nearest 10 Hz, then multiplies the value by 10. For example, the value sent to the scanner is 2095. On retrieval, the value returned is 2090. 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support rgbAttrBuffer Data Structures (continued) eAttr Data Structure contained in rgbAttrBuffer ITC_RDRATTR_GOOD_READ_BEEPS_NUMBER ITC_GOOD_READ_BEEPS_NUMBER An enumerator identifying the good read beeps number. Valid range for S9C: typedef enum tagGoodReadBeepsNumber ITC_NUM_BEEPS_NONE = 0, ITC_NUM_BEEPS_ONE = 1, // Default ITC_NUM_BEEPS_TWO = 2 }ITC_GOOD_READ_BEEPS_NUMBER ITC_RDRATTR_GOOD_READ_BEEP_DURATION dwAttrBufferSize DWORD Value identifying the good read beep duration in ms. Valid range for S9C: 0`2550 ms (Default: 80). Note: Value is divided by 10 for storage. On retrieval, the scanner rounds the value to the nearest 10 ms, then multiplies the value by 10. [in] The size of rgbAttrBuffer in bytes. Return Values HRESULT that indicates success or failure. Remarks Read ahead and non-read ahead clients can change the grid. Since changing the grid changes the entire reader engine grid, use IBarCodeReaderControl::QueryAttribute to retrieve the current reader engine grid and grid changes before sending back using SetAttribute. The grid structure is typedef struct tagBarCodeReaderGrid. ITC_DI_GRID stDIGrid; // Device independent grid. ITC_DDBARCODE_GRID stDDGrid; // Reader engine dependent grid DWORD dwDataSourceTypeMask; } ITC_BARCODEREADER_GRID; ITC_DI_GRID typedef struct tagItcBarCodeGrid DWORD dwSymbologyMask; // Symbologies to be received. } ITC_DDBARCODE_GRID; When the scanner is enabled, it scans when the scan button is pressed or the trigger is pulled. When the scanner is disabled, it does not respond when the scan button is pressed or the trigger is pulled. 700 Series Color Mobile Computer User’s Manual 169 Chapter 6 — Scanner Support The following attributes are not supported on the imager: S ITC_RDRATTR_TONE_ENABLE S ITC_RDRATTR_VOLUME_LEVEL S ITC_RDRATTR_TONE_FREQUENCY S ITC_RDRATTR_GOOD_READ_BEEPS_NUMBER S ITC_RDRATTR_GOOD_READ_BEEP_DURATION See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::TriggerScanner 170 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IBarCodeReaderControl::TriggerScanner This function turns the scanner on and off. The client application must coordinate control of the scanner with the user. Syntax HRESULT IBarCodeReaderControl::TriggerScanner ( BOOL fScannerOn ); Parameters fScannerOn [in] Set TRUE to turn the scanner on. Set FALSE to turn the scanner off. Return Values HRESULT that indicates success or failure. Remarks The scanner will be turned on or off independent of the actions of the users. The client application must coordinate control of the scanner with the user. When the scanner is turned on, its behavior is controlled by the trigger mode. That is, in one shot mode, the laser turns off when a label is scanned; in auto-trigger mode, the laser remains on. See Also S IBarCodeReaderControl::CancelReadRequest S IBarCodeReaderControl::ControlLED S IBarCodeReaderControl::Initialize S IBarCodeReaderControl::IssueBeep S IBarCodeReaderControl::QueryAttribute S IBarCodeReaderControl::Read S IBarCodeReaderControl::SetAttribute 700 Series Color Mobile Computer User’s Manual 171 Chapter 6 — Scanner Support IS9CConfig Functions This interface provides methods to set and retrieve the 700 Series Computer bar code configuration. All supported symbologies are initialized to their defaults when the S9C firmware is loaded. GET/SET functions use enumerations as their parameters. In most enumerations, there is an enumerator xx_NO_CHANGE (such as ITC_CODE39_NO_CHANGE), where xx refers to a particular enumeration. This enumerator can be used during a call to a SET to indicate that no change is to be made to that particular parameter. This prevents the called function from having to format the same S9C command and send down to the S9C scanner. For all symbologies, to set a bar code length of “any length,” use a value of “0” for the bar code length argument. IS9CConfig functions are the following. IS9CCONFIG.H is the header file and ITCUUID.LIB contains the IID_IADC Interface GUID value used to obtain the interface. 172 IS9CConfig::GetCodabar (page 173) IS9CConfig::SetCodabar (page 174) IS9CConfig::GetCode39 (page 176) IS9CConfig::SetCode39 (page 177) IS9CConfig::GetCode93 (page 179) IS9CConfig::SetCode93 (page 179) IS9CConfig::GetCode128 (page 180) IS9CConfig::SetCode128 (page 181) IS9CConfig::GetI2of5 (page 183) IS9CConfig::SetI2of5 (page 184) IS9CConfig::GetMatrix2of5 (page 185) IS9CConfig::SetMatrix2of5 (page 186) IS9CConfig::GetMSI (page 187) IS9CConfig::SetMSI (page 187) IS9CConfig::GetPDF417 (page 188) IS9CConfig::SetPDF417 (page 189) IS9CConfig::GetPlessey (page 192) IS9CConfig::SetPlessey (page 192) IS9CConfig::GetStandard2of5 (page 194) IS9CConfig::SetStandard2of5 (page 195) IS9CConfig::GetTelepen (page 197) IS9CConfig::SetTelepen (page 197) IS9CConfig::GetUpcEan (page 198) IS9CConfig::SetUpcEan (page 200) 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::GetCodabar This function retrieves the current settings of Codabar symbology. Syntax HRESULT IS9CConfig::GetCodabar( ITC_CODABAR_DECODING* peDecode, ITC_CODABAR_START_STOP* peSS, ITC_CODABAR_CLSI* peCLSI, ITC_CODABAR_CHECK_DIGIT* peCheck, ITC_BARCODE_LENGTH_ID* peLengthId, BYTE rgbLengthBuff[], DWORD* pdwNumBytes ); Parameters peDecode [out] Pointer to the ITC_CODABAR_DECODING location to receive the decoding for Codabar symbology. peSS [out] Pointer to the ITC_CODABAR_START_STOP location to receive the Start/Stop option. peCLSI [out] Pointer to the ITC_CODABAR_CLSI location to receive the CLSI library system. peCheck [out] Pointer to the ITC_CODABAR_CHECK_DIGIT location to receive the check digit. peLengthId [out] Pointer to the ITC_BARCODE_LENGTH_ID location to receive an indicator of either ITC_BARCODE_LENGTH or ITC_BARCODE_FIXED_LENGTH. rgbLengthBuff [out,size_is(3)] An array of bytes to receive 1 byte of data for ITC_BARCODE_LENGTH, or 3 bytes of data for ITC_BARCODE_FIXED_LENGTH. pdwNumBytes [out] Pointer to the DWORD location to receive a number indicating number of bytes in rbgLengthBuff[]: 1 byte for ITC_BARCODE_LENGTH or 3 bytes for ITC_BARCODE_FIXED_LENGTH. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 173 Chapter 6 — Scanner Support IS9CConfig::SetCodabar This function updates the Codabar settings with new values. Syntax HRESULT IS9CConfig::SetCodabar( ITC_CODABAR_DECODING eDecode, ITC_CODABAR_START_STOP eSS, ITC_CODABAR_CLSI eCLSI,ITC_CODABAR_CHECK_DIGIT eCheck, ITC_BARCODE_LENGTH_ID eLengthId, BYTE rgbLengthBuff[],DWORD dwNumBytes ); Parameters eDecode [in] Identifies the decoding for Codabar symbology. eSS [in] Identifies the Start/Stop option. eCLSI [in] Identifies the CLSI library system. eCheck [in] Identifies the check digit. eLengthId [in] Use ITC_BARCODE_LENGTH_NO_CHANGE to indicate no change for bar code length. Use ITC_BARCODE_LENGTH for any length and minimum length, and set rgbLengthBuff[0] to a valid length value. Use ITC_BARCODE_FIXED_LENGTH to compose 1 or 2 or 3 fixed lengths, and set 3 bytes: rgbLengthBuff[0], rgbLengthBuff[1], rgbLengthBuff[2] with valid values. rgbLengthBuff [in,size_is(dwNumBytes)] An array of bytes containing bar code lengths when eLengthId = ITC_BARCODE_LENGTH or ITC_BARCODE_FIXED_LENGTH. dwNumBytes [in] Number of bytes in rbgLengthBuff[]. For S9C, this value is 1 when eLengthId = ITC_BARCODE_LENGTH or 3 when eLengthId = ITC_BARCODE_FIXED_LENGTH Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 174 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Codabar Default Settings Parameter Default Valid Range Decode Not Active ITC_CODABAR_DECODING CLSI Library System Not Active ITC_CODABAR_CLSI Start/Stop Not Transmitted ITC_CODABAR_START_STOP Check Digit Not Used ITC_CODABAR_CHECK_DIGIT Bar Code Length Minimum Length = 6 0x00`0xFE ITC_BC_LENGTH_NO_CHANGE Codabar Enumerations typedef enum tagCodabarDecoding ITC_CODABAR_NOTACTIVE = 0, ITC_CODABAR_ACTIVE = 1, ITC_CODABAR_NO_CHANGE = 255 } ITC_CODABAR_DECODING; typedef enum tagCodabarStartStop ITC_CODABAR_SS_NOTXMIT, ITC_CODABAR_SS_LOWERABCD, ITC_CODABAR_SS_UPPERABCD, ITC_CODABAR_SS_LOWERABCDTN, ITC_CODABAR_SS_DC1TODC4, ITC_CODABAR_SS_NO_CHANGE = 255 } ITC_CODABAR_START_STOP; typedef enum tagCodabarClsi ITC_CODABAR_CLSI_NOTACTIVE = 0, ITC_CODABAR_CLSI_ACTIVE = 1, ITC_CODABAR_CLSI_NO_CHANGE = 255 } ITC_CODABAR_CLSI; // Default // // // // // Default a,b,c,d A,B,C,D a,b,c,d / t,n,*,e DC1,DC2,DC3,DC4 // Default typedef enum tagCodabarCheckDigit ITC_CODABAR_CHECK_NOTUSED, ITC_CODABAR_CHECK_XMIT, ITC_CODABAR_CHECK_NOTXMIT, ITC_CODABAR_CHECK_NO_CHANGE = 255 } ITC_CODABAR_CHECK_DIGIT; // Default typedef enum tagBarcodeLengthId ITC_BARCODE_LENGTH = 0, ITC_BARCODE_FIXED_LENGTH, ITC_BARCODE_LENGTH_NO_CHANGE = 255 } ITC_BARCODE_LENGTH_ID; 700 Series Color Mobile Computer User’s Manual 175 Chapter 6 — Scanner Support IS9CConfig::GetCode39 This function retrieves the current settings of Code 39. Syntax HRESULT IS9Cconfig::GetCode39( ITC_CODE39_DECODING* peDecode, ITC_CODE39_FORMAT* peFormat, ITC_CODE39_START_STOP* peSS,ITC_CODE39_SS_CHARS* peSSChars, ITC_CODE39_CHECK_DIGIT* peCheck, DWORD* pwLength ); Parameters peDecode [out] Pointer to the ITC_CODE39_DECODING location to receive the decoding for Code 39. peFormat [out] Pointer to the ITC_CODE39_FORMAT location to receive the Code 39 format. peSS [out] Pointer to the ITC_CODE39_START_STOP location to receive the Code 39 start/stop. peSSChars [out] Pointer to the ITC_CODE39_SS_CHARS location to receive the Start/Stop character. peCheck [out] Pointer to the ITC_CODE39_CHECK_DIGIT location to receive the check digit. pwLength [out] Pointer to the DWORD location to receive the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 176 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::SetCode39 This function updates the Code 39 settings with new values. Syntax HRESULT IS9CConfig::SetCode39( ITC_CODE39_DECODING eDecode,ITC_CODE39_FORMAT eFormat, ITC_CODE39_START_STOP eSS,ITC_CODE39_SS_CHARS eSSChars, ITC_CODE39_CHECK_DIGIT eCheck, DWORD dwLength ); Parameters eDecode [in] Identifies the decoding for Code 39. eFormat [in] Identifies the Code 39 Format. eSS [in] Identifies the Start/Stop option. eSSChars [in] Identifies the Start/Stop character. eCheck [in] Identifies the Check digit. dwLength [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Code 39 Default Settings Parameter Default Valid Range Decoding Active ITC_CODE39_DECODING Format Standard 43 Character ITC_CODE39_FORMAT Start/Stop Not Transmitted ITC_CODE39_START_STOP Accepted Start/stop Characters * only ITC_CODE39_SS_CHARS Check Digit Not Used ITC_CODE39_CHECK_DIGIT Bar Code Length Any Bar Code Length 0x00`0xFE 700 Series Color Mobile Computer User’s Manual ITC_BC_LENGTH_NO_CHANGE 177 Chapter 6 — Scanner Support Code 39 Enumerations typedef enum tagCode39Decoding ITC_CODE39_NOTACTIVE = 0, ITC_CODE39_ACTIVE = 1, ITC_CODE39_NO_CHANGE = 255 } ITC_CODE39_DECODING; typedef enum tagCode39Format ITC_CODE39_FORMAT_STANDARD43, ITC_CODE39_FORMAT_FULLASCII, ITC_CODE39_FORMAT_NO_CHANGE = 255 } ITC_CODE39_FORMAT; typedef enum tagCode39StartStop ITC_CODE39_SS_NOTXMIT, ITC_CODE39_SS_XMIT, ITC_CODE39_SS_NO_CHANGE = 255 } ITC_CODE39_START_STOP; // Default // Default // Default typedef enum tagCode39StartStopChars ITC_CODE39_SS_CHARS_DOLLARSIGN, ITC_CODE39_SS_CHARS_ASTERISK, // Default ITC_CODE39_SS_CHARS_BOTH, ITC_CODE39_SS_CHARS_NO_CHANGE = 255 } ITC_CODE39_SS_CHARS; typedef enum tagCode39CheckDigit ITC_CODE39_CHECK_NOTUSED, // Default ITC_CODE39_CHECK_MOD43_XMIT, ITC_CODE39_CHECK_MOD43_NOTXMIT, ITC_CODE39_CHECK_FRENCH_CIP_XMIT, ITC_CODE39_CHECK_FRENCH_CIP_NOTXMIT, ITC_CODE39_CHECK_ITALIAN_CPI_XMIT, ITC_CODE39_CHECK_ITALIAN_CPI_NOTXMIT, ITC_CODE39_CHECK_NO_CHANGE = 255 } ITC_CODE39_CHECK_DIGIT; 178 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::GetCode93 This function retrieves the current settings of Code 93. Syntax HRESULT IS9CConfig::GetCode93( ITC_CODE93_DECODING* peDecode, DWORD* pdwLength ); Parameters peDecode [out] Pointer to the ITC_CODE93_DECODING location to receive the decoding for Code 93 symbology. pdwLength [out] Pointer to the DWORD location to receive a value for bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig::SetCode93 This function updates the Code 93 settings with new values. Syntax HRESULT IS9CConfig::SetCode93( ITC_CODE93_DECODING eDecode,DWORD dwLength ); Parameters eDecode [in] Identifies the decoding for Code93 Symbology. dwLength [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Code 93 Default Settings Parameter Default Valid Range Decoding Not Active ITC_CODE93_DECODING Bar Code Length Any Bar Code Length 0x00`0xFE 700 Series Color Mobile Computer User’s Manual ITC_BC_LENGTH_NO_CHANGE 179 Chapter 6 — Scanner Support Code 93 Enumerations Use this when the bar code length does not require any change. typedef enum tagCode93Decoding ITC_CODE93_NOTACTIVE = 0, // Default ITC_CODE93_ACTIVE = 1, ITC_CODE93_NO_CHANGE = 255 } ITC_CODE93_DECODING; #define ITC_BC_LENGTH_NO_CHANGE 255. IS9CConfig::GetCode128 This function retrieves the current settings of Code 128 symbology. Syntax HRESULT IS9Cconfig::GetCode128( ITC_CODE128_DECODING* peDecode, ITC_EAN128_IDENTIFIER* peEan128Ident, ITC_CODE128_CIP128 peCip128State, BYTE* pbyFNC1, DWORD* pdwLength ); Parameters peDecode [out] Pointer to the ITC_CODE128_DECODING location to receive the decoding for Code 128 symbology. peEan128Ident [out] Pointer to the ITC_EAN128_IDENTIFIER location to receive the EAN 128 identifier. peCip128State [out] Pointer to the ITC_CODE128_CIP128 location to receive the CIP 128. pbyFNC1 [out] Pointer to the BYTE location to receive the FNC1 separator character. pdwLength [out] Pointer to the DWORD location to receive a value for bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 180 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::SetCode128 This function updates the Code 128 settings with new values. Syntax HRESULT IS9CConfig::SetCode128( ITC_CODE128_DECODING eDecode, ITC_EAN128_IDENTIFIER eEan128Ident, ITC_CODE128_CIP128 eCip128State, BYTE byFNC1, DWORD dwLength ); Parameters eDecode [in] Identifies the decoding for Code 128 symbology. eEan128Ident [in] Identifies the EAN 128 identifier. eCip128State [in] Identifies the CIP 128. byFNC1 [in] Identifies the FNC1 separator character, usually any ASCII value. dwLength [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Code 128/EAN 128 Default Settings Parameter Default Valid Range Decoding Not Active ITC_CODE128_DECODING EAN 128 Identifier Include ]C1 ITC_EAN128_IDENTIFIER CIP 128 French Pharmaceutical Codes Not Active ITC_CODE128_CIP128 FNC1 Separator Character (EAN 128 norms) GS function Char ASCII 29 or 0x1D 0x00`0xFE ITC_CODE128_FNC1_NO_CHANGE Bar Code Length Any Bar Code Length 0x00`0xFE ITC_BC_LENGTH_NO_CHANGE 700 Series Color Mobile Computer User’s Manual 181 Chapter 6 — Scanner Support Code 128 Enumerations typedef enum tagCode128Decoding ITC_CODE128_NOTACTIVE = 0, // Default ITC_CODE128_ACTIVE = 1, ITC_CODE128_NO_CHANGE = 255 } ITC_CODE128_DECODING; typedef enum tagEan128Identifier ITC_EAN128_ID_REMOVE, ITC_EAN128_ID_INCLUDE, // Default ITC_EAN128_ID_NO_CHANGE = 255 } ITC_EAN128_IDENTIFIER; typedef enum tagCode128Cip128 ITC_CODE128_CIP128_NOTACTIVE = 0, // Default ITC_CODE128_CIP128_ACTIVE = 1, ITC_CODE128_CIP128_NO_CHANGE = 255 } ITC_CODE128_CIP128; #define ITC_CODE128_FNC1_NO_CHANGE 255. This definition can be used when the Code128 FNC1 does not require any change. #define ITC_BC_LENGTH_NO_CHANGE 255. This definition can be used when the bar code length does not require any change. The table below shows what to be expected for EAN 128 labels for various symbology identifier transmit configurations and EAN 128 Identifier options. Setup Application’s Expected Result EAN 128 ]C1 ID Symbology ID option EAN 128 Label Other Labels Include ]C1 Disabled Remove ]C1 Disabled Include ]C1 AIM ID Transmitted ]C1 ]XY Remove ]C1 AID ID Transmitted ]C1 ]XY Include ]C1 Custom ID Transmitted Z]C1 Z Remove ]C1 Custom ID Transmitted Z Z where “X” is the symbology identifier, “Y” is the modifier character, and “Z” is the 1-byte symbology identifier. 182 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::GetI2of5 This function retrieves the current settings of Interleaved 2 of 5. Syntax HRESULT IS9CConfig::GetI2of5( ITC_INTERLEAVED2OF5_DECODING* peDecode, ITC_INTERLEAVED2OF5_CHECK_DIGIT* peCheck, ITC_BARCODE_LENGTH_ID* peLengthId, BYTE rbgLengthBuff[], DWORD* pdwNumBytes ); Parameters peDecode [out] Pointer to the ITC_INTERLEAVED2OF5_DECODING location to receive the decoding for Interleaved 2 of 5 symbology. peCheck [out] Pointer to the ITC_INTERLEAVED2OF5_CHECK_DIGIT location to receive the check digit. peLengthId [out] Pointer to the ITC_BARCODE_LENGTH_ID location to receive an indicator of either ITC_BARCODE_LENGTH or ITC_BARCODE_FIXED_LENGTH. rgbLengthBuff [out,size_is(3)] An array of bytes to receives 1 byte of data for ITC_BARCODE_LENGTH or 3 bytes of data for ITC_BARCODE_FIXED_LENGTH. pdwNumBytes [out] Pointer to the DWORD location to receive a number indicating number of bytes in rbgLengthBuff[]: 1 byte for ITC_BARCODE_LENGTH or 3 bytes for ITC_BARCODE_FIXED_LENGTH. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 183 Chapter 6 — Scanner Support IS9CConfig::SetI2of5 This function updates the Interleaved 2 of 5 settings with new values. Syntax HRESULT IS9CConfig::SetI2of5( ITC_INTERLEAVED2OF5_DECODING eDecode, ITC_INTERLEAVED2OF5_CHECK_DIGIT eCheck, ITC_BARCODE_LENGTH_ID eLengthId, BYTE rgbLengthBuff[], DWORD dwNumBytes ); Parameters eDecode [in] Identifies the decoding for Interleaved 2 of 5 symbology. eCheck [in] Identifies the check digit. eLengthId [in] Use ITC_BARCODE_LENGTH_NO_CHANGE to indicate no change for bar code length. Use ITC_BARCODE_LENGTH for any length and minimum length, and set rgbLengthBuff[0] to a valid length value. Use ITC_BARCODE_FIXED_LENGTH to compose 1 or 2 or 3 fixed lengths, and set 3 bytes: rgbLengthBuff[0], rgbLengthBuff[1], rgbLengthBuff[2] with valid values. rgbLengthBuff [in,size_is(dwNumBytes)] Contains bar code lengths when eLengthId = Use ITC_BARCODE_LENGTH or Use ITC_BARCODE_FIXED_LENGTH. dwNumBytes [in] Number of bytes in rbgLengthBuff[]. For S9C, this value is 1 when eLengthId = ITC_BARCODE_LENGTH or 3 when eLengthId = ITC_BARCODE_FIXED_LENGTH. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Interleaved 2 of 5 Default Settings Parameter Default Valid Range Decoding Not Active ITC_INTERLEAVED2OF5_DECODING Check Digit Not Used ITC_INTERLEAVED2OF5_CHECK_DIGIT Bar Code Length Minimum Length = 6 0x00`0xFE 184 ITC_BC_LENGTH_NO_CHANGE 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Interleaved 2 of 5 Enumerations typedef enum tagInterleaved2of5Decoding ITC_INTERLEAVED2OF5_NOTACTIVE = 0, // Default ITC_INTERLEAVED2OF5_ACTIVE = 1, ITC_INTERLEAVED2OF5_NO_CHANGE = 255 } ITC_INTERLEAVED2OF5_DECODING; typedef enum tagInterleaved2of5CheckDigit ITC_INTERLEAVED2OF5_CHECK_NOTUSED, // Default ITC_INTERLEAVED2OF5_CHECK_MOD10_XMIT, ITC_INTERLEAVED2OF5_CHECK_MOD10_NOTXMIT, ITC_INTERLEAVED2OF5_CHECK_FRENCH_CIP_XMIT, ITC_INTERLEAVED2OF5_CHECK_FRENCH_CIP_NOTXMIT, ITC_INTERLEAVED2OF5_CHECK_NO_CHANGE = 255 } ITC_INTERLEAVED2OF5_CHECK_DIGIT; typedef enum tagBarcodeLengthId ITC_BARCODE_LENGTH = 0, ITC_BARCODE_FIXED_LENGTH, ITC_BARCODE_LENGTH_NO_CHANGE = 255 } ITC_BARCODE_LENGTH_ID; IS9CConfig::GetMatrix2of5 This function retrieves the current settings of Matrix 2 of 5. Syntax HRESULT IS9CConfig::GetMatrix2of5( ITC_MATRIX2OF5_DECODING* peDecode, DWORD* pdwLength ); Parameters peDecode [out] Pointer to the ITC_MATRIX2OF5_DECODING location to receive the decoding for Matrix 2 of 5 symbology. pdwLength [out] Pointer to the DWORD location to receive a value for the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 185 Chapter 6 — Scanner Support IS9CConfig::SetMatrix2of5 This function updates the Matrix 2 of 5 settings with new values. Syntax HRESULT IS9CConfig::SetMatrix2of5( ITC_MATRIX2OF5_DECODING eDecode, DWORD dwLength ); Parameters eDecode [in] Identifies the decoding for Matrix 2 of 5 symbology. dwLength [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Matrix 2 of 5 Default Settings Parameter Default Valid Range Decoding Not Active ITC_MATRIX2OF5_DECODING Bar Code Length Minimum Length = 6 0x00`0xFE ITC_BC_LENGTH_NO_CHANGE Matrix 2 of 5 Enumerations typedef enum tagMatrix2of5Decoding ITC_MATRIX2OF5_NOTACTIVE = 0, // Default ITC_MATRIX2OF5_ACTIVE = 1, ITC_MATRIX2OF5_NO_CHANGE = 255 } ITC_MATRIX2OF5_DECODING; #define ITC_BC_LENGTH_NO_CHANGE 255. This definition can be used when the bar code length does not require any change. 186 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::GetMSI This function retrieves the current MSI settings. Syntax HRESULT IS9CConfig::GetMSI( ITC_MSI_DECODING* peDecode, ITC_MSI_CHECK_DIGIT* peCheck, DWORD* pdwLength ); Parameters peDecode [out] peCheck [out] pdwLength [out] Pointer to the ITC_MSI_DECODING location to receive the decoding for MSI symbology. Pointer to the ITC_MSI_CHECK_DIGIT location to receive the check digit. Pointer to the DWORD location to receive the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig::SetMSI This function updates the MSI settings with new values. Syntax HRESULT IS9CConfig::SetMSI( ITC_MSI_DECODING eDecode, ITC_MSI_CHECK_DIGIT eCheck, DWORD dwLength ); Parameters eDecode eCheck dwLength [in] Identifies the decoding for MSI symbology. [in] Identifies the check digit. [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. MSI Default Settings Parameter Default Valid Range Decoding Not Active ITC_MSI_DECODING Check Digit MOD 10 checked and transmitted ITC_MSI_CHECK_DIGIT Bar Code Length Minimum Length = 6 0x00`0xFE 700 Series Color Mobile Computer User’s Manual ITC_BC_LENGTH_NO_CHANGE 187 Chapter 6 — Scanner Support MSI Enumerations typedef enum tagMsiDecoding ITC_MSI_NOTACTIVE = 0, // Default ITC_MSI_ACTIVE = 1, ITC_MSI_NO_CHANGE = 255 } ITC_MSI_DECODING; typedef enum tagMsiCheckDigit ITC_MSI_CHECK_MOD10_XMIT, // Default ITC_MSI_CHECK_MOD10_NOTXMIT, ITC_MSI_CHECK_DOUBLEMOD10_XMIT, ITC_MSI_CHECK_DOUBLEMOD10_NOTXMIT, ITC_MSI_CHECK_NO_CHANGE = 255 } ITC_MSI_CHECK_DIGIT; #define ITC_BC_LENGTH_NO_CHANGE 255. This definition can be used when the bar code length does not require any change. IS9CConfig::GetPDF417 This function retrieves the current PDF417 settings. Syntax HRESULT IS9CConfig::GetPDF417( ITC_PDF417_DECODING* pePdf417Decode, ITC_PDF417_MACRO_PDF* peMacroPdf, ITC_PDF417_CTRL_HEADER* pePdfControlHeader, ITC_PDF417_FILE_NAME* pePdfFileName, ITC_PDF417_SEGMENT_COUNT* pePdfSegmentCount, ITC_PDF417_TIME_STAMP* pePdfTimeStamp, ITC_PDF417_SENDER* pePdfSender, ITC_PDF417_ADDRESSEE* pePdfAddressee, ITC_PDF417_FILE_SIZE* pePdfFileSize, ITC_PDF417_CHECKSUM* pePdfChecksum ); Parameters 188 pePdf417Decode [out] Pointer to the ITC_PDF417_DECODING location to receive the decoding for PDF417 symbology. Pointer to the ITC_PDF417_MACRO_PDF location to receive the Macro PDF. peMacroPdf [out] pePdfControlHeader [out] Pointer to the ITC_PDF417_CTRL_HEADER location to receive the control header. pePdfFileName [out] pePdfSegmentCount [out] pePdfTimeStamp [out] Pointer to the ITC_PDF417_FILE_NAME location to receive the file name. Pointer to the ITC_PDF417_SEGMENT_COUNT location to receive the segment count. Pointer to the ITC_PDF417_TIME_STAMP location to receive the time stamp. 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support pePdfSender [out] pePdfAddressee [out] pePdfFileSize [out] pePdfChecksum [out] Pointer to the ITC_PDF417_SENDER location to receive the sender. Pointer to the ITC_PDF417_ADDRESSEE location to receive the addressee. Pointer to the ITC_PDF417_FILE_SIZE location to receive the file size. Pointer to the ITC_PDF417_CHECKSUM location to receive the checksum. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig::SetPDF417 This function updates the PDF417 settings with new values. Syntax HRESULT IS9CConfig::SetPDF417( ITC_PDF417_DECODING ePdf417Decode, ITC_PDF417_MACRO_PDF eMacroPdf, ITC_PDF417_CTRL_HEADER ePdfControlHeader, ITC_PDF417_FILE_NAME ePdfFileName, ITC_PDF417_SEGMENT_COUNT ePdfSegmentCount, ITC_PDF417_TIME_STAMP ePdfTimeStamp, ITC_PDF417_SENDER ePdfSender, ITC_PDF417_ADDRESSEE ePdfAddressee, ITC_PDF417_FILE_SIZE ePdfFileSize, ITC_PDF417_CHECKSUM ePdfChecksum ); Parameters ePdf417Decode [in] Identifies the decoding for PDF417 symbology. eMacroPdf [in] Identifies the Macro PDF. ePdfControlHeader [in] Identifies the control header. ePdfFileName ePdfSegmentCount ePdfTimeStamp ePdfSender [in] [in] [in] [in] Identifies the file name. Identifies the segment count. Identifies the time stamp. Identifies the sender. ePdfAddressee ePdfFileSize ePdfChecksum [in] Identifies the addressee. [in] Identifies the file size. [in] Identifies the checksum. Return Values HRESULT that indicates success or failure. 700 Series Color Mobile Computer User’s Manual 189 Chapter 6 — Scanner Support Remarks None. See Also None. PDF 417 Default Settings Parameter Default Valid Range Decoding Not Active ITC_PDF417_DECODING Macro PDF Macro PDF Buffered ITC_PDF417_MACRO_PDF Control Header Not Transmitted ITC_PDF417_CTRL_HEADER *File Name Not Transmitted ITC_PDF417_FILE_NAME *Segment Count Not Transmitted ITC_PDF417_SEGMENT_COUNT *Time Stamp Not Transmitted ITC_PDF417_TIME_STAMP *Sender Not Transmitted ITC_PDF417_SENDER *Address Not Transmitted ITC_PDF417_ADDRESSEE *File Size Not Transmitted ITC_PDF417_FILE_SIZE *Check Sum Not Transmitted ITC_PDF417_CHECKSUM * These are Macro PDF Optional Fields. PDF 417 Enumerations typedef enum tagPdf417Decoding ITC_PDF417_NOTACTIVE = 0, ITC_PDF417_ACTIVE = 1, // ITC_PDF417_NO_CHANGE = 255 } ITC_PDF417_DECODING; typedef enum tagPdf417MacroPdf ITC_PDF417_MACRO_UNBUFFERED = 0, ITC_PDF417_MACRO_BUFFERED = 1, // ITC_PDF417_MACRO_NO_CHANGE = 255 } ITC_PDF417_MACRO_PDF; typedef enum tagPdf417ControlHeader ITC_PDF417_CTRL_HEADER_NOTXMIT = 0, ITC_PDF417_CTRL_HEADER_XMIT = 1, ITC_PDF417_CTRL_HEADER_NO_CHANGE = 255 } ITC_PDF417_CTRL_HEADER; typedef enum tagPdf417FileName ITC_PDF417_FILE_NAME_NOTXMIT = 0, // ITC_PDF417_FILE_NAME_XMIT = 1, ITC_PDF417_FILE_NAME_NO_CHANGE = 255 } ITC_PDF417_FILE_NAME; typedef enum tagPdf417SegmentCount ITC_PDF417_SEGMENT_COUNT_NOTXMIT = 0, // ITC_PDF417_SEGMENT_COUNT_XMIT = 1, 190 Default Default // Default Default Default 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support ITC_PDF417_SEGMENT_COUNT_NO_CHANGE = 255 } ITC_PDF417_SEGMENT_COUNT; typedef enum tagPdf417TimeStamp ITC_PDF417_TIME_STAMP_NOTXMIT = 0, // ITC_PDF417_TIME_STAMP_XMIT = 1, ITC_PDF417_TIME_STAMP_NO_CHANGE = 255 } ITC_PDF417_TIME_STAMP; typedef enum tagPdf417Sender ITC_PDF417_SENDER_NOTXMIT = 0, // ITC_PDF417_SENDER_XMIT = 1, ITC_PDF417_SENDER_NO_CHANGE = 255 } ITC_PDF417_SENDER; typedef enum tagPdf417Addressee ITC_PDF417_ADDRESSEE_NOTXMIT = 0, // ITC_PDF417_ADDRESSEE_XMIT = 1, ITC_PDF417_ADDRESSEE_NO_CHANGE = 255 } ITC_PDF417_ADDRESSEE; typedef enum tagPdf417FileSize ITC_PDF417_FILE_SIZE_NOTXMIT = 0, // ITC_PDF417_FILE_SIZE_XMIT = 1, ITC_PDF417_FILE_SIZE_NO_CHANGE = 255 } ITC_PDF417_FILE_SIZE; typedef enum tagPdf417Checksum ITC_PDF417_CHECKSUM_NOTXMIT = 0, ITC_PDF417_CHECKSUM_XMIT = 1, ITC_PDF417_CHECKSUM_NO_CHANGE = 255 } ITC_PDF417_CHECKSUM; 700 Series Color Mobile Computer User’s Manual Default Default Default Default // Default 191 Chapter 6 — Scanner Support IS9CConfig::GetPlessey This function retrieves the current Plessey settings. Syntax HRESULT IS9CConfig::GetPlessey( ITC_PLESSEY_DECODING* peDecode, ITC_PLESSEY_CHECK_DIGIT* peCheck, DWORD* pdwLength ); Parameters peDecode [out] Pointer to the ITC_PLESSEY_DECODING location to receive the decoding for Plessey symbology. peCheck [out] Pointer to the ITC_PLESSEY_CHECK_DIGIT location to receive the check digit. pdwLength [out] Pointer to the DWORD location to receive the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig::SetPlessey This function updates the Plessey settings with new values. Syntax HRESULT IS9CConfig::SetPlessey( ITC_PLESSEY_DECODING eDecode, ITC_PLESSEY_CHECK_DIGIT eCheck, DWORD dwLength ); Parameters eDecode [in] Identifies the decoding for Plessey symbology. eCheck [in] Identifies the check digit. dwLength [in] Identifies the bar code length. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 192 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Plessey Default Settings Parameter Default Valid Range Decoding Not Active ITC_PLESSEY_DECODING Check Digit Not Transmitted ITC_PLESSEY_CHECK_DIGIT Bar Code Length Any Bar Code Length 0x00`0xFE ITC_BC_LENGTH_NO_CHANGE Plessey Enumerations typedef enum tagPlesseyDecoding ITC_PLESSEY_NOTACTIVE = 0, // Default ITC_PLESSEY_ACTIVE = 1, ITC_PLESSEY_NO_CHANGE = 255 } ITC_PLESSEY_DECODING; typedef enum tagPlesseyCheckDigit ITC_PLESSEY_CHECK_NOTXMIT = 0, // Default ITC_PLESSEY_CHECK_XMIT = 1, ITC_PLESSEY_CHECK_NO_CHANGE = 255 } ITC_PLESSEY_CHECK_DIGIT; #define ITC_BC_LENGTH_NO_CHANGE 255. This definition can be used when the bar code length does not require any change. 700 Series Color Mobile Computer User’s Manual 193 Chapter 6 — Scanner Support IS9CConfig::GetStandard2of5 This function retrieves the current Standard 2 of 5 settings. Syntax HRESULT IS9CConfig::GetStandard2of5( ITC_STANDARD2OF5_DECODING* peDecode, ITC_STANDARD2OF5_FORMAT* peFormat, ITC_STANDARD2OF5_CHECK_DIGIT* peCheck, ITC_BARCODE_LENGTH_ID* peLengthId, BYTE rgbLengthBuff, DWORD* pdwNumBytes ); Parameters peDecode [out] Pointer to the ITC_STANDARD2OF5_DECODING location to receive the decoding for Standard 2 of 5 symbology. peFormat [out] Pointer to the ITC_STANDARD2OF5_FORMAT location to receive the format. peCheck [out] Pointer to the ITC_STANDARD2OF5_CHECK_DIGIT location to receive Modulo 10 check digit. peLengthId [out] Pointer to the ITC_BARCODE_LENGTH_ID location to receive an indicator of either ITC_BARCODE_LENGTH or ITC_BARCODE_FIXED_LENGTH. rgbLengthBuff [out,size_is(3)] An array of bytes to receives 1 byte of data for ITC_BARCODE_LENGTH, or 3 bytes of data for ITC_BARCODE_FIXED_LENGTH. pdwNumBytes [out] Pointer to the DWORD location to receive a number indicating number of bytes in rbgLengthBuff[]: 1 byte for ITC_BARCODE_LENGTH or 3 bytes for ITC_BARCODE_FIXED_LENGTH. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 194 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::SetStandard2of5 This function updates the Standard 2 of 5 settings with new values. Syntax HRESULT IS9CConfig::SetStandard2of5( ITC_STANDARD2OF5_DECODING eDecode, ITC_STANDARD2OF5_FORMAT eFormat, ITC_STANDARD2OF5_CHECK_DIGIT eCheck, ITC_BARCODE_LENGTH_ID eLengthId, BYTE rgbLengthBuff[], DWORD dwNumBytes ); Parameters eDecode [in] Identifies the decoding for Standard 2 of 5 symbology. eFormat [in] Identifies the format. eCheck [in] Identifies the Modulo 10 check digit. eLengthId [in] Use ITC_BARCODE_LENGTH_NO_CHANGE to indicate no change for bar code length. Use ITC_BARCODE_LENGTH for any length and minimum length, and set rgbLengthBuff[0] to a valid length value. Use ITC_BARCODE_FIXED_LENGTH to compose 1 or 2 or 3 fixed lengths, and set 3 bytes: rgbLengthBuff[0], rgbLengthBuff[1], rgbLengthBuff[2] with valid values. rgbLengthBuff [in,size_is(dwNumBytes)] An array of bytes containing bar code lengths when eLengthId = ITC_BARCODE_LENGTH or ITC_BARCODE_FIXED_LENGTH. dwNumBytes [in] Number of bytes in rbgLengthBuff[]. For S9C, this value is 1 when eLengthId = ITC_BARCODE_LENGTH or 3 when eLengthId = ITC_BARCODE_FIXED_LENGTH. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 195 Chapter 6 — Scanner Support Standard 2 of 5 Default Settings Parameter Default Valid Range Decoding Not Active ITC_STANDARD2OF5_DECODING Format Identicon (6 Start/Stop bars) ITC_STANDARD2OF5_FORMAT Check Digit Not Used ITC_STANDARD2OF5_CHECK_DIGIT Bar Code Length Minimum Length = 6 0x00-0xFE ITC_BC_LENGTH_NO_CHANGE Standard 2 of 5 Enumerations typedef enum tagStandard2of5Decoding ITC_STANDARD2OF5_NOTACTIVE = 0, // Default ITC_STANDARD2OF5_ACTIVE = 1, ITC_STANDARD2OF5_NO_CHANGE = 255 } ITC_STANDARD2OF5_DECODING; typedef enum tagStandard2of5Format ITC_STANDARD2OF5_FORMAT_IDENTICON, // Default ITC_STANDARD2OF5_FORMAT_COMPUTER_IDENTICS, ITC_STANDARD2OF5_FORMAT_NO_CHANGE = 255 } ITC_STANDARD2OF5_FORMAT; typedef enum tagStandard2of5CheckDigit ITC_STANDARD2OF5_CHECK_NOTUSED, // Default ITC_STANDARD2OF5_CHECK_XMIT, ITC_STANDARD2OF5_CHECK_NOTXMIT, ITC_STANDARD2OF5_CHECK_NO_CHANGE = 255 } ITC_STANDARD2OF5_CHECK_DIGIT; typedef enum tagBarcodeLengthId ITC_BARCODE_LENGTH = 0, ITC_BARCODE_FIXED_LENGTH, ITC_BARCODE_LENGTH_NO_CHANGE = 255 } ITC_BARCODE_LENGTH_ID; 196 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig::GetTelepen This function retrieves the current Telepen settings. Syntax HRESULT IS9CConfig::GetTelepen( ITC_TELEPEN_DECODING* peDecode, ITC_TELEPEN_FORMAT* peFormat ); Parameters peDecode [out] peFormat [out] Pointer to the ITC_TELEPEN_DECODING location to receive the decoding for TELEPEN symbology. Pointer to the ITC_TELEPEN_FORMAT location to receive the format. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig::SetTelepen This function updates the Telepen settings with new values. Syntax HRESULT IS9CConfig::SetTelepen( ITC_TELEPEN_DECODING* eDecode, ITC_TELEPEN_FORMAT* eFormat ); Parameters eDecode [in] Identifies the decoding for Telepen symbology. eFormat [in] Identifies the format. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Telepen Default Settings Parameter Default Valid Range Decoding Not Active ITC_TELEPEN_DECODING Format ASCII ITC_TELEPEN_FORMAT 700 Series Color Mobile Computer User’s Manual 197 Chapter 6 — Scanner Support Telepen Enumerations typedef enum tagTelepenDecoding ITC_TELEPEN_NOTACTIVE = 0, // Default ITC_TELEPEN_ACTIVE = 1, ITC_TELEPEN_NO_CHANGE = 255 } ITC_TELEPEN_DECODING; typedef enum tagTelepenDecoding ITC_TELEPEN_FORMAT_ASCII, // Default ITC_TELEPEN_FORMAT_NUMERIC, ITC_TELEPEN_FORMAT_NO_CHANGE = 255 } ITC_TELEPEN_FORMAT; IS9CConfig::GetUpcEan This function retrieves the current UPC/EAN settings. Syntax HRESULT IS9CConfig::GetUpcEan( ITC_UPCEAN_DECODING* upceanDecode, ITC_UPCA_SELECT* upcASelect, ITC_UPCE_SELECT* upcESelect, ITC_EAN8_SELECT* ean8Select, ITC_EAN13_SELECT* ean13Select, ITC_UPCEAN_ADDON_DIGITS* upcAddOnDigits, ITC_UPCEAN_ADDON_TWO* upcAddOn2, ITC_UPCEAN_ADDON_FIVE* upcAddOn5, ITC_UPCA_CHECK_DIGIT* upcACheck, ITC_UPCE_CHECK_DIGIT* upcECheck, ITC_EAN8_CHECK_DIGIT* ean8Check, ITC_EAN13_CHECK_DIGIT* ean13Check, ITC_UPCA_NUMBER_SYSTEM* upcANumSystem, ITC_UPCE_NUMBER_SYSTEM* upcENumSystem, ITC_UPCA_REENCODE* upcAReencode, ITC_UPCE_REENCODE* upcEReencode, ITC_EAN8_REENCODE* ean8Reencode ); Parameters upceanDecode [out] upcASelect [out] upcESelect [out] ean8Select [out] ean13Select [out] upcAddOnDigits [out] 198 upcAddOn2 [out] upcAddOn5 [out] Pointer to the ITC_UPCEAN_DECODING location to receive the decoding for UPC/EAN symbology. Pointer to the ITC_UPCA_SELECT location to receive the UPC-A selection state. Pointer to the ITC_UPCE_SELECT location to receive the UPC-E selection state. Pointer to the ITC_EAN8_SELECT location to receive the EAN-8 selection state. Pointer to the ITC_EAN13_SELECT location to receive the EAN-13 selection state. Pointer to the ITC_UPCEAN_ADDON_DIGITS location to receive the add-on digits. Pointer to the ITC_UPCEAN_ADDON_TWO location to receive the add-on 2 digits. Pointer to the ITC_UPCEAN_ADDON_FIVE location to receive the add-on 5 digits. 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support upcACheck [out] Pointer to the ITC_UPCA_CHECK_DIGIT location to receive the UPC-A check digit. upcECheck [out] Pointer to the ITC_UPCE_CHECK_DIGIT location to receive the UPC-E check digit. ean8Check [out] Pointer to the ITC_EAN8_CHECK_DIGIT location to receive the EAN-8 check digit. ean13Check [out] Pointer to the ITC_EAN13_CHECK_DIGIT location to receive the EAN-13 check digit. upcANumSystem [out] Pointer to the ITC_UPCA_NUMBER_SYSTEM location to receive the UPC-A number system. upcENumSystem [out] Pointer to the ITC_UPCE_NUMBER_SYSTEM location to receive the UPC-E number system. upcAReencode [out] Pointer to the ITC_UPCA_REENCODE location to receive the UPC-A reencoding. upcEReencode [out] Pointer to the ITC_UPCE_REENCODE location to receive the UPC-E reencoding. ean8Reencode [out] Pointer to the ITC_EAN8_REENCODE location to receive the EAN-8 reencoding. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 199 Chapter 6 — Scanner Support IS9CConfig::SetUpcEan This function updates the UPC/EAN settings with new values. Syntax HRESULT IS9CConfig::SetUpcEan( ITC_UPCEAN_DECODING upceanDecode, ITC_UPCA_SELECT upcASelect, ITC_UPCE_SELECT upcESelect, ITC_EAN8_SELECT ean8Select, ITC_EAN13_SELECT ean13Select, ITC_UPCEAN_ADDON_DIGITS upcAddOnDigits, ITC_UPCEAN_ADDON_TWO upcAddOn2, ITC_UPCEAN_ADDON_FIVE upcAddOn5, ITC_UPCA_CHECK_DIGIT upcACheck, ITC_UPCE_CHECK_DIGIT upcECheck, ITC_EAN8_CHECK_DIGIT ean8Check, ITC_EAN13_CHECK_DIGIT ean13Check, ITC_UPCA_NUMBER_SYSTEM upcANumSystem, ITC_UPCE_NUMBER_SYSTEM upcENumSystem, ITC_UPCA_REENCODE upcAReencode, ITC_UPCE_REENCODE upcEReencode, ITC_EAN8_REENCODE ean8Reencode ); Parameters upceanDecode [in] Identifies the decoding for UPC/EAN symbology. upcASelect [in] Identifies the UPC-A selection state. upcESelect [in] Identifies the UPC-E selection state. ean8Select [in] Identifies the EAN-8 selection state. ean13Select [in] Identifies the EAN-13 selection state. upcAddOnDigits [in] Identifies the Add-on digits. upcAddOn2 [in] Identifies the Add-on 2 digits. upcAddOn5 [in] Identifies the Add-on 5 digits. upcACheck [in] Identifies the UPC-A check digit. upcECheck [in] Identifies the UPC-E check digit. ean8Check [in] Identifies the EAN-8 check digit. ean13Check [in] Identifies the EAN-13 check digit. upcANumSystem [in] Identifies the UPC-A number system. upcENumSystem [in] Identifies the UPC-E number system. upcAReencode [in] Identifies the UPC-A reencoding. upcEReencode [in] Identifies the UPC-E reencoding. ean8Reencode [in] Identifies the EAN-8 reencoding. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 200 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support UPC/EAN Default Settings Parameter Default Valid Range Decoding ITC_UPCEAN_NO_CHANGE This parameter is no longer used, set it to this value. UPC-A Active ITC_UPCA_SELECT UPC-E Active ITC_UPCE_SELECT EAN-8 Active ITC_EAN8_SELECT EAN-13 Active ITC_EAN13_SELECT Add On Digits Not Required ITC_UPCEAN_ADDON_DIGITS Add On 2 Digits Not Active ITC_UPCEAN_ADDON_TWO Add On 5 Digits Not Active ITC_UPCEAN_ADDON_FIVE UPC-A Check Digit Transmitted ITC_UPCA_CHECK_DIGIT UPC-E Check Digit Transmitted ITC_UPCE_CHECK_DIGIT EAN-8 Check Digit Transmitted ITC_EAN8_CHECK_DIGIT EAN-13 Check Digit Transmitted ITC_EAN13_CHECK_DIGIT UPC-A Number System Transmitted ITC_UPCA_NUMBER_SYSTEM UPC-E Number System Transmitted ITC_UPCE_NUMBER_SYSTEM Reencode UPC-A UPC-A transmitted as EAN-13 ITC_UPCA_REENCODE Reencode UPC-E UPC-E transmitted as UPC-E ITC_UPCE_REENCODE Reencode EAN-8 EAN-8 transmitted as EAN-8 ITC_EAN8_REENCODE UPC/EAN Enumerations typedef enum tagUpcEanDecoding ITC_UPCEAN_NOTACTIVE = 0, ITC_UPCEAN_ACTIVE = 1, ITC_UPCEAN_NO_CHANGE = 255 } ITC_UPCEAN_DECODING; typedef enum tagUpcASelect ITC_UPCA_DEACTIVATE, ITC_UPCA_ACTIVATE, ITC_UPCA_NO_CHANGE = 255 } ITC_UPCA_SELECT; typedef enum tagUpcESelect ITC_UPCE_DEACTIVATE, ITC_UPCE_ACTIVATE, ITC_UPCE_NO_CHANGE = 255 } ITC_UPCE_SELECT; typedef enum tagEan8Select ITC_EAN8_DEACTIVATE, ITC_EAN8_ACTIVATE, ITC_EAN8_NO_CHANGE = 255 } ITC_EAN8_SELECT; typedef enum tagEan13Select ITC_EAN13_DEACTIVATE, 700 Series Color Mobile Computer User’s Manual // Default // Default // Default // Default 201 Chapter 6 — Scanner Support ITC_EAN13_ACTIVATE, ITC_EAN13_NO_CHANGE = 255 } ITC_EAN13_SELECT; typedef enum tagUpcEanAddonDigits ITC_UPCEAN_ADDON_NOT_REQUIRED, ITC_UPCEAN_ADDON_REQUIRED, ITC_UPCEAN_ADDON_NO_CHANGE = 255 } ITC_UPCEAN_ADDON_DIGITS; typedef enum tagUpcEanAddonTwo ITC_UPCEAN_ADDON_TWO_NOTACTIVE = 0, ITC_UPCEAN_ADDON_TWO_ACTIVE = 1, ITC_UPCEAN_ADDON_TWO_NO_CHANGE = 255 } ITC_UPCEAN_ADDON_TWO; typedef enum tagUpcEanAddonFive ITC_UPCEAN_ADDON_FIVE_NOTACTIVE = 0, ITC_UPCEAN_ADDON_FIVE_ACTIVE = 1, ITC_UPCEAN_ADDON_FIVE_NO_CHANGE = 255 } ITC_UPCEAN_ADDON_FIVE; typedef enum tagUpcACheckDigit ITC_UPCA_CHECK_NOTXMIT = 0, ITC_UPCA_CHECK_XMIT = 1, ITC_UPCA_CHECK_NO_CHANGE = 255 } ITC_UPCA_CHECK_DIGIT; typedef enum tagUpcECheckDigit ITC_UPCE_CHECK_NOTXMIT = 0, ITC_UPCE_CHECK_XMIT = 1, ITC_UPCE_CHECK_NO_CHANGE = 255 } ITC_UPCE_CHECK_DIGIT; typedef enum tagEan8CheckDigit ITC_EAN8_CHECK_NOTXMIT = 0, ITC_EAN8_CHECK_XMIT = 1, ITC_EAN8_CHECK_NO_CHANGE = 255 } ITC_EAN8_CHECK_DIGIT; typedef enum tagEan13CheckDigit ITC_EAN13_CHECK_NOTXMIT = 0, ITC_EAN13_CHECK_XMIT = 1, ITC_EAN13_CHECK_NO_CHANGE = 255 } ITC_EAN13_CHECK_DIGIT; typedef enum tagUpcANumberSystem ITC_UPCA_NUM_SYS_NOTXMIT = 0, ITC_UPCA_NUM_SYS_XMIT = 1, ITC_UPCA_NUM_SYS_NO_CHANGE = 255 } ITC_UPCA_NUMBER_SYSTEM; typedef enum tagUpcENumberSystem ITC_UPCE_NUM_SYS_NOTXMIT = 0, ITC_UPCE_NUM_SYS_XMIT = 1, ITC_UPCE_NUM_SYS_NO_CHANGE = 255 } ITC_UPCE_NUMBER_SYSTEM; typedef enum tagUpcAReencode 202 // Default // Default // Default // Default // Default // Default // Default // Default // Default // Default 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support ITC_UPCA_XMIT_AS_EAN13, ITC_UPCA_XMIT_AS_UPCA, ITC_UPCA_XMIT_NO_CHANGE = 255 } ITC_UPCA_REENCODE; typedef enum tagUpcEReencode ITC_UPCE_XMIT_AS_UPCE, ITC_UPCE_XMIT_AS_UPCA, ITC_UPCE_XMIT_NO_CHANGE = 255 } ITC_UPCE_REENCODE; typedef enum tagEan8Reencode ITC_EAN8_XMIT_AS_EAN8, ITC_EAN8_XMIT_AS_EAN13, ITC_EAN8_XMIT_NO_CHANGE = 255 } ITC_EAN8_REENCODE; 700 Series Color Mobile Computer User’s Manual // Default // Default //Default 203 Chapter 6 — Scanner Support IS9CConfig2 Functions This interface is derived from the IS9CConfig interface and provides additional methods that can be used to set and retrieve the 700 Series Computer’ s bar code configuration. All supported symbologies are initialized to their defaults when the S9C firmware is loaded. GET/SET functions use enumerations as their parameters. In most enumerations, there is an enumerator xx_NO_CHANGE (such as ITC_CODE39_NO_CHANGE), where xx refers to a particular enumeration. This enumerator can be used during a call to a SET to indicate that no change is to be made to that particular parameter. This prevents the called function from having to format the same S9C command and send it down to the scanner. To specify a bar code length of “any length,” use a value of “0” for the bar code length argument. IS9CConfig2 functions are the following. IS9CCONFIG.H is the header file and ITCUUID.LIB contains the IID_IADC Interface GUID value used to obtain the interface. S IS9CConfig2::GetCode11 (page 205) S IS9CConfig2::SetCode11 (page 205) S IS9CConfig2::GetCustomSymIds (page 207) S IS9CConfig2::SetCustomSymIds (page 208) S IS9CConfig2::GetGlobalAmble (page 211) S IS9CConfig2::SetGlobalAmble (page 212) S IS9CConfig2::GetPDF417Ext (page 213) S IS9CConfig2::SetPDF417Ext (page 213) S IS9CConfig2::GetSymIdXmit (page 214) S IS9CConfig2::SetSymIdXmit (page 214) 204 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig2::GetCode11 This function retrieves the current settings for Code 11. Syntax HRESULT GetCode11( ITC_CODE11_DECODING* peDecode, ITC_CODE11_CHECK_DIGIT* peCheck, ITC_CODE11_CHECK_VERIFICATION* peVer ); Parameters peDecode [out] Pointer to ITC_CODE11_DECODING location to receive Code 11 decoding. peCheck [out] Pointer to ITC_CODE11_CHECK_DIGIT location to receive the check digit option. peVer [out] Pointer to ITC_CODE11_CHECK_VERIFICATION location to receive the check verification option. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig2::SetCode11 This function updates the current setting of Code 11 symbology. Syntax HRESULT SetCode11( ITC_CODE11_DECODING eDecode, ITC_CODE11_CHECK_DIGIT eCheck, ITC_CODE11_CHECK_VERIFICATION eVer ); Parameters eDecode [in] An enumeration that identifies decoding option for Code 11. eCheck [in] An enumeration that identifies the check digit option. eVer [in] An enumeration that identifies check verification option. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 205 Chapter 6 — Scanner Support Code 11 Default Settings Parameter Default Valid Range Decoding Not Active ITC_CODE11_DECODING Check Verification 1 Digit ITC_CODE11_CHECK_VERIFICATION Check Digit Enable ITC_CODE11_CHECK_DIGIT Code 11 Enumerations typedef enum tagCode11Decoding ITC_CODE11_NOTACTIVE = 0, ITC_CODE11_ACTIVE = 1, // Default ITC_CODE11_NO_CHANGE = 255 } ITC_CODE11_DECODING; typedef enum tagCode11CheckVerification ITC_CODE11_CHK_VERIFY_ONEDIGIT = 1, ITC_CODE11_CHK_VERIFY_TWODIGIT = 2, // Default ITC_CODE11_CHK_VERIFY_NO_CHANGE = 255 } ITC_CODE11_CHECK_VERIFICATION; typedef enum tagCode11CheckDigit ITC_CODE11_CHECK_NOTXMIT = 0, // Default ITC_CODE11_CHECK_XMIT = 1, ITC_CODE11_CHECK_NO_CHANGE = 255 } ITC_CODE11_CHECK_DIGIT; 206 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig2::GetCustomSymIds This function retrieves all the custom symbology identifiers defined for the currently supported symbologies. This is not supported when using an imager on the 700 Series Computer. Syntax HRESULT GetCustomSymIds( ITC_CUST_SYM_ID_PAIR* pStructSymIdPair,DWORD dwMaxNumElement, DWORD* pdwNumElement ); Parameters pStructSymIdPair [out] Pointer to ITC_CUST_SYM_ID_PAIR location to receive the current defined symbology identifiers for the supported symbologies. The caller must preallocate this buffer with dwMaxNumElement elements. dwMaxNumElement [in] Maximum number of elements allocated for the pStructSymIdPair buffer which should always be equal to the last defined enumeration constant + 1 of the enumeration ITC_CUSTOM_ID. In this case, it is ITC_CUSTOMID_LAST_ELEMENT. pdwNumElement [out] Pointer to DWORD location to receive the actual number of elements returned in the pStructSymIdPair buffer, which should be the same as dwMaxNumElement. Return Values HRESULT that indicates success or failure. Remarks None. See Also S Custom Identifier Assignments (page 209) S Custom Identifier Example (page 210) S Custom Identifier Default Settings (page 210) 700 Series Color Mobile Computer User’s Manual 207 Chapter 6 — Scanner Support IS9CConfig2::SetCustomSymIds This function updates the symbology identifiers (any ASCII values) for the currently supported symbologies. This is not supported when using an imager on the 700 Series Computer. Syntax HRESULT SetCustomSymIds( ITC_CUST_SYM_ID_PAIR* pStructSymIdPair, DWORD dwNumElement ); Parameters pStructSymIdPair [in] Pointer to ITC_CUST_SYM_ID_PAIR location, containing the new symbology identifiers for any supported symbologies to update. dwNumElement [in] Identifies the number of symbology identifiers to update in the pStructSymIdPair buffer. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 208 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Custom Identifier Assignments Each custom identifier is a one byte ASCII value within the range from 0x00 to 0xff. The enumerations in the ITC_CUSTOM_ID enumerator can be used as symbology identifications in the GetCustomSymIds() and SetCustomSymIds() functions. typedef enum tagCustomId ITC_CUSTOMID_CODABAR = 0 Identifies ITC_CUSTOMID_CODE39 Identifies ITC_CUSTOMID_CODE93 Identifies ITC_CUSTOMID_CODE128_EAN_128 Identifies ITC_CUSTOMID_EAN8 Identifies ITC_CUSTOMID_EAN13 Identifies ITC_CUSTOMID_I2OF5 Identifies ITC_CUSTOMID_MATRIX2OF5 Identifies ITC_CUSTOMID_MSI Identifies ITC_CUSTOMID_PDF417 Identifies ITC_CUSTOMID_PLESSEY Identifies ITC_CUSTOMID_CODE2OF5 Identifies ITC_CUSTOMID_TELEPEN Identifies ITC_CUSTOMID_UPCA Identifies ITC_CUSTOMID_UPCE Identifies ITC_CUSTOMID_CODE11 Identifies ITC_CUSTOMID_LAST_ELEMENT Identifies the buffer on GetCustomSymIds }ITC_CUSTOM_ID; typedef struct tagCustSymbIdPair ITC_CUSTOM_ID eSymbology; the the the the the the the the the the the the the the the the the Codabar symbology Code 39 symbology Code 93 symbology Code 128 symbology EAN-8 symbology EAN-13 symbology Interleaved 2 of 5 symbology Matrix 2 of 5 symbology MSI symbology PDF 417 symbology Plessey symbology Standard 2 of 5 symbology Telepen symbology UPC-A symbology UPC-E symbology Code 11 symbology last element. Use to preallocate Identifies the symbology of interest BYTE byteId; ASCII value (1 byte within the range0x00 – 0xf) }ITC_CUST_SYM_ID_PAIR; 700 Series Color Mobile Computer User’s Manual 209 Chapter 6 — Scanner Support Custom Identifier Default Settings Symbology Default Valid Range Codabar 0x00-0xFF Code 11 0x00-0xFF Code 39 0x00-0xFF Code 93 0x00-0xFF Code128/EAN 128 0x00-0xFF EAN-8 0xFF 0x00-0xFF EAN-13 0x00-0xFF Interleaved 2 of 5 0x00-0xFF Matrix 2 of 5 0x00-0xFF MSI 0x00-0xFF PDF 417 0x00-0xFF Plessey 0x00-0xFF Standard 2 of 5 0x00-0xFF Telepen 0x00-0xFF UPC-A 0x00-0xFF UPC-E 0x00-0xFF Custom Identifier Example The following code segment is an example of updating the UPC-E and UPC-A symbology identifiers with new values, and then retrieving the currently defined symbology identifiers for all the supported symbologies: ITC_CUST_SYM_ID_PAIR oStructSymIdPair [ITC_CUSTOMID_LAST_ELEMENT]; oStructSymIdPair[0].eSymbology = ITC_CUSTOMID_UPCE; oStructSymIdPair[0].byteId = 0x41; // ASCII char A oStructSymIdPair[1].eSymbology = ITC_CUSTOMID_UPCA; oStructSymIdPair[1].byteId = 0x42; // ASCII char B HRESULT hr = pIS9CConfig2->SetCustomSymIds(&oStructSymIdPair[0], 2]; DWORD dwNum = 0; HRESULT hr = pIS9CConfig2->GetCustomSymIds(&oStructSymIdPair[0], ITC_CUSTOMID_LAST_ELEMENT, &dwNum); 210 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig2::GetGlobalAmble This retrieves the scanner’ s current preamble or postamble setting. Syntax HRESULT GetGlobalAmble( ITC_GLOBAL_AMBLE_ID eAmbleId, BYTE rgbBuffer[], DWORD dwBufferSize, DWORD* pdwBufferSize ); Parameters eAmbleId [in] An enumeration of type ITC_GLOBAL_AMBLE_ID identifies whether the preamble or postamble setting is to be retrieved. Only one setting can be queried at a time. rgbBuffer [in] Contains the buffer for the postamble or preamble setting to be queried. dwBufferSize [in] The maximum number of bytes that rgbBuffer can store. Must be at least ITC_GLOBAL_AMBLE_MAX_CHARS bytes. pdwBufferSize [out] A pointer to DWORD location to store the actual number of returned bytes in rgbBuffer. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 211 Chapter 6 — Scanner Support IS9CConfig2::SetGlobalAmble This function updates the scanner’ s current preamble or postamble setting depending on the input parameters. Syntax HRESULT SetGlobalAmble( ITC_GLOBAL_AMBLE_ID eAmbleId, BYTE rgbBuffer[], DWORD dwBufferSize ); Parameters eAmbleId [in] An enumeration of type ITC_GLOBAL_AMBLE_ID identifies whether the preamble or postamble setting is to be updated. Only one setting can be updated at a time. rgbBuffer [in] Contains the buffer for the postamble or preamble setting to be updated. dwBufferSize [in] Identifies number of bytes in rgbBuffer. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. Postamble and Preamble Defaults Parameter Default Valid Range Preamble Null 0 to 20 ASCII characters Postamble Null 0 to 20 ASCII characters 212 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IS9CConfig2::GetPDF417Ext This function is an extended function for retrieving the PDF 417 settings not included in the IS9CConfig::GetPDF417. Syntax HRESULT GetPDF417Ext( ITC_MICRO_PDF417_DECODING* peDecode, ITC_MICRO_PDF417_CODE128_EMULATION* peCode128 ); Parameters peDecode [out] Pointer to ITC_MICRO_PDF417_DECODING location to receive the Micro PDF 417 decoding. peCode128 [out] Pointer to ITC_MICRO_PDF417_CODE128_EMULATION* location to receive the Micro PDF 417 Code 128 emulation option. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig2::SetPDF417Ext This function is an extended function for updating the additional PDF 417 settings not included in IS9CConfig::SetPDF417. Syntax HRESULT SetPDF417Ext( ITC_MICRO_PDF417_DECODING eDecode, ITC_MICRO_PDF417_CODE128_EMULATION eCode128 ); Parameters eDecode [in] An enumeration that identifies decoding option for the Micro PDF 417. eCode128 [in] An enumeration that identifies the Code 128 emulation option for the Micro PDF 417. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 213 Chapter 6 — Scanner Support PDF 417 Extended: Micro PDF 417 Default Settings Parameter Default Valid Range Decoding Not Active ITC_MICRO_PDF417_DECODING Code 128 Emulation Not Active ITC_MICRO_PDF417_CODE128_EMULATION * These are Micro PDF 417 parameters. IS9CConfig2::GetSymIdXmit This function retrieves the current symbology ID transmission option as described on the next page. Syntax HRESULT GetSymIdXmit( ITC_SYMBOLOGY_ID_XMIT* peSymIdXmit ); Parameters peSymIdXmit [out] Pointer to ITC_SYMBOLOGY_ID_XMIT location to receive the current symbology identifier transmission option. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. IS9CConfig2::SetSymIdXmit This updates the symbology ID transmission option shown next page. Syntax HRESULT SetSymIdXmit( ITC_SYMBOLOGY_ID_XMIT eSymIdXmit ); Parameters eSymIdXmit [in] Identifies the symbology identifier transmission option to update. Return Values HRESULT that indicates success or failure. Remarks None. See Also None. 214 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Symbology ID Transmission Option The symbology identifier (or code mark) concept provides a standardized way for a device receiving data from a bar code reader to differentiate between the symbologies. The following symbology ID transmission option specifies whether or not the symbology ID should be transmitted as part of the scanned bar code label to all the connected data collection applications. Options for transmission are: do not transmit, transmit the standard AIM identifiers, or transmit the one byte custom defined identifiers. AIM and custom identifiers cannot be selected to be transmitted at the same time; only the last selected option will be active. typedef enum tagSymbologyIdXmit ITC_ID_XMIT_DISABLE = 0 Symbology identifier will not be transmitted as part of the label. This is the default setting. ITC_ID_XMIT_CUSTOM = 1 Activate custom symbology identifier transmission for all symbologies. Example of the transmitted label: [preamble] [Custom ID] [postamble] ITC_ID_XMIT_AIM = 2 Activate AIM symbology identifier transmission for all symbologies. Example of the transmitted label: [preamble] [AIM symbology ID] [postamble] }ITC_SYMBOLOGY_ID_XMIT; 700 Series Color Mobile Computer User’s Manual 215 Chapter 6 — Scanner Support IS9CConfig3 Functions The IS9CConfig3 interface provides generic methods for retrieving and setting configuration using ISCP commands. ISCP Commands An ISCP Command is composed of three or more bytes formatted aswhere: S SG Setup group. S FID Function ID. S parameters One or more configuration value bytes depending on the configuration. ISCP commands include the following: Imager Settings This dictates the start and end column positions for the image dimension. SG 0x7B 0x7B FID 80 81 Parameter Value [0..639] Value [0..639] Description Start column position. End column position. Trigger Settings This sets the duration of the aiming beam before acquiring images to be decoded. SG 0x70 FID 81 Parameter Value [0..65535] Description Number of milliseconds. QRCode Symbology This enables or disables the QRCode symbology. SG 0x55 0x55 FID 40 40 Parameter Description Disable this symbology. Enable this symbology. Data Matrix Symbology This enables or disables the Data Matrix symbology. SG 0x54 0x54 216 FID 40 40 Parameter Description Disable this symbology. Enable this symbology. 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support ISCP::GetConfig This retrieves configurations using the ISCP commands format. Syntax HRESULT ISCPGetConfig( BYTE rgbCommandBuff[], DWORD dwCommandBuffSize, BYTE rgbReplyBuff[], DWORD dwReplyBuffMaxSize, DWORD *pdwReplyBuffSize ); Parameters rgbCommandBuff [in, size_is] Contains ISCP commands in array of bytes. dwCommandBuffSize [in] Number of bytes in rgbCommandBuff. rgbReplyBuff [in, out, size_is] Results of query in array of bytes. dwReplyBuffMaxSize [in] Maximum size of rgdReplyBuff. pdwReplyBuffSize [in, out] Number of bytes placed in rbfReplyBuff. Return Values None. Remarks None. See Also None. 700 Series Color Mobile Computer User’s Manual 217 Chapter 6 — Scanner Support ISCP::SetConfig This updates configurations using the ISCP commands format. Syntax HRESULT ISCPSetConfig( BYTE rgbCommandBuff[], DWORD dwCommandBuffSize, BYTE rgbReplyBuff[], DWORD dwReplyBuffMaxSize, DWORD *pdwReplyBuffSize ); Parameters rgbCommandBuff [in, size_is] Contains ISCP commands in array of bytes. dwCommandBuffSize [in] Number of bytes in rgbCommandBuff. rgbReplyBuff [in, out, size_is] Results of request in array of bytes. dwReplyBuffMaxSize [in] Maximum size of rgbReplyBuff. pdwReplyBuffSize [in, out] Number of bytes placed in rgbReplyBuff. Return Values None. Remarks None. See Also None. 218 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support AIM Symbology ID Defaults Refer to the official AIM documentation on symbology identifiers for full information on the different processing options supported. Symbology ID Character Modifier Characters Codabar Standard Codabar symbol. No special processing. ABC Codabar (American Blood commission) concatenate/message append performed. Reader has validated the check character. Reader has stripped the check character before transmission. Code 11 Single modulo 11 check character validated and transmitted. Two modulo 11 check characters validated and transmitted. Check characters validated but not transmitted. Code 39 No check character validation nor full ASCII processing. All data transmitted as decoded. Modulo 43 check character validated and transmitted. Modulo 43 check character validated but not transmitted. Full ASCII character conversion performed. No check character validation. Full ASCII character conversion performed. Modulo 43 check character validated and transmitted. Full ASCII character conversion performed. Modulo 43 check character validated but not transmitted. Code 93 No options specified. Always transmit 0. Code128 Standard data packet. No FNC1 in first or second symbol character position after start character. EAN/UCC-128 data packet. FNC1 in first symbol character position after start character. FNC1 in second symbol character position after start character. Concatenation according to International Society for Blood Transfusion specifications was performed. Concatenated data follows. Interleaved 2 of 5 Matrix 2 of 5 0`F No check character validation. Modulo 10 symbol check character validated and transmitted Modulo 10 symbol check character validated but not transmitted. For symbologies or symbology options not listed, a code character with the value 0-F may be assigned by the decoder manufacturer to identify those symbologies and options implemented in the reader. MSI Modulo 10 symbol check character validated and transmitted. Modulo 10 symbol check character validated but not transmitted. 700 Series Color Mobile Computer User’s Manual 219 Chapter 6 — Scanner Support Symbology (continued) ID Character Modifier Characters PDF 417/ Micro PDF 417 Reader set to conform with protocol defined in 1994 PDF 417 specifications. Reader set to follow protocol of ENV 12925 for Extended Channel Interpretation (all data characters 92 doubled). Reader set to follow protocol of ENV 12925 for Basic Channel Interpretation (data characters 92 are not doubled). Code 128 emulation: implied FNC1 in first position. Code 128 emulation: implied FNC1 after initial letter or pair of digits. Code 128 emulation: no implied FNC1. Plessey No options specified. Always transmit 0. Standard 2 of 5 (2-bar start/stop) No check character validation. Modulo 7 check character validated and transmitted. Modulo 7 check character validated but not transmitted. Standard 2 of 5 (3-bar start/stop) No options specified. Always transmit 0. Telepen Full ASCII mode Double density numeric only mode Double density numeric followed by full ASCII Full ASCII followed by double density numeric UPC/EAN Consider UPC/EAN symbols with supplements as two separate symbols. The first symbol is the main data packet, and the second symbol is the 2 or 5 digit supplement. Transmit these two symbols separately, each with its own symbology identifier. Provision is made for the option of transmitting both symbols as a single data packet. 0 Standard data packet in full EAN format (13 digits for EAN-13, UPC-A, and UPC-E; does not include add-on data). 1 Two digit add-on data only. 2 Five digit add-on data only. 3 Combined data packet comprising 13 digits from EAN-13, UPC-A, or UPC-E symbol and 2 or 5 digits from add-on symbol. 4 EAN-8 data packet IMPORTANT: The “symbology_id” character letter must be uppercase for the above definitions. 220 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IImage Interface The IImage interface gives the application the capability to acquire images. The image acquired can be either a raw image as captured by the digital camera or it can be normalized. A normalized image is presented the same as if the picture were taken at right angles to the image and at the same distance. The normalized image is commonly used for signature capture applications. S IImage::ReadSigCapBuffer (page 221) S IImage::ReadSigCapFile (page 224) S IImage::ReadImage (page 225) S IImage::CancelReadImage (page 226) S IImage::Start (page 226) S IImage::Stop (page 227) S IImage::Open (page 227) S IImage::Close (page 228) IImage::ReadSigCapBuffer Syntax HRESULT IImage::ReadSigCapBuffer( ITC_SIGCAP_SPEC *pSigCapSpec, ITC_IMAGE_SPEC *pImgBuffer, DWORD nMaxBuffSize ); Parameters Parameters: pSigCapSpec [in] Pointer to the structure that identifies the signature capture region. This structure is defined as follows: typedef struct tagITCSigCapSpec DWORD dwStructSize; INT iAspectRatio; INT iOffsetX; INT iOffsetY; UINT uiWidth; UINT uiHeight; INT iResolution; ITCFileFormat eFormat; DWORD eDepth; } ITC_SIGCAP_SPEC; where: S dwStructSize Size, in bytes, of this struct. This is for version control. S iAspectRatio Ratio of the bar code height (linear bar codes) or row height (2D bar codes) to the narrow element width. S iOffsetX Offset in X direction, relative to barcode center. Positive values are right of the bar code, negative values to the left. 700 Series Color Mobile Computer User’s Manual 221 Chapter 6 — Scanner Support S iOffsetY Offset in Y direction, relative to barcode center. Positive values are higher than the bar code, negative values lower. Width of signature capture image region in intelligent bar code units. Height of the signature capture image region in intelligent bar code units. Number of pixels per intelligent bar code unit. Format of the image buffer returned as follows. Currently, only ITC_FILE_RAW is supported. S uiWidth S uiHeight S iResolution S eFormat ITC_FILE_KIM = ITC_FILE_TIFF_BIN = ITC_FILE_TIFF_BIN_GROUP4 = ITC_FILE_TIFF_GRAY_SCALE = ITC_FILE_RAW = ITC_FILE_JPEG = S eDepth pImgBuffer 0, 1, 2, 3, 4, 5, // // // // // // Returns data a KIM file TIFF Binary file TIFF Binary Group 4 compressed TIFF Gray Scale Raw image JPEG image Number of bits per pixel. Currently, only one (monochrome) or eight (gray-scale) are supported. [out] Pointer to the buffer in which the signature capture image will be put. typedef struct tagITCImageSpec DWORD dwStructSize; LONG biWidth; LONG biHeight; WORD biBitCount; ITC_FILE_FORMAT eFormat; DWORD biActualImageSize; DWORD biMaxImageBytes; BYTE rgbImageData[1]; } ITC_IMAGE_SPEC; where: S dwStructSize biWidth biHeight biBitCount eFormat biActualImageSize biMaxImageBytes S rgbImageData 222 Size, in bytes, of this struct. This is for version control. The width of each row in pixels. The number of rows in the image data. The number of bits per pixel. Identifies the image format. Total bytes of image data returned. Maximum bytes that can be stored in rgbImageData[]. Buffer containing the actual data, for example a 640x480 uses a 307200-byte buffer. The array size of this buffer is arbitrary so do not use this structure directly to reserve memory. The actual dimension of the buffer is identified by biMaxImageBytes. 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Return Values HRESULT identifying success or error. On error, the following codes will be returned: S S_OK Image successfully returned. S ITC_RESULT_ERR_BADREGION_E The specified region is not in the image. S ITC_RESULT_NO_BC_DECODED_E A bar code has not yet been decoded or the last bar code decoded was not a signature capture symbology. S ITC_IMGBUFF_TOO_SMALL_E pImgBuffer is too small to contain the signature captured image. S ITC_INV_PARAMETER_E One of the parameters is invalid. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks ReadSigCapBuffer() will return the image from the last decoded label with dimensions identified by the calling parameter. This signature capture region must include the signature capture bar code. The supported bar codes for signature capture are: PDF 417, Code 128, and Code 39. The caller specifies the width, height, and center of the image to be retrieved. This image is independent of any rotation of the bar code relative to the imager. Thus, if the bar code is decoded with the code itself upside down to the imager, the retrieved image will still be right side up. However, if the specified image is outside the field of view a result code of ITC_RESULT_ERR_BADREGION_E will be returned. This function uses the dimensions of the last decoded bar code as its coordinate system. Thus, all the parameters describing the image size and position are in units called “Intelligent Bar Code Units.” An Intelligent Bar Code Unit is equivalent to the narrow element width of the bar code. The dimensions of the resulting image can be calculated with this formula: Resulting Width = Specified Width * Specified Resolution Resulting Height = Specified Height * Specified Resolution See Also None. 700 Series Color Mobile Computer User’s Manual 223 Chapter 6 — Scanner Support IImage::ReadSigCapFile Note: This has not been implemented as of this publication. Syntax HRESULT IImage::ReadSigCapFile( ITC_SIGCAP_SPEC *pSigCapSpec, LPCTSTR pszFileName ); Parameters pSigCapSpec [in] Pointer to the structure that identifies the signature capture region. See ReadSigCapFile (page 221) for a description of this structure. pszFileName [in] Name of the file in which to copy the image. Return Values HRESULT identifying success or error. On error, the following codes will be returned: S S_OK Image successfully returned. S ITC_RESULT_ERR_BADREGION_E The specified region is not in the image. S ITC_RESULT_NO_BC_DECODED_E A bar code has not yet been decoded or the last bar code decoded was not a signature capture symbology. S ITC_FILE_OPEN_E The file could not be opened. S ITC_INV_PARAMETER_E One of the parameters is invalid. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks ReadSigCapFile() will write the image from the last decoded label with dimensions identified by the calling parameter. If the file already exists, its contents will be overwritten. This signature capture region must include the signature capture bar code. The supported bar codes for signature capture are: PDF 417, Code 128, and Code 39. The caller specifies the width, height, and center of the image to be retrieved. This image is independent of any rotation of the bar code relative to the imager. Thus, if the bar code is decoded with the code itself upside down to the imager, the retrieved image will still be right side up. However, if the specified image is outside the field of view a result code of ITC_RESULT_ERR_BADREGION_E will be returned. This function uses the dimensions of the last decoded bar code as its coordinate system. Thus, all the parameters describing the image size and position are in units called “Intelligent Bar Code Units”. An Intelligent Bar Code Unit is equivalent to the narrow element width of the bar code. 224 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support The dimensions of the resulting image can be calculated with this formula: Resulting Width = Specified Width * Specified Resolution Resulting Height = Specified Height * Specified Resolution See Also None. IImage::ReadImage Syntax HRESULT IImage::Read( ITCFileFormat eFormat, DWORD nDepth, ITC_IMAGE_SPEC *pImgBuffer, DWORD dwTimeout ); Parameters eFormat ITC_FILE_KIM = ITC_FILE_TIFF_BIN = ITC_FILE_TIFF_BIN_GROUP4 = ITC_FILE_TIFF_GRAY_SCALE = ITC_FILE_RAW = ITC_FILE_JPEG = [in] 0, 1, 2, 3, 4, 5, // // // // // // Format of the image buffer returned as follows. Currently, only ITC_FILE_RAW is supported. Returns data a KIM file TIFF Binary file TIFF Binary Group 4 compressed TIFF Gray Scale Raw image JPEG image nDepth [in] Number of bits per pixel. Currently, only eight (gray-scale) are supported. pImgBuffer [in/out] Pointer to the buffer containing the image. dwTimeout [in] Milliseconds to wait for the image to be returned. Return Values HRESULT identifying success or error. On error, these will be returned: S S_OK Image successfully returned. S ITC_IMGBUFF_TOO_SMALL_E pImgBuffer is too small to contain the signature captured image. S ITC_TIMEOUT_E Timeout. S ITC_INV_PARAMETER_E One of the parameters is invalid. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks The image is returned in pImgBuffer in the caller specified format. See Also None. 700 Series Color Mobile Computer User’s Manual 225 Chapter 6 — Scanner Support IImage::CancelReadImage Syntax HRESULT IImage::CancelReadImage( ); Parameters None. Return Values Status code indicating success or failure as follows: S S_OK Imager closed. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks This function causes a pending image read of IImage::ReadImage() to return immediately with an error status. The purpose of this function is to allow the application to release a thread blocked on the ReadImage() call. See Also None. IImage::Start Syntax HRESULT IImage::Start( ); Parameters None. Return Values Status code indicating success or failure as follows: S S_OK Imager started. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks This function starts the image continuously capturing images. See Also None. 226 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support IImage::Stop Syntax HRESULT IImage::Stop( ); Parameters None. Return Values Status code indicating success or failure as follows: S S_OK Imager started. S S_IMG_NOT_PRESENT_E Unit does not contain an imager. S S_DEVICE_NOT_OPENED_E Device had not been opened. Remarks This function stops the image continuously capturing images. See Also None. IImage::Open Syntax HRESULT IImage::Open( BOOL fSigCapEnable ); Parameters fSigCapEnable [in] When TRUE, signature capture is enabled. When FALSE, it is disabled. Bar code labels are decoded and images (via IImage::ReadImage) the same. Return Values Status code indicating success or failure as follows: S S_OK Imager opened. S S_IMG_NOT_PRESENT_E Unit does not contain an imager. S S_DEVICE_CONTENTION_E Device has already been opened. Remarks This function exclusively allocates the imager device so that the other IImage methods can be safely called. See Also None. 700 Series Color Mobile Computer User’s Manual 227 Chapter 6 — Scanner Support IImage::Close Syntax HRESULT IImage::Close( ); Parameters None. Return Values Status code indicating success or failure as follows: S S_OK Imager closed. S S_DEVICE_NOT_OPENED_E The device had not been opened. Remarks This function releases the imager device so that other applications can open it. An IImage::Release() will also close the imager device. See Also None. 228 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Data Collection Configuration Scanner settings for the 700 Series Computer can be configured via the Data Collection control panel applet. From the 700 Series Computer, tap Start → Settings → the System tab → the Data Collection icon. See Appendix A, “Control Panel Applets” for more information about the following parameters. Note that these are in alphabetical order. S Codabar (page 292) S Code 11 (page 306) S Code 128 (page 295) S Code 128 Options (page 296) S Code 128 FNC1 Character (page 297) S Code 39 (page 290) S Code 93 (page 294) S Code 93 Length (page 294) S Data Matrix (page 308) S Interleaved 2 of 5 (page 303) S Matrix 2 of 5 (page 304) S MSI (page 299) S PDF 417 (page 300) S Macro PDF (page 300) S Micro PDF 417 (page 302) S Plessey (page 298) S QR Code (page 307) S Standard 2 of 5 (page 291) S Telepen (page 305) S UPC/EAN (page 293) 700 Series Color Mobile Computer User’s Manual 229 Chapter 6 — Scanner Support Tethered Scanner The Intermec Tethered Scanner feature accepts data from the COM1 port wedges it to the keyboard interface, and allows some ADC. This feature can be enabled or disabled from the Today Screen on the 700 Series Computer. Enabling and Disabling On the 700 Series Computer, tap Start → Today. Tap the bar code scanner icon in the System Tray (circled in the following illustration). Initially, the bar code scanner icon indicates that this feature is disabled (shown to the left). S Select Comm Port Wedge to send any data, coming into the 700 Series Computer through the COM1 port from an external input device, as keyboard data to an application on the desktop. For example, if you have Pocket Word running on your 700 Series Computer desktop, information scanned with a scanner connected to the COM1 port will appear in the Word document. If another data collection application is running and is active on the 700 Series Computer, the scanned information will appear in that application. Note: When Comm Port Wedge is selected, regardless of the data sent by the external input device, you cannot control the device or the data format using any of the Intermec scanner control or data transfer APIs from the SDK or the internal Data Collection software. The external input device is governed by what software it has onboard to tell it how to scan, take pictures, or send the data elsewhere. 230 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support S Select 1551/1553 to enable the Sabre 1551E or 1553 Tethered Scanner to scan, then send data as keyboard data. The 1551/1553 Tethered Scanner has software onboard that translates scanned data into characters, so the running/active application does not need to know how to do that. All the scanner control and data transfer APIs will work with the 1551/1553 Tethered Scanner, so you can control the device. S Select Disable All to disable this feature and use the COM1 port for another application, such as ActiveSync. An error message will result if this option were not selected, but this action was attempted. Similarly, if ActiveSync is using the COM1 port, and you select Comm Port Wedge or 1551/1553, an error message will result. See “Error Message” on page 232 for more information. Changing Comm Settings Tap Change Comm Settings to configure the settings for the COM1 port. Current settings are restored after a warm-boot, but are lost after a coldboot. When these settings have not been changed, the OK button is disabled (grayed out). When changes are made, tap OK after it is enabled to accept these changes. S Baud Rate: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 S Data Bits: 7 or 8 S Parity: None, Odd, Even, Mark, Space S Stop Bits: 1 or 2 S Flow Control: None or Hardware Tethered Scanner The default settings for the Tethered Scanner are shown in the following illustration: 700 Series Color Mobile Computer User’s Manual 231 Chapter 6 — Scanner Support Sabre 1551E or 1553 Tethered Scanner The default communication configuration for the Sabre 1551E or 1553 Tethered Scanner is shown in the following illustration. Scan the EasySet Reset Factory Defaults label to set the Sabre 1551E or 1553 tethered scanner communications settings to this configuration. The COM1 port configuration settings must also match those of the scanner to scan labels. Welch Allyn 1470 Imager Settings The Welch Allyn 1470 Imager can be set to this configuration by scanning the Factory Default Settings label. Error Message If the COM1 port is used by another application, such as ActiveSync, neither the Comm Port Wedge nor the 1551/1553 Tethered Scanner can be enabled. As a result, the following message may appear. Note that this message is for the Comm Port Wedge. You must disable that application to free up the COM1 port before you can enable either the wedge or the scanner. Scanner Cabling A null modem cable is required for the Welch Allyn 1470 Imager to communicate with the 700 Series Computer when using the 700 Series Serial Cable (P/N: 226-999-001). The Sabre 1551E / 1553 Cable connects directly to the Model 700 Comm Port. 232 700 Series Color Mobile Computer User’s Manual Chapter 6 — Scanner Support Limitations and Capabilities The Tethered Scanner has the following limitations: S No auto detection of a scanner’ s physical connection to COM1 port. User needs to ensure the communication settings of COM1 port matched the settings of the device. S The Pocket PC Pocket Office applications misbehave when control characters such as carriage return are wedged. This is a known Pocket PC problem, which is being worked with Microsoft and for which a work around is being developed. S Communications port is COM1 and cannot be changed. S A complete bar code label is detected when the time between bytes (the inter-byte gap) exceeds 100 ms. This allows that data could be concatenated if two labels were received while the Comm Port Wedge or the 1551/1553 Tethered Scanner was not performing a read. That is, it could be wedging data just read or the read thread could be preempted. Also, the labels could appear concatenated if the scanner itself were to buffer the labels before transmitting them. When enabled, the Comm Port Wedge menu option has the following limitation: S There is no bar code API to get bar code data from the bar code scanner. The Comm Port Wedge transmits the data through the keyboard interface only. When enabled, the 1551/1553 menu option has the following capabilities: S Grid Data Editing is available. S The source of the symbology configurations is only available via the Easy Set command labels. Only the Virtual Wedge configurations can be configured via the Data Collection Control Panel Applet Virtual Wedge page. See Appendix A, “Control Panel Applets,” for more information. S May transmit the data through the keyboard interface (via the Virtual Wedge). 700 Series Color Mobile Computer User’s Manual 233 Chapter 6 — Scanner Support S The bar code APIs, defined in the IADC interface, are available to get bar code data from the bar code scanner. The following example shows how to programmatically collects bar code data: #include “IADC.h” #include “ITCAdcMgmt.h” // Linked with ITCUUID.LIB // Linked with ITCAdcDevMgmt.lib IADC* pIADC; HRESULT hrStatus = S_OK; // Create a ADC COM interface to collect bar code data from the 1551E/1553 // when the 1551/1553 menu option is enabled. hrStatus = ITCDeviceOpen(TEXT(“ExtScanner”), // Name of the ADC device. IID_IADC, // COM interface to return ITC_DHDEVFLAG_READAHEAD, // Device’s Flags (LPVOID *) &pIADC); // the returned interface if( SUCCEEDED(hrStatus) ) BYTE byteBuffer[MAX_LABEL_SIZE]; DWORD dwLength = 0; HRESULT hr = pIDC->Read( byteBuffer, MAX_LABEL_SIZE, &dwLength, NULL, INFINITE ); // // // // // Buffer to put the ADC data. Size of pDataBuffer in bytes. Number bytes returned. Time stamp of the received data. NULL. Number of milliseconds to wait. when done using this COM interface, delete it: ITCDeviceClose( (IUnknown **) pIADC); 234 700 Series Color Mobile Computer User’s Manual 7 Programming The following programming information pertains to the 700 Series Color Mobile Computer: S Creating CAB Files (page 236) S FTP Server (page 251) S Full Screen (page 262) S Kernel I/O control functions (page 264) S Reboot Functions (page 280) S Remapping the Keypad (page 281) 700 Series Color Mobile Computer User’s Manual 235 Chapter 7 — Programming Creating CAB Files The Windows CE operating system uses a .CAB file to install an application on a Windows CE-based device. A .CAB file is composed of multiple files that are compressed into one file. Compressing multiple files into one file provides the following benefits: S All application files are present. S A partial installation is prevented. S The application can be installed from several sources, such as a desktop computer or a Web site. Use the CAB Wizard application (CABWIZ.EXE) to generate a .CAB file for your application. Creating Device-Specific CAB Files Do the following to create a device-specific .CAB file for an application, in the order provided: 1 Create an .INF file with Windows CE-specific modifications (page 236). 2 Optional Create a SETUP.DLL file to provide custom control of the installation process (page 248). 3 Use the CAB Wizard to create the .CAB file, using the .INF file, the optional SETUP.DLL file, and the device-specific application files as parameters (page 249). Creating an .INF File An .INF file specifies information about an application for the CAB Wizard. Below are the sections of an .INF file: [Version] This specifies the creator of the file, version, and other relevant information. Required? Yes S Signature: “signature_name” Must be “$Windows NT$” as Windows CE is not available on Windows 95. S Provider: “INF_creator” The company name of the application, such as “Microsoft.” S CESignature: “$Windows CE$” EXAMPLE: [Version] Signature = “$Windows NT$” Provider = “Microsoft” CESignature = “$Windows CE$” 236 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming [CEStrings] This specifies string substitutions for the application name and the default installation directory. Required? Yes S AppName: app_name Name of the application. Other instances of %AppName% in the .INF file will be replaced with this string value, such as RP32. S InstallDir: default_install_dir Default installation directory on the device. Other instances of %InstallDir% in the .INF file will be replaced with this string value. Example: \storage_card\%AppName% EXAMPLE: [CEStrings] AppName=“Game Pack” InstallDir=%CE1%\%AppName% [Strings] This section is optional and defines one or more string keys. A string key represents a string of printable characters. Required? No S string_key: value String consisting of letters, digits, or other printable characters. Enclose value in double quotation marks ““”” if the corresponding string key is used in an item that requires double quotation marks. No string_keys is okay. EXAMPLE: [Strings] reg_path = Software\Microsoft\My Test App 700 Series Color Mobile Computer User’s Manual 237 Chapter 7 — Programming [CEDevice] Describes the platform for the targeted application. All keys in this section are optional. If a key is nonexistent or has no data, Windows CE does not perform any checking with the exception being UnsupportedPlatforms. If the UnsupportedPlatforms key exists but no data, the previous value is not overridden. Required? Yes S ProcessorType : processor_type The value that is returned by SYSTEMINFO.dwProcessorType. For example, the value for the SH3 CPU is 10003 and the MIPS CPU is 4000. S UnsupportedPlatforms: platform_family_name This lists known unsupported platform family names. If the name specified in the [CEDevice.xxx] section is different from that in the [CEDevice] section, both platform_family_name values are unsupported for the microprocessor specified by xxx. That is, the list of unsupported platform family names is appended to the previous list of unsupported names. Application Manager will not display the application for an unsupported platform. Also, a user will be warned during the setup process if the .CAB file is copied to an unsupported device. EXAMPLE: [CEDevice] UnsupportedPlatforms = pltfrm1 ; pltfrm1 is unsupported [CEDevice.SH3] UnsupportedPlatforms = ; pltfrm1 is still unsupported S VersionMin: minor_version Numeric value returned by OSVERSIONINFO.dwVersionMinor. The .CAB file is valid for the currently connected device if the version of this device is greater than or equal to VersionMin. For Windows CE Japanese language devices, set this to 2.01 S VersionMax: major_version Numeric value returned by OSVERSIONINFO.dwVersionMajor. The .CAB file is valid for the currently connected device if the version of this device is less than or equal to VersionMax. For Windows CE Japanese language devices, set this to 2.01 Note: Supported Windows CE operating system versions include 1.0, 1.01, 2.0, 2.01, and 2.10. When using these numbers, be sure to include all significant digits. S BuildMin: build_number Numeric value returned by OSVERSIONINFO.dwBuildNumber. The .CAB file is valid for the currently connected device if the version of this device is greater than or equal to BuildMin. S BuildMax: build_number Numeric value returned by OSVERSIONINFO.dwBuildNumber. The .CAB file is valid for the currently connected device if the version of this device is less than or equal to BuildMax. 238 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming EXAMPLE: The following code example shows three [CEDevice] sections: one that gives basic information for any CPU and two that are specific to the SH3 and the MIPS microprocessors. [CEDevice] ; A “template” for all platforms UnsupportedPlatforms = pltfrm1 ; Does not support pltfrm1 ; The following specifies version 1.0 devices only. VersionMin = 1.0 VersionMax = 1.0 [CEDevice.SH3] ; Inherits all [CEDevice] settings ; This will create a .CAB file specific to SH3 devices. ProcessorType = 10003 ; SH3 .cab file is valid for SH3 microprocessors. UnsupportedPlatforms = ; pltfrm1 is still unsupported ; The following overrides the version settings so that no version checking is performed. VersionMin = VersionMax = [CEDevice.MIPS] ; This will create a .CAB file ProcessorType = 4000 UnsupportedPlatforms =pltfrm2 ; Inherits all [CEDevice] settings specific to “MIPS” devices. ; MIPS .CAB file is valid for MIPS microprocessor. ; pltfrm1, pltfrm2 unsupported for MIPs .CAB file. Note: To create the two CPU-specific .CAB files for the SETUP.INF file in the previous example, run the CAB Wizard with the “/cpu sh3 mips” parameter. 700 Series Color Mobile Computer User’s Manual 239 Chapter 7 — Programming [DefaultInstall] This describes the default installation of your application. Note that under this section, you will list items expanded upon later in this description. Required? Yes S Copyfiles: copyfile_list_section Maps to files defined later in the .INF file, such as Files.App, Files.Font, and Files.Bitmaps. S AddReg: add_registry_section Example: RegSettings.All S CEShortcuts: shortcut_list_section String that identifies one more section that defines shortcuts to a file, as defined in the [CEShortcuts] section. S CESetupDLL: setup_DLL Optimal string that specifies a SETUP.DLL file. It is written by the Independent Software Vendor (ISV) and contains customized functions for operations during installation and removal of the application. The file must be specified in the [SourceDisksFiles] section. S CESelfRegister: self_reg_DLL_filename String that identifies files that self-register by exporting the DllRegisterServer and DllUnregisterServer Component Object Model (COM) functions. Specify these files in the [SourceDiskFiles] section. During installation, if installation on the device fails to call the file’ s exported DllRegisterServer function, the file’ s exported DllUnregisterServer function will not be called during removal. EXAMPLE: [DefaultInstall] AddReg = RegSettings.All CEShortcuts = Shortcuts.All [SourceDiskNames] This section describes the name and path of the disk on which your application resides. Required? Yes S disk_ordinal: disk_label,,path 1=,“App files” , C:\Appsoft\RP32\... 2=,“Font files”,,C:\RpTools\... 3=,“CE Tools” ,,C:\windows ce tools... S CESignature: “$Windows CE$” Example [SourceDisksNames] 1 = ,“Common files”,,C:\app\common [SourceDisksNames.SH3] 2 = ,“SH3 files”,,sh3 [SourceDisksNames.MIPS] 2 = ,“MIPS files”,,mips 240 ; Required section ; Using an absolute path ; Using a relative path ; Using a relative path 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming [SourceDiskFiles] This describes the name and path of the files in which your application resides. Required? Yes S filename: disk_number[,subdir] RPM.EXE = 1,c:\appsoft\... WCESTART.INI = 1 RPMCE212.INI = 1 TAHOMA.TTF = 2 Note: [,subdir] is relative to the location of the INF file. Example [SourceDisksFiles] ; Required section begin.wav = 1 end.wav = 1 sample.hlp = 1 [SourceDisksFiles.SH3] sample.exe = 2 ; Uses the SourceDisksNames.SH3 identification of 2. [SourceDisksFiles.MIPS] sample.exe = 2 ; Uses the SourceDisksNames.MIPS identification of 2. 700 Series Color Mobile Computer User’s Manual 241 Chapter 7 — Programming [DestinationDirs] This describes the names and paths of the destination directories for the application on the target device. Note Windows CE does not support directory identifiers. Required? Yes S file_list_section: 0,subdir String that identifies the destination directory. The following list shows the string substitutions supported by Windows CE. These can be used only for the beginning of the path. \ %CE1% \Program Files %CE2% \Windows %CE3% \My Documents %CE4% \Windows\Startup %CE5% \My Documents %CE6% \Program Files\Accessories %CE7% \Program Files\Communication %CE8% \Program Files\Games %CE9% \Program Files\Pocket Outlook %CE10% \Program Files\Office %CE11% \Windows\Start Menu\Programs %CE12% \Windows\Start Menu\Programs\Accessories %CE13% \Windows\Start Menu\Programs\Communications %CE14% \Windows\Start Menu\Programs\Games %CE15% \Windows\Fonts %CE16% \Windows\Recent %CE17% \Windows\Start Menu %InstallDir% Contains the path to the target directory selected during installation. It is declared in the [CEStrings] section %AppName% Contains the application name defined in the [CEStrings] section. Example [DestinationDirs] Files.Common = 0,%CE1%\My Subdir Files.Shared = 0,%CE2% 242 ; \Program Files\My Subdir ; \Windows 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming [CopyFiles] This section, under the [DefaultInstall] section, describes the default files to copy to the target device. Within the [DefaultInstall] section, files were listed that must be defined elsewhere in the INF file. This section identifies that mapping and may contain flags. Required? Yes S copyfile_list_section: destination_filename,[source_filename] The source_filename parameter is optional if it is the same as destination_filename. S copyfile_list_section: flags The numeric value that specifies an action to be done while copying files. The following table shows values supported by Windows CE. Flag Value Description COPYFLG_WARN_IF_SKIP 0x00000001 Warn user if skipping a file is attempted after error. COPYFLG_NOSKIP 0x00000002 Do not allow a user to skip copying a file. COPYFLG_NO_OVERWRITE 0x00000010 Do not overwrite files in destination directory. COPYFLG_REPLACEONLY 0x00000400 Copy the source file to the destination directory only if the file is already in the destination directory. CE_COPYFLG_NO_DATE_DIALOG 0x20000000 Do not copy files if the target file is newer. CE_COPYFLG_NODATECHECK 0x40000000 Ignore date while overwriting the target file. CE_COPYFLG_SHARED 0x80000000 Create a reference when a shared DLL is counted. Example [DefaultInstall.SH3] CopyFiles = Files.Common, Files.SH3 [DefaultInstall.MIPS] CopyFiles = Files.Common, Files.MIPS 700 Series Color Mobile Computer User’s Manual 243 Chapter 7 — Programming [AddReg] This section, under the [DefaultInstall] section, is optional and describes the keys and values that the .CAB file adds to the device registry. Within the [DefaultInstall] section, a reference may have been made to this section, such as “AddReg=RegSettings.All”. This section defines the options for that setting. Required? No S add_registry_section: registry_root_string String that specifies the registry root location. The following list shows the values supported by Windows CE. S HKCR Same as HKEY_CLASSES_ROOT S HKCU Same as HKEY_CURRENT_USER S HKLM Same as HKEY_LOCAL_MACHINE S add_registry_section: value_name Registry value name. If empty, the “default” registry value name is used. S add_registry_section: flags Numeric value that specifies information about the registry key. The following table shows the values that are supported by Window CE. Flag Value Description FLG_ADDREG_NOCLOBBER 0x00000002 If the registry key exists, do not overwrite it. Can be used with any of the other flags in this table. FLG_ADDREG_TYPE_SZ 0x00000000 REG_SZ registry data type. FLG_ADDREG_TYPE_MULTI_SZ 0x00010000 REG_MULTI_SZ registry data type. Value field that follows can be a list of strings separated by commas. FLG_ADDREG_TYPE_BINARY 0x00000001 REG_BINARY registry data type. Value field that follows must be a list of numeric values separated by commas, one byte per field, and must not use the 0x hexadecimal prefix. FLG_ADDREG_TYPE_DWORD 0x00010001 REG_DWORD data type. The noncompatible format in the Win32 Setup .INF documentation is supported. Example AddReg = RegSettings.All [RegSettings.All] HKLM,%reg_path%,,0x00000000,alpha HKLM,%reg_path%,test,0x00010001,3 HKLM,%reg_path%\new,another,0x00010001,6 244 ; = “alpha” ; Test = 3 ; New\another = 6 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming [CEShortCuts] This section, a Windows CE-specific section under the [DefaultInstall] section, is optional and describes the shortcuts that the installation application creates on the device. Within the [DefaultInstall] section, a reference may have been made to this section, such as “ShortCuts.All”. This section defines the options for that setting. Required? No S shortcut_list_section: shortcut_filename String that identifies the shortcut name. It does not require the .LNK extension. S shortcut_list_section: shortcut_type_flag Numeric value. Zero or empty represents a shortcut to a file; any nonzero numeric value represents a shortcut to a folder. S shortcut_list_section: target_file_path String value that specifies the destination location. Use the target file name for a file, such as MyApp.exe, that must be defined in a file copy list. For a path, use a file_list_section name defined in the [DestinationDirs] section, such as DefaultDestDir, or the %InstallDir% string. S shortcut_list_section: standard_destination_path Optional string value. A standard %CEx% path or %InstallDir%. If no value is specified, the shortcut_list_section name of the current section or the DefaultDestDir value from the [DestinationDirs] section is used. Example CEShortcuts = Shortcuts.All [Shortcuts.All] Sample App,0,sample.exe App,0,sample.exe,%InstallDir% ; Uses the path in DestinationDirs. Sample ; The path is explicitly specified. Sample .INF File [Version] ; Required section Signature = “$Windows NT$” Provider = “Intermec Technologies Corporation” CESignature = “$Windows CE$” ;[CEDevice] ;ProcessorType = [DefaultInstall] ; Required section CopyFiles = Files.App, Files.Fonts, Files.BitMaps, Files.Intl, Files.TelecomNcsCE, Files.Windows, Files.Import, Files.Export, Files.Work, Files.Database, Files.WinCE AddReg = RegSettings.All ;CEShortcuts = Shortcuts.All [SourceDisksNames] ; Required section 1 = ,“App files” ,,c:\appsoft\... 2 = ,”Font files” ,,c:\WinNT\Fonts 3 = ,”CE Tools” ,,c:\windows ce tools\wce212\6110ie\mfc\lib\x86 [SourceDisksFiles] ; Required section rpm.exe = 1,C:\Appsoft\program\wce212\WCEX86Rel6110 wcestart.ini = 1 700 Series Color Mobile Computer User’s Manual 245 Chapter 7 — Programming rpmce212.ini = 1 intermec.bmp = 1 rpmlogo.bmp = 1 rpmname.bmp = 1 import.bmp = 1 export.bmp = 1 clock.bmp = 1 printer.bmp = 1 filecopy.bmp = 1 readme.txt = 1 lang_eng.bin = 1 rpmdata.dbd = 1,database\wce1 tahoma.ttf = 2 mfcce212.dll = 3 olece212.dll = 3 olece211.dll = 1,c:\windows ce tools\wce211\NMSD61102.11\mfc\lib\x86 rdm45wce.dll = 1,c:\rptools\rdm45wce\4_50\lib\wce212\wcex86rel picfmt.dll = 1,c:\rptools\picfmt\1_00\wce212\wcex86rel6110 fmtctrl.dll = 1,c:\rptools\fmtctrl\1_00\wce212\wcex86rel6110 ugrid.dll = 1,c:\rptools\ugrid\1_00\wce212\wcex86rel6110 simple.dll = 1,c:\rptools\pspbm0c\1_00\wce211\wcex86rel psink.dll = 1,c:\rptools\psink\1_00\wce211\WCEX86RelMinDependency pslpwce.dll =1,c:\rptools\pslpm0c\1_00\wce211\WCEX86RelMinDependency npcpport.dll = 1,c:\rptools\cedk\212_03\installable drivers\printer\npcp ;dexcom.dll = 1,c:\rptools\psdxm0c\1_00\x86 ncsce.exe = 1,c:\rptools\ncsce\1_04 nrinet.dll = 1,c:\rptools\ncsce\1_04 [DestinationDirs] ; Required section ;Shortcuts.All = 0,%CE3% ; \Windows\Desktop Files.App = 0,%InstallDir% Files.DataBase = 0,%InstallDir%\DataBase Files.BitMaps = 0,%InstallDir%\Bitmaps Files.Fonts = 0,%InstallDir%\Fonts Files.Intl = 0,%InstallDir%\Intl Files.TelecomNcsCE = 0,%InstallDir%\Telecom\NcsCE Files.Windows = 0,%InstallDir%\Windows Files.Import = 0,%InstallDir%\Import Files.Export = 0,%InstallDir%\Export Files.Work = 0,%InstallDir%\Work Files.WinCE = 0,\storage_card\wince [CEStrings] ; Required section AppName = Rp32 InstallDir = \storage_card\%AppName% [Strings] ; Optional section ;[Shortcuts.All] ;Sample App,0,sample.exe ;Sample App,0,sample.exe,%InstallDir% ; Uses the path in DestinationDirs. ; The path is explicitly specified. [Files.App] rpm.exe,,,0 rpm.ini,rpmce212.ini,,0 mfcce212.dll,,,0 olece212.dll,,,0 olece211.dll,,,0 rdm45wce.dll,,,0 picfmt.dll,,,0 246 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming fmtctrl.dll,,,0 ugrid.dll,,,0 simple.dll,,,0 psink.dll,,,0 pslpwce.dll,,,0 npcpport.dll,,,0 ;dexcom.dll,,,0 [Files.DataBase] rpmdata.dbd,,,0 [Files.Fonts] tahoma.ttf,,,0 [Files.BitMaps] intermec.bmp,,,0 rpmlogo.bmp,,,0 rpmname.bmp,,,0 import.bmp,,,0 export.bmp,,,0 clock.bmp,,,0 printer.bmp,,,0 filecopy.bmp,,,0 [Files.Intl] lang_eng.bin,,,0 [Files.TelecomNcsCE] ncsce.exe,,,0 nrinet.dll,,,0 [Files.Windows] readme.txt,,,0 [Files.Import] readme.txt,,,0 [Files.Export] readme.txt,,,0 [Files.Work] readme.txt,,,0 [Files.WinCE] wcestart.ini,,,0 [RegSettings.All] HKLM,”SOFTWARE\Microsoft\Shell\AutoHide”,,0x00010001,1 ; Autohide the taskbar HKLM,”SOFTWARE\Microsoft\Shell\OnTop”,,0x00010001,0 ; Shell is not on top HKLM,”SOFTWARE\Microsoft\Clock”,SHOW_CLOCK,0x00010001,0 ; Clock is not on taskbar 700 Series Color Mobile Computer User’s Manual 247 Chapter 7 — Programming Using Installation Functions in SETUP.DLL SETUP.DLL is an optional file that enables you to perform custom operations during installation and removal of your application. The following list shows the functions that are exported by SETUP.DLL. S Install_Init Called before installation begins. Use this function to check the application version when reinstalling an application and to determine if a dependent application is present. S Install_Exit Called after installation is complete. Use this function to handle errors that occur during application installation. S Uninstall_Init Called before the removal process begins. Use this function to close the application, if the application is running. S Uninstall_Exit Called after the removal process is complete. Use this function to save database information to a file and delete the database and to tell the user where the user data files are stored and how to reinstall the application. Note; Use [DefaultInstall] → CESelfRegister (page 240) in the .INF file to point to SETUP.DLL. After the CAB File Extraction Cab files that need to cause a warm reset after cab extraction will need to create the __RESETMEPLEASE__.TXT file in the “\Windows” directory. The preferred method to create this file is within the DllMain portion of the SETUP.DLL file. It looks like this: BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) switch (ul_reason_for_call) case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: if (bInstallSuccessful) { HANDLE h; h = CreateFile(L”\\Windows\\__resetmeplease__.txt”, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL); if (h != INVALID_HANDLE_VALUE) CloseHandle(h); break; return TRUE; 248 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming The system software looks for the following directory structure and files on the installed media card whether it be an SD card or CF card or embedded flash file system. No other folders need exist. \2577\autorun.exe \2577\autorun.dat \2577\autocab.exe \2577\autocab.dat \cabfiles\*.cab Creating CAB Files with CAB Wizard After you create the .INF file and the optional SETUP.DLL file, use the CAB Wizard to create the .CAB file. The command-line syntax for the CAB Wizard is as follows: cabwiz.exe “inf_file” [/dest dest_directory] [/err error_file] [/cpu cpu_type [cpu_type]] A batch file, located in directory, with the following commands, works well: cd\“Windows CE Tools”\WCE211\”MS HPC Pro”\support\appinst\bin cabwiz.exe c:\appsoft\ \ cd \appsoft\ S “inf_file” The SETUP.INF file path. S dest_directory The destination directory for the .CAB files. If no directory is specified, the .CAB files are created in the “inf_file” directory. S error_file The file name for a log file that contains all warnings and errors that are encountered when the .CAB files are compiled. If no file name is specified, errors are displayed in message boxes. If a file name is used, the CAB Wizard runs without the user interface (UI); this is useful for automated builds. S cpu_type Creates a .CAB file for each specified microprocessor tag. A microprocessor tag is a label used in the Win32 SETUP.INF file to differentiate between different microprocessor types. The /cpu parameter, followed by multiple cpu_type values, must be the last qualifier in the command line. Example This example creates .CAB files for the SH3 and MIPS microprocessors, assuming that the Win32 SETUP.INF file contains the SH3 and MIPS tags: cabwiz.exe “c:\myfile.inf” /err myfile.err /cpu sh3 mips Note: CABWIZ.EXE, MAKECAB.EXE, and CABWIZ.DDF (Windows CE files available on the Windows CE Toolkit) must be installed in the same directory on the desktop computer. Call CABWIZ.EXE using its full path for the CAB Wizard application to run correctly. 700 Series Color Mobile Computer User’s Manual 249 Chapter 7 — Programming Troubleshooting the CAB Wizard To identify and avoid problems that might occur when using the CAB Wizard, follow these guidelines: S Use %% for a percent sign (%) character when using this character in an .INF file string, as specified in Win32 documentation. This will not work under the [Strings] section. S Do not use .INF or .CAB files created for Windows CE to install applications on Windows-based desktop platforms. S Ensure the MAKECAB.EXE and CABWIZ.DDF files, included with Windows CE, are in the same directory as CABWIZ.EXE. S Use the full path to call CABWIZ.EXE. S Do not create a .CAB file with the MAKECAB.EXE file included with Windows CE. You must use CABWIZ.EXE, which uses MAKECAB.EXE to generate the .CAB files for Windows CE. S Do not set the read-only attribute for .CAB files. 250 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming FTP Server FTP support is provided through the FTP Server application FTPDCE.EXE (MS Windows CE Versions) which is provided as part the base system. FTPDCE is the Internet File Transfer Protocol (FTP) server process. The server can be invoked from an application or command line. Besides servicing FTP client requests the FTP Server also send a “network announcement” to notify prospective clients of server availability. Synopsis ftpdce [ options ] Options S -Aaddr Sets the single target address to which to send the network announcement. Default is broadcast. S -Bbyte Sets the FTP data block size. Smaller sizes may be useful over slower links. Default is 65536. S -Cname Sets the device name. Used by Intermec management software. S -Fvalue Disables the default Intermec account. A value of “0” disables the account. Default is “1”. Note: Disabling the default account without providing a working access control list on the server will result in a device that will not accept any FTP connections. S -Hsec Sets the interval between network announcements in seconds.A value of “0” turns the network announcement off. Default is 30 seconds. S -Iip Sets the preferred 6920 Communications Server (optional). S -Llog Sets the state of logging. Default is 0 (disabled). S -Nsec Specifies the number of seconds to wait before starting FTP server services. S -Pport Sets the UDP port on which the network announcement will be sent. Default port is 52401. S -Qport Sets the port on which the FTP Server will listen for connections. Default port is 21. 700 Series Color Mobile Computer User’s Manual 251 Chapter 7 — Programming S -Rdir Sets the FTP mount point to this directory. Default is the rootdirectory of the drive from which the FTP Server program was executed. S -Tscript Sets the script name for the 6920 Communications Server to process. S -Uurl Sets the default URL for this device. S -Z“parms” Sets extended parameters to be included in the network announcement. Configurable Parameters Via the Registry Editor The following parameters receive default values during the installation of the Intermec FTP Server components. A few of the parameters are visible in the registry by default, but most must be created in order to modify the default behavior of the FTP server. BlockSize Setting this parameter forces the Intermec FTP Server to transmit and receive Ethernet packets using the specified data block size. By default, the FTP server transmits and receives data using a 64K data block size. Adjusting this value may be useful in certain wireless TCP/IP installations. Key HKLM\Software\Intermec\IFTP Value Type REG_DWORD - data block size, in bytes. Valid Range 0x100-0x10000 (256-65536 decimal). Default 65536 252 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming DeviceName This parameter forces the Intermec FTP Server to include the specified device name in the Intermec Device Network Announcement (IDNA). Adjusting this value may be useful in assigning a symbolic name to this device for asset tracking. Key HKLM\Software\Intermec\IFTP Value Type REG_SZ Valid Range None. Default None. DeviceURL This parameter forces the Intermec FTP Server to transmit the specified URL in the IDNA. This can be used by Intermec management software for asset management. Key HKLM\Software\Intermec\IFTP Value Type REG_SZ Valid Range None. Default None. 700 Series Color Mobile Computer User’s Manual 253 Chapter 7 — Programming IDNATarget This parameter forces the Intermec FTP Server to transmit the IDNA to a specific destination instead of a general UDP broadcast. This parameter is useful on networks that do not allow UDP broadcasts to be routed between subnets. The use of this parameter will restrict the reception of the IDNA to the target destination only. Key HKLM\Software\Intermec\IFTP Value Type REG_SZ Valid Range None. Default None. ManifestName This parameter forces the Intermec FTP Server to transmit the specified manifest name in the IDNA. This parameter is used by the Intermec 6920 Communications Server for communication transactions. See the 6920 Communications Server documentation for proper use of this parameter. Key HKLM\Software\Intermec\IFTP Value Type REG_SZ Valid Range None. Default iftp.ini 254 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming PauseAtStartup This parameter forces the Intermec FTP Server to sleep for the specified number of seconds before making the FTP service available on the device. Key HKLM\Software\Intermec\IFTP Value Type REG_DWORD - stored in seconds. Valid Range None. Default Root This parameter forces the Intermec FTP Server to set the root of the FTP mount point to the specified value. Note that this must map to an existing directory or you will not be able to log into the FTP Server. Key HKLM\Software\Intermec\IFTP Value Type REG_SZ Valid Range None. Default 700 Series Color Mobile Computer User’s Manual 255 Chapter 7 — Programming Transferring Files Over TCP/IP Networks The File Transfer Protocol (FTP) server transfers files over TCP/IP networks. The FTPDCE.EXE program is a version that does not display a window, but can run in the background. FTPDCE is the Internet File Transfer Protocol (FTP) server process. The server can be invoked from an application or command line. Besides servicing FTP client requests, the FTP Server also sends a “network announcement” to notify prospective clients of server availability. Remarks The FTP Server currently supports the following FTP requests: S CDUP Changes to the parent directory of the current working directory. S CWD Changes working directory. S DELE Deletes a file. S HELP Gives help information. S LIST (This FTP request is the same as the ls -lgA command). Gives list files in a directory. S MKD Makes a directory. S MODE (Always Uses Binary). Specifies data transfer mode. S NLST Gives a name list of files in directory (this FTP request is the same as the ls command). S NOOP Does nothing. S PASS Specifies a password. S PWD Prints the current working directory. S QUIT Terminates session. S RETR Retrieves a file. S RMD Removes a directory. S RNFR Specifies rename-from file name. 256 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming S RNTO Specifies rename-to file name. S STOR Stores a file. S SYST Shows the operating system type of server system. S TYPE (Binary transfers only.) Specifies the data transfer type with the Type parameter. S USER Specifies user name. S XCUP (Not Normally Used) Changes the parent directory of the current working directory. S XCWD (Not Normally Used) Changes the current directory. S XMKD (Not Normally Used) Creates a directory. S XPWD (Not Normally Used) Prints the current working directory. S XRMD (Not Normally Used) Removes a directory. S SITE The following nonstandard or operating system (OS)-specific commands are supported by the SITE request. For Microsoft FTP clients, you can send site commands by preceding the command with “quote” such as “quote site status.” S ATTRIB Gets or sets the attributes of a given file. (SITE ATTRIB) Usage: QUOTE SITE ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[path] filename] Sets an attribute. Clears an attribute. Read-only file attribute. Archive file attribute. System file attribute. H Hidden file attribute. To retrieve the attributes of a file, only specify the file. The server response will be: 200-AD SHRCEIX filename If the flag exists in its position shown above, it is set. Also, in addition to the values defined above, there is also defined: Compressed file attribute. Encrypted file attribute. INROM file attribute. XIP file attribute (execute in ROM, not shadowed in RAM). 700 Series Color Mobile Computer User’s Manual 257 Chapter 7 — Programming S BOOT Reboots the server OS. This will cause the system on which the server is executing to reboot. The FTP Server will shut down cleanly before reboot. All client connections will be terminated. Cold boot is default except for the PocketPC build in which the default is warm boot. (SITE BOOT) Usage: QUOTE SITE BOOT [WARM | COLD] S COPY Copies a file from one location to another. (SITE COPY) Usage: QUOTE SITE COPY [source] [destination] Example QUOTE SITE COPY ‘\Storage Card\one.dat’ ‘\Storage Card\two.dat’ S EXIT Exits the FTP Server. This command will shut down the FTP Server thus terminating all client connections. (SITE EXIT) Usage: QUOTE SITE EXIT S HELP Gives site command help information. (SITE HELP) Usage: QUOTE SITE HELP [command] S KILL Terminates a running program. (SITE KILL) Usage: QUOTE SITE KILL [program | pid] S LOG Opens or closes the program log. (SITE LOG) Usage: QUOTE SITE LOG [open [filename]| close] S PLIST Lists the running processes (not supported on all platforms). (SITE PLIST) Usage: QUOTE SITE PLIST S RUN Starts a program running. If the program to run has spaces in path or filename, wrapping the name with single quotes is required. Usage: QUOTE SITE RUN [program] Example QUOTE SITE RUN ‘\Storage Card\app.exe’ 258 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming S STATUS Returns the current settings of the FTP Server. MAC, serial number, model, IP address, network announcement information as well as OS memory usage are returned. (SITE STATUS) Usage: QUOTE SITE STATUS S TIMEOUT Toggles idle timeout between 120 to 1200 seconds (2 to 20 minutes). If this timer expires with no activity between the client and the server, the client connection will be disconnected. If the optional seconds argument is supplied, the server will set the connection timeout to the number of seconds specified. Default is 120 seconds or 2 minutes. (SITE TIMEOUT) Usage: QUOTE SITE TIMEOUT [seconds] The remaining FTP requests specified in RFC 959 are recognized, but not implemented. The banner returned in the parenthetical portion of its greeting shows the version number of the FTP Server as well as the MAC address, serial number and OS of the machine hosting the server. The FTP Server supports browsing from the latest Netscape and Microsoft web browsers. Drag-and-drop capability is available using this environment. The FTPDCMDS subdirectory contains commands that can be used from the web browser. S Click EXITME.BIN to execute a SITE EXIT command. S Click REBOOTME.BIN to execute SITE BOOT command. S Use the GET command on these files to have the FTP Server execute these commands. S Security: A customer configurable access control list may be installed on the 700 Series Computer. This list will allow customers to restrict access via the FTP Server to the users they wish. This is in addition to the default Intermec account which can be disabled using the -F0 option at runtime. The access control list is named FTPDCE.TXT and is placed in the same directory on the 700 Series Computer as the FTPDCE.EXE server. The FTP Server will encrypt this file to keep the information safe from unauthorized users. This file is encrypted when the FTP Server is started so a file that is placed onto the 700 Series Computer after the FTP Server starts will require a restart of the FTP Server to take effect. The format of the FTPDCE.TXT is as follows: FTPDCE:user1!passwd1 user2!passwd2 user3!passw d3 ... 700 Series Color Mobile Computer User’s Manual 259 Chapter 7 — Programming Note: The user accounts and passwords are case sensitive. Once the access control list is encrypted on the 700 Series Computer, the FTP Server will hide this file from users. Once an access control list has been installed on the 700 Series Computer, a new one will not be accepted by the FTP Server until the previous one is removed. Encrypted access control lists are not portable between 700 Series Computers. Stopping the FTP Server from Your Application To allow application programmers the ability to programmatically shut down the FTP Server, the FTP Server periodically tests to see if a named event is signaled. The name for this event is “ITC_IFTP_STOP” (no quotes). For examples on how to use this event, consult the Microsoft Developer Network Library at http://www.msdn.com. The MSDN Library is an essential resource for developers using Microsoft tools, products, and technologies. It contains a bounty of technical programming information, including sample code, documentation, technical articles, and reference guides. Autostart FTP This automatically starts the FTP Server (FTPDCE.EXE) when the 700 Series Computer is powered on. This is provided with the NDISTRAY program, which displays the popup menu that currently allows you to load and unload the network drivers. Tap the antenna icon in the System Tray of the Today screen (a sample antenna icon is circled below) to get this popup menu. 260 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming The default is to start the FTP Server at boot time, unless the following registry entry is defined and set to “0” which disables AutoFTP. “1” enables the AutoFTP. The entry can be set from the NDISTRAY pop-up menu by selecting either AutoFTP On or AutoFTP Off. HKEY_LOCAL_MACHINE\Software\Intermec\Ndistray\StartupIFTP These new entries are located below the selections to load the network drivers. If the StartupIFTP registry key is not defined, the FTP Server is loaded by default, to provide “out-of-the-box” capability for customers who want to begin loading files to the 700 Series Computer without any prior configuration. Note: If a network driver is unloaded using the NDISTRAY popup menu, and the FTP Server is running, the FTP Server is stopped. On a resume, if AutoFTP is enabled and the FTP Server is running, it is stopped and restarted. NDISTRAY uses a helper application named RESETIFTP to implement the restart on resume feature. To do an AutoFTP Installation Check: 1 Ensure the FTP Server is running “out-of-the-box” the first time. 2 Tap Start → Today to access the Today screen, then tap the antenna icon in the System Tray to bring up the NDISTRAY pop-up menu. Select AutoFTP Off to disable AutoFTP. Do a warm boot and confirm the FTP Server is not running. 3 Tap Start → Today to access the Today screen, then tap the antenna icon in the System Tray to bring up the NDISTRAY pop-up menu. Select AutoFTP On to enable AutoFTP, reboot and confirm it is running. 4 Unload the network driver when the FTP Server is running and confirm that it is not running any more. 5 Load the FTP Server, establish a connection, then suspend and resume. The server should still be running, but the FTP connection to the client should be dropped. 700 Series Color Mobile Computer User’s Manual 261 Chapter 7 — Programming Full Screen Pocket PC is a hardware specification created by Microsoft Corporation. Devices that wish to carry the Pocket PC logo must meet the minimum hardware requirements set in the Pocket PC specification. Manufacturers are free to add extra hardware functionality. Pocket PC 2002 devices also use a specialized version of the CE operating system. This OS is built from Windows CE 3.0 but contains customizations, most notably the lack of a desktop and the addition of the Today Screen. To carry the Pocket PC logo, all devices must be tested at an Independent Test Laboratory. The ITL testing is done based on Microsoft requirements. The test lab then reports the findings back to Microsoft Corporation and Intermec Technologies. If the 700 Series Computer passed all tests, Intermec is allowed to ship the device with the Pocket PC logo. Each time the operating system is modified, Intermec must resubmit to ITL testing. This means we cannot change the operating system much and still be a Pocket PC device. For example, if we remove Word from the Start menu, the device would fail ITL testing and we would not be able to ship devices with the Pocket PC logo. Although many customers want a Pocket PC device, some customers would prefer that their users not have access to all of the Pocket PC features. Intermec cannot customize the operating system in any way but a custom application can: S Delete items from the Start menu, and Programs folder. These items are just shortcuts in the file system so the application is not really being deleted. Cold booting the device will bring these items back so the application will need to be run on every cold boot. S Use the RegFlushKey() API to save a copy of the registry to a storage device. See the Recovery CD Help for more information on how to do this. Saving a copy of the registry will allow most system settings to be restored in a cold boot situation. S Use the SHFullScreen() API in conjunction with other APIs to make the application take up the entire display and prevent the start menu from being available. S Remap keys and disable keys on the keypad. S Create a custom SIP. S Make changes to the registry to configure the device. 262 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming Should you want your 700 Series Computer to display a full screen, keep in mind that your computer is Pocket-PC certified by Microsoft Corporation. Check out resources on programming for the Pocket PC, using the following links. These instructions give full instructions on how to display full screen. S Instructions on how to create a full screen application for eVC++ applications using an SHFullScreen() API: http://support.microsoft.com/support/kb/articles/Q266/2/44.ASP S Instructions on how to create a full screen application for eVB applications also using the SHFullScreen() API: http://support.microsoft.com/support/kb/articles/Q265/4/51.ASP 700 Series Color Mobile Computer User’s Manual 263 Chapter 7 — Programming Kernel I/O Controls This describes the KernelIoControl() functions available to application programmers. Most C++ applications will need to prototype the function as the following to avoid link and compile errors. extern “C” BOOL KernelIoControl(DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned); IOCTL_HAL_GET_DEVICE_INFO This IOCTL returns either the platform type or the OEMPLATFORM name based on an input value. Syntax BOOL KernelIoControl( IOCTL_HAL_GET_DEVICE_INFO, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned ); Parameters lpInBuf Points to a DWORD containing either the SPI_GETPLATFORMTYPE or SPI_GETOEMINFO value. lpInBufSize Must be set to sizeof(DWORD). lpOutBuf Must point to a buffer large enough to hold the return data of the function. If SPI_GETPLATFORMTYPE is specified in lpInBuf, then the “PocketPC\0” Unicode string is returned. If SPI_GETOEMINFO is specified in lpInBuf, then the “Intermec 700\0” Unicode string is returned. nOutBufSize The size of lpOutBuf in bytes. Must be large enough to hold the string returned. lpBytesReturned The actual number of bytes returned by the function for the data requested. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 264 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming IOCTL_HAL_ITC_READ_PARM Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_ITC_READ_PARM,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Points to this structure. See “ID Field Values” below. struct PARMS { BYTE id; BYTE ClassId; }; nInBufSize Must be set to the size of the PARMS structure. lpOutBuf Must point to a buffer large enough to hold the return data of the function. If this field is set to NULL and nOutBufSize is set to zero when the function is called the function will return the number bytes required by the buffer. nOutBufSize The size of lpOutBuf in bytes. lpBytesReturned The number of bytes returned by the function for the data requested. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the error value. Either ERROR_INVALID_PARAMETER or ERROR_INSUFFICIENT_BUFFER may be returned when this function is used to get the error. ID Field Values The id field of the PARMS structure may be one of the following values: S ITC_NVPARM_ETHERNET_ID This IOCTL returns the Ethernet 802.11 MAC Address. Six bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_SERIAL_NUM This IOCTL returns the serial number of the device in BCD format. Six bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_MANF_DATE This IOCTL returns the device date of manufacture in the BCD YYYY/MM/DD format. Four bytes are returned in the buffer pointed to by the lpOutBuffer parameter. 700 Series Color Mobile Computer User’s Manual 265 Chapter 7 — Programming S ITC_NVPARM_SERVICE_DATE This IOCTL returns the device’ s date of last service in BCD YYYY/ MM/DD format. Four bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_DISPLAY_TYPE This IOCTL returns the device’ s display type. One byte is returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_EDG_IP This IOCTL returns the device Ethernet debug IP address. Four bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_EDBG_SUBNET This IOCTL returns the device Ethernet debug subnet mask. Four bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_ECN This IOCTL returns ECNs applied to the device in a bit array format. Four bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_CONTRAST This IOCTL returns the device default contrast setting. Two bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_MCODE This IOCTL returns the manufacturing configuration code for the device. Sixteen bytes are returned in the buffer pointed to by the lpOutBuffer parameter. S ITC_NVPARM_VERSION_NUMBER This IOCTL returns the firmware version for various system components. These values for the ClassId field of the PARMS structure are allowed when ITC_NVPARM_VERSION_NUMBER is used in the id field: S VN_CLASS_KBD Returns a five-byte string, including null terminator, that contains an ASCII value which represents the keyboard microprocessor version in the system. The format of the string is x.xx with a terminating null character. S VN_CLASS_ASIC Returns a five-byte string, including null terminator, that contains an ASCII value which represents the version of the FPGA firmware in the system. The format of the string is x.xx with a terminating null character. S VN_CLASS_BOOTSTRAP Returns a five-byte string, including null terminator, that contains an ASCII value which represents the version of the Bootstrap Loader firmware in the system. The format of the string is x.xx with a terminating null character. 266 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming S ITC_NVPARM_INTERMEC_SOFTWARE_CONTENT This IOCTL reads the manufacturing flag bits from the non-volatile data store that dictates certain software parameters. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer that indicates if Intermec Content is enabled in the XIP regions. TRUE indicates that it is enabled. FALSE indicates that it is not enabled. S ITC_NVPARM_ANTENNA_DIVERSITY This IOCTL reads the state of the antenna diversity flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer that indicates if there is a diversity antenna installed. TRUE indicates that it is installed. FALSE indicates that it is not installed. S ITC_NVPARM_WAN_RI This IOCTL reads the state of the WAN ring indicator flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer that indicates the polarity of the WAN RI signal. TRUE indicates active high. FALSE indicates active low. S ITC_NVPARM_RTC_RESTORE This IOCTL reads the state of the real-time clock restore flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the RTC will be restored upon a cold boot. FALSE indicates that the RTC will not be restored. S ITC_NVPARM_INTERMEC_DATACOLLECTION_SW This IOCTL reads the state of the data collection software enabled flag. A BOOLEAN DWORD is returned in the buffer pointer to by lpOutBuffer that indicates the data collection software is to be installed at boot time. FALSE indicates the data collection software should not be installed. S ITC_NVPARM_INTERMEC_DATACOLLECTION_HW This IOCTL reads the data collection hardware flags. A BYTE is returned in the buffer pointer to by lpOutBuffer that indicates the type of data collection hardware installed. The maximum possible value returned is ITC_DEVID_SCANHW_MAX. S ITC_DEVID_SCANHW_NONE No scanner hardware is installed. S ITC_DEVID_OEM2D_IMAGER OEM 2D imager is installed. S ITC_DEVID_INTERMEC2D_IMAGER Intermec 2D imager is installed. S ITC_DEVID_SE900_LASER SE900 laser is installed. S ITC_DEVID_SE900HS_LASER SE900HS laser is installed. The high bit indicates whether the S6 scanning engine is installed. The bit mask for this is ITC_DEVID_S6ENGINE_MASK. A non-zero value indicates that the S6 scanning engine is installed. 700 Series Color Mobile Computer User’s Manual 267 Chapter 7 — Programming S ITC_NVPARM_WAN_INSTALLED This IOCTL reads the state of the WAN radio installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the WAN radio is installed. FALSE indicates that no WAN radio is installed. S ITC_NVPARM_WAN_FREQUENCY This IOCTL reads the state of the WAN radio frequency flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the WAN radio frequency is United States. FALSE indicates that the WAN radio frequency is European. S ITC_NVPARM_WAN_RADIOTYPE This IOCTL reads the WAN radio ID installed by manufacturing. A BYTE is returned in the buffer pointer to by lpOutBuffer which indicates the type of WAN radio hardware installed. The maximum possible value returned is ITC_DEVID_WANRADIO_MAX. The current definitions are: S ITC_DEVID_WANRADIO_NONE No WAN radio installed. S ITC_DEVID_WANRADIO_SIERRA_SB555 CDMA Sierra Wireless radio. S ITC_DEVID_WANRADIO_XIRCOM_GEM3503 GSM/GPRS Intel (Xircom) radio. S ITC_DEVID_WANRADIO_SIEMENS_MC45 GSM/GPRS Siemens radio. S ITC_NVPARM_80211_INSTALLED This IOCTL reads the state of the 802.11b radio installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the 802.11b radio is installed. FALSE indicates that no 802.11b radio is installed. S ITC_NVPARM_80211_RADIOTYPE This IOCTL reads the 802.11b radio ID installed by manufacturing. A BYTE is returned in the buffer pointer to by lpOutBuffer that indicates the type of 802.11b radio hardware installed. The maximum possible value returned is ITC_DEVID_80211RADIO_MAX. The current definitions are: S ITC_DEVID_80211RADIO_NONE No 802.11b radio installed. S ITC_DEVID_80211RADIO_INTEL_2011B Intel 2011B radio installed. S ITC_NVPARM_BLUETOOTH_INSTALLED This IOCTL reads the state of the Bluetooth radio installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the Bluetooth radio is installed. FALSE indicates that no Bluetooth radio is installed. 268 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming S ITC_NVPARM_SERIAL2_INSTALLED This IOCTL reads the state of the serial 2 (COM2) device installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the serial 2 device is installed. FALSE indicates that no serial 2 device is installed. S ITC_NVPARM_VIBRATE_INSTALLED This IOCTL reads the state of the vibrate device installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the vibrate device is installed. FALSE indicates that no vibrate device is installed. S ITC_NVPARM_LAN9000_INSTALLED This IOCTL reads the state of the Ethernet device installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the Ethernet device is installed. FALSE indicates that no Ethernet device is installed. S ITC_NVPARM_SIM_PROTECT_HW_INSTALLED This IOCTL reads the state of the SIM card protection hardware installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the SIM card protection hardware is installed. FALSE indicates that no SIM card protection hardware is installed. S ITC_NVPARM_SIM_PROTECT_SW_INSTALLED This IOCTL reads the state of the SIM card protection software installed flag. A BOOLEAN DWORD is returned in the buffer pointed to by lpOutBuffer. TRUE indicates that the SIM card protection software is installed. FALSE indicates that no SIM card protection software is installed. 700 Series Color Mobile Computer User’s Manual 269 Chapter 7 — Programming IOCTL_HAL_ITC_WRITE_SYSPARM Describes and enables the registry save location. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_ITC_WRITE_SYSPARM,LPVOID lpInBuf,DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned ); Parameters lpInBuf A single byte that may be one of the id values. See “ID Field Values” below. nInBufSize Must be set to the size of the lpInBuf in bytes. lpOutBuf Must point to a buffer large enough to hold the data to be written to the non-volatile data store. nOutBufSize The size of lpOutBuf in bytes. lpBytesReturned The number of bytes returned by the function. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the error value. Either ERROR_INVALID_PARAMETER or ERROR_INSUFFICIENT_BUFFER may be returned when this function is used to get the error. ID Field Values The id field of lpInBuf may be one of the following values: S ITC_REGISTRY_LOCATION This IOCTL sets the default location for where to write the registry when RegFlushKey() is called by an application. The registry may be saved to Flash, a CompactFlash storage card or a SecureDigital storage card. lpOutBuf must point to a buffer that contains a byte value of “1” for the CompactFlash card or “2” for the SecureDigital card to specify the location. S ITC_REGISTRY_SAVE_ENABLE This function enables or disables the save registry to non-volatile media feature of the RegFlushKey() function. lpOutBuf must be set to zero (FALSE) if the feature is to be disabled or one (TRUE) if the feature is to be enabled. S ITC_ DOCK_SWITCH This IOCTL sets a position of the dock switch. The dock switch may be set to either “modem” or “serial” positions. lpOutBuf must point to a buffer that contains a byte value of either DOCK_MODEM or DOCK_SERIAL as defined in OEMIOCTL.H; the value specifies the position the switch is to be set. 270 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming S ITC_ WAKEUP_MASK This IOCTL sets a bit mask that represents the mask for the five programmable wakeup keys. The I/O key is not a programmable wakeup key. By default it is always the system resume key and all other keys are set to disable key wakeup. A zero in a bit position masks the wakeup for that key. A one in a bit position enables wakeup for that key. lpOutBuf must point to a buffer that contains a byte value of a wakeup mask consisting of the OR’ ed constants as defined in OEMIOCTL.H. Only the following keys are programmable as wakeup events. #define #define #define #define #define SCANNER_TRIGGER 1 SCANNER_LEFT SCANNER_RIGHT 4 GOLD_A1 GOLD_A2 0x10 S ITC_AMBIENT_KEYBOARD This IOCTL sets the threshold for the keyboard ambient sensor. This can be a value from 0 (always off ) to 255 (always on). lpOutBuf must point to a buffer that contains a byte value of the desired setting. S ITC_AMBIENT_FRONTLIGHT This IOCTL sets the threshold for the frontlight ambient sensor. This can be a value from 0 (always off ) to 255. lpOutBuf must point to a buffer that contains a byte value of the desired setting. 700 Series Color Mobile Computer User’s Manual 271 Chapter 7 — Programming IOCTL_HAL_GET_DEVICEID This IOCTL returns the device ID. There are two types of device IDs supported, which are differentiated based on the size of the output buffer. The UUID is returned if the buffer size is set to sizeof(UNIQUE_DEVICEID), otherwise the oldstyle device ID is returned. Usage #include “pkfuncs.h” #include “deviceid.h” Syntax BOOL KernelIoControl( IOCTL_HAL_GET_DEVICEID,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. STRICT_ID settings are not supported. lpInBufSize Should be set to zero. lpOutBuf Must point to a UNIQUE_DEVICEID structure as defined by DEVICEID.H if the UUID is to be returned. nOutBufSize The size of the UNIQUE_DEVICEID in bytes if the UUID is to be returned. A DEVICE_ID as defined by PKFUNCS.H is returned if the size in bytes is greater than or equal to sizeof(DEVICE_ID). lpBytesReturned The number of bytes returned by the function. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 272 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming IOCTL_HAL_GET_OAL_VERINFO Returns the HAL version information of the Pocket PC image. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_GET_OAL_VERINFO,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Must point to a VERSIONINFO structure as defined by OEMIOCTL.H. The fields should have these values: sizeof (tagOemVerInfo); S cboemverinfo S verinfover S sig; “ITC\0” S id; ‘ N’ S tgtcustomer “” tgtplat SeaRay S tgtplatversion Current build version number S tgtcputype[8]; “Intel\0” S tgtcpu “PXA250\0”; S tgtcoreversion “” S date Build time S time Build date nOutBufSize The size of VERSIONINFO in bytes. lpBytesReturned Returns sizeof(PVERSIONINFO). Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 700 Series Color Mobile Computer User’s Manual 273 Chapter 7 — Programming IOCTL_HAL_GET_BOOTLOADER_VERINFO Returns the HAL version information of the Pocket PC image. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_GET_OAL_VERINFO,LPVOID lpInBuf, DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Must point to a VERSIONINFO structure as defined by OEMIOCTL.H. The fields should have these values: Sizeof (tagOemVerInfo); S cboemverinfo S verinfover S sig; “ITC\0” S id; ‘ B’ S tgtcustomer “” tgtplat SeaRay S tgtplatversion Current build version number of the bootstrap loader S tgtcputype[8]; “Intel\0”; S tgtcpu “PXA250\0” S tgtcoreversion “” S date Build time S time Build date nOutBufSize The size of VERSIONINFO in bytes. lpBytesReturned The number of bytes returned to lpOutBuf. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 274 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming IOCTL_HAL_WARMBOOT Causes the system to perform a warm-boot. The object store is retained. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_WARMBOOT,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Should be NULL. nOutBufSize Should be zero. Return Values None. IOCTL_HAL_COLDBOOT Causes the system to perform a cold-boot. The object store is cleared. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_COLDBOOT,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Should be NULL. nOutBufSize Should be zero. Return Values None. 700 Series Color Mobile Computer User’s Manual 275 Chapter 7 — Programming IOCTL_HAL_GET_RESET_INFO This IOCTL code allows software to check the type of the most recent reset. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_GET_RESET_INFO,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Must point to a HAL_RESET_INFO structure: typedef struct { DWORD ResetReason; DWORD ObjectStoreState; } HAL_RESET_INFO, * PHAL_RESET_INFO; // most recent reset type // state of object store // Reset reason types #define HAL_RESET_TYPE_UNKNOWN #define HAL_RESET_REASON_HARDWARE #define HAL_RESET_REASON_SOFTWARE #define HAL_RESET_REASON_WATCHDOG #define HAL_RESET_BATT_FAULT #define HAL_RESET_VDD_FAULT 16 // Object store state flags #define HAL_OBJECT_STORE_STATE_UNKNOWN #define HAL_OBJECT_STORE_STATE_CLEAR nOutBufSize // cold // suspend // power fail // warm boot The size of HAL_RESET_INFO in bytes. lpBytesReturned The number of bytes returned by the function. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 276 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming IOCTL_HAL_GET_BOOT_DEVICE This IOCTL code allows software to check which device CE booted from. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_GET_BOOT_DEVICE,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Must point to a buffer large enough to hold a DWORD (4 bytes) that contains the boot device. The following boot devices are supported: #define #define #define #define #define #define #define HAL_BOOT_DEVICE_UNKNOWN HAL_BOOT_DEVICE_ROM_XIP HAL_BOOT_DEVICE_ROM HAL_BOOT_DEVICE_PCMCIA_ATA HAL_BOOT_DEVICE_PCMCIA_LINEAR HAL_BOOT_DEVICE_IDE_ATA HAL_BOOT_DEVICE_IDE_ATAPI nOutBufSize The size of lpOutBuf in bytes (4). lpBytesReturned The number of bytes returned by the function. Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 700 Series Color Mobile Computer User’s Manual 277 Chapter 7 — Programming IOCTL_HAL_REBOOT Causes the system to perform a warm-boot. The object store is retained. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_HAL_REBOOT,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Should be NULL. nOutBufSize Should be zero. Return Values None. 278 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming IOCTL_PROCESSOR_INFORMATION Returns processor information. Usage #include “pkfuncs.h” Syntax BOOL KernelIoControl( IOCTL_PROCESSOR_INFORMATION,LPVOID lpInBuf,DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters Parameters: lpInBuf Should be set to NULL. lpInBufSize Should be set to zero. lpOutBuf Should be a pointer to the PROCESSOR_INFO structure. The PROCESSOR_INFO structure stores information that describes the CPU more descriptively. typedef WORD WCHAR WORD WCHAR WORD WCAHR WCHAR DWORD DWORD __PROCESSOR_INFO { wVersion; szProcessorCore[40]; wCoreRevision; szProcessorName[40]; wProcessorRevision; szCatalogNumber[100]; szVendor[100]; dwInstructionSet; dwClockSpeed; nOutBufSize // // // // // // // // // Set to value 1 “ARM\0” “PXA250\0” “Intel Corporation\0” 400 Should be set to sizeof(PROCESSOR_INFO) in bytes. lpBytesReturned Returns sizeof(PROCESSOR_INFO); Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. 700 Series Color Mobile Computer User’s Manual 279 Chapter 7 — Programming IOCTL_GET_CPU_ID Returns Xscale processor ID. Usage #include “oemioctl.h” Syntax BOOL KernelIoControl( IOCTL_GET_CPU_ID,LPVOID lpInBuf, DWORD nInBufSize,LPVOID lpOutBuf,DWORD nOutBufSize,LPDWORD lpBytesReturned ); Parameters lpInBuf Should point to a CPUIdInfo structure defined in OEMIOCTL.H. lpInBufSize Should be sizeof(CPUIdInfo). lpOutBuf Should be NULL. nOutBufSize Should be set to 0. lpBytesReturned Returns sizeof(PROCESSOR_INFO); Return Values Returns TRUE if function succeeds. Returns FALSE if the function fails. GetLastError() may be used to get the extended error value. Reboot Functions There are several methods, via Kernel I/O Control functions, that an application program can use to force the 700 Series Computer to reboot. IOCTL_HAL_REBOOT IOCTL_HAL_REBOOT performs a warm-boot. See page 278. IOCTL_HAL_COLDBOOT Invoking the KernelIOControl function with IOCTL_HAL_COLDBOOT forces a cold reboot. This resets the 700 Series Computer and reloads Windows CE as if a power-up had been performed. The contents of the Windows CE RAM-based object store are discarded. See page 275. IOCTL_HAL_WARMBOOT This function is supported on the 700 Series Computers. It performs a warm boot of the system, preserving the object store. See page 275. 280 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming Remapping the Keypad Note; Use caution when remapping the keypad. Improper remapping may render the keypad unusable. Data within the 700 Series Computer could also be lost, should any problems occur. Applications have the ability to remap keys on the 700 Color Keypad. This will allow applications to enable keys that would otherwise not be available, such as the [F1] function key. Also, to disable keys that should not be available, such as the alpha key because no alpha entry is required. Care should be exercised when attempting to remap the keypad because improper remapping may cause the keypad to become unusable. This can be corrected by cold booting the device which will cause the default keymap to be loaded again. Note that remapping the keys in this way affects the key mapping for the entire system, not just for the application that does the remapping. There are three “planes” supported for the 740 Keypad. Keys that are to be used in more than one shift plane must be described in each plane. Unshifted Plane The unshifted plane contains values from the keypad when not pressed with other keys, such as the following: S [1] S [5] S [9] Gold Plane The gold plane contains values from the keypad when a key is simultaneously pressed with the [Gold] key, such as the following: S [Gold] + [1] Send S [Gold] + [5] A3 S [Gold] + [9] PageDown Alpha Plane The alpha plane contains values from the keypad when the keypad has been placed in alpha mode by pressing the blue alpha key, such as the following: S [Alpha] + [1] Caps S [Alpha] + [5] JKL S [Alpha] + [9] WXYZ 700 Series Color Mobile Computer User’s Manual 281 Chapter 7 — Programming Key Values Key values for each plane are stored in the registry. All units ship with a default key mapping already loaded in the registry. Applications that wish to change the default mapping need to read the appropriate key from the registry into an array of Words, modify the values required and then write the updated values back into the registry. The registry access can be done with standard Microsoft API calls, such as RegOpenKeyEx(), RegQueryValueEx(), and RegSetValueEx(). S The unshifted plane mapping can be found in the registry at: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD\Vkey S The gold plane mapping can be found in the registry at: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD\VkeyGold S The alpha plane mapping can be found in the registry at: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD\VkeyAlpha How Key Values Are Stored in Registry To know which fields to update in the registry, you must know what Scan Codes are assigned to each physical key (see the table below). The Scan Code is used at the lowest level of the system to let the keypad driver know which physical key has been pressed. The keypad driver takes that scan code and looks it up in a table (a copy of the one stored in the registry) to determine which values to pass on to the operating system. Each registry key is just an array that describes to the keypad driver what value needs to be passed for each physical key. The key values are indexed by the scan code, this is a zero-based index. For example in the unshifted plane, the [4] key has a scan code of 0x06. This means that the seventh word under the “Vkey” registry key will have the value for the [4] key. Taking a sample of the “Vkey” registry key shows the following values: 00,00,0B,05,02,03,C1,07,04,03,BE,00,34,00,00,00,. . . The value is 34,00. The values are in reverse byte order because that is the way the processor handles data. When writing an application, nothing needs to be done to swap the bytes, as this will happen automatically when the data is read into a byte value. This is something you just need to be aware of this when looking at the registry. Knowing this, we can see that the value that the keypad driver will pass to the system is a hex 34. Looking that up on an UNICODE character chart, we see that it maps to a “4”. If you wanted the key, labeled “4”, to output the letter “A” instead, you would need to change the seventh word to “41” (the hexadecimal representation of “A” from the UNICODE chart), then put the key back into the registry. Note: Do not remap scan codes 0x01, 0x41, 0x42, 0x43, 0x44. Remapping these scan codes could render your 700 Series Computer unusable until a cold-boot is performed. If you wish to disable a certain key, remap its scan code to 0x00. 282 700 Series Color Mobile Computer User’s Manual Chapter 7 — Programming Change Notification Just changing the registry keys will not immediately change the key mappings. To notify the keypad driver that the registry has been updated, signal the “ITC_KEYBOARD_CHANGE” named event using the CreateEvent() API. Advanced Keypad Remapping It is also possible to map multiple key presses to one button and to map named system events to a button. The multiple key press option could be useful to cut down on the number of keys needed to press in a given situation or to remap which key behaves like the action key. Mapping events to a button could be useful to change which buttons will fire the scanner, control volume, and allow for suspending and resuming the device. If you need help performing one of these advanced topics please contact Intermec Technical Support. Scan Codes At the lowest driver level, the 740 Keypad identifies keys as scan codes. These scan codes are sent via the keypad microcontroller, and cannot be changed without modifying the keypad firmware. Key/Meaning Reserved I/O Button Scanner Trigger Scanner Left Scanner Right None Left Arrow None Backspace Gold Key None ESC Down Arrow Alpha Key None Up Arrow Right Arrow None 700 Series Color Mobile Computer User’s Manual Scancode 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 283 Chapter 7 — Programming Key/Meaning Action Key ENTER None Charge Detect Scancode 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F-0x40 0x41 LCD Frontlight Ambient Light Threshold Crossed 0x42 0x42 0x42 Headset Detected 0x43 Keypad Backlight Ambient Light Threshold Crossed 0x44 0x44 0x44 Sample View of Registry Keys The following is a sample view of the current default key mapping. See the registry on your device for the latest key mappings. [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD] ”ResumeMask”=dword:7 ”Vkey”=hex: 00,00,0B,05,02,03,C1,07,04,03,BE,00,34,00,00,00,\ 25,00,00,00,08,00,03,02,00,00,1B,00,28,00,31,00,\ 37,00,01,02,00,00,26,00,27,00,32,00,38,00,30,00,\ 35,00,00,00,01,03,33,00,39,00,0D,00,36,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,07,05,01,05,03,05,02,05 ”VkeyGold”=hex: 00,00,0B,05,02,03,C1,07,04,03,BE,00,34,00,00,00,\ 09,01,00,00,BF,00,03,02,00,00,BD,00,75,00,72,00,\ 21,00,01,02,00,00,76,00,09,00,73,00,38,01,5B,00,\ 35,00,00,00,BB,01,09,05,22,00,32,01,36,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,07,05,01,05,03,05,02,05 ”VkeyAlpha”=hex: 00,00,0B,05,02,03,C1,07,04,03,BE,00,47,00,00,00,\ 25,00,00,00,08,00,03,02,00,00,1B,00,28,00,02,02,\ 50,00,01,02,00,00,26,00,27,00,41,00,54,00,20,00,\ 4A,00,00,00,01,03,44,00,57,00,0D,00,4D,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,07,05,01,05,03,05,02,05 284 700 Series Color Mobile Computer User’s Manual
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : Yes Create Date : 2002:12:14 00:15:06Z Modify Date : 2003:02:04 11:35:24-08:00 Page Count : 158 Creation Date : 2002:12:14 00:15:06Z Mod Date : 2003:02:04 11:35:24-08:00 Producer : Acrobat Distiller 5.0.5 (Windows) Author : thinga Metadata Date : 2003:02:04 11:35:24-08:00 Creator : thinga Title : back_let85x11 Has XFA : No Page Mode : UseOutlinesEXIF Metadata provided by EXIF.tools