AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
ntv2konaflashprogram.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef NTV2KONAFLASHPROGRAM_H
9 #define NTV2KONAFLASHPROGRAM_H
10 
11 #include "ntv2card.h"
12 #include <fstream>
13 #include <vector>
14 #include <string>
15 #include <sys/types.h>
16 #include <sys/stat.h>
17 #include <fcntl.h>
18 #include <iostream>
19 #include "ntv2debug.h"
20 #include "ntv2mcsfile.h"
21 #include "ntv2spiinterface.h"
22 #include "ntv2bitfile.h"
23 
24 #define MAXBITFILE_HEADERSIZE 512
25 #define MAXMCSINFOSIZE 256
26 #define MAXMCSLICENSESIZE 256
27 #define MCS_STEPS 6
28 
29 struct MacAddr
30 {
31  uint8_t mac[6];
32  std::string AsString(void) const;
33 };
34 
35 
37 {
38  public:
40 
42  virtual ~CNTV2FlashProgress() {}
43  virtual bool UpdatePercentage (const size_t inPercentage) {(void) inPercentage; return true;}
44 }; // CNTV2PercentUpdater
45 
46 
48 {
49 public:
51  CNTV2KonaFlashProgram (const UWord boardNumber);
52  virtual ~CNTV2KonaFlashProgram();
53  static std::string FlashBlockIDToString (const FlashBlockID inID, const bool inShortDisplay = false); // New in SDK 16.0
54 
55 public:
56  virtual bool SetBoard (UWord boardNumber, uint32_t index = 0);
57  bool ReadHeader (FlashBlockID flashBlock);
58  bool ReadInfoString();
59  bool SetBitFile (const std::string & inBitfileName, std::ostream & outMsgs, const FlashBlockID blockNumber = AUTO_FLASHBLOCK); // New in SDK 16.0
60  bool SetMCSFile (const std::string & sMCSFileName);
61  std::string Program (bool fullVerify = false);
62  bool ProgramFromMCS(bool verify);
63  bool ProgramSOC(bool verify = true);
64  bool ProgramCustom (const std::string & sCustomFileName, const uint32_t addr, std::ostream & outMsgs);
65  bool ProgramKonaxMB (const std::string & sCustomFileName, const uint32_t addr, std::ostream & outMsgs);
66  bool EraseBlock (FlashBlockID blockNumber);
67  bool EraseChip (UWord chip = 0);
68  bool CreateSRecord (bool bChangeEndian);
69  bool CreateEDIDIntelRecord ();
70  void SetQuietMode ();
71  bool VerifyFlash (FlashBlockID flashBlockNumber, bool fullVerify = false);
72  bool ReadFlash (NTV2Buffer & outBuffer, const FlashBlockID flashID, CNTV2FlashProgress & inFlashProgress = CNTV2FlashProgress::nullUpdater); // New in SDK 16.0
73  bool SetBankSelect (BankSelect bankNumber);
74  bool SetFlashBlockIDBank(FlashBlockID blockID);
75  bool ROMHasBankSelect();
76  uint32_t ReadBankSelect ();
77  bool SetMBReset();
78  bool IsInstalledFWRunning (bool & outIsRunning, std::ostream & outErrorMsgs);
79  bool WriteCommand(_FLASH_COMMAND inCommand);
80 
81  std::string GetDesignName (void) const {return _parser.DesignName();}
82  std::string GetPartName (void) const {return _parser.PartName();}
83  std::string GetDate (void) const {return _parser.Date();}
84  std::string GetTime (void) const {return _parser.Time();}
85  const NTV2BitfileHeaderParser & Parser (void) const {return _parser;}
86  uint32_t GetNumBytes(void) const {return _numBytes;}
87  const std::string & GetMCSInfo (void) const {return _mcsInfo;}
88  void ParsePartitionFromFileLines(uint32_t address, uint16_t & partitionOffset);
89  bool CreateBankRecord(BankSelect bankID);
90 
91  bool ProgramMACAddresses(MacAddr * mac1, MacAddr * mac2);
92  bool ReadMACAddresses(MacAddr & mac1, MacAddr & mac2);
93  bool ProgramLicenseInfo(const std::string & licenseString);
94  bool ReadLicenseInfo(std::string & licenseString);
95  void DisplayData(uint32_t address, uint32_t len);
96  bool ProgramInfoFromString(std::string infoString);
97  bool FullProgram(std::vector<uint8_t> & dataBuffer);
98 
99  int32_t NextMcsStep() {return ++_mcsStep;}
100 
101  bool WaitForFlashNOTBusy();
102  bool ProgramFlashValue(uint32_t address, uint32_t value);
103  bool FastProgramFlash256(uint32_t address, uint32_t* buffer);
104  bool EraseSector(uint32_t sectorAddress);
105  bool CheckFlashErasedWithBlockID(FlashBlockID flashBlockNumber);
106  uint32_t ReadDeviceID();
107  bool SetDeviceProperties();
108  void DetermineFlashTypeAndBlockNumberFromFileName(const std::string & bitFileName);
109  static void SRecordOutput (const char *pSRecord);
110 
111  uint32_t GetSectorAddressForSector(FlashBlockID flashBlockNumber,uint32_t sectorNumber)
112  {
113  return GetBaseAddressForProgramming(flashBlockNumber)+(sectorNumber*_sectorSize);
114  }
115 
116  uint32_t GetBaseAddressForProgramming(FlashBlockID flashBlockNumber)
117  {
118  switch ( flashBlockNumber )
119  {
120  default:
121  case MAIN_FLASHBLOCK: return _mainOffset;
122  case FAILSAFE_FLASHBLOCK: return _failSafeOffset;
123  case SOC1_FLASHBLOCK: return _soc1Offset;
124  case SOC2_FLASHBLOCK: return _soc2Offset;
125  case MAC_FLASHBLOCK: return _macOffset;
126  case MCS_INFO_BLOCK: return _mcsInfoOffset;
127  case LICENSE_BLOCK: return _licenseOffset;
128  }
129 
130  }
131 
132  uint32_t GetNumberOfSectors(FlashBlockID flashBlockNumber)
133  {
134  switch ( flashBlockNumber )
135  {
136  default:
137  case MAIN_FLASHBLOCK: return _numSectorsMain;
138  case FAILSAFE_FLASHBLOCK: return _numSectorsFailSafe;
139  case SOC1_FLASHBLOCK: return _numSectorsSOC1;
140  case SOC2_FLASHBLOCK: return _numSectorsSOC2;
141  case MAC_FLASHBLOCK: return 1;
142  case MCS_INFO_BLOCK: return 1;
143  case LICENSE_BLOCK: return 1;
144  }
145  }
146 
147  bool VerifySOCPartition(FlashBlockID flashID, uint32_t FlashBlockOffset);
148  bool CheckAndFixMACs();
149  bool MakeMACsFromSerial( const char *sSerialNumber, MacAddr *pMac1, MacAddr *pMac2 );
150 
151 protected:
153  uint8_t * _customFileBuffer;
154  uint32_t _bitFileSize;
156  std::string _bitFileName;
157  std::string _mcsInfo;
158  uint32_t _spiDeviceID;
159  uint32_t _flashSize;
160  uint32_t _bankSize;
161  uint32_t _sectorSize;
162  uint32_t _mainOffset;
163  uint32_t _failSafeOffset;
164  uint32_t _macOffset;
165  uint32_t _mcsInfoOffset;
166  uint32_t _licenseOffset;
167  uint32_t _soc1Offset;
168  uint32_t _soc2Offset;
169  uint32_t _numSectorsMain;
170  uint32_t _numSectorsSOC1;
171  uint32_t _numSectorsSOC2;
173  uint32_t _numBytes;
175  uint32_t _deviceID;
176  bool _bQuiet;
177  int32_t _mcsStep;
179  std::vector<uint8_t> _partitionBuffer;
183 }; // CNTV2KonaFlashProgram
184 
185 #endif // NTV2KONAFLASHPROGRAM_H
CNTV2KonaFlashProgram::_numSectorsMain
uint32_t _numSectorsMain
Definition: ntv2konaflashprogram.h:169
CNTV2KonaFlashProgram::GetDesignName
std::string GetDesignName(void) const
Definition: ntv2konaflashprogram.h:81
CNTV2KonaFlashProgram::_spiDeviceID
uint32_t _spiDeviceID
Definition: ntv2konaflashprogram.h:158
CNTV2FlashProgress::UpdatePercentage
virtual bool UpdatePercentage(const size_t inPercentage)
Definition: ntv2konaflashprogram.h:43
FAILSAFE_FLASHBLOCK
@ FAILSAFE_FLASHBLOCK
Definition: ntv2enums.h:4188
CNTV2KonaFlashProgram::GetNumberOfSectors
uint32_t GetNumberOfSectors(FlashBlockID flashBlockNumber)
Definition: ntv2konaflashprogram.h:132
MCS_INFO_BLOCK
@ MCS_INFO_BLOCK
Definition: ntv2enums.h:4193
CNTV2KonaFlashProgram::Parser
const NTV2BitfileHeaderParser & Parser(void) const
Definition: ntv2konaflashprogram.h:85
CNTV2FlashProgress::nullUpdater
static CNTV2FlashProgress & nullUpdater
Definition: ntv2konaflashprogram.h:39
NTV2Buffer
A generic user-space buffer object that has an address and a length. Used most often to share an arbi...
Definition: ntv2publicinterface.h:5967
CNTV2KonaFlashProgram::_bitFileName
std::string _bitFileName
Definition: ntv2konaflashprogram.h:156
_FLASH_COMMAND
_FLASH_COMMAND
Definition: ntv2enums.h:4205
SOC1_FLASHBLOCK
@ SOC1_FLASHBLOCK
Definition: ntv2enums.h:4190
CNTV2KonaFlashProgram::_mainOffset
uint32_t _mainOffset
Definition: ntv2konaflashprogram.h:162
CNTV2KonaFlashProgram::_parser
NTV2BitfileHeaderParser _parser
Definition: ntv2konaflashprogram.h:155
CNTV2KonaFlashProgram::_partitionBuffer
std::vector< uint8_t > _partitionBuffer
Definition: ntv2konaflashprogram.h:179
CNTV2FlashProgress
Definition: ntv2konaflashprogram.h:36
CNTV2KonaFlashProgram::GetTime
std::string GetTime(void) const
Definition: ntv2konaflashprogram.h:84
CNTV2KonaFlashProgram::GetMCSInfo
const std::string & GetMCSInfo(void) const
Definition: ntv2konaflashprogram.h:87
MacAddr::AsString
std::string AsString(void) const
Definition: ntv2konaflashprogram.cpp:32
MacAddr::mac
uint8_t mac[6]
Definition: ntv2konaflashprogram.h:31
ntv2debug.h
MAC_FLASHBLOCK
@ MAC_FLASHBLOCK
Definition: ntv2enums.h:4192
CNTV2KonaFlashProgram::_customFileBuffer
uint8_t * _customFileBuffer
Definition: ntv2konaflashprogram.h:153
CNTV2KonaFlashProgram::_numSectorsSOC2
uint32_t _numSectorsSOC2
Definition: ntv2konaflashprogram.h:171
CNTV2KonaFlashProgram::_soc2Offset
uint32_t _soc2Offset
Definition: ntv2konaflashprogram.h:168
CNTV2KonaFlashProgram::_bQuiet
bool _bQuiet
Definition: ntv2konaflashprogram.h:176
CNTV2KonaFlashProgram::_mcsStep
int32_t _mcsStep
Definition: ntv2konaflashprogram.h:177
AUTO_FLASHBLOCK
@ AUTO_FLASHBLOCK
Definition: ntv2enums.h:4189
CNTV2KonaFlashProgram::_failSafeOffset
uint32_t _failSafeOffset
Definition: ntv2konaflashprogram.h:163
ntv2mcsfile.h
Declares the CNTV2MCSfile class.
CNTV2KonaFlashProgram::_numSectorsFailSafe
uint32_t _numSectorsFailSafe
Definition: ntv2konaflashprogram.h:172
CNTV2KonaFlashProgram::_numSectorsSOC1
uint32_t _numSectorsSOC1
Definition: ntv2konaflashprogram.h:170
FlashBlockID
FlashBlockID
Definition: ntv2enums.h:4185
MAIN_FLASHBLOCK
@ MAIN_FLASHBLOCK
Definition: ntv2enums.h:4187
CNTV2FlashProgress::~CNTV2FlashProgress
virtual ~CNTV2FlashProgress()
Definition: ntv2konaflashprogram.h:42
CNTV2KonaFlashProgram::_bitFileBuffer
NTV2Buffer _bitFileBuffer
Definition: ntv2konaflashprogram.h:152
CNTV2KonaFlashProgram::_failSafePadding
uint32_t _failSafePadding
Definition: ntv2konaflashprogram.h:180
CNTV2KonaFlashProgram::_mcsFile
CNTV2MCSfile _mcsFile
Definition: ntv2konaflashprogram.h:178
CNTV2MCSfile
Instances of me can parse an MCS file.
Definition: ntv2mcsfile.h:51
CNTV2KonaFlashProgram::_mcsInfoOffset
uint32_t _mcsInfoOffset
Definition: ntv2konaflashprogram.h:165
ntv2card.h
Declares the CNTV2Card class.
CNTV2KonaFlashProgram::_flashID
FlashBlockID _flashID
Definition: ntv2konaflashprogram.h:174
UWord
uint16_t UWord
Definition: ajatypes.h:244
SOC2_FLASHBLOCK
@ SOC2_FLASHBLOCK
Definition: ntv2enums.h:4191
CNTV2KonaFlashProgram::_macOffset
uint32_t _macOffset
Definition: ntv2konaflashprogram.h:164
LICENSE_BLOCK
@ LICENSE_BLOCK
Definition: ntv2enums.h:4194
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:262
CNTV2KonaFlashProgram::GetBaseAddressForProgramming
uint32_t GetBaseAddressForProgramming(FlashBlockID flashBlockNumber)
Definition: ntv2konaflashprogram.h:116
CNTV2KonaFlashProgram::_numBytes
uint32_t _numBytes
Definition: ntv2konaflashprogram.h:173
CNTV2KonaFlashProgram::_deviceID
uint32_t _deviceID
Definition: ntv2konaflashprogram.h:175
ntv2bitfile.h
Declares the CNTV2Bitfile class.
CNTV2KonaFlashProgram::GetDate
std::string GetDate(void) const
Definition: ntv2konaflashprogram.h:83
NTV2BitfileHeaderParser
Knows how to extract information from a bitfile header.
Definition: ntv2bitfile.h:26
CNTV2KonaFlashProgram::_licenseOffset
uint32_t _licenseOffset
Definition: ntv2konaflashprogram.h:166
CNTV2KonaFlashProgram::_spiFlash
CNTV2SpiFlash * _spiFlash
Definition: ntv2konaflashprogram.h:181
ntv2spiinterface.h
Declares the CNTV2SpiFlash and CNTV2AxiSpiFlash classes.
CNTV2KonaFlashProgram::GetPartName
std::string GetPartName(void) const
Definition: ntv2konaflashprogram.h:82
AJAExport
#define AJAExport
Definition: export.h:33
CNTV2KonaFlashProgram::_bitFileSize
uint32_t _bitFileSize
Definition: ntv2konaflashprogram.h:154
CNTV2KonaFlashProgram::NextMcsStep
int32_t NextMcsStep()
Definition: ntv2konaflashprogram.h:99
CNTV2KonaFlashProgram::_flashSize
uint32_t _flashSize
Definition: ntv2konaflashprogram.h:159
CNTV2KonaFlashProgram::GetSectorAddressForSector
uint32_t GetSectorAddressForSector(FlashBlockID flashBlockNumber, uint32_t sectorNumber)
Definition: ntv2konaflashprogram.h:111
CNTV2KonaFlashProgram::_mcsInfo
std::string _mcsInfo
Definition: ntv2konaflashprogram.h:157
CNTV2SpiFlash
Definition: ntv2spiinterface.h:24
CNTV2KonaFlashProgram::GetNumBytes
uint32_t GetNumBytes(void) const
Definition: ntv2konaflashprogram.h:86
CNTV2KonaFlashProgram
Definition: ntv2konaflashprogram.h:47
MacAddr
Definition: ntv2konaflashprogram.h:29
CNTV2KonaFlashProgram::_hasExtendedCommandSupport
bool _hasExtendedCommandSupport
Definition: ntv2konaflashprogram.h:182
CNTV2KonaFlashProgram::_sectorSize
uint32_t _sectorSize
Definition: ntv2konaflashprogram.h:161
CNTV2KonaFlashProgram::_bankSize
uint32_t _bankSize
Definition: ntv2konaflashprogram.h:160
BankSelect
BankSelect
Definition: ntv2enums.h:4197
CNTV2KonaFlashProgram::_soc1Offset
uint32_t _soc1Offset
Definition: ntv2konaflashprogram.h:167
CNTV2FlashProgress::CNTV2FlashProgress
CNTV2FlashProgress()
Definition: ntv2konaflashprogram.h:41