Ejemplo n.º 1
0
void mode_0(void) {
	uint8_t dmx_index = (uint8_t) 0;
	bool dmx_new_data = false;

	if (midi_get_active_sense_state() == MIDI_ACTIVE_SENSE_FAILED) {
		if (!midi_active_sense_failed) {
			dmx_set_port_direction(DMX_PORT_DIRECTION_OUTP, false);
			midi_active_sense_failed = true;
		}

	} else if (midi_active_sense_failed) {
		dmx_set_port_direction(DMX_PORT_DIRECTION_OUTP, true);
		midi_active_sense_failed = false;
	}

	if (midi_read_channel(midi_channel)) {

		if (midi_message->channel != 0 ) {
			// Channel messages
			switch (midi_message->type) {
			case MIDI_TYPES_NOTE_OFF:
				dmx_index = dmx_start_address + midi_message->data1; // MIDI Channel starts with 0, DMX address starts with 1
				if (dmx_index <= DMX_UNIVERSE_SIZE) {	// we skip SC
					dmx_data[dmx_index] = (uint8_t) 0;
				}
				dmx_new_data = true;
				break;
			case MIDI_TYPES_NOTE_ON:
				dmx_index = dmx_start_address + midi_message->data1;
				if (dmx_index <= DMX_UNIVERSE_SIZE) {	// we skip SC
					uint8_t data = midi_message->data2 << 1;
					dmx_data[dmx_index] = data;
				}
				dmx_new_data = true;
				break;
			case MIDI_TYPES_CONTROL_CHANGE: {
				switch (midi_message->data1) {
					case MIDI_CONTROL_CHANGE_ALL_NOTES_OFF:
						clear_dmx_data();
						dmx_new_data = true;
						break;
					default:
						break;
				}
				break;
			}
			default:
				break;
			}

			if (dmx_new_data) {
				dmx_set_send_data(dmx_data, 1 + dmx_max_slot);
			}
		}
	}
}
Ejemplo n.º 2
0
void mode_0_init(void) {
	clear_dmx_data();

	midi_message = (const struct _midi_message *) midi_message_get();
	midi_channel = bridge_params_get_midi_channel();

	midi_active_sense_failed = (midi_get_active_sense_state() == MIDI_ACTIVE_SENSE_FAILED);

	dmx_start_address = bridge_params_get_dmx_start_address();
	dmx_max_slot = (dmx_start_address + (uint16_t) 127) <= DMX_UNIVERSE_SIZE ? (dmx_start_address + (uint16_t) 127) : DMX_UNIVERSE_SIZE + (uint16_t) 1; // SC

	dmx_set_port_direction(DMX_PORT_DIRECTION_OUTP, false);
	dmx_set_send_data(dmx_data, 1 + dmx_max_slot);	// SC + data
	dmx_set_port_direction(DMX_PORT_DIRECTION_OUTP, true);

	monitor_line(5, "Listening channel : %d %s", midi_channel, midi_channel == 0 ? "<OMNI>" : "");
	monitor_line(6, "DMX start address : %d", dmx_start_address);
	monitor_line(7, "DMX slots         : %d", dmx_max_slot);
}
Ejemplo n.º 3
0
void monitor_update(void) {
	// Handle Active Sensing messages
	switch (midi_get_active_sense_state()) {
	case MIDI_ACTIVE_SENSE_ENABLED:
		console_save_cursor();
		console_set_cursor(70, 3);
		console_set_fg_bg_color(CONSOLE_BLACK, CONSOLE_CYAN);
		(void) console_puts("ACTIVE SENSING          ");
		console_restore_cursor();
		break;
	case MIDI_ACTIVE_SENSE_FAILED:
		console_save_cursor();
		console_set_cursor(70, 3);
		console_set_fg_bg_color(CONSOLE_RED, CONSOLE_WHITE);
		(void) console_puts("ACTIVE SENSING - Failed!");
		console_restore_cursor();
		break;
	default:
		break;
	}
}