aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2020-08-15 08:44:02 -0400
committerClyne Sullivan <clyne@bitgloo.com>2020-08-15 08:44:02 -0400
commitd060dce4ec03dad8bcde265ff5b5eb68cd009ea2 (patch)
tree8370b81f6f9afc561840d83b3cd9b8e9accea275
parent7f59ca704b6f3c0ad254d391a123961aa0a86284 (diff)
move drivers into namespaces
-rw-r--r--source/adc.cpp101
-rw-r--r--source/adc.hpp31
-rw-r--r--source/dac.cpp39
-rw-r--r--source/dac.hpp9
-rw-r--r--source/main.cpp26
-rw-r--r--source/usbserial.cpp61
-rw-r--r--source/usbserial.hpp12
7 files changed, 149 insertions, 130 deletions
diff --git a/source/adc.cpp b/source/adc.cpp
index 851b461..609ffce 100644
--- a/source/adc.cpp
+++ b/source/adc.cpp
@@ -18,7 +18,7 @@ constexpr static const ADCConfig adc_config = {
.difsel = 0
};
-void adc_read_callback(ADCDriver *);
+static void adc_read_callback(ADCDriver *);
/*constexpr*/ static ADCConversionGroup adc_group_config = {
.circular = false,
@@ -46,61 +46,64 @@ constexpr static const GPTConfig gpt_config = {
static bool adc_is_read_finished = false;
-void adc_init()
-{
- palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
-
- gptStart(gptd, &gpt_config);
- adcStart(adcd, &adc_config);
- adcSTM32EnableVREF(adcd);
-}
-
-adcsample_t *adc_read(adcsample_t *buffer, size_t count)
-{
- adc_is_read_finished = false;
- adcStartConversion(adcd, &adc_group_config, buffer, count);
- gptStartContinuous(gptd, 100); // 10kHz
- while (!adc_is_read_finished);
- return buffer;
-}
-
void adc_read_callback([[maybe_unused]] ADCDriver *driver)
{
gptStopTimer(gptd);
adc_is_read_finished = true;
}
-void adc_set_rate(ADCRate rate)
+namespace adc
{
- uint32_t val = 0;
-
- switch (rate) {
- case ADCRate::R2P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_2P5);
- break;
- case ADCRate::R6P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_6P5);
- break;
- case ADCRate::R12P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_12P5);
- break;
- case ADCRate::R24P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_24P5);
- break;
- case ADCRate::R47P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_47P5);
- break;
- case ADCRate::R92P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_92P5);
- break;
- case ADCRate::R247P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5);
- break;
- case ADCRate::R640P5:
- val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_640P5);
- break;
+ void init()
+ {
+ palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
+
+ gptStart(gptd, &gpt_config);
+ adcStart(adcd, &adc_config);
+ adcSTM32EnableVREF(adcd);
+ }
+
+ adcsample_t *read(adcsample_t *buffer, size_t count)
+ {
+ adc_is_read_finished = false;
+ adcStartConversion(adcd, &adc_group_config, buffer, count);
+ gptStartContinuous(gptd, 100); // 10kHz
+ while (!adc_is_read_finished);
+ return buffer;
+ }
+
+ void set_rate(rate r)
+ {
+ uint32_t val = 0;
+
+ switch (r) {
+ case rate::R2P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_2P5);
+ break;
+ case rate::R6P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_6P5);
+ break;
+ case rate::R12P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_12P5);
+ break;
+ case rate::R24P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_24P5);
+ break;
+ case rate::R47P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_47P5);
+ break;
+ case rate::R92P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_92P5);
+ break;
+ case rate::R247P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5);
+ break;
+ case rate::R640P5:
+ val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_640P5);
+ break;
+ }
+
+ adc_group_config.smpr[0] = val;
}
-
- adc_group_config.smpr[0] = val;
}
diff --git a/source/adc.hpp b/source/adc.hpp
index 4c3836e..e026d0c 100644
--- a/source/adc.hpp
+++ b/source/adc.hpp
@@ -14,20 +14,23 @@
#include "hal.h"
-enum class ADCRate {
- R2P5,
- R6P5,
- R12P5,
- R24P5,
- R47P5,
- R92P5,
- R247P5,
- R640P5
-};
-
-void adc_init();
-adcsample_t *adc_read(adcsample_t *buffer, size_t count);
-void adc_set_rate(ADCRate rate);
+namespace adc
+{
+ enum class rate {
+ R2P5,
+ R6P5,
+ R12P5,
+ R24P5,
+ R47P5,
+ R92P5,
+ R247P5,
+ R640P5
+ };
+
+ void init();
+ adcsample_t *read(adcsample_t *buffer, size_t count);
+ void set_rate(rate r);
+}
#endif // STMDSP_ADC_HPP_
diff --git a/source/dac.cpp b/source/dac.cpp
index d2bcf37..6096d8e 100644
--- a/source/dac.cpp
+++ b/source/dac.cpp
@@ -34,24 +34,27 @@ constexpr static const GPTConfig gpt_config = {
.dier = 0
};
-void dac_init()
+namespace dac
{
- palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
- //palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
-
- dacStart(dacd, &dac_config);
- gptStart(gptd, &gpt_config);
-}
-
-void dac_write_start(dacsample_t *buffer, size_t count)
-{
- dacStartConversion(dacd, &dac_group_config, buffer, count);
- gptStartContinuous(gptd, 1);
-}
-
-void dac_write_stop()
-{
- gptStopTimer(gptd);
- dacStopConversion(dacd);
+ void init()
+ {
+ palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
+ //palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
+
+ dacStart(dacd, &dac_config);
+ gptStart(gptd, &gpt_config);
+ }
+
+ void write_start(dacsample_t *buffer, size_t count)
+ {
+ dacStartConversion(dacd, &dac_group_config, buffer, count);
+ gptStartContinuous(gptd, 1);
+ }
+
+ void write_stop()
+ {
+ gptStopTimer(gptd);
+ dacStopConversion(dacd);
+ }
}
diff --git a/source/dac.hpp b/source/dac.hpp
index ce67f40..9d529bf 100644
--- a/source/dac.hpp
+++ b/source/dac.hpp
@@ -14,9 +14,12 @@
#include "hal.h"
-void dac_init();
-void dac_write_start(dacsample_t *buffer, size_t count);
-void dac_write_stop();
+namespace dac
+{
+ void init();
+ void write_start(dacsample_t *buffer, size_t count);
+ void write_stop();
+}
#endif // STMDSP_DAC_HPP_
diff --git a/source/main.cpp b/source/main.cpp
index cfd20a9..b5ebf86 100644
--- a/source/main.cpp
+++ b/source/main.cpp
@@ -33,39 +33,39 @@ int main()
palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); // LED
- adc_init();
- dac_init();
- usbserial_init();
+ adc::init();
+ dac::init();
+ usbserial::init();
static unsigned int dac_sample_count = 2048;
while (true) {
- if (usbserial_is_active()) {
+ if (usbserial::is_active()) {
// Expect to receive a byte command 'packet'.
- if (char cmd[3]; usbserial_read(&cmd, 1) > 0) {
+ if (char cmd[3]; usbserial::read(&cmd, 1) > 0) {
switch (cmd[0]) {
case 'r': // Read in analog signal
- if (usbserial_read(&cmd[1], 2) < 2)
+ if (usbserial::read(&cmd[1], 2) < 2)
break;
if (auto count = std::min(static_cast<unsigned int>(cmd[1] | (cmd[2] << 8)), adc_samples.size()); count > 0) {
- adc_read(&adc_samples[0], count);
- usbserial_write(adc_samples.data(), count * sizeof(adcsample_t));
+ adc::read(&adc_samples[0], count);
+ usbserial::write(adc_samples.data(), count * sizeof(adcsample_t));
}
break;
case 'W':
- if (usbserial_read(&cmd[1], 2) < 2)
+ if (usbserial::read(&cmd[1], 2) < 2)
break;
if (auto count = std::min(static_cast<unsigned int>(cmd[1] | (cmd[2] << 8)), dac_samples.size()); count > 0)
dac_sample_count = count;
else
- dac_write_stop();
+ dac::write_stop();
break;
case 'w':
- if (usbserial_read(&dac_samples[0], 2 * dac_sample_count) != 2 * dac_sample_count)
+ if (usbserial::read(&dac_samples[0], 2 * dac_sample_count) != 2 * dac_sample_count)
break;
- dac_write_start(&dac_samples[0], dac_sample_count);
+ dac::write_start(&dac_samples[0], dac_sample_count);
break;
case 'i': // Identify ourself as an stmdsp device
- usbserial_write("stmdsp", 6);
+ usbserial::write("stmdsp", 6);
break;
default:
break;
diff --git a/source/usbserial.cpp b/source/usbserial.cpp
index 5d605e6..ec2fc5d 100644
--- a/source/usbserial.cpp
+++ b/source/usbserial.cpp
@@ -15,35 +15,38 @@
constexpr static const auto sdud = &SDU1;
-void usbserial_init()
+namespace usbserial
{
- palSetPadMode(GPIOA, 11, PAL_MODE_ALTERNATE(10));
- palSetPadMode(GPIOA, 12, PAL_MODE_ALTERNATE(10));
-
- sduObjectInit(sdud);
- sduStart(sdud, &serusbcfg);
-
- // Reconnect bus so device can re-enumerate on reset
- usbDisconnectBus(serusbcfg.usbp);
- chThdSleepMilliseconds(1500);
- usbStart(serusbcfg.usbp, &usbcfg);
- usbConnectBus(serusbcfg.usbp);
-}
-
-bool usbserial_is_active()
-{
- return sdud->config->usbp->state == USB_ACTIVE;
-}
-
-size_t usbserial_read(void *buffer, size_t count)
-{
- auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
- return streamRead(bss, static_cast<uint8_t *>(buffer), count);
-}
-
-size_t usbserial_write(const void *buffer, size_t count)
-{
- auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
- return streamWrite(bss, static_cast<const uint8_t *>(buffer), count);
+ void init()
+ {
+ palSetPadMode(GPIOA, 11, PAL_MODE_ALTERNATE(10));
+ palSetPadMode(GPIOA, 12, PAL_MODE_ALTERNATE(10));
+
+ sduObjectInit(sdud);
+ sduStart(sdud, &serusbcfg);
+
+ // Reconnect bus so device can re-enumerate on reset
+ usbDisconnectBus(serusbcfg.usbp);
+ chThdSleepMilliseconds(1500);
+ usbStart(serusbcfg.usbp, &usbcfg);
+ usbConnectBus(serusbcfg.usbp);
+ }
+
+ bool is_active()
+ {
+ return sdud->config->usbp->state == USB_ACTIVE;
+ }
+
+ size_t read(void *buffer, size_t count)
+ {
+ auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
+ return streamRead(bss, static_cast<uint8_t *>(buffer), count);
+ }
+
+ size_t write(const void *buffer, size_t count)
+ {
+ auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
+ return streamWrite(bss, static_cast<const uint8_t *>(buffer), count);
+ }
}
diff --git a/source/usbserial.hpp b/source/usbserial.hpp
index 4b0eab2..4c33d51 100644
--- a/source/usbserial.hpp
+++ b/source/usbserial.hpp
@@ -14,10 +14,14 @@
#include "hal.h"
-void usbserial_init();
-bool usbserial_is_active();
-size_t usbserial_read(void *buffer, size_t count);
-size_t usbserial_write(const void *buffer, size_t count);
+namespace usbserial
+{
+ void init();
+ bool is_active();
+
+ size_t read(void *buffer, size_t count);
+ size_t write(const void *buffer, size_t count);
+}
#endif // STMDSP_USBSERIAL_HPP_