]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
move drivers into namespaces
authorClyne Sullivan <clyne@bitgloo.com>
Sat, 15 Aug 2020 12:44:02 +0000 (08:44 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Sat, 15 Aug 2020 12:44:02 +0000 (08:44 -0400)
source/adc.cpp
source/adc.hpp
source/dac.cpp
source/dac.hpp
source/main.cpp
source/usbserial.cpp
source/usbserial.hpp

index 851b46139a38c687791a45159b2544801da7499e..609ffce7f222ab55573bc1f981ef43adcba68515 100644 (file)
@@ -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;
 }
 
index 4c3836ebeee60b330ff40761190d48e1088cba26..e026d0c42a17fb3df7a31f7073d7a5f78f4a6385 100644 (file)
 
 #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_
 
index d2bcf37235d790fcb4beaa4006ed9c59b4f4ec54..6096d8e0b57f3a10d593dcf02644abd3317ad81c 100644 (file)
@@ -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);
+    }
 }
 
index ce67f409e8101db2dc968a1745646978852ddb15..9d529bf57c4a1183f2ad31598075f971435f1c64 100644 (file)
 
 #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_
 
index cfd20a91aec311c7b42a3f6da5452e3067deb045..b5ebf862fb41f68e881bfd7ce7f13c17298ce84e 100644 (file)
@@ -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;
index 5d605e62657404eb47caca5cd381a837b706ef19..ec2fc5d575a9fa12c46de62b40d15885f4d3d9f1 100644 (file)
 
 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);
+    }
 }
 
index 4b0eab209fb880c73fd9d186ea1ff846cb8cb968..4c33d51072282dd0b214fc8cb08f8ecb09fbcc7f 100644 (file)
 
 #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_