// Show the current path (i.e. shape) void drvIDRAW::show_path() { print_coords(); }
void drvplot::show_path() { set_line_style(); set_filling_and_edging_style(); print_coords(); }
int main(int argc, char *argv[]) { int dev, ret_val; unsigned int reg_val; // find and init FPGA device ret_val = fpga_init(argc, argv, &dev); if (ret_val<0) return -1; double dt_c[N]; double dt_f[N]; printf("N_d is %d\n",N_d); printf("N_d is %d\n",N_d); printf("size is %d\n",(int)SIZE_DWORD); try{ x_1.resize(13); y_1.resize(13); t_1.resize(13); x_2.resize(13); y_2.resize(13); t_2.resize(13); for (int i = 0; i < 13; i++){ x_1[i].resize(N_d); y_1[i].resize(N_d); t_1[i].resize(N_d); x_2[i].resize(N_d); y_2[i].resize(N_d); t_2[i].resize(N_d); } } catch (const std::bad_alloc& ba){ std::cout << "bad_alloc caught: " << ba.what() << std::endl; } FILE *f_p, *f_p1; int error = 0; if (flag_compare==1){ f_p = fopen ("MT_coords_CPU.txt","w"); if (f_p==NULL) { printf("Error opening file!\n"); return -1; } } if (flag_file) f_p1 = fopen (out_file,"w"); else f_p1 = fopen ("MT_coords_FPGA.txt","w"); if (f_p1==NULL) { printf("Error opening file!\n"); return -1; } printf("TOTAL_STEPS = %d\nSTEPS_TO_WRITE = %d\n", TOTAL_STEPS, STEPS_TO_WRITE); // get golden results init_coords(x_1,y_1,t_1); init_coords(x_2,y_2,t_2); /* * в этом цикле проводим вычислени¤ и сравниваем результаты * * в данный момент чтобы проверить сравнение на каждом шаге вызываетс¤ функци¤ mt_cpu * с параметром load_coords = 1 (иначе состо¤ни¤ глобальных массивов координат будет все врем¤ мен¤тьс¤) * * огда вместо mt_cpu будет реализаци¤ на OpenCL, то надо делать по-другому: * перед циклом один раз вызываем mt_cpu (load_coords = 1), в цикле уменьшаем количество итераций на 1 и * вызываем mt_cpu (load_coords = 0) * */ error = 0; struct timeval time; gettimeofday(&time,NULL); // microsecond has 1 000 000 // Assuming you did not need quite that accuracy // Also do not assume the system clock has that accuracy. srand((time.tv_sec * 1000) + (time.tv_usec / 1000)); // The trouble here is that the seed will repeat every // 24 days or so. // If you use 100 (rather than 1000) the seed repeats every 248 days. // Do not make the MISTAKE of using just the tv_usec // This will mean your seed repeats every second. printf("\nFlag rand is SET, %d\n\n",flag_rand); if (flag_rand==1) { //srand (time(NULL)); // set seed vals for (int i =0; i < NUM_SEEDS; i++){ #ifdef TEST_SEEDS seeds[i] = test_seeds[i]; #else seeds[i]=rand(); #endif unsigned int addr = SEED_REG + 4*i; RD_WriteDeviceReg32m(dev, CNTRL_BAR, addr, seeds[i]); printf("seed %x \n",seeds[i]); } printf("\nFlag rand is SET\n\n"); RD_ReadDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // deassert rand reset reg_val |= (1<<4); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // set rand_enable flag reg_val |= (1<<7); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // start rand core reg_val |= (1<<5); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); } printf("\n\nhereerereerere\n\n"); for(int k=0; k<N; k++) { int err; struct timeval tt1, tt2; if (flag_compare==1){ get_time(&tt1); if (mt_cpu(STEPS_TO_WRITE,1, flag_rand, flag_seed, seeds, x_1,y_1,t_1,x_1,y_1, t_1)<0) { printf("Nan Error in cpu. Step is %d. Exitting....\n",k); break;} get_time(&tt2); calc_dt(&tt1,&tt2, &dt_c[k]); } get_time(&tt1); mt_fpga(dev,STEPS_TO_WRITE,1,x_2,y_2,t_2,x_2,y_2, t_2); get_time(&tt2); calc_dt(&tt1,&tt2, &dt_f[k]); flag_seed = 0; printf("Step %d\n\t CPU Time = %f\n\t FPGA Time = %f\n",k,dt_c[k],dt_f[k] ); if (flag_compare==1){ err = compare_results(x_1,y_1,t_1,x_2,y_2,t_2); if (err) { error += err; printf("Compare results failed at step = %d, errors = %d\n", k, error); } } if (flag_compare==1) print_coords(f_p, x_1, y_1, t_1); print_coords(f_p1, x_2, y_2, t_2); } if (flag_compare==1){ if (!error) printf("Test OK!\n"); } if (flag_compare==1) fclose(f_p); fclose(f_p1); RD_ReadDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // assert rand reset reg_val &= ~(1<<4); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); // reset rand_enable flag reg_val &= ~(1<<7); RD_WriteDeviceReg32m(dev, CNTRL_BAR, COMMAND_REG, reg_val); free(wr_buf_free); free(rd_buf_free); RD_CloseDevice(pd_ptr); return 0; }
// START HERE int main (int argc, char *argv[]) { int starting = 3; int x = 0; int y = 0; // Open X display Display *display = XOpenDisplay (NULL); if (display == NULL) { fprintf (stderr, "Can't open display!\n"); return -1; } // Cakame na start ask_for("Startujeme za", 3); // co potrebujeme TCoord spin, check_color, bet_red, bet_black, clear_all; // nacitavanie ask_for("SPIN", 5); coords(display, &spin.x, &spin.y); ask_for("Ziskaj farbu", 5); coords(display, &check_color.x, &check_color.y); ask_for("Vsad cervena", 5); coords(display, &bet_red.x, &bet_red.y); ask_for("Vsad cierna", 5); coords(display, &bet_black.x, &bet_black.y); ask_for("Clear all", 5); coords(display, &clear_all.x, &clear_all.y); print_coords("Spin: ", spin); print_coords("Ziskaj farbu: ", check_color); print_coords("Vsad cervenu: ", bet_red); print_coords("Vsad ciernu: ", bet_black); print_coords("Clear all: ", clear_all); // End-state machine int num_of_same = 15; // THIIIIS int was_same = 1; int last_color = -1; int actual_color = -1; int cascade_arr[15] = {1, 2, 4, 3, 4, 8, 7, 8, 16, 15, 16, 32, 31, 32, 64}; int cascade_index = 0; int cascade_level = 0; int cash = 0; int num_of_bets = 0; int state = ST_START; int a = 0; while(1) { switch(state) { case ST_START: clickXY(display, spin.x, spin.y); my_sleep(); actual_color = get_color(display, check_color.x, check_color.y); my_sleep(); if(actual_color == last_color) { was_same++; } else { was_same = 1; if(actual_color != GREEN) last_color = actual_color; } // Have enough if(was_same == (num_of_same + cascade_level * 3)) { state = ST_CASCADE; } break; case ST_CASCADE: num_of_bets = cascade_arr[cascade_level * 3 + cascade_index]; // Bet different if(last_color == RED) { for(a = 1; a <= num_of_bets; a++) { clickXY(display, bet_black.x, bet_black.y); my_sleep(); cash--; } } else { for(a = 1; a <= num_of_bets; a++) { clickXY(display, bet_red.x, bet_red.y); my_sleep(); cash--; } } // Spin clickXY(display, spin.x, spin.y); my_sleep(); actual_color = get_color(display, check_color.x, check_color.y); // Loose if(actual_color == last_color) { cascade_index++; if(cascade_index > 2) { cascade_index = 0; cascade_level++; // You are doomed if(cascade_level > 4) { printf("Poor guy ;( \n"); XCloseDisplay (display); return 0; } } } // Win else { cascade_index = 0; if(cascade_level == 0) { clickXY(display, bet_red.x, bet_red.y); my_sleep(); clickXY(display, clear_all.x, clear_all.y); my_sleep(); state = ST_START; cash = 0; printf("WIIIIIIIIIIIN!\n"); } else { cash += num_of_bets * 2; if(cash >= 0) { cash = 0; cascade_level = 0; cascade_index = 0; state = ST_START; printf("WIIIIIIIIIIIN!\n"); } clickXY(display, bet_red.x, bet_red.y); my_sleep(); clickXY(display, clear_all.x, clear_all.y); my_sleep(); state = ST_START; } } break; } } // Close X display and exit XCloseDisplay (display); return 0; }