@@ -1606,25 +1606,27 @@ static int jtag3_parseextparms(const PROGRAMMER *pgm, const LISTID extparms) {
16061606 msg_error ("%s -c %s extended options:\n" , progname , pgmid );
16071607 if (str_eq (pgm -> type , "JTAGICE3" )) {
16081608 msg_error (" -x jtagchain=UB,UA,BB,BA Setup the JTAG scan chain order\n" );
1609- msg_error (" UB/UA = units before/after, BB/BA = bits before/after\n" );
1609+ msg_error (" UB/UA = units before/after, BB/BA = bits before/after\n" );
16101610 }
16111611 if (lsize (pgm -> hvupdi_support ) > 1 )
1612- msg_error (" -x hvupdi Enable high-voltage UPDI initialization\n" );
1612+ msg_error (" -x hvupdi Enable high-voltage UPDI initialization\n" );
16131613 if (pgm -> extra_features & HAS_SUFFER ) {
1614- msg_error (" -x suffer Read SUFFER register value\n" );
1615- msg_error (" -x suffer=<n> Set SUFFER register to <n> (0x.. hex, 0.. oct or dec)\n" );
1614+ msg_error (" -x suffer Read SUFFER register value\n" );
1615+ msg_error (" -x suffer=<n> Set SUFFER register to <n> (0x.. hex, 0.. oct or dec)\n" );
16161616 }
16171617 if (pgm -> extra_features & HAS_VTARG_SWITCH ) {
1618- msg_error (" -x vtarg_switch Read on-board target voltage switch state\n" );
1619- msg_error (" -x vtarg_switch=<0..1> Set on-board target voltage switch state\n" );
1618+ msg_error (" -x vtarg_switch Read on-board target voltage switch state\n" );
1619+ msg_error (" -x vtarg_switch=<0|1> Set on-board target voltage switch state\n" );
16201620 }
16211621 if (pgm -> extra_features & HAS_VTARG_ADJ ) {
1622- msg_error (" -x vtarg Read on-board target supply voltage\n" );
1623- msg_error (" -x vtarg=<dbl> Set on-board target supply voltage to <dbl> V\n" );
1622+ msg_error (" -x vtarg Read on-board target supply voltage\n" );
1623+ msg_error (" -x vtarg=<dbl> Set on-board target supply voltage to <dbl> V\n" );
16241624 }
1625- if (str_starts (pgmid , "pickit4" ) || str_starts (pgmid , "snap" ))
1626- msg_error (" -x mode=avr|[pic|mplab] Set programmer to AVR or MPLAB (PIC) mode, then exit\n" );
1627- msg_error (" -x help Show this help menu and exit\n" );
1625+ if (str_starts (pgmid , "pickit4" ) || str_starts (pgmid , "snap" )) {
1626+ msg_error (" -x mode=avr Set programmer to AVR mode and exit if it was not\n" );
1627+ msg_error (" -x mode=<mplab|pic> Set programmer to MPLAB aka PIC mode and exit\n" );
1628+ }
1629+ msg_error (" -x help Show this help menu and exit\n" );
16281630 return rv ;
16291631 }
16301632
@@ -1713,31 +1715,46 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
17131715 pic_mode = serial_open (port , pinfo , & pgm -> fd );
17141716 }
17151717 if (pic_mode >= 0 ) {
1716- msg_error ("\n" );
17171718 cx -> usb_access_error = 0 ;
1718- pmsg_error ("%s in %s mode detected\n" , pgmstr , pinfo .usbinfo .pid == bl_pid ? "bootloader" : "mplab" );
1719- if (mode_switch == PK4_SNAP_MODE_AVR ) {
1720- imsg_error ("switching to AVR mode; " );
1719+ switch (mode_switch ) {
1720+ case PK4_SNAP_MODE_AVR :
1721+ msg_info ("\n" );
1722+ pmsg_info ("%s in %s mode detected\n" , pgmstr ,
1723+ pinfo .usbinfo .pid == bl_pid ? "bootloader" : "mplab" );
1724+ pmsg_info ("switching to AVR mode; " );
17211725 if (pinfo .usbinfo .pid == bl_pid )
17221726 serial_send (& pgm -> fd , exit_bl_cmd , sizeof (exit_bl_cmd ));
17231727 else {
17241728 serial_send (& pgm -> fd , enter_avr_mode_cmd , sizeof (enter_avr_mode_cmd ));
17251729 usleep (250 * 1000 );
17261730 serial_send (& pgm -> fd , reset_cmd , sizeof (reset_cmd ));
17271731 }
1728- imsg_error ("run %s again to continue the session\n\n" , progname );
1729- } else {
1732+ imsg_info ("run %s again to continue the session\n" , progname );
1733+ serial_close (& pgm -> fd );
1734+ return LIBAVRDUDE_EXIT_OK ;
1735+
1736+ case PK4_SNAP_MODE_PIC :
1737+ pmsg_info ("%s in %s mode detected; exiting\n" , pgmstr ,
1738+ pinfo .usbinfo .pid == bl_pid ? "bootloader" : "mplab" );
1739+ serial_close (& pgm -> fd );
1740+ return LIBAVRDUDE_EXIT_OK ;
17301741
1742+ default :
17311743 const char * partsdesc_flag = partdesc ? " -p " : "" ;
17321744 const char * partsdesc_str = partdesc ? partdesc : "" ;
17331745 const char * pgm_suffix = strchr (pgmid , '_' )? strchr (pgmid , '_' ): "" ;
1746+ msg_error ("\n" );
1747+ pmsg_error ("%s in %s mode detected\n" , pgmstr ,
1748+ pinfo .usbinfo .pid == bl_pid ? "bootloader" : "mplab" );
17341749 imsg_error ("to switch into AVR mode try\n" );
1735- imsg_error ("$ %s -c %s%s%s -P %s -x mode=avr\n\n" , progname , pgmid , partsdesc_flag , partsdesc_str , port );
1736- imsg_error ("or use MPLAB mode by using the pickit4_mplab%s programmer option:\n" , pgm_suffix );
1737- imsg_error ("$ %s -c pickit4_mplab%s%s%s -P %s\n" , progname , pgm_suffix , partsdesc_flag , partsdesc_str , port );
1750+ imsg_error ("$ %s -c %s%s%s -P %s -x mode=avr\n\n" , progname ,
1751+ pgmid , partsdesc_flag , partsdesc_str , port );
1752+ imsg_error ("or use MPLAB mode with the pickit4_mplab%s programmer:\n" , pgm_suffix );
1753+ imsg_error ("$ %s -c pickit4_mplab%s%s%s -P %s\n" , progname ,
1754+ pgm_suffix , partsdesc_flag , partsdesc_str , port );
1755+ serial_close (& pgm -> fd );
1756+ return LIBAVRDUDE_EXIT_FAIL ;
17381757 }
1739- serial_close (& pgm -> fd );
1740- return LIBAVRDUDE_EXIT_FAIL ;
17411758 }
17421759 }
17431760 }
@@ -1778,13 +1795,12 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
17781795
17791796 // Switch from AVR to PIC mode
17801797 if (mode_switch == PK4_SNAP_MODE_PIC ) {
1781- imsg_error ("switching to MPLAB mode: " );
17821798 unsigned char * resp , buf [] = { SCOPE_GENERAL , CMD3_FW_UPGRADE , 0x00 , 0x00 , 0x70 , 0x6d , 0x6a };
17831799 if (jtag3_command (pgm , buf , sizeof (buf ), & resp , "enter MPLAB mode" ) < 0 ) {
1784- msg_error ( "entering MPLAB mode failed\n" );
1800+ pmsg_error ( "switching to MPLAB mode failed\n" );
17851801 return -1 ;
17861802 }
1787- msg_error ( "MPLAB mode switch successful \n" );
1803+ msg_info ( "switched successfully to MPLAB mode \n" );
17881804 serial_close (& pgm -> fd );
17891805 return LIBAVRDUDE_EXIT_OK ;
17901806 }
0 commit comments