FRESULT scan_files ( char* path /* Start node to be scanned (***also used as work area***) */ ) { FRESULT res; DIR dir; UINT i; static FILINFO fno; res = f_opendir(&dir, path); /* Open the directory */ if (res == FR_OK) { for (;;) { res = f_readdir(&dir, &fno); /* Read a directory item */ if (res != FR_OK || fno.fname[0] == 0) break; /* Break on error or end of dir */ if (fno.fattrib & AM_DIR) { /* It is a directory */ sprintf(&path[i = strlen(path)], "/%s", fno.fname); res = scan_files(path); /* Enter the directory */ if (res != FR_OK) break; path[i] = 0; } else { /* It is a file. */ send_uart(path); send_uart("/"); send_uart(fno.fname); send_uart("\n"); //printf("%s/%s\n", path, fno.fname); } } f_closedir(&dir); } return res; }
static void get_line (char *buff, int len) { BYTE c; int i = 0; for (;;) { c = getchar(); if (c == '\r') break; if ((c == '\b') && i) { i--; while(!UART_rdy); UART = c; //uart_putc(c); continue; } if (c >= ' ' && i < len - 1) { /* Visible chars */ buff[i++] = c; while(!UART_rdy); UART = c; //xputc(c); } } buff[i] = 0; send_uart("\n"); //xputc('\n'); }
/// \cond int main(int argc, char **argv) { int fd; char *s; unsigned char ope_code; unsigned char prev_code; unsigned char data_size; unsigned char prev_size; int len; int baud; char ret; printf("bcm2835_for_java ver1.01 start priority=%d\n", nice(1) ); if( argc != 2 ) { printf("bcm2835_for_java needs 1 parameter like as /tmp/shared_mem\n"); exit ( -1 ); } else { fd = open( argv[1], O_RDWR); if( fd == -1 ) { printf("file %s can't open\n",argv[1]); exit(-1); } else { s = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if( s == MAP_FAILED ) { printf("we can't create mapping file\n"); } } } r_buff = (struct ring_buff *)s; w_buff = (struct ring_buff *)(s+sizeof(struct ring_buff) ); bi_send_buff = (char *)( s + 2*sizeof(struct ring_buff) ); bi_rec_buff = (char *)( bi_send_buff + TEMP_BUFF_SIZE ); sync_code = (int *)( bi_rec_buff + TEMP_BUFF_SIZE ); reply_code = (int *)( sync_code + 1 ); init_ring_buff(w_buff,WRITER_INIT); init_ring_buff(r_buff,READER_INIT); bi_status = STATUS_FINE; while( 1 ) { if( calc_data_size( r_buff ) != 0 ) { prev_code = ope_code; prev_size = data_size; get_ope_code(); ope_code = buff[0]; data_size = calc_data_size( r_buff ); switch( ope_code ) { case OPE_INIT: bcm_init(); break; case OPE_CLOSE: bcm_close(); break; case OPE_SET_DEBUG: ope_set_debug(); break; case OPE_PERI_READ: ope_peri_read(); break; case OPE_PERI_READ_NB: ope_peri_read_nb(); break; case OPE_PERI_WRITE: ope_peri_write(); break; case OPE_PERI_WRITE_NB: ope_peri_write_nb(); break; case OPE_PERI_SET_BITS: ope_peri_set_bits(); break; case OPE_GPIO_FSEL: ope_gpio_fsel(); break; case OPE_GPIO_SET: ope_gpio_set(); break; case OPE_GPIO_CLR: ope_gpio_clr(); break; case OPE_GPIO_SET_MULTI: ope_gpio_set_multi(); break; case OPE_GPIO_CLR_MULTI: ope_gpio_clr_multi(); break; case OPE_GPIO_LEV: ope_gpio_lev(); break; case OPE_GPIO_EDS: ope_gpio_eds(); break; case OPE_GPIO_SET_EDS: ope_gpio_set_eds(); break; case OPE_GPIO_REN: ope_gpio_ren(); break; case OPE_GPIO_CLR_REN: ope_gpio_clr_ren(); break; case OPE_GPIO_FEN: ope_gpio_fen(); break; case OPE_GPIO_CLR_FEN: ope_gpio_clr_fen(); break; case OPE_GPIO_HEN: ope_gpio_hen(); break; case OPE_GPIO_CLR_HEN: ope_gpio_clr_hen(); break; case OPE_GPIO_LEN: ope_gpio_len(); break; case OPE_GPIO_CLR_LEN: ope_gpio_clr_len(); break; case OPE_GPIO_AREN: ope_gpio_aren(); break; case OPE_GPIO_CLR_AREN: ope_gpio_clr_aren(); break; case OPE_GPIO_AFEN: ope_gpio_afen(); break; case OPE_GPIO_CLR_AFEN: ope_gpio_clr_afen(); break; case OPE_GPIO_PUD: ope_gpio_pud(); break; case OPE_GPIO_PUDCLK: ope_gpio_pudclk(); break; case OPE_GPIO_WRITE: ope_gpio_write(); break; case OPE_GPIO_PAD: ope_gpio_pad(); break; case OPE_GPIO_SET_PAD: ope_gpio_set_pad(); break; case OPE_DELAY: ope_delay(); break; case OPE_DELAYMICROSECONDS: ope_delaymicroseconds(); break; case OPE_GPIO_WRITE_MULTI: ope_gpio_write_multi(); break; case OPE_GPIO_WRITE_MASK: ope_gpio_write_mask(); break; case OPE_GPIO_SET_PUD: ope_gpio_set_pud(); break; case OPE_SPI_BEGIN: ope_spi_begin(); break; case OPE_SPI_END: ope_spi_end(); break; case OPE_SPI_SETBITORDER: ope_spi_setbitorder(); break; case OPE_SPI_SETCLOCKDIVIDER: ope_spi_setclockdivider(); break; case OPE_SPI_SETDATAMODE: ope_spi_setdatamode(); break; case OPE_SPI_CHIPSELECT: ope_spi_chipselect(); break; case OPE_SPI_SETCHIPSELECTPOLARITY: ope_spi_setchipselectpolarity(); break; case OPE_SPI_TRANSFER: ope_spi_transfer(); break; case OPE_SPI_TRANSFERNB: ope_spi_transfernb(); break; case OPE_SPI_TRANSFERN: ope_spi_transfern(); break; case OPE_SPI_WRITENB: ope_spi_writenb(); break; case OPE_I2C_BEGIN: ope_i2c_begin(); break; case OPE_I2C_END: ope_i2c_end(); break; case OPE_I2C_SETSLAVEADDRESS: ope_i2c_setslaveaddress(); break; case OPE_I2C_SETCLOCKDIVIDER: ope_i2c_setclockdivider(); break; case OPE_I2C_SET_BAUDRATE: ope_i2c_set_baudrate(); break; case OPE_I2C_WRITE: ope_i2c_write(); break; case OPE_I2C_READ: ope_i2c_read(); break; case OPE_I2C_READ_REGISTER_RS: ope_i2c_read_register_rs(); break; case OPE_ST_READ: ope_st_read(); break; case OPE_ST_DELAY: ope_st_delay(); break; case OPE_HELLO: get_int_code(); len = *(int *)(buff+1); set_ope_code( OPE_REPLY ); strcpy( bi_rec_buff, "Nice to meet you." ); set_int_code( strlen(bi_rec_buff) ); put_reply(); mark_sync(); usleep(5000); break; case OPE_SYNC: mark_sync(); break; case OPE_EXIT: goto BREAK_LINE; break; case OPE_OPEN_UART: open_uart(); break; case OPE_CONFIG_UART: configure_uart(); break; case OPE_SEND_UART: send_uart(); break; case OPE_RECEIVE_UART: receive_uart(); break; case OPE_CLOSE_UART: close_uart(); break; default: printf("prev_code %02x \n",prev_code); printf("prev_size %d \n",prev_size); printf("ope_code error %02x \n",ope_code); printf("data_size=%d \n",data_size); break; } } else { usleep(5000); } } BREAK_LINE: printf("Close bcm2835_for_java\n"); exit(0); }
int main() { FIL Filin, Filout; /* File object needed for each open file */ UINT bw; char line[80]; char *ptr, *ptr2; long p1, p2, p3; BYTE res, b1, *bp; //UINT s1, s2, cnt, blen = sizeof Buff; DWORD ofs, sect = 0; BYTE buffer[4096]; char buff[256]; UINT br; //FATFS *fs; //RTC rtc; int i, j, l, k, hardware=1; char msg[100]; k=hardware; if(hardware){ for(i=0;i<400;i++) for(j=0;j<400;j++) LED = 0; } res = f_mount(&FatSD, "", 0); /* Give a work area to the default drive */ /* res = disk_status(MMC); snprintf(msg,100, "Status : %d\n", res); send_uart(msg); */ // Initialise media //disk_initialize(MMC); /* res = disk_status(MMC); snprintf(msg,100, "Status : %d\n", res); send_uart(msg); */ //snprintf(msg,100, "Mount response: %d\n", res); //send_uart(msg); //res |= f_mkfs("0:", 1, 1); //disk_read(MMC, FatSD.win, 0, 1); //FatSD.winsect = 1; //res = move_window(&FatSD, 0); //snprintf(msg,100, "mkfs response: %d\n", res); //send_uart(msg); /* res = disk_status(MMC); snprintf(msg,100, "Status : %d\n", res); send_uart(msg); */ //res = f_open(&Filout, "test.txt", FA_WRITE | FA_CREATE_ALWAYS); //res = f_open(&Filin, "test.txt", FA_READ); //snprintf(msg,100, "Open response: %d\n", res); //send_uart(msg); /*disk_read(MMC,Buff,0,1); for(i = 0; i<512; i++){ snprintf(msg,100, "%02X", Buff[i]); send_uart(msg); } */ //if ( res == FR_OK) { /* Create a file */ // send_uart("open file"); //res = f_write(&Filout, "It works!\r\n", 11, &bw); /* Write data to the file */ //snprintf(msg,100, "Write response: %d\n", res); //res = f_close(&Filout); //send_uart(msg); //snprintf(msg,100, "F Close response: %d\n", res); //send_uart(msg); // if (bw == 11) { /* Lights green LED if data written well */ // LED = 1; /* Set PB4 high */ // } //} //res = disk_status(MMC); // snprintf(msg,100, "\nStatus : %d\n", res); //send_uart(msg); //while(1); /* disk_ioctl(1, GET_SECTOR_COUNT, &p2); snprintf(msg,100, "Drive size: %lu sectors\n", p2); send_uart(msg); res = f_getlabel(ptr2, (char*)Buff, (DWORD*)&p1); //if (res) { put_rc(res); break; } Buff[0] ? snprintf(msg,100, "Volume name is %s\n", Buff) : snprintf(msg,100, "No volume label\n"); send_uart(msg); //xprintf(Buff[0] ? PSTR("Volume name is %s\n") : PSTR("No volume label\n"), Buff); //xprintf(PSTR("Volume S/N is %04X-%04X\n"), (WORD)((DWORD)p1 >> 16), (WORD)(p1 & 0xFFFF));*/ while(1){ send_uart("\nWelocme to FatF for Patmos\n"); send_uart("Options are:\n"); send_uart("O [r/w] [filename] [content if writemode]\n"); send_uart("l for file and dir structure\n"); send_uart("Opening a file in readmode will print the content to terminal\n"); send_uart("Write mode is not implemented\n"); send_uart("use ^M (ctrl-V) + enter to terminate input\n"); ptr = line; get_line(ptr, sizeof line); switch (*ptr++) { case 'T' : while (*ptr == ' ') ptr++; /* Quick test space */ break; case 'O' : case 'o' : while (*ptr == ' ') ptr++; switch(*ptr++){ case 'R' : case 'r' : while (*ptr == ' ') ptr++; res = f_open(&Filin, ptr, FA_READ); res = f_read(&Filin, buffer, sizeof(buffer), &br); /* read data from the file */ res = f_close(&Filin); /* Close the file */ send_uart("\nThis is the content of the file: \n\n"); for(i=0; i < br; i++){ snprintf(msg,100, "%c", buffer[i]); send_uart(msg); } send_uart("\n\n"); break; case 'W' : case 'w' : //ptr = line; //send_uart("Enter filename:\n"); //get_line(ptr, sizeof line); res = f_open(&Filout, "newtest.txt", FA_WRITE | FA_CREATE_ALWAYS); snprintf(msg,100, "\nOpen response : %d\n", res); send_uart(msg); //res = f_open(&Filout, ptr, FA_WRITE | FA_CREATE_ALWAYS); //res = f_open(&Filin, ptr, FA_READ); //&Filout, "It works!\r\n", 11, &bw) //ptr = line; //send_uart("Enter content:\n" ); //get_line(ptr, sizeof line); res = f_write(&Filout, "It works!\r\n", 11, &bw); snprintf(msg,100, "\nWrite response : %d\n", res); send_uart(msg); //res = f_write(&Filout, ptr, sizeof(line), &br); /* read data from the file */ res = f_close(&Filout); /* Close the file */ } break; case 'l' : case 'L' : strcpy(buff, "/"); res = scan_files(buff); break; } } for (;;) { if(k==0){ for(l=0; l<10; l++){ for(i=0;i<2000;i++) for(j=0;j<2000;j++) LED = 1; for(i=0;i<2000;i++) for(j=0;j<2000;j++){ LED = 0; } } for(i=0;i<2000;i++) for(j=0;j<2000;j++) for(l=0;l<20;l++) LED = 0; } } return 0; }