bea_MicMemory Class Reference
[IVD Back-End Agent]

#include <bea_mediummemory.h>

Inheritance diagram for bea_MicMemory:

Inheritance graph
[legend]
Collaboration diagram for bea_MicMemory:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 84 of file bea_mediummemory.h.


Public Member Functions

 bea_MicMemory (scsi_IO *const a_scsiIO_p)
virtual ~bea_MicMemory ()
virtual UInt16_t GetAvailable ()
virtual void Detect ()
virtual string GetSerialNumber ()
virtual string GetManufacturer ()
virtual UInt8_t GetSecondaryID ()
virtual UInt8_t GetChecksum ()
virtual void Read ()
virtual void Write ()

Private Member Functions

UInt16_t GetSize (UInt16_t a_paramCode)

Private Attributes

 log_CLASSID_m

Constructor & Destructor Documentation

bea_MicMemory::bea_MicMemory ( scsi_IO *const   a_scsiIO_p  ) 

Definition at line 33 of file bea_micmemory.cpp.

References log_FUNC_m.

00034     : bea_MediumMemory(a_scsiIO_p) {
00035 
00036     log_FUNC_m(bea_MicMemory);
00037 }

bea_MicMemory::~bea_MicMemory (  )  [virtual]

Definition at line 41 of file bea_micmemory.cpp.

References log_FUNC_m.

00041                               {
00042     log_FUNC_m(~bea_MicMemory);
00043 }


Member Function Documentation

