#ifndef _INTEROCEPTOR_H #define _INTEROCEPTOR_H #include #include namespace smo { namespace sensors { class Interoceptor : public Sensor { public: Interoceptor(uint32_t _id, uint32_t _value = 0) : id(_id), value(_value) {} ~Interoceptor() = default; public: uint32_t id; uint64_t value; }; class NeutrinTeroceptor : public Interoceptor { public: NeutrinTeroceptor(uint32_t _id, uint32_t _value = 0) : Interoceptor(_id, _value) {} }; class IntrinTeroceptor : public Interoceptor { public: static constexpr uint32_t DEFAULT_INDICATION_THRESHOLD = 1; static constexpr uint32_t DEFAULT_ALERT_THRESHOLD = 5; static constexpr uint32_t DEFAULT_OVERLOAD_THRESHOLD = 9; IntrinTeroceptor( uint32_t _id, uint32_t _value = 0, uint32_t _indicationThreshold = DEFAULT_INDICATION_THRESHOLD, uint32_t _alertThreshold = DEFAULT_ALERT_THRESHOLD, uint32_t _overloadThreshold = DEFAULT_OVERLOAD_THRESHOLD) : Interoceptor(_id, _value), indicationThreshold(_indicationThreshold), alertThreshold(_alertThreshold), overloadThreshold(_overloadThreshold) {} ~IntrinTeroceptor() = default; public: uint32_t indicationThreshold; uint32_t alertThreshold; uint32_t overloadThreshold; }; /** * Negtrin and Postrin interoceptors are specialized intrinsic interoceptors * that, unlike neutral interoceptors, have activation thresholds for different * response levels (indication, alert, and overload). These thresholds allow * them to trigger graduated responses based on stimulus intensity. * * While neutral interoceptors simply record a binary state or basic value, * Negtrin and Postrin Interoceptors can model complex sensory responses with * multiple activation levels, similar to biological pain/pleasure responses. * Each threshold represents a different level of urgency or intensity in the * sensory input. * * @see IntrinTeroceptor for the threshold values and implementation details ******************************************************************************/ class NegtrinTeroceptor : public IntrinTeroceptor { public: NegtrinTeroceptor( uint32_t _id, uint32_t _value = 0, uint32_t _indicationThreshold = DEFAULT_INDICATION_THRESHOLD, uint32_t _alertThreshold = DEFAULT_ALERT_THRESHOLD, uint32_t _overloadThreshold = DEFAULT_OVERLOAD_THRESHOLD) : IntrinTeroceptor(_id, _value, _indicationThreshold, _alertThreshold, _overloadThreshold) {} }; class PostrinTeroceptor : public IntrinTeroceptor { public: PostrinTeroceptor( uint32_t _id, uint32_t _value = 0, uint32_t _indicationThreshold = DEFAULT_INDICATION_THRESHOLD, uint32_t _alertThreshold = DEFAULT_ALERT_THRESHOLD, uint32_t _overloadThreshold = DEFAULT_OVERLOAD_THRESHOLD) : IntrinTeroceptor(_id, _value, _indicationThreshold, _alertThreshold, _overloadThreshold) {} }; } // namespace sensors } // namespace smo #endif // _INTEROCEPTOR_H