int main (void) { pwm_frame_t * next_pwm = malloc(sizeof(pwm_frame_t)); initialize_pru(); start_pru(); pru_pwm_frame_t * pwm_out = get_pwm_pointer(); init_pwm(next_pwm); output_pwm(next_pwm, pwm_out); signal(SIGINT, signal_handler); while(pruDataMem_int[0] != 0){ scanf("%d %d %d %d", &(next_pwm->zero), &(next_pwm->one), &(next_pwm->two), &(next_pwm->three)); printf("ping: %d\n", pruDataMem_int[1]/5800); pruDataMem_int[2] = 0; next_pwm->zero *= 1000; next_pwm->one *= 1000; next_pwm->two *= 1000; next_pwm->three *= 1000; output_pwm(next_pwm, pwm_out); } uninitialize_pru(); return(0); }
int main (int argc, char ** argv) { if (argc != 2){ printf("you need to give me the number of frames to captures\n"); exit(-1); } int num_frames = atoi(argv[1]); initialize_pru(); start_pru(); FILE * image_data = fopen("/media/usb/image.data", "w"); if (image_data == NULL){ fprintf(stderr, "Failed to open image output file"); exit(-1); } const char *version = FreeImage_GetVersion(); printf("Freeimage version %s\n", version); FIBITMAP* dib = FreeImage_Allocate(320, 203, 16, 0xF800, 0x07E0,0x001F); // allocate 320x203 RGB565 bitmap int bytespp = FreeImage_GetLine(dib)/FreeImage_GetWidth(dib); FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib); if (image_type == FIT_BITMAP){ printf("1\n"); } printf("%d %d\n", FreeImage_GetHeight(dib), FreeImage_GetWidth(dib)); BYTE * bits = FreeImage_GetBits(dib); FILE * fp = fopen("image.data", "rb"); char filename[] = "/root/1314-BeagleBone-Quadcopter/code/ControlTower/ramfs/latest_image.bmp"; int i = 0; for (i = 0; i < num_frames; i++){ while(i==pruDataMem_int[100]){usleep(100000);} int buffer = pruDataMem_int[1]; printf("%d buffer=%d\n", pruDataMem_int[100], buffer); if (i%10==0){ memcpy(bits, pru1_ddr+buffer*320*240*2, 320*203*2); FreeImage_Save(FIF_BMP, dib, filename,0); } } uninitialize_pru(); fflush(image_data); printf("%d\n", ((volatile uint8_t *)pru1_ddr)[0]); fclose(image_data); prussdrv_pru_disable (PRU_NUM); prussdrv_exit (); return(0); }
/***************************************************************** * int initialize_cape() * sets up necessary hardware and software * should be the first thing your program calls *****************************************************************/ int initialize_cape(){ FILE *fd; printf("\n"); // check if another project was using resources // kill that process cleanly with sigint if so #ifdef DEBUG printf("checking for existing PID_FILE\n"); #endif fd = fopen(PID_FILE, "r"); if (fd != NULL) { int old_pid; fscanf(fd,"%d", &old_pid); if(old_pid != 0){ printf("warning, shutting down existing robotics project\n"); kill((pid_t)old_pid, SIGINT); sleep(1); } // close and delete the old file fclose(fd); remove(PID_FILE); } // create new pid file with process id #ifdef DEBUG printf("opening PID_FILE\n"); #endif fd = fopen(PID_FILE, "ab+"); if (fd < 0) { printf("\n error opening PID_FILE for writing\n"); return -1; } pid_t current_pid = getpid(); printf("Current Process ID: %d\n", (int)current_pid); fprintf(fd,"%d",(int)current_pid); fflush(fd); fclose(fd); // check the device tree overlay is actually loaded if (is_cape_loaded() != 1){ printf("ERROR: Device tree overlay not loaded by cape manager\n"); return -1; } // initialize mmap io libs printf("Initializing GPIO\n"); if(initialize_gpio()){ printf("mmap_gpio_adc.c failed to initialize gpio\n"); return -1; } //export all GPIO output pins gpio_export(RED_LED); gpio_set_dir(RED_LED, OUTPUT_PIN); gpio_export(GRN_LED); gpio_set_dir(GRN_LED, OUTPUT_PIN); gpio_export(MDIR1A); gpio_set_dir(MDIR1A, OUTPUT_PIN); gpio_export(MDIR1B); gpio_set_dir(MDIR1B, OUTPUT_PIN); gpio_export(MDIR2A); gpio_set_dir(MDIR2A, OUTPUT_PIN); gpio_export(MDIR2B); gpio_set_dir(MDIR2B, OUTPUT_PIN); gpio_export(MDIR3A); gpio_set_dir(MDIR3A, OUTPUT_PIN); gpio_export(MDIR3B); gpio_set_dir(MDIR3B, OUTPUT_PIN); gpio_export(MDIR4A); gpio_set_dir(MDIR4A, OUTPUT_PIN); gpio_export(MDIR4B); gpio_set_dir(MDIR4B, OUTPUT_PIN); gpio_export(MOT_STBY); gpio_set_dir(MOT_STBY, OUTPUT_PIN); gpio_export(PAIRING_PIN); gpio_set_dir(PAIRING_PIN, OUTPUT_PIN); gpio_export(SPI1_SS1_GPIO_PIN); gpio_set_dir(SPI1_SS1_GPIO_PIN, OUTPUT_PIN); gpio_export(SPI1_SS2_GPIO_PIN); gpio_set_dir(SPI1_SS2_GPIO_PIN, OUTPUT_PIN); gpio_export(INTERRUPT_PIN); gpio_set_dir(INTERRUPT_PIN, INPUT_PIN); gpio_export(SERVO_PWR); gpio_set_dir(SERVO_PWR, OUTPUT_PIN); printf("Initializing ADC\n"); if(initialize_adc()){ printf("mmap_gpio_adc.c failed to initialize adc\n"); return -1; } printf("Initializing eQEP\n"); if(init_eqep(0)){ printf("mmap_pwmss.c failed to initialize eQEP\n"); return -1; } if(init_eqep(1)){ printf("mmap_pwmss.c failed to initialize eQEP\n"); return -1; } if(init_eqep(2)){ printf("mmap_pwmss.c failed to initialize eQEP\n"); return -1; } // setup pwm driver printf("Initializing PWM\n"); if(simple_init_pwm(1,PWM_FREQ)){ printf("simple_pwm.c failed to initialize PWMSS 0\n"); return -1; } if(simple_init_pwm(2,PWM_FREQ)){ printf("simple_pwm.c failed to initialize PWMSS 1\n"); return -1; } // start some gpio pins at defaults deselect_spi1_slave(1); deselect_spi1_slave(2); disable_motors(); //set up function pointers for button press events printf("Initializing button interrupts\n"); initialize_button_handlers(); // Load binary into PRU printf("Initializing PRU\n"); if(initialize_pru()){ printf("ERROR: PRU init FAILED\n"); return -1; } // Start Signal Handler printf("Initializing exit signal handler\n"); signal(SIGINT, ctrl_c); signal(SIGTERM, ctrl_c); // Print current battery voltage printf("Battery Voltage: %2.2fV\n", get_battery_voltage()); // all done set_state(PAUSED); printf("\nRobotics Cape Initialized\n"); return 0; }