diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in index 56ecc8ab..449eeb0f 100644 --- a/src/avrdude.conf.in +++ b/src/avrdude.conf.in @@ -2115,6 +2115,7 @@ programmer desc = "Atmel AVR XplainedMini in ISP mode"; type = "jtagice3_isp"; prog_modes = PM_ISP; + extra_features = HAS_SUFFER; connection_type = usb; usbpid = 0x2145; ; @@ -2128,6 +2129,7 @@ programmer desc = "Atmel AVR XplainedMini in debugWIRE mode"; type = "jtagice3_dw"; prog_modes = PM_debugWIRE; + extra_features = HAS_SUFFER; connection_type = usb; usbpid = 0x2145; ; @@ -2141,6 +2143,7 @@ programmer desc = "Atmel AVR XplainedMini in UPDI mode"; type = "jtagice3_updi"; prog_modes = PM_UPDI; + extra_features = HAS_SUFFER; connection_type = usb; usbpid = 0x2145; hvupdi_support = 1; diff --git a/src/config_gram.y b/src/config_gram.y index 257abf61..4a2e1ac3 100644 --- a/src/config_gram.y +++ b/src/config_gram.y @@ -93,6 +93,7 @@ static int pin_name; %token K_AVR910_DEVCODE %token K_EEPROM %token K_ERRLED +%token K_EXTRA_FEATURES %token K_FLASH %token K_ID %token K_IO @@ -355,6 +356,11 @@ prog_decl : current_prog->lineno = cfg_lineno; free_token($3); } + K_EXTRA_FEATURES TKN_EQUAL numexpr + { + current_prog->extra_features = $3->value.number; + free_token($3); + } | ; diff --git a/src/lexer.l b/src/lexer.l index 88413a72..7a200948 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -140,6 +140,11 @@ PM_(SPM|TPI|ISP|PDI|UPDI|HVSP|HVPP|debugWIRE|JTAG|JTAGmkI|XMEGAJTAG|AVR32JTAG|aW return TKN_NUMBER; } +HAS_(SUFFER|VTARG_SWITCH|VTARG_ADJ) { /* Constants */ + yylval = new_constant(yytext); + return TKN_NUMBER; +} + alias { yylval=NULL; return K_ALIAS; } allowfullpagebitstream { yylval=NULL; ccap(); return K_ALLOWFULLPAGEBITSTREAM; } avr910_devcode { yylval=NULL; ccap(); return K_AVR910_DEVCODE; } @@ -170,6 +175,7 @@ eeprom { yylval=NULL; return K_EEPROM; } eeprom_instr { yylval=NULL; ccap(); return K_EEPROM_INSTR; } enablepageprogramming { yylval=NULL; ccap(); return K_ENABLEPAGEPROGRAMMING; } errled { yylval=NULL; ccap(); return K_ERRLED; } +extra_features { yylval=NULL; ccap(); return K_EXTRA_FEATURES; } family_id { yylval=NULL; ccap(); return K_FAMILY_ID; } flash { yylval=NULL; return K_FLASH; } flash_instr { yylval=NULL; ccap(); return K_FLASH_INSTR; } diff --git a/src/libavrdude.h b/src/libavrdude.h index b5ba9234..7df2e44a 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -211,6 +211,10 @@ typedef struct opcode { #define HV_UPDI_VARIANT_1 1 /* Dedicated UPDI pin, no HV (megaAVR0/AVR-Dx) */ #define HV_UPDI_VARIANT_2 2 /* Shared UPDI pin, HV on _RESET (AVR-DD/AVR-Ex) */ +#define HAS_SUFFER 1 +#define HAS_VTARG_SWITCH 2 +#define HAS_VTARG_ADJ 4 + #define AVR_FAMILYIDLEN 7 #define AVR_SIBLEN 16 #define CTL_STACK_SIZE 32 @@ -735,6 +739,7 @@ typedef struct programmer_t { LISTID comments; // Used by developer options -c*/[ASsr...] const char *parent_id; // Used by developer options int prog_modes; // Programming interfaces, see #define PM_... + int extra_features; struct pindef_t pin[N_PINS]; conntype_t conntype; int baudrate;