36#define DF_INOS_BUS_DBT "INOS-BUS"
38#define DF_INOS_BUS_MAX_NUMBER 4
39#define DF_INOS_BUS_MAX_DMY_JOBS 4
40#define DF_INOS_BUS_MAX_CATEGORY 4
41#define DF_INOS_BUS_MAX_CYCLE_NUMBER 32
43#define DF_INOS_BUS_CATEGORY_INVALID 255
44#define DF_INOS_BUS_CATEGORY_1000_US 3
45#define DF_INOS_BUS_CATEGORY_250_US 2
46#define DF_INOS_BUS_CATEGORY_125_US 1
47#define DF_INOS_BUS_CATEGORY_FASTEST 0
49#define DF_INOS_BUS_CORE_0 0
50#define DF_INOS_BUS_CORE_1 1
51#define DF_INOS_BUS_CORE_2 2
52#define DF_INOS_BUS_CORE_3 3
54#define DF_INOS_BUS_JOB_CTM_RES 0x8000
55#define DF_INOS_BUS_JOB_CLD_RES 0x4000
56#define DF_INOS_BUS_JOB_WTG_RES 0x2000
57#define DF_INOS_BUS_JOB_TIM_RES 0x1000
58#define DF_INOS_BUS_JOB_IRQ_REQ 0x0800
59#define DF_INOS_BUS_JOB_NDY_MSK 0xE000
60#define DF_INOS_BUS_JOB_IND_MSK 0x07FF
62#define DF_INOS_BUS_STACKSIZE_MIN 32768
66#define DF_INOS_BUS_STAT_IDLE 0
67#define DF_INOS_BUS_STAT_SCAN 1
68#define DF_INOS_BUS_STAT_INIT 2
69#define DF_INOS_BUS_STAT_RUN 3
70#define DF_INOS_BUS_STAT_RUN_DIAG 4
71#define DF_INOS_BUS_STAT_DOWN 5
72#define DF_INOS_BUS_STAT_STOPPED 6
76#define DF_INOS_BUS_OPTION_FLOAT 0x00000001
77#define DF_INOS_BUS_OPTION_NO_1MS 0x00000002
78#define DF_INOS_BUS_OPTION_SPLIT_SC 0x00000004
79#define DF_INOS_BUS_OPTION_STOP_ON_OVERRUN 0x00000008
80#define DF_INOS_BUS_OPTION_IGNORE_MAC 0x00000010
81#define DF_INOS_BUS_OPTION_NO_IRQ 0x00000020
82#define DF_INOS_BUS_OPTION_NO_INCO 0x00000040
83#define DF_INOS_BUS_OPTION_CYCLE_CAT 0x00000080
84#define DF_INOS_BUS_OPTION_NO_POST_HANDLER 0x00000100
85#define DF_INOS_BUS_OPTION_FAKE 0x00000200
86#define DF_INOS_BUS_OPTION_EXTENDED_PAUSE 0x00000400
87#define DF_INOS_BUS_OPTION_SIMULATED 0x00000800
88#define DF_INOS_BUS_OPTION_SLOT_IRQTIME 0x00001000
89#define DF_INOS_BUS_OPTION_JITTER_CHECK 0x00002000
91#define DF_INOS_BUS_OPTIONEX_OPT_PORT_HANDLING 0x00000001
92#define DF_INOS_BUS_OPTIONEX_RINGMODE 0x00000002
93#define DF_INOS_BUS_OPTIONEX_AUTO_CLOSE 0x00000004
94#define DF_INOS_BUS_OPTIONEX_LATE_STATE_RUNNING 0x00000008
95#define DF_INOS_BUS_OPTIONEX_DO_NOT_CREATE_PORTS 0x00000010
96#define DF_INOS_BUS_OPTIONEX_SETUP_OFFLINE_MODULE 0x00000020
97#define DF_INOS_BUS_OPTIONEX_USE_ALL_CORES 0x00000040
98#define DF_INOS_BUS_OPTIONEX_PORTS_PUBLIC 0x00000080
99#define DF_INOS_BUS_OPTIONEX_MODULES_MULTICORE 0x00000100
100#define DF_INOS_BUS_OPTIONEX_ONLY_SETUP_KNOWN_MODULES 0x00000200
101#define DF_INOS_BUS_OPTIONEX_DO_NOT_STOP_ON_TRAP 0x00000400
102#define DF_INOS_BUS_OPTIONEX_DMA_TRANSFER 0x00000800
103#define DF_INOS_BUS_OPTIONEX_PORT_REC_OVERWRITE_OFFLINE 0x00001000
104#define DF_INOS_BUS_OPTIONEX_OPT_CHANNEL_NUMBERING 0x00002000
105#define DF_INOS_BUS_OPTIONEX_NO_RECEIVE_DATA 0x00004000
106#define DF_INOS_BUS_OPTIONEX_CLEANUP_AT_RESCAN 0x00008000
107#define DF_INOS_BUS_OPTIONEX_TRADATA_COPY_IN_RAM 0x00010000
108#define DF_INOS_BUS_OPTIONEX_LOOPBACK 0x00020000
109#define DF_INOS_BUS_OPTIONEX_HARDWARE_SLOTCOUNT 0x00040000
110#define DF_INOS_BUS_OPTIONEX_MULTIPLE_INSTANCE_SUPPORT 0x00080000
112#define DF_INOS_BUS_SYNCTOLERANCE_DEFAULT 2000
113#define DF_INOS_BUS_WATCHDOGLEVEL_DEFAULT 4
117#define ER_INOS_BUS_ERRORCOUNTER 0x00000001
118#define ER_INOS_BUS_OVERRUNCOUNTER 0x00000002
119#define ER_INOS_BUS_DOWN 0x00000004
120#define ER_INOS_BUS_POSTOVERRUNCOUNTER 0x00000008
121#define ER_INOS_BUS_SYNCCORES_TIMEOUT 0x00000010
122#define ER_INOS_BUS_RESCAN 0x00000020
123#define ER_INOS_BUS_MAINTENANCE 0x00000040
124#define ER_INOS_BUS_JITTER_MAX 0x00000080
128#define DF_INOS_BUS_HOOK_FLAG_ENB 0x0001
129#define DF_INOS_BUS_HOOK_FLAG_REM 0x0002
133#define DF_INOS_BUS_HOOK_ORDER_PRE_AXIS -20
134#define DF_INOS_BUS_HOOK_ORDER_AXIS_PRE_MAP -10
135#define DF_INOS_BUS_HOOK_ORDER_AXIS_MAP 0
136#define DF_INOS_BUS_HOOK_ORDER_CONTROL 0
137#define DF_INOS_BUS_HOOK_ORDER_AXIS_PST_MAP 10
138#define DF_INOS_BUS_HOOK_ORDER_PST_AXIS 20
139#define DF_INOS_BUS_HOOK_ORDER_DEFAULT 20
143#define DF_INOS_BUS_PAGE_ANALOG 1
144#define DF_INOS_BUS_PAGE_DIGITAL 2
145#define DF_INOS_BUS_PAGE_AXIS 3
167#define INOS_CYCLEID(auCoreId, auCategory, auCycleNumber) (((uint16)auCoreId<<10)+((uint16)auCategory<<8)+(auCycleNumber&0xff))
168#define INOS_CORE_FROM_CATEGORY(aCategory) ((aCategory>>2)&0x3F)
169#define INOS_CATEGORY_FROM_CATEGORY(aCategory) (aCategory&0x03)
170#define INOS_CORE_FROM_CYCLEID(aCycleId) ((uint8)((aCycleId>>10)&0x3F))
171#define INOS_CATEGORY_FROM_CYCLEID(aCycleId) ((uint8)((aCycleId>>8)&0x03))
172#define INOS_CYCLENUMBER_FROM_CYCLEID(aCycleId) ((uint8)(aCycleId&0xFF))
174#define INOS_CYCLEID_DONT_CARE (0xffff)
175#define INOS_CORE_ID_DONT_CARE (0x3f)
177#define INOS_CYCLEID_ANY_CAT_AND_NUM ((uint16)0x03ff)
180#define INOS_CYCLEID_ANY_ON_CORE(auCoreId) (((uint16)auCoreId<<10) | INOS_CYCLEID_ANY_CAT_AND_NUM)
191#include <cinosbusjob.h>
192#include <cinosbusmodule.h>
196#include <xmlparser.h>
213 uint16 m_uMainCycleTime;
215 uint16 m_uWaitAfterReset;
217 uint16 m_uScanMaxWaitForBus;
219 uint16 m_uScanMaxWaitForModules;
223 uint16 m_uMaxEepromSize;
247 uint8 m_uScanIncludeModuleName;
251 uint32 m_uMaxChannelsPerModule;
253 uint32 m_uMaxBitsPerModule;
255 uint32 m_uCycleTimeCat[DF_INOS_BUS_MAX_CATEGORY];
257 uint8 m_uCycleTimePage[DF_INOS_BUS_MAX_CATEGORY];
259 uint8 m_uCycleTimeOversampling[DF_INOS_BUS_MAX_CATEGORY];
266 uint32 m_uSyncOffset;
268 uint32 m_uSyncTolerance;
270 uint32 m_uWatchdogLevel;
272 uint32 m_uHookFreeze;
303 eSize16 = 0x00000001,
304 eSize32 = 0x00000000,
305 eSizeMask = 0x00000001
312 void AddPort16(
volatile void* apAddress)
321 p->
m_uAddress = (uintptr) apAddress + eSize16;
326 void AddPort32(
volatile void* apAddress)
335 p->
m_uAddress = (uintptr) apAddress + eSize32;
339 #if defined(INOS_PORTS_64BIT)
341 void AddPort64(
volatile void* apAddress)
357 void AddCall(
void* apObject,
void* apMethod, uint32 auParam = 0)
402 char m_cData[0x10000-3*
sizeof(uint32)];
429 uint32 m_uOverrunCounter{};
435 uint32 m_uOverrunCounterDisabled{};
436 bool m_bOverrunDetectedByIrq{};
441 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
443 bool m_bWtgLastTicksValid{};
444 uint32 m_uWtgLastTicks{};
445 uint32 m_uWtgDeltaAct{};
446 uint32 m_uWtgDeltaMin{};
447 uint32 m_uWtgDeltaMax{};
469 uint32 m_uPostOverrunCounter;
471 uint32 m_uSuspendTicks;
479 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
503 std::atomic<uint32> m_uOverrunCounter;
505 uint32 m_uOverrunCounterReported;
512 std::atomic<uint32> m_uPostOverrunCounter;
527 enum EReservedCounts {
530 SBusSleeper(uint32 auBusTicks,
bool abClocked =
false);
566 friend void _INI_0299_CINOSBus();
572 virtual uint32 ContactModule(uint32 auAddress, uint32 auData);
574 virtual CINOSBusModule* Find(
char* apName);
576 virtual CINOSBusModule* Find(uint32 auNumber);
578 virtual CINOSBusModule* FindFromAddress(uint32 auAddress);
580 virtual CINOSBusModule* FindFromBusNr(uint32 auBusNr);
582 virtual uint8 GetBusNr(uint32 auVirtualAddress)
583 {
return (uint8) auVirtualAddress;};
586 {
return apTask ==
this; };
588 inline bool IsSimulated()
589 {
return m_pDesc && (m_pDesc->m_uOptions & DF_INOS_BUS_OPTION_SIMULATED); };
591 CINOSBusModule* FindFromDigInp(
const char* apName);
593 CINOSBusModule* FindFromDigOut(
const char* apName);
595 CINOSBusJob* FindJob(uint32 auTraAddress);
597 static CINOSBus* FindBus(
char* apName);
599 static CINOSBus* FindBus(uint32 auId);
601 static CINOSBusPort* FindPortFromInp(uint32 auNumber);
603 static CINOSBusPort* FindPortFromOut(uint32 auNumber);
613 static void SetTargetError();
616 virtual void Start(uint32 auState = DF_INOS_BUS_STAT_RUN){};
618 virtual void Stop(){};
620 virtual void Reset(){};
622 virtual void RegisterOversampling(uint32 auCycleTimeNs, uint8 auOversampling);
641 virtual uint32
RegisterHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
644 uint32 auFlags = CINOSBusHook::eFlgEnabled);
662 uint32 auFlags = CINOSBusHook::eFlgEnabled);
730 virtual const char* GetCategoryName(
731 const uint32 auCategory)
const;
736 virtual const CINOSTask* GetCategoryTask(
737 const uint32 auCategory)
const;
743 {
return m_iActCycle; };
745 virtual uint16* GetActCycleAdr(uint8 auCategory)
746 {
return (uint16*) &m_iActCycle; };
748 virtual uint16 GetActCycleId()
752 uint32 GetHeartBeat()
753 {
return m_uHeartBeat;};
755 uint32 GetSubCycles()
756 {
return m_uSubCycles;};
758 virtual void SetErrorCounter(uint32 auErrorCounter)
759 { m_uErrorCounter = auErrorCounter;};
761 virtual uint32 GetErrorCounter()
762 {
return m_uErrorCounter;};
764 void SetOverrunCounter(uint32 auOverrunCounter)
765 { m_Info.m_uOverrunCounterReported = m_Info.m_uOverrunCounter = auOverrunCounter;};
769 uint32 GetOverrunCounter()
770 {
return m_Info.m_uOverrunCounter;};
772 void SetPostOverrunCounter(uint32 auPostOverrunCounter)
773 { m_Info.m_uPostOverrunCounter = auPostOverrunCounter;};
775 uint32 GetPostOverrunCounter()
776 {
return m_Info.m_uPostOverrunCounter;};
778 virtual void DiagnosticOn();
780 virtual void DiagnosticOff();
784 if (m_pDesc)
return m_pDesc->m_cType;
else return nullptr;
786 virtual uint16 GetOffset(
bool abReal =
true) {
if (m_pDesc)
return (uint16)m_pDesc->m_uOffset;
else return 0; }
788 uint8 GetId() {
if (m_pDesc)
return m_pDesc->m_uId;
else return 0; }
790 uint32 GetOptions() {
if (m_pDesc)
return m_pDesc->m_uOptions;
else return 0; }
792 uint16 GetOptionsEx() {
if (m_pDesc)
return m_pDesc->m_uOptionsEx;
else return 0; }
794 void SetOptionsEx(uint16 auOptions)
795 {
if (m_pDesc) m_pDesc->m_uOptionsEx |= auOptions; }
797 void ClrOptionsEx(uint16 auOptions)
798 {
if (m_pDesc) m_pDesc->m_uOptionsEx &= (uint16) ~auOptions; }
800 uint64 GetTickCount();
802 uint64* GetTickCountAdr()
804 {
return &m_uTickCount; };
805 void SetTickCount(uint64 auTicks);
807 virtual uint32 GetTickTime() {
return m_uSubCycleTime; }
809 virtual uint32 GetTickTimeNs()
811 if (m_uSubCycleTimeNs)
812 return m_uSubCycleTimeNs;
814 return m_uSubCycleTime*1000;
817 uint32 GetMainCycleTime() {
return m_uMainCycleTime; }
819 uint32 GetMainCycleTimeNs()
821 if (m_uMainCycleTimeNs)
822 return m_uMainCycleTimeNs;
824 return m_uMainCycleTime*1000;
827 virtual uint32 GetSubCycleTime(uint8 auCategory=0) {
return m_uSubCycleTime; }
829 virtual uint32 GetSubCycleTimeNs(uint8 auCategory=0) {
return GetTickTimeNs(); }
831 uint32 GetError() {
return m_uError; };
833 void SetErrorMask(uint32 auMask) { m_uErrorMask = auMask;};
835 uint32 GetErrorMask() {
return m_uErrorMask;};
837 void AcceptError(uint32 auError = 0xffffffff);
839 uint8 GetScanIncludeModuleName() {
return m_pDesc->m_uScanIncludeModuleName; }
841 uint16 GetScanMaxWaitForBus() {
return m_pDesc->m_uScanMaxWaitForBus; }
843 uint16 GetScanMaxWaitForModules() {
return m_pDesc->m_uScanMaxWaitForModules; }
845 virtual uint32 GetParam(
const char* apName, real64& arResult);
847 virtual void ResetMeasure();
849 virtual void SyncBus(uint32 auCmdOffset);
851 virtual void Accelerate(){};
853 virtual void Decelerate(){};
855 virtual void Exactelerate(){};
857 real64 GetTimebase(uint32 auHigh, uint32 auLow);
859 virtual uint8 GetCategory(CINOSBusPort* apPort);
861 virtual uint8 GetFastestCategory()
864 uint32 GetCategoryNs(CINOSBusPort* apPort);
866 virtual uint8 GetCategory(SINOSBusPort* apPort);
868 uint8 GetCategory(uint32 auCycleTimeNs,
bool abAssertOnError =
true);
870 uint32 GetCategoryNs(uint8 auCategory);
872 uint16 GetCycleId(CINOSBusPort* apPort);
874 uint8 GetPage(CINOSBusPort* apPort);
876 uint8 GetPage(uint32 auCycleTimeNs);
878 uint32 ConvertToNs(uint32 auValue);
881 virtual uint16 GetCycleId(
const char* apName);
883 virtual uint32 GetCycleTimeNs(
const char* apName);
885 virtual void Sleep(uint32 auBusTicks)
895 virtual void SleepClocked(uint32 auBusTicks)
908 virtual void FlushCache(uint8 auCategory) {};
911 virtual CINCOObject* GetRegister();
954 INOSOptimizationBarrier();
956 INOS_INLINE bool AtomicGatherExit(uint32 auToken) {
958 INOSOptimizationBarrier();
978 friend class CINOSBusJob;
979 friend class CINOSBusModule;
980 friend class CINOSBusChannelHandler;
987 friend class CGINModuleIMP;
988 friend void _INI_0399_CINOSBus();
989 friend void _INI_0500_CINOSBus();
998 char m_cStateMsg[32];
999 uint32 m_uMainCycleTime;
1000 uint32 m_uMainCycleTimeNs;
1001 uint32 m_uSubCycleTime;
1002 uint32 m_uSubCycleTimeNs;
1003 uint16 m_uSubCycles;
1007 uint32 m_uErrorCounter;
1008 CINOSBusModule* m_pFirst;
1011 CINOSBusJob** m_pJobs;
1014 uint16 m_uVirtualCycleIndex;
1021 static CINCOObject* m_pFieldBus;
1022 CINCOObject* m_pRegister;
1023 CINCOObject* m_pModules;
1024 CINCOObject* m_pTiming;
1025 CINCOObject* m_pHooks{};
1038 void* m_pEepromBuffer;
1041 uint32 m_uContactAdr;
1042 uint32 m_uContactDat;
1043 uint32 m_uContactRet;
1063 uint64 m_uTickCount;
1068 uint32 m_uVirtualAddressMask[8] = {0};
1072 friend class CINOSMcTargetKernelLogger;
1075 eTskLogTriggerOverrun = 0x01,
1076 eTskLogTriggerPostOverrun = 0x02,
1078 uint8 m_uTasklogTriggerFlags{};
1079 uint8 m_uTasklogTriggerPercent{50};
1080 void EnableTasklogTriggerOverrun(uint8 auPercent)
1082 m_uTasklogTriggerFlags |= eTskLogTriggerOverrun;
1083 m_uTasklogTriggerPercent = auPercent;
1085 void DisableTasklogTriggerOverrun()
1087 m_uTasklogTriggerFlags &= ~eTskLogTriggerOverrun;
1089 void EnableTasklogTriggerPostOverrun(uint8 auPercent)
1091 m_uTasklogTriggerFlags |= eTskLogTriggerPostOverrun;
1092 m_uTasklogTriggerPercent = auPercent;
1094 void DisableTasklogTriggerPostOverrun()
1096 m_uTasklogTriggerFlags &= ~eTskLogTriggerPostOverrun;
1105 } m_eBusSync = eBusSyncOff;
1109 eBusSyncToMaster = 2,
1111 } m_eBusSyncType = eBusSyncNone;
1113 eBusSyncFilterLength = 16,
1114 eBusSyncFilterShift = 4,
1115 eBusSyncFilterMask = eBusSyncFilterLength-1,
1121 int32 m_iBusSyncFilterSum = 0;
1122 int32 m_iBusSyncDelta = 0;
1123 uint32 m_uBusSyncOffset = 0;
1124 int32 m_iBusSyncTolerance = DF_INOS_BUS_SYNCTOLERANCE_DEFAULT;
1151 virtual uint32 SetState(uint32 auState);
1153 void SetHeartBeat(uint32 auHeartBeat)
1154 {m_uHeartBeat = auHeartBeat;};
1156 uint32 GetVirtualCycleIndex();
1158 virtual void Add(CINOSBusModule* apModule);
1160 virtual void Remove(CINOSBusModule* apModule);
1162 virtual void RemoveAll();
1164 virtual void Scan(){};
1166 virtual void Prepare();
1168 virtual void PostPrepare();
1170 virtual void Initialyse();
1172 virtual bool InitDone();
1174 virtual bool IsDynamic()
1177 virtual bool IsCategoryBased()
1183 uint32 GetRealCycleIndex(uint32 auVirtualCycle);
1190 void* RequestEepromBuffer();
1192 void ReleaseEepromBuffer(
void* apBuffer);
1195 void HandleDownSampling();
1203 void HandlerBufferSetup();
1205 void HandlerBufferSetupRec(uint8 auCategory=0);
1207 ICACHE
void HandleRecData(uint8 auCategory=0);
1209 void HandlerBufferSetupRecM(uint16 auCycleId);
1211 ICACHE
void HandleRecDataM(uint16 auCycleId);
1213 void HandlerBufferSetupTra(uint8 auCategory=0);
1215 ICACHE
void HandleTraData(uint8 auCategory=0);
1217 void HandlerBufferSetupTraM(uint16 auCycleId);
1219 ICACHE
void HandleTraDataM(uint16 auCycleId);
1225 ICACHE
void HandleHooks(uint8 auCategory = 0);
1227 ICACHE
void HandlePostHooks(uint8 auCategory = 0,
bool abWakeupPostTask =
true);
1229 void iHandlePostHooks();
1231 virtual uint32 iRegisterHook(uintid& auHookId,
CINOSBusHooks& aHooks,
void* apHandler,
void* apObject,
1232 uint32 auCycleTime, uint16 auCycleId, int32 aiOrder, uint32 auFlags);
1233 virtual void iiHandlePostHooks();
1240 void SetError(uint32 auErrors);
1243 void RegisterHooks();
1294 static SCheck m_Chk[DF_INOS_BUS_MAX_NUMBER];
1317 friend void _INI_0000_CINOSBusRegister();
1328 TCreateBus m_pCreate;
1330 const char* m_pBusType;
1332 const char* m_pDatabaseTable;
1339 const char* apDatabaseTable);
1344 static void CreateAll();
1354 friend uint32 _INI_0201_CDEVICE_MAP_();
1356 friend void _INI_0201_CDEVICE_MAP_();
1365 eErrDeviceNotFound = 1,
1366 eErrDeviceTypeNotSupported = 2,
1367 eErrResultBufferTooSmall = 3,
1368 eErrDeviceNoAddress = 4,
1369 eErrDeviceNoName = 5,
1380 static EError GetDeviceAddress(
const char* apName,
char* apResult, uint32 auBufferLength);
1381 static EError GetDeviceAddress(
const char* apName, uint32& auResult);
1382 static EError GetDeviceName(uint32 auAddress,
char* apResult, uint32 auBufferLength);
1383 static EError GetDeviceNode(
const char* apName, XMLNode& axResult);
1384 static EError GetDeviceNode(uint32 auAddress, XMLNode& axResult);
1386 static EError GetDeviceUid(uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1387 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1388 static EError GetDeviceUid(uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1389 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1390 static EError GetDevicePathByUid(uint32 auUid,
char* apResult, uint32 auBufferLength);
1392 static EError GetDeviceName(XMLNode& aNode, uint32 auUid,
char* apResult, uint32 auLength);
1395 static XMLNode m_sxDevices;
1403template <
typename T>
1409 : CINCOdouble(apName, apData, 0, 0,
"%", defCharShowFix + SHOW_DIGIT(2) + defCharReadOnly)
1416 virtual long Get(
void* apDest,
long& maxLength,
long aIndex,
long aOffset)
override {
1420 *((
double *) apDest) = 0;
1425 T* pTiming = (T*) ((uintptr) pData + aIndex*GetConfig()->GetSize() + aOffset);
1426 double p = double(pTiming->m_uMax * 100) / double(pTiming->m_uAllowed);
1427 *((
double *) apDest) = p;
1450extern CINOSBus* g_pBus[DF_INOS_BUS_MAX_NUMBER];
1451extern CINOSBus* g_pBus2[DF_INOS_BUS_MAX_NUMBER];
1452extern uint32 g_uBusIndex;
#define INOS_CYCLEID_DONT_CARE
don't care cycle id
Definition cinosbus.h:174
#define DF_INOS_BUS_HOOK_ORDER_DEFAULT
bus hook order 'default'
Definition cinosbus.h:139
void SleepBusTicks(uint32 auBusTicks, uint32 auBusId=0)
#define DF_INOS_BUS_MOD_VADDR_MIN
min. allowed virtual address
Definition cinosbusmoduledef.h:40
#define DECLARE_DYNAMIC(aClass)
Definition cinospartitionmemory.h:328
Definition cinosbus.h:1405
Definition cinosadcchannels.h:78
Definition cinosbits.h:73
Definition cinosbushooks.h:479
Definition cinosbus.h:1316
Definition cinosbus.h:565
virtual uint32 RegisterHook(uintid &auHookId, void *apHandler, void *apObject=0, uint32 auCycleTime=0, uint16 auCycleId=(0xffff), int32 aiOrder=20, uint32 auFlags=CINOSBusHook::eFlgEnabled)
Register hook and return hook id. The registered function will be called in the context of the corres...
INOS_INLINE void AtomicGatherEnter(uint32 &ouToken)
Definition cinosbus.h:952
static CINOSMutex m_ChnCheck
check mutex
Definition cinosbus.h:1281
static uint8 GetFirstBusId()
Return the id of the first valid bus, or 0 if none available.
INOS_INLINE void AtomicGatherBeginUpdate()
Definition cinosbus.h:1249
void VirtualAddressFree(uint8 auAddress)
free virtual module address
static CINOSBus * s_pFirstBus
Pointer to first valid bus, cached for faster access of "g_pBus[0]".
Definition cinosbus.h:1016
static void EnbCheck(bool abEnable)
enable/disable channel check
Definition cinosbus.h:1296
virtual uint32 UnRegisterHook(uintid auHookId)
Unregister hook with given id.
bool IsWatchdogPending(uint8 auCategory)
Return true if fieldbus watchdog pending of the given category.
Definition cinosbus.h:970
uint32 GetHookCycleTime(uintid auHookId)
Get cycle time of given hook.
virtual CINCOObject * GetModulesObj()
Return root registration object of modules.
Definition cinosbus.h:917
int32 m_iBusSyncFilter[eBusSyncFilterLength]
bus sync delta [ns]
Definition cinosbus.h:1120
static CINOSBus * GetFirstBus()
Return first valid bus (aka "g_pBus[0]").
Definition cinosbus.h:606
uint8 GetHookCycleNumber(uintid auHookId)
Get cycle number of given hook.
uint32 GetChannelBase(uint16 auAddress)
get channel base number of module auAddress
static uint8 m_uChkBusId
current bus id
Definition cinosbus.h:1287
uint32 m_uBusSyncOk
bus sync ok counter
Definition cinosbus.h:1126
virtual bool IsBusTask(CINOSTask *apTask)
get bus number of module with given address
Definition cinosbus.h:585
uint32 DisableHook(uintid auHookId)
Enable hook with given id.
static bool m_bChkEnabled
check active
Definition cinosbus.h:1283
uint32 m_uAtomicGather
Definition cinosbus.h:1269
uint8 m_uBusSyncIndex
bus sync index
Definition cinosbus.h:1118
static void ChnCreate(uint32 auNumber)
inform the system about a process image channel creation
static void AddBus(uint32 auId, CINOSBus *apBus)
Add a new bus to the handled busses.
bool VirtualAddressCheck(uint8 auAddress)
check virtual module address
static void ModSetup(uint8 auBusId)
inform the system about a bus module setup
static uint64 m_uBusSyncMaster
master sync time stamp
Definition cinosbus.h:1132
uint32 m_uBusSyncAccelerate
bus sync accelerate counter
Definition cinosbus.h:1128
uint32 EnableHook(uintid auHookId)
Enable hook with given id.
class CINOSBusChannelHandler * m_pChnHnd
pointer to bus channel handler (if any)
Definition cinosbus.h:1018
uint32 RegisterErrorHook(uintid &auHookId, void *apHandler, void *apObject=0)
Register error hook and return hook id. The registered function will be called in the context of the ...
uint8 VirtualAddressAlloc()
allocate virtual module address
uint32 GetBitBase(uint16 auAddress)
get bit channel base number of module auAddress
static void ConflictCheck()
check for possible conflicts
uint32 m_uBusSyncDecelerate
bus sync decelerate counter
Definition cinosbus.h:1130
static void PermanentCheck()
switch on permanent check
Definition cinosbus.h:1305
uint8 m_uCores
actual number of cores used
Definition cinosbus.h:1006
void * GetHookHandler(uintid auHookId)
Get handler of given hook.
const char * GetType()
Get bus type, used for consistency checks.
Definition cinosbus.h:783
uint32 UnRegisterErrorHook(uintid auHookId)
Unregister error hook with given id.
virtual uint32 UnRegisterPostHook(uintid auHookId)
Unregister post hook with given id.
uint32 SetHookHandler(uintid auHookId, void *apHandler)
Set handler of given hook.
virtual uint32 RegisterPostHook(uintid &auHookId, void *apHandler, void *apObject=0, uint32 auCycleTime=0, uint16 auCycleId=(0xffff), int32 aiOrder=20, uint32 auFlags=CINOSBusHook::eFlgEnabled)
Register post hook and return hook id. The registered function will be called in the context of the c...
static bool m_bChkPermanent
permanent check
Definition cinosbus.h:1285
uint8 GetCoreCount() const
Definition cinosbus.h:927
Definition cinosdacchannels.h:77
Definition cinosbus.h:1352
EDeviceType
Error type.
Definition cinosbus.h:1373
EError
Error type.
Definition cinosbus.h:1363
Definition cinosmutex.h:36
Definition cinosposchannels.h:82
Definition cinosprocessimagechannel.h:111
Definition cinostaskex.h:966
Definition cinostask.h:52
INOS_INLINE ETskType GetTskType()
Get task type.
Definition cinostask.h:201
#define DF_INOS_BUS_INFO_MAX_HOOKS
Definition inosdefault.h:526
#define DF_INOS_BUS_MAX_SUB_CYCLES
Definition inosdefault.h:383
#define INOS_INLINE
Definition inosdefine.h:60
#define DF_INOS_MAX_CORES
Definition inosdefine.h:164
#define ASSERT_ALWAYS(f)
Definition inosmacro.h:696
#define INOS_ADD(variable, value)
Definition inosmacro.h:220
bus min/max channel numbers
Definition cinosbus.h:1289
Definition cinosbus.h:526
uint32 m_uBusTicks
Definition cinosbus.h:536
CINOSSync m_pSync
Definition cinosbus.h:533
static uint64 s_uClockedTickCount
Definition cinosbus.h:542
static void AddSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
static void RemoveSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
SBusSleeper * m_pNext
Definition cinosbus.h:540
bool m_bClocked
Definition cinosbus.h:538
static void HandleSleepers(SBusSleeper *&apFirstSleeper)
Definition cinosbus.h:301
char m_cData[0x4000-3 *sizeof(uint32)]
Definition cinosbus.h:404
uint32 m_uWriteIndex
actual write buffer
Definition cinosbus.h:396
uint32 m_uTemporary[2]
temporary data
Definition cinosbus.h:398
Definition cinosbus.h:291
void * m_pMethod
pointer to method
Definition cinosbus.h:295
void * m_pObject
pointer to object
Definition cinosbus.h:293
uint32 m_uParam
parameter
Definition cinosbus.h:297
Definition cinosbus.h:285
uintptr m_uAddress
pointer to port
Definition cinosbus.h:287
Definition cinosbus.h:277
uint8 m_uCommand
command
Definition cinosbus.h:279
uint8 m_uReserved[sizeof(uintptr) -1]
reserved
Definition cinosbus.h:281
Definition cinosbus.h:411
Definition cinosbus.h:501
Definition cinosbus.h:468
uint32 m_uPostHooks
number of bus post hooks
Definition cinosbus.h:477
Definition cinosbus.h:426
uint16 m_uCatActCycle
category based act cycle
Definition cinosbus.h:428
std::atomic< uint32 > m_uHooks
number of bus hook
Definition cinosbus.h:439
Definition cinosbus.h:206
Definition cinosbus.h:487
uint32 m_uWatchdogCountMax
watchdog counter max
Definition cinosbus.h:493
uint32 m_uWatchdogLevel
watchdog level
Definition cinosbus.h:495
uint32 m_uCycleTimeCat
cycletime category
Definition cinosbus.h:489
uint32 m_uWatchdogCount
watchdog counter
Definition cinosbus.h:491