Canvas glass cockpit efforts: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
No edit summary
Line 2: Line 2:


{{Stub}}
{{Stub}}
[[File:Canvas-mfd-framework-prototyping.png|400px|thumb|This is an adapted version of the [[Garmin GPSMap 196]] that is currently being developed by F-JJTH. Here, the whole instrument is entirely set up in XML space without using any [[Nasal]], including buttons/event handling, but also the embedded canvas region that serves as the 'screen'. The idea is to allow arbitrary MFDs to be specified in an aircraft-agnostic fashion, including displays like a PFD, [[NavDisplay]] or EFB. For details, please see [[Canvas Glass Cockpit Efforts]].]]


{{Canvas Navigation}}
{{Canvas Navigation}}
Line 28: Line 30:


The Nasal/Canvas data structures will be transparently created and compiled for each MFD. Each MFD consists of an arbitrary number of buttons, modes and pages. Each MFD can be instantiated multiple times, and each MFD is designed to be aircraft/instrument agnostic, i.e. also works just in a conventional Canvas dialog. Buttons can trigger and switch between modes, and modes may have pages (conventionally implemented through a single SVG file). Each page consists of an arbitrary number of page elements, which can in turn be animated/updated via listeners and timers.  Should look at existing displays, especially the [[NavDisplay]] and the update() method in navdisplay.mfd, but the most complete test-case would probably be the [[Avidyne Entegra R9]] }}
The Nasal/Canvas data structures will be transparently created and compiled for each MFD. Each MFD consists of an arbitrary number of buttons, modes and pages. Each MFD can be instantiated multiple times, and each MFD is designed to be aircraft/instrument agnostic, i.e. also works just in a conventional Canvas dialog. Buttons can trigger and switch between modes, and modes may have pages (conventionally implemented through a single SVG file). Each page consists of an arbitrary number of page elements, which can in turn be animated/updated via listeners and timers.  Should look at existing displays, especially the [[NavDisplay]] and the update() method in navdisplay.mfd, but the most complete test-case would probably be the [[Avidyne Entegra R9]] }}
[[File:Canvas-mfd-framework-prototyping.png|thumb|This is an adapted version of the [[Garmin GPSMap 196]] that is currently being developed by F-JJTH. Here, the whole instrument is entirely set up in XML space, including buttons/event handling, but also the embedded canvas region that serves as the 'screen'. The idea is to allow arbitrary MFDs to be specified in an aircraft-agnostic fashion, including displays like a PFD, [[NavDisplay]] or EFB. For details, please see [[Canvas Glass Cockpit Efforts]].]]


{{Git Topic Branch|remotebranch=topics/canvas-mfd-framework|localbranch=topics/canvas-mfd-framework}}
{{Git Topic Branch|remotebranch=topics/canvas-mfd-framework|localbranch=topics/canvas-mfd-framework}}

Revision as of 21:11, 7 June 2014


This article is a stub. You can help the wiki by expanding it.
This is an adapted version of the Garmin GPSMap 196 that is currently being developed by F-JJTH. Here, the whole instrument is entirely set up in XML space without using any Nasal, including buttons/event handling, but also the embedded canvas region that serves as the 'screen'. The idea is to allow arbitrary MFDs to be specified in an aircraft-agnostic fashion, including displays like a PFD, NavDisplay or EFB. For details, please see Canvas Glass Cockpit Efforts.


This is a list of Canvas related glass cockpit efforts, i.e. projects implementing modern MFD avionics.

Goal Description Progress People Comments
747 PFD ... 40}% completed (people) ...
NavDisplay ... 60}% completed (people) ...
Garmin GPSMap 196 ... 20}% completed F-JJTH ...
Avidyne Entegra R9 ... 40}% completed (people) ...
Canvas EFB Framework ... 10}% completed (people) ...

XML Framework

Note  This is work in progress - the idea is to identify required building blocks to easily specify most MFD functionality in a generic fashion, without requiring a ton of custom Nasal code and without being specific to a single type of MFD. The whole concept is based on FlightGear_Missions_and_Adventures#XML_Extension_Framework, i.e. providing a Nasal-space mechanism to expose and re-define building blocks to XML space.

The Nasal/Canvas data structures will be transparently created and compiled for each MFD. Each MFD consists of an arbitrary number of buttons, modes and pages. Each MFD can be instantiated multiple times, and each MFD is designed to be aircraft/instrument agnostic, i.e. also works just in a conventional Canvas dialog. Buttons can trigger and switch between modes, and modes may have pages (conventionally implemented through a single SVG file). Each page consists of an arbitrary number of page elements, which can in turn be animated/updated via listeners and timers. Should look at existing displays, especially the NavDisplay and the update() method in navdisplay.mfd, but the most complete test-case would probably be the Avidyne Entegra R9


Note  Contributors wanting to check out the topics/canvas-mfd-framework branch, need to follow these 3 steps:
  • git remote add canvas-hackers git@gitorious.org:fg/canvas-hackers-fgdata
  • git fetch canvas-hackers
  • git checkout --track -b topics/canvas-mfd-framework canvas-hackers/topics/canvas-mfd-framework

This will give you a local branch named topics/canvas-mfd-framework, so that you can easily pull/push changes. When pulling, it makes sense to pull with --rebase

Please never push directly to the master/next branches, and please don't push force (-f) either.

Files

Each MFD instrument will consist of at least the following files:

  • a PropertyList-encoded XML file specifying the instrument
  • a raster image used as the skin/background image
  • a SVG image used for placing buttons and event handling

Header

  • Canvas size/view
  • colors/transparency

Primitives

  • Button
  • Mode
  • Page
  • Page-Element
  • Task (maketimer based)
  • Event handling (listener based)
<PropertyList>
 <MFD>
  <version>1.0</version>
  <name>myMFD</name>
  <description></description>
  <debug>1</debug>
  <resolution>320x240</resolution>

 <buttons>

  <button>
   <name></name>
   <property></property>
  </button>

 ...
 </buttons>

 <!-- TODO: support SGCondition here -->
 <modes>
  <mode>
  </mode>
 </modes>

 <pages>
  <page>
   <name>panel-page</name>
   <svg-filename>panels.svg</svg-filename>
   <nasal></nasal>
  </page>
 </pages>

 </MFD>
</PropertyList>