/************************************************************************ * NAME: fapp_mem_erase_all * * DESCRIPTION: ************************************************************************/ void fapp_mem_erase_all(fnet_shell_desc_t desc) { fnet_uint32_t addr; const struct fapp_mem_region *region = fapp_mem_regions; fnet_uint32_t log_start_addr; fnet_size_t log_erase_size; fnet_size_t log_skip_size; /* Check all regions if it has erase function. */ while(region->description) { if((region->erase) && (region->erase_size)) { addr = region->address; log_start_addr = addr; log_erase_size = 0u; log_skip_size = 0u; while(addr < (region->address+region->size)) { if(fapp_mem_erase((void *)addr, region->erase_size) == FNET_OK) { if(log_skip_size) { fnet_shell_println(desc, FAPP_MEM_ERASE_SKIPPED, log_start_addr, log_start_addr+log_skip_size-1u); log_skip_size = 0u; log_start_addr = addr; } log_erase_size += region->erase_size; } else { if(log_erase_size) { fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, log_start_addr, log_start_addr+log_erase_size-1u); log_erase_size = 0u; log_start_addr = addr; } log_skip_size += region->erase_size; } addr+=region->erase_size; } if(log_erase_size) { fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, log_start_addr, log_start_addr+log_erase_size-1u); } else { fnet_shell_println(desc, FAPP_MEM_ERASE_SKIPPED, log_start_addr, log_start_addr+log_skip_size-1u); } } region++; } }
/************************************************************************ * NAME: fapp_mem_erase_cmd * * DESCRIPTION: ************************************************************************/ void fapp_mem_erase_cmd ( fnet_shell_desc_t desc, fnet_index_t argc, fnet_char_t ** argv ) { fnet_uint32_t address; fnet_size_t size; fnet_char_t *p; fnet_return_t result; FNET_COMP_UNUSED_ARG(desc); fnet_shell_println(desc, "Erasing..."); if (argc == 3u) { address = fnet_strtoul(argv[1],&p,16u); if ((address == 0u) && (p == argv[1])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1] ); return; } size = fnet_strtoul(argv[2],&p,10u); if ((size == 0u) && (p == argv[2])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2] ); return; } result = fapp_mem_erase( (void *)address, size); if( result == FNET_OK) { fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, address, address+size-1u ); } else { fnet_shell_println(desc, FAPP_MEM_ERASE_FAILED, address, address+size-1u ); } } else if ((argc == 2u) && (fnet_strcasecmp(FAPP_MEM_ERASE_ALL, argv[1]) == 0)) /* Erase all */ { fapp_mem_erase_all(desc); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }
/************************************************************************ * NAME: fapp_mem_erase_cmd * * DESCRIPTION: ************************************************************************/ void fapp_mem_erase_cmd ( fnet_shell_desc_t desc, int argc, char ** argv ) { unsigned long address; unsigned long size; char *p; int result; FNET_COMP_UNUSED_ARG(desc); fnet_shell_println(desc, "Erasing..."); if (argc == 3) { address = fnet_strtoul(argv[1],&p,16); if ((address == 0) && (p == argv[1])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1] ); return; } size = fnet_strtoul(argv[2],&p,10); if ((size == 0) && (p == argv[2])) { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[2] ); return; } result = fapp_mem_erase( (void *)address, size); if( result == FNET_OK) fnet_shell_println(desc, FAPP_MEM_ERASE_ERASED, address, address+size-1 ); else fnet_shell_println(desc, FAPP_MEM_ERASE_FAILED, address, address+size-1 ); } else if ((argc == 2) && fnet_strcasecmp(FAPP_MEM_ERASE_ALL, argv[1]) == 0) /* Erase all */ { fapp_mem_erase_all(desc); } else { fnet_shell_println(desc, FAPP_PARAM_ERR, argv[1]); } }