Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
jtagmkII.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int jtagmkII_send (PROGRAMMER *pgm, unsigned char *data, size_t len)
 
int jtagmkII_recv (PROGRAMMER *pgm, unsigned char **msg)
 
void jtagmkII_close (PROGRAMMER *pgm)
 
int jtagmkII_getsync (PROGRAMMER *pgm, int mode)
 
int jtagmkII_getparm (PROGRAMMER *pgm, unsigned char parm, unsigned char *value)
 
void jtagmkII_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_avr32_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_dw_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_pdi_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_dragon_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_dragon_dw_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_dragon_pdi_initpgm (PROGRAMMER *pgm)
 
void jtagmkII_setup (PROGRAMMER *pgm)
 
void jtagmkII_teardown (PROGRAMMER *pgm)
 

Variables

const char jtagmkII_desc []
 
const char jtagmkII_avr32_desc []
 
const char jtagmkII_dw_desc []
 
const char jtagmkII_pdi_desc []
 
const char jtagmkII_dragon_desc []
 
const char jtagmkII_dragon_dw_desc []
 
const char jtagmkII_dragon_pdi_desc []
 

Function Documentation

◆ jtagmkII_avr32_initpgm()

void jtagmkII_avr32_initpgm ( PROGRAMMER pgm)
3974{
3975 strcpy(pgm->type, "JTAGMKII_AVR32");
3976
3977 /*
3978 * mandatory functions
3979 */
3990
3991 /*
3992 * optional functions
3993 */
3997 //pgm->set_sck_period = jtagmkII_set_sck_period;
3998 //pgm->parseextparams = jtagmkII_parseextparms;
4001 pgm->page_size = 256;
4003}
static void jtagmkII_enable(PROGRAMMER *pgm)
Definition jtagmkII.c:1440
static int jtagmkII_chip_erase32(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:3176
#define PGM_FL_IS_JTAG
Definition jtagmkII.c:128
static int jtagmkII_open32(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:3334
static void jtagmkII_close32(PROGRAMMER *pgm)
Definition jtagmkII.c:3416
static int jtagmkII_paged_write32(PROGRAMMER *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int addr, unsigned int n_bytes)
Definition jtagmkII.c:3560
static int jtagmkII_paged_load32(PROGRAMMER *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int addr, unsigned int n_bytes)
Definition jtagmkII.c:3472
static void jtagmkII_print_parms(PROGRAMMER *pgm)
Definition jtagmkII.c:2718
static int jtagmkII_read_byte(PROGRAMMER *pgm, AVRPART *p, AVRMEM *mem, unsigned long addr, unsigned char *value)
Definition jtagmkII.c:2211
static int jtagmkII_program_enable_INFO(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:1145
void jtagmkII_teardown(PROGRAMMER *pgm)
Definition jtagmkII.c:186
static void jtagmkII_display(PROGRAMMER *pgm, const char *p)
Definition jtagmkII.c:2660
void jtagmkII_setup(PROGRAMMER *pgm)
Definition jtagmkII.c:176
static int jtagmkII_write_byte(PROGRAMMER *pgm, AVRPART *p, AVRMEM *mem, unsigned long addr, unsigned char data)
Definition jtagmkII.c:2392
static int jtagmkII_initialize32(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:3099
static void jtagmkII_disable(PROGRAMMER *pgm)
Definition jtagmkII.c:1424
static PROGRAMMER * pgm
Definition main.c:192
void(* display)(struct programmer_t *pgm, const char *p)
Definition libavrdude.h:644
int(* paged_write)(struct programmer_t *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int baseaddr, unsigned int n_bytes)
Definition libavrdude.h:659
char flag
Definition libavrdude.h:690
int(* open)(struct programmer_t *pgm, char *port)
Definition libavrdude.h:657
int(* read_byte)(struct programmer_t *pgm, AVRPART *p, AVRMEM *m, unsigned long addr, unsigned char *value)
Definition libavrdude.h:670
int(* paged_load)(struct programmer_t *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int baseaddr, unsigned int n_bytes)
Definition libavrdude.h:662
void(* teardown)(struct programmer_t *pgm)
Definition libavrdude.h:685
void(* enable)(struct programmer_t *pgm)
Definition libavrdude.h:645
int(* program_enable)(struct programmer_t *pgm, AVRPART *p)
Definition libavrdude.h:649
int(* write_byte)(struct programmer_t *pgm, AVRPART *p, AVRMEM *m, unsigned long addr, unsigned char value)
Definition libavrdude.h:668
void(* setup)(struct programmer_t *pgm)
Definition libavrdude.h:684
void(* print_parms)(struct programmer_t *pgm)
Definition libavrdude.h:673
char type[PGM_TYPELEN]
Definition libavrdude.h:619
int(* initialize)(struct programmer_t *pgm, AVRPART *p)
Definition libavrdude.h:643
void(* close)(struct programmer_t *pgm)
Definition libavrdude.h:658
int(* chip_erase)(struct programmer_t *pgm, AVRPART *p)
Definition libavrdude.h:650
void(* disable)(struct programmer_t *pgm)
Definition libavrdude.h:646
int page_size
Definition libavrdude.h:638

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase32(), jtagmkII_close32(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_enable(), jtagmkII_initialize32(), jtagmkII_open32(), jtagmkII_paged_load32(), jtagmkII_paged_write32(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, pgm, PGM_FL_IS_JTAG, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_close()

void jtagmkII_close ( PROGRAMMER pgm)
1813{
1814 int status;
1815 unsigned char buf[1], *resp, c;
1816
1817 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_close()\n", progname);
1818
1819 if (pgm->flag & PGM_FL_IS_PDI) {
1820 /* When in PDI mode, restart target. */
1821 buf[0] = CMND_GO;
1822 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_close(): Sending GO command: ",
1823 progname);
1824 jtagmkII_send(pgm, buf, 1);
1825
1826 status = jtagmkII_recv(pgm, &resp);
1827 if (status <= 0) {
1828 if (verbose >= 2)
1829 putc('\n', stderr);
1830 avrdude_message(MSG_INFO, "%s: jtagmkII_close(): "
1831 "timeout/error communicating with programmer (status %d)\n",
1832 progname, status);
1833 } else {
1834 if (verbose >= 3) {
1835 putc('\n', stderr);
1836 jtagmkII_prmsg(pgm, resp, status);
1837 } else if (verbose == 2)
1838 avrdude_message(MSG_NOTICE2, "0x%02x (%d bytes msg)\n", resp[0], status);
1839 c = resp[0];
1840 free(resp);
1841 if (c != RSP_OK) {
1842 avrdude_message(MSG_INFO, "%s: jtagmkII_close(): "
1843 "bad response to GO command: %s\n",
1845 }
1846 }
1847 }
1848
1849 buf[0] = CMND_SIGN_OFF;
1850 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_close(): Sending sign-off command: ",
1851 progname);
1852 jtagmkII_send(pgm, buf, 1);
1853
1854 status = jtagmkII_recv(pgm, &resp);
1855 if (status <= 0) {
1856 if (verbose >= 2)
1857 putc('\n', stderr);
1858 avrdude_message(MSG_INFO, "%s: jtagmkII_close(): "
1859 "timeout/error communicating with programmer (status %d)\n",
1860 progname, status);
1861 return;
1862 }
1863 if (verbose >= 3) {
1864 putc('\n', stderr);
1865 jtagmkII_prmsg(pgm, resp, status);
1866 } else if (verbose == 2)
1867 avrdude_message(MSG_NOTICE2, "0x%02x (%d bytes msg)\n", resp[0], status);
1868 c = resp[0];
1869 free(resp);
1870 if (c != RSP_OK) {
1871 avrdude_message(MSG_INFO, "%s: jtagmkII_close(): "
1872 "bad response to sign-off command: %s\n",
1874 }
1875
1876 serial_close(&pgm->fd);
1877 pgm->fd.ifd = -1;
1878}
int verbose
Definition main.c:198
#define MSG_INFO
Definition avrdude.h:51
char * progname
Definition main.c:61
int avrdude_message(const int msglvl, const char *format,...)
Definition main.c:93
#define MSG_NOTICE2
Definition avrdude.h:53
void free(void *)
#define PGM_FL_IS_PDI
Definition jtagmkII.c:127
static const char * jtagmkII_get_rc(unsigned int rc)
Definition jtagmkII.c:250
int jtagmkII_send(PROGRAMMER *pgm, unsigned char *data, size_t len)
Definition jtagmkII.c:423
static void jtagmkII_prmsg(PROGRAMMER *pgm, unsigned char *data, size_t len)
Definition jtagmkII.c:282
int jtagmkII_recv(PROGRAMMER *pgm, unsigned char **msg)
Definition jtagmkII.c:619
#define CMND_GO
Definition jtagmkII_private.h:85
#define RSP_OK
Definition jtagmkII_private.h:117
#define CMND_SIGN_OFF
Definition jtagmkII_private.h:77
#define serial_close
Definition libavrdude.h:576
int ifd
Definition libavrdude.h:522
union filedescriptor fd
Definition libavrdude.h:637

References avrdude_message(), CMND_GO, CMND_SIGN_OFF, programmer_t::fd, programmer_t::flag, free(), filedescriptor::ifd, jtagmkII_get_rc(), jtagmkII_prmsg(), jtagmkII_recv(), jtagmkII_send(), MSG_INFO, MSG_NOTICE2, pgm, PGM_FL_IS_PDI, progname, RSP_OK, serial_close, and verbose.

Referenced by jtagmkII_dragon_dw_initpgm(), jtagmkII_dragon_initpgm(), jtagmkII_dragon_pdi_initpgm(), jtagmkII_dw_initpgm(), jtagmkII_initpgm(), and jtagmkII_pdi_initpgm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_dragon_dw_initpgm()

void jtagmkII_dragon_dw_initpgm ( PROGRAMMER pgm)
3942{
3943 strcpy(pgm->type, "DRAGON_DW");
3944
3945 /*
3946 * mandatory functions
3947 */
3958
3959 /*
3960 * optional functions
3961 */
3967 pgm->page_size = 256;
3969}
static int jtagmkII_dragon_open_dw(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1702
void jtagmkII_close(PROGRAMMER *pgm)
Definition jtagmkII.c:1812
static int jtagmkII_paged_load(PROGRAMMER *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int addr, unsigned int n_bytes)
Definition jtagmkII.c:2110
static int jtagmkII_paged_write(PROGRAMMER *pgm, AVRPART *p, AVRMEM *m, unsigned int page_size, unsigned int addr, unsigned int n_bytes)
Definition jtagmkII.c:1975
static int jtagmkII_initialize(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:1276
#define PGM_FL_IS_DW
Definition jtagmkII.c:126
static int jtagmkII_chip_erase_dw(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:938

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase_dw(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_dragon_open_dw(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, pgm, PGM_FL_IS_DW, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_dragon_initpgm()

void jtagmkII_dragon_initpgm ( PROGRAMMER pgm)
3907{
3908 strcpy(pgm->type, "DRAGON_JTAG");
3909
3910 /*
3911 * mandatory functions
3912 */
3923
3924 /*
3925 * optional functions
3926 */
3935 pgm->page_size = 256;
3937}
static int jtagmkII_dragon_open(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1647
static int jtagmkII_parseextparms(PROGRAMMER *pgm, LISTID extparms)
Definition jtagmkII.c:1445
static int jtagmkII_set_sck_period(PROGRAMMER *pgm, double v)
Definition jtagmkII.c:2524
static int jtagmkII_chip_erase(PROGRAMMER *pgm, AVRPART *p)
Definition jtagmkII.c:887
static int jtagmkII_page_erase(PROGRAMMER *pgm, AVRPART *p, AVRMEM *m, unsigned int addr)
Definition jtagmkII.c:1880
int(* parseextparams)(struct programmer_t *pgm, LISTID xparams)
Definition libavrdude.h:683
int(* page_erase)(struct programmer_t *pgm, AVRPART *p, AVRMEM *m, unsigned int baseaddr)
Definition libavrdude.h:665
int(* set_sck_period)(struct programmer_t *pgm, double v)
Definition libavrdude.h:677

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_dragon_open(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_parseextparms(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_set_sck_period(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_erase, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, programmer_t::parseextparams, pgm, PGM_FL_IS_JTAG, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::set_sck_period, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_dragon_pdi_initpgm()

void jtagmkII_dragon_pdi_initpgm ( PROGRAMMER pgm)
4008{
4009 strcpy(pgm->type, "DRAGON_PDI");
4010
4011 /*
4012 * mandatory functions
4013 */
4024
4025 /*
4026 * optional functions
4027 */
4034 pgm->page_size = 256;
4036}
static int jtagmkII_dragon_open_pdi(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1757

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_dragon_open_pdi(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_erase, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, pgm, PGM_FL_IS_PDI, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_dw_initpgm()

void jtagmkII_dw_initpgm ( PROGRAMMER pgm)
3842{
3843 strcpy(pgm->type, "JTAGMKII_DW");
3844
3845 /*
3846 * mandatory functions
3847 */
3858
3859 /*
3860 * optional functions
3861 */
3867 pgm->page_size = 256;
3869}
static int jtagmkII_open_dw(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1538

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase_dw(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_open_dw(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, pgm, PGM_FL_IS_DW, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_getparm()

int jtagmkII_getparm ( PROGRAMMER pgm,
unsigned char  parm,
unsigned char *  value 
)
2549{
2550 int status;
2551 unsigned char buf[2], *resp, c;
2552
2553 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_getparm()\n", progname);
2554
2555 buf[0] = CMND_GET_PARAMETER;
2556 buf[1] = parm;
2557 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_getparm(): "
2558 "Sending get parameter command (parm 0x%02x): ",
2559 progname, parm);
2560 jtagmkII_send(pgm, buf, 2);
2561
2562 status = jtagmkII_recv(pgm, &resp);
2563 if (status <= 0) {
2564 if (verbose >= 2)
2565 putc('\n', stderr);
2566 avrdude_message(MSG_INFO, "%s: jtagmkII_getparm(): "
2567 "timeout/error communicating with programmer (status %d)\n",
2568 progname, status);
2569 return -1;
2570 }
2571 if (verbose >= 3) {
2572 putc('\n', stderr);
2573 jtagmkII_prmsg(pgm, resp, status);
2574 } else if (verbose == 2)
2575 avrdude_message(MSG_NOTICE2, "0x%02x (%d bytes msg)\n", resp[0], status);
2576 c = resp[0];
2577 if (c != RSP_PARAMETER) {
2578 avrdude_message(MSG_INFO, "%s: jtagmkII_getparm(): "
2579 "bad response to get parameter command: %s\n",
2581 free(resp);
2582 return -1;
2583 }
2584
2585 memcpy(value, resp + 1, 4);
2586 free(resp);
2587
2588 return 0;
2589}
#define RSP_PARAMETER
Definition jtagmkII_private.h:118
#define CMND_GET_PARAMETER
Definition jtagmkII_private.h:80

References avrdude_message(), CMND_GET_PARAMETER, free(), jtagmkII_get_rc(), jtagmkII_prmsg(), jtagmkII_recv(), jtagmkII_send(), MSG_INFO, MSG_NOTICE2, pgm, progname, RSP_PARAMETER, and verbose.

Referenced by jtagmkII_display(), jtagmkII_print_parms1(), and jtagmkII_read_byte().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_getsync()

int jtagmkII_getsync ( PROGRAMMER pgm,
int  mode 
)
675 {
676 int tries;
677#define MAXTRIES 33
678 unsigned char buf[3], *resp, c = 0xff;
679 int status;
680 unsigned int fwver, hwver;
681 int is_dragon;
682
683 avrdude_message(MSG_DEBUG, "%s: jtagmkII_getsync()\n", progname);
684
685 if (strncmp(pgm->type, "JTAG", strlen("JTAG")) == 0) {
686 is_dragon = 0;
687 } else if (strncmp(pgm->type, "DRAGON", strlen("DRAGON")) == 0) {
688 is_dragon = 1;
689 } else {
690 avrdude_message(MSG_INFO, "%s: Programmer is neither JTAG ICE mkII nor AVR Dragon\n",
691 progname);
692 return -1;
693 }
694 for (tries = 0; tries < MAXTRIES; tries++) {
695
696 /* Get the sign-on information. */
697 buf[0] = CMND_GET_SIGN_ON;
698 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_getsync(): Sending sign-on command: ",
699 progname);
700 jtagmkII_send(pgm, buf, 1);
701
702 status = jtagmkII_recv(pgm, &resp);
703 if (status <= 0) {
704 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): sign-on command: "
705 "status %d\n",
706 progname, status);
707 } else if (verbose >= 3) {
708 putc('\n', stderr);
709 jtagmkII_prmsg(pgm, resp, status);
710 } else if (verbose == 2)
711 avrdude_message(MSG_NOTICE2, "0x%02x (%d bytes msg)\n", resp[0], status);
712
713 if (status > 0) {
714 if ((c = resp[0]) == RSP_SIGN_ON) {
715 fwver = ((unsigned)resp[8] << 8) | (unsigned)resp[7];
716 PDATA(pgm)->fwver = fwver;
717 hwver = (unsigned)resp[9];
718 memcpy(PDATA(pgm)->serno, resp + 10, 6);
719 if (status > 17) {
720 avrdude_message(MSG_NOTICE, "JTAG ICE mkII sign-on message:\n");
721 avrdude_message(MSG_NOTICE, "Communications protocol version: %u\n",
722 (unsigned)resp[1]);
723 avrdude_message(MSG_NOTICE, "M_MCU:\n");
724 avrdude_message(MSG_NOTICE, " boot-loader FW version: %u\n",
725 (unsigned)resp[2]);
726 avrdude_message(MSG_NOTICE, " firmware version: %u.%02u\n",
727 (unsigned)resp[4], (unsigned)resp[3]);
728 avrdude_message(MSG_NOTICE, " hardware version: %u\n",
729 (unsigned)resp[5]);
730 avrdude_message(MSG_NOTICE, "S_MCU:\n");
731 avrdude_message(MSG_NOTICE, " boot-loader FW version: %u\n",
732 (unsigned)resp[6]);
733 avrdude_message(MSG_NOTICE, " firmware version: %u.%02u\n",
734 (unsigned)resp[8], (unsigned)resp[7]);
735 avrdude_message(MSG_NOTICE, " hardware version: %u\n",
736 (unsigned)resp[9]);
737 avrdude_message(MSG_NOTICE, "Serial number: "
738 "%02x:%02x:%02x:%02x:%02x:%02x\n",
739 PDATA(pgm)->serno[0], PDATA(pgm)->serno[1], PDATA(pgm)->serno[2], PDATA(pgm)->serno[3], PDATA(pgm)->serno[4], PDATA(pgm)->serno[5]);
740 resp[status - 1] = '\0';
741 avrdude_message(MSG_NOTICE, "Device ID: %s\n",
742 resp + 16);
743 }
744 break;
745 }
746 free(resp);
747 }
748 }
749 if (tries >= MAXTRIES) {
750 if (status <= 0)
751 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
752 "timeout/error communicating with programmer (status %d)\n",
753 progname, status);
754 else
755 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
756 "bad response to sign-on command: %s\n",
758 return -1;
759 }
760
761 PDATA(pgm)->device_descriptor_length = sizeof(struct device_descriptor);
762 /*
763 * There's no official documentation from Atmel about what firmware
764 * revision matches what device descriptor length. The algorithm
765 * below has been found empirically.
766 */
767#define FWVER(maj, min) ((maj << 8) | (min))
768 if (!is_dragon && fwver < FWVER(3, 16)) {
769 PDATA(pgm)->device_descriptor_length -= 2;
770 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
771 "S_MCU firmware version might be too old to work correctly\n",
772 progname);
773 } else if (!is_dragon && fwver < FWVER(4, 0)) {
774 PDATA(pgm)->device_descriptor_length -= 2;
775 }
776 if (mode != EMULATOR_MODE_SPI)
777 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_getsync(): Using a %u-byte device descriptor\n",
778 progname, (unsigned)PDATA(pgm)->device_descriptor_length);
779 if (mode == EMULATOR_MODE_SPI) {
780 PDATA(pgm)->device_descriptor_length = 0;
781 if (!is_dragon && fwver < FWVER(4, 14)) {
782 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): ISP functionality requires firmware "
783 "version >= 4.14\n",
784 progname);
785 return -1;
786 }
787 }
788 if (mode == EMULATOR_MODE_PDI || mode == EMULATOR_MODE_JTAG_XMEGA) {
789 if (!is_dragon && mode == EMULATOR_MODE_PDI && hwver < 1) {
790 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): Xmega PDI support requires hardware "
791 "revision >= 1\n",
792 progname);
793 return -1;
794 }
795 if (!is_dragon && fwver < FWVER(5, 37)) {
796 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): Xmega support requires firmware "
797 "version >= 5.37\n",
798 progname);
799 return -1;
800 }
801 if (is_dragon && fwver < FWVER(6, 11)) {
802 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): Xmega support requires firmware "
803 "version >= 6.11\n",
804 progname);
805 return -1;
806 }
807 }
808#undef FWVER
809
810 if(mode < 0) return 0; // for AVR32
811
812 tries = 0;
813retry:
814 /* Turn the ICE into JTAG or ISP mode as requested. */
815 buf[0] = mode;
816 if (jtagmkII_setparm(pgm, PAR_EMULATOR_MODE, buf) < 0) {
817 if (mode == EMULATOR_MODE_SPI) {
818 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
819 "ISP activation failed, trying debugWire\n",
820 progname);
823 return -1;
824 else {
825 /*
826 * We are supposed to send a CMND_RESET with the
827 * MONCOM_DISABLE flag set right now, and then
828 * restart from scratch.
829 *
830 * As this will make the ICE sign off from USB, so
831 * we risk losing our USB connection, it's easier
832 * to instruct the user to restart AVRDUDE rather
833 * than trying to cope with all this inside the
834 * program.
835 */
836 (void)jtagmkII_reset(pgm, 0x04);
837 if (tries++ > 3) {
838 avrdude_message(MSG_INFO, "%s: Failed to return from debugWIRE to ISP.\n",
839 progname);
840 return -1;
841 }
842 avrdude_message(MSG_INFO, "%s: Target prepared for ISP, signed off.\n"
843 "%s: Now retrying without power-cycling the target.\n",
845 goto retry;
846 }
847 } else {
848 return -1;
849 }
850 }
851
852 /* GET SYNC forces the target into STOPPED mode */
853 buf[0] = CMND_GET_SYNC;
854 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_getsync(): Sending get sync command: ",
855 progname);
856 jtagmkII_send(pgm, buf, 1);
857
858 status = jtagmkII_recv(pgm, &resp);
859 if (status <= 0) {
860 if (verbose >= 2)
861 putc('\n', stderr);
862 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
863 "timeout/error communicating with programmer (status %d)\n",
864 progname, status);
865 return -1;
866 }
867 if (verbose >= 3) {
868 putc('\n', stderr);
869 jtagmkII_prmsg(pgm, resp, status);
870 } else if (verbose == 2)
871 avrdude_message(MSG_NOTICE2, "0x%02x (%d bytes msg)\n", resp[0], status);
872 c = resp[0];
873 free(resp);
874 if (c != RSP_OK) {
875 avrdude_message(MSG_INFO, "%s: jtagmkII_getsync(): "
876 "bad response to set parameter command: %s\n",
878 return -1;
879 }
880
881 return 0;
882}
#define MSG_DEBUG
Definition avrdude.h:54
#define MSG_NOTICE
Definition avrdude.h:52
typedef void(GLAPIENTRYP _GLUfuncptr)(void)
static int jtagmkII_reset(PROGRAMMER *pgm, unsigned char flags)
Definition jtagmkII.c:1098
#define PDATA(pgm)
Definition jtagmkII.c:88
#define MAXTRIES
#define FWVER(maj, min)
static int jtagmkII_setparm(PROGRAMMER *pgm, unsigned char parm, unsigned char *value)
Definition jtagmkII.c:2594
#define EMULATOR_MODE_DEBUGWIRE
Definition jtagmkII_private.h:192
#define EMULATOR_MODE_JTAG_XMEGA
Definition jtagmkII_private.h:197
#define PAR_EMULATOR_MODE
Definition jtagmkII_private.h:191
#define EMULATOR_MODE_PDI
Definition jtagmkII_private.h:198
#define RSP_SIGN_ON
Definition jtagmkII_private.h:123
#define CMND_GET_SIGN_ON
Definition jtagmkII_private.h:78
#define EMULATOR_MODE_SPI
Definition jtagmkII_private.h:195
#define CMND_GET_SYNC
Definition jtagmkII_private.h:91
Definition jtagmkI_private.h:149
IGL_INLINE void mode(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &X, const int d, Eigen::Matrix< T, Eigen::Dynamic, 1 > &M)
Definition mode.cpp:14

References avrdude_message(), CMND_GET_SIGN_ON, CMND_GET_SYNC, EMULATOR_MODE_DEBUGWIRE, EMULATOR_MODE_JTAG_XMEGA, EMULATOR_MODE_PDI, EMULATOR_MODE_SPI, free(), FWVER, jtagmkII_get_rc(), jtagmkII_prmsg(), jtagmkII_recv(), jtagmkII_reset(), jtagmkII_send(), jtagmkII_setparm(), MAXTRIES, MSG_DEBUG, MSG_INFO, MSG_NOTICE, MSG_NOTICE2, PAR_EMULATOR_MODE, PDATA, pgm, progname, RSP_OK, RSP_SIGN_ON, programmer_t::type, verbose, and void().

Referenced by jtagmkII_dragon_open(), jtagmkII_dragon_open_dw(), jtagmkII_dragon_open_pdi(), jtagmkII_initialize(), jtagmkII_open(), jtagmkII_open32(), jtagmkII_open_dw(), and jtagmkII_open_pdi().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_initpgm()

void jtagmkII_initpgm ( PROGRAMMER pgm)
3807{
3808 strcpy(pgm->type, "JTAGMKII");
3809
3810 /*
3811 * mandatory functions
3812 */
3823
3824 /*
3825 * optional functions
3826 */
3835 pgm->page_size = 256;
3837}
static int jtagmkII_open(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1484

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_open(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_parseextparms(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_set_sck_period(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_erase, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, programmer_t::parseextparams, pgm, PGM_FL_IS_JTAG, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::set_sck_period, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_pdi_initpgm()

void jtagmkII_pdi_initpgm ( PROGRAMMER pgm)
3874{
3875 strcpy(pgm->type, "JTAGMKII_PDI");
3876
3877 /*
3878 * mandatory functions
3879 */
3890
3891 /*
3892 * optional functions
3893 */
3900 pgm->page_size = 256;
3902}
static int jtagmkII_open_pdi(PROGRAMMER *pgm, char *port)
Definition jtagmkII.c:1592

References programmer_t::chip_erase, programmer_t::close, programmer_t::disable, programmer_t::display, programmer_t::enable, programmer_t::flag, programmer_t::initialize, jtagmkII_chip_erase(), jtagmkII_close(), jtagmkII_disable(), jtagmkII_display(), jtagmkII_enable(), jtagmkII_initialize(), jtagmkII_open_pdi(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_write(), jtagmkII_print_parms(), jtagmkII_program_enable_INFO(), jtagmkII_read_byte(), jtagmkII_setup(), jtagmkII_teardown(), jtagmkII_write_byte(), programmer_t::open, programmer_t::page_erase, programmer_t::page_size, programmer_t::paged_load, programmer_t::paged_write, pgm, PGM_FL_IS_PDI, programmer_t::print_parms, programmer_t::program_enable, programmer_t::read_byte, programmer_t::setup, programmer_t::teardown, programmer_t::type, and programmer_t::write_byte.

+ Here is the call graph for this function:

◆ jtagmkII_recv()

int jtagmkII_recv ( PROGRAMMER pgm,
unsigned char **  msg 
)
619 {
620 unsigned short r_seqno;
621 int rv;
622
623 for (;;) {
624 if ((rv = jtagmkII_recv_frame(pgm, msg, &r_seqno)) <= 0)
625 return rv;
626 avrdude_message(MSG_DEBUG, "%s: jtagmkII_recv(): "
627 "Got message seqno %d (command_sequence == %d)\n",
628 progname, r_seqno, PDATA(pgm)->command_sequence);
629 if (r_seqno == PDATA(pgm)->command_sequence) {
630 if (++(PDATA(pgm)->command_sequence) == 0xffff)
631 PDATA(pgm)->command_sequence = 0;
632 /*
633 * We move the payload to the beginning of the buffer, to make
634 * the job easier for the caller. We have to return the
635 * original pointer though, as the caller must free() it.
636 */
637 memmove(*msg, *msg + 8, rv);
638
639 if (verbose == 4)
640 {
641 int i = rv;
642 unsigned char *p = *msg;
643 avrdude_message(MSG_TRACE, "%s: Recv: ", progname);
644
645 while (i) {
646 unsigned char c = *p;
647 if (isprint(c)) {
648 avrdude_message(MSG_TRACE, "%c ", c);
649 }
650 else {
652 }
653 avrdude_message(MSG_TRACE, "[%02x] ", c);
654
655 p++;
656 i--;
657 }
659 }
660 return rv;
661 }
662 if (r_seqno == 0xffff) {
663 avrdude_message(MSG_DEBUG, "%s: jtagmkII_recv(): got asynchronous event\n",
664 progname);
665 } else {
666 avrdude_message(MSG_NOTICE2, "%s: jtagmkII_recv(): "
667 "got wrong sequence number, %u != %u\n",
668 progname, r_seqno, PDATA(pgm)->command_sequence);
669 }
670 free(*msg);
671 }
672}
#define MSG_TRACE
Definition avrdude.h:55
static int jtagmkII_recv_frame(PROGRAMMER *pgm, unsigned char **msg, unsigned short *seqno)
Definition jtagmkII.c:472

References avrdude_message(), free(), jtagmkII_recv_frame(), MSG_DEBUG, MSG_NOTICE2, MSG_TRACE, PDATA, pgm, progname, and verbose.

Referenced by jtagmkII_avr32_reset(), jtagmkII_chip_erase(), jtagmkII_chip_erase32(), jtagmkII_close(), jtagmkII_close32(), jtagmkII_getparm(), jtagmkII_getsync(), jtagmkII_initialize32(), jtagmkII_open32(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_load32(), jtagmkII_paged_write(), jtagmkII_paged_write32(), jtagmkII_program_disable(), jtagmkII_program_enable(), jtagmkII_read_byte(), jtagmkII_read_SABaddr(), jtagmkII_reset(), jtagmkII_reset32(), jtagmkII_set_devdescr(), jtagmkII_set_xmega_params(), jtagmkII_setparm(), jtagmkII_write_byte(), and jtagmkII_write_SABaddr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_send()

int jtagmkII_send ( PROGRAMMER pgm,
unsigned char *  data,
size_t  len 
)
424{
425 unsigned char *buf;
426
427 avrdude_message(MSG_DEBUG, "\n%s: jtagmkII_send(): sending %lu bytes\n",
428 progname, (unsigned long)len);
429
430 if ((buf = malloc(len + 10)) == NULL)
431 {
432 avrdude_message(MSG_INFO, "%s: jtagmkII_send(): out of memory",
433 progname);
434 return -1;
435 }
436
437 buf[0] = MESSAGE_START;
438 u16_to_b2(buf + 1, PDATA(pgm)->command_sequence);
439 u32_to_b4(buf + 3, len);
440 buf[7] = TOKEN;
441 memcpy(buf + 8, data, len);
442
443 crcappend(buf, len + 8);
444
445 if (serial_send(&pgm->fd, buf, len + 10) != 0) {
446 avrdude_message(MSG_INFO, "%s: jtagmkII_send(): failed to send command to serial port\n",
447 progname);
448 free(buf);
449 return -1;
450 }
451
452 free(buf);
453
454 return 0;
455}
void * malloc(YYSIZE_T)
void crcappend(unsigned char *message, unsigned long length)
Definition crc16.c:76
#define TOKEN
Definition jtag3_private.h:91
static void u32_to_b4(unsigned char *b, unsigned long l)
Definition jtagmkII.c:216
static void u16_to_b2(unsigned char *b, unsigned short l)
Definition jtagmkII.c:243
#define MESSAGE_START
Definition jtagmkII_private.h:61
#define serial_send
Definition libavrdude.h:577

References avrdude_message(), crcappend(), programmer_t::fd, free(), malloc(), MESSAGE_START, MSG_DEBUG, MSG_INFO, PDATA, pgm, progname, serial_send, TOKEN, u16_to_b2(), and u32_to_b4().

Referenced by jtagmkII_avr32_reset(), jtagmkII_chip_erase(), jtagmkII_chip_erase32(), jtagmkII_close(), jtagmkII_close32(), jtagmkII_getparm(), jtagmkII_getsync(), jtagmkII_initialize32(), jtagmkII_open32(), jtagmkII_page_erase(), jtagmkII_paged_load(), jtagmkII_paged_load32(), jtagmkII_paged_write(), jtagmkII_paged_write32(), jtagmkII_program_disable(), jtagmkII_program_enable(), jtagmkII_read_byte(), jtagmkII_read_SABaddr(), jtagmkII_reset(), jtagmkII_reset32(), jtagmkII_set_devdescr(), jtagmkII_set_xmega_params(), jtagmkII_setparm(), jtagmkII_write_byte(), and jtagmkII_write_SABaddr().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_setup()

void jtagmkII_setup ( PROGRAMMER pgm)
177{
178 if ((pgm->cookie = malloc(sizeof(struct pdata))) == 0) {
179 avrdude_message(MSG_INFO, "%s: jtagmkII_setup(): Out of memory allocating private data\n",
180 progname);
181 exit(1);
182 }
183 memset(pgm->cookie, 0, sizeof(struct pdata));
184}
Definition avr910.c:50
void * cookie
Definition libavrdude.h:689

References avrdude_message(), programmer_t::cookie, malloc(), MSG_INFO, pgm, and progname.

Referenced by jtagmkII_avr32_initpgm(), jtagmkII_dragon_dw_initpgm(), jtagmkII_dragon_initpgm(), jtagmkII_dragon_pdi_initpgm(), jtagmkII_dw_initpgm(), jtagmkII_initpgm(), and jtagmkII_pdi_initpgm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ jtagmkII_teardown()

void jtagmkII_teardown ( PROGRAMMER pgm)
187{
188 free(pgm->cookie);
189}

References programmer_t::cookie, free(), and pgm.

Referenced by jtagmkII_avr32_initpgm(), jtagmkII_dragon_dw_initpgm(), jtagmkII_dragon_initpgm(), jtagmkII_dragon_pdi_initpgm(), jtagmkII_dw_initpgm(), jtagmkII_initpgm(), and jtagmkII_pdi_initpgm().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ jtagmkII_avr32_desc

const char jtagmkII_avr32_desc[]
extern

◆ jtagmkII_desc

const char jtagmkII_desc[]
extern

◆ jtagmkII_dragon_desc

const char jtagmkII_dragon_desc[]
extern

◆ jtagmkII_dragon_dw_desc

const char jtagmkII_dragon_dw_desc[]
extern

◆ jtagmkII_dragon_pdi_desc

const char jtagmkII_dragon_pdi_desc[]
extern

◆ jtagmkII_dw_desc

const char jtagmkII_dw_desc[]
extern

◆ jtagmkII_pdi_desc

const char jtagmkII_pdi_desc[]
extern