From 4134a69a7adfabb05ebc04dc7a6015f7bf460bea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Foucher?= <cfoucher@laas.fr>
Date: Wed, 30 Mar 2022 10:08:38 +0200
Subject: [PATCH] Add ADC discontinuous mode interface to HwConfig.

---
 .../zephyr/public_api/HardwareConfiguration.cpp  |  5 +++++
 .../zephyr/public_api/HardwareConfiguration.h    |  1 +
 .../zephyr/src/adc_configuration.cpp             | 16 ++++++++++++++++
 .../zephyr/src/adc_configuration.h               | 10 ++++++++++
 4 files changed, 32 insertions(+)

diff --git a/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.cpp b/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.cpp
index 50af50b..af95ccd 100644
--- a/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.cpp
+++ b/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.cpp
@@ -247,6 +247,11 @@ void HardwareConfiguration::configureAdcTriggerSource(uint8_t adc_number, adc_ev
 	configure_adc_trigger_source(adc_number, trigger_source);
 }
 
+void HardwareConfiguration::configureAdcDiscontinuousMode(uint8_t adc_number, uint32_t dicontinuous_count)
+{
+	configure_adc_discontinuous_mode(adc_number, dicontinuous_count);
+}
+
 void HardwareConfiguration::configureAdcDefaultAllMeasurements()
 {
 	configure_adc_default_all_measurements();
diff --git a/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.h b/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.h
index cc9b863..7f26503 100644
--- a/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.h
+++ b/zephyr/modules/owntech_hardware_configuration/zephyr/public_api/HardwareConfiguration.h
@@ -106,6 +106,7 @@ public:
 	static void configureAdc12DualMode(uint8_t dual_mode);
 	static int8_t configureAdcChannels(uint8_t adc_number, const char* channel_list[], uint8_t channel_count);
 	static void configureAdcTriggerSource(uint8_t adc_number, adc_ev_src_t trigger_source);
+	static void configureAdcDiscontinuousMode(uint8_t adc_number, uint32_t dicontinuous_count);
 	static void configureAdcDefaultAllMeasurements();
 
 };
diff --git a/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.cpp b/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.cpp
index ee08ac3..af7042b 100644
--- a/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.cpp
+++ b/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.cpp
@@ -108,6 +108,22 @@ void configure_adc_trigger_source(uint8_t adc_number, adc_ev_src_t trigger_sourc
 	adc_configure_trigger_source(adc_number, trigger_source);
 }
 
+void configure_adc_discontinuous_mode(uint8_t adc_number, uint32_t dicontinuous_count)
+{
+	/////
+	// Make sure module is initialized
+
+	if (initialized == 0)
+	{
+		_initialize();
+	}
+
+	/////
+	// Proceed
+
+	adc_configure_discontinuous_mode(adc_number, dicontinuous_count);
+}
+
 void configure_adc_default_all_measurements()
 {
 	uint8_t number_of_channels_adc1 = 3;
diff --git a/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.h b/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.h
index cc67dc4..c22c5a2 100644
--- a/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.h
+++ b/zephyr/modules/owntech_hardware_configuration/zephyr/src/adc_configuration.h
@@ -82,6 +82,16 @@ int8_t configure_adc_channels(uint8_t adc_number, const char* channel_list[], ui
  */
 void configure_adc_trigger_source(uint8_t adc_number, adc_ev_src_t trigger_source);
 
+/**
+ * Registers the discontinuous count for an ADC.
+ * It will be applied when ADC is started.
+ *
+ * @param adc_number Number of the ADC to configure.
+ * @param dicontinuous_count Number of channels to acquire on each
+ *        trigger event. 0 to disable discontinuous mode (default).
+ */
+void configure_adc_discontinuous_mode(uint8_t adc_number, uint32_t dicontinuous_count);
+
 /**
  * This function is used to configure all ADC channels in default configuration.
  * Channels will be attributed as follows:
-- 
GitLab