AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
ntv2bitfile.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef NTV2BITFILE_H
9 #define NTV2BITFILE_H
10 
11 #include <fstream>
12 #ifdef AJALinux
13  #include <stdint.h>
14  #include <stdlib.h>
15 #endif
16 #include "ajatypes.h"
17 #include "ajaexport.h"
18 #include "ntv2enums.h"
19 #include "ntv2publicinterface.h"
20 #include "ntv2utils.h"
21 
22 
27 {
28  public:
29  explicit NTV2BitfileHeaderParser () {Clear();}
30  bool ParseHeader (const NTV2Buffer & inHdrBuffer,
31  std::ostream & outMsgs);
32  void Clear (void);
33 
34  inline ULWord UserID (void) const {return mUserID;}
35  inline const std::string & Date (void) const {return mDate;}
36  inline const std::string & Time (void) const {return mTime;}
37  inline const std::string & PartName (void) const {return mPartName;}
38  inline const std::string & RawDesign (void) const {return mRawDesignName;}
39  std::string DesignName (void) const;
40 
41  inline ULWord DesignID (void) const {return mDesignID;}
42  inline ULWord DesignVersion (void) const {return mDesignVersion;}
43  inline ULWord BitfileID (void) const {return mBitfileID;}
44  inline ULWord BitfileVersion (void) const {return mBitfileVersion;}
45  inline ULWord ProgramOffsetBytes (void) const {return mProgOffsetBytes;}
46  inline ULWord ProgramSizeBytes (void) const {return mProgSizeBytes;}
47  inline bool IsValid (void) const {return mValid;}
48  inline bool IsTandem (void) const {return RawDesign().find("TANDEM=TRUE") != std::string::npos;}
49  inline bool IsPartial (void) const {return RawDesign().find("PARTIAL=TRUE") != std::string::npos;}
50  inline bool IsClear (void) const {return RawDesign().find("CLEAR=TRUE") != std::string::npos;}
51  inline bool IsCompress (void) const {return RawDesign().find("COMPRESS=TRUE") != std::string::npos;}
52 
53  public: // Class Methods
54  static inline ULWord GetDesignID (const ULWord userID) { return (userID & 0xff000000) >> 24; }
55  static inline ULWord GetDesignVersion (const ULWord userID) { return (userID & 0x00ff0000) >> 16; }
56  static inline ULWord GetBitfileID (const ULWord userID) { return (userID & 0x0000ff00) >> 8; }
57  static inline ULWord GetBitfileVersion (const ULWord userID) { return (userID & 0x000000ff) >> 0; }
58 
59  protected:
60  bool SetRawDesign (const std::string & inStr, std::ostream & oss);
61  bool SetDate (const std::string & inStr, std::ostream & oss);
62  bool SetTime (const std::string & inStr, std::ostream & oss);
63  inline void SetPartName (const std::string & inStr) {mPartName = inStr;}
64  bool SetProgramOffsetBytes (const ULWord inValue, std::ostream & oss);
65  bool SetProgramSizeBytes (const ULWord inValue, std::ostream & oss);
66 
67  private:
68  std::string mDate; // Compile/build date
69  std::string mTime; // Compile/build time
70  std::string mPartName; // Part name
71  std::string mRawDesignName; // Untruncated, unmodified design string
72  ULWord mUserID; // User ID
73  ULWord mProgOffsetBytes; // Program offset, in bytes
74  ULWord mProgSizeBytes; // Program length, in bytes
75  ULWord mDesignID; // Design ID
76  ULWord mDesignVersion; // Design version
77  ULWord mBitfileID; // Bitfile ID
78  ULWord mBitfileVersion; // Bitfile version
79  bool mValid; // Is valid?
80 }; // NTV2BitfileHeaderParser
81 
82 
87 {
88  public:
92  CNTV2Bitfile ();
93 
97  virtual ~CNTV2Bitfile ();
98 
104  virtual bool Open (const std::string & inBitfilePath);
105 
109  virtual void Close (void);
110 
117  virtual std::string ParseHeaderFromBuffer (const uint8_t* inBitfileBuffer, const size_t inBufferSize);
118 
124  virtual std::string ParseHeaderFromBuffer (const NTV2Buffer & inBitfileBuffer);
125 
129  virtual inline const std::string & GetDate (void) const {return mHeaderParser.Date();}
130 
134  virtual inline const std::string & GetTime (void) const {return mHeaderParser.Time();}
135 
139  virtual inline std::string GetDesignName (void) const {return mHeaderParser.DesignName();}
140 
144  virtual inline const std::string & GetPartName (void) const {return mHeaderParser.PartName();}
145 
149  virtual inline const std::string & GetLastError (void) const { return mLastError; }
150 
154  virtual inline bool IsTandem (void) const {return mHeaderParser.IsTandem();}
155 
159  virtual inline bool IsPartial (void) const {return mHeaderParser.IsPartial();}
160 
164  virtual inline bool IsClear (void) const {return mHeaderParser.IsClear();}
165 
169  virtual inline bool IsCompress (void) const {return mHeaderParser.IsCompress();}
170 
174  virtual inline ULWord GetDesignID (void) const {return mHeaderParser.DesignID();}
175 
179  virtual inline ULWord GetDesignVersion (void) const {return mHeaderParser.DesignVersion();}
180 
184  virtual inline ULWord GetBitfileID (void) const {return mHeaderParser.BitfileID();}
185 
189  virtual inline ULWord GetBitfileVersion (void) const {return mHeaderParser.BitfileVersion();}
190 
195  virtual inline ULWord GetUserID (void) const {return mHeaderParser.UserID();}
196 
200  virtual bool CanFlashDevice (const NTV2DeviceID inDeviceID) const;
201 
205  virtual NTV2DeviceID GetDeviceID (void) const;
206 
210  virtual inline size_t GetProgramStreamLength (void) const {return mReady ? size_t(mHeaderParser.ProgramSizeBytes()) : 0;}
211 
215  virtual inline size_t GetFileStreamLength (void) const {return mReady ? mFileSize : 0;}
216 
223  virtual size_t GetProgramByteStream (NTV2Buffer & outBuffer);
224 
231  virtual size_t GetFileByteStream (NTV2Buffer & outBuffer);
232 
233  public: // Class Methods
234  static NTV2DeviceID ConvertToDeviceID (const ULWord inDesignID, const ULWord inBitfileID);
235  static ULWord ConvertToDesignID (const NTV2DeviceID inDeviceID);
236  static ULWord ConvertToBitfileID (const NTV2DeviceID inDeviceID);
237  static std::string GetPrimaryHardwareDesignName (const NTV2DeviceID inDeviceID);
238  static NTV2DeviceID GetDeviceIDFromHardwareDesignName (const std::string & inDesignName);
239 
240  protected: // Protected Methods
241  virtual void SetLastError (const std::string & inStr, const bool inAppend = false);
242 
243  private: // Private Member Data
244  std::ifstream mFileStream; // Binary input filestream
245  NTV2Buffer mHeaderBuffer; // Header buffer in use
246  NTV2BitfileHeaderParser mHeaderParser; // Header parser (and state info)
247  std::string mLastError; // Last error message
248  size_t mFileSize; // Bitfile size, in bytes
249  bool mReady; // Ready?
250 }; // CNTV2Bitfile
251 
252 #endif // NTV2BITFILE_H
NTV2BitfileHeaderParser::Date
const std::string & Date(void) const
Definition: ntv2bitfile.h:35
ajaexport.h
Defines the import/export macros for producing DLLs or LIBs.
NTV2BitfileHeaderParser::GetDesignID
static ULWord GetDesignID(const ULWord userID)
Definition: ntv2bitfile.h:54
NTV2BitfileHeaderParser::DesignVersion
ULWord DesignVersion(void) const
Definition: ntv2bitfile.h:42
NTV2BitfileHeaderParser::BitfileVersion
ULWord BitfileVersion(void) const
Definition: ntv2bitfile.h:44
CNTV2Bitfile::GetUserID
virtual ULWord GetUserID(void) const
Answers with the design user ID, as extracted from the bitfile.
Definition: ntv2bitfile.h:195
NTV2BitfileHeaderParser::IsClear
bool IsClear(void) const
Definition: ntv2bitfile.h:50
NTV2BitfileHeaderParser::IsValid
bool IsValid(void) const
Definition: ntv2bitfile.h:47
NTV2Buffer
A generic user-space buffer object that has an address and a length. Used most often to share an arbi...
Definition: ntv2publicinterface.h:5993
NTV2BitfileHeaderParser::Time
const std::string & Time(void) const
Definition: ntv2bitfile.h:36
CNTV2Bitfile
Instances of me can parse a bitfile.
Definition: ntv2bitfile.h:86
CNTV2Bitfile::IsClear
virtual bool IsClear(void) const
Definition: ntv2bitfile.h:164
NTV2BitfileHeaderParser::ProgramOffsetBytes
ULWord ProgramOffsetBytes(void) const
Definition: ntv2bitfile.h:45
NTV2BitfileHeaderParser::NTV2BitfileHeaderParser
NTV2BitfileHeaderParser()
Definition: ntv2bitfile.h:29
CNTV2Bitfile::GetFileStreamLength
virtual size_t GetFileStreamLength(void) const
Definition: ntv2bitfile.h:215
NTV2BitfileHeaderParser::IsTandem
bool IsTandem(void) const
Definition: ntv2bitfile.h:48
NTV2DeviceID
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
CNTV2Bitfile::GetLastError
virtual const std::string & GetLastError(void) const
Definition: ntv2bitfile.h:149
CNTV2Bitfile::GetTime
virtual const std::string & GetTime(void) const
Definition: ntv2bitfile.h:134
CNTV2Bitfile::IsTandem
virtual bool IsTandem(void) const
Definition: ntv2bitfile.h:154
ajatypes.h
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
NTV2BitfileHeaderParser::GetDesignVersion
static ULWord GetDesignVersion(const ULWord userID)
Definition: ntv2bitfile.h:55
NTV2BitfileHeaderParser::ProgramSizeBytes
ULWord ProgramSizeBytes(void) const
Definition: ntv2bitfile.h:46
CNTV2Bitfile::GetProgramStreamLength
virtual size_t GetProgramStreamLength(void) const
Definition: ntv2bitfile.h:210
NTV2BitfileHeaderParser::GetBitfileID
static ULWord GetBitfileID(const ULWord userID)
Definition: ntv2bitfile.h:56
CNTV2Bitfile::GetBitfileID
virtual ULWord GetBitfileID(void) const
Definition: ntv2bitfile.h:184
NTV2BitfileHeaderParser::PartName
const std::string & PartName(void) const
Definition: ntv2bitfile.h:37
ULWord
uint32_t ULWord
Definition: ajatypes.h:253
NTV2BitfileHeaderParser::GetBitfileVersion
static ULWord GetBitfileVersion(const ULWord userID)
Definition: ntv2bitfile.h:57
NTV2BitfileHeaderParser::BitfileID
ULWord BitfileID(void) const
Definition: ntv2bitfile.h:43
CNTV2Bitfile::GetDesignName
virtual std::string GetDesignName(void) const
Definition: ntv2bitfile.h:139
ntv2enums.h
Enumerations for controlling NTV2 devices.
CNTV2Bitfile::IsPartial
virtual bool IsPartial(void) const
Definition: ntv2bitfile.h:159
ntv2utils.h
Declares numerous NTV2 utility functions.
NTV2BitfileHeaderParser::RawDesign
const std::string & RawDesign(void) const
Definition: ntv2bitfile.h:38
NTV2BitfileHeaderParser
Knows how to extract information from a bitfile header.
Definition: ntv2bitfile.h:26
CNTV2Bitfile::GetDate
virtual const std::string & GetDate(void) const
Definition: ntv2bitfile.h:129
AJAExport
#define AJAExport
Definition: export.h:33
NTV2BitfileHeaderParser::DesignID
ULWord DesignID(void) const
Definition: ntv2bitfile.h:41
NTV2BitfileHeaderParser::UserID
ULWord UserID(void) const
Definition: ntv2bitfile.h:34
ntv2publicinterface.h
Declares enums and structs used by all platform drivers and the SDK.
CNTV2Bitfile::IsCompress
virtual bool IsCompress(void) const
Definition: ntv2bitfile.h:169
CNTV2Bitfile::GetDesignVersion
virtual ULWord GetDesignVersion(void) const
Definition: ntv2bitfile.h:179
NTV2BitfileHeaderParser::IsCompress
bool IsCompress(void) const
Definition: ntv2bitfile.h:51
NTV2BitfileHeaderParser::SetPartName
void SetPartName(const std::string &inStr)
Definition: ntv2bitfile.h:63
CNTV2Bitfile::GetPartName
virtual const std::string & GetPartName(void) const
Definition: ntv2bitfile.h:144
CNTV2Bitfile::GetBitfileVersion
virtual ULWord GetBitfileVersion(void) const
Definition: ntv2bitfile.h:189
CNTV2Bitfile::GetDesignID
virtual ULWord GetDesignID(void) const
Definition: ntv2bitfile.h:174
NTV2BitfileHeaderParser::IsPartial
bool IsPartial(void) const
Definition: ntv2bitfile.h:49