ltunify: print receiver serial

This commit is contained in:
Peter Wu
2013-04-27 19:02:39 +02:00
parent 147c76bf7f
commit 74fff88e80

View File

@@ -92,6 +92,15 @@ struct msg_enable_notifs {
u8 reporting_flags_receiver2; // (reserved) u8 reporting_flags_receiver2; // (reserved)
}; };
// long receiver resp - 0xB5 Pairing information, 0x03 - "Receiver information"? (undocumented)
struct msg_receiver_info {
u8 serial_number[4];
u8 _dunno1;
u8 _dunno2; // 06 - Max Device Capability? (not sure, but it is six)
u8 _dunno3;
u8 padding[8]; // 00 00 00 00 00 00 00 00 - ??
};
// 0xB5 Pairing information, 0x20..0x2F - Unifying Device pairing information // 0xB5 Pairing information, 0x20..0x2F - Unifying Device pairing information
struct msg_dev_pair_info { struct msg_dev_pair_info {
u8 requested_field; // 0x20..0x25 u8 requested_field; // 0x20..0x25
@@ -196,6 +205,13 @@ struct device {
}; };
struct device devices[DEVICES_MAX]; struct device devices[DEVICES_MAX];
struct receiver_info {
uint32_t serial_number;
struct version version;
};
struct receiver_info receiver;
// error messages for type=8F (ERROR_MSG) // error messages for type=8F (ERROR_MSG)
static const char * error_messages[0x100] = { static const char * error_messages[0x100] = {
[0x01] = "SUCCESS", [0x01] = "SUCCESS",
@@ -677,6 +693,22 @@ bool get_all_devices(int fd) {
} }
return true; return true;
} }
bool get_receiver_info(int fd, struct receiver_info *rinfo) {
struct hidpp_message msg;
u8 params[3] = {0};
params[0] = 0x03; // undocumented
if (get_long_register(fd, DEVICE_RECEIVER, REG_PAIRING_INFO, params, &msg)) {
struct msg_receiver_info *info = (struct msg_receiver_info *) &msg.msg_long.str;
uint32_t *serial_numberp;
serial_numberp = (uint32_t *) &info->serial_number;
rinfo->serial_number = ntohl(*serial_numberp);
return true;
}
return false;
}
bool get_device_pair_info(int fd, u8 device_index) { bool get_device_pair_info(int fd, u8 device_index) {
struct device *dev = &devices[device_index - 1]; struct device *dev = &devices[device_index - 1];
struct hidpp_message msg; struct hidpp_message msg;
@@ -797,11 +829,12 @@ void print_versions(struct version *ver) {
ver->bl_major, ver->bl_minor); ver->bl_major, ver->bl_minor);
} }
void get_and_print_recv_fw(int fd) { void get_and_print_recv_info(int fd) {
struct version version; if (get_receiver_info(fd, &receiver)) {
printf("Serial number: %08X\n", receiver.serial_number);
if (get_device_versions(fd, DEVICE_RECEIVER, &version)) { }
print_versions(&version); if (get_device_versions(fd, DEVICE_RECEIVER, &receiver.version)) {
print_versions(&receiver.version);
} }
} }
@@ -1129,7 +1162,7 @@ int main(int argc, char **argv) {
fprintf(stderr, "Device %s not found\n", args[1]); fprintf(stderr, "Device %s not found\n", args[1]);
} }
} else if (!strcmp(cmd, "receiver-info")) { } else if (!strcmp(cmd, "receiver-info")) {
get_and_print_recv_fw(fd); get_and_print_recv_info(fd);
} else { } else {
fprintf(stderr, "Unhandled command: %s\n", cmd); fprintf(stderr, "Unhandled command: %s\n", cmd);
} }