// // Initial port performed by Stefan Eilemann (eilemann@gmail.com) // #include "sarmeter.h" #include SarMeter *SarMeter::_instance = NULL; SarMeter *SarMeter::Instance() { if( _instance == NULL ) _instance = new SarMeter(); return _instance; } SarMeter::SarMeter( void ) : _bufSize(0) { _input = setupSadc(); _gi.last.gswapbuf = 0; _gi.info.swapBuf = 0; for( int i=0; i 100 ) { // look for 'S' (starting of Sarmagic) char *ptr = (char *)memchr( _buf, 'S', _bufSize ); // not found -- discard this buffer if( ptr == NULL ) { _bufSize = 0; return; } // not enough data read if( (ptr+100) > (_buf+_bufSize) ) return; // check for SarmagicGFX if( memcmp( ptr, "SarmagicGFX", 11 ) == 0 ) { forwardBufferTo( ptr ); // data is not complete in buffer if( _bufSize < 24 + sizeof( gfxinfo )) return; // retrieve gfxinfo structure ptr = _buf + 24; memcpy( &_gi.current, ptr, sizeof( gfxinfo )); ptr += sizeof( gfxinfo ); forwardBufferTo( ptr ); newGfxInfo(); } // check for SarmagicNEODISK else if( memcmp( ptr, "SarmagicNEODISK", 15 ) == 0 ) { forwardBufferTo( ptr ); ptr = _buf + 20; // number of records [devices] int num; memcpy( &num, ptr, 4 ); ptr += 4; if( num > MAX_DISKS ) num = MAX_DISKS; // data is not complete in buffer if( _bufSize < 24 + num*sizeof( diskinfo )) return; _di.info.nDevices = num; // read disk info for( int i=0; i