# Copyright (c) 2017 Linaro Limited
# SPDX-License-Identifier: Apache-2.0

menuconfig LWM2M_IPSO_SUPPORT
	bool "IPSO Alliance Smart Object Support"
	help
	  This option adds general support for IPSO objects

if LWM2M_IPSO_SUPPORT

config LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	bool "Nonstandard IPSO object Timestamp resources"
	help
	  If you enable this option, various IPSO objects supported below
	  will optionally include timestamp resources (ID 5518).
	  This is an LWM2M protocol extension which can be useful to associate
	  times with events. If unsure, leave at the default n.

config LWM2M_IPSO_TEMP_SENSOR
	bool "IPSO Temperature Sensor Support"
	help
	  This IPSO object should be used with a temperature sensor to
	  report a temperature measurement. It also provides resources for
	  minimum/maximum measured values and the minimum/maximum range
	  that can be measured by the temperature sensor.

config LWM2M_IPSO_TEMP_SENSOR_INSTANCE_COUNT
	int "Maximum # of IPSO Temperature Sensor object instances"
	default 1
	depends on LWM2M_IPSO_TEMP_SENSOR
	help
	  This setting establishes the total count of IPSO Temperature
	  Sensor instances available to the LWM2M client.

config LWM2M_IPSO_TEMP_SENSOR_TIMESTAMP
	bool "Add timestamp resources to IPSO temperature objects"
	default y
	depends on LWM2M_IPSO_TEMP_SENSOR && LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each temperature object.

config LWM2M_IPSO_GENERIC_SENSOR
	bool "IPSO Generic Sensor Support"
	help
	  This IPSO object can be used to prototype a sensor.

if LWM2M_IPSO_GENERIC_SENSOR

config LWM2M_IPSO_GENERIC_SENSOR_INSTANCE_COUNT
	int "Maximum # of IPSO Generic Sensor object instances"
	default 1
	help
	  This setting establishes the total count of IPSO Generic
	  Sensor instances available to the LWM2M client.

config LWM2M_IPSO_GENERIC_SENSOR_TIMESTAMP
	bool "Add timestamp resources to IPSO objects"
	default y
	depends on LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each object.

config LWM2M_IPSO_GENERIC_SENSOR_NAME
	string "Name that will show up in debug output when object is created"
	default "Generic"

config LWM2M_IPSO_GENERIC_SENSOR_TYPE
	string "Sensor type"
	default "Generic sensor"
	help
	  The type of the sensor (for instance PIR type).

endif # LWM2M_IPSO_GENERIC_SENSOR

config LWM2M_IPSO_HUMIDITY_SENSOR
	bool "IPSO Humidity Sensor Support"
	help
	  This IPSO object can be used to prototype a sensor.

if LWM2M_IPSO_HUMIDITY_SENSOR

config LWM2M_IPSO_HUMIDITY_SENSOR_INSTANCE_COUNT
	int "Maximum # of IPSO Humidity Sensor object instances"
	default 1
	help
	  This setting establishes the total count of IPSO Humidity
	  Sensor instances available to the LWM2M client.

config LWM2M_IPSO_HUMIDITY_SENSOR_TIMESTAMP
	bool "Add timestamp resources to IPSO objects"
	default y
	depends on LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each object.

endif # LWM2M_IPSO_HUMIDITY_SENSOR

config LWM2M_IPSO_PRESSURE_SENSOR
	bool "IPSO Pressure Sensor Support"
	help
	  This IPSO object can be used to prototype a sensor.

if LWM2M_IPSO_PRESSURE_SENSOR

config LWM2M_IPSO_PRESSURE_SENSOR_INSTANCE_COUNT
	int "Maximum # of IPSO Pressure Sensor object instances"
	default 1
	help
	  This setting establishes the total count of IPSO Pressure
	  Sensor instances available to the LWM2M client.

config LWM2M_IPSO_PRESSURE_SENSOR_TIMESTAMP
	bool "Add timestamp resources to IPSO objects"
	default y
	depends on LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each object.

endif # LWM2M_IPSO_PRESSURE_SENSOR

