Patent Description:
Today, many vehicles are equipped with head units that include displays, touchscreens, speakers, microphones, and/or other components for receiving user input and providing output. Some of these head units also include wired and/or wireless ports to communicate with other electronic devices in the vehicle.

<CIT> describes a procedure for synchronising mobile and vehicle devices. The mobile device calculates an estimated location based on local sensor information and location information received from the vehicle device.

<CIT> describes a system for suggesting alternative travel destinations to user after the user has requested travel directions to a requested travel destination. A likelihood that the user may wish to travel to one or more alternative destinations is calculated and the most likely destinations are displayed to the user for selection instead of the requested travel destination.

Generally speaking, the techniques described below allow a portable user device, such as a smartphone, to safely and efficiently co-operate with various components in an automotive environment. The portable user device can provide video, audio, and sensor data to the head unit of a vehicle for display and/or playback via the user interface ("UI") devices embedded in the vehicle. Moreover, the portable user device can receive sensor data, environmental data and other data indicative of the current condition of the vehicle, user commands, and other information from the head unit to improve the quality of information provided to the user.

According to the invention a method is provided as in claim <NUM> and a system as in claim <NUM>.

One aspect of these techniques is a communication protocol that allows the portable device to access various components of the vehicle, such as one or more displays, audio speakers, speed sensors, or temperature sensors, for example, using a messaging scheme independent of the make or brand of the vehicle. To this end, the portable device and the head unit can exchange messages in which components of the vehicle are referenced and described in a flexible format as low-level devices. In this manner, the portable device can implement much of the logic for interacting with vehicle components, and the head unit conversely need not support complicated logic for describing and presenting vehicle components to the portable device. Further, the portable device can interact with various vehicles having different configurations and software capabilities. Still further, the portable device can implement discovery services to identify components available at the vehicle, rather than rely on pre-configured settings.

Another aspect of these techniques is management of navigation focus, or substantially exclusive use of video, audio, tactile, and other output components of the head unit for the purposes of providing navigation instructions. When both the head unit and the portable device are capable of providing navigation instructions, the head unit and the portable device, when connected, can effectively compete for the output components of the head unit. To avoid driver confusion, the portable device or the head unit can transmit a message to the other device, requesting navigation focus. The other device can reject or grant the request. In an example implementation, the policy regarding focus allocation is implemented in the head unit in accordance with the requirements of the vehicle manufacturer.

