29 #ifndef INC_CINOSBUS_H
30 #define INC_CINOSBUS_H
36 #define DF_INOS_BUS_DBT "INOS-BUS" // INOS-BUS db table name
38 #define DF_INOS_BUS_MAX_NUMBER 4 // max. number of inos buses on one target
39 #define DF_INOS_BUS_MAX_DMY_JOBS 4 // max. number of dummy jobs
40 #define DF_INOS_BUS_MAX_CATEGORY 4 // max. number of cycletime categories
41 #define DF_INOS_BUS_MAX_CYCLE_NUMBER 32 // max. number of bus cycles supported (32 kHz)
43 #define DF_INOS_BUS_CATEGORY_INVALID 255 // invalid category number
44 #define DF_INOS_BUS_CATEGORY_1000_US 3 // category number 1ms
45 #define DF_INOS_BUS_CATEGORY_250_US 2 // category number 250us
46 #define DF_INOS_BUS_CATEGORY_125_US 1 // category number 125us
47 #define DF_INOS_BUS_CATEGORY_FASTEST 0 // category number 'fastest' (16, 32 or 64 kHz)
49 #define DF_INOS_BUS_CORE_0 0 // running on core 0
50 #define DF_INOS_BUS_CORE_1 1 // running on core 1
51 #define DF_INOS_BUS_CORE_2 2 // running on core 2
52 #define DF_INOS_BUS_CORE_3 3 // running on core 3
54 #define DF_INOS_BUS_JOB_CTM_RES 0x8000 // job in 2 dim array is CTM reserved
55 #define DF_INOS_BUS_JOB_CLD_RES 0x4000 // job in 2 dim array is CLD reserved
56 #define DF_INOS_BUS_JOB_WTG_RES 0x2000 // job in 2 dim array is WTG reserved
57 #define DF_INOS_BUS_JOB_TIM_RES 0x1000 // job in 2 dim array is TIM reserved
58 #define DF_INOS_BUS_JOB_IRQ_REQ 0x0800 // job in 2 dim array has IRQ request
59 #define DF_INOS_BUS_JOB_NDY_MSK 0xE000 // job 'not a dummy' mask in 2 dim array
60 #define DF_INOS_BUS_JOB_IND_MSK 0x07FF // job index/time mask in 2 dim array
62 #define DF_INOS_BUS_STACKSIZE_MIN 32768 // minimum stack size required for bus task
66 #define DF_INOS_BUS_STAT_IDLE 0 // state IDLE
67 #define DF_INOS_BUS_STAT_SCAN 1 // state SCAN
68 #define DF_INOS_BUS_STAT_INIT 2 // state INIT
69 #define DF_INOS_BUS_STAT_RUN 3 // state RUN
70 #define DF_INOS_BUS_STAT_RUN_DIAG 4 // state RUN DIAGNOSIS
71 #define DF_INOS_BUS_STAT_DOWN 5 // state DOWN
72 #define DF_INOS_BUS_STAT_STOPPED 6 // state STOPPED
76 #define DF_INOS_BUS_OPTION_FLOAT 0x00000001 // option 'floating point support'
77 #define DF_INOS_BUS_OPTION_NO_1MS 0x00000002 // option 'has no 1ms handler'
78 #define DF_INOS_BUS_OPTION_SPLIT_SC 0x00000004 // option 'split sub cycle'
79 #define DF_INOS_BUS_OPTION_STOP_ON_OVERRUN 0x00000008 // option 'stop in case of overrun'
80 #define DF_INOS_BUS_OPTION_IGNORE_MAC 0x00000010 // option 'ignore slave mac address'
81 #define DF_INOS_BUS_OPTION_NO_IRQ 0x00000020 // option 'run with disabled irq's'
82 #define DF_INOS_BUS_OPTION_NO_INCO 0x00000040 // option 'no inco communication support
83 #define DF_INOS_BUS_OPTION_CYCLE_CAT 0x00000080 // option 'cycle categories'
84 #define DF_INOS_BUS_OPTION_NO_POST_HANDLER 0x00000100 // option 'do not create posthandler task'
85 #define DF_INOS_BUS_OPTION_FAKE 0x00000200 // option 'fake bus'
86 #define DF_INOS_BUS_OPTION_EXTENDED_PAUSE 0x00000400 // option 'extended pause bits (InfoLink)'
87 #define DF_INOS_BUS_OPTION_SIMULATED 0x00000800 // option 'fieldbus is simulated'
88 #define DF_INOS_BUS_OPTION_SLOT_IRQTIME 0x00001000 // option 'slot irq time always required'
90 #define DF_INOS_BUS_OPTIONEX_OPT_PORT_HANDLING 0x00000001 // option 'optimized port handling'
91 #define DF_INOS_BUS_OPTIONEX_RINGMODE 0x00000002 // option 'ginlink in ring mode'
92 #define DF_INOS_BUS_OPTIONEX_AUTO_CLOSE 0x00000004 // option 'ginlink in auto close mode'
93 #define DF_INOS_BUS_OPTIONEX_LATE_STATE_RUNNING 0x00000008 // option that sets bus state to 'running' *after* LinkUp() has been called
94 #define DF_INOS_BUS_OPTIONEX_DO_NOT_CREATE_PORTS 0x00000010 // option 'do not create ports of scanned modules'
95 #define DF_INOS_BUS_OPTIONEX_SETUP_OFFLINE_MODULE 0x00000020 // option 'setup bus module even if the module is offline'
96 #define DF_INOS_BUS_OPTIONEX_USE_ALL_CORES 0x00000040 // option 'use all available cores'
97 #define DF_INOS_BUS_OPTIONEX_PORTS_PUBLIC 0x00000080 // option 'all ports are public' (used on 3 ported ram slaves)
98 #define DF_INOS_BUS_OPTIONEX_MODULES_MULTICORE 0x00000100 // option 'restrict supported modules on multicore systems'
99 #define DF_INOS_BUS_OPTIONEX_ONLY_SETUP_KNOWN_MODULES 0x00000200// option 'only configure/safe/operational known modules'
100 #define DF_INOS_BUS_OPTIONEX_DO_NOT_STOP_ON_TRAP 0x00000400 // option 'do not stop bus in case of a trap'
101 #define DF_INOS_BUS_OPTIONEX_DMA_TRANSFER 0x00000800 // option 'use DMA if available'
102 #define DF_INOS_BUS_OPTIONEX_PORT_REC_OVERWRITE_OFFLINE 0x00001000 // option 'set ports to receive overwrite if slave is offline'
103 #define DF_INOS_BUS_OPTIONEX_OPT_CHANNEL_NUMBERING 0x00002000 // option 'optimized channel numbering'
104 #define DF_INOS_BUS_OPTIONEX_NO_RECEIVE_DATA 0x00004000 // option 'do not handle receive data'
105 #define DF_INOS_BUS_OPTIONEX_CLEANUP_AT_RESCAN 0x00008000 // option 'cleanup processimage at rescan'
106 #define DF_INOS_BUS_OPTIONEX_TRADATA_COPY_IN_RAM 0x00010000 // option 'transmit data copy in ram'
107 #define DF_INOS_BUS_OPTIONEX_LOOPBACK 0x00020000 // option 'ginlink in loopback mode'
108 #define DF_INOS_BUS_OPTIONEX_HARDWARE_SLOTCOUNT 0x00040000 // option 'ginlink in hardware slot count mode'
109 #define DF_INOS_BUS_OPTIONEX_MULTIPLE_INSTANCE_SUPPORT 0x00080000 // option 'multiple bus type instances supported'
111 #define DF_INOS_BUS_SYNCTOLERANCE_DEFAULT 2000 // default sync tolerance [ns]
112 #define DF_INOS_BUS_WATCHDOGLEVEL_DEFAULT 4 // default watchdog level
116 #define ER_INOS_BUS_ERRORCOUNTER 0x00000001 // error counter
117 #define ER_INOS_BUS_OVERRUNCOUNTER 0x00000002 // overrun counter
118 #define ER_INOS_BUS_DOWN 0x00000004 // bus down
119 #define ER_INOS_BUS_POSTOVERRUNCOUNTER 0x00000008// post overrun counter
120 #define ER_INOS_BUS_SYNCCORES_TIMEOUT 0x00000010// SyncCores with timeout waiting for the other core(s)
121 #define ER_INOS_BUS_RESCAN 0x00000020// bus rescan was performed
122 #define ER_INOS_BUS_MAINTENANCE 0x00000040// maintenance overrun counter
126 #define DF_INOS_BUS_HOOK_FLAG_ENB 0x0001 // bus hook enabled
127 #define DF_INOS_BUS_HOOK_FLAG_REM 0x0002 // bus hook has to be removed
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 // bus page analog
142 #define DF_INOS_BUS_PAGE_DIGITAL 2 // bus page digital
143 #define DF_INOS_BUS_PAGE_AXIS 3 // bus page axis
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)
177 #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[0x10000-3*
sizeof(uint32)];
427 uint32 m_uOverrunCounter{};
433 uint32 m_uOverrunCounterDisabled{};
434 bool m_bOverrunDetectedByIrq{};
439 #ifdef INOS_ADDITIONAL_BUS_TIME_MEASUREMENTS
440 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);
561 class CINOSBusModule;
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);
657 virtual uint32
RegisterPostHook(uintid& auHookId,
void* apHandler,
void* apObject = 0,
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];
1297 static void ModSetup(uint8 auBusId);
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;
1401 template <
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;
1448 extern CINOSBus* g_pBus[DF_INOS_BUS_MAX_NUMBER];
1449 extern CINOSBus* g_pBus2[DF_INOS_BUS_MAX_NUMBER];
1450 extern uint32 g_uBusIndex;
1456 #endif // INC_CINOSBUS_H