config LWM2M_IPSO_LIGHT_CONTROL
	bool "IPSO Light Control Support"
	help
	  This Object is used to control a light source, such as a LED or other
	  light. It allows a light to be turned on or off and its dimmer
	  setting to be controlled as a % between 0 and 100. An optional color
	  setting enables a string to be used to indicate the desired color.

config LWM2M_IPSO_LIGHT_CONTROL_INSTANCE_COUNT
	int "Maximum # of IPSO Light Control object instances"
	default 1
	depends on LWM2M_IPSO_LIGHT_CONTROL
	help
	  This setting establishes the total count of IPSO Light Control
	  instances available to the LWM2M client.

config LWM2M_IPSO_ACCELEROMETER
	bool "IPSO Accelerometer Support"
	help
	  This Object is used to used to represent a 1-3 axis accelerometer.

config LWM2M_IPSO_ACCELEROMETER_INSTANCE_COUNT
	int "Maximum # of IPSO Accelerometer object instances"
	default 1
	depends on LWM2M_IPSO_ACCELEROMETER
	help
	  This setting establishes the total count of IPSO Accelerometer
	  instances available to the LWM2M client.

config LWM2M_IPSO_ACCELEROMETER_TIMESTAMP
	bool "Add timestamp resources to IPSO accelerometer objects"
	default y
	depends on LWM2M_IPSO_ACCELEROMETER && LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each accelerometer object.

config LWM2M_IPSO_BUZZER
	bool "IPSO Buzzer Support"
	help
	  This Object is used to actuate an audible alarm such as a buzzer,
	  beeper, or vibration alarm.

config LWM2M_IPSO_BUZZER_INSTANCE_COUNT
	int "Maximum # of IPSO Buzzer instances"
	default 1
	depends on LWM2M_IPSO_BUZZER
	help
	  This setting establishes the total count of IPSO Buzzer
	  instances available to the LWM2M client.

config LWM2M_IPSO_TIMER
	bool "IPSO Light Control Support"
	help
	  This Object is used to time events / actions

config LWM2M_IPSO_TIMER_INSTANCE_COUNT
	int "Maximum # of IPSO Timer object instances"
	default 1
	depends on LWM2M_IPSO_TIMER
	help
	  This setting establishes the total count of IPSO Timer
	  instances available to the LWM2M client.

config LWM2M_IPSO_ONOFF_SWITCH
	bool "IPSO On/Off Switch Support"
	help
	  This object is used with an On/Off switch to report it's state.

config LWM2M_IPSO_ONOFF_SWITCH_INSTANCE_COUNT
	int "Maximum # of IPSO On/Off Switch object instances"
	default 1
	depends on LWM2M_IPSO_ONOFF_SWITCH
	help
	  This setting establishes the total count of IPSO On/Off Switch
	  instances available to the LWM2M client.

config LWM2M_IPSO_ONOFF_SWITCH_TIMESTAMP
	bool "Add a timestamp resource to IPSO on/off switch objects"
	default y
	depends on LWM2M_IPSO_ONOFF_SWITCH && LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each on/off switch object.

config LWM2M_IPSO_PUSH_BUTTON
	bool "IPSO Push Button Support"
	help
	  This Object is used to report the state of a momentary action push
	  button control and to count the number of times the control has
	  been operated since the last observation.

config LWM2M_IPSO_PUSH_BUTTON_INSTANCE_COUNT
	int "Maximum # of IPSO On/Off Switch object instances"
	default 1
	depends on LWM2M_IPSO_PUSH_BUTTON
	help
	  This setting establishes the total count of IPSO Push Button
	  instances available to the LWM2M client.

config LWM2M_IPSO_PUSH_BUTTON_TIMESTAMP
	bool "Add a timestamp resource to IPSO Push Button objects"
	default y
	depends on LWM2M_IPSO_PUSH_BUTTON && LWM2M_IPSO_TIMESTAMP_EXTENSIONS
	help
	  Add a non-standard timestamp resource to each Push Button object.

endif # LWM2M_LWM2M_IPSO_SUPPORT
