001/*
002 * ===========================================================================================
003 * = COPYRIGHT
004 *          PAX Computer Technology (Shenzhen) Co., Ltd. PROPRIETARY INFORMATION
005 *   This software is supplied under the terms of a license agreement or nondisclosure
006 *   agreement with PAX Computer Technology (Shenzhen) Co., Ltd. and may not be copied or
007 *   disclosed except in accordance with the terms in that agreement.
008 *     Copyright (C) 2017-2023 PAX Computer Technology (Shenzhen) Co., Ltd. All rights reserved.
009 * Description: // Detail description about the function of this module,
010 *             // interfaces with the other modules, and dependencies.
011 * Revision History:
012 * Date                         Author                        Action
013 * 2017/04/01                   PAX                     Create/Add/Modify/Delete
014 * ===========================================================================================
015 */
016
017package com.pax.dal;
018
019import com.pax.dal.entity.ScanResult;
020import com.pax.dal.entity.ScanResultRaw;
021import com.pax.dal.exceptions.ScannerHwDevException;
022
023import java.util.Map;
024
025public interface IScannerHw {
026
027    /**
028     * <div class="zh"> 打开扫描</div> <div class="en"> Open scanner </div>
029     * 
030     * @throws ScannerHwDevException
031     */
032    void open() throws ScannerHwDevException;
033
034    /**
035     * <div class="zh"> 开始扫码</div> <div class="en"> Start scan code </div>
036     * 
037     * @param timeoutMs
038     *            <div class="zh">超时时间(MS),范围:0 ~ 120*1000(X5超时时间为500ms~9900ms)</div> <div class="en"> Time-out time
039     *            (MS), range: 0-120*1000 (X5 time-out time is 500 ms-9900 ms) </div>
040     * @return <div class="zh">{@link ScanResult} </div> <div class="en">{@link ScanResult}</div>
041     * @throws ScannerHwDevException
042     */
043    ScanResult read(int timeoutMs) throws ScannerHwDevException;
044
045    /**
046     * <div class="zh"> 停止扫描 </div> <div class="en"> Stop scanning </div>
047     * 
048     * @throws ScannerHwDevException
049     */
050    void stop() throws ScannerHwDevException;
051
052    /**
053     * <div class="zh"> 关闭扫描 </div> <div class="en"> Close scanner</div>
054     * 
055     * @throws ScannerHwDevException
056     */
057    void close() throws ScannerHwDevException;
058    
059    /**
060     * <div class="zh">获取支持的码制列表。</div>
061     * <div class="en">Gets a list of supported coding systems.</div>
062     *
063     * @return <div class="zh">码制列表。
064     *                           <ul>
065     *                             <li>Map.key:码制类型。</li>
066     *                             <li>Map.value: 0:关闭; 1:打开; 2:自动检测反显。</li>
067     *                           </ul>
068     *                         </div>
069     *         <div class="en">Code list.
070     *                           <ul>
071     *                             <li>Map.key:Code system type.</li>
072     *                             <li>Map.value: 0:Close; 1:Open; 2:Inverse auto detect.</li>
073     *                           </ul>
074     *         </div>
075     * @throws ScannerHwDevException
076     * @since V3.20.00
077     */
078    Map<String, Integer> getBarcodeMap() throws ScannerHwDevException;
079
080    /**
081     * <div class="zh">设置码制列表。</div>
082     * <div class="en">Set the code system list.</div>
083     *
084     * @param map <div class="zh">码制列表。
085     *                              <ul>
086     *                                <li>Map.key:码制类型。
087     *                                  <ul>
088     *                                    <li>AZTEC</li>
089     *                                    <li>C11</li>
090     *                                    <li>C128</li>
091     *                                    <li>C39</li>
092     *                                    <li>C93</li>
093     *                                    <li>CHINAPOST</li>
094     *                                    <li>CodaBar</li>
095     *                                    <li>CODEBLOCK F</li>
096     *                                    <li>DATA MATRIX</li>
097     *                                    <li>EAN-8</li>
098     *                                    <li>EAN-13</li>
099     *                                    <li>GS1 DATABAR</li>
100     *                                    <li>HAXIN </li>
101     *                                    <li>I25:0 UPC-E</li>
102     *                                    <li>MATRIX 25 </li>
103     *                                    <li>MAXICODE</li>
104     *                                    <li>MICROPDF</li>
105     *                                    <li>MSI</li>
106     *                                    <li>NEC25</li>
107     *                                    <li>PDF417</li>
108     *                                    <li>QR CODE</li>
109     *                                    <li>STRAIGHT 25</li>
110     *                                    <li>TELEPEN</li>
111     *                                    <li>TRIOPTIC</li>
112     *                                    <li>UPC-A</li>
113     *                                    <li>US POSTAL</li>
114     *                                  </ul>
115     *                                </li>
116     *                                <li>Map.value: 1:打开; 0:关闭。</li>
117     *                              </ul>
118     *                              <ul>
119     *                                <li>Map.Key:码制类型。
120     *                                  <ul>
121     *                                    <li>DATA MATRIX Inverse</li>
122     *                                    <li>QR CODE Inverse</li>
123     *                                    <li>AZ Inverse</li>
124     *                                  </ul>
125     *                                </li>
126     *                                <li>Map.value: 0:常规;1:反显;2:自动检测反显。</li>
127     *                              </ul>
128     *
129     *            </div>
130     *            <div class="en">Code system list.
131     *                              <ul>
132     *                                <li>Map.key:Code system type.
133     *                                  <ul>
134     *                                    <li>AZTEC</li>
135     *                                    <li>C11</li>
136     *                                    <li>C128</li>
137     *                                    <li>C39</li>
138     *                                    <li>C93</li>
139     *                                    <li>CHINAPOST</li>
140     *                                    <li>CodaBar</li>
141     *                                    <li>CODEBLOCK F</li>
142     *                                    <li>DATA MATRIX</li>
143     *                                    <li>EAN-8</li>
144     *                                    <li>EAN-13</li>
145     *                                    <li>GS1 DATABAR</li>
146     *                                    <li>HAXIN </li>
147     *                                    <li>I25:0 UPC-E</li>
148     *                                    <li>MATRIX 25 </li>
149     *                                    <li>MAXICODE</li>
150     *                                    <li>MICROPDF</li>
151     *                                    <li>MSI</li>
152     *                                    <li>NEC25</li>
153     *                                    <li>PDF417</li>
154     *                                    <li>QR CODE</li>
155     *                                    <li>STRAIGHT 25</li>
156     *                                    <li>TELEPEN</li>
157     *                                    <li>TRIOPTIC</li>
158     *                                    <li>UPC-A</li>
159     *                                    <li>US POSTAL</li>
160     *                                  </ul>
161     *                                </li>
162     *                                <li>Map.value: 1:Open; 0:Close.</li>
163     *                              </ul>
164     *                              <ul>
165     *                                <li>Map.Key:Code system type.
166     *                                  <ul>
167     *                                    <li>DATA MATRIX Inverse</li>
168     *                                    <li>QR CODE Inverse</li>
169     *                                    <li>AZ Inverse</li>
170     *                                  </ul>
171     *                                </li>
172     *                                <li>Map.value: 0: Regular only; 1: Inverse only; 2: Inverse auto detect.</li>
173     *                             </ul>
174     *            </div>
175     * @throws ScannerHwDevException
176     * @since V3.20.00
177     */
178    void setBarcodeMap(Map<String, Integer> map) throws ScannerHwDevException;
179
180    /**
181     * <div class="zh">获取硬扫码的配置。</div> <div class="en">Get the configuration of IScannerHw.</div>
182     *
183     * @return <div class="zh">
184     *     <table border="1">
185     *         <tr>
186     *             <th>设置选项</th>
187     *             <th>Key</th>
188     *             <th>Value</th>
189     *         </tr>
190     *         <tr>
191     *             <td>震动</td>
192     *             <td>vibrate</td>
193     *             <td>"true":打开; "false":关闭</td>
194     *         </tr>
195     *         <tr>
196     *             <td>声音</td>
197     *             <td>sound</td>
198     *             <td>"true":打开; "false":关闭</td>
199     *         </tr>
200     *         <tr>
201     *             <td>扫描模式</td>
202     *             <td>scan_mode</td>
203     *             <td>"0":普通, "1":连续扫描(自动), "2":连续扫描(手动)</td>
204     *         </tr>
205     *         <tr>
206     *             <td>连续扫描时间间隔</td>
207     *             <td>scan_time_interval</td>
208     *             <td>"0":0.5s, "1":1s, "2":自定义</td>
209     *         </tr>
210     *         <tr>
211     *             <td>自定义时间间隔</td>
212     *             <td>time_interval_custom</td>
213     *             <td>范围: 0.0~30.0s</td>
214     *         </tr>
215     *         <tr>
216     *             <td>条码分隔符</td>
217     *             <td>barcode_separator</td>
218     *             <td>"0":不换行, "1":换行符, "2":回车键换行</td>
219     *         </tr>
220     *         <tr>
221     *             <td>左侧物理扫描键</td>
222     *             <td>left_key</td>
223     *             <td>"true":开启, "false":禁用</td>
224     *         </tr>
225     *             <td>显示前缀字符</td>
226     *             <td>prefix_separator_switch</td>
227     *             <td>"true":显示, "false":不显示</td>
228     *         </tr>
229     *         <tr>
230     *             <td>前缀字符</td>
231     *             <td>prefix_separator</td>
232     *             <td>String</td>
233     *         </tr>
234     *         <tr>
235     *             <td>显示后缀字符</td>
236     *             <td>suffix_separator_switch</td>
237     *             <td>"true":显示, "false":不显示</td>
238     *         </tr>
239     *         <tr>
240     *             <td>后缀字符</td>
241     *             <td>suffix_separator</td>
242     *             <td>String</td>
243     *         </tr>
244     *         <tr>
245     *             <td>条码接收模式</td>
246     *             <td>receiver_mode</td>
247     *             <td>0:快速模式 1:慢速模式 2:广播模式 3:剪切版模式 4:焦点模式 5:按键模式</td>
248     *         </tr>
249     *         <tr>
250     *             <td>解码照明</td>
251     *             <td>decode_light</td>
252     *             <td>"true":开启, "false":禁用</td>
253     *         </tr>
254     *     </table>
255     *     </div>
256     * <div class="en">
257     *     <table border="1">
258     *          <tr>
259     *              <th>Setup Option</th>
260     *              <th>Key</th>
261     *              <th>Value</th>
262     *          </tr>
263     *          <tr>
264     *              <td>Vibrate</td>
265     *              <td>vibrate</td>
266     *              <td>"true":turn on; "false":turn off</td>
267     *          </tr>
268     *          <tr>
269     *              <td>Sound</td>
270     *              <td>sound</td>
271     *              <td>"true":turn on; "false":turn off</td>
272     *          </tr>
273     *          <tr>
274     *              <td>Scan mode</td>
275     *              <td>scan_mode</td>
276     *              <td>"0":Normal, "1":Continuous scan (automatic), "2":Continuous scan (manual)</td>
277     *          </tr>
278     *          <tr>
279     *              <td>Continuous scan interval</td>
280     *              <td>scan_time_interval</td>
281     *              <td>"0":0.5s, "1":1s, "2":Custom</td>
282     *          </tr>
283     *          <tr>
284     *              <td>Custom interval</td>
285     *              <td>time_interval_custom</td>
286     *              <td>Range: 0.0~30.0s</td>
287     *          </tr>
288     *          <tr>
289     *              <td>Barcode separator</td>
290     *              <td>barcode_separator</td>
291     *              <td>"0": no line break, "1": line break, "2": enter key to line break</td>
292     *          </tr>
293     *          <tr>
294     *              <td>Left physical scan key</td>
295     *              <td>left_key</td>
296     *              <td>"true": enable, "false": disable</td>
297     *          </tr>
298     *          <tr>
299     *              <td>Prefix character display</td>
300     *              <td>prefix_separator_switch</td>
301     *              <td>"true": display, "false": no display</td>
302     *          </tr>
303     *          <tr>
304     *              <td>Prefix character</td>
305     *              <td>prefix_separator</td>
306     *              <td>String</td>
307     *          </tr>
308     *          <tr>
309     *              <td>Suffix character display</td>
310     *              <td>suffix_separator_switch</td>
311     *              <td>"true": display, "false": no display</td>
312     *          </tr>
313     *          <tr>
314     *              <td>Suffix character</td>
315     *              <td>suffix_separator</td>
316     *              <td>String</td>
317     *          </tr>
318     *         <tr>
319     *             <td>Barcode receiving mode</td>
320     *             <td>receiver_mode</td>
321     *             <td>0: Fast Mode 1: Slow Mode 2: Broadcast Mode 3: Clipboard Mode 4: Focus Mode 5: Key Mode</td>
322     *         </tr>
323     *         <tr>
324     *             <td>Decode light</td>
325     *             <td>decode_light</td>
326     *             <td>"true": Enable, "false": Disable</td>
327     *         </tr>
328     *     </table>
329     * </div>
330     * @throws ScannerHwDevException
331     * @since V3.22.00
332     */
333    Map<String, String> getConfig() throws ScannerHwDevException;
334
335    /**
336     * <div class="zh">设置硬扫码的配置。</div> <div class="en">Set the configuration of IScannerHw.</div>
337     *
338     * @param map <div class="zh">
339     *     <table border="1">
340     *         <tr>
341     *             <th>设置选项</th>
342     *             <th>Key</th>
343     *             <th>Value</th>
344     *         </tr>
345     *         <tr>
346     *             <td>震动</td>
347     *             <td>vibrate</td>
348     *             <td>"true":打开; "false":关闭</td>
349     *         </tr>
350     *         <tr>
351     *             <td>声音</td>
352     *             <td>sound</td>
353     *             <td>"true":打开; "false":关闭</td>
354     *         </tr>
355     *         <tr>
356     *             <td>扫描模式</td>
357     *             <td>scan_mode</td>
358     *             <td>"0":普通, "1":连续扫描(自动), "2":连续扫描(手动)</td>
359     *         </tr>
360     *         <tr>
361     *             <td>连续扫描时间间隔</td>
362     *             <td>scan_time_interval</td>
363     *             <td>"0":0.5s, "1":1s, "2":自定义</td>
364     *         </tr>
365     *         <tr>
366     *             <td>自定义时间间隔</td>
367     *             <td>time_interval_custom</td>
368     *             <td>范围: 0.0~30.0s</td>
369     *         </tr>
370     *         <tr>
371     *             <td>条码分隔符</td>
372     *             <td>barcode_separator</td>
373     *             <td>"0":不换行, "1":换行符, "2":回车键换行</td>
374     *         </tr>
375     *         <tr>
376     *             <td>左侧物理扫描键</td>
377     *             <td>left_key</td>
378     *             <td>"true":开启, "false":禁用</td>
379     *         </tr>
380     *         <tr>
381     *             <td>显示前缀字符</td>
382     *             <td>prefix_separator_switch</td>
383     *             <td>"true":显示, "false":不显示</td>
384     *         </tr>
385     *         <tr>
386     *             <td>前缀字符</td>
387     *             <td>prefix_separator</td>
388     *             <td>String</td>
389     *         </tr>
390     *         <tr>
391     *             <td>显示后缀字符</td>
392     *             <td>suffix_separator_switch</td>
393     *             <td>"true":显示, "false":不显示</td>
394     *         </tr>
395     *         <tr>
396     *             <td>后缀字符</td>
397     *             <td>suffix_separator</td>
398     *             <td>String</td>
399     *         </tr>
400     *         <tr>
401     *             <td>条码接收模式</td>
402     *             <td>receiver_mode</td>
403     *             <td>0:快速模式 1:慢速模式 2:广播模式 3:剪切版模式 4:焦点模式 5:按键模式</td>
404     *         </tr>
405     *         <tr>
406     *             <td>解码照明</td>
407     *             <td>decode_light</td>
408     *             <td>"true":开启, "false":禁用</td>
409     *         </tr>
410     *     </table>
411     *     </div>
412     * <div class="en">
413     *     <table border="1">
414     *          <tr>
415     *              <th>Setup Option</th>
416     *              <th>Key</th>
417     *              <th>Value</th>
418     *          </tr>
419     *          <tr>
420     *              <td>Vibrate</td>
421     *              <td>vibrate</td>
422     *              <td>"true":turn on; "false":turn off</td>
423     *          </tr>
424     *          <tr>
425     *              <td>Sound</td>
426     *              <td>sound</td>
427     *              <td>"true":turn on; "false":turn off</td>
428     *          </tr>
429     *          <tr>
430     *              <td>Scan mode</td>
431     *              <td>scan_mode</td>
432     *              <td>"0":Normal, "1":Continuous scan (automatic), "2":Continuous scan (manual)</td>
433     *          </tr>
434     *          <tr>
435     *              <td>Continuous scan interval</td>
436     *              <td>scan_time_interval</td>
437     *              <td>"0":0.5s, "1":1s, "2":Custom</td>
438     *          </tr>
439     *          <tr>
440     *              <td>Custom interval</td>
441     *              <td>time_interval_custom</td>
442     *              <td>Range: 0.0~30.0s</td>
443     *          </tr>
444     *          <tr>
445     *              <td>Barcode separator</td>
446     *              <td>barcode_separator</td>
447     *              <td>"0": no line break, "1": line break, "2": enter key to line break</td>
448     *          </tr>
449     *          <tr>
450     *              <td>Left physical scan key</td>
451     *              <td>left_key</td>
452     *              <td>"true": enable, "false": disable</td>
453     *          </tr>
454     *          <tr>
455     *              <td>Prefix character display</td>
456     *              <td>prefix_separator_switch</td>
457     *              <td>"true": display, "false": no display</td>
458     *          </tr>
459     *          <tr>
460     *              <td>Prefix character</td>
461     *              <td>prefix_separator</td>
462     *              <td>String</td>
463     *          </tr>
464     *          <tr>
465     *              <td>Suffix character display</td>
466     *              <td>suffix_separator_switch</td>
467     *              <td>"true": display, "false": no display</td>
468     *          </tr>
469     *          <tr>
470     *              <td>Suffix character</td>
471     *              <td>suffix_separator</td>
472     *              <td>String</td>
473     *          </tr>
474     *         <tr>
475     *             <td>Barcode receiving mode</td>
476     *             <td>receiver_mode</td>
477     *             <td>0: Fast Mode 1: Slow Mode 2: Broadcast Mode 3: Clipboard Mode 4: Focus Mode 5: Key Mode</td>
478     *         </tr>
479     *         <tr>
480     *             <td>Decode light</td>
481     *             <td>decode_light</td>
482     *             <td>"true": Enable, "false": Disable</td>
483     *         </tr>
484     *     </table>
485     * </div>
486     *
487     * @throws ScannerHwDevException
488     * @since V3.22.00
489     */
490    void setConfig(Map<String, String> map) throws ScannerHwDevException;
491
492    /**
493     * <div class="zh">开始扫码获取原始数据。</div> <div class="en">Start scanning the code and get the raw data.</div>
494     *
495     * @param timeoutMs <div class="zh">超时时间。单位毫秒。范围0~120000(X5机型:500~9900)。</div>
496     *                  <div class="en">Timeout. The unit is milliseconds. The range is 0~120000 (X5 model: 500~9900).</div>
497     * @return {@link ScanResultRaw}
498     * @throws ScannerHwDevException ScannerHwDevException
499     * @since V3.23.00
500     */
501    ScanResultRaw readRaw(int timeoutMs) throws ScannerHwDevException;
502
503    /**
504     * <div class="zh">获取支持的预览效果列表。</div> <div class="en">Get the list of supported preview formats.</div>
505     *
506     * @return <div class="zh">0:YUV 1:RAW 2:特殊模式 </div> <div class="en">0: YUV 1: RAW 2: special mode</div>
507     * @throws ScannerHwDevException ScannerHwDevException
508     * @since V3.27.00
509     */
510    int[] getSupportFormat() throws ScannerHwDevException;
511
512    /**
513     * <div class="zh">获取当前使用的预览效果。</div> <div class="en">Get the preview format currently in use.</div>
514     *
515     * @return <div class="zh">0:YUV 1:RAW 2:特殊模式 </div> <div class="en">0: YUV 1: RAW 2: special mode</div>
516     * @throws ScannerHwDevException ScannerHwDevException
517     * @since V3.27.00
518     */
519    int getPreviewFormat() throws ScannerHwDevException;
520
521    /**
522     * <div class="zh">设置预览效果。</div> <div class="en">Set preview format.</div>
523     *
524     * @param format <div class="zh">预览模式 <br/>
525     *                                  0:YUV<br/>
526     *                                  1:RAW<br/>
527     *                                  2:特殊模式</div>
528     *               <div class="en">Preview format<br/>
529     *                                  0: YUV<br/>
530     *                                  1: RAW<br/>
531     *                                  2: special mode</div>
532     * @throws ScannerHwDevException ScannerHwDevException
533     * @since V3.27.00
534     */
535    void setPreviewFormat(int format) throws ScannerHwDevException;
536
537    /**
538     * <div class="zh">控制硬扫码LED灯的亮灭状态。</div> <div class="en">Control hardware scanner LED light on and off.</div>
539     *
540     * @param ledIndex <div class="zh">LED灯的索引号 <br/>
541     *                                  bit0: 补光灯<br/>
542     *                                  bit1: 瞄准灯
543     *                               </div>
544     *               <div class="en">Index number of LED light<br/>
545     *                                  bit0: Filling light<br/>
546     *                                  bit1: Aiming light
547     *                                 </div>
548     * @param onOff <div class="zh">0: 熄灭
549     *                              非0: 点亮 </div>
550     *              <div class="en">0: off
551     *                              Non-0: on</div>
552     * @throws ScannerHwDevException ScannerHwDevException
553     * @since V3.33.00
554     */
555    void setScannerLight(byte ledIndex, byte onOff) throws ScannerHwDevException;
556}