UInt16_t bea_MicMemory::GetAvailable (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 125 of file bea_micmemory.cpp.

References data_Log::GetMICAvailSize(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_AVAILABLE_d, and data_Log::pg_MICFIXED.

Referenced by Detect().

00125                                      {
00126     log_FUNC_m(GetAvailable);
00127 
00128     data_Log micSize(data_Log::pg_MICFIXED, mic_AVAILABLE_d);
00129     cdb_LogSense logSns(micSize);
00130     m_scsiIO_p->IOCtl(logSns);
00131 
00132     return micSize.GetMICAvailSize();
00133 }

Here is the call graph for this function:

Here is the caller graph for this function:

void bea_MicMemory::Detect (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 160 of file bea_micmemory.cpp.

References data_ModeAITConfigPage_t::ait, data_Mode_t::ait, data_ModeAIT_t::aitPage, cmn_GetEnvVariable(), dbg_LOW, dbg_NORM, GetAvailable(), ivd_BaseException::GetFriendly(), data_Mode::GetModeStruct(), scsi_IO::IOCtl(), log_DBG_m, log_FUNC_m, bea_MediumMemory::m_detected, bea_MediumMemory::m_scsiIO_p, data_ModeAITConfigPage_t::mic, and data_Mode::pg_AITCFG.

00160                            {
00161     log_FUNC_m(Detect);
00162     m_detected = false;
00163     {
00164         static const char* const useMIC_c("HSM_USE_MIC");
00165         string useMIC = cmn_GetEnvVariable(useMIC_c);
00166         // Is the MIC functionality enabled at all?
00167         if (useMIC == "no" || useMIC == "false") {
00168             log_DBG_m(dbg_LOW,
00169                 useMIC_c << " = \'" << useMIC <<
00170                 "\'. MIC functionality explicitly disabled.");
00171             return;
00172         }
00173     }
00174     {
00175         static const char* const useMIC_c("HSM_USE_CM");
00176         string useMIC = cmn_GetEnvVariable(useMIC_c);
00177         // Is the MIC functionality enabled at all?
00178         if (useMIC == "no" || useMIC == "false") {
00179             log_DBG_m(dbg_LOW,
00180                 useMIC_c << " = \'" << useMIC <<
00181                 "\'. MIC functionality explicitly disabled.");
00182             return;
00183         }
00184     }
00185 
00186     try {
00187         data_Mode ad(data_Mode::pg_AITCFG);
00188         cdb_ModeSense  aitInfo(ad);
00189         m_scsiIO_p->IOCtl(aitInfo);
00190 
00191         if ( ad.GetModeStruct().ait.aitPage.ait == 0 ) {
00192             log_DBG_m(dbg_NORM, "AIT tape in DDS mode. MIC will not be used. ");
00193         }
00194         else if ( ad.GetModeStruct().ait.aitPage.mic != 0 ) {
00195             // Was MIC detected by the tape drive?
00196             log_DBG_m(dbg_LOW, "MIC detected.");
00197             log_DBG_m(dbg_NORM, "MIC space left: " << GetAvailable());
00198             m_detected = true;
00199         }
00200         else {
00201             log_DBG_m(dbg_LOW, "MIC NOT detected.");
00202         }
00203     }
00204     catch (ivd_Exception &ie) {
00205         log_DBG_m(dbg_NORM, "MIC not detected: " << ie.GetFriendly());
00206     }
00207     catch (...) {
00208         log_DBG_m(dbg_NORM, "MIC not detected. Unknown exception.");
00209     }
00210 }

Here is the call graph for this function:

string bea_MicMemory::GetSerialNumber (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 213 of file bea_micmemory.cpp.

References data_Log::GetMICSerialNumber(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_SERNUM_d, and data_Log::pg_MICFIXED.

00213                                      {
00214     log_FUNC_m(GetSerialNumber);
00215 
00216     data_Log sn(data_Log::pg_MICFIXED, mic_SERNUM_d);
00217     cdb_LogSense logSns(sn);
00218     m_scsiIO_p->IOCtl(logSns);
00219     return sn.GetMICSerialNumber();
00220 }

Here is the call graph for this function:

string bea_MicMemory::GetManufacturer (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 223 of file bea_micmemory.cpp.

References cmn_Num2Str(), data_Log::GetMICManufacturer(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_SERNUM_d, and data_Log::pg_MICFIXED.

00223                                       {
00224     log_FUNC_m(GetManufacturer);
00225     data_Log sn(data_Log::pg_MICFIXED, mic_SERNUM_d);
00226     cdb_LogSense logSns(sn);
00227     m_scsiIO_p->IOCtl(logSns);
00228     return cmn_Num2Str(sn.GetMICManufacturer());
00229 }

Here is the call graph for this function:

UInt8_t bea_MicMemory::GetSecondaryID (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 232 of file bea_micmemory.cpp.

References data_Log::GetMICSecondaryID(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_SERNUM_d, and data_Log::pg_MICFIXED.

00232                                      {
00233     log_FUNC_m(GetSecondaryID);
00234 
00235     data_Log sn(data_Log::pg_MICFIXED, mic_SERNUM_d);
00236     cdb_LogSense logSns(sn);
00237     m_scsiIO_p->IOCtl(logSns);
00238     return sn.GetMICSecondaryID();
00239 }

Here is the call graph for this function:

UInt8_t bea_MicMemory::GetChecksum (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 242 of file bea_micmemory.cpp.

References data_Log::GetMICChecksum(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_SERNUM_d, and data_Log::pg_MICFIXED.

00242                                   {
00243     log_FUNC_m(GetChecksum);
00244 
00245     data_Log sn(data_Log::pg_MICFIXED, mic_SERNUM_d);
00246     cdb_LogSense logSns(sn);
00247     m_scsiIO_p->IOCtl(logSns);
00248     return sn.GetMICChecksum();
00249 }

Here is the call graph for this function:

void bea_MicMemory::Read (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 47 of file bea_micmemory.cpp.

References cmn_HexDump(), dbg_DETAIL, dbg_LOW, data_Log::GetMICNote(), data_Log::GetMICNoteLength(), bea_MediumMemory::GetNeededSpace(), GetSize(), scsi_IO::IOCtl(), log_DBG_m, log_FUNC_m, log_WRN_m, bea_MediumMemory::m_scsiIO_p, bea_MediumMemory::m_tcmmedia_vol, bea_MediumMemory::m_tcmmedium, mic_DATAVOLNOTE_d, mic_SIZEVOLNOTE_d, min, data_Log::pg_MICVARIABLE, and data_Log::UpdateMICNoteSize().

00047                          {
00048     log_FUNC_m(Read);
00049 
00050     if (GetSize(mic_SIZEVOLNOTE_d) == 0) {
00051         log_DBG_m(dbg_LOW, "Nothing in MIC. micNoteSize is 0.");
00052         return;
00053     };
00054 
00055     log_DBG_m(dbg_LOW, "Reading contents from MIC.");
00056 
00057     UInt16_t neededSpace(GetNeededSpace());
00058     data_Log micNote(data_Log::pg_MICVARIABLE, mic_DATAVOLNOTE_d);
00059     micNote.UpdateMICNoteSize(neededSpace);
00060 
00061     cdb_LogSense logSns(micNote);
00062     m_scsiIO_p->IOCtl(logSns);
00063 
00064     UInt16_t micNoteLen(micNote.GetMICNoteLength());
00065 
00066     log_DBG_m(dbg_DETAIL, "Read " << micNoteLen << " bytes. Needed " << neededSpace);
00067 
00068     log_DBG_m(dbg_DETAIL,
00069         "MIC Note contents:" << endl <<
00070         cmn_HexDump(micNote.GetMICNote(), micNoteLen, 16, true) );
00071 
00072     if (micNoteLen > neededSpace) {
00073         ostringstream sstr;
00074         log_WRN_m(
00075         "MIC note size does not match requested. Broken MIC? "
00076         << micNoteLen << " != " << neededSpace
00077         << " parameter: 0x" << hex << data_Log::pg_MICVARIABLE );
00078     }
00079 
00080     UInt16_t toCopy(min(neededSpace, micNoteLen));
00081 
00082     vector<char> contents(neededSpace, 0);
00083 
00084     memcpy(&(contents[0]), micNote.GetMICNote(), toCopy);
00085 
00086     memcpy(&m_tcmmedium, &(contents[0]), sizeof(m_tcmmedium));
00087 
00088     // WARNING: Vector uses contiguous memory region in memory.
00089     // We'll copy contents from internal buffer to m_tcmmedia_vol
00090     // for all volumes with one memcpy.
00091     memcpy(
00092         &(m_tcmmedia_vol[0]),
00093         &(contents[0]) + sizeof(m_tcmmedium),
00094         neededSpace - sizeof(m_tcmmedium));
00095 }

Here is the call graph for this function:

void bea_MicMemory::Write (  )  [virtual]

Implements bea_MediumMemory.

Definition at line 99 of file bea_micmemory.cpp.

References bea_MediumMemory::GetNeededSpace(), scsi_IO::IOCtl(), log_FUNC_m, bea_MediumMemory::m_scsiIO_p, bea_MediumMemory::m_tcmmedia_vol, bea_MediumMemory::m_tcmmedium, mic_DATAVOLNOTE_d, data_Log::pg_MICVARIABLE, and data_Log::SetMICNote().

00099                           {
00100 
00101     log_FUNC_m(Write);
00102 
00103     vector<char> contents(GetNeededSpace(), 0);
00104     memcpy(&(contents[0]), &m_tcmmedium, sizeof(m_tcmmedium));
00105 
00106     // WARNING: Vector uses contiguous memory region in memory.
00107     // We'll copy contents to internal buffer to m_tcmmedia_vol
00108     // for all volumes with one memcpy.
00109     memcpy(
00110         &(contents[0]) + sizeof(m_tcmmedium),
00111         &(m_tcmmedia_vol[0]),
00112         GetNeededSpace() - sizeof(m_tcmmedium));
00113 
00114     data_Log micNote(data_Log::pg_MICVARIABLE, mic_DATAVOLNOTE_d);
00115 
00116     micNote.SetMICNote(&(contents[0]), GetNeededSpace());
00117     cdb_LogSelect logSel(micNote);
00118 
00119     m_scsiIO_p->IOCtl(logSel);
00120 }

Here is the call graph for this function:

UInt16_t bea_MicMemory::GetSize ( UInt16_t  a_paramCode  )  [private]

Definition at line 137 of file bea_micmemory.cpp.

References dbg_NORM, data_Log::GetMICNoteSize(), ie_INVALID_ARG, scsi_IO::IOCtl(), log_DBG_m, log_FUNC_m, bea_MediumMemory::m_scsiIO_p, mic_SIZEPARTNOTE_d, mic_SIZEVOLNOTE_d, and data_Log::pg_MICFIXED.

Referenced by Read().

00137                                                     {
00138     log_FUNC_m(GetSize);
00139 
00140     // Check valid ranges.
00141     if ( a_paramCode != mic_SIZEVOLNOTE_d &&
00142         (a_paramCode < mic_SIZEPARTNOTE_d ||
00143          a_paramCode > (mic_SIZEPARTNOTE_d+64)) ) {
00144 
00145         throw ivd_InternalError(
00146             ie_INVALID_ARG, "MIC size argument out of range.");
00147     };
00148 
00149     data_Log micNoteSize(data_Log::pg_MICFIXED, a_paramCode);
00150     cdb_LogSense logSns(micNoteSize);
00151     m_scsiIO_p->IOCtl(logSns);
00152 
00153     log_DBG_m(dbg_NORM, "MIC Note size: " << micNoteSize.GetMICNoteSize());
00154 
00155     return micNoteSize.GetMICNoteSize();
00156 }

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Reimplemented from bea_MediumMemory.

Definition at line 102 of file bea_mediummemory.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:00:08 2012 for OPENARCHIVE by  doxygen 1.5.6