X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fgdb-server.c;h=c6162153adc13ae6f931860dd96ea84e9afadf96;hb=d4b435e7c048dd348857d22b30e6da42b21b1a51;hp=53df7191543a9a8160d4bcbc47fd71a3b24c872d;hpb=eac53cf6d11278e3d602ecb2c1af59962eeb04f4;p=fw%2Fstlink diff --git a/src/gdb-server.c b/src/gdb-server.c index 53df719..c616215 100644 --- a/src/gdb-server.c +++ b/src/gdb-server.c @@ -184,6 +184,56 @@ int serve(struct stlink* sl, int port) { break; } + case 'v': { + char *separator = strstr(packet, ":"), *params = ""; + if(separator == NULL) { + separator = packet + strlen(packet); + } else { + params = separator + 1; + } + + unsigned cmdNameLength = (separator - &packet[1]); + char* cmdName = calloc(cmdNameLength + 1, 1); + strncpy(cmdName, &packet[1], cmdNameLength); + + if(!strcmp(cmdName, "FlashErase")) { + char *s_addr, *s_length; + char *tok = params; + + s_addr = strsep(&tok, ","); + s_length = tok; + + unsigned addr = strtoul(s_addr, NULL, 16), + length = strtoul(s_length, NULL, 16); + + #ifdef DEBUG + printf("FlashErase: addr:%08x,len:%04x\n", + addr, length); + #endif + + for(stm32_addr_t cur = addr; + cur < addr + length; cur += 0x400) { + #ifdef DEBUG + printf("do_erase: %08x\n", cur); + #endif + + stlink_erase_flash_page(sl, cur); + } + + reply = strdup("OK"); + } else if(!strcmp(cmdName, "FlashWrite")) { + } else if(!strcmp(cmdName, "FlashDone")) { + reply = strdup("OK"); + } + + if(reply == NULL) + reply = strdup(""); + + free(cmdName); + + break; + } + case 'c': stlink_run(sl);