Haste makes waste, and my sleep is all disturbed. Notable fixes: - Windows linking should be completely static, - eizoctltray: input port switching was dysfunctional, - eizoctl*: some failure messages got eaten up.
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
				
			|||||||
cmake_minimum_required (VERSION 3.10)
 | 
					cmake_minimum_required (VERSION 3.10)
 | 
				
			||||||
project (usb-drivers VERSION 0.1.0 DESCRIPTION "USB drivers" LANGUAGES C)
 | 
					project (usb-drivers VERSION 0.1.0
 | 
				
			||||||
 | 
						DESCRIPTION "User space USB drivers" LANGUAGES C)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Moar warnings
 | 
					# Moar warnings
 | 
				
			||||||
set (CMAKE_C_STANDARD 99)
 | 
					set (CMAKE_C_STANDARD 99)
 | 
				
			||||||
@@ -27,6 +28,9 @@ if (WIN32 AND CMAKE_CROSSCOMPILING)
 | 
				
			|||||||
	set (ENV{PKG_CONFIG_PATH} "${win32_deps_pcpath}")
 | 
						set (ENV{PKG_CONFIG_PATH} "${win32_deps_pcpath}")
 | 
				
			||||||
	set (ENV{PKG_CONFIG_LIBDIR} "${win32_deps_pcpath}")
 | 
						set (ENV{PKG_CONFIG_LIBDIR} "${win32_deps_pcpath}")
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					if (WIN32)
 | 
				
			||||||
 | 
						add_link_options (-static)
 | 
				
			||||||
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Dependencies
 | 
					# Dependencies
 | 
				
			||||||
set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/liberty/cmake)
 | 
					set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/liberty/cmake)
 | 
				
			||||||
@@ -35,8 +39,8 @@ find_package (PkgConfig REQUIRED)
 | 
				
			|||||||
pkg_check_modules (libusb libusb-1.0)
 | 
					pkg_check_modules (libusb libusb-1.0)
 | 
				
			||||||
