diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2025-01-18 19:19:49 +0100 | 
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2025-01-18 20:32:02 +0100 | 
| commit | 2594f8467d42e8ef29852261a8550962a496fe30 (patch) | |
| tree | d8a845fbb968ab29d9a2256c5899d22499c7d549 | |
| parent | 9039db44f66b8940326b70ae6947a46ab18c21d3 (diff) | |
| download | usb-drivers-2594f8467d42e8ef29852261a8550962a496fe30.tar.gz usb-drivers-2594f8467d42e8ef29852261a8550962a496fe30.tar.xz usb-drivers-2594f8467d42e8ef29852261a8550962a496fe30.zip | |
eizoctl: also report USB-C from --input '?'
And related cleanup.
| -rw-r--r-- | eizoctl.c | 73 | 
1 files changed, 33 insertions, 40 deletions
| @@ -803,7 +803,7 @@ eizo_port_by_name(const char *name)  	return index;  } -static char * +static const char *  eizo_port_to_name(uint16_t port)  {  	const char *stem = NULL; @@ -811,14 +811,14 @@ eizo_port_to_name(uint16_t port)  	if (group && group < sizeof g_port_names / sizeof g_port_names[0])  		stem = g_port_names[group][0]; -	static char buffer[32] = ""; +	static char buf[32] = "";  	if (!stem) -		snprintf(buffer, sizeof buffer, "%x", port); +		snprintf(buf, sizeof buf, "%x", port);  	else if (!number) -		snprintf(buffer, sizeof buffer, "%s", stem); +		snprintf(buf, sizeof buf, "%s", stem);  	else -		snprintf(buffer, sizeof buffer, "%s %d", stem, (number + 1)); -	return buffer; +		snprintf(buf, sizeof buf, "%s %d", stem, (number + 1)); +	return buf;  }  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -895,7 +895,7 @@ eizo_get_input_ports(struct eizo_monitor *m, uint16_t *ports, size_t size)  }  static uint16_t -eizo_resolve_port(struct eizo_monitor *m, const char *port) +eizo_resolve_port_by_name(struct eizo_monitor *m, const char *port)  {  	uint8_t usb_c_index = 0;  	if (eizo_port_by_name_in_group(port, g_port_names_usb_c, &usb_c_index)) { @@ -907,6 +907,26 @@ eizo_resolve_port(struct eizo_monitor *m, const char *port)  	return eizo_port_by_name(port);  } +static const char * +eizo_resolve_port_to_name(struct eizo_monitor *m, uint16_t port) +{ +	// USB-C ports are a bit tricky, they only need to be /displayed/ as such. +	struct eizo_profile_item *item = +		&m->profile[EIZO_PROFILE_KEY_USB_C_INPUT_PORTS]; +	for (uint8_t i = 0; i < item->len / 2; i++) { +		if (port != peek_u16le(item->data + i * 2)) +			continue; + +		static char buf[32] = ""; +		if (!i) +			snprintf(buf, sizeof buf, "%s", g_port_names_usb_c[0]); +		else +			snprintf(buf, sizeof buf, "%s %u", g_port_names_usb_c[0], (i + 1)); +		return buf; +	} +	return eizo_port_to_name(port); +} +  static bool  eizo_set_input_port(struct eizo_monitor *m, uint16_t port)  { @@ -1118,13 +1138,12 @@ run(int argc, char *argv[], print_fn output, print_fn error)  		}  		if (port) {  			uint16_t prev = 0; -			uint16_t next = eizo_resolve_port(&m, port); +			uint16_t next = eizo_resolve_port_by_name(&m, port);  			if (!eizo_get_input_port(&m, &prev)) {  				error("Failed to get input port: %s\n", m.error);  			} else if (!strcmp(port, "?")) { -				// XXX: This does not report USB-C.  				output("%s %s: input: %s\n", -					m.product, m.serial, eizo_port_to_name(prev)); +					m.product, m.serial, eizo_resolve_port_to_name(&m, prev));  			} else if (!next) {  				error("Failed to resolve port name: %s\n", port);  			} else { @@ -1283,21 +1302,9 @@ append_monitor(struct eizo_monitor *m, HMENU menu, UINT_PTR base)  	if (!ports[0])  		ports[0] = current; -	// USB-C ports are a bit tricky, they only need to be /displayed/ as such. -	struct eizo_profile_item *item = -		&m->profile[EIZO_PROFILE_KEY_USB_C_INPUT_PORTS];  	for (size_t i = 0; ports[i]; i++) { -		uint8_t usb_c = 0; -		for (size_t u = 0; u < item->len / 2; u++) -			if (ports[i] == peek_u16le(item->data + u * 2)) -				usb_c = u + 1; - -		if (!usb_c) -			snwprintf(buf, sizeof buf, L"%s", eizo_port_to_name(ports[i])); -		else if (usb_c == 1) -			snwprintf(buf, sizeof buf, L"%s", g_port_names_usb_c[0]); -		else -			snwprintf(buf, sizeof buf, L"%s %u", g_port_names_usb_c[0], usb_c); +		snwprintf(buf, sizeof buf, L"%s", +			eizo_resolve_port_to_name(m, ports[i]));  		UINT flags = MF_STRING;  		if (ports[i] == current) @@ -1664,23 +1671,9 @@ message_error(const char *format, ...)  	if (!ports[0])  		ports[0] = current; -	// USB-C ports are a bit tricky, they only need to be /displayed/ as such. -	struct eizo_profile_item *item = -		&m.monitor->profile[EIZO_PROFILE_KEY_USB_C_INPUT_PORTS];  	for (size_t i = 0; ports[i]; i++) { -		uint8_t usb_c = 0; -		for (size_t u = 0; u < item->len / 2; u++) -			if (ports[i] == peek_u16le(item->data + u * 2)) -				usb_c = u + 1; - -		NSString *title = nil; -		if (!usb_c) -			title = [NSString stringWithUTF8String:eizo_port_to_name(ports[i])]; -		else if (usb_c == 1) -			title = [NSString stringWithUTF8String:g_port_names_usb_c[0]]; -		else -			title = [NSString stringWithFormat:@"%s %u", -				g_port_names_usb_c[0], usb_c]; +		NSString *title = [NSString stringWithUTF8String: +			eizo_resolve_port_to_name(m.monitor, ports[i])];  		NSMenuItem *inputPortItem = [[NSMenuItem alloc]  			initWithTitle:title action:@selector(setInputPort:) | 
