From e1f7ecf4b42493faed72ac447604b12e39ae5d6f Mon Sep 17 00:00:00 2001 From: MCUdude Date: Sat, 5 Aug 2023 21:18:35 +0200 Subject: [PATCH] simplify fuse handling logic --- src/stk500v2.c | 68 ++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/src/stk500v2.c b/src/stk500v2.c index a972db4d..572fb0e9 100644 --- a/src/stk500v2.c +++ b/src/stk500v2.c @@ -2261,15 +2261,14 @@ static int stk500hv_read_byte(const PROGRAMMER *pgm, const AVRPART *p, const AVR paddr = addr & ~(pagesize - 1); paddr_ptr = &PDATA(pgm)->eeprom_pageaddr; cache_ptr = PDATA(pgm)->eeprom_pagecache; - } else if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) { + } else if (str_contains(mem->desc, "fuse")) { buf[0] = mode == PPMODE? CMD_READ_FUSE_PP: CMD_READ_FUSE_HVSP; - addr = 0; - } else if (str_eq(mem->desc, "hfuse")) { - buf[0] = mode == PPMODE? CMD_READ_FUSE_PP: CMD_READ_FUSE_HVSP; - addr = 1; - } else if (str_eq(mem->desc, "efuse")) { - buf[0] = mode == PPMODE? CMD_READ_FUSE_PP: CMD_READ_FUSE_HVSP; - addr = 2; + if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) + addr = 0; + else if (str_eq(mem->desc, "hfuse")) + addr = 1; + else if (str_eq(mem->desc, "efuse")) + addr = 2; } else if (str_eq(mem->desc, "lock")) { buf[0] = mode == PPMODE? CMD_READ_LOCK_PP: CMD_READ_LOCK_HVSP; } else if (str_eq(mem->desc, "calibration")) { @@ -2391,15 +2390,14 @@ static int stk500isp_read_byte(const PROGRAMMER *pgm, const AVRPART *p, const AV return 0; } - if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) { + if (str_contains(mem->desc, "fuse")) { buf[0] = CMD_READ_FUSE_ISP; - addr = 0; - } else if (str_eq(mem->desc, "hfuse")) { - buf[0] = CMD_READ_FUSE_ISP; - addr = 1; - } else if (str_eq(mem->desc, "efuse")) { - buf[0] = CMD_READ_FUSE_ISP; - addr = 2; + if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) + addr = 0; + else if (str_eq(mem->desc, "hfuse")) + addr = 1; + else if (str_eq(mem->desc, "efuse")) + addr = 2; } else if (str_eq(mem->desc, "lock")) { buf[0] = CMD_READ_LOCK_ISP; } else if (str_eq(mem->desc, "calibration")) { @@ -2474,21 +2472,16 @@ static int stk500hv_write_byte(const PROGRAMMER *pgm, const AVRPART *p, const AV paddr = addr & ~(pagesize - 1); paddr_ptr = &PDATA(pgm)->eeprom_pageaddr; cache_ptr = PDATA(pgm)->eeprom_pagecache; - } else if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) { + } else if (str_contains(mem->desc, "fuse")) { buf[0] = mode == PPMODE? CMD_PROGRAM_FUSE_PP: CMD_PROGRAM_FUSE_HVSP; - addr = 0; - pulsewidth = p->programfusepulsewidth; - timeout = p->programfusepolltimeout; - } else if (str_eq(mem->desc, "hfuse")) { - buf[0] = mode == PPMODE? CMD_PROGRAM_FUSE_PP: CMD_PROGRAM_FUSE_HVSP; - addr = 1; - pulsewidth = p->programfusepulsewidth; - timeout = p->programfusepolltimeout; - } else if (str_eq(mem->desc, "efuse")) { - buf[0] = mode == PPMODE? CMD_PROGRAM_FUSE_PP: CMD_PROGRAM_FUSE_HVSP; - addr = 2; pulsewidth = p->programfusepulsewidth; timeout = p->programfusepolltimeout; + if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) + addr = 0; + else if (str_eq(mem->desc, "hfuse")) + addr = 1; + else if (str_eq(mem->desc, "efuse")) + addr = 2; } else if (str_eq(mem->desc, "lock")) { buf[0] = mode == PPMODE? CMD_PROGRAM_LOCK_PP: CMD_PROGRAM_LOCK_HVSP; pulsewidth = p->programlockpulsewidth; @@ -2611,11 +2604,11 @@ static int stk500isp_write_byte(const PROGRAMMER *pgm, const AVRPART *p, const A cache_ptr = PDATA(pgm)->flash_pagecache; if ((mem->mode & 1) == 0) /* old, unpaged device, really write single bytes */ - pagesize = 1; + pagesize = 1; } else { pagesize = mem->page_size; if (pagesize == 0) - pagesize = 1; + pagesize = 1; paddr = addr & ~(pagesize - 1); paddr_ptr = &PDATA(pgm)->eeprom_pageaddr; cache_ptr = PDATA(pgm)->eeprom_pagecache; @@ -2640,15 +2633,14 @@ static int stk500isp_write_byte(const PROGRAMMER *pgm, const AVRPART *p, const A } memset(buf, 0, sizeof buf); - if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) { + if (str_contains(mem->desc, "fuse")) { buf[0] = CMD_PROGRAM_FUSE_ISP; - addr = 0; - } else if (str_eq(mem->desc, "hfuse")) { - buf[0] = CMD_PROGRAM_FUSE_ISP; - addr = 1; - } else if (str_eq(mem->desc, "efuse")) { - buf[0] = CMD_PROGRAM_FUSE_ISP; - addr = 2; + if (str_eq(mem->desc, "lfuse") || str_eq(mem->desc, "fuse")) + addr = 0; + else if (str_eq(mem->desc, "hfuse")) + addr = 1; + else if (str_eq(mem->desc, "efuse")) + addr = 2; } else if (str_eq(mem->desc, "lock")) { buf[0] = CMD_PROGRAM_LOCK_ISP; } else {