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; }; }