#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

menuconfig EXAMPLES_FOC
	tristate "FOC motor controller example"
	depends on MOTOR_FOC
	depends on INDUSTRY_FOC
	---help---
		Enable the FOC motor controller example.
		At the moment, this example implements a simple open-loop velocity controller.

if EXAMPLES_FOC

config EXAMPLES_FOC_DEVPATH
	string "FOC device path prefix"
	default "/dev/foc"
	---help---
		The default path to the FOC device without the device minor number.
		Default: /dev/foc

config EXAMPLES_FOC_FLOAT_INST
	int "FOC float instances"
	depends on INDUSTRY_FOC_FLOAT
	default 0

config EXAMPLES_FOC_FIXED16_INST
	int "FOC fixed16 instances"
	depends on INDUSTRY_FOC_FIXED16
	default 0

config EXAMPLES_FOC_CONTROL_PRIO
	int "FOC control thread priority"
	default 255

config EXAMPLES_FOC_CONTROL_STACKSIZE
	int "FOC control thread stack size"
	default 4096

config EXAMPLES_FOC_VERBOSE
	int "Enable verbose print for app"
	default 1
	range 0 2

config EXAMPLES_FOC_PERF
	bool "Enable performance meassurements"
	default n

config EXAMPLES_FOC_CONTROL_CRITSEC
	bool "Protect controller thread with critical section"
	default y
	depends on BUILD_FLAT
	---help---
		Protect controller thread with critical section.

		If the controller frequency is high, system timer interrupts will
		eventually interrupt the controller function, thereby increasing the
		execution time. This may lead to skipping the control cycle, which
		negatively affects the control algorithm.

		With this option enabled, interrupts are disabled for the duration
		of the controller function execution.

		This option uses the kernel internal API directly, which means
		it won't work outside of FLAT build.

if EXAMPLES_FOC_PERF

config EXAMPLES_FOC_PERF_LIVE
	bool "Print FOC perf results on each max value change"
	default n
	---help---
		With this option perf results are printed every time the maximum value
		changes. The disadvantage of this method is that printing can directly
		affect the pref result but it gives results in real time.

config EXAMPLES_FOC_PERF_EXIT
	bool "Print FOC perf results on thread exit"
	default y
	---help---
		With this option perf results are printed on control thread exit.

endif # EXAMPLES_FOC_PERF

choice
	prompt "FOC modulation selection"
	default EXAMPLES_FOC_MODULATION_SVM3

config EXAMPLES_FOC_MODULATION_SVM3
	bool "FOC use SVM3"
	select INDUSTRY_FOC_MODULATION_SVM3

endchoice # FOC modulation selection

choice
	prompt "FOC current controller selection"
	default EXAMPLES_FOC_CONTROL_PI

config EXAMPLES_FOC_CONTROL_PI
	bool "FOC use PI current controller"
	select INDUSTRY_FOC_CONTROL_PI

endchoice # FOC current controller

config EXAMPLES_FOC_PWM_FREQ
	int "FOC PWM frequency"
	default 10000
	---help---
		Select the FOC PWM switching frequency

config EXAMPLES_FOC_NOTIFIER_FREQ
	int "FOC notifier frequency"
	default EXAMPLES_FOC_PWM_FREQ
	---help---
		Select the FOC notifier frequency

config EXAMPLES_FOC_STATE_PRINT_FREQ
	int "FOC example data printer frequency"
	default 0
	depends on INDUSTRY_FOC_HANDLER_PRINT
	---help---
		Set 0 to disable FOC data print

config EXAMPLES_FOC_STATE_USE_MODEL_PMSM
	bool "FOC uses PMSM model"
	depends on INDUSTRY_FOC_MODEL_PMSM
	default n
	---help---
		Use PMSM model instead of real hardware

choice
	prompt "FOC motor controller type"
	default EXAMPLES_FOC_SENSORLESS

config EXAMPLES_FOC_SENSORLESS
	bool "FOC example sensorless motor controller"
	select EXAMPLES_FOC_ANGOBS
	---help---
		Use sensorless controller, no angle sensor required.

config EXAMPLES_FOC_SENSORED
	bool "FOC example sensored motor controller"
	select EXAMPLES_FOC_HAVE_ALIGN
	---help---
		Use sensored controller, angle sensor for motor required.

