Skip to content

File daisy_petal.h

File List > external-docs > libDaisy > src > daisy_petal.h

Go to the documentation of this file

Source Code

#pragma once
#ifndef DSY_PETAL_H
#define DSY_PETAL_H 
#include "daisy_seed.h"

namespace daisy
{
class DaisyPetal
{
  public:
    enum Sw
    {
        SW_1,    
        SW_2,    
        SW_3,    
        SW_4,    
        SW_5,    
        SW_6,    
        SW_7,    
        SW_LAST, 
    };

    enum Knob
    {
        KNOB_1,    
        KNOB_2,    
        KNOB_3,    
        KNOB_4,    
        KNOB_5,    
        KNOB_6,    
        KNOB_LAST, 
    };

    enum RingLed
    {
        RING_LED_1,   
        RING_LED_2,   
        RING_LED_3,   
        RING_LED_4,   
        RING_LED_5,   
        RING_LED_6,   
        RING_LED_7,   
        RING_LED_8,   
        RING_LED_LAST 
    };

    enum FootswitchLed
    {
        FOOTSWITCH_LED_1,    
        FOOTSWITCH_LED_2,    
        FOOTSWITCH_LED_3,    
        FOOTSWITCH_LED_4,    
        FOOTSWITCH_LED_LAST, 
    };

    DaisyPetal() {}
    ~DaisyPetal() {}

    void Init(bool boost = false);

    void DelayMs(size_t del);


    void StartAudio(AudioHandle::InterleavingAudioCallback cb);

    void StartAudio(AudioHandle::AudioCallback cb);

    void ChangeAudioCallback(AudioHandle::InterleavingAudioCallback cb);

    void ChangeAudioCallback(AudioHandle::AudioCallback cb);

    void StopAudio();

    void SetAudioSampleRate(SaiHandle::Config::SampleRate samplerate);

    float AudioSampleRate();

    void SetAudioBlockSize(size_t size);

    size_t AudioBlockSize();

    float AudioCallbackRate();

    void StartAdc();

    void StopAdc();

    void ProcessAnalogControls();

    inline void ProcessAllControls()
    {
        ProcessAnalogControls();
        ProcessDigitalControls();
    }


    float GetKnobValue(Knob k);

    float GetExpression();

    void ProcessDigitalControls();

    void ClearLeds();

    void UpdateLeds();

    void SetRingLed(RingLed idx, float r, float g, float b);

    void SetFootswitchLed(FootswitchLed idx, float bright);

    DaisySeed seed;    
    Encoder   encoder; 
    AnalogControl knob[KNOB_LAST]; 
    AnalogControl expression;      
    Switch        switches[SW_LAST] ;

    RgbLed ring_led[8];       
    Led    footswitch_led[4]; 
  private:
    void SetHidUpdateRates();
    void InitSwitches();
    void InitEncoder();
    void InitLeds();
    void InitAnalogControls();

    inline uint16_t* adc_ptr(const uint8_t chn) { return seed.adc.GetPtr(chn); }

    LedDriverPca9685<2, true> led_driver_;
};

} // namespace daisy

#endif