Ejemplo n.º 1
0
int main(int argc, char **argv) {

	int ch,i=0,j,end=3;

	grsim_init();

	gr();
	clear_screens();

	while(1) {

		/* clear old colors */
		for(j=0;j<40;j++) row_color[j]=0;

		gr();

		set_row_color(i+0,14);	// aqua
		set_row_color(i+1,6);		// med-blue
		set_row_color(i+2,12);	// light-green
		set_row_color(i+3,4);		// green
		set_row_color(i+4,13);	// yellow
		set_row_color(i+5,9);		// orange
		set_row_color(i+6,11);	// pink
		set_row_color(i+7,1);		// red

		for(j=0;j<40;j++) {
			if (row_color[j]) {
				color_equals(row_color[j]);
				hlin(0,0,40,j);
			}
		}

		grsim_update();

		ch=grsim_input();
		if (ch=='q') exit(0);
		usleep(100000);

		i++;
		if (i>(ELEMENTS-1)) {
			i=0;
			end--;
			if (end==0) break;
		}

//		printf("\n");
	}

	return 0;
}
//__________________________________________________________________________________________________
void anibike_dl_slave_handle_data ( void )
{
	uint8_t opcode;
	uint8_t cur_byte = 0;
	
	if (!g_data_valid) return;
	g_data_valid--;			
	
	// check if the fifo has grown
	if (DL_SLAVE_CIRC_BUFFER_LENGTH == 0)
	{
		return;
	}	
	
	/*	cur_byte = DL_SLAVE_CIRC_BUFFER_TOP(g_rx_data);
	
	// not all the data has been gotten yet
	if (DL_SLAVE_CIRC_BUFFER_LENGTH <= (cur_byte&0x1F))
	{
		return;
	}*/		
		
			
	cur_byte = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
	opcode = cur_byte&0xE0;
	
	switch (opcode)
	{
		//_________________________________
		case DL_NEW_TIMING_SYNC:
			{
				DL_SLAVE_CIRC_BUFFER_FLUSH;
				// switch buffers
				if (g_current_double_buffer == 0)
				{
					g_proj_buffer = g_buffer_II;
					g_receive_buffer = g_buffer_I;
					g_current_double_buffer = 1;
				}	
				else
				{
					g_proj_buffer = g_buffer_I;	
					g_receive_buffer = g_buffer_II;
					g_current_double_buffer = 0;	
				}		
				
				set_projection_buffer ( g_proj_buffer );
				
				// re-init variables			
				// set data not valid
				g_data_valid = 0;
						
				// set data counter to zero
				g_data_counter = 0;
				
				MUX_ENABLE;
				run_row_control;	
			}
			break;
		//_________________________________
		case DL_CONTINUE_DATA_BATCH:
			{
				uint8_t length = cur_byte&0x1F;
							
				while (length--)
				{
					uint8_t temp = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
					g_receive_buffer[g_data_counter++] = temp;
				}	
			}	
			break;
		//_________________________________
		case DL_LIGHT_LEDS_DEBUG:
				{
					uint8_t rownum;
					uint8_t rgb;
					uint8_t val;
					
					stop_row_control;
					
					if (val>0)
					{
						MUX_ENABLE;
					}						
					else
					{ 
						MUX_DISABLE;
					}						
					
					rownum = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
					rgb = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
					val = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
					
					if (rgb&0x01)
					{
						set_row_color (rownum, 1, val);
					}

					if (rgb&0x02)
					{
						set_row_color ( rownum, 2, val);
					}

					if (rgb&0x04)
					{
						set_row_color ( rownum, 3, val);
					}

				}			
			break;
		//_________________________________
		case DL_SET_ADDRESS:
			{
				uint8_t address = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
				
				// do something with the address
			}
			break;
		//_________________________________
		case DL_GO_TO_SLEEP:
			{
				// do something to go to sleep
				stop_row_control;
				MUX_DISABLE;
			}
			break;
		//_________________________________	
		case DL_SET_CAL_VALUES:
			{
				uint8_t temp1 = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);	// lsb
				uint8_t temp2 = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);	// msb
				uint16_t r = ((uint16_t)(temp1))|(((uint16_t)(temp2))<<8);
				temp1 = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
				temp2 = DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);				
				uint16_t g = ((uint16_t)(temp1))|(((uint16_t)(temp2))<<8);
				DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);
				DL_SLAVE_CIRC_BUFFER_POP(g_rx_data);				
				uint16_t b = ((uint16_t)(temp1))|(((uint16_t)(temp2))<<8);
				
				//printf_P(PSTR("%d %d %d"), (uint8_t)(r&0xff), (uint8_t)(g&0xff), (uint8_t)(b&0xff));
				
				//write_period_calibrations ( r, g, b );
			}				
			break;
		//_________________________________	
		default:
			DL_SLAVE_CIRC_BUFFER_FLUSH;
			g_data_valid = 0;
			break;
	};
}