Yet another aspect of these techniques is management of video focus, or substantially exclusive use of the one or several displays of the head unit. The portable device and the unit can exchange messages to determine whether the video output from the portable device ("projected UI") or from a component operating within the head unit ("native UI") should be displayed via the head unit. The projected UI can include various screens generated by software applications executing on the portable device, which can include mapping applications, calling applications, music applications, etc. The native UI can include such sensor readings as speed and fuel level, for example, as well as video feed from the rear review camera, safety announcements (e.g., "seat belt is off'). The management of the video focus can be based on user commands, safety factors, such as when the head unit acquires video focus to display video from the rear view camera, negotiations between the portable device and the head unit, etc..

Still another aspect of these techniques is management of audio focus, or substantially exclusive use of the one or several audio output components embedded in the vehicle. The portable device and the head unit can manage audio focus independently of video focus and/or navigation focus. To support such scenarios as playing back a text-to-speech (TTS) notification while the head unit is streaming audio from the portable device or playing a navigation instruction received from the portable device while the head unit is playing FM radio, the portable device and the head unit can exchange messages to negotiate audio focus allocation. In some cases, the messages indicate not only requests to gain or lose focus but also "ducking" conditions, types of audio, etc. The portable device and the head unit can support multiple simultaneous audio channels for different types of audio data.

The techniques of this disclosure further allow the portable device and the head unit, each of which may include multiple sensors of varying capability and accuracy, to combine some of the sensor output to improve positioning, measurements of wheelspeed, compass readings, etc. In some scenarios, the portable device and the sensor can implement heuristic techniques to detect misalignment in estimating similar kinematic parameters such as speed, based on different sensor readings. For example, the portable device can report small amounts of movement based on its sensor readings, while the head unit can access gear information from the vehicle and report that the vehicle is stopped. The portable device and/or the head unit can determine that the user is likely moving the portable device within the vehicle, and adjust the sensor readings accordingly.

Further, according to the techniques of this disclosure, the portable device can generate a simulated route for testing various functions of the system including the portable device and the head unit, and provide the simulated route to the head unit. The head unit in turn can provide the parameters of the simulated route to other components of the vehicle, generate various sensor readings, and provide the sensor readings to the portable device. Thus, the portable device can generate a simulated position of the vehicle and cause the head unit to provide the simulated position to components that the portable device cannot access directly, and that can be affected by the simulated position. For example, the headlights of the vehicle may automatically turn on based in part of the current position of the vehicle.

Another aspect of these techniques are safety features such as the lockout of the portable device when the portable device is connected to head unit. According to one implementation, when the portable device provides projected UI to the head unit, the portable device does not allow the user to access other functionality of the portable device without unplugging the portable device. Thus, the user cannot access a text messaging application, which makes driving unsafe, without losing access to the projected UI and, in some cases, without disrupting music streaming or other ongoing interactions between the portable device and the head unit.

Another aspect of the techniques is the ability of the portable device to selectively lock out features of the projected and/or native UI in view of environmental conditions. The head unit notifies the portable device of at least some of these environmental conditions, such as the current speed of the vehicle, and various events such as windshield wiper activation. In view of certain notifications received from the head unit, the portable device can determine that certain UI features have become unsafe, unlikely to be used, or simply unnecessary. More generally, the portable device can adjust its output and/or the output of the head unit in view of various environmental conditions. In one example scenario, the portable device deactivates the display of a keyboard in response to detecting that the vehicle is moving. In another example scenario, the portable device detects that the vehicle is moving at a certain speed, and that it is probably raining as the windshield wipers are on. The portable device limits the list of geographic search results to one page, even though a multi-page list of results is available, so as to prevent the user from scrolling or paging through the list while driving.

Still another aspect of these techniques is changing the visual presentation of a digital map in view of the connection between the portable device, where the digital map is rendered, and the head unit, where the digital map is presented. The head unit can report various vehicle- or head-unit-specific parameters when the portable device connects to the head unit, and the portable device can determine which colors should be used and whether certain geographic features should be displayed, for example. The portable device can render digital map by applying different styles, or sets of visual attributes, to the same map feature geometry to generate different visualizations of the same geographic area. Thus, using transparent color schemes defined by a certain style, the portable device can effectively hide geographic features that are typically less relevant in an automotive context, such as public transportation data. As another, a certain style can specify thicker lines for roads when the digital map is being used in an automotive context. The portable device can automatically switch between different styles when the user connects to the portable device to the head unit or, conversely, when the user unplugs the portable device from the head unit.

Another aspect of these techniques is continuity between executing certain tasks executed on a portable device and executing related tasks on a head unit of a vehicle, when the portable device detects a new connection to the head unit. For example, when a user explicitly or implicitly selects a certain geographic location via her portable device and later connects the portable device to the head unit, the portable device automatically triggers display of driving directions or other information related to the geographic location via the head unit. To this end, the portable device can request control of the display device embedded in the head unit. Depending on the implementation and/or configuration of the head unit, the portable device can acquire the control automatically or upon the user confirming the transfer of control via the head unit.

At least some of these techniques discussed above can be used with self-driving vehicles. For example, a user can couple his or her portable device to the head unit of a self-driving vehicle to use the portable device as a source of navigation directions the vehicle can autonomously follow or multimedia content.

Referring first to <FIG>, an example communication system <NUM>, in which some or all of the techniques outlined above can be implemented, includes a portable user device (or simply "portable device") <NUM> communicatively coupled to a vehicle subsystem <NUM> of a vehicle (not shown). The vehicle subsystem <NUM> can include a head unit <NUM> and a set of vehicle sensors <NUM>. The portable user device <NUM> is configured to communicate with a network server <NUM> via a communication network <NUM>, which can be a wide area network such as the Internet. The network server <NUM> can be connected to several databases including a map database <NUM> and a geospatial database <NUM>.

The portable user device <NUM> can be any portable computing device such as a smartphone, a tablet computer, a wearable computer, etc. An example implementation of the portable user device <NUM> is discussed with reference to <FIG>. The portable user device <NUM> communicates with the head unit <NUM> via a communication link <NUM>, which may be wired (e.g., Universal Serial Bus (USB) or wireless (e.g., Bluetooth)). The portable user device <NUM> can also communicate with various content providers, servers, etc., via a wireless communication network such as a fourth- or third-generation cellular network (<NUM> or <NUM>, respectively).

In operation, the portable user device <NUM> provides the head unit <NUM> with information related to navigation, which may include digital map images, text, and audio. The head unit <NUM> can display this information via a display such as a touchscreen. Further, the head unit <NUM> can include various hardware input controls such as buttons, knobs, etc. An example implementation of the head unit <NUM> is discussed with reference to <FIG>.

The head unit <NUM> can receive data from the set of vehicle sensors <NUM> during operation. The set of vehicle sensors <NUM> can include, for example, a global positioning system (GPS) module to determine the current position of the vehicle in which the head unit <NUM> is installed, an inertial measurement unit (IMU) to measure the speed, acceleration, and current orientation of the vehicle, a barometer to determine the altitude of the vehicle, etc. Although <FIG> depicts the set of sensors <NUM> as being coupled to the head unit <NUM>, it is noted that the sensors <NUM> can also be integral components of the head unit <NUM>.

In some implementations, the communication link <NUM> operates as a component of an automotive link layer <NUM>, which can be regarded as a service that provides a communication protocol for one or more components of the portable user device <NUM> to communicate with one or more components of the head unit <NUM>. More generally, the automotive link layer <NUM> supports various functions that enable interactions between the portable user device <NUM> and the head unit <NUM>. As discussed in more detail below, the automotive link layer <NUM> can include one or more software components of the portable device <NUM> and one or more components of the head unit <NUM>.

The network server <NUM> can be implemented as a single device or a group of servers (e.g., a set of front-end servers and a set of back-end servers). Moreover, depending on the implementation, the network server <NUM> can be implemented as a single network node associated with the all the databases in the group of databases (e.g., as shown in <FIG>), or as separate network nodes associated with each of the databases in the group of databases. The network server <NUM> can include processing hardware such as one or more processors configured to execute instructions stored in a non-transitory computer-readable memory, for example. The network server <NUM> also can include a network interface using which the network server <NUM> can communicate to remote hosts such as the portable device <NUM> and the databases <NUM> and <NUM>. The network interface can support various communication protocols for wired and/or wireless communications.

In the example configuration of <FIG>, the portable user device <NUM> communicates with the network server <NUM> to access map data provided by the map database <NUM> and geospatial data provided by the geospatial database <NUM>. The databases <NUM> and <NUM> can be implemented in any suitable manner, such as relational databases implemented in dedicated storage devices, dedicated groups of storage devices, or on the network server <NUM>, for example. The map database <NUM> can store descriptions of geometry and location indications for various natural geographic features (e.g., rivers, mountains, forests) as well as artificial geographic features (e.g., roads, buildings, parks). The map data can include, among other data, vector graphics data, raster image data, and text data. The geospatial database <NUM> can store information regarding various points of interest (e.g., monuments, museums, landmark buildings), businesses (e.g., restaurants, hotels, stores), train stations and bus stops, boundaries of neighborhoods, and other geographic entities. Descriptions of geographic entities can include any number of search terms based on which the data can be indexed or otherwise organized for quick search and retrieval.

The portable device <NUM> can operate in an online mode, in which the portable device <NUM> has a sufficiently reliable network connection to the network server <NUM>, with a sufficiently high capacity. In the online mode, the user device <NUM> requests map data, geospatial search results, other geographic data, as well as non-geographic data such as music streams, from the network server <NUM>. When the portable device <NUM> cannot establish a network connection to the network server <NUM> due to poor network coverage, for example, or when the user of the portable device <NUM> explicitly disables the network connection, the portable device <NUM> can operate in an offline mode. The portable device <NUM> can store offline road map data, geospatial data, and other data in cache, which can be implemented in the persistent memory of the portable device <NUM>, for example.

In general, the example communication system <NUM> can include processing hardware of any suitable type, configured to implement the techniques of this disclosure. The processing hardware can include one or more processors on one or more computing devices, one or more servers, a distributed network, etc..

Now referring to <FIG>, a portable user device <NUM> can operate in the communication system <NUM> (as the portable user device <NUM>, for example) or in another suitable computing environment. The portable user device <NUM> includes one or more processor(s) <NUM>, such as a central processing unit (CPU), for example. The portable user device <NUM> also includes a memory <NUM> readable by the one or more processor(s) <NUM>. The memory <NUM> can include one or several persistent memory modules such as a flash memory, hard disc, optical disc, etc. and/or one or several non-persistent memory modules such as a Random Access Memory (RAM) module. In some implementations, the one or more processor(s) <NUM> also include a Graphics Processing Unit (GPU) to more accurately and efficiently render graphics content. Further, the portable user device <NUM> can include one or more long-range communication interface(s) <NUM> that support a scheme such as <NUM> (Wi-Fi®) or a suitable telephony protocol, for example, and one or more short-range communication interface(s) <NUM> that support a scheme such as Bluetooth®, Wi-Fi Direct®, or USB, for example.

The portable user device <NUM> further includes various input and output devices such as a touchscreen <NUM>, a microphone <NUM>, and speaker(s) <NUM>. Additionally, the portable user device <NUM> includes one or more sensor(s) <NUM>, which may include a GPS sensor, an acceleration sensor, a gyro sensor, a temperature sensor, a proximity sensor, etc. The portable user device <NUM> in some implementations can determine its current location using the communication interface(s) <NUM> and <NUM> to locate Wi-Fi hotspots having known positions and perform triangulation. The components <NUM> - <NUM> can be interconnected via a digital bus, for example.

The memory <NUM> stores a variety of software components or modules including a mobile platform <NUM>, a protocol sender <NUM>, automotive application programming interfaces (APIs) <NUM>, and software applications including automotive applications (Apps) <NUM>. The software modules can include compiled instructions and/or instructions in any suitable programmable language interpretable at runtime. The software modules <NUM> - <NUM> execute on the one or more processor(s) <NUM>.

The mobile platform <NUM> can include an operating system (OS) that runs the portable user device <NUM>. As such, the mobile platform <NUM> includes various drivers that support the functions of the operating system. For example, the mobile platform <NUM> includes a virtual displays driver, which defines how information or data (e.g., text, images, alphanumeric characters, etc.) is displayed by the portable user device <NUM> (e.g., via the touchscreen <NUM>). As another example, the mobile platform <NUM> includes a media encoder and a media player driver. The media encoder operates to encode and/or decode media signals (e.g., video, audio, etc.), while the media player driver defines how these media signals are played or broadcasted by the portable user device <NUM> (e.g., via the speaker(s) <NUM>). As yet another example, the mobile platform <NUM> includes a Wi-Fi Direct/USB driver, which specifies how communication schemes, such as Wi-Fi Direct or USB, are processed by the portable user device <NUM> (e.g., via the communication interface(s) <NUM> and <NUM>). As a further example, the mobile platform <NUM> includes an input injection driver, which defines how user inputs are received or acquired by the portable user device <NUM> (e.g., via a virtual keyword on the touchscreen <NUM>). In addition, the mobile platform <NUM> includes a car mode driver, which specifies how the portable user device <NUM> can be enabled to support in-car usage such as making calls, using navigation, listening to music, etc., while driving the vehicle.

The protocol sender <NUM> can operate as part of the automotive link layer <NUM> of <FIG>, for example. The protocol sender <NUM> can implement a communication protocol for exchanging sensor data, user commands, device-to-device commands, audio commands, audio streams, video streams, and other data with another device, such as the head unit <NUM> of <FIG>. The protocol sender <NUM> can plug into the interfaces of the mobile platform <NUM>, such as video, audio, connectivity, input, etc. Some of the features of the communication protocol are discussed in more detail below.

The portable device <NUM> can communicate with a head unit of a vehicle via the short-range communication interface(s) <NUM>. The portable user device <NUM> and the head unit can support one or several protocols layered over the general-purpose protocol supported by the short-range communication interface(s) <NUM> and the corresponding short-range communication interface of the head unit (such as Bluetooth®, Wi-Fi Direct®, or USB). As a more specific example, the protocol sender <NUM> and the protocol receiver <NUM> (see <FIG> below) can support a protocol discussed in more detail below, layered over Android Open Accessory Protocol (AOAP), which in turn can be layered over USB. In one such implementation, the portable device <NUM> operates as a USB accessory, and the head unit operates as a USB host.

The automotive APIs <NUM> can receive and transmit data via the protocol sender <NUM>. These APIs define a standardized interface for developers to create software applications that utilize the head unit of a vehicle to interact with the driver. More particularly, the automotive APIs <NUM> allow the portable user device <NUM> to access various parameters, functions, or services of a vehicle. In particular, with reference to <FIG>, the automotive APIs <NUM> can allow the portable user device <NUM> to access data or information gathered by the set of vehicle sensors <NUM>. As illustrated in <FIG>, the example set of automotive APIs <NUM> includes a gas query interface that allows the device <NUM> to receive information regarding the current gas level of the vehicle and, in some implementations, more robust information such as fuel efficiency, historical fuel consumption, etc. The automotive APIs <NUM> further include a speed query interface to retrieve information regarding the current speed of the vehicle, a wipers query interface to determine whether the windshield wipers are currently active (and, in some implementations, at what rate), a revolution per minute (RPM) query interface to retrieve data regarding the RPM readings of the vehicle, a tires query interface to determine the conditions of the tires, and a query radio interface to determine the status of the radio component embedded in the vehicle. More generally, the set of automotive APIs <NUM> can include any suitable functions for retrieving current and/or historical data from the vehicle.

In general, the automotive APIs <NUM> can be implemented for use with any suitable programming language, including those currently known in the art. Further, the automotive APIs <NUM> can be provided in different versions for different respective operating systems.

The automotive applications <NUM> can provide applications that can operate in an automotive environment and, in some cases, other environments. For example, the automotive applications <NUM> can include a geographic/mapping application 126A that processes map data stored offline or received from an online database (e.g., the database <NUM> of <FIG>) and generates interactive digital maps for display via the touchscreen <NUM> and/or the head unit of a vehicle. The geographic/mapping application 126A can also receive and process geospatial queries, such as requests to find nearby restaurants or gas stations, retrieve and display navigation directions, etc. Other examples of the automotive applications <NUM> can include a calling application for placing and/or receiving phone calls via the long-range communication interface <NUM>, a voice input application that permits users to enter voice commands to control the device <NUM>, and a music application that allows users to listen to music using the device <NUM>. The music application can stream music in an online mode or playback audio files (not shown) stored in the memory <NUM>.

Next, <FIG> illustrates an example head unit <NUM> which can operate as the head unit <NUM> of <FIG>, for example. The head unit <NUM> includes one or more processor(s) <NUM>, a memory <NUM>, which can be generally similar to the processor(s) <NUM> and the memory <NUM> of <FIG>. The head unit <NUM> can communicate with a portable device, such as the portable device <NUM>, via the one or more short-range communication interface(s) <NUM>, which can wired and/or wireless. Similar to the short-range communication interface(s) <NUM>, the short-range communication interface(s) <NUM> can support Bluetooth®, Wi-Fi Direct®, USB, or another suitable communication protocol.

The head unit <NUM> also can include a touchscreen <NUM>, which typically is larger, and has higher density, than the touchscreen <NUM> of the portable device <NUM>. The touchscreen <NUM> can serve as the main console display of the head unit <NUM>. In other implementations, the head unit <NUM> includes a display that does not receive touch input, and receives input via buttons, knobs, and other input devices. Further, the head unit <NUM> in some implementations can include multiple display devices. Similarly, the head unit <NUM> can include a microphone <NUM>, which can be a high-quality microphone disposed in the housing of the head unit or elsewhere in the vehicle.

Further, the head unit <NUM> can have access to sensors <NUM>, which can include a GPS location sensor, a dead reckoning position sensor, a mechanical speed sensor, a compass heading sensor, such as a gyroscope, an accelerometer, a thermometer, etc. Further, the head unit <NUM> can have access to indicators <NUM>, such as windshield wiper status indicators, car gear indicators, window lock indicators, etc. In general, the head unit <NUM> can include, or have access to, suitable any number of components that reports measurements, settings, configurations, and parameters of the vehicle.

The memory <NUM> also stores a variety of software modules including a head unit OS <NUM>, an OS adaptation layer <NUM> and a native human-machine-interface (HMI) <NUM>. Each of the modules <NUM> - <NUM> can be implemented, for example, using software instructions executable on the one or more processor(s) <NUM>.

The OS adaptation layer <NUM> includes a protocol receiver <NUM>, which can implement the same protocol as the protocol sender <NUM> of <FIG>. In this manner, the head unit <NUM> can communicate with the portable device <NUM> or another computing device that implements the protocol sender <NUM>. The protocol receiver <NUM> and the protocol sender <NUM> can operate as parts of the automotive link layer <NUM> of <FIG>.

The native HMI <NUM> includes functions for accessing various functions of the vehicle. For example, the native HMI <NUM> can support functions for invoking the home screen that displays basic vehicle information (e.g., gear, speed, fuel level), activating the AM/FM radio, placing a phone call. Some of the functions of the HMI <NUM>, such as the phone function, access the protocol receiver <NUM> to establish a communication link with the portable device.

In general, the portable device <NUM> and the head unit <NUM> can exchange several types of data via separate channels. In an example set of channels <NUM> depicted in <FIG>, the automotive applications <NUM> provide output to the head unit <NUM> via video and audio output channels <NUM>. The protocol sender <NUM> and the protocol receiver <NUM> can exchange messages via a control channel <NUM>. Vehicle data, user input events, microphone audio, and other data from the head unit OS <NUM> can travel to the portable device <NUM> via channels <NUM>.

More particularly, the control channel <NUM> can be a bidirectional channel that supports messages related to link initialization, set up of other channels such as channels <NUM> and <NUM>, etc. The video output channel 302A can be a device-to-vehicle channel that supports H. <NUM> video from the portable device <NUM> to the head unit <NUM> for display via the main console display. The audio output channel 302B can be a device-to-vehicle channel that carries audio from the portable device <NUM> to the head unit <NUM> for output via the vehicle speakers. The audio can be AAC with <NUM>/<NUM>, AAC or PCM for <NUM>, etc..

The vehicle data channel 306A can carry vehicle-associated data such as GPS data, wheelspeed, and other data from the head unit <NUM> to the portable device <NUM>. The input events channel 306B can be a vehicle-to-device channel that carries input events to the portable device <NUM> from input devices in the vehicle, such as touchscreen(s), buttons, controllers, etc. The microphone audio channel 306C can be a vehicle-to-device channel that carries, to the portable device <NUM>, audio captured by the vehicle microphone.

The set of channels <NUM> in some implementations also can include channels via which the portable device <NUM> and the head unit <NUM> can exchange information about such other services as FM radio, HVAC, etc..

Generally speaking, applications running on such portable devices as the portable device <NUM> (or <NUM>) can operate in feature-rich application frameworks, are easily upgradeable, have better connectivity than typical embedded services, support user profiles, etc. On the other hand, the head unit <NUM> (or <NUM>) illustrated above typically has a larger, high-quality, and well-positioned video display, as well as high fidelity audio, and a larger battery. In some implementations, the head unit <NUM> has a main console display as well as additional displays, and multiple speakers. Moreover, the head unit <NUM> or <NUM> has access to high-quality sensor data, such as the sensors <NUM>.

To allow each of the portable device <NUM> and the head unit <NUM> to benefit from the capability of the other device, the automotive link layer <NUM> supports messages according to which the components of the vehicle are presented to the portable device <NUM> as a collection of low-level hardware devices. The automotive link layer <NUM> accordingly can discover and access these components of the vehicle as if these components were peripherals of the portable device <NUM>. For convenience, these components of the vehicle sometimes are referred to as components of the head unit <NUM>, due to the ability of the head unit <NUM> to access these components. It will be understood, however, that some of these components can be physically disposed elsewhere in the vehicle and outside the housing of the head unit <NUM>.

The automotive link layer <NUM> can set up multiple services for component-specific communications. As used herein, a service is an endpoint for communication between the portable device and the head unit. The automotive link layer <NUM> can discover each component of the head unit <NUM> separately and associate each discovered component with a unique endpoint.

In general, vehicles today have very diverse input types: rotary controllers, jogs, button, dials, touch pads, touchscreens, etc. Some vehicles include multiple instances of certain input devices. For example, a vehicle can include rotary controllers in front and in the back seat. A vehicles also can include many types of sensors, such as a GPS unit, a wheelspeed sensor, a compass, an inside temperature sensor, an outside temperature.

Referring back to <FIG>, the head unit <NUM> can enumerate (or have enumerated) its hardware. In the example configuration of <FIG>, the automotive link layer <NUM> can enumerate its single touchscreen <NUM> as display #<NUM>. In another configuration, the automotive link layer <NUM> enumerates multiple display devices, each of which may have its own resolution, color depth, and physical location. The automotive link layer <NUM> can discover each of these displays separately and generate respective addresses for these displays. The head unit <NUM> then can generate descriptions of these displays devices in accordance with the protocol of the automotive link layer <NUM>.

For example, referring to <FIG>, the portable device <NUM> can send a message <NUM> including a service discovery request to the head unit <NUM> via the control channel <NUM> (see <FIG>), for example. As illustrated in <FIG>, the message <NUM> can include several icons of different sizes, one or several which the head unit <NUM> can display as a selectable control via its main console display. When the user taps on or otherwise activates the icon, the head unit <NUM> can switch to the projected mode to the native mode of display, for example. The message <NUM> also can include a text to be displayed via the main console for the user, to indicate to the user that the portable device <NUM> is in communication with the head unit <NUM>.

In response to the message <NUM>, the head unit <NUM> can determine which components are available, enumerate the components, and generate descriptions of these components that conform to the general format of messages 5B and 5C. In a sense, the message <NUM> advertises the services available at the head unit <NUM>.

A message <NUM> of <FIG> includes descriptions of service endpoints, each of which can be formatted as a data unit <NUM> illustrated in <FIG>. In general, the message <NUM> can describe any number of services of various types. In addition to descriptions of services, the message <NUM> can indicate vehicle make, model, year, identifier, driver position (right or left), hardware type and software versions of the head unit, etc..

The data unit <NUM> can specify a substantially unique identifier for the service and include a description of the service. The description in turn can include an indication of the type of service (e.g., sensor source service, media sink service, input source service, media source service) and a description conforming to the corresponding structure. One such example structure, describing a media sink service, is illustrated in <FIG>.

A data unit <NUM> of <FIG> includes an indication of an available codec type, an audio type, a description of audio configuration and/or a description of a video configuration, etc. As a further example, the video configuration field included in the data unit <NUM> conform to the format of a data unit <NUM>, describing video configuration, illustrated in <FIG>. The data unit <NUM> can include an indication of codec resolution, a frame rate, a width margin, etc..

More generally, messages which the portable device <NUM> and the head unit <NUM> can exchange can include numerous nested data units. The formats of <FIG> provide a high level of flexibility and a high level of compatibility. Further, because the head unit <NUM> can describe many types of components in this manner, and provide detailed parameters for each component, the portable device <NUM> can implement extensive software logic for interacting with these components. Accordingly, the head unit <NUM> need not support complex, component-specific software to facilitate interactions between these components and the head unit <NUM>.

In some implementations of the system <NUM>, both the portable user device <NUM> and the head unit <NUM> are capable of generating turn-by-turn navigation instructions at the same time. As discussed above, the portable user device <NUM> can generate navigation instructions in an online mode using data received from the network server <NUM>, or an offline mode using cached data. The head unit <NUM> can implement an on-board navigation system that uses road data stored in the memory of the head unit <NUM>, for example.

When not in communication with the vehicle subsystem <NUM>, the portable user device <NUM> can generate navigation instructions for display and/or audio playback via the user interface of the user device <NUM>, while the head unit <NUM> can display and/or announce "competing" navigation instructions using the user interface elements embedded in the vehicle, such as the touchscreen <NUM> and/or speakers <NUM> depicted in <FIG>. In this case, the portable user device <NUM> and the head unit <NUM> compete for the driver's attention. When the user connects the portable user device <NUM> to the head unit <NUM>, the entities <NUM> and <NUM> can compete for resources of the head unit <NUM>. More particularly, the portable user device <NUM> can attempt to display information via the head unit <NUM>, while the head unit <NUM> can attempt to display its own, "native" visual output.

To avoid providing duplicative or contradictory navigation instructions when the portable user device <NUM> is connected to the head unit <NUM>, the automotive link layer <NUM> implements a technique for negotiating navigation focus, which can include a substantially exclusive use of one or more user video and/audio output devices of the head unit <NUM> for the purpose of providing navigation instructions. To this end, the portable device <NUM> and head unit <NUM> can exchange messages to manage the navigation focus, as discussed with reference to <FIG>.

In general, <FIG> illustrate example messaging between a user <NUM>, a head unit <NUM>, and a portable device <NUM>. The head unit <NUM> can correspond to the head unit <NUM> of <FIG> and/or the head unit <NUM> of <FIG>, for example. The portable device <NUM> can correspond to the portable device <NUM> of <FIG> and/or the portable device <NUM> of <FIG>, for example.

In the scenario illustrated in <FIG>, while the head unit <NUM> and the portable device <NUM> are disconnected, the head unit <NUM> displays native navigation instructions generated by the on-board navigation system of the vehicle, for example, while the portable device <NUM> displays navigation instructions generated by a geographic application operating in the portable device <NUM>, such as the application 126A of <FIG>.

The user then plugs in, or connects wirelessly, the portable device <NUM> to the head unit <NUM>. The portable device <NUM> can automatically request navigation focus by sending a Request Navigation Focus message to the head unit <NUM>. According to one implementation, the portable device <NUM> generates the Request Navigation Focus message in response to determining that (i) a navigation session is in progress and (ii) the portable device <NUM> is now connected to the head unit <NUM>.

The head unit <NUM> can display a dialogue via its main display console, for example, to determine whether the user prefers native navigation or portable device navigation. Additionally or alternatively, the head unit <NUM> can request the selection from the user by generating an audio announcement, for example. When the user elects portable device navigation, the head unit <NUM> can grant the request, deactivate native navigation, and begin to display projected navigation from the portable device <NUM>. In the scenario of <FIG>, however, the user elects native navigation, and the head unit <NUM> denies the request from the portable device <NUM>. The head unit <NUM> then continues to display native navigation directions.

In the scenario of <FIG>, the head unit <NUM> does not display navigation directions at the time when the user connects the portable device <NUM> to the head unit <NUM>. Accordingly, the head unit <NUM> grants the request for navigation focus and begins displaying projected navigation directions.

In another implementation, the head unit <NUM> can implement a policy to automatically prioritize either the head unit <NUM> or the portable device <NUM>, and automatically grant to deny navigation focus requests in accordance with the policy. The head unit <NUM> may not display a dialogue in these cases. For example, the head unit <NUM> can be configured to unconditionally grant the request for navigation focus once the user connects the portable device <NUM> to the head unit <NUM>.

In general, the head unit <NUM> and/or the portable device <NUM> can implement any suitable policies and/or user dialogues to prevent the head unit <NUM> and the portable device <NUM> from competing for the same audio, visual, tactile, etc. resources of the head unit <NUM> to present navigation instructions.

In addition to navigation instructions, native visual output of the head unit <NUM> (or <NUM>) can include indications of vehicle data such as speed, gear, fuel levels, temperature, etc., video feed from the rear review ("backup") camera, various announcement, such as "seat belt is off!" or "check tire pressure," and other information. The native visual output of the head unit <NUM> can be referred to "native UI.

The visual output of the portable device <NUM>, provided to the vehicle subsystem <NUM> for display via the one or several screens of the head unit <NUM>, can be referred to as "projected UI. " In addition to navigation instructions discussed above, the projected UI can include various geographic information related to navigation (e.g., "gas station in <NUM> miles"), user interface controls of the geographic application 126A, controls for selecting music stations via the music application running on the portable device <NUM>, UI controls for placing and receiving phone calls, and/or other suitable information.

To provide a safe and intuitive user interface to the driver and/or passenger of the vehicle, the automotive link layer <NUM> can implement a technique for negotiating video focus, or substantially exclusive use of one or more video output devices of the head unit <NUM> for the purpose of providing visual output.

To allocate video focus, the portable user device <NUM> and the head unit <NUM> can exchange messages to request video focus, grant or reject a request for video focus, notify the other device of focus loss, and otherwise negotiate and/or enforce video focus allocation. In some implementations, the automotive link layer <NUM> can ensure that video focus is mutually exclusive. In other words, either the portable user device <NUM> or the head unit <NUM> can provide visual output to the driver via the video resource(s) of the head unit <NUM>, but not both.

According to one implementation, the head unit <NUM> implements policy decisions regarding allocation of video focus. The automotive link layer <NUM> can support messages using which the portable user device <NUM> requests video focus and the head unit <NUM> rejects the request or grants the request depending on the policy which can be car manufacturer-specific.

Several example scenarios in which a head unit and a portable device manage video focus are discussed next with reference to <FIG>. In these scenarios, a head unit <NUM> can correspond to the head unit <NUM> of <FIG> and/or the head unit <NUM> of <FIG>, for example. The portable device <NUM> can correspond to the portable device <NUM> of <FIG> and/or the portable device <NUM> of <FIG>, for example.

Referring first to <FIG>, the portable device <NUM> at the beginning of scenario <NUM> displaying projected UI which can include an interactive menu of the geographic application, for example. The user <NUM> presses a button or otherwise actuates a control on the head unit <NUM> to switch the display to native UI of the head unit <NUM>. For example, the user can press the Air Conditioning hardware button on the head unit <NUM>, and the head unit <NUM> can provide a native UI for climate control. The head unit <NUM> in this case switches to native UI display without negotiating video focus with the portable device <NUM>, and peremptorily notifies the portable device <NUM> of video focus loss. The portable device <NUM> stops sending projected UI to the head unit <NUM> upon receiving the command. At a later time, the user <NUM> operates the same or different control to selected projected UI, and the head unit <NUM> notifies the portable device <NUM> that the portable device <NUM> now has the video focus. In response, the portable device <NUM> resumes transmission of projected UI via the head unit <NUM>.

Thus, in the scenario <NUM>, the head unit <NUM> acquires and gives up video focus in response to a user action related to the head unit <NUM>. In some situations, the head unit <NUM> also can acquire video focus for safety reasons.

For example, referring to <FIG>, the portable device <NUM> can display projected UI via the head unit <NUM> at the beginning of a scenario <NUM>. The head unit <NUM> then detects that safety-critical UI must be displayed. For example, the user <NUM> may have shifted the vehicle transmission into REVERSE. The head unit <NUM> switches the display to native UI to display the backup camera. The head unit <NUM> also notifies the portable device <NUM> of the loss of video focus. Upon receiving the notification, the portable device <NUM> stops transmitting projected UI to the head unit <NUM>.

The head unit <NUM> then completes the presentation of safety-critical UI. For example, the user <NUM> may have shifted the vehicle transmission into DRIVE. The head unit <NUM> notifies the portable device <NUM> that the portable device <NUM> has regained video focus. In response to this notification, the portable device <NUM> resumes transmission of projected UI to the head unit <NUM>.

Further, the head unit <NUM> in some situations can switch between displays of native UI and projected UI in response to a request from the portable device <NUM>. For example, a music streaming application can run on the portable device <NUM> while the head unit <NUM> and the portable device <NUM> are connected. The music streaming application may stream audio through the head unit <NUM> and not ask for video focus until the end of the playlist has been reached. As another example, a navigation application can similarly run without requesting video focus until the next turn in turn-by-turn instructions is reached.

As a more specific example, the head unit <NUM> at the beginning of example scenario <NUM> of <FIG> is displaying native UI, such as climate control and vehicle status. The user <NUM> connects the portable device <NUM> to the head unit <NUM>. The portable device <NUM> is running a navigation application.

When the vehicle approaches an upcoming event (e.g., a turn) in the navigation directions generated by the navigation application on the portable device <NUM>, the portable device <NUM> begins to send projected UI and requests a video focus. The head unit <NUM> confirms that the native UI is currently not displaying safety-critical information, such as the feed from the backup camera, and determines that the request for video focus should be granted. The head unit <NUM> then switches to projected UI to display the information from the portable device <NUM> regarding the upcoming event.

Referring back to <FIG>, each of the portable device <NUM> and the vehicle subsystem <NUM> can implement complex audio management techniques. For example, the portable device <NUM> can support multiple software applications running in parallel, and each of these software applications can output one or more audio streams. The portable device <NUM> can implement various audio policies to co-ordinate audio between these applications and streams, such as automatically "ducking," or reducing the volume of, a notification stream when another application requests audio focus over the media stream.

The vehicle subsystem <NUM> also support multiple audio streams. These streams can include, for example, cabin audio (speakers directed at the entire cabin) and driver audio (directional speakers aimed at driver's head). Each of these audio streams may be directed to different speakers, and/or have different audio processing applied, and/or cause different audio policies to be implemented. For example, the vehicle subsystem <NUM> may also duck cabin audio when playing driver audio.

To coordinate audio between the two complex audio systems of the portable device <NUM> and the vehicle subsystem <NUM>, the automotive link layer <NUM> can implement a technique for negotiating the allocation of audio focus. The audio focus can include substantially exclusive use of one or more audio output devices accessible to the head unit <NUM> for the purpose of providing audio output. As discussed above, a vehicle in general can include multiple speakers, disposed inside the head unit <NUM> or elsewhere inside the vehicle. The automotive link layer <NUM> can manage the audio focus independently of the video focus and navigation focus. More particularly, the automotive link layer <NUM> allows the portable device <NUM> and the head unit <NUM> to exchange audio focus messages, as illustrated in <FIG>.

In an example implementation, the automotive link layer <NUM> operates on audio sources, which can correspond to logical endpoints that generate audio data and send data to audio streams. The automotive link layer <NUM> also operates on audio sinks, which can correspond to logical endpoints that receive audio content from an audio stream. An example audio sink is the set of in-vehicle speakers. Further, the automotive link layer <NUM> can operate on audio streams, which can correspond to named combinations of an audio source and an audio sink.

As used herein, output audio streams refer to streams that are sent from the portable device <NUM> to the head unit <NUM>, and input audio streams are send from the head unit <NUM> to the portable device <NUM>. <FIG> illustrates an example set of audio channels which the automotive link layer <NUM> operating in the portable device <NUM> and the head unit <NUM> of <FIG> can set up. In an example implementation, a set of signals <NUM> includes an audio input stream for a microphone, one bidirectional audio stream for in-call Bluetooth audio, as well four audio output streams: a UI stream for user interface feedback data, a guidance stream for driver guidance, a voice stream for conversational voice), and a media stream for cabin media.

The portable device <NUM> and the head unit <NUM> can exchange messages to co-ordinate allocation of audio focus for each logical audio stream shared by the portable device <NUM> and the head unit <NUM>. In this manner, the portable device <NUM> and the head unit <NUM> can coordinate multiple audio streams. One of the portable device <NUM> and the head unit <NUM> can operate as a "master" configured to receive requests for audio focus from the other one of the portable device <NUM> and the head unit <NUM>, and reject or accept these requests in view of configuration, environmental factors, policies, etc..

<FIG> illustrates an example scenario <NUM> in which the head unit acquires audio focus in response to a user command. <FIG> illustrates an example scenario <NUM> in which the portable device requests and receives audio focus for streaming music from the head unit, in response to a user command. <FIG> illustrates an example scenario <NUM> in which the head unit acquires audio focus in response to a user command, and then cedes audio focus to the portable device for streaming music, in response to another user command. <FIG> illustrates an example scenario <NUM> in which the portable device provides an audio navigation instruction to the head unit during radio playback at the head unit. <FIG> illustrates an example scenario <NUM> in which the head unit generates an audio announcement while the portable device is streaming music to the head unit. <FIG> illustrates an example scenario <NUM> in which the head unit denies a request from the portable device for audio focus, for safety reasons. <FIG> illustrates an example scenario <NUM> in which the portable device applies voice recognition to audio received via the head unit.

In the system <NUM> of <FIG>, interconnected devices and/or subsystems such as the portable device <NUM> and the vehicle subsystem <NUM> in some situations generate poor sensor data. For example, the vehicle subsystem <NUM> can provide faulty accuracy information (such as setting the accuracy field to <NUM>). As another example, the portable device <NUM> can generate poor compass data due to the presence of a magnetic object nearby. As yet another example, the vehicle subsystem <NUM> can output a wheelspeed that is <NUM>% inaccurate due to tire pressure.

The automotive link layer <NUM> can use heuristic techniques to detect, and sometimes correct, sensor errors using combinations of sensor outputs from portable device <NUM> and the vehicle subsystem <NUM>. In isolation, it may be difficult for portable device <NUM> as well as for the vehicle subsystem <NUM> to detect sensor errors. The automotive link layer <NUM> supports messages using which the portable device <NUM> and the vehicle subsystem <NUM> can collectively determine sensors errors.

In some implementations, the automotive link layer <NUM> collects raw sensor data readings from portable device <NUM> and/or the vehicle subsystem <NUM> and provides these raw sensor readings to the portable device <NUM>. The portable device <NUM> then post-processes sensor readings from local and external (vehicle) sensors, in a navigation fix-up stage. In an example implementation, the geographic mapping application 126A (see <FIG>) implements the navigation fix-up stage. In another implementation, the functionality is implemented in the head unit <NUM>. For convenience, this functionality can be discussed with continued reference to the automotive link layer <NUM>, which can include components, such as one or more software modules, on the portable device <NUM> and/or the head unit <NUM>.

In an example scenario, the automotive link layer <NUM> detects a <NUM>% drift in wheelspeed by comparing sensor readings forwarded from vehicle sensors by the head unit <NUM> to the GPS readings of the portable device <NUM> or, in some cases, combined GPS readings from the vehicle sensors and the portable device <NUM>. The automotive link layer <NUM> then sets up a feedback loop to correct this drift, so as to make the wheelspeed more accurate.

In another example, the portable device <NUM> receives inaccurate GPS data from the vehicle subsystem <NUM> and uses GPS accuracy on the portable device <NUM> as a proxy for GPS accuracy on the car. As yet another example, the portable device <NUM> can determine that its bearing can be ignored if GPS bearing from the vehicle subsystem <NUM> provides different values. In this case, the portable device <NUM> can determine that the user is probably moving the portable device <NUM> within the vehicle.

More specifically, the automotive link layer <NUM> checks whether the compass bearing on the portable device <NUM> changes substantially in sync with the compass bearing on the vehicle that includes the vehicle subsystem <NUM>, over a certain period of time. If the compass changes at the same time, the automotive link layer <NUM> an estimate that the portable device is stationary within the car. This determination can help the system to combine sensor readings. Otherwise, if the bearing does not change at the same time, the user may be moving the portable within the car, and sensor fusion is likely to yield unreliable results. An example method <NUM> for determining conditions for combining sensor output from the portable device <NUM> with sensor output from the head unit <NUM> is illustrated in <FIG>.

As another example, if the accelerometer of the portable device <NUM> indicates that the portable device <NUM> is moving, but sensor readings from the vehicle indicate reports the vehicle is stationary, the portable is probably moving relative to the vehicle.

When having access to the map data <NUM> via the network server <NUM> (or, in some cases, when storing large amount of offline map data), the portable device <NUM> can access a rich road graph (which can include a data structure indicating connections between road segments, lengths of road segments, various restrictions related to road segments, speed limits, lane restrictions, etc.). Using this road graph, the portable device <NUM> can generate a simulated route, which can include a sequence of maneuvers such as turns and lane changes, for example, at corresponding geographic locations.

To determine whether the vehicle responds to the route as expected, the portable device <NUM> can provide the simulated route to the head unit <NUM>, which in turn can provide the parameters of the simulated route to vehicle components such as sensors. Referring to an example scenario <NUM> illustrated in <FIG>, the software stack of a portable device <NUM> can generate a simulated route and cause, via a head unit <NUM>, various vehicle components <NUM> to respond to the generated route. The portable device <NUM> can correspond to the portable device <NUM> and/or <NUM>, and the head unit <NUM> can correspond to the head unit <NUM> and/or <NUM>. The head unit <NUM> in some cases accesses components and software modules spread across various components of the vehicle and/or the portable device <NUM>.

As one example, a certain vehicle can be configured to automatically turn on the headlights based on a sun calculation combined with the current position of the vehicle. The portable device <NUM> in this case makes a simulated position available to the vehicle, so that the response of the vehicle can be tested.

With continued reference to <FIG>, the portable device <NUM> can provide a simulated route as a sequence of multiple maneuvers and locations or, in another implementation, the portable device <NUM> can provide indications of locations (and maneuvers) individually. Further, the head unit <NUM> can provide feedback, such as sensor readings, status indicators for various vehicle components <NUM>, etc. individually, as illustrated in <FIG>, or as a single collection of data.

In an example scenario <NUM> illustrated in <FIG>, a user <NUM> connects a portable device <NUM> to a head unit <NUM>, and an automotive link <NUM> of the portable device <NUM> begins to transmit projected UI to the head unit <NUM>. The automotive link <NUM> can correspond to the automotive link layer <NUM> discussed above, for example. The automotive link <NUM> also locks out native UI of the portable device <NUM>. In other words, the automotive link <NUM> prevents the user from accessing the display <NUM> of the portable device <NUM> without disconnecting the portable device <NUM> from the head unit <NUM>. The display <NUM> can be blank during the lockout stage or can display an indicator, such as a text message "disconnect the device to access menu.

Thus, if the driver wishes to access a banking application on the portable device <NUM> while the portable device <NUM> is connected to the head unit <NUM>, he or she is effectively prevented from doing so. In this manner, the automotive link <NUM> can reduce distractions. After the user <NUM> disconnects the portable device <NUM> from the head unit <NUM>, he or she again can access the user interface of the portable device <NUM> via the display <NUM>.

It is noted that while the display <NUM> is locked out, the portable device <NUM> can continue to project UI via the head unit <NUM>. The projected UI can provide the user <NUM> with access to some of the features of the portable device <NUM>, such as the automotive applications <NUM> of <FIG>, for example.

Further, in some implementations, the head unit <NUM> can provide environmental data to the portable device <NUM>, and the portable device <NUM> can determine which UI features should be enabled, disabled, or altered in response to these environmental conditions. The UI features which the portable device <NUM> can thus modify can be native to the head unit <NUM> or to the portable device <NUM>. In one example implementation, the portable device <NUM> implements the policy according to which UI features are locked out, reactivated, or altered, and sends appropriate commands to the head unit <NUM>.

<FIG> illustrates an example scenario <NUM> in which a portable device <NUM> (which can correspond to the portable device <NUM> and/or <NUM>) is coupled to a head unit <NUM> (which can correspond to the head unit <NUM> and/or <NUM>). The portable device <NUM> initially provides projected UI at a default level of detail. The head unit <NUM> then reports changes in environmental data, such as an indication that windshield wipers are now on, to the portable device <NUM>. The head unit <NUM> also reports that the vehicle is moving at <NUM> miles per hour.

The portable device <NUM> can consider these signals and determine that the geographic search results, generated by a geographic application such as the application 126A, and being provided via projected UI, should be reduced to one page. The driver then can see these search results without scrolling or paging through the list. Thus, the portable device <NUM> in this scenario effectively locks out the scrolling/list paging feature.

As another example, the vehicle <NUM> can display a keyboard as part of its native UI. The portable device <NUM> can determine that, if the head unit <NUM> reports that the vehicle has no passenger (e.g., based on the weight sensed by the passenger seat), the keyboard should be disabled whenever the vehicle is moving. To this end, the portable device <NUM> can send an appropriate command to the head unit <NUM>.

When displaying geographic or navigational information to a driver of a vehicle, it is often desirable to ensure that the driver can easily view, read and understand the information at a glance. When the portable device <NUM> is connected to the vehicle subsystem <NUM> (see <FIG>), the portable device <NUM> can adapt the display of map data, geographic search results, and other geographic data for display within the vehicle environment. More specifically, the portable device <NUM> can change the visual presentation of a digital map in view of the connection between the portable device <NUM>, where the digital map is rendered, and the head unit <NUM>, where the digital map is presented.

In some implementations, portable device <NUM> adjusts the digital map being rendered for presentation in the vehicle by applying certain "styles," or sets of visual attributes such as color, transparency, line thickness, etc. to map feature geometry. The portable device <NUM> can select a style based on the general automotive context, which can be the same in vehicles of all types, and/or vehicle-specific automotive context. A vehicle-specific automotive context can depend on car make, model, year, as well as more specific parameters as interior color.

<FIG> is a block diagram of an example memory <NUM>, which can correspond to the memory <NUM> of the portable device <NUM>, for example. In the memory <NUM>, map styling data is used to describe different visual styles for automotive and non-automotive environments. Similar to the memory <NUM> illustrated in <FIG>, the memory <NUM> can store various software components or modules such as a mobile platform, a protocol sender, automotive APIs, and automotive applications.

The memory <NUM> also includes a map feature geometry module <NUM>, which stores map data, and a map feature style data module <NUM>, which stores map style data. The map data includes descriptions of geometry for various map features such as buildings, parks, and bodies of water, text labels, textures, various forms of metadata, etc. Some of these map features can be defined in a vector graphics format or another suitable scaleable format. In some cases, the map data can also include raster images in a bitmap format, for example. The map style data includes various style parameters for rendering the map data. For example, each style parameter may describe a respective color, number of strokes, width for each of the strokes, transparency level, etc..

With reference to <FIG>, during operation, the portable user device <NUM> may request map data and map style data for rendering a digital map of a geographic region from the network server <NUM>. The map database <NUM> can provide the map data along with the map style data. The portable user device <NUM> can store the received map data in the module <NUM> and the received map style data in the module <NUM>. The portable user device <NUM> then can display the digital map of the geographic region and the render the digital map with appropriate style parameters.

When the portable user device <NUM> is connected to the vehicle (such as the head unit <NUM>) the digital map displayed in device <NUM> can be rendered in a manner that is suited to the vehicle environment. The portable user device <NUM> can render the digital map by applying different styles or sets of visual attributes to generate different visualizations of the same geographic area. For example, the portable user device <NUM> can effectively hide certain geographic features that are typically less relevant in an automotive context to provide enhanced user experience. The portable device <NUM> can also automatically switch between different styles when the user connects to the portable device <NUM> to the vehicle or, conversely, when the user unplugs the portable device <NUM> from the vehicle.

In an example scenario, the user may view a map on the portable device <NUM> with certain map features present such as bus stop icons. When the user connects the portable device <NUM> to the vehicle, the bus stop icons may be less relevant to the user who is now driving the vehicle. As such, the portable device <NUM> may apply appropriate styles, such as changing the transparency level of the bus stop icons, in order to remove the bus stop icons from the map view. This helps to enhance user experience by simplifying the map and removing potential clutter.

In another example scenario, when the user connects the portable device <NUM> to the vehicle, the portable device <NUM> may apply styles to highlight certain map features. For example, thicker lines may be applied to roads to make the road appear more visible. As another example, some driving-related map elements such as street signs or gas stations may be bolded to emphasize the importance or relevance of these element to the user driving the vehicle.

In yet another example scenario, the portable device <NUM> may render the map in a different way when the vehicle is in motion. In other words, relevant map features may be visualized according to the speed of the vehicle. For example, as the vehicle speeds up, some less important map elements, such trees, buildings, parks, etc., may be given less detail or removed all together, while other more important map elements, such as landmarks, may be given greater detail or highlighted. Thus, the driver can better see and understand the environment surrounding the vehicle while the vehicle is in motion.

When a user explicitly or implicitly selects a certain geographic location via her portable device and later connects the portable device to the head unit of a car, the portable device can automatically trigger display of driving directions or other information related to the geographic location via the head unit. In particular, the portable device requests control of the display device embedded in the head unit and, depending on the implementation and/or configuration of the head unit, the portable device can acquire the control automatically or upon the user confirming via the head unit.

A software module executing on the portable device can determine a context related to the geographic location based on the currently active application (e.g., a mapping application displaying the geographic location on a digital map, a web browser displaying a listing for a business at the geographic location, a messaging application in which a message being perused includes a street address) and/or past user activities (e.g., web searches, geographic queries, requests for navigation directions). In some implementations, the software module executing on the portable device queries a network server to determine whether navigation data, a business data, or other information should be projected onto the display device of the head unit. The determination, according to the invention, is based on a calculation of the likelihood the user will request navigation directions, business data, a digital map, etc..

Thus, a user can simply connect the portable device to the head unit and, without explicitly selecting input from the portable device via the head unit and navigating menus to select the desired function, see automatically selected geographic data on the head unit. In this sense, software executing on the portable device can provide continuity of user experience when a portable device connects to a head unit.

In an example scenario, user Alice launches a navigation application on her smartphone and submit a query for the nearest movie theater. She then plugs in the smartphone into the head unit of her car. The head unit displays a dialogue prompting Alice to confirm that she wishes to request navigation directions to the movie theater. Upon Alice's confirmation, the smartphone begins to project navigation directions via the head unit. It is noted that Alice in this example scenario did not have to explicitly activate the mode on the head unit to receive and project data from the smartphone, nor did Alice have to navigate menus and activate this mode explicitly on her smartphone. Moreover, Alice did not have to launch or re-active a mapping/navigation application, again select the movie theater, and submit a command for projecting navigation directions to the movie theater via the head unit.

For further clarity, <FIG> illustrates example messaging sequence <NUM> between a portable device <NUM> and a head unit <NUM>. The head unit <NUM> can correspond to the head unit <NUM> of <FIG> and/or the head unit <NUM> of <FIG>, and the portable device <NUM> can correspond to the portable device <NUM> of <FIG> and/or the portable device <NUM> of <FIG>, for example.

According to the scenario of <FIG>, the user selects a certain geographic location via an interactive mapping application (e.g., the mapping application 126A of <FIG>) or by viewing information regarding the geographic in a web browser, for example (event <NUM>). As a more specific example, the user can view the hours of operation for a certain geo-located business in a browser window on the portable device <NUM>. When the user couples the portable device <NUM> to the head unit <NUM> (event <NUM>), the browser window is active and foregrounded. A software component executing on the portable device <NUM>, such as the protocol sender <NUM> or the geographic/mapping application 126A (see <FIG>), can detect the coupling (event <NUM>) by monitoring operating system events, for example. The software component then can automatically determine that focus should be requested from the head unit <NUM> (event <NUM>) and request focus by sending one or more messages (event <NUM>). In some implementations, the software component does not prompt the user at all prior to requesting the focus, or relies on an authorization previously provided by the user. The geographic/mapping application 126A in this scenario may execute in the background and await events related to coupling of the portable device <NUM> to a head unit of a vehicle.

The head unit <NUM> can display a confirmation dialogue (<NUM>) and, upon receiving confirmation, provide an appropriate indication to the portable device <NUM> (event <NUM>). In response, the protocol sender <NUM>, the geographic/mapping application 126A, or another software component can automatically select the geographic location, previously selected at state <NUM>, for use with the head unit <NUM> (event <NUM>). For example, a mapping application executing on the portable device <NUM> can generate and project navigation data for driving to the geographic location (events <NUM>, <NUM>). As another example, a software component executing on the portable device <NUM> can project the hours of operation or other information related to a business entity at the geographic location.

Thus, rather than explicitly selecting information or a task to be projected via a head unit, the user can simply confirm that an automatically selected geographic location and the corresponding task (e.g., navigation, viewing hours of operation, dialing the phone number) are correct. In other words, a software component executing on the portable device <NUM> and/or a network server in some cases can effectively anticipate user needs based (at least in part) on the current user activity on the portable device.

Further, in addition to the current activity, the software component and/or the network server can anticipate user needs based on past activities of the user and even activities of other users. To modify the example above, Alice can use a web browser on her smartphone to look up the show times at the nearest movie theater. In accordance with the settings Alice previously entered, her smartphone and/or a network server creates a data record that indicates an association between Alice, the web site related to the movie theater, and the time of her visit to the web site. An hour later, Alice can get into her car and connect the smartphone to the head unit. A software running on her smartphone and/or the network server generates an indication that Alice is likely to drive to the movie theater. Accordingly, the smartphone automatically requests focus and begins to project navigation directions.

<FIG> illustrates example messaging sequence <NUM> between a portable device <NUM> and a head unit <NUM>. Similar to the episode involving Alice and the website, the scenario of <FIG> includes activities on the portable device <NUM> between selection of a geographic location and coupling to the head unit <NUM>. In particular, the user at some point can configure the portable device <NUM> to retain a geographic context, such as the selection of a certain geographic location via a web browser, an email application, a messaging application, a geographic/mapping application, etc. (event <NUM>). At a later time, the user can view information related to a geographic location using a web browser application, or messaging/mailing application, a geographic/mapping application, etc. (event <NUM>).

The indication of the geographic location can be stored in the memory of the portable device <NUM> or on a network server, depending on the implementation or scenario (event <NUM>). In at least some of the implementations, the time of viewing the information is stored along with the indication of the geographic location. The user may then background the application using which she viewed information related to the geographic location or even completely close this application.

At a later time, the user can couple the portable device <NUM> to the head unit <NUM>, and the portable device <NUM> can automatically determine a geographic context related to a geographic location, negotiate focus, and project information for the geographic location via the head unit, similar to the scenario of <FIG> (events <NUM>). In this case, however, the portable device <NUM> can determine the geographic context based on the information stored when processing the event <NUM>. Thus, although the application with which the geographic context was established may no longer be active, the portable device <NUM> can nevertheless automatically suggest projecting navigation directions via the head unit based on the user's past activities.

<FIG> illustrates messaging sequence <NUM> which is generally similar to the sequences <NUM> and <NUM>, except that a user intent server <NUM> determines a suggested geographic location, for use in projecting data via a head unit, using an indication of a current and/or past user activity. The user intent server <NUM> can operate as a component of the network server <NUM> of <FIG>, for example, or as a separate server.

In the scenario of <FIG>, the portable device <NUM> transmits an indication of a geographic location to the user intent server <NUM> (event <NUM>), requests a suggested geographic location from the user intent server <NUM> upon detecting coupling to the head unit <NUM> (event <NUM>), and receives a suggested geographic location (event <NUM>). The request corresponding to the event <NUM> can include an indication that the portable device <NUM> is now coupled to the head unit <NUM>. The user intent server <NUM> can select a suggested geographic location based on a single event (e.g., the user currently viewing information about a geo-located business in a browser window), a single instance of a recent activity (e.g., the user submitting a query for a geographic location), or multiple instances (e.g., the user frequently driving to a certain geographic location). Further, the user intent server <NUM> can estimate relevance of certain geographic locations in view of time. For example, the user can drive to a certain location at a certain time of day. As discussed above, the user can configure the portable device <NUM> and/or the user intent server <NUM> to use this user-specific data in generating suggestions by explicitly operating certain controls or by installing certain applications or plugins, for example.

Now referring to <FIG>, an example messaging sequence <NUM> corresponds to a scenario in which the user intent server <NUM> determines a geographic location, related to information projected from the portable device <NUM> via the head unit <NUM>, based on relevant activity at a peer portable device <NUM>.

Referring again to Alice, her friend Bob in an example scenario launches an application for making restaurant reservations and looks up the hours when a certain café is open. Bob has previously chose to share certain information with Alice. When Alice and Bob get into a car, Alice's smartphone determines that Bob is in the car as well, using any suitable proximity sensing or location sharing technique (provided Alice and Bob have configured their respective smartphones for this purpose). Alice's smartphone queries a network server that selects a suggested geographic location for projecting navigation direction based on not only Alice's profile but also on the information Bob shared with Alice. In this scenario, Alice's smartphone can then automatically request navigation directions or business information for the café and project the information via the head unit.

As illustrated in <FIG>, the peer portable device <NUM> shares an indication of a geographic location with the user intent server <NUM> (event <NUM>). At a later time, the portable device <NUM>, coupled to the head unit <NUM>, detects the presence of the peer potable device <NUM> (events <NUM>) and requests that the user intent server <NUM> provide a suggested geographic location in view of the detected presence of the peer portable device <NUM> (event <NUM>). The user intent server <NUM> then selects the geographic location received as part of the event <NUM> and provides this location to the portable device <NUM> (event <NUM>), for projecting the corresponding navigation directs or other relevant information via the head unit <NUM>.

More generally, the user intent server <NUM> can select geographic locations based on one or more of such signals as phone calls, visited web pages, search results, current state of the application, etc., for one or more users, provided these users chose to share this information.

<FIG> illustrates an example method <NUM> for providing geographic information to head units of vehicles, which can be implemented in the protocol sender <NUM>, the geographic/mapping application 126A, or another software component operating in a portable user device. The method <NUM> can be implemented as a set of instructions executable on one or more processors and stored on a non-transitory computer-readable medium, such as a flash drive or a hard drive.

The method <NUM> begins at block <NUM>, where a user context related to a geographic location is determined. As discussed above, the context can be determined based on the current activity at a portable device, one or more past activities of the portable device, one or more activities on a peer device, etc..

Next, communicative coupling of the portable device to a head unit of a vehicle is detected (block <NUM>). In response, a focus is automatically is requested from the head unit (<NUM>). The request for focus can be sent without an express user command. However, according to some implementations, the user previously configures the portable device to automatically request focus in some situations.

At block <NUM>, navigation directions to the geographic location are projected from the portable device via the head unit. The user in some scenarios may explicitly confirm that the head unit should grant focus to the portable device via the input component of the head unit.

The following additional considerations apply to the foregoing discussion.

Certain implementations are described herein as including logic or a number of components, modules, or mechanisms. Modules may constitute either software modules (e.g., code embodied on a machine-readable medium or in a transmission signal) or hardware modules. A hardware module is tangible unit capable of performing certain operations and may be configured or arranged in a certain manner. In example implementations, one or more computer systems (e.g., a standalone, client or server computer system) or one or more hardware modules of a computer system (e.g., a processor or a group of processors) may be configured by software (e.g., an application or application portion) as a hardware module that operates to perform certain operations as described herein.

As used herein any reference to "one implementation" or "an implementation" means that a particular element, feature, structure, or characteristic described in connection with the implementation is included in at least one implementation. The appearances of the phrase "in one implementation" in various places in the specification are not necessarily all referring to the same implementation.

Some implementation may be described using the expression "coupled" and "connected" along with their derivatives. For example, some implementations may be described using the term "coupled" to indicate that two or more elements are in direct physical or electrical contact. The implementations are not limited in this context.

In addition, use of the "a" or "an" are employed to describe elements and components of the implementations herein. This is done merely for convenience and to give a general sense of various implementations.

Claim 1:
A method for providing geographic information to head units (<NUM>) of vehicles, the method comprising:
determining, by one or more processors at a portable device (<NUM>), a user context related to a geographic location during a session in which a user interacts with a software application executing on the portable device;
detecting, by the one or more processors, that the portable device has been communicatively coupled to a head unit of a vehicle, wherein the head unit is equipped with a display device, wherein the session has been deactivated prior to detecting that the portable device has been communicatively coupled to the head unit;
transmitting to the head unit, without an express user command, a request that the head unit accept data from the portable device for output via the display device; and
in response to receiving an indication that the request has been granted, causing, by the one or more processors, information related to the geographic location to be displayed via the display device, without an express user input at the portable device,
wherein determining the user context related to the geographic location comprises:
detecting that information related to the geographic location is provided via a user interface of the portable device;
automatically determining a likelihood that a user wishes to navigate to the geographic location; and
when the likelihood is above a threshold value, causing the geographic location to be automatically selected as a destination for navigation directions.