#######################################
# Datatypes and Classes (KEYWORD1)
#######################################

# Core framework
Device	KEYWORD1
Event	KEYWORD1
Command	KEYWORD1
Sensor	KEYWORD1
Actuator	KEYWORD1
EventHandler	KEYWORD1
CommandHandler	KEYWORD1
TelemetryPackage	KEYWORD1
SamplingScheduler	KEYWORD1
ConfigurationStore	KEYWORD1
TimeSynchronizationDriver	KEYWORD1
GatewayClient	KEYWORD1
ConnectivityDriver	KEYWORD1

# Configuration and diagnostics
EngineConfiguration	KEYWORD1
DiagnosticsSnapshot	KEYWORD1
GatewayStatistics	KEYWORD1

# Connectivity drivers
WiFiConnectivityDriver	KEYWORD1
BleConnectivityDriver	KEYWORD1

# Gateway clients
MqttGatewayClient	KEYWORD1
HttpGatewayClient	KEYWORD1
BleGatewayClient	KEYWORD1

# Sensors
Button	KEYWORD1
DhtSensor	KEYWORD1
DigitalLightIntensitySensor	KEYWORD1
DoorWindowSensor	KEYWORD1
EnvironmentalGasSensor	KEYWORD1
GasSensor	KEYWORD1
GeolocationSensor	KEYWORD1
LoadCellAmplifier	KEYWORD1
OneWireTemperatureSensor	KEYWORD1
PassiveInfraredSensor	KEYWORD1
PthSensor	KEYWORD1
BmeEnvironmentalSensor	KEYWORD1
PulseSensor	KEYWORD1
RfidSensor	KEYWORD1
SoilMoistureSensor	KEYWORD1
UltrasonicSensor	KEYWORD1
WaterFlowSensor	KEYWORD1
WaterLeakSensor	KEYWORD1

# Actuators
Led	KEYWORD1
RgbLed	KEYWORD1
Buzzer	KEYWORD1
RelayActuator	KEYWORD1
ServoMotor	KEYWORD1
CharacterLcdDisplay	KEYWORD1
OledDisplay	KEYWORD1

# Drivers
Hd44780Driver	KEYWORD1
Ssd1306Driver	KEYWORD1

# Value types
RgbColor	KEYWORD1
LocationData	KEYWORD1

# Nested types (enum classes and structs)
AddResult	KEYWORD1
Slot	KEYWORD1
PowerMode	KEYWORD1
NotificationBitFlag	KEYWORD1
TriggerEntry	KEYWORD1
CommandEntry	KEYWORD1
OperatingMode	KEYWORD1
GasType	KEYWORD1
HttpMethod	KEYWORD1

#######################################
# Methods and Functions (KEYWORD2)
#######################################

# Device engine management
initializeAsynchronousEngine	KEYWORD2
stopAsynchronousEngine	KEYWORD2
setPowerMode	KEYWORD2
getPowerMode	KEYWORD2
reportWakeReason	KEYWORD2

# Device scheduler management
appendSensorToScheduler	KEYWORD2
appendSensorToTriggeringScheduler	KEYWORD2
removeSensorFromTriggeringScheduler	KEYWORD2
appendToBothSchedulers	KEYWORD2

# Device telemetry and commands
enqueueTelemetryPayload	KEYWORD2
enqueueCommand	KEYWORD2
processQueuedTelemetryData	KEYWORD2
processTriggeredSensors	KEYWORD2
processPendingCommands	KEYWORD2
maintainNetworkServices	KEYWORD2

# Device diagnostics
diagnostics	KEYWORD2
setTelemetryGateway	KEYWORD2
onSensorTrigger	KEYWORD2
onSensorTriggerWrapper	KEYWORD2

# Sensor base
processEvent	KEYWORD2
on	KEYWORD2
setHandler	KEYWORD2
setFaultThreshold	KEYWORD2
reportReadSuccess	KEYWORD2
reportReadFailure	KEYWORD2
getSamplingIntervalInMilliseconds	KEYWORD2
setSamplingIntervalInMilliseconds	KEYWORD2
getEffectiveMinimalSamplingIntervalInMilliseconds	KEYWORD2
setMinimalSamplingIntervalInMilliseconds	KEYWORD2
getMinimalSamplingIntervalInMilliseconds	KEYWORD2
getDefaultSamplingIntervalInMilliseconds	KEYWORD2
getPin	KEYWORD2

# Actuator base
executeCommand	KEYWORD2
handle	KEYWORD2

