Difference between revisions of "Infotainment System - Technical Overview"

(Configuration)
Line 46: Line 46:
 
== Configuration ==
 
== Configuration ==
 
=== Editing Albums/Streaming Options ===
 
=== Editing Albums/Streaming Options ===
Albums/Streaming options are configured by editing the contents of the directory defined by the BASE_MP3_JUKEBOX_STORE variable in the infotainment_config.txt file.
+
Albums/Streaming options are configured by editing the contents of the directory defined by the BASE_MP3_JUKEBOX_STORE variable in the infotainment_config.txt file:
 +
<syntaxhighlight lang="javascript" style="padding:20px; border:1px solid #CCC; margin:2em;">
 +
var BASE_MP3_JUKEBOX_STORE = 'C:/NADS/infotainment_MP3';
 +
</syntaxhighlight>
  
In that directory, all directories are treated as "albums", organized in alphabetical order. "Album" directories should be labeled as "ARTIST - ALBUMNAME".  
+
In that directory, all directories are treated as "albums", organized in alphabetical order. "Album" directories should be labeled as "ARTIST - ALBUM_NAME", substituting ARTIST for the artist's name, and the album name for ALBUM_NAME.  
  
 
----
 
----

Revision as of 14:19, 13 August 2023

Architecture

The core of the Infotainment system is written in Node.js. It establishes an Express web server, then uses Socket.IO to manage connections to different control and/or display surfaces. Because display, audio and control surfaces are coded as web pages served up by the Express server, the Infotainment system creates a device-agnostic ecosystem, where any number of devices on any combination of platforms can participate (assuming they support a semi-modern browser).

In general, the Infotainment System can be logically broken down into three parts: the host script, the audio handler(s), and skins (display/input pages).

Host script

The host script operates as the beating heart of the Infotainment system. It manages the services for the display/input interface pages, listens to variable stream information from a miniSim, coordinates interface input, and broadcasts system state data back to the miniSim.
For it's real time interface to a miniSim, the Infotainment system leverages the Route Table to supply miniSim variable data streams (speed, position, ...) as well as write it's own back to the miniSim's shared memory.

Audio handler(s)

By default, a single audio page (infotainment_audio.htm) is included. This page can handle 3 channels of stereo playback:
  • Media playback
  • Alert (temporarily mutes media playback on play)
  • Notify
Media playback handles the general audio playback for the media store (defined in the infotainment_config.txt file) and "radio" media streams.
The alert channel is meant for driver alerts. Playback from this channel automatically lowers the volume of the media playback channel while alerts are in progress.
The notify channel is used primarily for audio cues within the vehicle. Its playback does not alter the other two channels' volume.

Skins


Individual web pages serve up visual interfaces/control surfaces, depending on the desired output. This includes (but is by no means limited to):
  • Standard OEM-like infotainment interfaces
  • Reconfigurable instrument cluster displays
  • General touch and/or voice interfaces
  • Head-up displays (HUDs)
  • "Alert" devices
By default, the Infotainment System includes an interface for an approximation of the Toyota Entune center stack system (main infotainment and researcher "mirror").
Infotainment Skins

Configuration

Editing Albums/Streaming Options

Albums/Streaming options are configured by editing the contents of the directory defined by the BASE_MP3_JUKEBOX_STORE variable in the infotainment_config.txt file:

var BASE_MP3_JUKEBOX_STORE = 'C:/NADS/infotainment_MP3';

In that directory, all directories are treated as "albums", organized in alphabetical order. "Album" directories should be labeled as "ARTIST - ALBUM_NAME", substituting ARTIST for the artist's name, and the album name for ALBUM_NAME.


Input

Touch

The main user interface(s) can register touch position and button presses on any given configured skin. These interactions are logged into the AUX_Info_Cursor and AUX_Info_Button cells respectively.

By default, single touches are recorded automatically.

New buttons can be configured by adding HTML elements with a class of "button" (generally visually reactive buttons) or "buttonI" ("invisible" buttons) while having a unique button ID data element (ie, data-bid="4032").

UDP

The infotainment system has the ability to listen for a network stream on a user-defined UDP port(s) defined in the infotainment_config.txt file, and fed by the miniSim's route rable. By default, this is a single port on a given network interface, defined by the CAB_HOST_IP and RT_PORT_INCOMING variables.

// Local IP address of the infotainment server
var CAB_HOST_IP = '192.168.0.105';
...
var RT_PORT_INCOMING = 8901;

In the above example code snippet (from the config file), the incoming UDP control port is configured to listen on port 8901 (default) on the interface using the IP address 192.168.0.105.

The RT (realtime) stream assumes the following packet configuration:

Cell name Length, type Description Default value
SimFrame 1 int The current simulation frame
SCC_Info_Screen 2 shorts The screen/menu/pane ID of the interface to be highlighted/engaged on a given skin/interface, and a requested state ID of that screen/menu/pane 0,0 (no effect, default state)
CFS_TRANS_Igntn 1 int Ignition state of the vehicle 0


For advanced miniSim use, a second route is also used to supply vehicle state and positioning information. The required configuration variables are as follows:

// ... port of miniSim auxiliary UDP packets
var RT_MS_PORT_INCOMING = 8035;
var RT_MS_PORT_OUTGOING = 8036;
var RT_MS_IP = '192.168.0.105';

Other

Although touch and network streams are the main input components of the core infotainment system, it can be extended to offer other inputs such as gesture and /or voice control.

Please contact us if you have any questions about extending the infotainment system for other forms of input.


Output

UDP

If enabled, the host script outputs a UDP stream to an IP and port defined in the infotainment_config.txt file in the root directory of the Infotainment System install.

var RT_STREAM_ENABLED = true;
var RT_HOST_IP = '192.168.0.200';
var RT_PORT_OUTGOING = 8902;

In the above example code snippet (from the config file), the outgoing data stream is configured to broadcast to the device at IP address 192.168.0.200 on port 8902 (default).

By default, four variables are shared from the infotainment system and fed back into the miniSim's shared memory:

Cell name Length, type Description Default value
AUX_Info_Screen 1 short The screen ID of the current active screen/menu of an attached page/skin 0
AUX_Info_Button 1 short The button ID of the last button pushed on an attached page/skin 0
AUX_Info_Cursor 2 shorts The relative X,Y position of a detected touch event on an attached page/skin. When no touch is detected, these two values default to -9999, -9999 -9999, -9999
AUX_MID_Screen 1 short If using an attached multi-information display (MID), this variable returns the given "screen ID" of the MID. -1

Note: For a miniSim to be able to read/record these cells, they must be defined in three places: the miniSim CEC definition file, the route table, and the miniSim collect file.