From 02c3e5619f24abf0a675836c94b8db6ca4bf6f25 Mon Sep 17 00:00:00 2001 From: s3lph Date: Mon, 25 Nov 2024 23:10:11 +0100 Subject: [PATCH] feat: first version --- .gitignore | 1 + LICENSE | 16 +++++++ Makefile | 8 ++++ README.md | 83 ++++++++++++++++++++++++++++++++++ honeywell-config.c | 82 +++++++++++++++++++++++++++++++++ pcap/honeywellusbreset.pcapng | Bin 0 -> 168524 bytes 6 files changed, 190 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 honeywell-config.c create mode 100644 pcap/honeywellusbreset.pcapng diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99831c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +honeywell-config diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f97c93a --- /dev/null +++ b/LICENSE @@ -0,0 +1,16 @@ +Copyright 2024 s3lph + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1345548 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ + +.PHONY: clean + +honeywell-config: + gcc -lusb-1.0 -o honeywell-config honeywell-config.c + +clean: + rm honeywell-config diff --git a/README.md b/README.md new file mode 100644 index 0000000..7b5a2e6 --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +# Honeywell Barcode Reader Config Tool + +## What? + +A Linux tool for configuring Honeywell barcode scanners via USB. + +## Why? + +I had obtained a used Honeywell Hyperion 1300G scanner, however it was locked down and secured with a password, and the password was unknown. +There is a Windows-only configuration tool from Honeywell called "EZconfig" with which the barcode scanners can be configured via USB, even when locked down. +To not rely on a Windows VM for configuring the scanner, I sniffed the USB traffic using Wireshark and extracted the relevant messages, and wrapped them in this tool. + +## Usage + +First of all, compile the program using `make`. It depends only on `libusb-1.0`. + +The configuration strings need to be provided as command line arguments. You can provide multiple: + +``` +./honeywell-config [... ] +``` + +In general, please refer to your scanner's manual for configuration strings. + +Here are some examples: + +### Factory Reset + +``` +./honeywell-config DEFOVR. DEFALT. +``` + +### Switch Operation Mode + +USBHID: + +``` +./honeywell-config PAP131. +``` + +Keyboard: + +``` +./honeywell-config PAP124. +``` + +### Add Prefix to Output + +The following adds the string `FCKAFD ` (ASCII hex `46 43 4B 41 46 44 20`) in front of every scanned barcode: + +``` +./honeywell-config PREBK246434B41464420. +``` + +Note how this behaves differently from if you were to configure the scanner in-band via scanning config barcodes. +There you would scan a lot of individual codes from the manual: + +1. `PREBK2.` +1. `K4K.` +1. `K6K.` +1. ... +1. `K2K.` +1. `K0K.` +1. `MNUSAV.` + +On the USB config interface, all of that goes into a single string instead. + +## Adapting for Other Scanners + +The tool currently has hardcoded USB vendor/product IDs for a Honeywell Hyperion 1300G in Keyboard or USBHID modes. +If you have a different Honeywell scanner, and the tool doesn't find it, you can try making this tool work for it: +1. Obtain the USB vendor and product IDs for your scanner, e.g. through `lsusb`. +1. Replace the VID/PID in the following line of code in `honeywell-config.c`: + + ```c + libusb_device_handle *devh = libusb_open_device_with_vid_pid(ctx, 0x0c2e, 0x0b07); + ``` +1. Recompile the tool with `make clean; make` + +## License + +MIT License + diff --git a/honeywell-config.c b/honeywell-config.c new file mode 100644 index 0000000..5c90f2d --- /dev/null +++ b/honeywell-config.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Template for control messages, obtained through packet capture +unsigned char *CMD = "\xfd\x00\x16M\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; + + +int main(int argc, char **argv) { + uint8_t cmd[64]; + memcpy(cmd, CMD, 64); + struct usbdevfs_ioctl command; + libusb_context *ctx = NULL; + + // + // Find and open the device + // + libusb_init(&ctx); + if (!ctx) { + perror("failed to initialize libusb"); + return 1; + } + + libusb_device_handle *devh = libusb_open_device_with_vid_pid(ctx, 0x0c2e, 0x0b07); + if (!devh) { + devh = libusb_open_device_with_vid_pid(ctx, 0x0c2e, 0x0b01); + if (!devh) { + perror("failed to open device"); + return 1; + } + } + libusb_device *dev = libusb_get_device(devh); + if (!dev) { + perror("failed to get device info"); + return 1; + } + + // + // Disconnect usbhid driver from both device interfaces + // + char usbdevfs[32]; + snprintf(usbdevfs, 32, "/dev/bus/usb/%03d/%03d", libusb_get_bus_number(dev), libusb_get_device_address(dev)); + // usbdevfs/ioctl inspired from + // https://www.linuxquestions.org/questions/linux-hardware-18/how-to-unclaim-usb-device-558138/#post3406986 + int fd = open(usbdevfs,O_RDWR); + if (fd < 1) { + perror("failed to open usbdevfs file"); + return 1; + } + for (uint8_t i = 0; i < 2; ++i) { + command.ifno = i; + command.ioctl_code = USBDEVFS_DISCONNECT; + command.data = NULL; + int ret = ioctl(fd, USBDEVFS_IOCTL, &command); + if (ret < 0) { + perror("failed to unclaim USB interface from usbhid"); + } + } + + // + // Prepare and send a message on the control channel for each config argument + // + for (int i = 1; i < argc; ++i) { + memset(cmd+5, 0, 59); + cmd[1] = strlen(argv[i])+3; + memcpy(cmd+5, argv[i], strlen(argv[i])); + libusb_control_transfer(devh, 0x21, 0x09, 0x02fd, 1, cmd, 64, 0); + } + + // + // Cleanup + // + libusb_release_interface(devh, 1); + libusb_close(devh); + libusb_exit(ctx); +} diff --git a/pcap/honeywellusbreset.pcapng b/pcap/honeywellusbreset.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..0f95945e9a07a9ef28c52f6a6bebf7101548de56 GIT binary patch literal 168524 zcmc$n2YeJo|NoBwp^04tYfw=v!CZO-VRM&DktBp%Xf_TI0YyMSM7>92LGiJ75leV{ zR8+*?eKc0=K0fx|9(#Q(*yaEE&g|T5hMUaXaQXi>uf3bwyUc#x`Y06Sqo?8#pAK!VTHSgx`(z5)z6x9)Z)C-Vd3zw()=m&r_BuKhkJwu zg{qD^V&1eV^YVsHm^FX;f|*n1AHI8D@v!1yVXT`b(n30_Fu#r2YwsS)3H1scwP5NI zbLSL<`rzAKEZ<184t&M_mwuC=513Z(mK$1i=$eZ?q-k#bVxQw+LT%d%+CoITei&?&u{~`P%%m2U`Yc3|uG>iPBEdTtF$p7-E z`?CM&fmfQ>oBaHHbnnyS5PYdJoHHxH@IiWp7oJraa*&&zq0JXT+oOw~#H3Qp(KGFJB&c@Xvmw8yu=GzYPRtL)J z<9=D)xTqT|t2zGqP?EtZKH;DJr^x?gG`)QQ~3vX%0Dl_{}A$T!e^S>{rpw_6OcbmoBA{R5Pb1{-4yk= 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 literal 0 HcmV?d00001