AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
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
ULWord UserID(void) const
Definition: ntv2bitfile.h:34
virtual ULWord GetBitfileVersion(void) const
Definition: ntv2bitfile.h:189
virtual ULWord GetDesignVersion(void) const
Definition: ntv2bitfile.h:179
virtual size_t GetFileStreamLength(void) const
Definition: ntv2bitfile.h:215
bool IsTandem(void) const
Definition: ntv2bitfile.h:48
const std::string & Time(void) const
Definition: ntv2bitfile.h:36
ULWord BitfileVersion(void) const
Definition: ntv2bitfile.h:44
virtual ULWord GetUserID(void) const
Answers with the design user ID, as extracted from the bitfile.
Definition: ntv2bitfile.h:195
bool IsClear(void) const
Definition: ntv2bitfile.h:50
const std::string & Date(void) const
Definition: ntv2bitfile.h:35
Knows how to extract information from a bitfile header.
Definition: ntv2bitfile.h:26
ULWord DesignVersion(void) const
Definition: ntv2bitfile.h:42
bool IsValid(void) const
Definition: ntv2bitfile.h:47
uint32_t ULWord
Definition: ajatypes.h:223
static ULWord GetDesignVersion(const ULWord userID)
Definition: ntv2bitfile.h:55
ULWord ProgramSizeBytes(void) const
Definition: ntv2bitfile.h:46
virtual size_t GetProgramStreamLength(void) const
Definition: ntv2bitfile.h:210
virtual bool IsClear(void) const
Definition: ntv2bitfile.h:164
static ULWord GetBitfileID(const ULWord userID)
Definition: ntv2bitfile.h:56
ULWord ProgramOffsetBytes(void) const
Definition: ntv2bitfile.h:45
virtual std::string GetDesignName(void) const
Definition: ntv2bitfile.h:139
const std::string & PartName(void) const
Definition: ntv2bitfile.h:37
NTV2DeviceID
Identifies a specific AJA NTV2 device model number. The NTV2DeviceID is actually the PROM part number...
Definition: ntv2enums.h:20
Enumerations for controlling NTV2 devices.
virtual const std::string & GetLastError(void) const
Definition: ntv2bitfile.h:149
Defines the import/export macros for producing DLLs or LIBs.
virtual const std::string & GetTime(void) const
Definition: ntv2bitfile.h:134
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
virtual bool IsTandem(void) const
Definition: ntv2bitfile.h:154
virtual ULWord GetBitfileID(void) const
Definition: ntv2bitfile.h:184
const std::string & RawDesign(void) const
Definition: ntv2bitfile.h:38
static ULWord GetBitfileVersion(const ULWord userID)
Definition: ntv2bitfile.h:57
virtual bool IsPartial(void) const
Definition: ntv2bitfile.h:159
Describes a user-space buffer on the host computer. I have an address and a length, plus some optional attributes (allocated by SDK?, page-aligned? etc.).
ULWord BitfileID(void) const
Definition: ntv2bitfile.h:43
#define AJAExport
Definition: export.h:33
Declares numerous NTV2 utility functions.
virtual const std::string & GetDate(void) const
Definition: ntv2bitfile.h:129
ULWord DesignID(void) const
Definition: ntv2bitfile.h:41
virtual const std::string & GetPartName(void) const
Definition: ntv2bitfile.h:144
bool IsPartial(void) const
Definition: ntv2bitfile.h:49
virtual ULWord GetDesignID(void) const
Definition: ntv2bitfile.h:174
Instances of me can parse a bitfile.
Definition: ntv2bitfile.h:86
bool IsCompress(void) const
Definition: ntv2bitfile.h:51
void SetPartName(const std::string &inStr)
Definition: ntv2bitfile.h:63
static ULWord GetDesignID(const ULWord userID)
Definition: ntv2bitfile.h:54
Declares enums and structs used by all platform drivers and the SDK.
virtual bool IsCompress(void) const
Definition: ntv2bitfile.h:169