29#ifndef INC_CINOSCOPMASTER_H
30#define INC_CINOSCOPMASTER_H
38#define DF_COP_CMD_READ 0x80003000
39#define DF_COP_CMD_WRITE 0x80007000
42#define DF_COP_BLINK_JOB0 0x80005FFC
43#define DF_COP_BLINK_JOB1 0x00010192
45#define DF_COP_PORTCOMM_JOB0 0x80003F00
46#define DF_COP_PORTCOMM_JOB1 0x00010000
49#define DF_COP_EEPROM_CMD 0x10000000
50#define DF_COP_EEPROM_CMD_READ 0x11000000
51#define DF_COP_EEPROM_CMD_WRITE 0x12000000
52#define DF_COP_CMD_MASK 0x0F000000
55#define DF_COP_SPI_CMD 0x30000000
56#define DF_COP_SPI_CMD_COMM 0x31000000
59#define DF_COP_INTERNAL_ADDRESS 8
61#define DF_COP_MASTER_ADDRESS 9
64#define ER_COP_CONFIG_MISMATCH 0x00000001
67#define DF_COP_MOD_XDB "xcfg-mod-cop"
77#include <cincocopdevice.h>
90#define DPR_OFFSET(aMember) inos_offsetof(SINOSCOPMaster, aMember)
92#define DPR_MAX_OFFSET(aMember) (inos_offsetof(SINOSCOPMaster, aMember) + sizeofm(SINOSCOPMaster, aMember))
94#define DPR_OFFSET8K(aMember) inos_offsetof(SINOSCOPMaster8K, aMember)
96#define DPR_MAX_OFFSET8K(aMember) (inos_offsetof(SINOSCOPMaster8K, aMember) + sizeofm(SINOSCOPMaster8K, aMember))
120 uint16 m_uGlTlgCounter;
163 uint16 m_uGlTlgCounter;
263 eEepromRead = (1<<0),
264 eEepromWrite = (1<<1),
280 eAll = (eEepromRead | eEepromWrite | eSpiRead | eSpiWrite)
300 void SeqStart(uint32 auCycleTimeNs, uint32 auSyncPage=0,
bool abSoftSync =
false);
344 return m_pDevice->GetDprAddress(auDprOffset);
359 uint32 auBufferSize);
372 friend class CGINModuleActive;
373 friend class CINOSMcTargetFieldbusMasterCopBus;
409 return m_uSeqTableSize;
433 uint32 auAddress, uint32 auAppRev, uint32 auProductCode);
447 m_uOptionalFeatures = auFeatures;
454 m_uOptionalFeatures |= auFeature;
460 return (m_uOptionalFeatures & aeFeature);
465 return (m_uOptionalFeatures & eParasite);
470 return (m_uOptionalFeatures & eChief);
479 void uSleep(uint32 auMicroseconds);
482 static const char* GetXmlFile(
const char* apcProductCode);
494 uint32 auType, uint32 auAddress, XMLNode aParentNode, XMLNode& axDestNode);
502 static XMLNode GetSystemModuleConfig(
const char* apcProductCode,
503 uint8 auType,
bool abConfigLib);
506 void StartReadModuleEeprom(uint32 auNumber, uint32 auSize);
513 bool ReadModuleSpi(uint32 auNumber, uint32 auAddress, uint32 auCount,
514 uint8* apBuffer, uint32 auBufferSize);
524 void StartModuleSpiComm(uint32 auNumber, uint32 auAddress, uint32 auSize,
525 uint32 auCommand, uint32 auCmdSize,
bool abRound);
534 bool WriteModuleSpi(uint32 auNumber, uint32 auAddress, uint32 auCount,
541 uint32 SpiGetFlashStatus(uint32 auNumber);
547 bool SpiEnableWrite(uint32 auNumber);
553 bool SpiUnlock(uint32 auNumber);
559 bool SpiLock(uint32 auNumber);
565 bool SpiWaitForCompletion(uint32 auNumber);
572 bool SpiDoEraseSectorAt(uint32 auNumber, uint32 auSectorAddress);
575 void StopModuleSpiAccess();
577 void GetSpiData(uint8* apBuffer, uint32 auBufferSize);
579 void PutSpiData(uint8* apBuffer, uint32 auBufferSize);
585 void SetSupportedModules(
const char* apModules)
588 inos_strncpy(m_cSupportedModules, apModules,
sizeof(m_cSupportedModules));
594 CINCOCOPDevice* m_pDevice;
598 uint32 m_uSeqTable[1024];
600 uint32 m_uSeqTableSize;
604 volatile uint32* m_pWatchdog;
608 uint32 m_uOptionalFeatures;
612 eFlgForceMainIrq = 0x00000001,
613 eFlgTableValid = 0x00000002,
619 class CINOSSharedMemoryCopBus* m_pShared = 0;
620 uint8* m_pScanData = 0;
621 uint32 m_uScanDataIndex = 0;
625 char m_cSupportedModules[256] = {0};
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
The main class handling a COP bus, local or remote (GinLink passive).
Definition cinoscopmaster.h:251
void SeqStart(uint32 auCycleTimeNs, uint32 auSyncPage=0, bool abSoftSync=false)
start sequencer
CINOSCOPModule * GetNext(CINOSCOPModule *apModule)
get next module
Definition cinoscopmaster.h:323
CINOSCOPModule * GetModule(const char *apName)
Get module by name.
CINOSCOPModule * GetFirst()
get first module
Definition cinoscopmaster.h:319
bool IsChief() const
Definition cinoscopmaster.h:469
CINOSCOPModule * GetModule(uint32 auAddress)
Get module by address.
void * GetDprAddress(uint16 auDprOffset)
get dpr address
Definition cinoscopmaster.h:343
void SetOptionalFeatures(uint32 auFeatures)
Definition cinoscopmaster.h:446
void SeqStop()
stop sequencer
bool ReadModuleEeprom(uint32 auNumber, SINOSCOPModuleEeprom &aEeprom, uint32 auSize)
Complete sequence to read a module's eeprom.
bool CheckRangeCondition(const char *apModule, CINOSBusPortHandlerRangeCondition *apCond)
Check if the condition of a range is met.
uint32 GetError()
Get errors of cop bus master.
Definition cinoscopmaster.h:385
bool IsModuleOnline()
Return online state of device's bus module.
uint32 SeqGetTime(uint32 uSubCycle=0)
get table length [ns]
CINOSCOPMaster(CINCOCOPDevice *apDevice, bool abCopPas=false)
Constructor.
void ToggleWatchdog()
toggle watchdog (only on active master)
bool IsParasite() const
Definition cinoscopmaster.h:464
void BusScan(XMLNode aConfigNode)
scan bus
uint32 GetSeqTableSize()
Get size of sequence table in uint32 units.
Definition cinoscopmaster.h:408
virtual ~CINOSCOPMaster()
Destructor.
void BusStartup()
call startup actions of all modules
CINOSCOPModule * CreateModule(XMLNode xCard, const char *apModName, uint32 auAddress, uint32 auAppRev, uint32 auProductCode)
Create a module with the given information.
void CreateModules(XMLNode aConfigNode)
Create modules with given xml config file.
CINCOCOPDevice * GetDevice()
get pointer to cop device
Definition cinoscopmaster.h:347
void SeqWatchdog(uint32 auBusControl, int16 aiCycleAdjust)
handle watchdog (only on active master)
uint32 GetCycleTimer() const
bool ReadModuleSpiData(uint32 auNumber, uint32 auCount, uint8 *apBuffer, uint32 auBufferSize)
Read some data from a module's spi flash (fixed memory address).
void SeqClear()
clear sequencer table
void AddOptionalFeatures(uint32 auFeature)
Definition cinoscopmaster.h:453
bool WriteModuleSpiData(uint32 auNumber, uint32 auCount, uint8 *apBuffer)
Write some data into a module's spi flash (fixed memory address).
bool IsOptionalFeatureEnabled(EOptionalFeatures aeFeature) const
Definition cinoscopmaster.h:459
bool HasModuleType(const char *apType)
Return true if copbus has a module of the given type.
void SeqWrite(uint32 *apTable, bool abForceIrq=false, SINOSCOPSubroutine *apSubChain=0)
write sequencer table
EOptionalFeatures
Definition cinoscopmaster.h:260
uint32 * GetSeqTable()
Get pointer to sequence backup table.
Definition cinoscopmaster.h:402
void SeqEnableIrq()
enable irq
bool WriteModuleEeprom(uint32 auNumber, SINOSCOPModuleEeprom &aEeprom, uint32 auSize)
Write a module's eeprom.
The class handling a single COP module.
Definition cinoscopmodule.h:214
CINOSCOPModule * GetNext()
module pointer to next cop module
Definition cinoscopmodule.h:291
EXmlError
Errors that can occur while handling xml data.
Definition inos_xml.h:586
COP layout for master with an 8K area.
Definition cinoscopmaster.h:148
uint8 m_uReserved2[0x7000]
reserved
Definition cinoscopmaster.h:183
uint8 m_uTransInco[0x200]
Transmit data for inco. // 0x0E00.
Definition cinoscopmaster.h:181
uint8 m_uReceiveData0[0x600]
receive data 0 // 0x8000
Definition cinoscopmaster.h:185
uint8 m_uMisc1[0x1C0]
misc
Definition cinoscopmaster.h:150
uint32 m_uCmdDesc
command desc // 0x0318
Definition cinoscopmaster.h:167
uint32 m_uCmdJob
eeprom/jtag/spi // 0x031C
Definition cinoscopmaster.h:169
uint32 m_uRevision
revision // 0x01C0
Definition cinoscopmaster.h:152
uint32 m_uBlinkJob[2]
blink job // 0x0320
Definition cinoscopmaster.h:171
uint32 m_uCycleTimer
cycle timer // 0x0300
Definition cinoscopmaster.h:156
uint8 m_uMasterTable[(0x800-0x328)]
busmaster table // 0x0328
Definition cinoscopmaster.h:173
uint8 m_uTransData[0x600-4 *4]
trans data // 0x0800
Definition cinoscopmaster.h:175
uint8 m_uReceiveInco1[0x200]
Receive data 1 for inco. // 0x8E00.
Definition cinoscopmaster.h:191
uint32 m_uPortCommWrite[2]
port communication 'write' part // 0x0DF8
Definition cinoscopmaster.h:179
uint16 m_uGlTlgTime
GinLink Tlg-Cnt / Tlg-Time // 0x0310.
Definition cinoscopmaster.h:162
uint32 m_uPortCommRead[2]
port communication // 0x0DF0
Definition cinoscopmaster.h:177
DECLARE_DYNAMIC(SINOSCOPMaster8K)
Support dynamic object handling.
uint8 m_uReceiveData1[0x600]
receive data 1 // 0x8800
Definition cinoscopmaster.h:189
uint8 m_uReceiveInco0[0x200]
Receive data 0 for inco. // 0x8600.
Definition cinoscopmaster.h:187
uint32 m_uReserved[2]
reserved
Definition cinoscopmaster.h:158
uint8 m_uMisc2[0x300-0x1C0-4]
misc
Definition cinoscopmaster.h:154
uint32 m_uReserved1
reserved // 0x0314
Definition cinoscopmaster.h:165
uint32 m_uCycleCount
cycle counter // 0x030C
Definition cinoscopmaster.h:160
COP layout for master with a small area.
Definition cinoscopmaster.h:105
uint32 m_uBlinkJob[2]
blink job // 0x0320
Definition cinoscopmaster.h:128
uint8 m_uMisc1[0x1C0]
misc
Definition cinoscopmaster.h:107
uint8 m_uReceiveData1[0x200]
receive data 1 // 0x0E00
Definition cinoscopmaster.h:140
uint8 m_uTransData[0x200-4 *4]
trans data // 0x0A00
Definition cinoscopmaster.h:132
uint8 m_uMasterTable[(0xA00-0x320) -2 *4]
busmaster table // 0x0328
Definition cinoscopmaster.h:130
uint8 m_uReceiveData0[0x200]
receive data 0 // 0x0C00
Definition cinoscopmaster.h:138
uint32 m_uReserved[2]
reserved
Definition cinoscopmaster.h:115
uint8 m_uMisc2[0x300-0x1C0-4]
misc
Definition cinoscopmaster.h:111
uint16 m_uGlTlgTime
GinLink Tlg-Cnt / Tlg-Time // 0x0310.
Definition cinoscopmaster.h:119
uint32 m_uCycleCount
cycle counter // 0x030C
Definition cinoscopmaster.h:117
DECLARE_DYNAMIC(SINOSCOPMaster)
Support dynamic object handling.
uint32 m_uReserved1
reserved // 0x0314
Definition cinoscopmaster.h:122
uint32 m_uCycleTimer
cycle timer // 0x0300
Definition cinoscopmaster.h:113
uint32 m_uRevision
revision // 0x01C0
Definition cinoscopmaster.h:109
uint32 m_uPortCommWrite[2]
port communication 'write' part // 0x0BF8
Definition cinoscopmaster.h:136
uint32 m_uCmdDesc
command desc // 0x0318
Definition cinoscopmaster.h:124
uint32 m_uPortCommRead[2]
port communication 'read' part // 0x0BF0
Definition cinoscopmaster.h:134
uint32 m_uCmdJob
eeprom/jtag/spi // 0x031C
Definition cinoscopmaster.h:126
Struct of the eeprom data of a COP module.
Definition cinoscopmodule.h:174
Struct to hold info about scanned or configured modules.
Definition cinoscopmaster.h:199
XMLNode m_xCard
The parsed xml file.
Definition cinoscopmaster.h:215
uint32 m_uEepromSize
Eeprom size.
Definition cinoscopmaster.h:213
bool m_bNameUnique
Flag if the module name is unique (no need to add address)
Definition cinoscopmaster.h:221
bool m_bCreateModule
Flag if the module should be created in the software.
Definition cinoscopmaster.h:217
bool m_bOnline
Flag if the module is online (scanned) or not.
Definition cinoscopmaster.h:219
SINOSCOPModuleEeprom m_Eeprom
The content of the module's eeprom.
Definition cinoscopmaster.h:209
uint32 m_uProductCode
The product code from the eeprom or xml file.
Definition cinoscopmaster.h:211
const char * m_pModName
The module name from the xml file or eeprom.
Definition cinoscopmaster.h:203
bool m_bEeprom
Flag if the module's eeprom is valid.
Definition cinoscopmaster.h:207
bool m_bModXmlValid
Flag if the module's xml file is valid.
Definition cinoscopmaster.h:205
DECLARE_DYNAMIC(SINOSCOPScanMod)
Support dynamic object handling.
uint16 m_uAppRev
The application revision as read from the module.
Definition cinoscopmaster.h:201
const char * m_pModXml
Module's xml file.
Definition cinoscopmaster.h:223
COP bus subroutines.
Definition cinoscopmaster.h:231
uint32 m_uCode[eMaxCode]
Subroutine code (max. 1kB).
Definition cinoscopmaster.h:240
uint32 m_uIndex
Subroutine index.
Definition cinoscopmaster.h:238
SINOSCOPSubroutine * m_pNext
Pointer to next subroutine.
Definition cinoscopmaster.h:242
uint32 m_uId
Subroutine id.
Definition cinoscopmaster.h:236