# Connectivity drivers
connect	KEYWORD2
disconnect	KEYWORD2
isConnected	KEYWORD2
canTransmit	KEYWORD2
transmit	KEYWORD2
transmitBytes	KEYWORD2
getSignalStrengthInDbm	KEYWORD2
getLocalIpAddress	KEYWORD2
getWiFiStatus	KEYWORD2
waitForConnection	KEYWORD2
getNetworkSocket	KEYWORD2
createSecureSocket	KEYWORD2
setReconnectInterval	KEYWORD2
getReconnectInterval	KEYWORD2

# BLE specific
startAdvertising	KEYWORD2
stopAdvertising	KEYWORD2
isAdvertising	KEYWORD2
setReceivedDataCallback	KEYWORD2

# Gateway clients
sendTelemetryRecord	KEYWORD2
service	KEYWORD2
loop	KEYWORD2
getStatistics	KEYWORD2
setServiceEndpointUrl	KEYWORD2
getClientState	KEYWORD2
getSubscribeTopic	KEYWORD2

# HTTP specific
setAuthorizationHeader	KEYWORD2
setHttpMethod	KEYWORD2
getLastResponseStatusCode	KEYWORD2
getResponseBody	KEYWORD2
getResponseBodyLength	KEYWORD2
sendRequest	KEYWORD2

# SamplingScheduler
add	KEYWORD2
advance	KEYWORD2
count	KEYWORD2
slotAt	KEYWORD2
baseTickInMilliseconds	KEYWORD2
effectivePeriodInMilliseconds	KEYWORD2
ticksUntilNextDue	KEYWORD2

# ConfigurationStore
begin	KEYWORD2
end	KEYWORD2
isInitialized	KEYWORD2
getNamespace	KEYWORD2
isReadOnly	KEYWORD2
getString	KEYWORD2
setString	KEYWORD2
getInt	KEYWORD2
setInt	KEYWORD2
getUnsignedLong	KEYWORD2
setUnsignedLong	KEYWORD2
getFloat	KEYWORD2
setFloat	KEYWORD2
getBool	KEYWORD2
setBool	KEYWORD2
setValue	KEYWORD2
containsKey	KEYWORD2
removeKey	KEYWORD2
clearNamespace	KEYWORD2

# TelemetryPackage
serialize	KEYWORD2
toDocument	KEYWORD2
toJsonString	KEYWORD2
setEnvelopeMetadata	KEYWORD2
addEnvelopeMetadata	KEYWORD2

# Sensor data getters
getTemperatureInCelsius	KEYWORD2
getHumidityInPercentage	KEYWORD2
getPressureInHectopascals	KEYWORD2
getAltitudeInMeters	KEYWORD2
getIlluminanceInLux	KEYWORD2
getGasResistanceInKOhms	KEYWORD2
getMoistureLevel	KEYWORD2
getUid	KEYWORD2
getUidBytes	KEYWORD2
isLightDetected	KEYWORD2
isTagPresent	KEYWORD2
isWaterLeakDetected	KEYWORD2
isDoorOpen	KEYWORD2
isActive	KEYWORD2
changeDetected	KEYWORD2

# GasSensor specific
setR0	KEYWORD2
setTargetGas	KEYWORD2
setGain	KEYWORD2
setGasCalibrationParameters	KEYWORD2
startCalibration	KEYWORD2
calibrate	KEYWORD2
applyCalibration	KEYWORD2
applyMovingAverageFilter	KEYWORD2
calculateAverageRawValue	KEYWORD2
updateDigitalGasDetectedState	KEYWORD2
handleRawModeLogic	KEYWORD2
handleCalibratingModeLogic	KEYWORD2
handleAccurateModeLogic	KEYWORD2

# GeolocationSensor specific
parseNmeaSentence	KEYWORD2
parseGgaSentence	KEYWORD2
parseRmcSentence	KEYWORD2

# LoadCellAmplifier specific
tare	KEYWORD2
reset	KEYWORD2

# ServoMotor specific
validateOrAdjustPhysicalAngle	KEYWORD2
setTargetAngleBufferInDegrees	KEYWORD2
getCurrentActiveAngleInDegrees	KEYWORD2

# Buzzer specific
setTone	KEYWORD2
playBufferedTone	KEYWORD2
playDefaultToneWithoutDuration	KEYWORD2
turnBuzzerOff	KEYWORD2

# LED specific
setColor	KEYWORD2
getRedIntensity	KEYWORD2
getGreenIntensity	KEYWORD2
getBlueIntensity	KEYWORD2
adjustColorSetIntensity	KEYWORD2
adjustColorChannelIntensity	KEYWORD2