endchoice #

config EXAMPLES_FOC_RUN_DISABLE
	bool "FOC Disable motor controller"
	---help---
		Disable motor controller logic. Requested dq is always [0, 0].
		Useful for testing and benchmarking.

menu "Motor phy"

config EXAMPLES_FOC_MOTOR_POLES
	int "FOC example motor poles pairs"
	default 0

config EXAMPLES_FOC_MOTOR_RES
	int "FOC example motor phase resistance (x1000000)"
	default 0
	---help---
		The unit is micro-ohm (1/1000000 ohm).

config EXAMPLES_FOC_MOTOR_IND
	int "FOC example motor phase inductance (x1000000)"
	default 0
	---help---
		The unit is micro micro-henry (1/1000000 henry).

config EXAMPLES_FOC_MOTOR_FLUXLINK
	int "FOC example motor flux linkage (x1000000)"
	default 0
	---help---
		The unit is micro-Vs (1/1000000 Vs).
		Flux linkage can be obtained from the formula:
		lambda_pm = (1 / sqrt(3)) * (60 / 2*PI) * (Ke / P) [Vs]
		where:
		Ke - motor voltage constant Ke [V/rpm]
		P - motor pole pairs

endmenu # Motor phy

if EXAMPLES_FOC_SENSORED

choice
	prompt "FOC sensored sensor selection"

config EXAMPLES_FOC_HAVE_QENCO
	bool "FOC example have qencoder"
	select INDUSTRY_FOC_ANGLE_QENCO

config EXAMPLES_FOC_HAVE_HALL
	bool "FOC example Hall sensor support"
	select INDUSTRY_FOC_ANGLE_HALL

endchoice # FOC sensored sensor selection

if EXAMPLES_FOC_HAVE_QENCO

config EXAMPLES_FOC_QENCO_POSMAX
	int "FOC example qencoder maximum position"
	default 0

config EXAMPLES_FOC_QENCO_DEVPATH
	string "FOC example qencoder path prefix"
	default "/dev/qe"
	---help---
		The default path to the qenco device without the device minor number.
		Default: /dev/qe

endif # EXAMPLES_FOC_HAVE_QENCO

if EXAMPLES_FOC_HAVE_HALL

config EXAMPLES_FOC_HALL_DEVPATH
	string "FOC example Hall sensor path prefix"
	default "/dev/hall"
	---help---
		The default path to the Hall device without the device minor number.
		Default: /dev/hall

endif # EXAMPLES_FOC_HAVE_HALL

endif # EXAMPLES_FOC_SENSORED

config EXAMPLES_FOC_HAVE_OPENLOOP
	bool "FOC example have open-loop controller"
	select INDUSTRY_FOC_ANGLE_OPENLOOP
	select EXAMPLES_FOC_HAVE_ALIGN
	default EXAMPLES_FOC_SENSORLESS

config EXAMPLES_FOC_HAVE_TORQ
	bool "FOC example torque controller support"
	default n

if EXAMPLES_FOC_HAVE_TORQ

config EXAMPLES_FOC_TORQ_MAX
	int "FOC example torque maximum (x1000)"
	default 1000
	---help---
		The unit is mini-ampere (1/1000 ampere) for current mode.
		The unit is mini-volt (1/1000 voltage) for voltage mode.

endif # EXAMPLES_FOC_HAVE_TORQ

config EXAMPLES_FOC_HAVE_VEL
	bool "FOC example velocity controller support"
	default EXAMPLES_FOC_SENSORLESS
	select EXAMPLES_FOC_HAVE_TORQ

config EXAMPLES_FOC_HAVE_POS
	bool "FOC example position controller support"
	default n
	select EXAMPLES_FOC_HAVE_VEL

config EXAMPLES_FOC_VELOBS
	bool "FOC example velocity observer support"
	default n

if EXAMPLES_FOC_HAVE_VEL

config EXAMPLES_FOC_VELCTRL_FREQ
	int "FOC example velocity controller frequency"
	default 1000

config EXAMPLES_FOC_VELNOW_FILTER
	int "FOC example velocity controller (x1000)"
	default 990

config EXAMPLES_FOC_VEL_MAX
	int "FOC example velocity maximum (x1)"
	default 1000
	---help---
		The unit is rad/s

