Important: Chrome will be removing support for Chrome Apps on all platforms. Chrome browser and the Chrome Web Store will continue to support extensions. Read the announcement and learn more about migrating your app.

This document describes how to use the USB API to communicatewith USB devices. Some devices are not accessible through the USB API(see the Caveats section below for details).Chrome Apps can also connect to serial andBluetooth devices.

Aug 11, 2018  Works great; maybe the people saying it didn't work forgot to restart chrome before expecting it to work, but once I restarted chrome the combinations work just fine (I'm using it for french btw, can't attest to other accents).

Samples: For examples that illustrate how Chrome Apps can connect to hardware devices, see theserial,servo, andusb samples.

For background information about USB, see the official USB specifications.
USB in a NutShell is a reasonable crash course that you may find helpful.

Manifest requirement

The USB API requires the 'usb' permission in the manifest file:

Get google chrome for mac

In addition, in order to prevent finger-printing, you must declare all the device types you want to access in the manifest file. Each type of USB device corresponds to a vendor id/product id (VID/PID) pair. You can use usb.getDevices to enumerate devices by their VID/PID pair.

You must declare the VID/PID pairs for each type of device you want to use under the usbDevices permission in your app's manifest file, as shown in the example below:

Note that only decimal numbers are allowed in JSON format. You cannot use hexadecimal numbers in these fields.

Since Chrome 57, the requirement for declaring all the device types in the app manifest is relaxed for apps running as Chrome OS kiosk apps. For kiosk apps, you can use the interfaceClass permission property to request permission to access USB devices that:

  • implement a USB interface of a specific interface class
  • have a specific USB device class
For example, the following usbDevices permission would grant an app access to all USB devices that implement a printer interface (interface class code 7), and to USB hub devices (device class code 9):

For the list of acceptable interfaceClass values, see USB Class Codes.

The interfaceClass property can be combined with the vendorId property to get access only to USB devices from a specific vendor, as demonstrated by the following example: Samsung k2200 scanner driver.

Note that usbDevices permissions with interfaceClass property have effect only when the app is running in kiosk session - outside a kiosk session these permissions will be ignored.

Finding a device

To determine whether one or more specific devices are connected to a user's system, use the usb.getDevices method:


Parameter (type)Description
EnumerateDevicesOptions (object)An object specifying both a vendorId (long) and productId (long) used to find the correct type of device on the bus. Your manifest must declare the usbDevices permission section listing all the vendorId and deviceId pairs your app wants to access.
callback (function)Called when the device enumeration is finished. The callback will be executed with one parameter, an array of Device objects with three properties: device, vendorId, productId. The device property is a stable identifier for a connected device. It will not change until the device is unplugged. The detail of the identifier is opaque and subject to change. Do not rely on its current type.
If no devices are found, the array will be empty.

Example:

Opening a device

Once the Device objects are returned, you can open a device usingusb.openDevice to obtain a connection handle. You can onlycommunicate with USB devices using connection handles.

PropertyDescription
deviceObject received in usb.getDevices callback.
data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

Example:

Not every device can be opened successfully. In general, operating systemslock down many types of USB interfaces (e.g. keyboards and mice, mass storagedevices, webcams, etc.) and they cannot be claimed by user applications.On Linux (other than Chrome OS), once an interface of a device is locked down bythe OS, the whole device is locked down (because all the interfaces shares thesame device file), even if the other interfaces of the device can be used intheory. On Chrome OS, you can request access to unlocked interfaces using theusb.requestAccess method. If permitted, the permission broker willunlock the device file for you.

To simplify the opening process, you can use the usb.findDevicesmethod, which enumerates, requests access, and opens devices in one call:

which is equivalent to:

USB transfers and receiving data from a device

The USB protocol defines four types of transfers: control, bulk, isochronous and interrupt. These transfers are described below.

Transfers can occur in both directions: device-to-host (inbound), and host-to-device (outbound). Due to the nature of the USB protocol, both inbound and outbound messages must be initiated by the host (the computer that runs the Chrome app). For inbound (device-to-host) messages, the host (initiated by your JavaScript code) sends a message flagged as 'inbound' to the device. The details of the message depend on the device, but usually will have some identification of what you are requesting from it. The device then responds with the requested data. The device's response is handled by Chrome and delivered asynchronously to the callback you specify in the transfer method. An outbound (host-to-device) message is similar, but the response doesn't contain data returned from the device.

For each message from the device, the specified callback will receive an event object with the following properties:


PropertyDescription
resultCode (integer)0 is success; other values indicate failure. An error string can be
read from chrome.extension.lastError when a failure is
indicated.
data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

Example:

CONTROL transfers

Control transfers are generally used to send or receive configuration or command parameters to a USB device. The controlTransfer method always sends to/reads from endpoint 0, and no claimInterface is required. The method is simple and receives three parameters:


