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
90#define DF_INOS_BUS_OPTIONEX_OPT_PORT_HANDLING 0x00000001
91#define DF_INOS_BUS_OPTIONEX_RINGMODE 0x00000002
92#define DF_INOS_BUS_OPTIONEX_AUTO_CLOSE 0x00000004
93#define DF_INOS_BUS_OPTIONEX_LATE_STATE_RUNNING 0x00000008
94#define DF_INOS_BUS_OPTIONEX_DO_NOT_CREATE_PORTS 0x00000010
95#define DF_INOS_BUS_OPTIONEX_SETUP_OFFLINE_MODULE 0x00000020
96#define DF_INOS_BUS_OPTIONEX_USE_ALL_CORES 0x00000040
97#define DF_INOS_BUS_OPTIONEX_PORTS_PUBLIC 0x00000080
98#define DF_INOS_BUS_OPTIONEX_MODULES_MULTICORE 0x00000100
99#define DF_INOS_BUS_OPTIONEX_ONLY_SETUP_KNOWN_MODULES 0x00000200
100#define DF_INOS_BUS_OPTIONEX_DO_NOT_STOP_ON_TRAP 0x00000400
101#define DF_INOS_BUS_OPTIONEX_DMA_TRANSFER 0x00000800
102#define DF_INOS_BUS_OPTIONEX_PORT_REC_OVERWRITE_OFFLINE 0x00001000
103#define DF_INOS_BUS_OPTIONEX_OPT_CHANNEL_NUMBERING 0x00002000
104#define DF_INOS_BUS_OPTIONEX_NO_RECEIVE_DATA 0x00004000
105#define DF_INOS_BUS_OPTIONEX_CLEANUP_AT_RESCAN 0x00008000
106#define DF_INOS_BUS_OPTIONEX_TRADATA_COPY_IN_RAM 0x00010000
107#define DF_INOS_BUS_OPTIONEX_LOOPBACK 0x00020000
108#define DF_INOS_BUS_OPTIONEX_HARDWARE_SLOTCOUNT 0x00040000
109#define DF_INOS_BUS_OPTIONEX_MULTIPLE_INSTANCE_SUPPORT 0x00080000
111#define DF_INOS_BUS_SYNCTOLERANCE_DEFAULT 2000
112#define DF_INOS_BUS_WATCHDOGLEVEL_DEFAULT 4
116#define ER_INOS_BUS_ERRORCOUNTER 0x00000001
117#define ER_INOS_BUS_OVERRUNCOUNTER 0x00000002
118#define ER_INOS_BUS_DOWN 0x00000004
119#define ER_INOS_BUS_POSTOVERRUNCOUNTER 0x00000008
120#define ER_INOS_BUS_SYNCCORES_TIMEOUT 0x00000010
121#define ER_INOS_BUS_RESCAN 0x00000020
122#define ER_INOS_BUS_MAINTENANCE 0x00000040
126#define DF_INOS_BUS_HOOK_FLAG_ENB 0x0001
127#define DF_INOS_BUS_HOOK_FLAG_REM 0x0002
131#define DF_INOS_BUS_HOOK_ORDER_PRE_AXIS -20
132#define DF_INOS_BUS_HOOK_ORDER_AXIS_PRE_MAP -10
133#define DF_INOS_BUS_HOOK_ORDER_AXIS_MAP 0
134#define DF_INOS_BUS_HOOK_ORDER_CONTROL 0
135#define DF_INOS_BUS_HOOK_ORDER_AXIS_PST_MAP 10
136#define DF_INOS_BUS_HOOK_ORDER_PST_AXIS 20
137#define DF_INOS_BUS_HOOK_ORDER_DEFAULT 20
141#define DF_INOS_BUS_PAGE_ANALOG 1
142#define DF_INOS_BUS_PAGE_DIGITAL 2
143#define DF_INOS_BUS_PAGE_AXIS 3
165#define INOS_CYCLEID(auCoreId, auCategory, auCycleNumber) (((uint16)auCoreId<<10)+((uint16)auCategory<<8)+(auCycleNumber&0xff))
166#define INOS_CORE_FROM_CATEGORY(aCategory) ((aCategory>>2)&0x3F)
167#define INOS_CATEGORY_FROM_CATEGORY(aCategory) (aCategory&0x03)
168#define INOS_CORE_FROM_CYCLEID(aCycleId) ((uint8)((aCycleId>>10)&0x3F))
169#define INOS_CATEGORY_FROM_CYCLEID(aCycleId) ((uint8)((aCycleId>>8)&0x03))
170#define INOS_CYCLENUMBER_FROM_CYCLEID(aCycleId) ((uint8)(aCycleId&0xFF))
172#define INOS_CYCLEID_DONT_CARE (0xffff)
173#define INOS_CORE_ID_DONT_CARE (0x3f)
175#define INOS_CYCLEID_ANY_CAT_AND_NUM ((uint16)0x03ff)
178#define INOS_CYCLEID_ANY_ON_CORE(auCoreId) (((uint16)auCoreId<<10) | INOS_CYCLEID_ANY_CAT_AND_NUM)
188#if defined(INOS_BUS_HOOKS)
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;
243 #if defined(INOS_BUS_HOOKS)
249 uint8 m_uScanIncludeModuleName;
253 uint32 m_uMaxChannelsPerModule;
255 uint32 m_uMaxBitsPerModule;
257 uint32 m_uCycleTimeCat[DF_INOS_BUS_MAX_CATEGORY];
259 uint8 m_uCycleTimePage[DF_INOS_BUS_MAX_CATEGORY];
261 uint8 m_uCycleTimeOversampling[DF_INOS_BUS_MAX_CATEGORY];
268 uint32 m_uSyncOffset;
270 uint32 m_uSyncTolerance;
272 uint32 m_uWatchdogLevel;
298 uint8 m_uCycleNumber;
302 uint16 m_uMainCycles;
338 eSize16 = 0x00000001,
339 eSize32 = 0x00000000,
340 eSizeMask = 0x00000001
347 void AddPort16(
volatile void* apAddress)
356 p->
m_uAddress = (uintptr) apAddress + eSize16;
361 void AddPort32(
volatile void* apAddress)
370 p->
m_uAddress = (uintptr) apAddress + eSize32;
374 #if defined(INOS_PORTS_64BIT)
376 void AddPort64(
volatile void* apAddress)
392 void AddCall(
void* apObject,
void* apMethod, uint32 auParam = 0)
437 char m_cData[0x8000-3*
sizeof(uint32)];
464 uint32 m_uOverrunCounter{};
470 uint32 m_uOverrunCounterDisabled{};
471 bool m_bOverrunDetectedByIrq{};
476 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
478 bool m_bWtgLastTicksValid{};
479 uint32 m_uWtgLastTicks{};
480 uint32 m_uWtgDeltaAct{};
481 uint32 m_uWtgDeltaMin{};
482 uint32 m_uWtgDeltaMax{};
504 uint32 m_uPostOverrunCounter;
506 uint32 m_uSuspendTicks;
514 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
538 uint32 m_uOverrunCounter;
540 uint32 m_uOverrunCounterReported;
547 uint32 m_uPostOverrunCounter;
562 enum EReservedCounts {
565 SBusSleeper(uint32 auBusTicks,
bool abClocked =
false);
601 friend void _INI_0299_CINOSBus();
607 virtual uint32 ContactModule(uint32 auAddress, uint32 auData);
609 virtual CINOSBusModule* Find(
char* apName);
611 virtual CINOSBusModule* Find(uint32 auNumber);
613 virtual CINOSBusModule* FindFromAddress(uint32 auAddress);
615 virtual CINOSBusModule* FindFromBusNr(uint32 auBusNr);
617 virtual uint8 GetBusNr(uint32 auVirtualAddress)
618 {
return (uint8) auVirtualAddress;};
621 {
return apTask ==
this; };
623 inline bool IsSimulated()
624 {
return m_pDesc && (m_pDesc->m_uOptions & DF_INOS_BUS_OPTION_SIMULATED); };
626 CINOSBusModule* FindFromDigInp(
const char* apName);
628 CINOSBusModule* FindFromDigOut(
const char* apName);
630 CINOSBusJob* FindJob(uint32 auTraAddress);
632 static CINOSBus* FindBus(
char* apName);
634 static CINOSBus* FindBus(uint32 auId);
636 static CINOSBusPort* FindPortFromInp(uint32 auNumber);
638 static CINOSBusPort* FindPortFromOut(uint32 auNumber);
648 static void SetTargetError();
651 virtual void Start(uint32 auState = DF_INOS_BUS_STAT_RUN){};
653 virtual void Stop(){};
655 virtual void Reset(){};
657 virtual void RegisterOversampling(uint32 auCycleTimeNs, uint8 auOversampling);
663 #if defined(INOS_BUS_HOOKS)
677 virtual uint32
RegisterHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
680 uint32 auFlags = CINOSBusHook::eFlgEnabled);
695 virtual uint32
RegisterPostHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
698 uint32 auFlags = CINOSBusHook::eFlgEnabled);
713 virtual uint32
RegisterHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
716 bool abEnabled =
true);
734 bool abEnabled =
true);
803 #if !defined(INOS_BUS_HOOKS)
804 void ChangeHookId(uintid auOldHookId, uintid auNewHookId);
808 virtual const char* GetCategoryName(
809 const uint32 auCategory)
const;
814 virtual const CINOSTask* GetCategoryTask(
815 const uint32 auCategory)
const;
821 {
return m_iActCycle; };
823 virtual uint16* GetActCycleAdr(uint8 auCategory)
824 {
return (uint16*) &m_iActCycle; };
826 virtual uint16 GetActCycleId()
830 uint32 GetHeartBeat()
831 {
return m_uHeartBeat;};
833 uint32 GetSubCycles()
834 {
return m_uSubCycles;};
836 #if !defined(INOS_BUS_HOOKS)
837 uint32 GetMainCycles()
838 {
return m_uMainCycles;};
841 virtual void SetErrorCounter(uint32 auErrorCounter)
842 { m_uErrorCounter = auErrorCounter;};
844 virtual uint32 GetErrorCounter()
845 {
return m_uErrorCounter;};
847 void SetOverrunCounter(uint32 auOverrunCounter)
848 { m_Info.m_uOverrunCounterReported = m_Info.m_uOverrunCounter = auOverrunCounter;};
852 uint32 GetOverrunCounter()
853 {
return m_Info.m_uOverrunCounter;};
855 void SetPostOverrunCounter(uint32 auPostOverrunCounter)
856 { m_Info.m_uPostOverrunCounter = auPostOverrunCounter;};
858 uint32 GetPostOverrunCounter()
859 {
return m_Info.m_uPostOverrunCounter;};
861 virtual void DiagnosticOn();
863 virtual void DiagnosticOff();
867 if (m_pDesc)
return m_pDesc->m_cType;
else return nullptr;
869 virtual uint16 GetOffset(
bool abReal =
true) {
if (m_pDesc)
return (uint16)m_pDesc->m_uOffset;
else return 0; }
871 uint8 GetId() {
if (m_pDesc)
return m_pDesc->m_uId;
else return 0; }
873 uint32 GetOptions() {
if (m_pDesc)
return m_pDesc->m_uOptions;
else return 0; }
875 uint16 GetOptionsEx() {
if (m_pDesc)
return m_pDesc->m_uOptionsEx;
else return 0; }
877 void SetOptionsEx(uint16 auOptions)
878 {
if (m_pDesc) m_pDesc->m_uOptionsEx |= auOptions; }
880 void ClrOptionsEx(uint16 auOptions)
881 {
if (m_pDesc) m_pDesc->m_uOptionsEx &= (uint16) ~auOptions; }
883 uint64 GetTickCount();
885 uint64* GetTickCountAdr()
887 {
return &m_uTickCount; };
888 void SetTickCount(uint64 auTicks);
890 virtual uint32 GetTickTime() {
return m_uSubCycleTime; }
892 virtual uint32 GetTickTimeNs()
894 if (m_uSubCycleTimeNs)
895 return m_uSubCycleTimeNs;
897 return m_uSubCycleTime*1000;
900 uint32 GetMainCycleTime() {
return m_uMainCycleTime; }
902 uint32 GetMainCycleTimeNs()
904 if (m_uMainCycleTimeNs)
905 return m_uMainCycleTimeNs;
907 return m_uMainCycleTime*1000;
910 virtual uint32 GetSubCycleTime(uint8 auCategory=0) {
return m_uSubCycleTime; }
912 virtual uint32 GetSubCycleTimeNs(uint8 auCategory=0) {
return GetTickTimeNs(); }
914 uint32 GetError() {
return m_uError; };
916 void SetErrorMask(uint32 auMask) { m_uErrorMask = auMask;};
918 uint32 GetErrorMask() {
return m_uErrorMask;};
920 void AcceptError(uint32 auError = 0xffffffff);
922 uint8 GetScanIncludeModuleName() {
return m_pDesc->m_uScanIncludeModuleName; }
924 uint16 GetScanMaxWaitForBus() {
return m_pDesc->m_uScanMaxWaitForBus; }
926 uint16 GetScanMaxWaitForModules() {
return m_pDesc->m_uScanMaxWaitForModules; }
928 virtual uint32 GetParam(
const char* apName, real64& arResult);
930 virtual void ResetMeasure();
932 virtual void SyncBus(uint32 auCmdOffset);
934 virtual void Accelerate(){};
936 virtual void Decelerate(){};
938 virtual void Exactelerate(){};
940 real64 GetTimebase(uint32 auHigh, uint32 auLow);
942 virtual uint8 GetCategory(CINOSBusPort* apPort);
944 virtual uint8 GetFastestCategory()
947 uint32 GetCategoryNs(CINOSBusPort* apPort);
949 virtual uint8 GetCategory(SINOSBusPort* apPort);
951 uint8 GetCategory(uint32 auCycleTimeNs,
bool abAssertOnError =
true);
953 uint32 GetCategoryNs(uint8 auCategory);
955 uint16 GetCycleId(CINOSBusPort* apPort);
957 uint8 GetPage(CINOSBusPort* apPort);
959 uint8 GetPage(uint32 auCycleTimeNs);
961 uint32 ConvertToNs(uint32 auValue);
964 virtual uint16 GetCycleId(
const char* apName);
966 virtual uint32 GetCycleTimeNs(
const char* apName);
968 virtual void Sleep(uint32 auBusTicks)
978 virtual void SleepClocked(uint32 auBusTicks)
991 virtual void FlushCache(uint8 auCategory) {};
994 virtual CINCOObject* GetRegister();
1037 INOSOptimizationBarrier();
1039 INOS_INLINE bool AtomicGatherExit(uint32 auToken) {
1041 INOSOptimizationBarrier();
1061 friend class CINOSBusJob;
1062 friend class CINOSBusModule;
1063 friend class CINOSBusChannelHandler;
1070 friend class CGINModuleIMP;
1071 friend void _INI_0399_CINOSBus();
1072 friend void _INI_0500_CINOSBus();
1079 uint32 m_uErrorMask;
1080 uint32 m_uHeartBeat;
1081 char m_cStateMsg[32];
1082 uint32 m_uMainCycleTime;
1083 uint32 m_uMainCycleTimeNs;
1084 uint32 m_uSubCycleTime;
1085 uint32 m_uSubCycleTimeNs;
1086 uint16 m_uSubCycles;
1088 #if !defined(INOS_BUS_HOOKS)
1089 uint16 m_uMainCycles;
1090 int16 m_iActMainCycle;
1094 uint32 m_uErrorCounter;
1095 CINOSBusModule* m_pFirst;
1098 CINOSBusJob** m_pJobs;
1101 uint16 m_uVirtualCycleIndex;
1108 static CINCOObject* m_pFieldBus;
1109 CINCOObject* m_pRegister;
1110 CINCOObject* m_pModules;
1111 CINCOObject* m_pTiming;
1112 #if defined(INOS_BUS_HOOKS)
1113 CINCOObject* m_pHooks{};
1117 #if defined(INOS_BUS_HOOKS)
1134 static std::atomic<uint8> s_uHooks;
1138 void* m_pEepromBuffer;
1141 uint32 m_uContactAdr;
1142 uint32 m_uContactDat;
1143 uint32 m_uContactRet;
1163 uint64 m_uTickCount;
1168 uint32 m_uVirtualAddressMask[8] = {0};
1172 friend class CINOSMcTargetKernelLogger;
1175 eTskLogTriggerOverrun = 0x01,
1176 eTskLogTriggerPostOverrun = 0x02,
1178 uint8 m_uTasklogTriggerFlags{};
1179 uint8 m_uTasklogTriggerPercent{50};
1180 void EnableTasklogTriggerOverrun(uint8 auPercent)
1182 m_uTasklogTriggerFlags |= eTskLogTriggerOverrun;
1183 m_uTasklogTriggerPercent = auPercent;
1185 void DisableTasklogTriggerOverrun()
1187 m_uTasklogTriggerFlags &= ~eTskLogTriggerOverrun;
1189 void EnableTasklogTriggerPostOverrun(uint8 auPercent)
1191 m_uTasklogTriggerFlags |= eTskLogTriggerPostOverrun;
1192 m_uTasklogTriggerPercent = auPercent;
1194 void DisableTasklogTriggerPostOverrun()
1196 m_uTasklogTriggerFlags &= ~eTskLogTriggerPostOverrun;
1205 } m_eBusSync = eBusSyncOff;
1209 eBusSyncToMaster = 2,
1211 } m_eBusSyncType = eBusSyncNone;
1213 eBusSyncFilterLength = 16,
1214 eBusSyncFilterShift = 4,
1215 eBusSyncFilterMask = eBusSyncFilterLength-1,
1221 int32 m_iBusSyncFilterSum = 0;
1222 int32 m_iBusSyncDelta = 0;
1223 uint32 m_uBusSyncOffset = 0;
1224 int32 m_iBusSyncTolerance = DF_INOS_BUS_SYNCTOLERANCE_DEFAULT;
1251 virtual uint32 SetState(uint32 auState);
1253 void SetHeartBeat(uint32 auHeartBeat)
1254 {m_uHeartBeat = auHeartBeat;};
1256 uint32 GetVirtualCycleIndex();
1258 virtual void Add(CINOSBusModule* apModule);
1260 virtual void Remove(CINOSBusModule* apModule);
1262 virtual void RemoveAll();
1264 virtual void Scan(){};
1266 virtual void Prepare();
1268 virtual void PostPrepare();
1270 virtual void Initialyse();
1272 virtual bool InitDone();
1274 virtual bool IsDynamic()
1277 virtual bool IsCategoryBased()
1283 uint32 GetRealCycleIndex(uint32 auVirtualCycle);
1290 void* RequestEepromBuffer();
1292 void ReleaseEepromBuffer(
void* apBuffer);
1295 void HandleDownSampling();
1303 void HandlerBufferSetup();
1305 void HandlerBufferSetupRec(uint8 auCategory=0);
1307 ICACHE
void HandleRecData(uint8 auCategory=0);
1309 void HandlerBufferSetupRecM(uint16 auCycleId);
1311 ICACHE
void HandleRecDataM(uint16 auCycleId);
1313 void HandlerBufferSetupTra(uint8 auCategory=0);
1315 ICACHE
void HandleTraData(uint8 auCategory=0);
1317 void HandlerBufferSetupTraM(uint16 auCycleId);
1319 ICACHE
void HandleTraDataM(uint16 auCycleId);
1325 ICACHE
void HandleHooks(uint8 auCategory = 0);
1327 ICACHE
void HandlePostHooks(uint8 auCategory = 0,
bool abWakeupPostTask =
true);
1329 void iHandlePostHooks();
1331 #if defined(INOS_BUS_HOOKS)
1332 virtual uint32 iRegisterHook(uintid& auHookId,
CINOSBusHooks& aHooks,
void* apHandler,
void* apObject,
1333 uint32 auCycleTime, uint16 auCycleId, int32 aiOrder, uint32 auFlags);
1334 virtual void iiHandlePostHooks();
1337 virtual uint32 iRegisterHook(uintid& auHookId,
SINOSBusHook** apHooks,
void* apHandler,
void* apObject,
1338 uint32 auCycleTime, uint16 auCycleId, int32 aiOrder,
bool abEnabled);
1340 void iUnRegisterHook(uintid auHookId,
bool abDestroyFirst =
true);
1344 void iRemoveHook(
SINOSBusHook* apHook,
bool abDestroy =
true);
1348 bool iToBeRemoved(uintid auHookId);
1351 #if defined(INOS_TESTING)
1352 friend class CINOSBusHookTestMaster;
1354 void iCleanupHooks(
bool abDestroyFirst =
true);
1362 void SetError(uint32 auErrors);
1365 #if defined(INOS_BUS_HOOKS)
1366 void RegisterHooks();
1418 static SCheck m_Chk[DF_INOS_BUS_MAX_NUMBER];
1441 friend void _INI_0000_CINOSBusRegister();
1452 TCreateBus m_pCreate;
1454 const char* m_pBusType;
1456 const char* m_pDatabaseTable;
1463 const char* apDatabaseTable);
1468 static void CreateAll();
1478 friend uint32 _INI_0201_CDEVICE_MAP_();
1480 friend void _INI_0201_CDEVICE_MAP_();
1489 eErrDeviceNotFound = 1,
1490 eErrDeviceTypeNotSupported = 2,
1491 eErrResultBufferTooSmall = 3,
1492 eErrDeviceNoAddress = 4,
1493 eErrDeviceNoName = 5,
1504 static EError GetDeviceAddress(
const char* apName,
char* apResult, uint32 auBufferLength);
1505 static EError GetDeviceAddress(
const char* apName, uint32& auResult);
1506 static EError GetDeviceName(uint32 auAddress,
char* apResult, uint32 auBufferLength);
1507 static EError GetDeviceNode(
const char* apName, XMLNode& axResult);
1508 static EError GetDeviceNode(uint32 auAddress, XMLNode& axResult);
1510 static EError GetDeviceUid(uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1511 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1512 static EError GetDeviceUid(uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1513 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1514 static EError GetDevicePathByUid(uint32 auUid,
char* apResult, uint32 auBufferLength);
1516 static EError GetDeviceName(XMLNode& aNode, uint32 auUid,
char* apResult, uint32 auLength);
1519 static XMLNode m_sxDevices;
1527template <
typename T>
1533 : CINCOdouble(apName, apData, 0, 0,
"%", defCharShowFix + SHOW_DIGIT(2) + defCharReadOnly)
1540 virtual long Get(
void* apDest,
long& maxLength,
long aIndex,
long aOffset) {
1544 *((
double *) apDest) = 0;
1549 T* pTiming = (T*) ((uintptr) pData + aIndex*GetConfig()->GetSize() + aOffset);
1550 double p = double(pTiming->m_uMax * 100) / double(pTiming->m_uAllowed);
1551 *((
double *) apDest) = p;
1574extern CINOSBus* g_pBus[DF_INOS_BUS_MAX_NUMBER];
1575extern CINOSBus* g_pBus2[DF_INOS_BUS_MAX_NUMBER];
1576extern uint32 g_uBusIndex;
#define INOS_CYCLEID_DONT_CARE
don't care cycle id
Definition cinosbus.h:172
#define DF_INOS_BUS_HOOK_ORDER_DEFAULT
bus hook order 'default'
Definition cinosbus.h:137
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:1529
Definition cinosadcchannels.h:78
Definition cinosbits.h:73
Definition cinosbushooks.h:467
Definition cinosbus.h:1440
Definition cinosbus.h:600
INOS_INLINE void AtomicGatherEnter(uint32 &ouToken)
Definition cinosbus.h:1035
static CINOSMutex m_ChnCheck
check mutex
Definition cinosbus.h:1405
static uint8 GetFirstBusId()
Return the id of the first valid bus, or 0 if none available.
INOS_INLINE void AtomicGatherBeginUpdate()
Definition cinosbus.h:1373
virtual uint32 RegisterPostHook(uintid &auHookId, void *apHandler, void *apObject=0, uint32 auCycleTime=0, uint16 auCycleId=(0xffff), int32 aiOrder=20, bool abEnabled=true)
Register post hook and return hook id. The registered function will be called in the context of the c...
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:1103
static void EnbCheck(bool abEnable)
enable/disable channel check
Definition cinosbus.h:1420
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:1053
uint32 GetHookCycleTime(uintid auHookId)
Get cycle time of given hook.
virtual CINCOObject * GetModulesObj()
Return root registration object of modules.
Definition cinosbus.h:1000
int32 m_iBusSyncFilter[eBusSyncFilterLength]
bus sync delta [ns]
Definition cinosbus.h:1220
static CINOSBus * GetFirstBus()
Return first valid bus (aka "g_pBus[0]").
Definition cinosbus.h:641
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:1411
uint32 m_uBusSyncOk
bus sync ok counter
Definition cinosbus.h:1226
virtual bool IsBusTask(CINOSTask *apTask)
get bus number of module with given address
Definition cinosbus.h:620
uint32 DisableHook(uintid auHookId)
Enable hook with given id.
static bool m_bChkEnabled
check active
Definition cinosbus.h:1407
uint32 m_uAtomicGather
Definition cinosbus.h:1393
uint8 m_uBusSyncIndex
bus sync index
Definition cinosbus.h:1218
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:1232
uint32 m_uBusSyncAccelerate
bus sync accelerate counter
Definition cinosbus.h:1228
uint32 EnableHook(uintid auHookId)
Enable hook with given id.
class CINOSBusChannelHandler * m_pChnHnd
pointer to bus channel handler (if any)
Definition cinosbus.h:1105
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:1230
static void PermanentCheck()
switch on permanent check
Definition cinosbus.h:1429
uint8 m_uCores
actual number of cores used
Definition cinosbus.h:1093
void * GetHookHandler(uintid auHookId)
Get handler of given hook.
const char * GetType()
Get bus type, used for consistency checks.
Definition cinosbus.h:866
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 RegisterHook(uintid &auHookId, void *apHandler, void *apObject=0, uint32 auCycleTime=0, uint16 auCycleId=(0xffff), int32 aiOrder=20, bool abEnabled=true)
Register hook and return hook id. The registered function will be called in the context of the corres...
static bool m_bChkPermanent
permanent check
Definition cinosbus.h:1409
uint8 GetCoreCount() const
Definition cinosbus.h:1010
Definition cinosdacchannels.h:77
Definition cinosbus.h:1476
EDeviceType
Error type.
Definition cinosbus.h:1497
EError
Error type.
Definition cinosbus.h:1487
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:518
#define DF_INOS_BUS_MAX_SUB_CYCLES
Definition inosdefault.h:375
#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:1413
Definition cinosbus.h:561
uint32 m_uBusTicks
Definition cinosbus.h:571
CINOSSync m_pSync
Definition cinosbus.h:568
static uint64 s_uClockedTickCount
Definition cinosbus.h:577
static void AddSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
static void RemoveSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
SBusSleeper * m_pNext
Definition cinosbus.h:575
bool m_bClocked
Definition cinosbus.h:573
static void HandleSleepers(SBusSleeper *&apFirstSleeper)
Definition cinosbus.h:336
char m_cData[0x4000-3 *sizeof(uint32)]
Definition cinosbus.h:439
uint32 m_uWriteIndex
actual write buffer
Definition cinosbus.h:431
uint32 m_uTemporary[2]
temporary data
Definition cinosbus.h:433
Definition cinosbus.h:326
void * m_pMethod
pointer to method
Definition cinosbus.h:330
void * m_pObject
pointer to object
Definition cinosbus.h:328
uint32 m_uParam
parameter
Definition cinosbus.h:332
Definition cinosbus.h:320
uintptr m_uAddress
pointer to port
Definition cinosbus.h:322
Definition cinosbus.h:312
uint8 m_uCommand
command
Definition cinosbus.h:314
uint8 m_uReserved[sizeof(uintptr) -1]
reserved
Definition cinosbus.h:316
Definition cinosbus.h:276
Definition cinosbus.h:446
Definition cinosbus.h:536
Definition cinosbus.h:503
uint32 m_uPostHooks
number of bus post hooks
Definition cinosbus.h:512
Definition cinosbus.h:461
uint16 m_uCatActCycle
category based act cycle
Definition cinosbus.h:463
std::atomic< uint32 > m_uHooks
number of bus hook
Definition cinosbus.h:474
Definition cinosbus.h:206
Definition cinosbus.h:522
uint32 m_uWatchdogCountMax
watchdog counter max
Definition cinosbus.h:528
uint32 m_uWatchdogLevel
watchdog level
Definition cinosbus.h:530
uint32 m_uCycleTimeCat
cycletime category
Definition cinosbus.h:524
uint32 m_uWatchdogCount
watchdog counter
Definition cinosbus.h:526