# CharacterLcdDisplay specific
setText	KEYWORD2
setLineBuffer	KEYWORD2
getMaximumRowCount	KEYWORD2
getMaximumColumnCount	KEYWORD2
updateInternalBuffer	KEYWORD2

# OledDisplay specific
clearFrameBuffer	KEYWORD2
drawHorizontalLine	KEYWORD2
drawVerticalLine	KEYWORD2
drawRectangle	KEYWORD2
fillRectangle	KEYWORD2
commitBuffersToPhysicalScreen	KEYWORD2

# Hd44780Driver specific
initialize	KEYWORD2
sendCommand	KEYWORD2
sendData	KEYWORD2
setBacklight	KEYWORD2
isBacklightOn	KEYWORD2

# Ssd1306Driver specific
sendFrameBuffer	KEYWORD2
setContrast	KEYWORD2
setInvert	KEYWORD2
setDisplayOn	KEYWORD2
isDisplayOn	KEYWORD2
getWidth	KEYWORD2
getHeight	KEYWORD2

# Logging macros
MODEST_LOG_E	KEYWORD2
MODEST_LOG_W	KEYWORD2
MODEST_LOG_I	KEYWORD2
MODEST_LOG_D	KEYWORD2
MODEST_LOG_V	KEYWORD2
MIOT_LOG_E	KEYWORD2
MIOT_LOG_W	KEYWORD2
MIOT_LOG_I	KEYWORD2
MIOT_LOG_D	KEYWORD2
MIOT_LOG_V	KEYWORD2

#######################################
# Constants and Literals (LITERAL1)
#######################################

# Log levels
MODEST_LOG_LEVEL_NONE	LITERAL1
MODEST_LOG_LEVEL_ERROR	LITERAL1
MODEST_LOG_LEVEL_WARN	LITERAL1
MODEST_LOG_LEVEL_INFO	LITERAL1
MODEST_LOG_LEVEL_DEBUG	LITERAL1
MODEST_LOG_LEVEL_VERBOSE	LITERAL1

# Framework-wide sensor events
DATA_READ_EVENT	LITERAL1
DATA_READ_EVENT_IDENTIFIER	LITERAL1
MEASURE_DATA_REQUESTED_EVENT	LITERAL1
MEASURE_DATA_REQUESTED_EVENT_IDENTIFIER	LITERAL1
SENSOR_FAULT_EVENT_IDENTIFIER	LITERAL1
SENSOR_RECOVERED_EVENT_IDENTIFIER	LITERAL1

# Button events
BUTTON_PRESSED_EVENT	LITERAL1
BUTTON_PRESSED_EVENT_IDENTIFIER	LITERAL1

# DigitalLightIntensitySensor events
LIGHT_DETECTED_EVENT	LITERAL1
LIGHT_DETECTED_EVENT_IDENTIFIER	LITERAL1
LIGHT_ABSENT_EVENT	LITERAL1
LIGHT_ABSENT_EVENT_IDENTIFIER	LITERAL1

# PassiveInfraredSensor events
MOTION_DETECTED_EVENT	LITERAL1
MOTION_DETECTED_EVENT_IDENTIFIER	LITERAL1
MOTION_STOPPED_EVENT	LITERAL1
MOTION_STOPPED_EVENT_IDENTIFIER	LITERAL1

# RfidSensor events
TAG_DETECTED_EVENT	LITERAL1
TAG_DETECTED_EVENT_IDENTIFIER	LITERAL1
TAG_REMOVED_EVENT	LITERAL1
TAG_REMOVED_EVENT_IDENTIFIER	LITERAL1

# WaterLeakSensor events
WATER_LEAK_DETECTED_EVENT	LITERAL1
WATER_LEAK_DETECTED_EVENT_IDENTIFIER	LITERAL1
WATER_LEAK_CLEARED_EVENT	LITERAL1
WATER_LEAK_CLEARED_EVENT_IDENTIFIER	LITERAL1

# DoorWindowSensor events
DOOR_OPENED_EVENT	LITERAL1
DOOR_OPENED_EVENT_IDENTIFIER	LITERAL1
DOOR_CLOSED_EVENT	LITERAL1
DOOR_CLOSED_EVENT_IDENTIFIER	LITERAL1

# GasSensor events
DIGITAL_GAS_DETECTED_EVENT	LITERAL1
DIGITAL_GAS_DETECTED_EVENT_IDENTIFIER	LITERAL1

# Buzzer commands
TURN_ON_COMMAND	LITERAL1
TURN_ON_COMMAND_IDENTIFIER	LITERAL1
TURN_OFF_COMMAND	LITERAL1
TURN_OFF_COMMAND_IDENTIFIER	LITERAL1
PLAY_TONE_COMMAND	LITERAL1
PLAY_TONE_COMMAND_IDENTIFIER	LITERAL1
PLAY_FREQUENCY_COMMAND_IDENTIFIER	LITERAL1

