message: feat(driverless) show driverless devices
diff: @@ -232,6 +232,60 @@ app.run(() => {
  })
  })
  +/**
  + * @summary The radix used by USB ID numbers
  + * @type {Number}
  + * @constant
  + */
  +const USB_ID_RADIX = 16
  +
  +/**
  + * @summary The expected length of a USB ID number
  + * @type {Number}
  + * @constant
  + */
  +const USB_ID_LENGTH = 4
  +
  +/**
  + * @summary Convert a USB id (e.g. product/vendor) to a string
  + * @function
  + * @private
  + *
  + * @param {Number} id - USB id
  + * @returns {String} string id
  + *
  + * @example
  + * console.log(usbIdToString(2652))
  + * > '0x0a5c'
  + */
  +const usbIdToString = (id) => {
  + return `0x${_.padStart(id.toString(USB_ID_RADIX), USB_ID_LENGTH, '0')}`
  +}
  +
  +/**
  + * @summary Product ID of BCM2708
  + * @type {Number}
  + * @constant
  + */
  +const USB_PRODUCT_ID_BCM2708_BOOT = 0x2763
  +
  +/**
  + * @summary Product ID of BCM2710
  + * @type {Number}
  + * @constant
  + */
  +const USB_PRODUCT_ID_BCM2710_BOOT = 0x2764
  +
  +/**
  + * @summary Compute module descriptions
  + * @type {Object}
  + * @constant
  + */
  +const COMPUTE_MODULE_DESCRIPTIONS = {
  + [USB_PRODUCT_ID_BCM2708_BOOT]: 'Compute Module 1',
  + [USB_PRODUCT_ID_BCM2710_BOOT]: 'Compute Module 3'
  +}
  +
  app.run(($timeout) => {
  const BLACKLISTED_DRIVES = settings.has('driveBlacklist')
  ? settings.get('driveBlacklist').split(',')
  @@ -259,6 +313,27 @@ app.run(($timeout) => {
  updateDriveProgress(drive, progress)
  })
  return drive
  + } else if (drive instanceof sdk.sourceDestination.DriverlessDevice) {
  + const description = COMPUTE_MODULE_DESCRIPTIONS[drive.deviceDescriptor.idProduct] || 'Compute Module'
  + return {
  + device: `${usbIdToString(drive.deviceDescriptor.idVendor)}:${usbIdToString(drive.deviceDescriptor.idProduct)}`,
  + displayName: 'Missing drivers',
  + description,
  + mountpoints: [],
  + isReadOnly: false,
  + isSystem: false,
  + disabled: true,
  + icon: 'warning',
  + size: null,
  + link: 'https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md',
  + linkCTA: 'Install',
  + linkTitle: 'Install missing drivers',
  + linkMessage: [
  + 'Would you like to download the necessary drivers from the Raspberry Pi Foundation?',
  + 'This will open your browser.\n\n',
  + 'Once opened, download and run the installer from the "Windows Installer" section to install the drivers.'
  + ].join(' ')
  + }
  }
  }
  