/// <summary> /// Get Sensor Data Repository Information Incrementally. Returns SDR Info. /// </summary> public virtual SdrCollection GetSdrIncrement() { // Default Record Off Set int offSet = 0; // Number of Bytes to Read. 0xFF for entire record. int bytesToRead = 0; // SDR RecordId (0000h for entry point) ushort recordId = 0; // Last SDR RecordId (aborts event log Loop) ushort lastRecordId = 65535; // security mech to step out of loop. int pass = 0; // create sdr record collection for raw SDR records. IpmiSdrCollection records = new IpmiSdrCollection(); // reserve the SDR for partial reads ReserveSdrResponse reserve = (ReserveSdrResponse)this.IpmiSendReceive( new ReserveSdrRequest(), typeof(ReserveSdrResponse)); if (reserve.CompletionCode == 0) { // reserved LS byte byte reserveLs = reserve.ReservationLS; // reserved MS byte byte reserveMs = reserve.ReservationMS; // lenght of the SDR record int recordLenght = 0; // sdr record index int index = 0; // retrieve all records while connected by recursively calling the SDR entry command while (recordId != lastRecordId || pass > 1000) { // create SDR record SdrRecord sdr = new SdrRecord(); { // initialize offset to zero for new record offSet = 0; // initialize to the minimum read size of 5 bytes. (extended to 14 on incremental read) bytesToRead = 5; // get the SEL record GetSdrPartialResponse response = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserveLs, reserveMs, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); // set the sdr completion code. sdr.completionCode = response.CompletionCode; if (response.CompletionCode == 0) { // set record id sdr.RecordId = new byte[2] { response.RecordData[1], response.RecordData[0] }; // set the record version sdr.RecordVersion = response.RecordData[2]; // set record type sdr.RecordType = response.RecordData[3]; // set record lenght sdr.RecordLenght = response.RecordData[4]; // convert record lenght to int & add the initial 5 bytes. recordLenght = (Convert.ToInt32(response.RecordData[4])) + 5; // create SDR byte array to hold record data. byte[] sdrDataRecord = new byte[recordLenght]; // initilize sdr array index to zero index = 0; // copy SDR data to the sdr data record array and increase the index Buffer.BlockCopy(response.RecordData, 0, sdrDataRecord, index, bytesToRead); index += bytesToRead; // increase the offset by bytes already read offSet += bytesToRead; int offsetPass = 0; // recursively get partial sdr record until the offset reaches the recordlenght while (offSet < recordLenght || offsetPass > 100) { // get maximum read chunk (14 bytes or less). bytesToRead = (recordLenght - offSet); // the size to 14 byte increments bytesToRead = (bytesToRead > 14) ? 14 : bytesToRead; // get partial SDR record GetSdrPartialResponse partialResponse = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserve.ReservationLS, reserve.ReservationMS, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); if (partialResponse.CompletionCode == 0) { // copy SDR data to the sdr data array and increase the index size by bytes read. Buffer.BlockCopy(partialResponse.RecordData, 0, sdrDataRecord, index, bytesToRead); index += bytesToRead; // increase the offset by the bytes read offSet += bytesToRead; } else { // set the sdr completion code. sdr.completionCode = partialResponse.CompletionCode; break; } offsetPass++; } // set the record data to the fully populdated sdrDataRecord array sdr.RecordData = sdrDataRecord; // update the record Id (signals loop exit) recordId = BitConverter.ToUInt16(new byte[2] { response.RecordIdMsByte, response.RecordIdLsByte }, 0); } else { break; } } pass++; // add the record to the collection records.Add(sdr); } } // return collection SdrCollection sdrMessages = new SdrCollection(); sdrMessages.completionCode = reserve.CompletionCode; if (reserve.CompletionCode != 0) sdrMessages.command = typeof(ReserveSdrResponse).ToString(); // check response collection holds values if (records.Count > 0) { // sdr version array byte[] verarr = new byte[2]; // record id short id; foreach (SdrRecord record in records) { if (record.completionCode == 0) { // record Id id = BitConverter.ToInt16(record.RecordId, 0); // populdate version array Buffer.BlockCopy(IpmiSharedFunc.ByteSplit(record.RecordVersion, new int[2] { 4, 0 }), 0, verarr, 0, 2); string sVersion = Convert.ToUInt16(verarr[1]).ToString(CultureInfo.InvariantCulture) + "." + Convert.ToInt16(verarr[0]).ToString(CultureInfo.InvariantCulture); // set version Decimal version = 0; // sdr record version number if (!decimal.TryParse(sVersion, out version)) { version = 0; } GetSdrMetaData(id, version, record.RecordType, record, ref sdrMessages); } else { sdrMessages.command += " : " + sdrMessages.completionCode + ". RecordId:" + record.RecordId.ToString(); sdrMessages.completionCode = record.completionCode; } } } return sdrMessages; }
/// <summary> /// Get Sensor Data Repository. Returns SDR Info. /// </summary> public virtual SdrCollection GetSdr() { // Default Record Off Set int offSet = 0; // Number of Bytes to Read. 0xFF for entire record. byte bytesToRead = 0xFF; // SDR RecordId (0000h for entry point) ushort recordId = 0; // Last SDR RecordId (aborts event log Loop) ushort lastRecordId = 65535; // security mech to step out of loop. int pass = 0; // create sdr record collection for raw SDR records. IpmiSdrCollection records = new IpmiSdrCollection(); // reserve the SDR for partial reads ReserveSdrResponse reserve = (ReserveSdrResponse)this.IpmiSendReceive( new ReserveSdrRequest(), typeof(ReserveSdrResponse)); if (reserve.CompletionCode == 0) { // reserved LS byte byte reserveLs = reserve.ReservationLS; // reserved MS byte byte reserveMs = reserve.ReservationMS; // retrieve all records while connected by recursively calling the SDR entry command while (recordId != lastRecordId || pass > 1000) { // create SDR record SdrRecord sdr = new SdrRecord(); { // get the SEL record GetSdrPartialResponse response = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserveLs, reserveMs, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); if (response.CompletionCode == 0) { sdr.completionCode = response.CompletionCode; // set record id sdr.RecordId = new byte[2] { response.RecordData[1], response.RecordData[0] }; // set the record version sdr.RecordVersion = response.RecordData[2]; // set record type sdr.RecordType = response.RecordData[3]; // set record lenght sdr.RecordLenght = response.RecordData[4]; // set the record data to record data sdr.RecordData = response.RecordData; // update the record Id (signals loop exit) recordId = BitConverter.ToUInt16(new byte[2] { response.RecordIdMsByte, response.RecordIdLsByte }, 0); } else { sdr.completionCode = response.CompletionCode; break; } } pass++; // add the record to the collection records.Add(sdr); } } // return collection SdrCollection sdrMessages = new SdrCollection(); // check response collection holds values if (records.Count > 0) { // sdr version array byte[] verarr = new byte[2]; // record id short id; foreach (SdrRecord record in records) { if (record.completionCode == 0) { // set the sdr collection completion code to indicate a failure occurred sdrMessages.completionCode = record.completionCode; // record Id id = BitConverter.ToInt16(record.RecordId, 0); // populdate version array Buffer.BlockCopy(IpmiSharedFunc.ByteSplit(record.RecordVersion, new int[2] { 4, 0 }), 0, verarr, 0, 2); string sVersion = Convert.ToUInt16(verarr[1]).ToString(CultureInfo.InvariantCulture) + "." + Convert.ToInt16(verarr[0]).ToString(CultureInfo.InvariantCulture); // set version Decimal version = 0; // sdr record version number if (!decimal.TryParse(sVersion, out version)) { version = 0; } GetSdrMetatData(id, version, record.RecordType, record, ref sdrMessages); } // set the sdr completion code to indicate a failure occurred sdrMessages.completionCode = record.completionCode; } } return(sdrMessages); }
/// <summary> /// Get Sensor Data Repository. Returns SDR Info. /// </summary> public virtual SdrCollection GetSdr() { // Default Record Off Set int offSet = 0; // Number of Bytes to Read. 0xFF for entire record. byte bytesToRead = 0xFF; // SDR RecordId (0000h for entry point) ushort recordId = 0; // Last SDR RecordId (aborts event log Loop) ushort lastRecordId = 65535; // security mech to step out of loop. int pass = 0; // create sdr record collection for raw SDR records. IpmiSdrCollection records = new IpmiSdrCollection(); // reserve the SDR for partial reads ReserveSdrResponse reserve = (ReserveSdrResponse)this.IpmiSendReceive( new ReserveSdrRequest(), typeof(ReserveSdrResponse)); if (reserve.CompletionCode == 0) { // reserved LS byte byte reserveLs = reserve.ReservationLS; // reserved MS byte byte reserveMs = reserve.ReservationMS; // retrieve all records while connected by recursively calling the SDR entry command while (recordId != lastRecordId || pass > 1000) { // create SDR record SdrRecord sdr = new SdrRecord(); { // get the SEL record GetSdrPartialResponse response = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserveLs, reserveMs, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); if (response.CompletionCode == 0) { sdr.completionCode = response.CompletionCode; // set record id sdr.RecordId = new byte[2] { response.RecordData[1], response.RecordData[0] }; // set the record version sdr.RecordVersion = response.RecordData[2]; // set record type sdr.RecordType = response.RecordData[3]; // set record length sdr.RecordLenght = response.RecordData[4]; // set the record data to record data sdr.RecordData = response.RecordData; // update the record Id (signals loop exit) recordId = BitConverter.ToUInt16(new byte[2] { response.RecordIdMsByte, response.RecordIdLsByte }, 0); } else { sdr.completionCode = response.CompletionCode; break; } } pass++; // add the record to the collection records.Add(sdr); } } // return collection SdrCollection sdrMessages = new SdrCollection(); // check response collection holds values if (records.Count > 0) { // sdr version array byte[] verarr = new byte[2]; // record id short id; foreach (SdrRecord record in records) { if (record.completionCode == 0) { // set the sdr collection completion code to indicate a failure occurred sdrMessages.completionCode = record.completionCode; // record Id id = BitConverter.ToInt16(record.RecordId, 0); // populdate version array Buffer.BlockCopy(IpmiSharedFunc.ByteSplit(record.RecordVersion, new int[2] { 4, 0 }), 0, verarr, 0, 2); string sVersion = Convert.ToUInt16(verarr[1]).ToString(CultureInfo.InvariantCulture) + "." + Convert.ToInt16(verarr[0]).ToString(CultureInfo.InvariantCulture); // set version Decimal version = 0; // sdr record version number if (!decimal.TryParse(sVersion, out version)) { version = 0; } GetSdrMetaData(id, version, record.RecordType, record, ref sdrMessages); } // set the sdr completion code to indicate a failure occurred sdrMessages.completionCode = record.completionCode; } } return sdrMessages; }
/// <summary> /// Get Sensor Data Repository Information Incrementally. Returns SDR Info. /// </summary> public virtual SdrCollection GetSdrIncrement() { // Default Record Off Set int offSet = 0; // Number of Bytes to Read. 0xFF for entire record. int bytesToRead = 0; // SDR RecordId (0000h for entry point) ushort recordId = 0; // Last SDR RecordId (aborts event log Loop) ushort lastRecordId = 65535; // security mech to step out of loop. int pass = 0; // create sdr record collection for raw SDR records. IpmiSdrCollection records = new IpmiSdrCollection(); // reserve the SDR for partial reads ReserveSdrResponse reserve = (ReserveSdrResponse)this.IpmiSendReceive( new ReserveSdrRequest(), typeof(ReserveSdrResponse)); if (reserve.CompletionCode == 0) { // reserved LS byte byte reserveLs = reserve.ReservationLS; // reserved MS byte byte reserveMs = reserve.ReservationMS; // lenght of the SDR record int recordLenght = 0; // sdr record index int index = 0; // retrieve all records while connected by recursively calling the SDR entry command while (recordId != lastRecordId || pass > 1000) { // create SDR record SdrRecord sdr = new SdrRecord(); { // initialize offset to zero for new record offSet = 0; // initialize to the minimum read size of 5 bytes. (extended to 14 on incremental read) bytesToRead = 5; // get the SEL record GetSdrPartialResponse response = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserveLs, reserveMs, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); // set the sdr completion code. sdr.completionCode = response.CompletionCode; if (response.CompletionCode == 0) { // set record id sdr.RecordId = new byte[2] { response.RecordData[1], response.RecordData[0] }; // set the record version sdr.RecordVersion = response.RecordData[2]; // set record type sdr.RecordType = response.RecordData[3]; // set record lenght sdr.RecordLenght = response.RecordData[4]; // convert record lenght to int & add the initial 5 bytes. recordLenght = (Convert.ToInt32(response.RecordData[4])) + 5; // create SDR byte array to hold record data. byte[] sdrDataRecord = new byte[recordLenght]; // initilize sdr array index to zero index = 0; // copy SDR data to the sdr data record array and increase the index Buffer.BlockCopy(response.RecordData, 0, sdrDataRecord, index, bytesToRead); index += bytesToRead; // increase the offset by bytes already read offSet += bytesToRead; int offsetPass = 0; // recursively get partial sdr record until the offset reaches the recordlenght while (offSet < recordLenght || offsetPass > 100) { // get maximum read chunk (14 bytes or less). bytesToRead = (recordLenght - offSet); // the size to 14 byte increments bytesToRead = (bytesToRead > 14) ? 14 : bytesToRead; // get partial SDR record GetSdrPartialResponse partialResponse = (GetSdrPartialResponse)this.IpmiSendReceive( new GetSdrPartialRequest(reserve.ReservationLS, reserve.ReservationMS, recordId, offSet, bytesToRead), typeof(GetSdrPartialResponse)); if (partialResponse.CompletionCode == 0) { // copy SDR data to the sdr data array and increase the index size by bytes read. Buffer.BlockCopy(partialResponse.RecordData, 0, sdrDataRecord, index, bytesToRead); index += bytesToRead; // increase the offset by the bytes read offSet += bytesToRead; } else { // set the sdr completion code. sdr.completionCode = partialResponse.CompletionCode; break; } offsetPass++; } // set the record data to the fully populdated sdrDataRecord array sdr.RecordData = sdrDataRecord; // update the record Id (signals loop exit) recordId = BitConverter.ToUInt16(new byte[2] { response.RecordIdMsByte, response.RecordIdLsByte }, 0); } else { break; } } pass++; // add the record to the collection records.Add(sdr); } } // return collection SdrCollection sdrMessages = new SdrCollection(); sdrMessages.completionCode = reserve.CompletionCode; if (reserve.CompletionCode != 0) { sdrMessages.command = typeof(ReserveSdrResponse).ToString(); } // check response collection holds values if (records.Count > 0) { // sdr version array byte[] verarr = new byte[2]; // record id short id; foreach (SdrRecord record in records) { if (record.completionCode == 0) { // record Id id = BitConverter.ToInt16(record.RecordId, 0); // populdate version array Buffer.BlockCopy(IpmiSharedFunc.ByteSplit(record.RecordVersion, new int[2] { 4, 0 }), 0, verarr, 0, 2); string sVersion = Convert.ToUInt16(verarr[1]).ToString(CultureInfo.InvariantCulture) + "." + Convert.ToInt16(verarr[0]).ToString(CultureInfo.InvariantCulture); // set version Decimal version = 0; // sdr record version number if (!decimal.TryParse(sVersion, out version)) { version = 0; } GetSdrMetatData(id, version, record.RecordType, record, ref sdrMessages); } else { sdrMessages.command += " : " + sdrMessages.completionCode + ". RecordId:" + record.RecordId.ToString(); sdrMessages.completionCode = record.completionCode; } } } return(sdrMessages); }