obs-studio/build_dependencies/aja/include/ajalibraries/ajantv2/includes/ntv2mcsfile.h
Ward Nakchbandi b48576284b first commit
2023-03-04 20:33:16 +03:00

118 lines
3.5 KiB
C++

/* SPDX-License-Identifier: MIT */
/**
@file ntv2mcsfile.h
@brief Declares the CNTV2MCSfile class.
@copyright (C) 2015-2021 AJA Video Systems, Inc. All rights reserved.
**/
#ifndef NTV2MCSFILE_H
#define NTV2MCSFILE_H
#include <string>
#include <vector>
#include <fstream>
#include "ntv2utils.h"
#ifdef AJALinux
#include <stdint.h>
#include <stdlib.h>
#endif
typedef enum
{
IRT_UNKNOWN,
IRT_DR, // Data Record
IRT_EOFR, // End Of File Record
IRT_ESAR, // Extended Segment Address Record
IRT_ELAR // Extended Linear Address Record
} IntelRecordType;
struct IntelRecordInfo
{
IntelRecordInfo()
: byteCount (0)
, linearAddress (0)
, segmentAddress (0)
, recordType (IRT_UNKNOWN)
, checkSum (0) {}
uint8_t byteCount;
uint16_t linearAddress;
uint32_t segmentAddress;
IntelRecordType recordType;
uint8_t * dataBuffer[16];
uint8_t checkSum;
};
/**
@brief Instances of me can parse an MCS file.
**/
class CNTV2MCSfile
{
public:
/**
@brief My constructor.
**/
CNTV2MCSfile();
/**
@brief My destructor.
**/
virtual ~CNTV2MCSfile();
/**
@brief Opens the bitfile at the given path, then parses its header.
@param[in] inMCSFilePath Specifies the path to the MCS bitfile to be parsed.
@return True if open & parse succeeds; otherwise false.
**/
virtual bool Open (const std::string & inMCSFilePath);
/**
@brief Closes mcs file (if open).
**/
virtual void Close (void);
virtual bool InsertBitFile (const std::string & inBitFileName, const std::string & inMCSFileName, const std::string & inUserMessage);
virtual void IRecordOutput (const char *pIRecord);
virtual uint32_t GetFileByteStream (uint32_t numberOfLines = 0);
virtual bool isReady (void) const;
virtual bool FindExtendedLinearAddressRecord (uint16_t address = 0x0000);
virtual bool GetCurrentParsedRecord (IntelRecordInfo &recordInfo);
virtual uint32_t GetPartition (UByteSequence & patitionBuffer, uint16_t baseELARaddress, uint16_t & partitionOffset, bool nextPartition = false);
virtual const std::string & GetBitfileDateString (void) const {return mBitfileDate;}
virtual const std::string & GetBitfileDesignString (void) const {return mBitfileDesignName;}
virtual const std::string & GetBitfilePartNameString (void) const {return mBitfilePartName;}
virtual const std::string & GetBitfileTimeString (void) const {return mBitfileTime;}
virtual std::string GetMCSPackageVersionString (void) const;
virtual std::string GetMCSPackageDateString (void) const;
virtual bool GetMCSHeaderInfo (const std::string & inMCSFileName);
virtual inline const std::string & GetLastError (void) const {return mLastError;} ///< @return A string containing the error message, if any, from the last function that failed.
protected: // Protected Methods
virtual void SetLastError (const std::string & inStr, const bool inAppend = false);
private:
virtual bool ParseCurrentRecord (IntelRecordInfo &recordInfo);
virtual void GetMCSInfo ();
std::ifstream mMCSFileStream;
std::string mCurrentRecord;
uint32_t mFileSize;
NTV2StringList mFileLines;
NTV2StringListIter mBaseELARLocation;
NTV2StringListIter mCurrentLocation;
std::string mCommentString;
std::string mMCSInfoString;
//bitfile information contained in the MCS file
std::string mBitfileDate;
std::string mBitfileTime;
std::string mBitfileDesignName;
std::string mBitfilePartName;
std::string mLastError; // Last error message
}; // CNTV2MCSfile
#endif // NTV2MCSFILE_H