show prog menu
This commit is contained in:
parent
35aef360cf
commit
ca87f6cd63
|
@ -77,6 +77,12 @@ static const char* help_str[] = {
|
|||
"l set keyboard layout\r\n",
|
||||
};
|
||||
|
||||
static const char* prog_str[] = {
|
||||
"K set manufacturer key\r\n",
|
||||
"L lock device\r\n",
|
||||
"E erase firmware\r\n",
|
||||
};
|
||||
|
||||
enum {
|
||||
MENU_HOME,
|
||||
MENU_USER,
|
||||
|
@ -116,6 +122,13 @@ uint32_t board_button2_read(void)
|
|||
return BUTTON2_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON2_PORT, BUTTON2_PIN);
|
||||
}
|
||||
|
||||
static bool locked(void)
|
||||
{
|
||||
FLASH_OBProgramInitTypeDef ob;
|
||||
HAL_FLASHEx_OBGetConfig(&ob);
|
||||
return (OB_RDP_LEVEL_2 == ob.RDPLevel);
|
||||
}
|
||||
|
||||
static void clear_credentials(void)
|
||||
{
|
||||
// clear credentials
|
||||
|
@ -419,57 +432,42 @@ void cdc_task(void)
|
|||
break;
|
||||
// hidden menu
|
||||
case 'K': // set manufacturer key
|
||||
{
|
||||
FLASH_OBProgramInitTypeDef ob;
|
||||
HAL_FLASHEx_OBGetConfig(&ob);
|
||||
if (OB_RDP_LEVEL_2 == ob.RDPLevel) {
|
||||
str = "\r\ndevice locked\r\n";
|
||||
} else {
|
||||
i = 0; // reset index
|
||||
menu = MENU_MANUF;
|
||||
str = "\r\nenter manufacturer key (up to 32 char): ";
|
||||
}
|
||||
if (!locked()) {
|
||||
i = 0; // reset index
|
||||
menu = MENU_MANUF;
|
||||
str = "\r\nenter manufacturer key (up to 32 char): ";
|
||||
}
|
||||
break;
|
||||
case 'L': // lock device
|
||||
{
|
||||
if (!locked()) {
|
||||
tud_cdc_write_str_flush("\r\nlocking device\r\n");
|
||||
FLASH_OBProgramInitTypeDef ob;
|
||||
HAL_FLASHEx_OBGetConfig(&ob);
|
||||
if (OB_RDP_LEVEL_2 == ob.RDPLevel) {
|
||||
str = "\r\ndevice locked\r\n";
|
||||
} else {
|
||||
str = "\r\nlocking device\r\n";
|
||||
ob.RDPLevel = OB_RDP_LEVEL_2; // level 2, disabling debug, and write protecting option byte
|
||||
ob.WRPState = OB_WRPSTATE_ENABLE; // write protect pages
|
||||
ob.WRPPage = 0x7; // all but last sector holding the config
|
||||
HAL_FLASH_Unlock();
|
||||
HAL_FLASH_OB_Unlock();
|
||||
//HAL_FLASHEx_OBProgram(&ob);
|
||||
HAL_FLASH_OB_Lock();
|
||||
HAL_FLASH_Lock();
|
||||
HAL_FLASH_OB_Launch();
|
||||
}
|
||||
ob.RDPLevel = OB_RDP_LEVEL_2; // level 2, disabling debug, and write protecting option byte
|
||||
ob.WRPState = OB_WRPSTATE_ENABLE; // write protect pages
|
||||
ob.WRPPage = 0x7; // all but last sector holding the config
|
||||
HAL_FLASH_Unlock();
|
||||
HAL_FLASH_OB_Unlock();
|
||||
//HAL_FLASHEx_OBProgram(&ob);
|
||||
HAL_FLASH_OB_Lock();
|
||||
HAL_FLASH_Lock();
|
||||
HAL_FLASH_OB_Launch();
|
||||
}
|
||||
break;
|
||||
case 'E': // mass erase to restart STM32 bootloader
|
||||
{
|
||||
|
||||
FLASH_OBProgramInitTypeDef ob;
|
||||
HAL_FLASHEx_OBGetConfig(&ob);
|
||||
if (OB_RDP_LEVEL_2 == ob.RDPLevel) {
|
||||
str = "\r\ncan't mass erase: device locked\r\n";
|
||||
} else {
|
||||
HAL_FLASH_Unlock();
|
||||
FLASH_EraseInitTypeDef EraseInitStruct;
|
||||
EraseInitStruct.TypeErase = FLASH_TYPEERASE_MASSERASE;
|
||||
uint32_t error;
|
||||
if (HAL_FLASHEx_Erase(&EraseInitStruct, &error) != HAL_OK) {
|
||||
printf("mass earse failed\r\n");
|
||||
}
|
||||
HAL_FLASH_Lock();
|
||||
HAL_FLASH_OB_Launch(); // just to restart
|
||||
if (!locked()) {
|
||||
tud_cdc_write_str_flush("\r\nerasing firmware\r\n");
|
||||
HAL_FLASH_Unlock();
|
||||
FLASH_EraseInitTypeDef EraseInitStruct;
|
||||
EraseInitStruct.TypeErase = FLASH_TYPEERASE_MASSERASE;
|
||||
uint32_t error;
|
||||
if (HAL_FLASHEx_Erase(&EraseInitStruct, &error) != HAL_OK) {
|
||||
printf("mass earse failed\r\n");
|
||||
}
|
||||
HAL_FLASH_Lock();
|
||||
HAL_FLASH_OB_Launch(); // just to restart
|
||||
}
|
||||
break;
|
||||
case '\r':
|
||||
case '\n':
|
||||
break; // nothing to do
|
||||
|
@ -481,6 +479,11 @@ void cdc_task(void)
|
|||
for (uint8_t j = 0; j < LENGTH(help_str); j++) {
|
||||
tud_cdc_write_str_flush(help_str[j]);
|
||||
}
|
||||
if (!locked()) {
|
||||
for (uint8_t j = 0; j < LENGTH(prog_str); j++) {
|
||||
tud_cdc_write_str_flush(prog_str[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MENU_USER:
|
||||
|
|
Loading…
Reference in New Issue