Esempio n. 1
0
static void handler_MonomeConnect(s32 data) {
	// print_dbg("\r\n// monome connect /////////////////"); 
	key_count = 0;
	SIZE = monome_size_x();
	LENGTH = SIZE - 1;
	// print_dbg("\r monome size: ");
	// print_dbg_ulong(SIZE);
	VARI = monome_is_vari();
	// print_dbg("\r monome vari: ");
	// print_dbg_ulong(VARI);

	if(VARI) re = &refresh;
	else re = &refresh_mono;
	
	shape_key_count = 0;
	key_count = 0;

	timers_set_monome();

	monome_set_quadrant_flag(0);
	monome_set_quadrant_flag(1);


	// turn on ADC polling, reset hysteresis
	adc_convert(&adc);
	reset_hys();
	timer_add(&adcTimer,61,&adcTimer_callback, NULL);
}
Esempio n. 2
0
File: main.c Progetto: Ysum/mod
////////////////////////////////////////////////////////////////////////////////
// application grid redraw
static void refresh() {
	u8 i1, i2, i3;

	// clear grid
	for(i1=0;i1<128;i1++)
		monomeLedBuffer[i1] = 0;

	// SET POSITIONS
	if(mode == 0) {
		for(i1=0;i1<8;i1++) {
			for(i2=m.positions[i1];i2<=m.points[i1];i2++)
				monomeLedBuffer[i1*16 + i2] = L1;

			monomeLedBuffer[i1*16 + m.positions[i1]] = L2;
		}
	}
	// SET ROUTING
	else if(mode == 1) {
		monomeLedBuffer[edit_row * 16] = L1;
		monomeLedBuffer[edit_row * 16 + 1] = L1;

		for(i1=0;i1<8;i1++) {
			if((m.trig_dests[edit_row] & (1<<i1)) != 0) {
				for(i2=0;i2<=m.points[i1];i2++)
					monomeLedBuffer[i1*16 + i2] = L2;
			}
			monomeLedBuffer[i1*16 + m.positions[i1]] = L0;
		}
	}
	// SET RULES
	else if(mode == 2) {
		monomeLedBuffer[edit_row * 16] = L1;
		monomeLedBuffer[edit_row * 16 + 1] = L1;

		for(i1=2;i1<7;i1++)
			monomeLedBuffer[m.rule_dests[edit_row] * 16 + i1] = L2;

		for(i1=8;i1<16;i1++)
			monomeLedBuffer[m.rules[edit_row] * 16 + i1] = L0;

		for(i1=0;i1<8;i1++) 
			monomeLedBuffer[i1*16 + m.positions[i1]] = L0;

		for(i1=0;i1<8;i1++) {
			i3 = sign[m.rules[edit_row]][i1];
			for(i2=0;i2<8;i2++) {
				if((i3 & (1<<i2)) != 0)
					monomeLedBuffer[i1*16 + 8 + i2] = L2;
			}
		}

		monomeLedBuffer[m.rules[edit_row] * 16 + 7] = L2;
	}

	monome_set_quadrant_flag(0);
	monome_set_quadrant_flag(1);
}
Esempio n. 3
0
static void refresh_preset() {
	u8 i1,i2;

	for(i1=0;i1<128;i1++)
		monomeLedBuffer[i1] = 0;

	monomeLedBuffer[preset_select * 16] = 11;

	for(i1=0;i1<8;i1++)
		for(i2=0;i2<8;i2++)
			if(glyph[i1] & (1<<i2))
				monomeLedBuffer[i1*16+i2+8] = 11;

	monome_set_quadrant_flag(0);
	monome_set_quadrant_flag(1);
}
Esempio n. 4
0
//-------------------------------------------------
//----- extern function definition
void op_step_init(void* mem) {
  u8 i;
  //  print_dbg("\r\n op_step_init ");
  op_step_t* op = (op_step_t*)mem;

  // superclass functions
  //--- op
  op->super.in_fn = op_step_in_fn;
  op->super.pickle = (op_pickle_fn) (&op_step_pickle);
  op->super.unpickle = (op_unpickle_fn) (&op_step_unpickle);

  //--- monome
  op->monome.handler = (monome_handler_t)&op_step_handler;
  op->monome.op = op;

  // superclass state

  op->super.type = eOpStep;
  op->super.flags |= (1 << eOpFlagMonomeGrid);

  op->super.numInputs = 3;
  op->super.numOutputs = 8;

  op->super.in_val = op->in_val;
  op->super.out = op->outs;

  op->super.opString = op_step_opstring;
  op->super.inString = op_step_instring;
  op->super.outString = op_step_outstring;

  op->in_val[0] = &(op->focus);
  op->in_val[1] = &(op->size);  
  op->outs[0] = -1;
  op->outs[1] = -1;
  op->outs[2] = -1;
  op->outs[3] = -1;
  op->outs[4] = -1;
  op->outs[5] = -1;
  op->outs[6] = -1;
  op->outs[7] = -1;

  op->s_start = 0;
  op->s_end = 7;
  op->s_length = 7;
  op->s_now = 0;
  op->s_cut = 0;

  op->s_start2 = 0;
  op->s_end2 = 7;
  op->s_length2 = 7;
  op->s_now2 = 0;
  op->s_cut2 = 0;

  op->size = monome_size_x();

  op->focus = OP_ONE;
  net_monome_set_focus(&(op->monome), 1);

  // init monome drawing, maybe should clear first
  monomeLedBuffer[monome_xy_idx(0, 0)] = 15;
  monomeLedBuffer[monome_xy_idx(0, 2)] = 15;
  for(i=0;i<op->size;i++) {
    monomeLedBuffer[monome_xy_idx(i, 1)] = 15;
    monomeLedBuffer[monome_xy_idx(i, 3)] = 15;
  }
  monome_set_quadrant_flag(0);

}
Esempio n. 5
0
static void op_step_handler(op_monome_t* op_monome, u32 edata) {
  static u8 x, y, z;
  u8 i;

  op_step_t* op = (op_step_t*)(op_monome->op);


  monome_grid_key_parse_event_data(edata, &x, &y, &z);

  // only care about key-downs
  if(z) {
    // row 0 = postion cut, set start point
    if(y==0) {
      op->s_start = x;
      monomeLedBuffer[monome_xy_idx(op->s_now, 0)] = 0;
      op->s_now = x;
      monomeLedBuffer[monome_xy_idx(op->s_now, 0)] = 15;

      op->s_end = op->s_start + op->s_length;
      if(op->s_end > (op->size-1)) op->s_end -= op->size;

      if(op->s_end >= op->s_start)
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 1)] = (i >= op->s_start && i <= op->s_end) * 15;
        }
      else {
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 1)] = (i >= op->s_start || i <= op->s_end) * 15;
        }
      }

      monome_set_quadrant_flag(0);
      if(op->size>8) monome_set_quadrant_flag(1);


      op->s_cut = 1;

    // row 1 = change loop point
    } else if(y==1) {
      op->s_end = x;
      op->s_length = op->s_end - op->s_start;
      if(op->s_length < 0) op->s_length += op->size;

      if(op->s_end >= op->s_start)
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 1)] = (i >= op->s_start && i <= op->s_end) * 15;
        }
      else {
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 1)] = (i >= op->s_start || i <= op->s_end) * 15;
        }
      }

      monome_set_quadrant_flag(0);
      if(op->size>8) monome_set_quadrant_flag(1);

    // set loop start 2
    } else if(y==2) {
      op->s_start2 = x;
      monomeLedBuffer[monome_xy_idx(op->s_now2, 2)] = 0;
      op->s_now2 = x;
      monomeLedBuffer[monome_xy_idx(op->s_now2, 2)] = 15;

      op->s_end2 = op->s_start2 + op->s_length2;
      if(op->s_end2 > (op->size-1)) op->s_end2 -= op->size;

      if(op->s_end2 >= op->s_start2)
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 3)] = (i >= op->s_start2 && i <= op->s_end2) * 15;
        }
      else {
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 3)] = (i >= op->s_start2 || i <= op->s_end2) * 15;
        }
      }

      monome_set_quadrant_flag(0);
      if(op->size>8) monome_set_quadrant_flag(1);


      op->s_cut2 = 1;

    // row 3 = change loop point 2
    } else if(y==3) {
      op->s_end2 = x;
      op->s_length2 = op->s_end2 - op->s_start2;
      if(op->s_length2 < 0) op->s_length2 += op->size;

      if(op->s_end2 >= op->s_start2)
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 3)] = (i >= op->s_start2 && i <= op->s_end2) * 15;
        }
      else {
        for(i=0;i<op->size;i++) {
          monomeLedBuffer[monome_xy_idx(i, 3)] = (i >= op->s_start2 || i <= op->s_end2) * 15;
        }
      }

      monome_set_quadrant_flag(0);
      if(op->size>8) monome_set_quadrant_flag(1);


    // rows 4-7: set steps
    } else if(y>3 && y<8) {
      op->steps[y-4][x] ^= 15;
      monomeLedBuffer[monome_xy_idx(x, y)] = op->steps[y-4][x] * 15;
      monome_calc_quadrant_flag(x, y);
    }
  }
}
Esempio n. 6
0
static void op_step_in_step(op_step_t* op, const io_t v) {
  s8 i;

  if(op->s_cut == 0) {
    monomeLedBuffer[monome_xy_idx(op->s_now, 0)] = 0;

    if(v > 0) {
      for(i=0;i<v;i++) {
        if(op->s_now == op->s_end) op->s_now = op->s_start;
        else {
          op->s_now++;
          if(op->s_now == op->size) op->s_now = 0;
        }
      }
    } else {
      for(i=v;i<0;i++) {
        if(op->s_now == op->s_start) op->s_now = op->s_end;
        else if(op->s_now == 0) op->s_now = op->size - 1;
        else op->s_now--;
      }
    }

    monomeLedBuffer[monome_xy_idx(op->s_now, 0)] = 15;
    monome_set_quadrant_flag(0);
    monome_set_quadrant_flag(1);
  }

  if(op->s_cut2 == 0) {
    monomeLedBuffer[monome_xy_idx(op->s_now2, 2)] = 0;

    if(v > 0) {
      for(i=0;i<v;i++) {
        if(op->s_now2 == op->s_end2) op->s_now2 = op->s_start2;
        else {
          op->s_now2++;
          if(op->s_now2 == op->size) op->s_now2 = 0;
        }
      }
    } else {
      for(i=v;i<0;i++) {
        if(op->s_now2 == op->s_start2) op->s_now2 = op->s_end2;
        else if(op->s_now2 == 0) op->s_now2 = op->size - 1;
        else op->s_now2--;
      }
    }

    monomeLedBuffer[monome_xy_idx(op->s_now2, 2)] = 15;
    monome_set_quadrant_flag(0);
    monome_set_quadrant_flag(1);
  }
  
  op->s_cut = 0;
  op->s_cut2 = 0;

  net_activate(op->outs[0], op->steps[0][op->s_now], op);
  net_activate(op->outs[1], op->steps[1][op->s_now], op);
  net_activate(op->outs[2], op->steps[2][op->s_now], op);
  net_activate(op->outs[3], op->steps[3][op->s_now], op);

  i = (op->steps[0][op->s_now]) + (op->steps[1][op->s_now] << 1) + (op->steps[2][op->s_now] << 2) + (op->steps[3][op->s_now] << 3);
  net_activate(op->outs[4], i, op);
  net_activate(op->outs[5], op->s_now, op);

  i = (op->steps[0][op->s_now2]) + (op->steps[1][op->s_now2] << 1) + (op->steps[2][op->s_now2] << 2) + (op->steps[3][op->s_now2] << 3);
  net_activate(op->outs[6], i, op);
  net_activate(op->outs[7], op->s_now2, op);
}