Esempio n. 1
0
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();
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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) {
Esempio n. 4
0
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;
            }
      }