choice
	prompt "FOC velocity controller selection"
	default EXAMPLES_FOC_VELCTRL_PI

config EXAMPLES_FOC_VELCTRL_PI
	bool "FOC velocity PI controller"

endchoice # FOC velocity controller

if EXAMPLES_FOC_VELCTRL_PI

config EXAMPLES_FOC_VELCTRL_PI_KP
	int "FOC velocity PI Kp (1000000x)"
	default 0
	---help---
		The Kp coefficient used in controller is:
		Kp = EXAMPLES_FOC_VELCTRL_PI_KP/1000000

config EXAMPLES_FOC_VELCTRL_PI_KI
	int "FOC velocity PI Ki (1000000x)"
	default 0
	---help---
		The Ki coefficient used in controller is:
		Ki = EXAMPLES_FOC_VELCTRL_PI_KI/1000000

endif # EXAMPLES_FOC_VELCTRL_PI

endif # EXAMPLES_FOC_HAVE_VEL

config EXAMPLES_FOC_ANGOBS
	bool "FOC example phase angle observer support"
	default n

choice
	prompt "FOC angle observer selection"
	default EXAMPLES_FOC_ANGOBS_NFO
	depends on EXAMPLES_FOC_ANGOBS

config EXAMPLES_FOC_ANGOBS_SMO
	bool "FOC angle SMO observer"
	select INDUSTRY_FOC_ANGLE_OSMO

config EXAMPLES_FOC_ANGOBS_NFO
	bool "FOC angle NFO observer"
	select INDUSTRY_FOC_ANGLE_ONFO

endchoice # FOC angle observer

if EXAMPLES_FOC_ANGOBS

config EXAMPLES_FOC_ANGOBS_HYS
	int "FOC angle observer hysteresis [x1]"
	default 0
	---help---
		Hysteresis added to the observer to open-loop transition.

config EXAMPLES_FOC_ANGOBS_THR
	int "FOC angle observer velocity threshold [x1]"
	default 0
	---help---
		Once the motor reaches this speed, we switch from the open-loop angle
		to the observer angle.

config EXAMPLES_FOC_ANGOBS_MERGE_RATIO
	int "FOC angle observer merge ratio"
	default 50
	range 0 50
	---help---
		This parameter determines how quickly we make the transition from the
		open-loop angle to the observer angle after reaching the observer threshold
		velocity. The smaler the value, the smoother the transition.
		If set to 0 - smooth transition is disabled.

endif # EXAMPLES_FOC_ANGOBS

if EXAMPLES_FOC_ANGOBS_SMO

config EXAMPLES_FOC_ANGOBS_SMO_KSLIDE
	int "FOC angle SMO observer Kslide (x1000)"
	default 0
	---help---
		The Kslide coefficient used in observer is:
		Kslide = EXAMPLES_FOC_ANGOBS_SMO_KSLIDE/1000

config EXAMPLES_FOC_ANGOBS_SMO_ERRMAX
	int "FOC angle SMO observer err_max (x1000)"
	default 0
	---help---
		The err_max coefficient used in observer is:
		err_max = EXAMPLES_FOC_ANGOBS_SMO_ERRMAX/1000

endif # EXAMPLES_FOC_ANGOBS_SMO

if EXAMPLES_FOC_ANGOBS_NFO

config EXAMPLES_FOC_ANGOBS_NFO_GAIN
	int "FOC angle NFO observer gain (x1)"
	default 0
	---help---
		The gain coefficient used in observer at maximum duty cycle.

config EXAMPLES_FOC_ANGOBS_NFO_GAINSLOW
	int "FOC angle NFO observer gain slow (x1)"
	default 0
	---help---
		The gain coefficient used in observer at minimum duty cycle.

endif # EXAMPLES_FOC_ANGOBS_NFO

config EXAMPLES_FOC_VELOBS
	bool "FOC example velocity observer support"
	default n

if EXAMPLES_FOC_VELOBS

choice
	prompt "FOC example velocity observer selection"
	default EXAMPLES_FOC_VELOBS_DIV

config EXAMPLES_FOC_VELOBS_DIV
	bool "FOC velocity DIV observer"
	select INDUSTRY_FOC_VELOCITY_ODIV

config EXAMPLES_FOC_VELOBS_PLL
	bool "FOC velocity PLL observer"
	select INDUSTRY_FOC_VELOCITY_OPLL

