IPMI Monitor Board Project
This project required a C API interface library (a dll on Windows) to read and set voltage
and sensor values and thresholds on a customized printed circuit board via a serial port.
The monitor board is part of a custom instrument chassis which has over a dozen voltage,
temperature, and fan sensors.
The chassis and custom board were designed by Hybricon Corporation
based on a BMR-AVR board from
Pigeon Point Systems.
I developed the control software in C++ for both the Windows and Solaris platforms. The
C++BuilderX
IDE from Borland was used for development on Windows, and the Gnu g++ tools were used on Solaris.
The Intel IPMI (Intelligent Platform Managment Interface)
specification
describes the complex
communication protocol.
A Java GUI tool was developed initially to help us understand the complex IPMI protocol and to facilitate
early debugging of the monitor board because developing in Java is much faster and simpler than in C++
and a good serial port driver was available for Java. Some images of the GUI are shown below. One approach
to providing access to the monitor board would be to have a Java service running that could be accessed
over the network via TCP or UDP. However the requirement for this project was a C API.
|
Contact me to discuss your IPMI requirements.
cdh@cdhconsult.com
Features
-
A Java GUI and API have been developed for performing IPMI commands to a Pigeon Point Systems or
Hybricon monitor board via the payload serial port.
-
A Windows .dll file (dynamic link library) and Solaris .so file (shared object library) were developed.
-
The Windows serial port software uses a C++ encapsulation of the Win32 API that was presented in a
C/C++ Users Group magazine article in 1997. I was able to find the article in my extensive archive of
journals.
-
The Solaris serial port interface relies on the termios.h header file and the ability to put /dev/ttya
, for example, into "raw mode". A C++ class was designed that provided the same API for the Solaris
serial port as the Windows serial port, so it was a simple matter using a -DSOLARIS compile line definition
to build for either Windows or Solaris.
-
A simple command line test interpreter was written in C to access the monitor board API. There are
about a dozen command functions in the API. All sensors are initially scanned and their parameters loaded
into a table. Then sensors may be read or their threshold values read or set.
-
The API provides for optional data logging to a file at various debugging levels. This proved
invaluable for making the controller robust and repeatable.
-
The API functions do not block. They all eventually time out if a cable is unplugged for example.
|