/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
   vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=c:cindent:
*/

/** \page overview_overview Libsmbios Overview
 \section overview_reasoning Libsmbios - A BIOS Access library

 Many BIOS tools exist today.  However, there are few, if any, libraries for
 accessing BIOS information.  Libsmbios was designed with the following goals
 in mind.

 \subsection overview_goals Libsmbios Goals
 \li Best-practice design principles
 \li Extensible Access to SMBIOS Information
 \li Ability to perform unit tests across multiple systems \a without \a using \a physical \a hardware 
 \li Centralized, data-driven exception handling for broken BIOS tables

 \section overview_best_practice_design Best-Practice Design Principles
 Libsmbios uses the current best-practice in design principles:
 \li Abstract Factory pattern
 \li Dependency Inversion Principle
 \li Observer/Observable pattern

 \section overview_extensible Extensible Access
 Libsmbios provides two layers of access to BIOS data.  The first layer uses 
 table numbers, address, and offsets to access data.  An example is the using
 table number 0, offset 5 to access the BIOS Version string inside the SMBIOS
 BIOS Information table.  This layer relies on the basic formats of each BIOS
 interface, i.e. the table format of SMBIOS is standardized.  Therefore, new
 tables can be accessed through layer 1 even though the code has no knowledge
 of the new table content.

 The second layer uses XML to model BIOS data.  The XML file contains 
 human-readable strings to identify table numbers, address, and offsets.  To 
 build on the example above, the same data could be accessed as 
 "BIOS Information", "BIOS Version".  Layer 2 uses the XML to interpret the 
 type of data within the table.  At layer 1, the code can only provide the 
 integer value 0x02040020.  At layer 2, the code can identify that the value
 is a bit field and, according to the XML, means that PCI, ISA, EISA, and Boot
 from CD is supported by the BIOS.  Naturally, layer 2 accesses data through
 layer 1 with the enhanced capabilities of XML modeling.

 The image below shows the logical model of the Libsmbios design.  This should 
 not be misinterpreted as a class diagram or hierarchy.  For that type of 
 information, please see the Class Hierarchy page.
 
 \image html InterfaceLogicalModel.jpg "Logical Model of Libsmbios"

 \section overview_unittest Unit Test Design
 Software-based unit testing of the Libsmbios code is one of the key features
 of the library.  Simply put, over 80% of the code path can
 be tested without the use of hardware platforms.  This is possible because 
 layer 1 is designed to use files or memory interchangeably when accessing 
 BIOS data. That means the memory of a particular server can be dumped to a 
 file and stored in a unit test tree.  Every time the code is unit-tested it 
 can use memory files from multiple servers as input.  There is no limit to 
 the number of these "virtual systems" that can be captured, stored, and tested
 in the unit test framework.

 The image below shows the use of multiple virtual systems within the unit test
 framework.

 \image html UnitTestLogicalModel.jpg "Unit Testing of Libsmbios"
 

*/