endchoice # FOC example velocity observer selection

if EXAMPLES_FOC_VELOBS_DIV

config EXAMPLES_FOC_VELOBS_DIV_SAMPLES
	int "FOC velocity DIV observer samples"
	default 10

config EXAMPLES_FOC_VELOBS_DIV_FILTER
	int "FOC velocity DIV observer filter (x1000)"
	default 990

endif # INDUSTRY_FOC_VELOCITY_ODIV

if EXAMPLES_FOC_VELOBS_PLL

config EXAMPLES_FOC_VELOBS_PLL_KP
	int "FOC velocity PLL observer Kp (x1)"
	default 0

config EXAMPLES_FOC_VELOBS_PLL_KI
	int "FOC velocity PLL observer Ki (x1)"
	default 0

endif # EXAMPLES_FOC_VELOBS_PLL

endif # EXAMPLES_FOC_VELOBS

menu "FOC user input"

config EXAMPLES_FOC_HAVE_ADC
	bool
	default n

choice
	prompt "FOC VBUS source"
	default EXAMPLES_FOC_VBUS_CONST

config EXAMPLES_FOC_VBUS_CONST
	bool "Use hardcoded constant VBUS value"

config EXAMPLES_FOC_VBUS_ADC
	bool "Use VBUS provided by ADC interface"
	depends on ADC
	select EXAMPLES_FOC_HAVE_ADC

endchoice # FOC VBUS interface

if EXAMPLES_FOC_VBUS_CONST

config EXAMPLES_FOC_VBUS_CONST_VALUE
	int "FOC VBUS constant value"
	default 12000

endif # EXAMPLES_FOC_VBUS_CONST

if EXAMPLES_FOC_HAVE_ADC

config EXAMPLES_FOC_ADC_DEVPATH
	string "FOC ADC interface path"
	default "/dev/adc0"

config EXAMPLES_FOC_ADC_VREF
	int "FOC ADC reference voltage [x1000]"
	default 0

config EXAMPLES_FOC_ADC_MAX
	int "FOC ADC aux maximum sample value"
	default 0

endif # EXAMPLES_FOC_HAVE_ADC

if EXAMPLES_FOC_VBUS_ADC

config EXAMPLES_FOC_VBUS_SCALE
	int "FOC VBUS SCALE scale [x1000]"
	default 0

endif # EXAMPLES_FOC_VBUS_ADC

choice
	prompt "FOC setpoint source"
	default EXAMPLES_FOC_SETPOINT_CONST

config EXAMPLES_FOC_SETPOINT_CONST
	bool "Use hardcoded constant setpiont value"

config EXAMPLES_FOC_SETPOINT_ADC
	bool "Use ADC to control setpoint"
	depends on ADC
	select EXAMPLES_FOC_HAVE_ADC
	select EXAMPLES_FOC_HAVE_SETPOINT_VAR

config EXAMPLES_FOC_SETPOINT_CHAR
	bool "Use character interface to control setpoint"
	select EXAMPLES_FOC_HAVE_CHARCTRL
	select EXAMPLES_FOC_HAVE_SETPOINT_VAR

endchoice # FOC setpoint interface

config EXAMPLES_FOC_HAVE_SETPOINT_VAR
	bool
	default n

if EXAMPLES_FOC_SETPOINT_CONST

config EXAMPLES_FOC_SETPOINT_CONST_VALUE
	int "FOC hardoced setpoint value"
	default 0

endif # EXAMPLES_FOC_SETPOINT_CONST

if EXAMPLES_FOC_HAVE_SETPOINT_VAR

config EXAMPLES_FOC_SETPOINT_MAX
	int "FOC maximum setpoint [x1000]"
	default 0

endif # EXAMPLES_FOC_HAVE_SETPOINT_VAR

config EXAMPLES_FOC_TIME_DEFAULT
	int "FOC run time default (sec)"
	default 10

config EXAMPLES_FOC_STATE_INIT
	int "FOC motor controller state init"
	default 1
	range 1 4
	---help---
		1 - motor FREE (no current)
		2 - motor STOP (active break)
		3 - motor moves in CW direction
		4 - motor moves in CCW direction

config EXAMPLES_FOC_HAVE_BUTTON
	bool "FOC button support"
	default n
	---help---
		The button is used to change the motor controller state

