void txinit(){ key_off(); pll_off(); output_low(CWSTB); output_low(CWCLK); output_low(CWDAT); restart_wdt(); delay_ms(500); delay_ms(500); restart_wdt(); pll_on(); delay_ms(500); delay_ms(500); txhotflag=TX_IS_COOL; restart_wdt(); pll_init_cw( 0x0EF, // refernce driver (Nref = 239) 0x015, // swallow counter (Nprg = 2613) 0x051, // programmable_counter (Nprg = 2613) 1, // channel (Group code "01") 3, // charge_pump_tx (CPT1 = 1, CPT2 = 1) 0, // charge_pump_rx (CPR1 = 0, CPR2 = 0) 1, // lock_detector (LD1 = 1, LD2 = 0) 0, // standby_control_tx (Tx = 0) 1 // standby_control_rx (Rx = 1) ); delay_ms(500); restart_wdt(); }
void watch_txtemp(){ uint8_t thermo1=getCriticalDatas(TXTEMP1); uint8_t thermo2=getCriticalDatas(TXTEMP2); uint8_t thermo3=getCriticalDatas(TXTEMP3); uint8_t tempthermo=(thermo1&thermo2)|(thermo2&thermo3)|(thermo3&thermo1); if(txhotflag==TX_IS_HOT){ key_off(); pll_off(); if(tempthermo>TX_RESTART_LIMIT){ txinit(); } }else if(tempthermo<TX_THERMO_LIMIT){ txhotflag=TX_IS_HOT; key_off(); pll_off(); } return; }
void Aeolus::play(const Event& event) { int ch = event.channel(); int type = event.type(); int m = _midimap [ch] & 127; // Keyboard and hold bits // printf("Aeolus::play %d %d %d\n", ch, type, m); // int f = (_midimap [ch] >> 12) & 7; // Control enabled if (f & 4) if (type == ME_NOTEON) { int n = event.dataA(); int v = event.dataB(); if (v == 0) { // note off if (n < 36) ; else if (n <= 96) key_off(n - 36, m); } else { // note on if (n < 36) ; else if (n <= 96) key_on(n - 36, m); } } else if (type == ME_CONTROLLER) { int p = event.dataA(); int v = event.dataB(); switch(p) { case MIDICTL_HOLD: case MIDICTL_ASOFF: case MIDICTL_ANOFF: break; case MIDICTL_BANK: break; case MIDICTL_IFELM: // if (!(f & 4)) enable control for all channels // break; if (v & 64) { // Set mode or clear group. _sc_cmode = (v >> 4) & 3; _sc_group = v & 7; if (_sc_cmode == 0) { model->clr_group(_sc_group); } } else if (_sc_cmode) {
void Aeolus::proc_queue (uint32_t k) { int c = k >> 24; int j = (k >> 16) & 255; int i = (k >> 8) & 255; int b = k & 255; switch (c) { case 0: // Single key off. key_off (i, b); break; case 1: // Single key on. key_on (i, b); break; case 2: // Conditional key off. cond_key_off (j, b); break; case 3: // Conditional key on. cond_key_on (j, b); break; case 4: // Clear bits in division mask. _divisp [j]->clr_div_mask (b); break; case 5: // Set bits in division mask. _divisp [j]->set_div_mask (b); break; case 6: // Clear bits in rank mask. _divisp [j]->clr_rank_mask (i, b); break; case 7: // Set bits in rank mask. _divisp [j]->set_rank_mask (i, b); break; case 8: // Hold off. _hold = KEYS_MASK; cond_key_off (HOLD_MASK, HOLD_MASK); break; case 9: // Hold on. _hold = KEYS_MASK | HOLD_MASK; cond_key_on (j, HOLD_MASK); break; case 16: // Tremulant on/off. if (b) _divisp [j]->trem_on (); else _divisp [j]->trem_off (); break; case 17: // Per-division performance controllers. #if 0 if (n < 2) return; //TODO u.i = Q->read (1); //TODO Q->read_commit (2); switch (i) { case 0: _divisp [j]->set_swell (u.f); break; case 1: _divisp [j]->set_tfreq (u.f); break; case 2: _divisp [j]->set_tmodd (u.f); break; break; } #endif break; } }