//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// $Id$
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <cstdlib>
+#include <cstring>
#include <simgear/structure/exception.hxx>
#include <simgear/misc/sg_path.hxx>
+#include <simgear/debug/logstream.hxx>
+#include <simgear/props/props_io.hxx>
#include <Main/fg_props.hxx>
#include <Main/globals.hxx>
return available_amps - amps;
} else if ( model == FG_EXTERNAL ) {
// cout << "external amps = " << 0.0 << endl;
+ float available_amps = ideal_amps;
return available_amps - amps;
} else {
- SG_LOG( SG_ALL, SG_ALERT, "unknown supplier type" );
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "unknown supplier type" );
}
return 0.0;
// cout << "external amps = " << 0.0 << endl;
return ideal_volts;
} else {
- SG_LOG( SG_ALL, SG_ALERT, "unknown supplier type" );
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "unknown supplier type" );
}
return 0.0;
// cout << "external amps = " << 0.0 << endl;
return ideal_amps;
} else {
- SG_LOG( SG_ALL, SG_ALERT, "unknown supplier type" );
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "unknown supplier type" );
}
return 0.0;
} else if ( s->get_kind() == FG_BUS ) {
s->add_output( this );
} else {
- SG_LOG( SG_ALL, SG_ALERT,
+ SG_LOG( SG_SYSTEMS, SG_ALERT,
"Attempt to connect to something that can't provide an output: "
<< child->getStringValue() );
}
} else {
- SG_LOG( SG_ALL, SG_ALERT, "Can't find named source: "
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "Can't find named source: "
<< child->getStringValue() );
}
} else if ( cname == "output" ) {
== FGElectricalSupplier::FG_BATTERY ) {
s->add_output( this );
} else {
- SG_LOG( SG_ALL, SG_ALERT,
+ SG_LOG( SG_SYSTEMS, SG_ALERT,
"Attempt to connect to something that can't provide an input: "
<< child->getStringValue() );
}
} else {
- SG_LOG( SG_ALL, SG_ALERT, "Can't find named source: "
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "Can't find named source: "
<< child->getStringValue() );
}
} else if ( cname == "switch" ) {
FGElectricalSystem::FGElectricalSystem ( SGPropertyNode *node ) :
- name("electrical"),
- num(0),
- path(""),
+ name(node->getStringValue("name", "electrical")),
+ num(node->getIntValue("number", 0)),
+ path(node->getStringValue("path")),
enabled(false)
{
- int i;
- for ( i = 0; i < node->nChildren(); ++i ) {
- SGPropertyNode *child = node->getChild(i);
- string cname = child->getName();
- string cval = child->getStringValue();
- if ( cname == "name" ) {
- name = cval;
- } else if ( cname == "number" ) {
- num = child->getIntValue();
- } else if ( cname == "path" ) {
- path = cval;
- } else {
- SG_LOG( SG_SYSTEMS, SG_WARN,
- "Error in electrical system config logic" );
- if ( name.length() ) {
- SG_LOG( SG_SYSTEMS, SG_WARN, "Section = " << name );
- }
- }
- }
}
void FGElectricalSystem::init () {
- config_props = new SGPropertyNode;
+ SGPropertyNode_ptr config_props = new SGPropertyNode;
_volts_out = fgGetNode( "/systems/electrical/volts", true );
_amps_out = fgGetNode( "/systems/electrical/amps", true );
SGPropertyNode *path_n = fgGetNode("/sim/systems/electrical/path");
if ( path_n ) {
if ( path.length() ) {
- SG_LOG( SG_ALL, SG_ALERT,
+ SG_LOG( SG_SYSTEMS, SG_INFO,
"NOTICE: System manager configuration specifies an " <<
- "electrical system model from: " << path << " but it is " <<
+ "electrical system: " << path << " but it is " <<
"being overridden by the one specified in the -set.xml " <<
"file: " << path_n->getStringValue() );
}
}
if ( path.length() ) {
- SGPath config( globals->get_fg_root() );
- config.append( path );
-
- SG_LOG( SG_ALL, SG_ALERT, "Reading electrical system model from "
+ SGPath config = globals->resolve_aircraft_path(path);
+
+ // load an obsolete xml configuration
+ SG_LOG( SG_SYSTEMS, SG_WARN,
+ "Reading deprecated xml electrical system model from\n "
<< config.str() );
try {
readProperties( config.str(), config_props );
- if ( build() ) {
+ if ( build(config_props) ) {
enabled = true;
} else {
- SG_LOG( SG_ALL, SG_ALERT,
- "Detected an internal inconsistancy in the electrical");
- SG_LOG( SG_ALL, SG_ALERT,
- " system specification file. See earlier errors for" );
- SG_LOG( SG_ALL, SG_ALERT,
- " details.");
- exit(-1);
+ throw sg_exception("Logic error in electrical system file.");
}
- } catch (const sg_exception& exc) {
- SG_LOG( SG_ALL, SG_ALERT, "Failed to load electrical system model: "
+ } catch (const sg_exception&) {
+ SG_LOG( SG_SYSTEMS, SG_ALERT,
+ "Failed to load electrical system model: "
<< config.str() );
}
-
} else {
- SG_LOG( SG_ALL, SG_WARN,
+ SG_LOG( SG_SYSTEMS, SG_INFO,
"No xml-based electrical model specified for this model!");
}
_amps_out->setDoubleValue(0);
}
- delete config_props;
}
" " );
if ( node->apply_load( load, dt ) < 0.0 ) {
- cout << "Error drawing more current than available!" << endl;
+ SG_LOG(SG_SYSTEMS, SG_ALERT,
+ "Error drawing more current than available!");
}
}
}
" " );
if ( node->apply_load( load, dt ) < 0.0 ) {
- cout << "Error drawing more current than available!" << endl;
+ SG_LOG(SG_SYSTEMS, SG_ALERT,
+ "Error drawing more current than available!");
}
}
}
// cout << "battery load = " << load << endl;
if ( node->apply_load( load, dt ) < 0.0 ) {
- cout << "Error drawing more current than available!" << endl;
+ SG_LOG(SG_SYSTEMS, SG_ALERT,
+ "Error drawing more current than available!");
}
}
}
}
-bool FGElectricalSystem::build () {
+bool FGElectricalSystem::build (SGPropertyNode* config_props) {
SGPropertyNode *node;
int i;
new FGElectricalConnector( node, this );
connectors.push_back( c );
} else {
- SG_LOG( SG_ALL, SG_ALERT, "Unknown component type specified: "
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "Unknown component type specified: "
<< name );
return false;
}
}
// cout << s << " input_volts = " << volts << endl;
} else {
- SG_LOG( SG_ALL, SG_ALERT, "unkown node type" );
+ SG_LOG( SG_SYSTEMS, SG_ALERT, "unknown node type" );
}
int i;