elksmart-comm: add support for EKX5S-T
This device seems to be very picky about USB ports, but at least learning is reliable, and it uses the same protocol as EKX4S.
This commit is contained in:
parent
9e91058ed9
commit
dc3f0d6d05
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* elksmart-comm.c: ELK Smart infrared dongle tool (for the 4th generation)
|
||||
* elksmart-comm.c: ELK Smart infrared dongle tool (for EKX4S and EKX5S-T)
|
||||
*
|
||||
* Copyright (c) 2024, Přemysl Eric Janouch <p@janouch.name>
|
||||
*
|
||||
@ -207,7 +207,8 @@ compress_value (unsigned value, struct str *encoded)
|
||||
static void
|
||||
compress_pulses (const struct pulse *pulses, size_t len, struct str *encoded)
|
||||
{
|
||||
unsigned counts[len] = {};
|
||||
unsigned counts[len];
|
||||
memset (counts, 0, sizeof counts);
|
||||
for (size_t i = 0; i < len; i++)
|
||||
for (size_t k = 0; k < len; k++)
|
||||
if (pulse_equal (pulses[i], pulses[k]))
|
||||
@ -222,7 +223,7 @@ compress_pulses (const struct pulse *pulses, size_t len, struct str *encoded)
|
||||
if (counts[i] < counts[top1]
|
||||
&& counts[i] > counts[top2])
|
||||
p2 = pulses[top2 = i];
|
||||
else if (counts[top2] == counts[top1])
|
||||
else if (counts[top2] == counts[top1])
|
||||
p2 = pulses[top2 = i];
|
||||
|
||||
// Although I haven't really tried it, something tells me that
|
||||
@ -259,8 +260,9 @@ enum
|
||||
|
||||
// 0x134 (EKX5S ~ 5s, 5th generation remote)
|
||||
// 0x195 (EKX4S ~ 4s, 4th generation remote)
|
||||
// 0x184 (international edition)
|
||||
USB_PRODUCT_SMTCTL_SMART = 0x0195,
|
||||
// 0x184 (EKX5S-T, international edition)
|
||||
USB_PRODUCT_SMTCTL_SMART_EKX4S = 0x0195,
|
||||
USB_PRODUCT_SMTCTL_SMART_EKX5S_T = 0x0184,
|
||||
|
||||
// There should only ever be one interface.
|
||||
USB_INTERFACE = 0,
|
||||
@ -551,7 +553,7 @@ send_identify (libusb_device_handle *device, struct error **e)
|
||||
return error_set (e, "device busy or not supported");
|
||||
|
||||
#if 0
|
||||
// My device does not respond to this request.
|
||||
// The EKX4S does not respond to this request.
|
||||
static uint8_t c_serial[] = { -5, -5, -5, -5 };
|
||||
if ((result = libusb_bulk_transfer (device, g.endpoint_out,
|
||||
c_serial, sizeof c_serial, &len, 100)))
|
||||
@ -667,8 +669,14 @@ main (int argc, char *argv[])
|
||||
if (result)
|
||||
exit_fatal ("libusb: %s", libusb_strerror (result));
|
||||
|
||||
libusb_device_handle *device =
|
||||
find_device (USB_VENDOR_SMTCTL, USB_PRODUCT_SMTCTL_SMART, &result);
|
||||
libusb_device_handle *device = NULL;
|
||||
if (!device && !result)
|
||||
device = find_device (USB_VENDOR_SMTCTL,
|
||||
USB_PRODUCT_SMTCTL_SMART_EKX4S, &result);
|
||||
if (!device && !result)
|
||||
device = find_device (USB_VENDOR_SMTCTL,
|
||||
USB_PRODUCT_SMTCTL_SMART_EKX5S_T, &result);
|
||||
|
||||
if (result)
|
||||
exit_fatal ("couldn't open device: %s", libusb_strerror (result));
|
||||
else if (!device)
|
||||
|
Loading…
Reference in New Issue
Block a user