Changeset 1718
- Timestamp:
- 11/18/09 12:53:43 (14 years ago)
- Files:
-
- trunk/libffado/src/dice/focusrite/saffire_pro24.cpp (modified) (1 diff)
- trunk/libffado/src/dice/focusrite/saffire_pro24.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/dice/focusrite/saffire_pro24.cpp
r1712 r1718 28 28 namespace Focusrite { 29 29 30 const int msgSet = 0x68; 31 30 32 SaffirePro24::SaffirePro24( DeviceManager& d, 31 33 std::auto_ptr<ConfigRom>( configRom )) 32 : Dice::Device( d , configRom) 34 : Dice::Device(d , configRom) 35 , m_ch1(NULL) 36 , m_ch2(NULL) 33 37 { 34 debugOutput( 35 getConfigRom().getNodeId());38 debugOutput(DEBUG_LEVEL_VERBOSE, "Created Dice::Focusrite::SaffirePro24 (NodeID %d)\n", 39 getConfigRom().getNodeId()); 36 40 } 37 41 38 42 SaffirePro24::~SaffirePro24() 39 43 { 44 m_eap->deleteElement(m_ch1); 45 m_eap->deleteElement(m_ch2); 46 if (m_ch1) delete m_ch1; 47 if (m_ch2) delete m_ch2; 40 48 } 49 bool SaffirePro24::discover() { 50 if (Dice::Device::discover()) { 51 fb_quadlet_t* tmp = (fb_quadlet_t *)calloc(2, sizeof(fb_quadlet_t)); 52 m_eap->readRegBlock(Dice::Device::EAP::eRT_Application, 0x58, tmp, 2*sizeof(fb_quadlet_t)); 53 hexDumpQuadlets(tmp, 2); 41 54 42 void 43 SaffirePro24::showDevice() 55 m_ch1 = new LineInstSwitch(getEAP(), "LineInstCh1", 0x58, 2); 56 getEAP()->addElement(m_ch1); 57 m_ch2 = new LineInstSwitch(getEAP(), "LineInstCh2", 0x58, 2<<16); 58 getEAP()->addElement(m_ch2); 59 m_ch3 = new LevelSwitch(getEAP(), "LevelCh3", 0x5C, 1); 60 getEAP()->addElement(m_ch3); 61 m_ch4 = new LevelSwitch(getEAP(), "LevelCh4", 0x5C, 1<<16); 62 getEAP()->addElement(m_ch4); 63 return true; 64 } 65 return false; 66 } 67 void SaffirePro24::showDevice() 44 68 { 45 69 debugOutput(DEBUG_LEVEL_VERBOSE, "This is a Dice::Focusrite::SaffirePro24\n"); 46 70 Dice::Device::showDevice(); 47 71 } 72 bool SaffirePro24::setNickName( std::string name ) { 73 return m_eap->writeRegBlock( Dice::Device::EAP::eRT_Application, 0x40, (fb_quadlet_t*)name.c_str(), name.size() ); 74 } 75 std::string SaffirePro24::getNickName() { 76 char name[16]; 77 m_eap->readRegBlock( Dice::Device::EAP::eRT_Application, 0x40, (fb_quadlet_t*)name, 16 ); 78 return std::string( name ); 79 } 80 81 82 SaffirePro24::LineInstSwitch::LineInstSwitch(Dice::Device::EAP* eap, std::string name, size_t offset, int activevalue ) 83 : Control::Enum(eap, name) 84 , m_eap(eap) 85 , m_selected(0) 86 , m_offset(offset) 87 , m_activevalue(activevalue) 88 { 89 m_eap->readReg(Dice::Device::EAP::eRT_Application, m_offset, &m_state_tmp); 90 printf("%s: Active?%i\n", name.c_str(), m_state_tmp&m_activevalue); 91 m_selected = (m_state_tmp&m_activevalue)?1:0; 92 } 93 int SaffirePro24::LineInstSwitch::selected() { 94 return m_selected; 95 } 96 bool SaffirePro24::LineInstSwitch::select(int n) { 97 if ( n != m_selected ) { 98 m_selected = n; 99 m_eap->readReg(Dice::Device::EAP::eRT_Application, m_offset, &m_state_tmp); 100 m_eap->writeReg(Dice::Device::EAP::eRT_Application, m_offset, m_state_tmp^m_activevalue); 101 m_eap->writeReg(Dice::Device::EAP::eRT_Application, msgSet, 4); 102 } 103 return true; 104 } 105 std::string SaffirePro24::LineInstSwitch::getEnumLabel(int n) { 106 if ( n == 1 ) { 107 return "Instrument"; 108 } 109 return "Line"; 110 } 111 112 SaffirePro24::LevelSwitch::LevelSwitch(Dice::Device::EAP* eap, std::string name, size_t offset, int activevalue) 113 : LineInstSwitch(eap, name, offset, activevalue) 114 { 115 } 116 std::string SaffirePro24::LevelSwitch::getEnumLabel(int n) { 117 switch (n) { 118 case 0: 119 return "Low"; 120 case 1: 121 return "High"; 122 default: 123 return ""; 124 } 125 } 126 48 127 49 128 } 50 129 } 130 131 // vim: et trunk/libffado/src/dice/focusrite/saffire_pro24.h
r1712 r1718 37 37 SaffirePro24( DeviceManager& d, 38 38 std::auto_ptr<ConfigRom>( configRom )); 39 virtual~SaffirePro24();39 ~SaffirePro24(); 40 40 41 virtual void showDevice();41 bool discover(); 42 42 43 void showDevice(); 44 45 bool canChangeNickname() { return true; } 46 bool setNickName( std::string name ); 47 std::string getNickName(); 48 49 class LineInstSwitch : public Control::Enum 50 { 51 protected: 52 friend class Dice::Focusrite::SaffirePro24; 53 54 LineInstSwitch(Dice::Device::EAP*, std::string name, size_t offset, int activevalue); 55 public: 56 int count() { return 2; } 57 58 int selected(); 59 bool select(int); 60 61 std::string getEnumLabel(int); 62 63 private: 64 Dice::Device::EAP* m_eap; 65 int m_selected; 66 size_t m_offset; 67 int m_activevalue; 68 fb_quadlet_t m_state_tmp; 69 }; 70 class LevelSwitch : public LineInstSwitch 71 { 72 protected: 73 friend class Dice::Focusrite::SaffirePro24; 74 75 LevelSwitch(Dice::Device::EAP*, std::string name, size_t offset, int activevalue); 76 public: 77 std::string getEnumLabel(int); 78 }; 43 79 private: 80 LineInstSwitch *m_ch1, *m_ch2; 81 LevelSwitch *m_ch3, *m_ch4; 44 82 }; 45 83 … … 48 86 49 87 #endif 88 // vim: et