Parameter (types)Description
connectionHandleObject received in usb.openDevice callback.
transferInfoParameter object with values from the table below. Check your USB device protocol specification for details.
transferCallback()Invoked when the transfer has completed.

Values for transferInfo object:

ValueDescription
requestType (string)'vendor', 'standard', 'class' or 'reserved'.
recipient (string)'device', 'interface', 'endpoint' or 'other'.
direction (string)'in' or 'out'. The 'in' direction is used to notify the device that
it should send information to the host. All communication on a USB
bus is host-initiated, so use an 'in' transfer to allow a device to
send information back.
request (integer)Defined by your device's protocol.
value (integer)Defined by your device's protocol.
index (integer)Defined by your device's protocol.
length (integer)Only used when direction is 'in'. Notifies the device that this is the amount of data the host is expecting in response.
data (arraybuffer)Defined by your device's protocol, required when direction is 'out'.

Example:

ISOCHRONOUS transfers

Isochronous transfers are the most complex type of USB transfer. They are commonly used for streams of data, like video and sound. To initiate an isochronous transfer (either inbound or outbound), you must use the usb.isochronousTransfer method:


ParameterDescription
connectionHandleObject received in usb.openDevice callback.
isochronousTransferInfoParameter object with the values in the table below.
transferCallback()Invoked when the transfer has completed.

Values for isochronousTransferInfo object:

ValueDescription
transferInfo (object)An object with the following attributes:
direction (string): 'in' or 'out'.
endpoint (integer): defined by your device. Usually can be found by looking at an USB instrospection tool, like lsusb -v
length (integer): only used when direction is 'in'. Notifies the device that this is the amount of data the host is expecting in response.
Should be AT LEAST packets × packetLength.
data (arraybuffer): defined by your device's protocol; only used when direction is 'out'.
packets (integer)Total number of packets expected in this transfer.
packetLength (integer)Expected length of each packet in this transfer.

Example:

Notes: One isochronous transfer will contain isoTransferInfo.packets packets of isoTransferInfo.packetLength bytes. If it is an inbound transfer (your code requested data from the device), the data field in the onUsbEvent will be an ArrayBuffer of size transferInfo.length. It is your duty to walk through this ArrayBuffer and extract the different packets, each starting at a multiple of isoTransferInfo.packetLength bytes.
If you are expecting a stream of data from the device, remember that you will have to send one 'inbound' transfer for each transfer you expect back. USB devices don't send transfers to the USB bus unless the host explicitly requests them through 'inbound' transfers.

BULK transfers

Bulk transfers are commonly used to transfer a large amount of non-time-sensitive data in a reliable way. usb.bulkTransfer has three parameters:


ParameterDescription
connectionHandleObject received in usb.openDevice callback.
transferInfoParameter object with the values in the table below.
transferCallbackInvoked when the transfer has completed.

Values for transferInfo object:

ValueDescription
direction (string)'in' or 'out'.
endpoint (integer)Defined by your device's protocol.
length (integer)Only used when direction is 'in'. Notifies the device that this is the amount of data the host is expecting in response.
data (ArrayBuffer)Defined by your device's protocol; only used when direction is 'out'.

Example:

INTERRUPT transfers

Interrupt transfers are used to small amount of time sensitive data. Since all USB communication is initiated by the host, host code usually polls the device periodically, sending interrupt IN transfers that will make the device send data back if there is anything in the interrupt queue (maintained by the device). usb.interruptTransfer has three parameters:


ParameterDescription
connectionHandleObject received in usb.openDevice callback.
transferInfoParameter object with the values in the table below.
transferCallbackInvoked when the transfer has completed. Notice that this callback doesn't contain the device's response. The purpose of the callback is simply to notify your code that the asynchronous transfer requests has been processed.

Values for transferInfo object:

Windows
ValueDescription
direction (string)'in' or 'out'.
endpoint (integer)Defined by your device's protocol.
length (integer)Only used when direction is 'in'. Notifies the device that this is the amount of data the host is expecting in response.
data (ArrayBuffer)Defined by your device's protocol; only used when direction is 'out'.

Example:

Caveats

Not all devices can be accessed through the USB API. In general, devices are not accessible because either the Operating System's kernel or a native driver holds them off from user space code. Some examples are devices with HID profiles on OSX systems, and USB pen drives.

On most Linux systems, USB devices are mapped with read-only permissions by default. To open a device through this API, your user will need to have write access to it too. A simple solution is to set a udev rule. Create a file /etc/udev/rules.d/50-yourdevicename.rules with the following content:

