Barcode Scanner Emulator
اسکنرهای بارکد چگونه کار میکنند
خواندن بارکد آنی به نظر میرسد، اما میان بارکد فیزیکی و نویسهای که به برنامه میرسد چهار مرحله جدا وجود دارد. درک هر مرحله تشخیص اشکالهای مربوط به اسکنر را بسیار آسانتر میکند.
چهار مرحله خواندن بارکد
1. نوردهی و گرفتن تصویر
اسکنرهای لیزری پرتویی را روی بارکد میکشند و شدت نور بازتابیده را اندازه میگیرند. اسکنرهای مبتنی بر تصویرگر (بیشتر اسکنرهای دستی امروزی و اسکنرهای دوربین تلفن) با حسگر کوچک CMOS تصویری دوبعدی از بارکد میگیرند، شبیه دوربینی با وضوح پایین.
2. رمزگشایی
سفتافزار داخلی پهنای میلهها (یا تصویر دوبعدی، برای کدهای QR و Data Matrix) را تحلیل میکند و آنها را با الگوریتم نمادشناسی مربوط — Code 128، Code 39، EAN-13، QR و مانند آن — به محموله دیجیتال اصلی رمزگشایی میکند. همه این کار درون خود اسکنر انجام میشود، پیش از آنکه دادهای به رایانه برسد.
3. ارتباط
محموله رمزگشاییشده به رایانه میزبان فرستاده میشود. مسیر انتقال معمولاً USB است و اکثر قریببهاتفاق اسکنرهای مصرفی و صنعتی خود را به سیستمعامل بهصورت دستگاه صفحهکلید USB HID نشان میدهند، نه یک کلاس USB سفارشی. برخی اسکنرها حالتهای دیگری مانند USB سریال (شبیهسازی درگاه COM) یا Bluetooth HID را پشتیبانی میکنند، اما حالت شبیهسازی صفحهکلید تنظیم پیشفرض تقریباً همه اسکنرهایی است که امروز فروخته میشوند.
4. ورودی برنامه
چون اسکنر مانند صفحهکلید عمل میکند، سیستمعامل محموله را بهصورت دنبالهای از رویدادهای کلید به برنامهای میرساند که هماکنون فوکوس صفحهکلید را دارد. برنامه هرگز مستقیم با اسکنر حرف نمیزند — فقط ضربهکلید دریافت میکند، درست مثل اینکه کسی خیلی سریع آنها را تایپ کرده باشد.
چرا بیشتر اسکنرها مانند صفحهکلید رفتار میکنند
حالت صفحهکلید HID پیکربندی پیشفرض تقریباً همه اسکنرهای تجاری بارکد است، چون نیازی به نصب راهانداز ندارد. هر سیستمعاملی که صفحهکلید USB را پشتیبانی کند، اسکنر را بهمحض اتصال پشتیبانی میکند.
شبیهسازی صفحهکلید USB یعنی سفتافزار اسکنر هر نویسه رمزگشاییشده را به کدکلید USB HID نگاشت میکند که صفحهکلید برای آن نویسه میفرستد، سپس گزارشهای استاندارد صفحهکلید HID را از نقطه پایانی وقفه USB ارسال میکند.
چرا این برای آزمون مهم است: چون در لایه برنامه اسکنر از صفحهکلید قابلتشخیص نیست، بخش بزرگی از رفتار وابسته به اسکنر را میتوان با تایپ سریع در فیلدی که فوکوس دارد، یا با ابزار مرورگری که رویدادهای صفحهکلید را بررسی میکند، آزمود (ابزارهای پیوندشده در پایین را ببینید).
پسوندهای ENTER و TAB
بیشتر اسکنرها طوری تنظیم شدهاند که پس از محموله رمزگشاییشده یک ضربه پسوند اضافه کنند؛ معمولاً ENTER (بازگشت نورد، 0x0D)، گاهی TAB (0x09) یا دنبالهای سفارشی. این کار هست تا برنامه دریافتکننده بدون مهلت زمانی بداند مقدار خواندهشده کجا تمام میشود — پسوند مانند علامت ارسال عمل میکند، شبیه فشردن Enter پس از تایپ در یک فیلد متن.
زمانبندی اسکنر
اسکنر تمام محموله بارکد را در زمانی بسیار کمتر از یک ثانیه میفرستد، اغلب با فاصله چند میلیثانیه میان نویسهها. کسی که همان رشته را تایپ میکند معمولاً میان ضربهها ۱۰۰ تا ۳۰۰ میلیثانیه یا بیشتر فاصله میگذارد. همین اختلاف زمان پایه منطق تشخیص اسکنر در بسیاری از برنامههای POS و انبار است که فورانهای ورودی غیرعادی سریع را، با یک کلید پسوند بلافاصله پس از آن، زیر نظر دارند.
برای برنامه شما معنایش این است: اگر میخواهید ورودی اسکنر را از تایپ دستی جدا کنید، زمان میان ضربهکلیدها را اندازه بگیرید و دنبال پرچم خاصی نگردید، چون رویدادهای استاندارد صفحهکلید مرورگر اطلاعاتی درباره منبع ورودی ندارند.
خودتان امتحان کنید
از آزمایشگر ورودی بارکد استفاده کنید تا یک بارکد واقعی بخوانید و مقدار گرفتهشده، زمانبندی و تشخیص پسوند را همزمان ببینید. برای بررسی عمیقتر رفتار گوهکلید، به گوهکلید HID توضیح دادهشده بروید.