Files

110 lines
3.0 KiB
C++
Raw Permalink Normal View History

#ifndef _INTEROCEPTOR_H
#define _INTEROCEPTOR_H
#include <cstdint>
#include <sensors/sensor.h>
2025-07-22 06:48:04 -04:00
namespace smo {
namespace sensors {
2025-01-04 13:48:09 -04:00
class Interoceptor
: public Sensor
2025-01-04 13:48:09 -04:00
{
public:
Interoceptor(uint32_t _id, uint32_t _value = 0)
: id(_id), value(_value)
{}
~Interoceptor() = default;
public:
uint32_t id;
uint64_t value;
};
class NeutrinTeroceptor
2025-01-04 13:48:09 -04:00
: public Interoceptor
{
public:
NeutrinTeroceptor(uint32_t _id, uint32_t _value = 0)
: Interoceptor(_id, _value)
{}
};
class IntrinTeroceptor
2025-01-04 13:48:09 -04:00
: 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;
};
/**
2025-01-04 13:38:08 -04:00
* 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.
*
2025-01-04 13:38:08 -04:00
* 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
2025-01-04 13:38:08 -04:00
******************************************************************************/
class NegtrinTeroceptor
2025-01-04 13:48:09 -04:00
: 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,
2025-01-04 13:38:08 -04:00
_indicationThreshold, _alertThreshold, _overloadThreshold)
{}
};
class PostrinTeroceptor
2025-01-04 13:48:09 -04:00
: 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,
2025-01-04 13:38:08 -04:00
_indicationThreshold, _alertThreshold, _overloadThreshold)
{}
};
} // namespace sensors
2025-07-22 06:48:04 -04:00
} // namespace smo
#endif // _INTEROCEPTOR_H