Then, just restart the udev daemon: service udev restart. You can check if device permissions are set correctly by following these steps:

  • Run lsusb to find the bus and device numbers.
  • Run ls -al /dev/bus/usb/[bus]/[device]. This file should be owned by group 'plugdev' and have group write permissions.

Your app cannot do this automatically since this this procedure requires rootaccess. We recommend that you provide instructions to end-users and link to theCaveats section on this page for an explanation.

On Chrome OS, simply call usb.requestAccess. The permission broker does this for you.

  • Latest Version:

    Google Chrome 81.0.4044.138 LATEST

  • Requirements:

    Mac OS X 10.10 or later

  • Author / Product:

    Google / Google Chrome for Mac

  • Old Versions:

    Microsoft's Remote Desktop Connection is a convenient program for accessing and working with remote Windows workstations and servers. The Mac flavor of the app has been updated to version 10. How to access Microsoft Remote Desktop on your Mac by Conner Forrest in Software on June 25, 2018, 7:54 AM PST If you need to access Windows applications through your Mac, a remote desktop. Download Microsoft Remote Desktop for macOS 10.12 or later and enjoy it on your Mac. ‎Use Microsoft Remote Desktop for Mac to connect to a remote PC or virtual apps and desktops made available by your admin. Microsoft rdp for mac itunes. Use Microsoft Remote Desktop for iOS to connect to a remote PC or virtual apps and desktops made available by your admin. With Microsoft Remote Desktop, you can be productive no matter where you are. GET STARTED Configure your PC for remote access using the information at https://aka.ms/rdsetup.

  • Filename:

    googlechrome.dmg

  • Details:

    Google Chrome for Mac 2020 full offline installer setup for Mac

Google Chrome for Mac is a Internet Browser that combines a minimal design with sophisticated technology to make the Web faster, safer, and easier. Use one box for everything--type in the address bar and get suggestions for both search and Web pages. Thumbnails of your top sites let you access your favorite pages instantly with lightning speed from any new tab. Desktop shortcuts allow you to launch your favorite Web apps straight from your desktop. Google's Chrome for macOS is a popular and reliable choice for browsing webpages across multiple platforms! Download, Install or Update Google Chrome for Mac now!
Hide your real IP address and protect your privacy while online! Check out HMA! Pro VPN for Mac!
Why use Google Chrome for Mac?
Search instantly
Search and navigate from the same box. Choose from results and suggestions that appear as you type, including your recent searches and visited websites, so you can get to what you want in a snap.
Type less
Tired of filling out web forms with the same information time and time again? Autofill lets you complete forms with just one click. And it works across devices too — so you can skip all that small-screen typing.
Pick up where you left off
The tool brings your open tabs, bookmarks and recent searches from your computer to your phone or tablet, and vice versa. That way you have your web on all of your devices. Just sign in on your other devices to start syncing.
Experience a smarter web
Get the best of Google when you browse with Chrome for Mac. Chrome and Google work together to bring you more relevant suggestions and features across Google products including Voice Search and Google Now.
Make Chrome yours
Browse just the way you'd like with the app themes, apps and extentions. Get straight to your favorite web destinations with bookmarks and start pages. Once you've set up the browser, your customizations will be kept in sync across all of your devices.
If you are looking for Google Chrome for Mac alternatives, we recommend you to download Firefox for Mac or Safari for Mac.
Also Available: Download Google Chrome for Windows

