Skip to content

File daisy_field.h

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

Go to the documentation of this file

Source Code

#pragma once
#ifndef DSY_FIELD_BSP_H
#define DSY_FIELD_BSP_H 
#include "daisy_seed.h"
#include "dev/oled_ssd130x.h"

namespace daisy
{
class DaisyField
{
  public:
    enum
    {
        SW_1,    
        SW_2,    
        SW_LAST, 
    };

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

    enum
    {
        CV_1,    
        CV_2,    
        CV_3,    
        CV_4,    
        CV_LAST, 
    };

    enum
    {
        LED_KEY_B1, 
        LED_KEY_B2, 
        LED_KEY_B3, 
        LED_KEY_B4, 
        LED_KEY_B5, 
        LED_KEY_B6, 
        LED_KEY_B7, 
        LED_KEY_B8, 
        LED_KEY_A8, 
        LED_KEY_A7, 
        LED_KEY_A6, 
        LED_KEY_A5, 
        LED_KEY_A4, 
        LED_KEY_A3, 
        LED_KEY_A2, 
        LED_KEY_A1, 
        LED_KNOB_1, 
        LED_KNOB_2, 
        LED_KNOB_3, 
        LED_KNOB_4, 
        LED_KNOB_5, 
        LED_KNOB_6, 
        LED_KNOB_7, 
        LED_KNOB_8, 
        LED_SW_1,   
        LED_SW_2,   
        LED_LAST    
    };

    DaisyField() {}
    ~DaisyField() {}

    void Init(bool boost = false);

    void DelayMs(size_t del);

    void StartAudio(AudioHandle::InterleavingAudioCallback cb);

    void StartAudio(AudioHandle::AudioCallback cb);

    void StopAudio();

    void ChangeAudioCallback(AudioHandle::InterleavingAudioCallback cb);

    void ChangeAudioCallback(AudioHandle::AudioCallback cb);

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

    float AudioSampleRate();

    void SetAudioBlockSize(size_t blocksize);

    size_t AudioBlockSize();

    float AudioCallbackRate();

    void StartAdc();

    void StopAdc();

    void StartDac();

    void ProcessAnalogControls();

    void ProcessDigitalControls();

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

    void SetCvOut1(uint16_t val);

    void SetCvOut2(uint16_t val);

    bool KeyboardState(size_t idx) const;

    bool KeyboardRisingEdge(size_t idx) const;

    bool KeyboardFallingEdge(size_t idx) const;

    float GetKnobValue(size_t idx) const;

    float GetCvValue(size_t idx) const;

    Switch* GetSwitch(size_t idx);

    AnalogControl* GetKnob(size_t idx);

    AnalogControl* GetCv(size_t idx);

    void VegasMode();

    DaisySeed                                seed;
    OledDisplay<SSD130x4WireSpi128x64Driver> display;
    GPIO                                     gate_out;
    GateIn                                   gate_in;
    LedDriverPca9685<2, true>                led_driver;
    Switch                                   sw[SW_LAST];
    AnalogControl                            knob[KNOB_LAST];
    AnalogControl                            cv[CV_LAST];
    MidiUartHandler                          midi;

  private:
    void SetHidUpdateRates();
    void InitMidi();

    ShiftRegister4021<2> keyboard_sr_; 
    uint8_t              keyboard_state_[16];
    uint32_t             last_led_update_; // for vegas mode
    bool                 gate_in_trig_;    // True when triggered.
};

} // namespace daisy

#endif