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)
189#include <cinosbusjob.h>
190#include <cinosbusmodule.h>
194#include <xmlparser.h>
211 uint16 m_uMainCycleTime;
213 uint16 m_uWaitAfterReset;
215 uint16 m_uScanMaxWaitForBus;
217 uint16 m_uScanMaxWaitForModules;
221 uint16 m_uMaxEepromSize;
245 uint8 m_uScanIncludeModuleName;
249 uint32 m_uMaxChannelsPerModule;
251 uint32 m_uMaxBitsPerModule;
253 uint32 m_uCycleTimeCat[DF_INOS_BUS_MAX_CATEGORY];
255 uint8 m_uCycleTimePage[DF_INOS_BUS_MAX_CATEGORY];
257 uint8 m_uCycleTimeOversampling[DF_INOS_BUS_MAX_CATEGORY];
264 uint32 m_uSyncOffset;
266 uint32 m_uSyncTolerance;
268 uint32 m_uWatchdogLevel;
270 uint32 m_uHookFreeze;
301 eSize16 = 0x00000001,
302 eSize32 = 0x00000000,
303 eSizeMask = 0x00000001
310 void AddPort16(
volatile void* apAddress)
319 p->
m_uAddress = (uintptr) apAddress + eSize16;
324 void AddPort32(
volatile void* apAddress)
333 p->
m_uAddress = (uintptr) apAddress + eSize32;
337 #if defined(INOS_PORTS_64BIT)
339 void AddPort64(
volatile void* apAddress)
355 void AddCall(
void* apObject,
void* apMethod, uint32 auParam = 0)
400 char m_cData[0x8000-3*
sizeof(uint32)];
427 uint32 m_uOverrunCounter{};
433 uint32 m_uOverrunCounterDisabled{};
434 bool m_bOverrunDetectedByIrq{};
439 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
441 bool m_bWtgLastTicksValid{};
442 uint32 m_uWtgLastTicks{};
443 uint32 m_uWtgDeltaAct{};
444 uint32 m_uWtgDeltaMin{};
445 uint32 m_uWtgDeltaMax{};
467 uint32 m_uPostOverrunCounter;
469 uint32 m_uSuspendTicks;
477 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
501 std::atomic<uint32> m_uOverrunCounter;
503 uint32 m_uOverrunCounterReported;
510 std::atomic<uint32> m_uPostOverrunCounter;
525 enum EReservedCounts {
528 SBusSleeper(uint32 auBusTicks,
bool abClocked =
false);
564 friend void _INI_0299_CINOSBus();
570 virtual uint32 ContactModule(uint32 auAddress, uint32 auData);
572 virtual CINOSBusModule* Find(
char* apName);
574 virtual CINOSBusModule* Find(uint32 auNumber);
576 virtual CINOSBusModule* FindFromAddress(uint32 auAddress);
578 virtual CINOSBusModule* FindFromBusNr(uint32 auBusNr);
580 virtual uint8 GetBusNr(uint32 auVirtualAddress)
581 {
return (uint8) auVirtualAddress;};
584 {
return apTask ==
this; };
586 inline bool IsSimulated()
587 {
return m_pDesc && (m_pDesc->m_uOptions & DF_INOS_BUS_OPTION_SIMULATED); };
589 CINOSBusModule* FindFromDigInp(
const char* apName);
591 CINOSBusModule* FindFromDigOut(
const char* apName);
593 CINOSBusJob* FindJob(uint32 auTraAddress);
595 static CINOSBus* FindBus(
char* apName);
597 static CINOSBus* FindBus(uint32 auId);
599 static CINOSBusPort* FindPortFromInp(uint32 auNumber);
601 static CINOSBusPort* FindPortFromOut(uint32 auNumber);
611 static void SetTargetError();
614 virtual void Start(uint32 auState = DF_INOS_BUS_STAT_RUN){};
616 virtual void Stop(){};
618 virtual void Reset(){};
620 virtual void RegisterOversampling(uint32 auCycleTimeNs, uint8 auOversampling);
639 virtual uint32
RegisterHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
642 uint32 auFlags = CINOSBusHook::eFlgEnabled);
660 uint32 auFlags = CINOSBusHook::eFlgEnabled);
728 virtual const char* GetCategoryName(
729 const uint32 auCategory)
const;
734 virtual const CINOSTask* GetCategoryTask(
735 const uint32 auCategory)
const;
741 {
return m_iActCycle; };
743 virtual uint16* GetActCycleAdr(uint8 auCategory)
744 {
return (uint16*) &m_iActCycle; };
746 virtual uint16 GetActCycleId()
750 uint32 GetHeartBeat()
751 {
return m_uHeartBeat;};
753 uint32 GetSubCycles()
754 {
return m_uSubCycles;};
756 virtual void SetErrorCounter(uint32 auErrorCounter)
757 { m_uErrorCounter = auErrorCounter;};
759 virtual uint32 GetErrorCounter()
760 {
return m_uErrorCounter;};
762 void SetOverrunCounter(uint32 auOverrunCounter)
763 { m_Info.m_uOverrunCounterReported = m_Info.m_uOverrunCounter = auOverrunCounter;};
767 uint32 GetOverrunCounter()
768 {
return m_Info.m_uOverrunCounter;};
770 void SetPostOverrunCounter(uint32 auPostOverrunCounter)
771 { m_Info.m_uPostOverrunCounter = auPostOverrunCounter;};
773 uint32 GetPostOverrunCounter()
774 {
return m_Info.m_uPostOverrunCounter;};
776 virtual void DiagnosticOn();
778 virtual void DiagnosticOff();
782 if (m_pDesc)
return m_pDesc->m_cType;
else return nullptr;
784 virtual uint16 GetOffset(
bool abReal =
true) {
if (m_pDesc)
return (uint16)m_pDesc->m_uOffset;
else return 0; }
786 uint8 GetId() {
if (m_pDesc)
return m_pDesc->m_uId;
else return 0; }
788 uint32 GetOptions() {
if (m_pDesc)
return m_pDesc->m_uOptions;
else return 0; }
790 uint16 GetOptionsEx() {
if (m_pDesc)
return m_pDesc->m_uOptionsEx;
else return 0; }
792 void SetOptionsEx(uint16 auOptions)
793 {
if (m_pDesc) m_pDesc->m_uOptionsEx |= auOptions; }
795 void ClrOptionsEx(uint16 auOptions)
796 {
if (m_pDesc) m_pDesc->m_uOptionsEx &= (uint16) ~auOptions; }
798 uint64 GetTickCount();
800 uint64* GetTickCountAdr()
802 {
return &m_uTickCount; };
803 void SetTickCount(uint64 auTicks);
805 virtual uint32 GetTickTime() {
return m_uSubCycleTime; }
807 virtual uint32 GetTickTimeNs()
809 if (m_uSubCycleTimeNs)
810 return m_uSubCycleTimeNs;
812 return m_uSubCycleTime*1000;
815 uint32 GetMainCycleTime() {
return m_uMainCycleTime; }
817 uint32 GetMainCycleTimeNs()
819 if (m_uMainCycleTimeNs)
820 return m_uMainCycleTimeNs;
822 return m_uMainCycleTime*1000;
825 virtual uint32 GetSubCycleTime(uint8 auCategory=0) {
return m_uSubCycleTime; }
827 virtual uint32 GetSubCycleTimeNs(uint8 auCategory=0) {
return GetTickTimeNs(); }
829 uint32 GetError() {
return m_uError; };
831 void SetErrorMask(uint32 auMask) { m_uErrorMask = auMask;};
833 uint32 GetErrorMask() {
return m_uErrorMask;};
835 void AcceptError(uint32 auError = 0xffffffff);
837 uint8 GetScanIncludeModuleName() {
return m_pDesc->m_uScanIncludeModuleName; }
839 uint16 GetScanMaxWaitForBus() {
return m_pDesc->m_uScanMaxWaitForBus; }
841 uint16 GetScanMaxWaitForModules() {
return m_pDesc->m_uScanMaxWaitForModules; }
843 virtual uint32 GetParam(
const char* apName, real64& arResult);
845 virtual void ResetMeasure();
847 virtual void SyncBus(uint32 auCmdOffset);
849 virtual void Accelerate(){};
851 virtual void Decelerate(){};
853 virtual void Exactelerate(){};
855 real64 GetTimebase(uint32 auHigh, uint32 auLow);
857 virtual uint8 GetCategory(CINOSBusPort* apPort);
859 virtual uint8 GetFastestCategory()
862 uint32 GetCategoryNs(CINOSBusPort* apPort);
864 virtual uint8 GetCategory(SINOSBusPort* apPort);
866 uint8 GetCategory(uint32 auCycleTimeNs,
bool abAssertOnError =
true);
868 uint32 GetCategoryNs(uint8 auCategory);
870 uint16 GetCycleId(CINOSBusPort* apPort);
872 uint8 GetPage(CINOSBusPort* apPort);
874 uint8 GetPage(uint32 auCycleTimeNs);
876 uint32 ConvertToNs(uint32 auValue);
879 virtual uint16 GetCycleId(
const char* apName);
881 virtual uint32 GetCycleTimeNs(
const char* apName);
883 virtual void Sleep(uint32 auBusTicks)
893 virtual void SleepClocked(uint32 auBusTicks)
906 virtual void FlushCache(uint8 auCategory) {};
909 virtual CINCOObject* GetRegister();
952 INOSOptimizationBarrier();
954 INOS_INLINE bool AtomicGatherExit(uint32 auToken) {
956 INOSOptimizationBarrier();
976 friend class CINOSBusJob;
977 friend class CINOSBusModule;
978 friend class CINOSBusChannelHandler;
985 friend class CGINModuleIMP;
986 friend void _INI_0399_CINOSBus();
987 friend void _INI_0500_CINOSBus();
996 char m_cStateMsg[32];
997 uint32 m_uMainCycleTime;
998 uint32 m_uMainCycleTimeNs;
999 uint32 m_uSubCycleTime;
1000 uint32 m_uSubCycleTimeNs;
1001 uint16 m_uSubCycles;
1005 uint32 m_uErrorCounter;
1006 CINOSBusModule* m_pFirst;
1009 CINOSBusJob** m_pJobs;
1012 uint16 m_uVirtualCycleIndex;
1019 static CINCOObject* m_pFieldBus;
1020 CINCOObject* m_pRegister;
1021 CINCOObject* m_pModules;
1022 CINCOObject* m_pTiming;
1023 CINCOObject* m_pHooks{};
1036 void* m_pEepromBuffer;
1039 uint32 m_uContactAdr;
1040 uint32 m_uContactDat;
1041 uint32 m_uContactRet;
1061 uint64 m_uTickCount;
1066 uint32 m_uVirtualAddressMask[8] = {0};
1070 friend class CINOSMcTargetKernelLogger;
1073 eTskLogTriggerOverrun = 0x01,
1074 eTskLogTriggerPostOverrun = 0x02,
1076 uint8 m_uTasklogTriggerFlags{};
1077 uint8 m_uTasklogTriggerPercent{50};
1078 void EnableTasklogTriggerOverrun(uint8 auPercent)
1080 m_uTasklogTriggerFlags |= eTskLogTriggerOverrun;
1081 m_uTasklogTriggerPercent = auPercent;
1083 void DisableTasklogTriggerOverrun()
1085 m_uTasklogTriggerFlags &= ~eTskLogTriggerOverrun;
1087 void EnableTasklogTriggerPostOverrun(uint8 auPercent)
1089 m_uTasklogTriggerFlags |= eTskLogTriggerPostOverrun;
1090 m_uTasklogTriggerPercent = auPercent;
1092 void DisableTasklogTriggerPostOverrun()
1094 m_uTasklogTriggerFlags &= ~eTskLogTriggerPostOverrun;
1103 } m_eBusSync = eBusSyncOff;
1107 eBusSyncToMaster = 2,
1109 } m_eBusSyncType = eBusSyncNone;
1111 eBusSyncFilterLength = 16,
1112 eBusSyncFilterShift = 4,
1113 eBusSyncFilterMask = eBusSyncFilterLength-1,
1119 int32 m_iBusSyncFilterSum = 0;
1120 int32 m_iBusSyncDelta = 0;
1121 uint32 m_uBusSyncOffset = 0;
1122 int32 m_iBusSyncTolerance = DF_INOS_BUS_SYNCTOLERANCE_DEFAULT;
1149 virtual uint32 SetState(uint32 auState);
1151 void SetHeartBeat(uint32 auHeartBeat)
1152 {m_uHeartBeat = auHeartBeat;};
1154 uint32 GetVirtualCycleIndex();
1156 virtual void Add(CINOSBusModule* apModule);
1158 virtual void Remove(CINOSBusModule* apModule);
1160 virtual void RemoveAll();
1162 virtual void Scan(){};
1164 virtual void Prepare();
1166 virtual void PostPrepare();
1168 virtual void Initialyse();
1170 virtual bool InitDone();
1172 virtual bool IsDynamic()
1175 virtual bool IsCategoryBased()
1181 uint32 GetRealCycleIndex(uint32 auVirtualCycle);
1188 void* RequestEepromBuffer();
1190 void ReleaseEepromBuffer(
void* apBuffer);
1193 void HandleDownSampling();
1201 void HandlerBufferSetup();
1203 void HandlerBufferSetupRec(uint8 auCategory=0);
1205 ICACHE
void HandleRecData(uint8 auCategory=0);
1207 void HandlerBufferSetupRecM(uint16 auCycleId);
1209 ICACHE
void HandleRecDataM(uint16 auCycleId);
1211 void HandlerBufferSetupTra(uint8 auCategory=0);
1213 ICACHE
void HandleTraData(uint8 auCategory=0);
1215 void HandlerBufferSetupTraM(uint16 auCycleId);
1217 ICACHE
void HandleTraDataM(uint16 auCycleId);
1223 ICACHE
void HandleHooks(uint8 auCategory = 0);
1225 ICACHE
void HandlePostHooks(uint8 auCategory = 0,
bool abWakeupPostTask =
true);
1227 void iHandlePostHooks();
1229 virtual uint32 iRegisterHook(uintid& auHookId,
CINOSBusHooks& aHooks,
void* apHandler,
void* apObject,
1230 uint32 auCycleTime, uint16 auCycleId, int32 aiOrder, uint32 auFlags);
1231 virtual void iiHandlePostHooks();
1238 void SetError(uint32 auErrors);
1241 void RegisterHooks();
1292 static SCheck m_Chk[DF_INOS_BUS_MAX_NUMBER];
1315 friend void _INI_0000_CINOSBusRegister();
1326 TCreateBus m_pCreate;
1328 const char* m_pBusType;
1330 const char* m_pDatabaseTable;
1337 const char* apDatabaseTable);
1342 static void CreateAll();
1352 friend uint32 _INI_0201_CDEVICE_MAP_();
1354 friend void _INI_0201_CDEVICE_MAP_();
1363 eErrDeviceNotFound = 1,
1364 eErrDeviceTypeNotSupported = 2,
1365 eErrResultBufferTooSmall = 3,
1366 eErrDeviceNoAddress = 4,
1367 eErrDeviceNoName = 5,
1378 static EError GetDeviceAddress(
const char* apName,
char* apResult, uint32 auBufferLength);
1379 static EError GetDeviceAddress(
const char* apName, uint32& auResult);
1380 static EError GetDeviceName(uint32 auAddress,
char* apResult, uint32 auBufferLength);
1381 static EError GetDeviceNode(
const char* apName, XMLNode& axResult);
1382 static EError GetDeviceNode(uint32 auAddress, XMLNode& axResult);
1384 static EError GetDeviceUid(uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1385 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auDeviceAddress, uint32& auUid);
1386 static EError GetDeviceUid(uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1387 static EError GetDeviceUid(XMLNode& aNode, uint64 auMacAddress, uint32 auProductCode, uint8 auIndex, uint32& auUid);
1388 static EError GetDevicePathByUid(uint32 auUid,
char* apResult, uint32 auBufferLength);
1390 static EError GetDeviceName(XMLNode& aNode, uint32 auUid,
char* apResult, uint32 auLength);
1393 static XMLNode m_sxDevices;
1401template <
typename T>
1407 : CINCOdouble(apName, apData, 0, 0,
"%", defCharShowFix + SHOW_DIGIT(2) + defCharReadOnly)
1414 virtual long Get(
void* apDest,
long& maxLength,
long aIndex,
long aOffset)
override {
1418 *((
double *) apDest) = 0;
1423 T* pTiming = (T*) ((uintptr) pData + aIndex*GetConfig()->GetSize() + aOffset);
1424 double p = double(pTiming->m_uMax * 100) / double(pTiming->m_uAllowed);
1425 *((
double *) apDest) = p;
1448extern CINOSBus* g_pBus[DF_INOS_BUS_MAX_NUMBER];
1449extern CINOSBus* g_pBus2[DF_INOS_BUS_MAX_NUMBER];
1450extern 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:1403
Definition cinosadcchannels.h:78
Definition cinosbits.h:73
Definition cinosbushooks.h:479
Definition cinosbus.h:1314
Definition cinosbus.h:563
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:950
static CINOSMutex m_ChnCheck
check mutex
Definition cinosbus.h:1279
static uint8 GetFirstBusId()
Return the id of the first valid bus, or 0 if none available.
INOS_INLINE void AtomicGatherBeginUpdate()
Definition cinosbus.h:1247
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:1014
static void EnbCheck(bool abEnable)
enable/disable channel check
Definition cinosbus.h:1294
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:968
uint32 GetHookCycleTime(uintid auHookId)
Get cycle time of given hook.
virtual CINCOObject * GetModulesObj()
Return root registration object of modules.
Definition cinosbus.h:915
int32 m_iBusSyncFilter[eBusSyncFilterLength]
bus sync delta [ns]
Definition cinosbus.h:1118
static CINOSBus * GetFirstBus()
Return first valid bus (aka "g_pBus[0]").
Definition cinosbus.h:604
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:1285
uint32 m_uBusSyncOk
bus sync ok counter
Definition cinosbus.h:1124
virtual bool IsBusTask(CINOSTask *apTask)
get bus number of module with given address
Definition cinosbus.h:583
uint32 DisableHook(uintid auHookId)
Enable hook with given id.
static bool m_bChkEnabled
check active
Definition cinosbus.h:1281
uint32 m_uAtomicGather
Definition cinosbus.h:1267
uint8 m_uBusSyncIndex
bus sync index
Definition cinosbus.h:1116
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:1130
uint32 m_uBusSyncAccelerate
bus sync accelerate counter
Definition cinosbus.h:1126
uint32 EnableHook(uintid auHookId)
Enable hook with given id.
class CINOSBusChannelHandler * m_pChnHnd
pointer to bus channel handler (if any)
Definition cinosbus.h:1016
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:1128
static void PermanentCheck()
switch on permanent check
Definition cinosbus.h:1303
uint8 m_uCores
actual number of cores used
Definition cinosbus.h:1004
void * GetHookHandler(uintid auHookId)
Get handler of given hook.
const char * GetType()
Get bus type, used for consistency checks.
Definition cinosbus.h:781
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:1283
uint8 GetCoreCount() const
Definition cinosbus.h:925
Definition cinosdacchannels.h:77
Definition cinosbus.h:1350
EDeviceType
Error type.
Definition cinosbus.h:1371
EError
Error type.
Definition cinosbus.h:1361
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:1287
Definition cinosbus.h:524
uint32 m_uBusTicks
Definition cinosbus.h:534
CINOSSync m_pSync
Definition cinosbus.h:531
static uint64 s_uClockedTickCount
Definition cinosbus.h:540
static void AddSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
static void RemoveSleeper(SBusSleeper &aNewSleeper, SBusSleeper *&apFirstSleeper)
SBusSleeper * m_pNext
Definition cinosbus.h:538
bool m_bClocked
Definition cinosbus.h:536
static void HandleSleepers(SBusSleeper *&apFirstSleeper)
Definition cinosbus.h:299
char m_cData[0x4000-3 *sizeof(uint32)]
Definition cinosbus.h:402
uint32 m_uWriteIndex
actual write buffer
Definition cinosbus.h:394
uint32 m_uTemporary[2]
temporary data
Definition cinosbus.h:396
Definition cinosbus.h:289
void * m_pMethod
pointer to method
Definition cinosbus.h:293
void * m_pObject
pointer to object
Definition cinosbus.h:291
uint32 m_uParam
parameter
Definition cinosbus.h:295
Definition cinosbus.h:283
uintptr m_uAddress
pointer to port
Definition cinosbus.h:285
Definition cinosbus.h:275
uint8 m_uCommand
command
Definition cinosbus.h:277
uint8 m_uReserved[sizeof(uintptr) -1]
reserved
Definition cinosbus.h:279
Definition cinosbus.h:409
Definition cinosbus.h:499
Definition cinosbus.h:466
uint32 m_uPostHooks
number of bus post hooks
Definition cinosbus.h:475
Definition cinosbus.h:424
uint16 m_uCatActCycle
category based act cycle
Definition cinosbus.h:426
std::atomic< uint32 > m_uHooks
number of bus hook
Definition cinosbus.h:437
Definition cinosbus.h:204
Definition cinosbus.h:485
uint32 m_uWatchdogCountMax
watchdog counter max
Definition cinosbus.h:491
uint32 m_uWatchdogLevel
watchdog level
Definition cinosbus.h:493
uint32 m_uCycleTimeCat
cycletime category
Definition cinosbus.h:487
uint32 m_uWatchdogCount
watchdog counter
Definition cinosbus.h:489