Go to the documentation of this file.
29 #ifndef INC_CINOSCOPMODULE_H
30 #define INC_CINOSCOPMODULE_H
38 #define DF_INOS_COP_MAX_MODULES 16
40 #define DF_INOS_COP_PORT_ADDRESS 0x80000000
41 #define DF_INOS_COP_PORT_MEMORY_SIZE 256
43 #define DF_INOS_COP_RAM_ADDRESS 0x00000000UL
44 #define DF_INOS_COP_RAM_MEMORY_SIZE 512
47 #define DF_INOS_COP_PORT_JITTER_ACT 0xF0
48 #define DF_INOS_COP_PORT_JITTER_MIN 0xF1
49 #define DF_INOS_COP_PORT_JITTER_MAX 0xF2
50 #define DF_INOS_COP_PORT_JITTER_RESET 0xF3
51 #define DF_INOS_COP_PORT_RAM_ADR 0xF8
52 #define DF_INOS_COP_PORT_RAM_DAT 0xF9
53 #define DF_INOS_COP_PORT_STATUS 0xFC
54 #define DF_INOS_COP_PORT_APPREV 0xFE
55 #define DF_INOS_COP_PORT_SEQREV 0xFF
57 #define DF_INOS_COP_PORT_ENABLE_WRITE 0x4000
59 #define DF_INOS_COP_FLAG_EEPROM_VALID 0x00000001
61 #define DF_INOS_COP_FLAG_XML_MOD_VALID 0x00000002
63 #define DF_INOS_COP_FLAG_RAM_PROTECT 0x00000004
65 #define DF_INOS_COP_FLAG_LITTLE_ENDIAN 0x00000008
67 #define DF_INOS_COP_FLAG_INFO_1 0x00000010
71 #define DF_INOS_COP_STRT_OPTION_SLOW 0x00000001
84 #include <xmlparser.h>
86 class CINOSIncoAction;
97 eOptSubName = 0x00000001
122 #if INOS_BYTE_ORDER == INOS_LITTLE_ENDIAN
209 class CINCOCOPDevice;
211 class CINOSBusPortHandlerRangeCondition;
226 {
return &m_pDesc->
m_cName[0]; };
229 {
return m_cTargetInfo; };
237 {
return (
void*)((uintptr)&m_Eeprom+auOffset); };
241 {
return sizeof(m_Eeprom); };
244 {
return m_CardNode; };
272 memcpy(&m_Eeprom, &aBoardInfo,
sizeof(aBoardInfo));
280 return m_uFpgaRevision;
286 return m_uAddressSwitch;
301 { m_pNext = apNext;};
311 uint32
PutBlock32(uint32 auDest, uint32* apSource, uint16 auNumber,
320 uint32
GetBlock32(uint32 auSource, uint32* apDest, uint16 auNumber,
324 uint32
PutBlock16(uint32 auDest, uint16* apSource, uint16 auNumber, uint32 auFlags = 0);
326 uint32
GetBlock16(uint32 auSource, uint16* apDest, uint16 auNumber, uint32 auFlags = 0);
334 uint32
PutBlock8(uint32 auDest, uint8* apSource, uint16 auNumber,
343 uint32
GetBlock8(uint32 auSource, uint8* apDest, uint16 auNumber,
347 uint32
PortPut16(uint16 auNumber, uint16 auValue);
349 uint32
PortGet16(uint16 auNumber, uint16& auValue);
352 uint32
PortPut32(uint16 auNumber, uint32 auValue);
354 uint32
PortGet32(uint16 auNumber, uint32& auValue);
356 #if defined(INOS_PORTS_64BIT)
357 uint32 PortPut64(uint16 auNumber, uint64 auValue);
360 uint32 PortGet64(uint16 auNumber, uint64& auValue);
364 uint32
GetVariable(
const char* apName, real64& arValue);
366 uint32
GetVariable(
const char* apName,
char* apValue, uint32 auLength);
369 uint32
GetVariableEx(
const char* apName, uint32 auIncoType,
void* apValue, uint32 auSize);
372 uint32
PutVariable(
const char* apName, real64 arValue);
374 uint32
PutVariable(
const char* apName,
const char* apValue);
377 uint32
CallProcedure(
const char* apName,
long aiNrOfParameters,
378 void* apParameters,
void* apResult);
397 CINCOCOPDevice* apDevice,
bool abOnline);
428 #if INOS_BYTE_ORDER == INOS_LITTLE_ENDIAN
431 case 1 :
return *((T*) ((uintptr)p^3));
432 case 2 :
return *((T*) ((uintptr)p^2));
433 case 4 :
return *((T*)p);
435 uint64 u = (uint64(*((T*)p))<<32) + *((T*)((uintptr)p+4));
505 void SetupPortCache(uint16 auNumber, uint8 auSize,
const char* apType);
516 {
return m_uPortCachable[auNumber>>5] & (1<<(auNumber&0x1f)); }
522 {
return (m_ePortCache == ePortCacheEnabled) && (m_uPortCacheValid[auNumber>>5] & (1<<(auNumber&0x1f))); }
528 eCnsUpdateCacheOk = 3,
529 eCnsUpdateCacheMax = 16,
535 CINCOCOPDevice* m_pDevice;
543 char m_cEepromInfo[256];
545 uint32 m_uFpgaRevision;
547 uint16 m_uAddressSwitch;
549 char m_cTargetInfo[256];
551 uint16 m_uMemoryPortSize;
552 uint32 m_uMemoryPortBgn;
553 uint32 m_uMemoryPortEnd;
555 uint32 m_uMemoryRam16BitSize;
556 uint32 m_uMemoryRamBgn;
557 uint32 m_uMemoryRamEnd;
559 enum EPortCacheState {
562 } m_ePortCache = ePortCacheEnabled;
564 uint16 m_uPortCache[256]{};
566 uint32 m_uPortCachable[8]{};
568 uint32 m_uPortCacheValid[8]{};
570 uint16 m_uPortStatus;
574 CINOSIncoAction* m_pStartup;
576 CINCOObject* m_pInco;
578 std::vector<CINOSCOPModule *> m_Distribution;
584 const char* m_pModXml;
586 const char* m_pCardNodeXml;
588 uint32 m_uCardNodeXmlSize;
590 char* m_pCardNodeXmlCompressed;
592 uint32 m_uCardNodeXmlCompressedSize;
601 #endif // INC_CINOSCOPMODULE_H
void FixPortRegistration()
Adjust the ports registration to show the real value.
#define DF_INOS_COP_FLAG_XML_MOD_VALID
Flag if module's xml config file is valid.
Definition: cinoscopmodule.h:62
bool IsOnline()
Return online state of cop module.
uint32 GetAddress()
get module address
Definition: cinoscopmodule.h:233
uint8 m_uChecksum
check sum
Definition: cinoscopmodule.h:128
uint8 GetChecksum(uint32 auLength)
Calculate checksum.
XMLNode GetXmlNode()
Get card node.
Definition: cinoscopmodule.h:243
uint32 GetVariableEx(const char *apName, uint32 auIncoType, void *apValue, uint32 auSize)
get variable from module tree
void GetBoardInfo(SINOSCOPModuleEeprom &aBoardInfo, bool &abEepromValid)
Get board info for target registration.
Definition: cinoscopmodule.h:266
uint32 PortPut16(uint16 auNumber, uint16 auValue)
put 16 bit value to cop module port
CINOSCOPModule(CINOSCOPMaster *apMaster, SINOSCOPModule *apDesc, SINOSCOPModuleEeprom *apEeprom, XMLNode aCardNode, CINCOCOPDevice *apDevice, bool abOnline)
Constructor of COP module.
uint32 GetBlock32(uint32 auSource, uint32 *apDest, uint16 auNumber, uint32 auFlags=0)
Read a number of 32 bit values.
char m_cRevision[4]
revision
Definition: cinoscopmodule.h:138
uint32 m_uVendorId
vendor id (0x00000000-indel, 0x80000000-custom)
Definition: cinoscopmodule.h:110
void SetChecksum()
Insert checksum into structure.
bool ChecksumOk()
Return true if internal checksum is ok.
void UpdateTargetString()
Terminate eeprom strings and update info string.
CINCOObject * GetInco()
get inco
Definition: cinoscopmodule.h:246
uint8 m_uDataOffset
data offset
Definition: cinoscopmodule.h:130
uint32 PutBlock8(uint32 auDest, uint8 *apSource, uint16 auNumber, uint32 auFlags=0)
Write a number of 8 bit values.
void DisablePortCache()
Disable port cache.
virtual uint32 EepromWrite()
Write cop bus module eeprom.
uint32 PutBlock16(uint32 auDest, uint16 *apSource, uint16 auNumber, uint32 auFlags=0)
put block of 16 bit values
CINOSCOPModule * GetNext()
module pointer to next cop module
Definition: cinoscopmodule.h:297
DECLARE_DYNAMIC(SINOSCOPModule)
Support dynamic object handling.
uint32 PortGet32(uint16 auNumber, uint32 &auValue)
get 32 bit value from cop module port
uint32 GetEepromSize()
get eeprom address
Definition: cinoscopmodule.h:240
uint32 CallProcedure(const char *apName, long aiNrOfParameters, void *apParameters, void *apResult)
call procedure.
uint32 m_uAddress
module address
Definition: cinoscopmodule.h:103
char m_cProductCode[16]
required product code (e.g. 6108386xx) or empty if don't care
Definition: cinoscopmodule.h:112
uint32 GetVariable(const char *apName, real64 &arValue)
get variable from module tree
uint32 PortGet16(uint16 auNumber, uint16 &auValue)
get 16 bit value from cop module port
bool IsPortCachable(uint16 auNumber)
Check if port cachable.
Definition: cinoscopmodule.h:515
char m_cCardName[24]
card name
Definition: cinoscopmodule.h:136
#define DF_INOS_COP_FLAG_EEPROM_VALID
Flag if eeprom could be read and is valid.
Definition: cinoscopmodule.h:60
void * GetEepromAddress(uint32 auOffset)
get eeprom address
Definition: cinoscopmodule.h:236
uint32 m_uEepromSize
eeprom size
Definition: cinoscopmodule.h:105
uint32 GetFpgaRevision()
Get the fpga revision.
Definition: cinoscopmodule.h:279
void EnablePortCache()
Enable port cache.
void SetXmlMod(const char *apModXml)
Set content of module's xml file.
Definition: cinoscopmodule.h:469
uint16 m_uVersion
structure revision
Definition: cinoscopmodule.h:132
void ResolveEepromValues(XMLNode &aAction)
Resolve values with eeprom references (e.g. uint16:Eeprom[80]).
uint32 m_uWorkNumber
work number
Definition: cinoscopmodule.h:140
void SetBoardInfo(SINOSCOPModuleEeprom &aBoardInfo)
Set board info for target registration.
Definition: cinoscopmodule.h:271
char m_cRevision[16]
required revision (e.g. 0x000001xx) or empty if don't care
Definition: cinoscopmodule.h:114
const char * GetStateText()
Get state text.
Struct for the COP module board info data.
Definition: cinoscopmodule.h:124
virtual uint32 GetXmlSize()
get size of xml description
virtual uint32 EepromRead()
Read cop bus module eeprom.
uint32 PutVariable(const char *apName, real64 arValue)
put variable in module tree
virtual ~CINOSCOPModule()
Destructor.
void SetDistributionModule(CINOSCOPModule *apDist, char *apXml)
set pointer to distribution module
uint32 m_uCardNumber
card number
Definition: cinoscopmodule.h:134
bool HasRamPortsProtected()
Check if module needs config enable bit set for writing ram ports F8/F9.
Definition: cinoscopmodule.h:256
uint32 PortPut32(uint16 auNumber, uint32 auValue)
put 32 bit value to cop module port
uint8 m_uReserved[8]
reserved
Definition: cinoscopmodule.h:180
uint32 m_uOptions
options
Definition: cinoscopmodule.h:146
The class handling a single COP module.
Definition: cinoscopmodule.h:219
Struct with data describing a COP module.
Definition: cinoscopmodule.h:94
virtual const char * GetXmlCompressedAddr()
get address of xml description
uint32 GetBlock8(uint32 auSource, uint8 *apDest, uint16 auNumber, uint32 auFlags=0)
Read a number of 8 bit values.
uint32 GetBlock16(uint32 auSource, uint16 *apDest, uint16 auNumber, uint32 auFlags=0)
get block of 16 bit values
void Clear()
Clear data so checksum becomes invalid.
Struct of the eeprom data of a COP module.
Definition: cinoscopmodule.h:177
bool IsEepromValid()
Return true if eeprom is valid.
Definition: cinoscopmodule.h:481
The main class handling a COP bus, local or remote (GinLink passive).
Definition: cinoscopmaster.h:250
void SetupPortCache(uint16 auNumber, uint8 auSize, const char *apType)
Check if given port needs to be cached.
const char * GetInfo()
get module info
Definition: cinoscopmodule.h:228
void SetNext(CINOSCOPModule *apNext)
set pointer to next cop module
Definition: cinoscopmodule.h:300
bool CheckRangeCondition(CINOSBusPortHandlerRangeCondition *apCond)
Check if the condition of a range is met.
T GetEepromValue(uint32 auOffset)
Get eeprom value with certain type.
Definition: cinoscopmodule.h:425
uint32 m_uOptions
module options (Bit 0=1 -> only use sub module name for process image
Definition: cinoscopmodule.h:108
void UpdatePortCache(uint16 auNumber, uint8 auSize)
Update cache of given port.
DECLARE_DYNAMIC(SINOSCOPModuleEeprom)
Support dynamic object handling.
CINCOCOPDevice * GetDevice()
get pointer to cop inco device
Definition: cinoscopmodule.h:402
void SetXmlModValid(bool abXmlModValid)
Set validity of module's xml file.
Definition: cinoscopmodule.h:461
void Startup()
run startup actions
uint64 m_uMacNumber
mac number
Definition: cinoscopmodule.h:142
uint16 GetAddressSwitch()
Get the address switch read after scanning.
Definition: cinoscopmodule.h:285
virtual uint32 GetXmlCompressedSize()
get compressed size of xml description
#define DF_INOS_COP_FLAG_RAM_PROTECT
Flag if ram config ports (0xF8/0xF9) need enable flag before writing.
Definition: cinoscopmodule.h:64
uint8 m_uData[1024-64]
Start of data (pointed to by DataOffset).
Definition: cinoscopmodule.h:187
uint32 m_uSeriesNumber
series number
Definition: cinoscopmodule.h:144
bool IsPortCached(uint16 auNumber)
Check if port cached.
Definition: cinoscopmodule.h:521
#define DF_INOS_COP_FLAG_LITTLE_ENDIAN
Flag if ram is little endian.
Definition: cinoscopmodule.h:66
uint8 GetChecksum_old_style(uint32 auLength)
Calculate checksum old style (before r9963, 18.10.2019)
inosName32 m_cName
module name (modname.subname)
Definition: cinoscopmodule.h:101
uint32 PutBlock32(uint32 auDest, uint32 *apSource, uint16 auNumber, uint32 auFlags=0)
Write a number of 32 bit values.
bool IsRamLittleEndian()
Check if module ram is little endian.
Definition: cinoscopmodule.h:261
void RegisterRam()
Register variables pointing into onboard ram.
const char * GetName()
get module name
Definition: cinoscopmodule.h:225