# CharacterLcdDisplay commands
UPDATE_TEXT_COMMAND	LITERAL1
UPDATE_TEXT_COMMAND_IDENTIFIER	LITERAL1
TURN_BACKLIGHT_ON_COMMAND	LITERAL1
TURN_BACKLIGHT_ON_COMMAND_IDENTIFIER	LITERAL1
TURN_BACKLIGHT_OFF_COMMAND	LITERAL1
TURN_BACKLIGHT_OFF_COMMAND_IDENTIFIER	LITERAL1

# OledDisplay commands
UPDATE_DISPLAY_COMMAND	LITERAL1
UPDATE_DISPLAY_COMMAND_IDENTIFIER	LITERAL1
CLEAR_DISPLAY_COMMAND	LITERAL1
CLEAR_DISPLAY_COMMAND_IDENTIFIER	LITERAL1
SET_BACKLIGHT_COMMAND	LITERAL1
SET_BACKLIGHT_COMMAND_IDENTIFIER	LITERAL1

# RelayActuator commands
RELAY_ON_COMMAND	LITERAL1
RELAY_ON_COMMAND_IDENTIFIER	LITERAL1
RELAY_OFF_COMMAND	LITERAL1
RELAY_OFF_COMMAND_IDENTIFIER	LITERAL1
TOGGLE_RELAY_COMMAND	LITERAL1
TOGGLE_RELAY_COMMAND_IDENTIFIER	LITERAL1

# RgbLed commands
TOGGLE_LED_COMMAND	LITERAL1
TOGGLE_LED_COMMAND_IDENTIFIER	LITERAL1
SET_COLOR_COMMAND	LITERAL1
SET_COLOR_COMMAND_IDENTIFIER	LITERAL1
ADJUST_BRIGHTNESS_COMMAND_IDENTIFIER	LITERAL1

# RgbLed predefined colors
RED	LITERAL1
GREEN	LITERAL1
BLUE	LITERAL1
YELLOW	LITERAL1
CYAN	LITERAL1
MAGENTA	LITERAL1
WHITE	LITERAL1
ORANGE	LITERAL1
PURPLE	LITERAL1

# BLE NUS UUIDs
NUS_SERVICE_UUID	LITERAL1
NUS_RX_CHARACTERISTIC_UUID	LITERAL1
NUS_TX_CHARACTERISTIC_UUID	LITERAL1

# HTTP constants
HTTP_HEADER_CONTENT_TYPE	LITERAL1
HTTP_HEADER_AUTHORIZATION	LITERAL1
DEFAULT_CONTENT_TYPE	LITERAL1

# HTTP methods
HttpMethod::Get	LITERAL1
HttpMethod::Post	LITERAL1
HttpMethod::Put	LITERAL1
HttpMethod::Patch	LITERAL1
HttpMethod::Delete	LITERAL1

# Device constants
MAX_TRIGGERED_SENSORS	LITERAL1

# DHT sensor constants
DEFAULT_SAMPLING_INTERVAL_IN_MILLISECONDS	LITERAL1
MINIMUM_SAMPLING_INTERVAL_IN_MILLISECONDS	LITERAL1
DHT11_MINIMUM_SAMPLING_INTERVAL_IN_MILLISECONDS	LITERAL1
DHT22_MINIMUM_SAMPLING_INTERVAL_IN_MILLISECONDS	LITERAL1
SENSOR_MODEL_DHT11	LITERAL1
SENSOR_MODEL_DHT22	LITERAL1
SENSOR_MODEL_DHT21	LITERAL1
SENSOR_MODEL_AM2301	LITERAL1

# ServoMotor commands
DRIVE_TO_ANGLE_COMMAND_IDENTIFIER	LITERAL1

# Sensor change detection thresholds
MOISTURE_CHANGE_EPSILON	LITERAL1
GAS_RESISTANCE_CHANGE_EPSILON	LITERAL1

# ConfigurationStore constants
MAX_CONFIGURATION_KEY_LENGTH	LITERAL1
MAX_CONFIGURATION_STRING_VALUE_LENGTH	LITERAL1

# TimeSynchronizationDriver
getCurrentTimestamp	KEYWORD2
isSynchronized	KEYWORD2
saveToRtc	KEYWORD2
restoreFromRtc	KEYWORD2

# SamplingScheduler constants
MAXIMUM_SLOTS	LITERAL1