Popular Posts

  • Important: Chrome will be removing support for Chrome Apps on all platforms. Chrome browser and the Chrome Web Store will continue to support extensions. Read the announcement and learn more about migrating your app.

    This document describes how to use the USB API to communicatewith USB devices. Some devices are not accessible through the USB API(see the Caveats section below for details).Chrome Apps can also connect to serial andBluetooth devices.

    Aug 11, 2018  Works great; maybe the people saying it didn\'t work forgot to restart chrome before expecting it to work, but once I restarted chrome the combinations work just fine (I\'m using it for french btw, can\'t attest to other accents).

    Samples: For examples that illustrate how Chrome Apps can connect to hardware devices, see theserial,servo, andusb samples.

    For background information about USB, see the official USB specifications.
    USB in a NutShell is a reasonable crash course that you may find helpful.

    Manifest requirement

    The USB API requires the \'usb\' permission in the manifest file:

    \'Get

    In addition, in order to prevent finger-printing, you must declare all the device types you want to access in the manifest file. Each type of USB device corresponds to a vendor id/product id (VID/PID) pair. You can use usb.getDevices to enumerate devices by their VID/PID pair.

    You must declare the VID/PID pairs for each type of device you want to use under the usbDevices permission in your app\'s manifest file, as shown in the example below:

    Note that only decimal numbers are allowed in JSON format. You cannot use hexadecimal numbers in these fields.

    Since Chrome 57, the requirement for declaring all the device types in the app manifest is relaxed for apps running as Chrome OS kiosk apps. For kiosk apps, you can use the interfaceClass permission property to request permission to access USB devices that:

    • implement a USB interface of a specific interface class
    • have a specific USB device class
    For example, the following usbDevices permission would grant an app access to all USB devices that implement a printer interface (interface class code 7), and to USB hub devices (device class code 9):

    For the list of acceptable interfaceClass values, see USB Class Codes.

    The interfaceClass property can be combined with the vendorId property to get access only to USB devices from a specific vendor, as demonstrated by the following example: Samsung k2200 scanner driver.

    Note that usbDevices permissions with interfaceClass property have effect only when the app is running in kiosk session - outside a kiosk session these permissions will be ignored.

    Finding a device

    To determine whether one or more specific devices are connected to a user\'s system, use the usb.getDevices method:


    Parameter (type)Description
    EnumerateDevicesOptions (object)An object specifying both a vendorId (long) and productId (long) used to find the correct type of device on the bus. Your manifest must declare the usbDevices permission section listing all the vendorId and deviceId pairs your app wants to access.
    callback (function)Called when the device enumeration is finished. The callback will be executed with one parameter, an array of Device objects with three properties: device, vendorId, productId. The device property is a stable identifier for a connected device. It will not change until the device is unplugged. The detail of the identifier is opaque and subject to change. Do not rely on its current type.
    If no devices are found, the array will be empty.

    Example:

    Opening a device

    Once the Device objects are returned, you can open a device usingusb.openDevice to obtain a connection handle. You can onlycommunicate with USB devices using connection handles.

    PropertyDescription
    deviceObject received in usb.getDevices callback.
    data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

    Example:

    Not every device can be opened successfully. In general, operating systemslock down many types of USB interfaces (e.g. keyboards and mice, mass storagedevices, webcams, etc.) and they cannot be claimed by user applications.On Linux (other than Chrome OS), once an interface of a device is locked down bythe OS, the whole device is locked down (because all the interfaces shares thesame device file), even if the other interfaces of the device can be used intheory. On Chrome OS, you can request access to unlocked interfaces using theusb.requestAccess method. If permitted, the permission broker willunlock the device file for you.

    To simplify the opening process, you can use the usb.findDevicesmethod, which enumerates, requests access, and opens devices in one call:

    which is equivalent to:

    USB transfers and receiving data from a device

    The USB protocol defines four types of transfers: control, bulk, isochronous and interrupt. These transfers are described below.

    Transfers can occur in both directions: device-to-host (inbound), and host-to-device (outbound). Due to the nature of the USB protocol, both inbound and outbound messages must be initiated by the host (the computer that runs the Chrome app). For inbound (device-to-host) messages, the host (initiated by your JavaScript code) sends a message flagged as \'inbound\' to the device. The details of the message depend on the device, but usually will have some identification of what you are requesting from it. The device then responds with the requested data. The device\'s response is handled by Chrome and delivered asynchronously to the callback you specify in the transfer method. An outbound (host-to-device) message is similar, but the response doesn\'t contain data returned from the device.

    For each message from the device, the specified callback will receive an event object with the following properties:


    PropertyDescription
    resultCode (integer)0 is success; other values indicate failure. An error string can be
    read from chrome.extension.lastError when a failure is
    indicated.
    data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

    Example:

    CONTROL transfers

    Control transfers are generally used to send or receive configuration or command parameters to a USB device. The controlTransfer method always sends to/reads from endpoint 0, and no claimInterface is required. The method is simple and receives three parameters:


    Parameter (types)Description
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with values from the table below. Check your USB device protocol specification for details.
    transferCallback()Invoked when the transfer has completed.

    Values for transferInfo object:

    ValueDescription
    requestType (string)\'vendor\', \'standard\', \'class\' or \'reserved\'.
    recipient (string)\'device\', \'interface\', \'endpoint\' or \'other\'.
    direction (string)\'in\' or \'out\'. The \'in\' direction is used to notify the device that
    it should send information to the host. All communication on a USB
    bus is host-initiated, so use an \'in\' transfer to allow a device to
    send information back.
    request (integer)Defined by your device\'s protocol.
    value (integer)Defined by your device\'s protocol.
    index (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (arraybuffer)Defined by your device\'s protocol, required when direction is \'out\'.

    Example:

    ISOCHRONOUS transfers

    Isochronous transfers are the most complex type of USB transfer. They are commonly used for streams of data, like video and sound. To initiate an isochronous transfer (either inbound or outbound), you must use the usb.isochronousTransfer method:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    isochronousTransferInfoParameter object with the values in the table below.
    transferCallback()Invoked when the transfer has completed.

    Values for isochronousTransferInfo object:

    ValueDescription
    transferInfo (object)An object with the following attributes:
    direction (string): \'in\' or \'out\'.
    endpoint (integer): defined by your device. Usually can be found by looking at an USB instrospection tool, like lsusb -v
    length (integer): only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    Should be AT LEAST packets × packetLength.
    data (arraybuffer): defined by your device\'s protocol; only used when direction is \'out\'.
    packets (integer)Total number of packets expected in this transfer.
    packetLength (integer)Expected length of each packet in this transfer.

    Example:

    Notes: One isochronous transfer will contain isoTransferInfo.packets packets of isoTransferInfo.packetLength bytes. If it is an inbound transfer (your code requested data from the device), the data field in the onUsbEvent will be an ArrayBuffer of size transferInfo.length. It is your duty to walk through this ArrayBuffer and extract the different packets, each starting at a multiple of isoTransferInfo.packetLength bytes.
    If you are expecting a stream of data from the device, remember that you will have to send one \'inbound\' transfer for each transfer you expect back. USB devices don\'t send transfers to the USB bus unless the host explicitly requests them through \'inbound\' transfers.

    BULK transfers

    Bulk transfers are commonly used to transfer a large amount of non-time-sensitive data in a reliable way. usb.bulkTransfer has three parameters:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with the values in the table below.
    transferCallbackInvoked when the transfer has completed.

    Values for transferInfo object:

    ValueDescription
    direction (string)\'in\' or \'out\'.
    endpoint (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (ArrayBuffer)Defined by your device\'s protocol; only used when direction is \'out\'.

    Example:

    INTERRUPT transfers

    Interrupt transfers are used to small amount of time sensitive data. Since all USB communication is initiated by the host, host code usually polls the device periodically, sending interrupt IN transfers that will make the device send data back if there is anything in the interrupt queue (maintained by the device). usb.interruptTransfer has three parameters:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with the values in the table below.
    transferCallbackInvoked when the transfer has completed. Notice that this callback doesn\'t contain the device\'s response. The purpose of the callback is simply to notify your code that the asynchronous transfer requests has been processed.

    Values for transferInfo object:

    \'Windows\'
    ValueDescription
    direction (string)\'in\' or \'out\'.
    endpoint (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (ArrayBuffer)Defined by your device\'s protocol; only used when direction is \'out\'.

    Example:

    Caveats

    Not all devices can be accessed through the USB API. In general, devices are not accessible because either the Operating System\'s kernel or a native driver holds them off from user space code. Some examples are devices with HID profiles on OSX systems, and USB pen drives.

    On most Linux systems, USB devices are mapped with read-only permissions by default. To open a device through this API, your user will need to have write access to it too. A simple solution is to set a udev rule. Create a file /etc/udev/rules.d/50-yourdevicename.rules with the following content:

    Then, just restart the udev daemon: service udev restart. You can check if device permissions are set correctly by following these steps:

    • Run lsusb to find the bus and device numbers.
    • Run ls -al /dev/bus/usb/[bus]/[device]. This file should be owned by group \'plugdev\' and have group write permissions.

    Your app cannot do this automatically since this this procedure requires rootaccess. We recommend that you provide instructions to end-users and link to theCaveats section on this page for an explanation.

    On Chrome OS, simply call usb.requestAccess. The permission broker does this for you.

    • Latest Version:

      Google Chrome 81.0.4044.138 LATEST

    • Requirements:

      Mac OS X 10.10 or later

    • Author / Product:

      Google / Google Chrome for Mac

    • Old Versions:

      Microsoft\'s Remote Desktop Connection is a convenient program for accessing and working with remote Windows workstations and servers. The Mac flavor of the app has been updated to version 10. How to access Microsoft Remote Desktop on your Mac by Conner Forrest in Software on June 25, 2018, 7:54 AM PST If you need to access Windows applications through your Mac, a remote desktop. Download Microsoft Remote Desktop for macOS 10.12 or later and enjoy it on your Mac. ‎Use Microsoft Remote Desktop for Mac to connect to a remote PC or virtual apps and desktops made available by your admin. Microsoft rdp for mac itunes. Use Microsoft Remote Desktop for iOS to connect to a remote PC or virtual apps and desktops made available by your admin. With Microsoft Remote Desktop, you can be productive no matter where you are. GET STARTED Configure your PC for remote access using the information at https://aka.ms/rdsetup.

    • Filename:

      googlechrome.dmg

    • Details:

      Google Chrome for Mac 2020 full offline installer setup for Mac

    Google Chrome for Mac is a Internet Browser that combines a minimal design with sophisticated technology to make the Web faster, safer, and easier. Use one box for everything--type in the address bar and get suggestions for both search and Web pages. Thumbnails of your top sites let you access your favorite pages instantly with lightning speed from any new tab. Desktop shortcuts allow you to launch your favorite Web apps straight from your desktop. Google\'s Chrome for macOS is a popular and reliable choice for browsing webpages across multiple platforms! Download, Install or Update Google Chrome for Mac now!
    Hide your real IP address and protect your privacy while online! Check out HMA! Pro VPN for Mac!
    Why use Google Chrome for Mac?
    Search instantly
    Search and navigate from the same box. Choose from results and suggestions that appear as you type, including your recent searches and visited websites, so you can get to what you want in a snap.
    Type less
    Tired of filling out web forms with the same information time and time again? Autofill lets you complete forms with just one click. And it works across devices too — so you can skip all that small-screen typing.
    Pick up where you left off
    The tool brings your open tabs, bookmarks and recent searches from your computer to your phone or tablet, and vice versa. That way you have your web on all of your devices. Just sign in on your other devices to start syncing.
    Experience a smarter web
    Get the best of Google when you browse with Chrome for Mac. Chrome and Google work together to bring you more relevant suggestions and features across Google products including Voice Search and Google Now.
    Make Chrome yours
    Browse just the way you\'d like with the app themes, apps and extentions. Get straight to your favorite web destinations with bookmarks and start pages. Once you\'ve set up the browser, your customizations will be kept in sync across all of your devices.
    If you are looking for Google Chrome for Mac alternatives, we recommend you to download Firefox for Mac or Safari for Mac.
    Also Available: Download Google Chrome for Windows
    ...'>Expecting Google Chrome For Mac(07.04.2020)
  • Important: Chrome will be removing support for Chrome Apps on all platforms. Chrome browser and the Chrome Web Store will continue to support extensions. Read the announcement and learn more about migrating your app.

    This document describes how to use the USB API to communicatewith USB devices. Some devices are not accessible through the USB API(see the Caveats section below for details).Chrome Apps can also connect to serial andBluetooth devices.

    Aug 11, 2018  Works great; maybe the people saying it didn\'t work forgot to restart chrome before expecting it to work, but once I restarted chrome the combinations work just fine (I\'m using it for french btw, can\'t attest to other accents).

    Samples: For examples that illustrate how Chrome Apps can connect to hardware devices, see theserial,servo, andusb samples.

    For background information about USB, see the official USB specifications.
    USB in a NutShell is a reasonable crash course that you may find helpful.

    Manifest requirement

    The USB API requires the \'usb\' permission in the manifest file:

    \'Get

    In addition, in order to prevent finger-printing, you must declare all the device types you want to access in the manifest file. Each type of USB device corresponds to a vendor id/product id (VID/PID) pair. You can use usb.getDevices to enumerate devices by their VID/PID pair.

    You must declare the VID/PID pairs for each type of device you want to use under the usbDevices permission in your app\'s manifest file, as shown in the example below:

    Note that only decimal numbers are allowed in JSON format. You cannot use hexadecimal numbers in these fields.

    Since Chrome 57, the requirement for declaring all the device types in the app manifest is relaxed for apps running as Chrome OS kiosk apps. For kiosk apps, you can use the interfaceClass permission property to request permission to access USB devices that:

    • implement a USB interface of a specific interface class
    • have a specific USB device class
    For example, the following usbDevices permission would grant an app access to all USB devices that implement a printer interface (interface class code 7), and to USB hub devices (device class code 9):

    For the list of acceptable interfaceClass values, see USB Class Codes.

    The interfaceClass property can be combined with the vendorId property to get access only to USB devices from a specific vendor, as demonstrated by the following example: Samsung k2200 scanner driver.

    Note that usbDevices permissions with interfaceClass property have effect only when the app is running in kiosk session - outside a kiosk session these permissions will be ignored.

    Finding a device

    To determine whether one or more specific devices are connected to a user\'s system, use the usb.getDevices method:


    Parameter (type)Description
    EnumerateDevicesOptions (object)An object specifying both a vendorId (long) and productId (long) used to find the correct type of device on the bus. Your manifest must declare the usbDevices permission section listing all the vendorId and deviceId pairs your app wants to access.
    callback (function)Called when the device enumeration is finished. The callback will be executed with one parameter, an array of Device objects with three properties: device, vendorId, productId. The device property is a stable identifier for a connected device. It will not change until the device is unplugged. The detail of the identifier is opaque and subject to change. Do not rely on its current type.
    If no devices are found, the array will be empty.

    Example:

    Opening a device

    Once the Device objects are returned, you can open a device usingusb.openDevice to obtain a connection handle. You can onlycommunicate with USB devices using connection handles.

    PropertyDescription
    deviceObject received in usb.getDevices callback.
    data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

    Example:

    Not every device can be opened successfully. In general, operating systemslock down many types of USB interfaces (e.g. keyboards and mice, mass storagedevices, webcams, etc.) and they cannot be claimed by user applications.On Linux (other than Chrome OS), once an interface of a device is locked down bythe OS, the whole device is locked down (because all the interfaces shares thesame device file), even if the other interfaces of the device can be used intheory. On Chrome OS, you can request access to unlocked interfaces using theusb.requestAccess method. If permitted, the permission broker willunlock the device file for you.

    To simplify the opening process, you can use the usb.findDevicesmethod, which enumerates, requests access, and opens devices in one call:

    which is equivalent to:

    USB transfers and receiving data from a device

    The USB protocol defines four types of transfers: control, bulk, isochronous and interrupt. These transfers are described below.

    Transfers can occur in both directions: device-to-host (inbound), and host-to-device (outbound). Due to the nature of the USB protocol, both inbound and outbound messages must be initiated by the host (the computer that runs the Chrome app). For inbound (device-to-host) messages, the host (initiated by your JavaScript code) sends a message flagged as \'inbound\' to the device. The details of the message depend on the device, but usually will have some identification of what you are requesting from it. The device then responds with the requested data. The device\'s response is handled by Chrome and delivered asynchronously to the callback you specify in the transfer method. An outbound (host-to-device) message is similar, but the response doesn\'t contain data returned from the device.

    For each message from the device, the specified callback will receive an event object with the following properties:


    PropertyDescription
    resultCode (integer)0 is success; other values indicate failure. An error string can be
    read from chrome.extension.lastError when a failure is
    indicated.
    data (arraybuffer)Contains the data sent by the device if the transfer was inbound.

    Example:

    CONTROL transfers

    Control transfers are generally used to send or receive configuration or command parameters to a USB device. The controlTransfer method always sends to/reads from endpoint 0, and no claimInterface is required. The method is simple and receives three parameters:


    Parameter (types)Description
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with values from the table below. Check your USB device protocol specification for details.
    transferCallback()Invoked when the transfer has completed.

    Values for transferInfo object:

    ValueDescription
    requestType (string)\'vendor\', \'standard\', \'class\' or \'reserved\'.
    recipient (string)\'device\', \'interface\', \'endpoint\' or \'other\'.
    direction (string)\'in\' or \'out\'. The \'in\' direction is used to notify the device that
    it should send information to the host. All communication on a USB
    bus is host-initiated, so use an \'in\' transfer to allow a device to
    send information back.
    request (integer)Defined by your device\'s protocol.
    value (integer)Defined by your device\'s protocol.
    index (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (arraybuffer)Defined by your device\'s protocol, required when direction is \'out\'.

    Example:

    ISOCHRONOUS transfers

    Isochronous transfers are the most complex type of USB transfer. They are commonly used for streams of data, like video and sound. To initiate an isochronous transfer (either inbound or outbound), you must use the usb.isochronousTransfer method:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    isochronousTransferInfoParameter object with the values in the table below.
    transferCallback()Invoked when the transfer has completed.

    Values for isochronousTransferInfo object:

    ValueDescription
    transferInfo (object)An object with the following attributes:
    direction (string): \'in\' or \'out\'.
    endpoint (integer): defined by your device. Usually can be found by looking at an USB instrospection tool, like lsusb -v
    length (integer): only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    Should be AT LEAST packets × packetLength.
    data (arraybuffer): defined by your device\'s protocol; only used when direction is \'out\'.
    packets (integer)Total number of packets expected in this transfer.
    packetLength (integer)Expected length of each packet in this transfer.

    Example:

    Notes: One isochronous transfer will contain isoTransferInfo.packets packets of isoTransferInfo.packetLength bytes. If it is an inbound transfer (your code requested data from the device), the data field in the onUsbEvent will be an ArrayBuffer of size transferInfo.length. It is your duty to walk through this ArrayBuffer and extract the different packets, each starting at a multiple of isoTransferInfo.packetLength bytes.
    If you are expecting a stream of data from the device, remember that you will have to send one \'inbound\' transfer for each transfer you expect back. USB devices don\'t send transfers to the USB bus unless the host explicitly requests them through \'inbound\' transfers.

    BULK transfers

    Bulk transfers are commonly used to transfer a large amount of non-time-sensitive data in a reliable way. usb.bulkTransfer has three parameters:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with the values in the table below.
    transferCallbackInvoked when the transfer has completed.

    Values for transferInfo object:

    ValueDescription
    direction (string)\'in\' or \'out\'.
    endpoint (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (ArrayBuffer)Defined by your device\'s protocol; only used when direction is \'out\'.

    Example:

    INTERRUPT transfers

    Interrupt transfers are used to small amount of time sensitive data. Since all USB communication is initiated by the host, host code usually polls the device periodically, sending interrupt IN transfers that will make the device send data back if there is anything in the interrupt queue (maintained by the device). usb.interruptTransfer has three parameters:


    ParameterDescription
    connectionHandleObject received in usb.openDevice callback.
    transferInfoParameter object with the values in the table below.
    transferCallbackInvoked when the transfer has completed. Notice that this callback doesn\'t contain the device\'s response. The purpose of the callback is simply to notify your code that the asynchronous transfer requests has been processed.

    Values for transferInfo object:

    \'Windows\'
    ValueDescription
    direction (string)\'in\' or \'out\'.
    endpoint (integer)Defined by your device\'s protocol.
    length (integer)Only used when direction is \'in\'. Notifies the device that this is the amount of data the host is expecting in response.
    data (ArrayBuffer)Defined by your device\'s protocol; only used when direction is \'out\'.

    Example:

    Caveats

    Not all devices can be accessed through the USB API. In general, devices are not accessible because either the Operating System\'s kernel or a native driver holds them off from user space code. Some examples are devices with HID profiles on OSX systems, and USB pen drives.

    On most Linux systems, USB devices are mapped with read-only permissions by default. To open a device through this API, your user will need to have write access to it too. A simple solution is to set a udev rule. Create a file /etc/udev/rules.d/50-yourdevicename.rules with the following content:

    Then, just restart the udev daemon: service udev restart. You can check if device permissions are set correctly by following these steps:

    • Run lsusb to find the bus and device numbers.
    • Run ls -al /dev/bus/usb/[bus]/[device]. This file should be owned by group \'plugdev\' and have group write permissions.

    Your app cannot do this automatically since this this procedure requires rootaccess. We recommend that you provide instructions to end-users and link to theCaveats section on this page for an explanation.

    On Chrome OS, simply call usb.requestAccess. The permission broker does this for you.

    • Latest Version:

      Google Chrome 81.0.4044.138 LATEST

    • Requirements:

      Mac OS X 10.10 or later

    • Author / Product:

      Google / Google Chrome for Mac

    • Old Versions:

      Microsoft\'s Remote Desktop Connection is a convenient program for accessing and working with remote Windows workstations and servers. The Mac flavor of the app has been updated to version 10. How to access Microsoft Remote Desktop on your Mac by Conner Forrest in Software on June 25, 2018, 7:54 AM PST If you need to access Windows applications through your Mac, a remote desktop. Download Microsoft Remote Desktop for macOS 10.12 or later and enjoy it on your Mac. ‎Use Microsoft Remote Desktop for Mac to connect to a remote PC or virtual apps and desktops made available by your admin. Microsoft rdp for mac itunes. Use Microsoft Remote Desktop for iOS to connect to a remote PC or virtual apps and desktops made available by your admin. With Microsoft Remote Desktop, you can be productive no matter where you are. GET STARTED Configure your PC for remote access using the information at https://aka.ms/rdsetup.

    • Filename:

      googlechrome.dmg

    • Details:

      Google Chrome for Mac 2020 full offline installer setup for Mac

    Google Chrome for Mac is a Internet Browser that combines a minimal design with sophisticated technology to make the Web faster, safer, and easier. Use one box for everything--type in the address bar and get suggestions for both search and Web pages. Thumbnails of your top sites let you access your favorite pages instantly with lightning speed from any new tab. Desktop shortcuts allow you to launch your favorite Web apps straight from your desktop. Google\'s Chrome for macOS is a popular and reliable choice for browsing webpages across multiple platforms! Download, Install or Update Google Chrome for Mac now!
    Hide your real IP address and protect your privacy while online! Check out HMA! Pro VPN for Mac!
    Why use Google Chrome for Mac?
    Search instantly
    Search and navigate from the same box. Choose from results and suggestions that appear as you type, including your recent searches and visited websites, so you can get to what you want in a snap.
    Type less
    Tired of filling out web forms with the same information time and time again? Autofill lets you complete forms with just one click. And it works across devices too — so you can skip all that small-screen typing.
    Pick up where you left off
    The tool brings your open tabs, bookmarks and recent searches from your computer to your phone or tablet, and vice versa. That way you have your web on all of your devices. Just sign in on your other devices to start syncing.
    Experience a smarter web
    Get the best of Google when you browse with Chrome for Mac. Chrome and Google work together to bring you more relevant suggestions and features across Google products including Voice Search and Google Now.
    Make Chrome yours
    Browse just the way you\'d like with the app themes, apps and extentions. Get straight to your favorite web destinations with bookmarks and start pages. Once you\'ve set up the browser, your customizations will be kept in sync across all of your devices.
    If you are looking for Google Chrome for Mac alternatives, we recommend you to download Firefox for Mac or Safari for Mac.
    Also Available: Download Google Chrome for Windows
    ...'>Expecting Google Chrome For Mac(07.04.2020)