if EXAMPLES_FOC_HAVE_BUTTON

config EXAMPLES_FOC_BUTTON_DEVPATH
	string "FOC button device path"
	default "/dev/buttons"
	depends on INPUT_BUTTONS

endif

config EXAMPLES_FOC_HAVE_CHARCTRL
	bool "FOC character control interface support"
	default n
	---help---
		Use simple character commands to interact with the app

if EXAMPLES_FOC_HAVE_CHARCTRL

config EXAMPLES_FOC_CHAR_SETPOINT_STEP
	int "FOC character control setpoint step [x1000]"
	default 0

endif

endmenu # FOC user input

menu "FOC controller parameters"

config EXAMPLES_FOC_FMODE
	int "FOC control mode"
	default 2
	range 1 3
	---help---
		1 - IDLE mode
		2 - voltage mode (default)
		3 - current mode

config EXAMPLES_FOC_MMODE
	int "Motor control mode"
	default 2
	range 1 5
	---help---
		1 - torque control
		2 - velocity control
		3 - position control
		4 - align only
		5 - ident only

config EXAMPLES_FOC_STOP_CURRENT
	int "FOC stop state Q voltage/current [x1000]"
	default 0
	---help---
		This current or voltage will be forced on the motor Q axis when
		the application is in active break state.

config EXAMPLES_FOC_OPENLOOP_Q
	int "FOC open-loop Vq/Iq setting [x1000]"
	default 200
	depends on EXAMPLES_FOC_HAVE_OPENLOOP

config EXAMPLES_FOC_FEEDFORWARD
	bool "FOC use feedforward compensation for current controller"
	select INDUSTRY_FOC_FEEDFORWARD
	default n
	---help---
		This option enables feed-forward compensation for PI current controller
		which can help achieve better performace of FOC. This option is not
		recomended for sensorless operations and for current controllers that
		already has high update frequency.

if EXAMPLES_FOC_CONTROL_PI

config EXAMPLES_FOC_IDQ_KP
	int "FOC PI controller Kp gain [x1000]"
	default 0
	---help---
		It is set to 0 by default and must be properly configured by the user!
		The value of Kp and Ki depends on the controlled motor parameters.
		For more instructions see README.md for this example.

config EXAMPLES_FOC_IDQ_KI
	int "FOC PI controller Ki gain [x1000]"
	default 0
	---help---
		It is set to 0 by default and must be properly configured by the user!
		The value of Kp and Ki depends on the controlled motor parameters.
		For more instructions see README.md for this example.

endif #EXAMPLES_FOC_CONTROL_PI

config EXAMPLES_FOC_RAMP_THR
	int "FOC velocity ramp threshold [x1]"
	default 0

config EXAMPLES_FOC_RAMP_ACC
	int "FOC velocity ramp acc [x1]"
	default 0

config EXAMPLES_FOC_RAMP_DEC
	int "FOC velocity ramp dec [x1]"
	default 0

config EXAMPLES_FOC_HAVE_ALIGN
	bool "FOC example motor alignment support"
	select INDUSTRY_FOC_ALIGN
	default n

if EXAMPLES_FOC_HAVE_ALIGN

config EXAMPLES_FOC_ALIGN_VOLT
	int "FOC example motor alignment voltage (x1000)"
	default 0

config EXAMPLES_FOC_ALIGN_SEC
	int "FOC example motor alignment time (x1000)"
	default 0

endif # EXAMPLES_FOC_HAVE_ALIGN

config EXAMPLES_FOC_HAVE_IDENT
	bool "FOC example motor identification support"
	select INDUSTRY_FOC_IDENT
	default n

if EXAMPLES_FOC_HAVE_IDENT

config EXAMPLES_FOC_IDENT_RES_CURRENT
	int "FOC motor ident resistance current (x1000)"
	default 0

config EXAMPLES_FOC_IDENT_RES_KI
	int "FOC motor ident resistance Ki (x1000)"
	default 50

config EXAMPLES_FOC_IDENT_IND_VOLTAGE
	int "FOC motor ident inductance voltage (x1000)"
	default 0

config EXAMPLES_FOC_IDENT_RES_SEC
	int "FOC motor ident resistance time in sec (x1000)"
	default 0