pkg_search_module (hidapi hidapi hidapi-hidraw)
 | 
					pkg_search_module (hidapi hidapi hidapi-hidraw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option (WITH_LIBUSB "Compile with libusb utilities" ${libusb_FOUND})
 | 
					option (WITH_LIBUSB "Compile with libusb-based utilities" ${libusb_FOUND})
 | 
				
			||||||
option (WITH_HIDRAW "Compile with hidraw utilities" ${hidapi_FOUND})
 | 
					option (WITH_HIDAPI "Compile with hidapi-based utilities" ${hidapi_FOUND})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generate a configuration file
 | 
					# Generate a configuration file
 | 
				
			||||||
configure_file (${PROJECT_SOURCE_DIR}/config.h.in
 | 
					configure_file (${PROJECT_SOURCE_DIR}/config.h.in
 | 
				
			||||||
@@ -67,14 +71,14 @@ if (WITH_LIBUSB)
 | 
				
			|||||||
	target_link_libraries (razer-bw-te-ctl ${libusb_LIBRARIES})
 | 
						target_link_libraries (razer-bw-te-ctl ${libusb_LIBRARIES})
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (WITH_HIDRAW)
 | 
					if (WITH_HIDAPI)
 | 
				
			||||||
	list (APPEND targets eizoctl)
 | 
						list (APPEND targets eizoctl)
 | 
				
			||||||
	add_executable (eizoctl eizoctl.c)
 | 
						add_executable (eizoctl eizoctl.c)
 | 
				
			||||||
	target_include_directories (eizoctl PUBLIC ${hidapi_INCLUDE_DIRS})
 | 
						target_include_directories (eizoctl PUBLIC ${hidapi_INCLUDE_DIRS})
 | 
				
			||||||
	target_link_directories (eizoctl PUBLIC ${hidapi_LIBRARY_DIRS})
 | 
						target_link_directories (eizoctl PUBLIC ${hidapi_LIBRARY_DIRS})
 | 
				
			||||||
	target_link_libraries (eizoctl ${hidapi_LIBRARIES})
 | 
						target_link_libraries (eizoctl ${hidapi_LIBRARIES})
 | 
				
			||||||
endif ()
 | 
					endif ()
 | 
				
			||||||
if (WITH_HIDRAW AND WIN32)
 | 
					if (WITH_HIDAPI AND WIN32)
 | 
				
			||||||
	list (APPEND targets_gui eizoctltray)
 | 
						list (APPEND targets_gui eizoctltray)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	include (IconUtils)
 | 
						include (IconUtils)
 | 
				
			||||||
@@ -95,7 +99,7 @@ if (WITH_HIDRAW AND WIN32)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	add_executable (eizoctltray WIN32 eizoctl.c eizoctltray.rc)
 | 
						add_executable (eizoctltray WIN32 eizoctl.c eizoctltray.rc)
 | 
				
			||||||
	target_compile_definitions (eizoctltray PUBLIC -DUNICODE -D_UNICODE -DTRAY)
 | 
						target_compile_definitions (eizoctltray PUBLIC -DUNICODE -D_UNICODE -DTRAY)
 | 
				
			||||||
	target_link_options (eizoctltray PUBLIC -static -municode)
 | 
						target_link_options (eizoctltray PUBLIC -municode)
 | 
				
			||||||
	target_include_directories (eizoctltray PUBLIC ${hidapi_INCLUDE_DIRS})
 | 
						target_include_directories (eizoctltray PUBLIC ${hidapi_INCLUDE_DIRS})
 | 
				
			||||||
	target_link_directories (eizoctltray PUBLIC ${hidapi_LIBRARY_DIRS})
 | 
						target_link_directories (eizoctltray PUBLIC ${hidapi_LIBRARY_DIRS})
 | 
				
			||||||
	target_link_libraries (eizoctltray ${hidapi_LIBRARIES} powrprof)
 | 
						target_link_libraries (eizoctltray ${hidapi_LIBRARIES} powrprof)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,8 @@ Runtime dependencies:
 | 
				
			|||||||
 libusb-1.0 (elksmart-comm, razer-bw-te-ctl), hidapi (eizoctl)
 | 
					 libusb-1.0 (elksmart-comm, razer-bw-te-ctl), hidapi (eizoctl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 $ git clone --recursive https://git.janouch.name/p/usb-drivers.git
 | 
					 $ git clone --recursive https://git.janouch.name/p/usb-drivers.git
 | 
				
			||||||
 $ mkdir desktop-tools/build
 | 
					 $ mkdir usb-drivers/build
 | 
				
			||||||
 $ cd desktop-tools/build
 | 
					 $ cd usb-drivers/build
 | 
				
			||||||
 $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
 | 
					 $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
 | 
				
			||||||
 $ make
 | 
					 $ make
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,7 +53,7 @@ Or you can try telling CMake to make a package for you.  For Debian it is:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Contributing and Support
 | 
					Contributing and Support
 | 
				
			||||||
------------------------
 | 
					------------------------
 | 
				
			||||||
Use https://git.janouch.name/p/desktop-tools to report bugs, request features,
 | 
					Use https://git.janouch.name/p/usb-drivers to report bugs, request features,
 | 
				
			||||||
or submit pull requests.  `git send-email` is tolerated.  If you want to discuss
 | 
					or submit pull requests.  `git send-email` is tolerated.  If you want to discuss
 | 
				
			||||||
the project, feel free to join me at ircs://irc.janouch.name, channel #dev.
 | 
					the project, feel free to join me at ircs://irc.janouch.name, channel #dev.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										48
									
								
								eizoctl.c
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								eizoctl.c
									
									
									
									
									
								
							@@ -433,8 +433,8 @@ eizo_monitor_read_secondary_descriptor(struct eizo_monitor *m)
 | 
				
			|||||||
				"secondary descriptor Get_Feature failed: %ls",
 | 
									"secondary descriptor Get_Feature failed: %ls",
 | 
				
			||||||
				hid_error(m->dev));
 | 
									hid_error(m->dev));
 | 
				
			||||||
		if (peek_u16le(&buf[1]) != offset)
 | 
							if (peek_u16le(&buf[1]) != offset)
 | 
				
			||||||
			return eizo_monitor_failf(
 | 
								return eizo_monitor_failf(m,
 | 
				
			||||||
				m, "secondary descriptor starts at an unexpected offset");
 | 
									"secondary descriptor starts at an unexpected offset");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// We could also limit the amount we copy, but whatever.
 | 
							// We could also limit the amount we copy, but whatever.
 | 
				
			||||||
		if (offset + lenr - HEADER_LEN > sizeof descriptor)
 | 
							if (offset + lenr - HEADER_LEN > sizeof descriptor)
 | 
				
			||||||
@@ -444,7 +444,7 @@ eizo_monitor_read_secondary_descriptor(struct eizo_monitor *m)
 | 
				
			|||||||
		offset += lenr - HEADER_LEN;
 | 
							offset += lenr - HEADER_LEN;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if DEBUG
 | 
					#if DUMP_DESCRIPTORS
 | 
				
			||||||
	for (size_t i = 0; i < descriptor_len; i++)
 | 
						for (size_t i = 0; i < descriptor_len; i++)
 | 
				
			||||||
		printf("%02x ", descriptor[i]);
 | 
							printf("%02x ", descriptor[i]);
 | 
				
			||||||
	printf("\n");
 | 
						printf("\n");
 | 
				
			||||||
@@ -491,18 +491,14 @@ eizo_monitor_open(struct eizo_monitor *m, const struct hid_device_info *info)
 | 
				
			|||||||
	m->vid = info->vendor_id;
 | 
						m->vid = info->vendor_id;
 | 
				
			||||||
	m->pid = info->product_id;
 | 
						m->pid = info->product_id;
 | 
				
			||||||
	if (info->usage_page != USB_USAGE_PAGE__MONITOR ||
 | 
						if (info->usage_page != USB_USAGE_PAGE__MONITOR ||
 | 
				
			||||||
		info->usage != USB_USAGE_PAGE_MONITOR_ID__MONITOR_CONTROL) {
 | 
							info->usage != USB_USAGE_PAGE_MONITOR_ID__MONITOR_CONTROL)
 | 
				
			||||||
		eizo_monitor_failf(m, "unexpected HID usage");
 | 
							return eizo_monitor_failf(m, "unexpected HID usage");
 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// There can be more displays with the same VID/PID,
 | 
						// There can be more displays with the same VID/PID,
 | 
				
			||||||
	// and info does not contain the serial number to tell them apart.
 | 
						// and info does not contain the serial number to tell them apart.
 | 
				
			||||||
	hid_device *dev = hid_open_path(info->path);
 | 
						hid_device *dev = hid_open_path(info->path);
 | 
				
			||||||
	if (!dev) {
 | 
						if (!dev)
 | 
				
			||||||
		eizo_monitor_failf(m, "failed to open: %ls", hid_error(NULL));
 | 
							return eizo_monitor_failf(m, "%ls", hid_error(NULL));
 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint8_t descriptor[HID_API_MAX_REPORT_DESCRIPTOR_SIZE] = {};
 | 
						uint8_t descriptor[HID_API_MAX_REPORT_DESCRIPTOR_SIZE] = {};
 | 
				
			||||||
	int len = hid_get_report_descriptor(dev, descriptor, sizeof descriptor);
 | 
						int len = hid_get_report_descriptor(dev, descriptor, sizeof descriptor);
 | 
				
			||||||
@@ -525,6 +521,12 @@ eizo_monitor_open(struct eizo_monitor *m, const struct hid_device_info *info)
 | 
				
			|||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if DUMP_DESCRIPTORS
 | 
				
			||||||
 | 
						for (size_t i = 0; i < (size_t) len; i++)
 | 
				
			||||||
 | 
							printf("%02x ", descriptor[i]);
 | 
				
			||||||
 | 
						printf("\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint8_t pinbuf[3] = {EIZO_REPORT_ID_PIN_CODE, 0, 0};
 | 
						uint8_t pinbuf[3] = {EIZO_REPORT_ID_PIN_CODE, 0, 0};
 | 
				
			||||||
	if (hid_get_feature_report(dev, pinbuf, sizeof pinbuf) != sizeof pinbuf) {
 | 
						if (hid_get_feature_report(dev, pinbuf, sizeof pinbuf) != sizeof pinbuf) {
 | 
				
			||||||
		eizo_monitor_failf(m, "failed to get PIN code: %ls", hid_error(dev));
 | 
							eizo_monitor_failf(m, "failed to get PIN code: %ls", hid_error(dev));
 | 
				
			||||||
@@ -914,16 +916,15 @@ eizo_restart(struct eizo_monitor *m)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// --- Main --------------------------------------------------------------------
 | 
					// --- Main --------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static bool
 | 
				
			||||||
eizo_watch(struct eizo_monitor *m)
 | 
					eizo_watch(struct eizo_monitor *m)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint8_t buf[1024];
 | 
						uint8_t buf[1024] = {};
 | 
				
			||||||
	int res = 0;
 | 
						int res = 0;
 | 
				
			||||||
	while (true) {
 | 
						while (true) {
 | 
				
			||||||
		if ((res = hid_read(m->dev, buf, sizeof buf)) < 0) {
 | 
							if ((res = hid_read(m->dev, buf, sizeof buf)) < 0)
 | 
				
			||||||
			eizo_monitor_failf(m, "watch: %ls\n", hid_error(m->dev));
 | 
								return eizo_monitor_failf(m, "watch: %ls", hid_error(m->dev));
 | 
				
			||||||
			return;
 | 
					
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (buf[0] != EIZO_REPORT_ID_GET &&
 | 
							if (buf[0] != EIZO_REPORT_ID_GET &&
 | 
				
			||||||
			buf[0] != EIZO_REPORT_ID_GET_LONG) {
 | 
								buf[0] != EIZO_REPORT_ID_GET_LONG) {
 | 
				
			||||||
			printf("Unknown report ID\n");
 | 
								printf("Unknown report ID\n");
 | 
				
			||||||
@@ -1025,8 +1026,10 @@ run(int argc, char *argv[], print_fn output, print_fn error, bool verbose)
 | 
				
			|||||||
	struct hid_device_info *devs = hid_enumerate(USB_VID_EIZO, 0), *p = devs;
 | 
						struct hid_device_info *devs = hid_enumerate(USB_VID_EIZO, 0), *p = devs;
 | 
				
			||||||
	for (; p; p = p->next) {
 | 
						for (; p; p = p->next) {
 | 
				
			||||||
		struct eizo_monitor m = {};
 | 
							struct eizo_monitor m = {};
 | 
				
			||||||
		if (!eizo_monitor_open(&m, p))
 | 
							if (!eizo_monitor_open(&m, p)) {
 | 
				
			||||||
 | 
								error("%s\n", m.error);
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (isfinite(brightness)) {
 | 
							if (isfinite(brightness)) {
 | 
				
			||||||
			double prev = 0.;
 | 
								double prev = 0.;
 | 
				
			||||||
@@ -1066,10 +1069,10 @@ run(int argc, char *argv[], print_fn output, print_fn error, bool verbose)
 | 
				
			|||||||
				output("%s %s: restart\n", m.product, m.serial);
 | 
									output("%s %s: restart\n", m.product, m.serial);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (events) {
 | 
							if (events) {
 | 
				
			||||||
			if (verbose)
 | 
								if (!verbose)
 | 
				
			||||||
				eizo_watch(&m);
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				error("Watching events is not possible in this mode\n");
 | 
									error("Watching events is not possible in this mode\n");
 | 
				
			||||||
 | 
								else if (!eizo_watch(&m))
 | 
				
			||||||
 | 
									error("%s\n", m.error);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		eizo_monitor_close(&m);
 | 
							eizo_monitor_close(&m);
 | 
				
			||||||
@@ -1308,9 +1311,8 @@ show_menu(void)
 | 
				
			|||||||
		id = id % 0x1000;
 | 
							id = id % 0x1000;
 | 
				
			||||||
		double brightness = 0.;
 | 
							double brightness = 0.;
 | 
				
			||||||
		if (id >= IDM_INPUT_0) {
 | 
							if (id >= IDM_INPUT_0) {
 | 
				
			||||||
			// FIXME: This seems to be too fast.
 | 
					 | 
				
			||||||
			if (process_any_power_request())
 | 
								if (process_any_power_request())
 | 
				
			||||||
				eizo_set_input_port(m, id);
 | 
									eizo_set_input_port(m, id - IDM_INPUT_0);
 | 
				
			||||||
		} else if (id == IDM_BRIGHTER) {
 | 
							} else if (id == IDM_BRIGHTER) {
 | 
				
			||||||
			if (eizo_get_brightness(m, &brightness))
 | 
								if (eizo_get_brightness(m, &brightness))
 | 
				
			||||||
				eizo_set_brightness(m, min(1., brightness + .1));
 | 
									eizo_set_brightness(m, min(1., brightness + .1));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user