+static int read_info(struct usb_dev_handle *device, u8 ctl_id)
+{
+ dev_cmd_t cmd;
+ dev_info_t info;
+ int ret;
+
+ prepare_cmd(&cmd, CMD_ATM_READY);
+ cmd.dev_info.which_device = ctl_id;
+ memset(&info, 0, sizeof(info));
+
+ ret = write_cmd(device, &cmd);
+ if (ret < 0)
+ return ret;
+
+ ret = read_response(device, &info, sizeof(info));
+ if (ret < 0)
+ return ret;
+
+ printf(" firmware version: %X.%X.%X%c\n", info.firmware_ver[0],
+ info.firmware_ver[1], info.firmware_ver[2], info.firmware_ver[3]);
+ printf(" bootloader version: %X.%X.%X%c\n", info.bootloader_ver[0],
+ info.bootloader_ver[1], info.bootloader_ver[2], info.bootloader_ver[3]);
+ info.names[sizeof(info.names) - 1] = 0;
+ printf(" device name: %s\n", info.names);
+
+ return 0;
+}
+
+static int get_filename(struct usb_dev_handle *dev, char *dst, int len, u8 which)
+{
+ char buff[65];
+ dev_cmd_t cmd;
+ int ret;
+
+ prepare_cmd(&cmd, CMD_SEC_GET_NAME);
+ cmd.filename.which = which;
+ memset(buff, 0, sizeof(buff));
+
+ ret = write_cmd(dev, &cmd);
+ if (ret < 0)
+ return ret;
+
+ ret = read_response(dev, buff, 64);
+ if (ret < 0)
+ return ret;
+
+ strncpy(dst, buff, len);
+ dst[len - 1] = 0;
+
+ return 0;
+}
+