config EXAMPLES_FOC_IDENT_IND_SEC
	int "FOC motor ident inductance time in sec (x1000)"
	default 0

config EXAMPLES_FOC_IDENT_IDLE
	int "FOC motor ident idle steps"
	default 100

endif # EXAMPLES_FOC_HAVE_IDENT

endmenu # FOC controller parameters

config EXAMPLES_FOC_HAVE_RUN
	bool
	default !EXAMPLES_FOC_RUN_DISABLE

config EXAMPLES_FOC_NXSCOPE
	bool "FOC nxscope support"
	depends on LOGGING_NXSCOPE
	select LOGGING_NXSCOPE_DISABLE_PUTLOCK
	default n
	---help---
		This option enables a controller real-time data capture with
		the NxScope library.

if EXAMPLES_FOC_NXSCOPE

config EXAMPLES_FOC_NXSCOPE_SERIAL
	bool "FOC nxscope on serial port"
	select LOGGING_NXSCOPE_INTF_SERIAL
	default y

if EXAMPLES_FOC_NXSCOPE_SERIAL

config EXAMPLES_FOC_NXSCOPE_SERIAL_PATH
	string "FOC nxscope serial path"
	default "/dev/ttyS0"

config EXAMPLES_FOC_NXSCOPE_SERIAL_BAUD
	int "FOC nxscope serial baud"
	default 115200

endif # EXAMPLES_FOC_NXSCOPE_SERIAL

config EXAMPLES_FOC_NXSCOPE_STREAMBUF_LEN
	int "FOC nxscope stream buffer length"
	default 512

config EXAMPLES_FOC_NXSCOPE_RXBUF_LEN
	int "FOC nxscope RX buffer length"
	default 64

config EXAMPLES_FOC_NXSCOPE_RXPADDING
	int "FOC nxscope RX padding"
	default 0

config EXAMPLES_FOC_NXSCOPE_CHANNELS
	int "FOC nxscope channels"
	default 0

config EXAMPLES_FOC_NXSCOPE_PRESCALER
	int "FOC nxscope prescaler"
	default 1
	---help---
		This option allows you to reduce the frequency of adding samples to
		the NxScope buffer.

config EXAMPLES_FOC_NXSCOPE_CFG
	hex "FOC nxscope configuration"
	default 0x00000000
	---help---
		Each bit defines the controller state variable that can be captured.
		Look at foc_nxscope.h for bits definitions.

config EXAMPLES_FOC_NXSCOPE_START
	bool "FOC nxscope start frame sync"
	default n
	---help---
		If this option is set, the controller will be waiting for the start
		frame from a NxScope master device. This allows us to capture
		controller data from the very beginning of its operation.

choice
	prompt "FOC nxscope work caller"
	default EXAMPLES_FOC_NXSCOPE_MAIN

config EXAMPLES_FOC_NXSCOPE_MAIN
	bool "FOC nxscope uses foc_main()"
	---help---
		Use foc_main() for NxScope communication.

config EXAMPLES_FOC_NXSCOPE_CONTROL
	bool "FOC nxscope uses control thread"
	---help---
		Use control thread for NxScope communication.
		With this option enabled you should limit the number of nxscope channels.
		Otherwise, handling incoming nxscope data may significantly delay the control
		loop, and consequently, the control cycle may be missed.

config EXAMPLES_FOC_NXSCOPE_THREAD
	bool "FOC nxscope uses separate thread"
	---help---
		Use a separate thread for NxScope communication.

endchoice # FOC nxscope work caller

if EXAMPLES_FOC_NXSCOPE_CONTROL

config EXAMPLES_FOC_NXSCOPE_WORK_PRESCALER
	int "FOC nxscope work prescaler"
	default 10
	---help---
		This option allows you to reduce the frequency of calling nxscope worker.

endif #EXAMPLES_FOC_NXSCOPE_CONTROL

if EXAMPLES_FOC_NXSCOPE_THREAD

config EXAMPLES_FOC_NXSCOPE_PRIO
	int "FOC nxscope thread priority"
	default 100

config EXAMPLES_FOC_NXSCOPE_STACKSIZE
	int "FOC nxscope thread stack size"
	default 2048

endif # EXAMPLES_FOC_NXSCOPE_THREAD

endif # EXAMPLES_FOC_NXSCOPE

endif # EXAMPLES_FOC

