/* get truncated string from database */ void sort_getstring_for_dirent(char *ptr, uint32_t addr) { uint8_t leaf_offset; if(addr & 0x80000000) { /* is directory link, name offset 4 */ leaf_offset = sram_readbyte(addr + 4 + SRAM_MENU_ADDR); sram_readblock(ptr, addr + 5 + leaf_offset + SRAM_MENU_ADDR, 20); } else { /* is file link, name offset 6 */ leaf_offset = sram_readbyte(addr + 6 + SRAM_MENU_ADDR); sram_readblock(ptr, addr + 7 + leaf_offset + SRAM_MENU_ADDR, 20); } ptr[20]=0; }
void sram_hexdump(uint32_t addr, uint32_t len) { static uint8_t buf[16]; uint32_t ptr; for(ptr=0; ptr < len; ptr += 16) { sram_readblock((void*)buf, ptr+addr, 16); uart_trace(buf, 0, 16); } }
void sort_dir(uint32_t addr, unsigned int size) { stat_getstring=0; if(size > QSORT_MAXELEM) { printf("more than %d dir entries, doing slower in-place sort\n", QSORT_MAXELEM); ext_heapsort(addr, size); } else { /* retrieve, sort, and store dir table */ sram_readblock(ptrcache, addr, size*4); qsort((void*)ptrcache, size, 4, sort_cmp_elem); sram_writeblock(ptrcache, addr, size*4); } }
void get_selected_name(uint8_t* fn) { uint32_t addr; addr = sram_readlong(SRAM_PARAM_ADDR); printf("fd addr=%lx\n", addr); sram_readblock(fn, addr + 7 + SRAM_MENU_ADDR, 256); }
/* dump binary config from menu */ void cfg_get_from_menu() { sram_readblock(&CFG, SRAM_MENU_CFG_ADDR, sizeof(cfg_t)); }