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.

Java GUI for IPMI serial port software Java GUI for IPMI serial port software

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.