You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(75) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(70) |
Feb
(20) |
Mar
(52) |
Apr
(149) |
May
(387) |
Jun
(466) |
Jul
(133) |
Aug
(87) |
Sep
(122) |
Oct
(140) |
Nov
(185) |
Dec
(105) |
2010 |
Jan
(85) |
Feb
(45) |
Mar
(75) |
Apr
(17) |
May
(41) |
Jun
(52) |
Jul
(33) |
Aug
(29) |
Sep
(36) |
Oct
(15) |
Nov
(26) |
Dec
(34) |
2011 |
Jan
(26) |
Feb
(25) |
Mar
(26) |
Apr
(29) |
May
(20) |
Jun
(27) |
Jul
(15) |
Aug
(32) |
Sep
(13) |
Oct
(64) |
Nov
(60) |
Dec
(10) |
2012 |
Jan
(64) |
Feb
(63) |
Mar
(39) |
Apr
(43) |
May
(54) |
Jun
(11) |
Jul
(30) |
Aug
(45) |
Sep
(11) |
Oct
(70) |
Nov
(24) |
Dec
(23) |
2013 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(40) |
May
(20) |
Jun
(24) |
Jul
(36) |
Aug
(25) |
Sep
(42) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
2014 |
Jan
(29) |
Feb
(24) |
Mar
(60) |
Apr
(22) |
May
(22) |
Jun
(46) |
Jul
(11) |
Aug
(23) |
Sep
(26) |
Oct
(10) |
Nov
(14) |
Dec
(2) |
2015 |
Jan
(28) |
Feb
(47) |
Mar
(33) |
Apr
(58) |
May
(5) |
Jun
(1) |
Jul
|
Aug
(8) |
Sep
(12) |
Oct
(25) |
Nov
(58) |
Dec
(21) |
2016 |
Jan
(12) |
Feb
(40) |
Mar
(2) |
Apr
(1) |
May
(67) |
Jun
(2) |
Jul
(5) |
Aug
(36) |
Sep
|
Oct
(24) |
Nov
(17) |
Dec
(50) |
2017 |
Jan
(14) |
Feb
(16) |
Mar
(2) |
Apr
(35) |
May
(14) |
Jun
(16) |
Jul
(3) |
Aug
(3) |
Sep
|
Oct
(19) |
Nov
|
Dec
(16) |
2018 |
Jan
(55) |
Feb
(11) |
Mar
(34) |
Apr
(14) |
May
(4) |
Jun
(20) |
Jul
(39) |
Aug
(16) |
Sep
(17) |
Oct
(16) |
Nov
(20) |
Dec
(30) |
2019 |
Jan
(29) |
Feb
(24) |
Mar
(37) |
Apr
(26) |
May
(19) |
Jun
(21) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(12) |
Nov
(12) |
Dec
(12) |
2020 |
Jan
(47) |
Feb
(36) |
Mar
(54) |
Apr
(44) |
May
(37) |
Jun
(19) |
Jul
(32) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(32) |
Dec
(11) |
2021 |
Jan
(14) |
Feb
(5) |
Mar
(40) |
Apr
(32) |
May
(42) |
Jun
(31) |
Jul
(29) |
Aug
(47) |
Sep
(38) |
Oct
(17) |
Nov
(74) |
Dec
(33) |
2022 |
Jan
(11) |
Feb
(15) |
Mar
(40) |
Apr
(21) |
May
(39) |
Jun
(44) |
Jul
(19) |
Aug
(46) |
Sep
(79) |
Oct
(35) |
Nov
(21) |
Dec
(15) |
2023 |
Jan
(56) |
Feb
(13) |
Mar
(43) |
Apr
(28) |
May
(60) |
Jun
(15) |
Jul
(29) |
Aug
(28) |
Sep
(32) |
Oct
(21) |
Nov
(42) |
Dec
(39) |
2024 |
Jan
(35) |
Feb
(17) |
Mar
(28) |
Apr
(7) |
May
(14) |
Jun
(35) |
Jul
(30) |
Aug
(35) |
Sep
(30) |
Oct
(28) |
Nov
(38) |
Dec
(18) |
2025 |
Jan
(21) |
Feb
(28) |
Mar
(36) |
Apr
(35) |
May
(34) |
Jun
(58) |
Jul
(9) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: ntfreak at B. <nt...@ma...> - 2009-02-09 15:47:35
|
Author: ntfreak Date: 2009-02-09 15:47:34 +0100 (Mon, 09 Feb 2009) New Revision: 1368 Modified: trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h Log: - fix native win32 build issues Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-02-09 10:01:09 UTC (rev 1367) +++ trunk/src/jtag/jtag.c 2009-02-09 14:47:34 UTC (rev 1368) @@ -2920,7 +2920,6 @@ } } - /*-----<Cable Helper API>---------------------------------------*/ /* these Cable Helper API functions are all documented in the jtag.h header file, @@ -2965,7 +2964,6 @@ return end_state_follower; } - int tap_move_ndx( tap_state_t astate ) { /* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */ @@ -2996,7 +2994,6 @@ return ndx; } - int tap_get_tms_path( tap_state_t from, tap_state_t to ) { /* tap_move[i][j]: tap movement command to go from state i to state j @@ -3038,10 +3035,9 @@ return tms_seqs[tap_move_ndx(from)][tap_move_ndx(to)]; } - -BOOL tap_is_state_stable(tap_state_t astate) +int tap_is_state_stable(tap_state_t astate) { - BOOL is_stable; + int is_stable; /* A switch() is used because it is symbol dependent (not value dependent like an array), and can also check bounds. @@ -3054,16 +3050,16 @@ case TAP_DRPAUSE: case TAP_IRSHIFT: case TAP_IRPAUSE: - is_stable = TRUE; + is_stable = 1; break; default: - is_stable = FALSE; + is_stable = 0; } return is_stable; } -tap_state_t tap_state_transition(tap_state_t cur_state, BOOL tms) +tap_state_t tap_state_transition(tap_state_t cur_state, int tms) { tap_state_t new_state; Modified: trunk/src/jtag/jtag.h =================================================================== --- trunk/src/jtag/jtag.h 2009-02-09 10:01:09 UTC (rev 1367) +++ trunk/src/jtag/jtag.h 2009-02-09 14:47:34 UTC (rev 1368) @@ -29,7 +29,6 @@ #include "command.h" - #if 0 #define _DEBUG_JTAG_IO_ #endif @@ -38,7 +37,6 @@ #define DEBUG_JTAG_IOZ 64 #endif - /* 16 Tap States, from page 21 of ASSET InterTech, Inc.'s svf.pdf */ enum tap_state { @@ -51,10 +49,6 @@ typedef enum tap_state tap_state_t; -typedef unsigned BOOL; -#define TRUE 1 -#define FALSE 0 - typedef struct tap_transition_s { tap_state_t high; @@ -63,7 +57,6 @@ //extern tap_transition_t tap_transitions[16]; /* describe the TAP state diagram */ - /*-----<Cable Helper API>-------------------------------------------*/ /* The "Cable Helper API" is what the cable drivers can use to help implement @@ -156,7 +149,7 @@ * Function tap_is_state_stable * returns TRUE if the \a astate is stable. */ -BOOL tap_is_state_stable(tap_state_t astate); +int tap_is_state_stable(tap_state_t astate); /** * Function tap_state_transition @@ -165,7 +158,7 @@ * @param tms is either zero or non-zero, just like a real TMS line in a jtag interface. * @return tap_state_t - the next state a TAP would enter. */ -tap_state_t tap_state_transition(tap_state_t current_state, BOOL tms); +tap_state_t tap_state_transition(tap_state_t current_state, int tms); /** * Function tap_state_name @@ -175,7 +168,6 @@ /*-----</Cable Helper API>------------------------------------------*/ - extern tap_state_t cmd_queue_end_state; /* finish DR scans in dr_end_state */ extern tap_state_t cmd_queue_cur_state; /* current TAP state */ |
From: oharboe at B. <oh...@ma...> - 2009-02-09 11:01:10
|
Author: oharboe Date: 2009-02-09 11:01:09 +0100 (Mon, 09 Feb 2009) New Revision: 1367 Modified: trunk/src/target/board/x300t.cfg Log: Andi <ope...@gm...> - better dram setup Modified: trunk/src/target/board/x300t.cfg =================================================================== --- trunk/src/target/board/x300t.cfg 2009-02-03 05:59:17 UTC (rev 1366) +++ trunk/src/target/board/x300t.cfg 2009-02-09 10:01:09 UTC (rev 1367) @@ -1,5 +1,5 @@ # This is for the T-Home X300T / X301T IPTV box, -# which are based on IPTV reference designs from Kiss/Cisco KMM-32** +# which are based on IPTV reference designs from Kiss/Cisco KMM-3*** # # It has Sigma Designs SMP8634 chip. source [find target/smp8634.cfg] @@ -11,7 +11,20 @@ flash bank cfi 0xac000000 0x100000 2 2 0 proc x300t_init { } { - # Setup SDRAM config and flash mapping - # map flash to CPU address space REG_BASE_cpu_block+CPU_remap4 - mww 0x6f010 0x48000000 + # Setup SDRAM config and flash mapping + # initialize ram + mww 0xa003fffc 3 + mww 0xa003fffc 2 + mww 0xa0030000 0xE34111BA + mww 0xa003fffc 0xa4444 + mww 0xa003fffc 0 + + # remap boot vector in CPU local RAM + mww 0xa006f000 0x60000 + + # map flash to CPU address space REG_BASE_cpu_block+CPU_remap4 + mww 0x0006f010 0x48000000 + + # map flash addr to REG_BASE_cpu_block + LR_XENV_LOCATION (normally done by XOS) + mww 0x00061ff0 0x48000000 } |
From: <kc...@ma...> - 2009-02-03 06:59:56
|
Author: kc8apf Date: 2009-02-03 06:59:17 +0100 (Tue, 03 Feb 2009) New Revision: 1366 Modified: trunk/src/flash/str9xpec.c trunk/src/helper/binarybuffer.c trunk/src/jtag/amt_jtagaccel.c trunk/src/jtag/bitbang.c trunk/src/jtag/bitq.c trunk/src/jtag/dummy.c trunk/src/jtag/ft2232.c trunk/src/jtag/gw16012.c trunk/src/jtag/jlink.c trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h trunk/src/jtag/rlink/rlink.c trunk/src/jtag/usbprog.c trunk/src/jtag/vsllink.c trunk/src/jtag/zy1000.c trunk/src/svf/svf.c trunk/src/target/arm11.h trunk/src/target/arm11_dbgtap.c trunk/src/target/xscale.c trunk/src/xsvf/xsvf.c trunk/tools/xsvf_tools/svf2xsvf.py Log: - Cable driver helper API courtesy of Dick Hollenbeck <di...@so...> - Formatting changes from uncrustify Modified: trunk/src/flash/str9xpec.c =================================================================== --- trunk/src/flash/str9xpec.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/flash/str9xpec.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -111,7 +111,7 @@ return ERROR_OK; } -int str9xpec_set_instr(jtag_tap_t *tap, u32 new_instr, enum tap_state end_state) +int str9xpec_set_instr(jtag_tap_t *tap, u32 new_instr, tap_state_t end_state) { if( tap == NULL ){ return ERROR_TARGET_INVALID; Modified: trunk/src/helper/binarybuffer.c =================================================================== --- trunk/src/helper/binarybuffer.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/helper/binarybuffer.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -32,23 +32,23 @@ #include "binarybuffer.h" -const unsigned char bit_reverse_table256[] = +const unsigned char bit_reverse_table256[] = { - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF }; @@ -63,8 +63,8 @@ for (i = 0; i < num_bytes; i++) to[i] = from[i]; - - /* mask out bits that don't belong to the buffer */ + + /* mask out bits that don't belong to the buffer */ if (size % 8) { to[size / 8] &= (0xff >> (8 - (size % 8))); @@ -111,7 +111,7 @@ /* mask out bits that don't really belong to the buffer if size isn't a multiple of 8 bits */ if ((size % 8) && (i == num_bytes -1 )) { - if ((buf1[i] & ((1 << (size % 8)) - 1) & mask[i]) != + if ((buf1[i] & ((1 << (size % 8)) - 1) & mask[i]) != (buf2[i] & ((1 << (size % 8)) - 1) & mask[i])) return 1; } @@ -136,10 +136,10 @@ buf[i] = 0xff; else buf[i] = (1 << count) - 1; - + count -= 8; } - + return buf; } @@ -147,7 +147,7 @@ { int src_idx = src_start, dst_idx = dst_start; int i; - + for (i = 0; i < len; i++) { if (((src[src_idx/8] >> (src_idx % 8)) & 1) == 1) @@ -164,9 +164,9 @@ u32 flip_u32(u32 value, unsigned int num) { u32 c; - - c = (bit_reverse_table256[value & 0xff] << 24) | - (bit_reverse_table256[(value >> 8) & 0xff] << 16) | + + c = (bit_reverse_table256[value & 0xff] << 24) | + (bit_reverse_table256[(value >> 8) & 0xff] << 16) | (bit_reverse_table256[(value >> 16) & 0xff] << 8) | (bit_reverse_table256[(value >> 24) & 0xff]); @@ -179,21 +179,21 @@ int ceil_f_to_u32(float x) { u32 y; - + if (x < 0) /* return zero for negative numbers */ return 0; - + y = x; /* cut off fraction */ - + if ((x - y) > 0.0) /* if there was a fractional part, increase by one */ y++; - + return y; } char* buf_to_str(const u8 *buf, int buf_len, int radix) { - const char *DIGITS = "0123456789abcdef"; + const char *DIGITS = "0123456789ABCDEF"; float factor; char *str; int str_len; @@ -202,7 +202,7 @@ int j; /* base-256 digits */ int i; /* output digits (radix) */ - + if (radix == 16) { factor = 2.0; /* log(256) / log(16) = 2.0 */ @@ -217,10 +217,10 @@ } else return NULL; - + str_len = ceil_f_to_u32(CEIL(buf_len, 8) * factor); str = calloc(str_len + 1, 1); - + for (i = b256_len - 1; i >= 0; i--) { tmp = buf[i]; @@ -237,7 +237,7 @@ for (j = 0; j < str_len; j++) str[j] = DIGITS[(int)str[j]]; - + return str; } @@ -247,12 +247,12 @@ u32 tmp; float factor; u8 *b256_buf; - int b256_len; - + int b256_len; + int j; /* base-256 digits */ int i; /* input digits (ASCII) */ - - if (radix == 0) + + if (radix == 0) { /* identify radix, and skip radix-prefix (0, 0x or 0X) */ if ((str[0] == '0') && (str[1] && ((str[1] == 'x') || (str[1] == 'X')))) @@ -272,7 +272,7 @@ radix = 10; } } - + if (radix == 16) factor = 0.5; /* log(16) / log(256) = 0.5 */ else if (radix == 10) @@ -286,14 +286,14 @@ charbuf = malloc(str_len + 1); memcpy(charbuf, str, str_len); charbuf[str_len] = '\0'; - + /* number of digits in base-256 notation */ b256_len = ceil_f_to_u32(str_len * factor); b256_buf = calloc(b256_len, 1); - + /* go through zero terminated buffer */ for (i = 0; charbuf[i]; i++) - { + { tmp = charbuf[i]; if ((tmp >= '0') && (tmp <= '9')) tmp = (tmp - '0'); @@ -302,19 +302,19 @@ else if ((tmp >= 'A') && (tmp <= 'F')) tmp = (tmp - 'A' + 10); else continue; /* skip characters other than [0-9,a-f,A-F] */ - + if (tmp >= radix) - continue; /* skip digits invalid for the current radix */ - + continue; /* skip digits invalid for the current radix */ + for (j = 0; j < b256_len; j++) { tmp += (u32)b256_buf[j] * radix; b256_buf[j] = (u8)(tmp & 0xFF); tmp >>= 8; } - + } - + for (j = 0; j < CEIL(buf_len, 8); j++) { if (j < b256_len) @@ -326,18 +326,18 @@ /* mask out bits that don't belong to the buffer */ if (buf_len % 8) buf[(buf_len / 8)] &= 0xff >> (8 - (buf_len % 8)); - + free(b256_buf); free(charbuf); - + return i; } int buf_to_u32_handler(u8 *in_buf, void *priv, struct scan_field_s *field) { u32 *dest = priv; - + *dest = buf_get_u32(in_buf, 0, 32); - + return ERROR_OK; } Modified: trunk/src/jtag/amt_jtagaccel.c =================================================================== --- trunk/src/jtag/amt_jtagaccel.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/jtag/amt_jtagaccel.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -109,6 +109,7 @@ {{0x1f, 0x00}, {0x0c, 0x00}, {0x07, 0x00}, {0x97, 0x00}, {0x08, 0x00}, {0x00, 0x00}}, /* IRPAUSE */ }; + jtag_interface_t amt_jtagaccel_interface = { .name = "amt_jtagaccel", @@ -157,8 +158,8 @@ void amt_jtagaccel_end_state(int state) { - if (tap_move_map[state] != -1) - end_state = state; + if (tap_is_state_stable(state)) + tap_set_end_state(state); else { LOG_ERROR("BUG: %i is not a valid end state", state); @@ -187,9 +188,12 @@ u8 aw_scan_tms_5; u8 tms_scan[2]; - tms_scan[0] = amt_jtagaccel_tap_move[tap_move_map[cur_state]][tap_move_map[end_state]][0]; - tms_scan[1] = amt_jtagaccel_tap_move[tap_move_map[cur_state]][tap_move_map[end_state]][1]; + tap_state_t cur_state = tap_get_state(); + tap_state_t end_state = tap_get_end_state(); + tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][0]; + tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][1]; + aw_scan_tms_5 = 0x40 | (tms_scan[0] & 0x1f); AMT_AW(aw_scan_tms_5); if (jtag_speed > 3 || rtck_enabled) @@ -203,7 +207,7 @@ amt_wait_scan_busy(); } - cur_state = end_state; + tap_set_state(end_state); } void amt_jtagaccel_runtest(int num_cycles) @@ -212,10 +216,10 @@ u8 aw_scan_tms_5; u8 aw_scan_tms_1to4; - enum tap_state saved_end_state = end_state; + tap_state_t saved_end_state = tap_get_end_state(); /* only do a state_move when we're not already in IDLE */ - if (cur_state != TAP_IDLE) + if (tap_get_state() != TAP_IDLE) { amt_jtagaccel_end_state(TAP_IDLE); amt_jtagaccel_state_move(); @@ -235,7 +239,7 @@ } amt_jtagaccel_end_state(saved_end_state); - if (cur_state != end_state) + if (tap_get_state() != tap_get_end_state()) amt_jtagaccel_state_move(); } @@ -243,7 +247,7 @@ { int bits_left = scan_size; int bit_count = 0; - enum tap_state saved_end_state = end_state; + tap_state_t saved_end_state = tap_get_end_state(); u8 aw_tdi_option; u8 dw_tdi_scan; u8 dr_tdo; @@ -297,8 +301,8 @@ bits_left -= 8; } - tms_scan[0] = amt_jtagaccel_tap_move[tap_move_map[cur_state]][tap_move_map[end_state]][0]; - tms_scan[1] = amt_jtagaccel_tap_move[tap_move_map[cur_state]][tap_move_map[end_state]][1]; + tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][0]; + tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())][1]; aw_tms_scan = 0x40 | (tms_scan[0] & 0x1f) | (buf_get_u32(buffer, bit_count, 1) << 5); AMT_AW(aw_tms_scan); if (jtag_speed > 3 || rtck_enabled) @@ -318,7 +322,7 @@ if (jtag_speed > 3 || rtck_enabled) amt_wait_scan_busy(); } - cur_state = end_state; + tap_set_state(tap_get_end_state()); } int amt_jtagaccel_execute_queue(void) @@ -351,7 +355,7 @@ #endif if (cmd->cmd.reset->trst == 1) { - cur_state = TAP_RESET; + tap_set_state(TAP_RESET); } amt_jtagaccel_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst); break; @@ -404,26 +408,26 @@ #if PARPORT_USE_GIVEIO == 1 int amt_jtagaccel_get_giveio_access(void) { - HANDLE h; - OSVERSIONINFO version; + HANDLE h; + OSVERSIONINFO version; - version.dwOSVersionInfoSize = sizeof version; - if (!GetVersionEx( &version )) { + version.dwOSVersionInfoSize = sizeof version; + if (!GetVersionEx( &version )) { errno = EINVAL; return -1; - } - if (version.dwPlatformId != VER_PLATFORM_WIN32_NT) + } + if (version.dwPlatformId != VER_PLATFORM_WIN32_NT) return 0; - h = CreateFile( "\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); - if (h == INVALID_HANDLE_VALUE) { + h = CreateFile( "\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); + if (h == INVALID_HANDLE_VALUE) { errno = ENODEV; return -1; - } + } - CloseHandle( h ); + CloseHandle( h ); - return 0; + return 0; } #endif Modified: trunk/src/jtag/bitbang.c =================================================================== --- trunk/src/jtag/bitbang.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/jtag/bitbang.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -74,13 +74,12 @@ int bitbang_execute_queue(void); - /* The bitbang driver leaves the TCK 0 when in idle */ -void bitbang_end_state(enum tap_state state) +void bitbang_end_state(tap_state_t state) { - if (tap_move_map[state] != -1) - end_state = state; + if (tap_is_state_stable(state)) + tap_set_end_state(state); else { LOG_ERROR("BUG: %i is not a valid end state", state); @@ -88,10 +87,10 @@ } } -void bitbang_state_move(void) { - +void bitbang_state_move(void) +{ int i=0, tms=0; - u8 tms_scan = TAP_MOVE(cur_state, end_state); + u8 tms_scan = tap_get_tms_path(tap_get_state(), tap_get_end_state()); for (i = 0; i < 7; i++) { @@ -101,7 +100,7 @@ } bitbang_interface->write(CLOCK_IDLE(), tms, 0); - cur_state = end_state; + tap_set_state(tap_get_end_state()); } void bitbang_path_move(pathmove_command_t *cmd) @@ -113,41 +112,41 @@ state_count = 0; while (num_states) { - if (tap_transitions[cur_state].low == cmd->path[state_count]) + if (tap_state_transition(tap_get_state(), FALSE) == cmd->path[state_count]) { tms = 0; } - else if (tap_transitions[cur_state].high == cmd->path[state_count]) + else if (tap_state_transition(tap_get_state(), TRUE) == cmd->path[state_count]) { tms = 1; } else { - LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", jtag_state_name(cur_state), jtag_state_name(cmd->path[state_count])); + LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(tap_get_state()), tap_state_name(cmd->path[state_count])); exit(-1); } bitbang_interface->write(0, tms, 0); bitbang_interface->write(1, tms, 0); - cur_state = cmd->path[state_count]; + tap_set_state(cmd->path[state_count]); state_count++; num_states--; } bitbang_interface->write(CLOCK_IDLE(), tms, 0); - end_state = cur_state; + tap_set_end_state(tap_get_state()); } void bitbang_runtest(int num_cycles) { int i; - enum tap_state saved_end_state = end_state; + tap_state_t saved_end_state = tap_get_end_state(); /* only do a state_move when we're not already in IDLE */ - if (cur_state != TAP_IDLE) + if (tap_get_state() != TAP_IDLE) { bitbang_end_state(TAP_IDLE); bitbang_state_move(); @@ -163,14 +162,14 @@ /* finish in end_state */ bitbang_end_state(saved_end_state); - if (cur_state != end_state) + if (tap_get_state() != tap_get_end_state()) bitbang_state_move(); } static void bitbang_stableclocks(int num_cycles) { - int tms = (cur_state == TAP_RESET ? 1 : 0); + int tms = (tap_get_state() == TAP_RESET ? 1 : 0); int i; /* send num_cycles clocks onto the cable */ @@ -185,10 +184,10 @@ void bitbang_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size) { - enum tap_state saved_end_state = end_state; + tap_state_t saved_end_state = tap_get_end_state(); int bit_cnt; - if (!((!ir_scan && (cur_state == TAP_DRSHIFT)) || (ir_scan && (cur_state == TAP_IRSHIFT)))) + if (!((!ir_scan && (tap_get_state() == TAP_DRSHIFT)) || (ir_scan && (tap_get_state() == TAP_IRSHIFT)))) { if (ir_scan) bitbang_end_state(TAP_IRSHIFT); @@ -241,11 +240,11 @@ bitbang_interface->write(CLOCK_IDLE(), 0, 0); if (ir_scan) - cur_state = TAP_IRPAUSE; + tap_set_state(TAP_IRPAUSE); else - cur_state = TAP_DRPAUSE; + tap_set_state(TAP_DRPAUSE); - if (cur_state != end_state) + if (tap_get_state() != tap_get_end_state()) bitbang_state_move(); } @@ -277,7 +276,7 @@ { case JTAG_END_STATE: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("end_state: %s", jtag_state_name(cmd->cmd.end_state->end_state) ); + LOG_DEBUG("end_state: %s", tap_state_name(cmd->cmd.end_state->end_state) ); #endif if (cmd->cmd.end_state->end_state != -1) bitbang_end_state(cmd->cmd.end_state->end_state); @@ -288,13 +287,13 @@ #endif if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_reset_config & RESET_SRST_PULLS_TRST))) { - cur_state = TAP_RESET; + tap_set_state(TAP_RESET); } bitbang_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst); break; case JTAG_RUNTEST: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, jtag_state_name(cmd->cmd.runtest->end_state) ); + LOG_DEBUG("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, tap_state_name(cmd->cmd.runtest->end_state) ); #endif if (cmd->cmd.runtest->end_state != -1) bitbang_end_state(cmd->cmd.runtest->end_state); @@ -310,7 +309,7 @@ case JTAG_STATEMOVE: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("statemove end in %s", jtag_state_name(cmd->cmd.statemove->end_state)); + LOG_DEBUG("statemove end in %s", tap_state_name(cmd->cmd.statemove->end_state)); #endif if (cmd->cmd.statemove->end_state != -1) bitbang_end_state(cmd->cmd.statemove->end_state); @@ -319,13 +318,13 @@ case JTAG_PATHMOVE: #ifdef _DEBUG_JTAG_IO_ LOG_DEBUG("pathmove: %i states, end in %s", cmd->cmd.pathmove->num_states, - jtag_state_name(cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1])); + tap_state_name(cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1])); #endif bitbang_path_move(cmd->cmd.pathmove); break; case JTAG_SCAN: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("%s scan end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", jtag_state_name(cmd->cmd.scan->end_state) ); + LOG_DEBUG("%s scan end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", tap_state_name(cmd->cmd.scan->end_state) ); #endif if (cmd->cmd.scan->end_state != -1) bitbang_end_state(cmd->cmd.scan->end_state); Modified: trunk/src/jtag/bitq.c =================================================================== --- trunk/src/jtag/bitq.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/jtag/bitq.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -1,22 +1,22 @@ /*************************************************************************** - * Copyright (C) 2007 by Pavel Chromy * - * ch...@as... * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +* Copyright (C) 2007 by Pavel Chromy * +* ch...@as... * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -34,12 +34,12 @@ #include <stdlib.h> #include <unistd.h> -bitq_interface_t *bitq_interface; /* low level bit queue interface */ +bitq_interface_t* bitq_interface; /* low level bit queue interface */ -bitq_state_t bitq_in_state; /* state of input queue */ +bitq_state_t bitq_in_state; /* state of input queue */ -u8 *bitq_in_buffer; /* buffer dynamically reallocated as needed */ -unsigned long bitq_in_bufsize=32; /* min. buffer size */ +u8* bitq_in_buffer; /* buffer dynamically reallocated as needed */ +unsigned long bitq_in_bufsize = 32; /* min. buffer size */ /* * input queue processing does not use jtag_read_buffer() to avoid unnecessary overhead @@ -49,284 +49,338 @@ void bitq_in_proc(void) { /* static information preserved between calls to increase performance */ - static u8 *in_buff; /* pointer to buffer for scanned data */ - static int in_idx; /* index of byte being scanned */ - static u8 in_mask; /* mask of next bit to be scanned */ + static u8* in_buff; /* pointer to buffer for scanned data */ + static int in_idx; /* index of byte being scanned */ + static u8 in_mask; /* mask of next bit to be scanned */ - scan_field_t *field; - int tdo; + scan_field_t* field; + int tdo; /* loop through the queue */ - while (bitq_in_state.cmd) { + while (bitq_in_state.cmd) + { /* only JTAG_SCAN command may return data */ - if (bitq_in_state.cmd->type==JTAG_SCAN) { + if (bitq_in_state.cmd->type==JTAG_SCAN) + { /* loop through the fields */ - while (bitq_in_state.field_idx<bitq_in_state.cmd->cmd.scan->num_fields) { - - field=&bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx]; - if ( field->in_value || field->in_handler) { - - if (bitq_in_state.bit_pos==0) { + while (bitq_in_state.field_idx<bitq_in_state.cmd->cmd.scan->num_fields) + { + field = &bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx]; + if (field->in_value || field->in_handler) + { + if (bitq_in_state.bit_pos==0) + { /* initialize field scanning */ - in_mask=0x01; - in_idx=0; - if (field->in_value) in_buff=field->in_value; - else { + in_mask = 0x01; + in_idx = 0; + if (field->in_value) + in_buff = field->in_value; + else + { /* buffer reallocation needed? */ - if (field->num_bits>bitq_in_bufsize*8) { + if (field->num_bits>bitq_in_bufsize * 8) + { /* buffer previously allocated? */ - if (bitq_in_buffer!=NULL) { + if (bitq_in_buffer!=NULL) + { /* free it */ free(bitq_in_buffer); - bitq_in_buffer=NULL; + bitq_in_buffer = NULL; } /* double the buffer size until it fits */ - while (field->num_bits>bitq_in_bufsize*8) bitq_in_bufsize*=2; + while (field->num_bits>bitq_in_bufsize * 8) + bitq_in_bufsize *= 2; } /* if necessary, allocate buffer and check for malloc error */ - if (bitq_in_buffer==NULL && (bitq_in_buffer=malloc(bitq_in_bufsize))==NULL) { + if (bitq_in_buffer==NULL && ( bitq_in_buffer = malloc(bitq_in_bufsize) )==NULL) + { LOG_ERROR("malloc error"); exit(-1); } - in_buff=(void *)bitq_in_buffer; + in_buff = (void*) bitq_in_buffer; } } /* field scanning */ - while (bitq_in_state.bit_pos<field->num_bits) { - if ((tdo=bitq_interface->in())<0) { + while (bitq_in_state.bit_pos<field->num_bits) + { + if ( ( tdo = bitq_interface->in() )<0 ) + { #ifdef _DEBUG_JTAG_IO_ LOG_DEBUG("bitq in EOF"); #endif return; } - if (in_mask==0x01) in_buff[in_idx]=0; - if (tdo) in_buff[in_idx]|=in_mask; - if (in_mask==0x80) { - in_mask=0x01; + if (in_mask==0x01) + in_buff[in_idx] = 0; + if (tdo) + in_buff[in_idx] |= in_mask; + if (in_mask==0x80) + { + in_mask = 0x01; in_idx++; } - else in_mask<<=1; + else + in_mask <<= 1; bitq_in_state.bit_pos++; } - if (field->in_handler && bitq_in_state.status==ERROR_OK) { - bitq_in_state.status=(*field->in_handler)(in_buff, field->in_handler_priv, field); + if (field->in_handler && bitq_in_state.status==ERROR_OK) + { + bitq_in_state.status = (*field->in_handler)(in_buff, field->in_handler_priv, field); } - } - bitq_in_state.field_idx++; /* advance to next field */ - bitq_in_state.bit_pos=0; /* start next field from the first bit */ + bitq_in_state.field_idx++; /* advance to next field */ + bitq_in_state.bit_pos = 0; /* start next field from the first bit */ } - } - bitq_in_state.cmd=bitq_in_state.cmd->next; /* advance to next command */ - bitq_in_state.field_idx=0; /* preselect first field */ + bitq_in_state.cmd = bitq_in_state.cmd->next; /* advance to next command */ + bitq_in_state.field_idx = 0; /* preselect first field */ } } + void bitq_io(int tms, int tdi, int tdo_req) { bitq_interface->out(tms, tdi, tdo_req); /* check and process the input queue */ - if (bitq_interface->in_rdy()) bitq_in_proc(); + if ( bitq_interface->in_rdy() ) + bitq_in_proc(); } -void bitq_end_state(enum tap_state state) + +void bitq_end_state(tap_state_t state) { - if (state==-1) return; - if (tap_move_map[state]==-1) { + if (state==-1) + return; + + if (!tap_is_state_stable(state)) + { LOG_ERROR("BUG: %i is not a valid end state", state); exit(-1); } - end_state = state; + tap_set_end_state(state); } -void bitq_state_move(enum tap_state new_state) + +void bitq_state_move(tap_state_t new_state) { - int i=0; - u8 tms_scan; + int i = 0; + u8 tms_scan; - if (tap_move_map[cur_state]==-1 || tap_move_map[new_state]==-1) { + if (!tap_is_state_stable(tap_get_state()) || !tap_is_state_stable(new_state)) + { LOG_ERROR("TAP move from or to unstable state"); exit(-1); } - tms_scan=TAP_MOVE(cur_state, new_state); + tms_scan = tap_get_tms_path(tap_get_state(), new_state); - for (i=0; i<7; i++) { - bitq_io(tms_scan&1, 0, 0); - tms_scan>>=1; + for (i = 0; i<7; i++) + { + bitq_io(tms_scan & 1, 0, 0); + tms_scan >>= 1; } - cur_state = new_state; + tap_set_state(new_state); } -void bitq_path_move(pathmove_command_t *cmd) + +void bitq_path_move(pathmove_command_t* cmd) { int i; - for (i=0; i<=cmd->num_states; i++) { - if (tap_transitions[cur_state].low == cmd->path[i]) + for (i = 0; i<=cmd->num_states; i++) + { + if (tap_state_transition(tap_get_state(), FALSE) == cmd->path[i]) bitq_io(0, 0, 0); - else if (tap_transitions[cur_state].high == cmd->path[i]) + else if (tap_state_transition(tap_get_state(), TRUE) == cmd->path[i]) bitq_io(1, 0, 0); - else { - LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", jtag_state_name(cur_state), jtag_state_name(cmd->path[i])); + else + { + LOG_ERROR( "BUG: %s -> %s isn't a valid TAP transition", tap_state_name( + tap_get_state() ), tap_state_name(cmd->path[i]) ); exit(-1); } - cur_state = cmd->path[i]; + tap_set_state(cmd->path[i]); } - end_state = cur_state; + tap_set_end_state( tap_get_state() ); } + void bitq_runtest(int num_cycles) { int i; /* only do a state_move when we're not already in IDLE */ - if (cur_state != TAP_IDLE) bitq_state_move(TAP_IDLE); + if (tap_get_state() != TAP_IDLE) + bitq_state_move(TAP_IDLE); /* execute num_cycles */ for (i = 0; i < num_cycles; i++) bitq_io(0, 0, 0); /* finish in end_state */ - if (cur_state != end_state) bitq_state_move(end_state); + if ( tap_get_state() != tap_get_end_state() ) + bitq_state_move( tap_get_end_state() ); } -void bitq_scan_field(scan_field_t *field, int pause) + +void bitq_scan_field(scan_field_t* field, int pause) { int bit_cnt; int tdo_req; - u8 *out_ptr; - u8 out_mask; + u8* out_ptr; + u8 out_mask; - if ( field->in_value || field->in_handler) tdo_req=1; - else tdo_req=0; + if (field->in_value || field->in_handler) + tdo_req = 1; + else + tdo_req = 0; - if (field->out_value==NULL) { + if (field->out_value==NULL) + { /* just send zeros and request data from TDO */ - for (bit_cnt=field->num_bits; bit_cnt>1; bit_cnt--) + for (bit_cnt = field->num_bits; bit_cnt>1; bit_cnt--) bitq_io(0, 0, tdo_req); + bitq_io(pause, 0, tdo_req); } - else { + else + { /* send data, and optionally request TDO */ - out_mask=0x01; - out_ptr=field->out_value; - for (bit_cnt=field->num_bits; bit_cnt>1; bit_cnt--) { - bitq_io(0, ((*out_ptr)&out_mask)!=0, tdo_req); - if (out_mask==0x80) { - out_mask=0x01; + out_mask = 0x01; + out_ptr = field->out_value; + for (bit_cnt = field->num_bits; bit_cnt>1; bit_cnt--) + { + bitq_io(0, ( (*out_ptr) & out_mask )!=0, tdo_req); + if (out_mask==0x80) + { + out_mask = 0x01; out_ptr++; } - else out_mask<<=1; + else + out_mask <<= 1; } - bitq_io(pause, ((*out_ptr)&out_mask)!=0, tdo_req); + + bitq_io(pause, ( (*out_ptr) & out_mask )!=0, tdo_req); } - if (pause) { - bitq_io(0,0,0); - if (cur_state==TAP_IRSHIFT) cur_state=TAP_IRPAUSE; - else if (cur_state==TAP_DRSHIFT) cur_state=TAP_DRPAUSE; + if (pause) + { + bitq_io(0, 0, 0); + if (tap_get_state()==TAP_IRSHIFT) + tap_set_state(TAP_IRPAUSE); + else if (tap_get_state()==TAP_DRSHIFT) + tap_set_state(TAP_DRPAUSE); } } -void bitq_scan(scan_command_t *cmd) + +void bitq_scan(scan_command_t* cmd) { int i; - if (cmd->ir_scan) bitq_state_move(TAP_IRSHIFT); - else bitq_state_move(TAP_DRSHIFT); + if (cmd->ir_scan) + bitq_state_move(TAP_IRSHIFT); + else + bitq_state_move(TAP_DRSHIFT); - for (i=0; i < cmd->num_fields-1; i++) + for (i = 0; i < cmd->num_fields - 1; i++) bitq_scan_field(&cmd->fields[i], 0); + bitq_scan_field(&cmd->fields[i], 1); } + int bitq_execute_queue(void) { - jtag_command_t *cmd = jtag_command_queue; /* currently processed command */ + jtag_command_t* cmd = jtag_command_queue; /* currently processed command */ bitq_in_state.cmd = jtag_command_queue; bitq_in_state.field_idx = 0; - bitq_in_state.bit_pos = 0; - bitq_in_state.status = ERROR_OK; + bitq_in_state.bit_pos = 0; + bitq_in_state.status = ERROR_OK; - while (cmd) { - - switch (cmd->type) { - - case JTAG_END_STATE: + while (cmd) + { + switch (cmd->type) + { + case JTAG_END_STATE: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("end_state: %i", cmd->cmd.end_state->end_state); + LOG_DEBUG("end_state: %i", cmd->cmd.end_state->end_state); #endif - bitq_end_state(cmd->cmd.end_state->end_state); - break; + bitq_end_state(cmd->cmd.end_state->end_state); + break; - case JTAG_RESET: + case JTAG_RESET: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst); + LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst); #endif - if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_reset_config & RESET_SRST_PULLS_TRST))) - { - cur_state = TAP_RESET; - } - bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst); - if (bitq_interface->in_rdy()) bitq_in_proc(); - break; + if ( (cmd->cmd.reset->trst == 1) || ( cmd->cmd.reset->srst && (jtag_reset_config & RESET_SRST_PULLS_TRST) ) ) + { + tap_set_state(TAP_RESET); + } + bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst); + if ( bitq_interface->in_rdy() ) + bitq_in_proc(); + break; - case JTAG_RUNTEST: + case JTAG_RUNTEST: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state); + LOG_DEBUG("runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, cmd->cmd.runtest->end_state); #endif - bitq_end_state(cmd->cmd.runtest->end_state); - bitq_runtest(cmd->cmd.runtest->num_cycles); - break; + bitq_end_state(cmd->cmd.runtest->end_state); + bitq_runtest(cmd->cmd.runtest->num_cycles); + break; - case JTAG_STATEMOVE: + case JTAG_STATEMOVE: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state); + LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state); #endif - bitq_end_state(cmd->cmd.statemove->end_state); - bitq_state_move(end_state); /* uncoditional TAP move */ - break; + bitq_end_state(cmd->cmd.statemove->end_state); + bitq_state_move( tap_get_end_state() ); /* uncoditional TAP move */ + break; - case JTAG_PATHMOVE: + case JTAG_PATHMOVE: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); + LOG_DEBUG("pathmove: %i states, end in %i", cmd->cmd.pathmove->num_states, + cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); #endif - bitq_path_move(cmd->cmd.pathmove); - break; + bitq_path_move(cmd->cmd.pathmove); + break; - case JTAG_SCAN: + case JTAG_SCAN: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("scan end in %i", cmd->cmd.scan->end_state); - if (cmd->cmd.scan->ir_scan) LOG_DEBUG("scan ir"); - else LOG_DEBUG("scan dr"); + LOG_DEBUG("scan end in %i", cmd->cmd.scan->end_state); + if (cmd->cmd.scan->ir_scan) + LOG_DEBUG("scan ir"); + else + LOG_DEBUG("scan dr"); #endif - bitq_end_state(cmd->cmd.scan->end_state); - bitq_scan(cmd->cmd.scan); - if (cur_state != end_state) bitq_state_move(end_state); - break; + bitq_end_state(cmd->cmd.scan->end_state); + bitq_scan(cmd->cmd.scan); + if ( tap_get_state() != tap_get_end_state() ) + bitq_state_move( tap_get_end_state() ); + break; - case JTAG_SLEEP: + case JTAG_SLEEP: #ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("sleep %i", cmd->cmd.sleep->us); + LOG_DEBUG("sleep %i", cmd->cmd.sleep->us); #endif - bitq_interface->sleep(cmd->cmd.sleep->us); - if (bitq_interface->in_rdy()) bitq_in_proc(); - break; + bitq_interface->sleep(cmd->cmd.sleep->us); + if ( bitq_interface->in_rdy() ) + bitq_in_proc(); + break; - default: - LOG_ERROR("BUG: unknown JTAG command type encountered"); - exit(-1); + default: + LOG_ERROR("BUG: unknown JTAG command type encountered"); + exit(-1); } cmd = cmd->next; @@ -335,11 +389,13 @@ bitq_interface->flush(); bitq_in_proc(); - if (bitq_in_state.cmd) { + if (bitq_in_state.cmd) + { LOG_ERROR("missing data from bitq interface"); return ERROR_JTAG_QUEUE_FAILED; } - if (bitq_interface->in()>=0) { + if (bitq_interface->in()>=0) + { LOG_ERROR("extra data from bitq interface"); return ERROR_JTAG_QUEUE_FAILED; } @@ -347,11 +403,12 @@ return bitq_in_state.status; } + void bitq_cleanup(void) { if (bitq_in_buffer!=NULL) { free(bitq_in_buffer); - bitq_in_buffer=NULL; + bitq_in_buffer = NULL; } } Modified: trunk/src/jtag/dummy.c =================================================================== --- trunk/src/jtag/dummy.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/jtag/dummy.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -34,9 +34,6 @@ static int clock_count; /* count clocks in any stable state, only stable states */ - -static tap_state_t tap_state_transition(tap_state_t cur_state, int tms); - static u32 dummy_data; @@ -105,7 +102,7 @@ clock_count = 0; } - LOG_DEBUG("dummy_tap: %s", jtag_state_name(dummy_state) ); + LOG_DEBUG("dummy_tap: %s", tap_state_name(dummy_state) ); #if defined(DEBUG) if(dummy_state == TAP_DRCAPTURE) @@ -131,7 +128,7 @@ if (trst || (srst && (jtag_reset_config & RESET_SRST_PULLS_TRST))) dummy_state = TAP_RESET; - LOG_DEBUG("reset to: %s", jtag_state_name(dummy_state) ); + LOG_DEBUG("reset to: %s", tap_state_name(dummy_state) ); } static int dummy_khz(int khz, int *jtag_speed) @@ -187,106 +184,3 @@ { } - -/** - * Function tap_state_transition - * takes a current TAP state and returns the next state according to the tms value. - * - * Even though there is code to duplicate this elsewhere, we do it here a little - * differently just to get a second opinion, i.e. a verification, on state tracking - * in that other logic. Plus array lookups without index checking are no favorite thing. - * This is educational for developers new to TAP controllers. - */ -static tap_state_t tap_state_transition(tap_state_t cur_state, int tms) -{ - tap_state_t new_state; - - if (tms) - { - switch (cur_state) - { - case TAP_RESET: - new_state = cur_state; - break; - case TAP_IDLE: - case TAP_DRUPDATE: - case TAP_IRUPDATE: - new_state = TAP_DRSELECT; - break; - case TAP_DRSELECT: - new_state = TAP_IRSELECT; - break; - case TAP_DRCAPTURE: - case TAP_DRSHIFT: - new_state = TAP_DREXIT1; - break; - case TAP_DREXIT1: - case TAP_DREXIT2: - new_state = TAP_DRUPDATE; - break; - case TAP_DRPAUSE: - new_state = TAP_DREXIT2; - break; - case TAP_IRSELECT: - new_state = TAP_RESET; - break; - case TAP_IRCAPTURE: - case TAP_IRSHIFT: - new_state = TAP_IREXIT1; - break; - case TAP_IREXIT1: - case TAP_IREXIT2: - new_state = TAP_IRUPDATE; - break; - case TAP_IRPAUSE: - new_state = TAP_IREXIT2; - break; - default: - LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state ); - exit(1); - break; - } - } - else - { - switch (cur_state) - { - case TAP_RESET: - case TAP_IDLE: - case TAP_DRUPDATE: - case TAP_IRUPDATE: - new_state = TAP_IDLE; - break; - case TAP_DRSELECT: - new_state = TAP_DRCAPTURE; - break; - case TAP_DRCAPTURE: - case TAP_DRSHIFT: - case TAP_DREXIT2: - new_state = TAP_DRSHIFT; - break; - case TAP_DREXIT1: - case TAP_DRPAUSE: - new_state = TAP_DRPAUSE; - break; - case TAP_IRSELECT: - new_state = TAP_IRCAPTURE; - break; - case TAP_IRCAPTURE: - case TAP_IRSHIFT: - case TAP_IREXIT2: - new_state = TAP_IRSHIFT; - break; - case TAP_IREXIT1: - case TAP_IRPAUSE: - new_state = TAP_IRPAUSE; - break; - default: - LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state ); - exit(1); - break; - } - } - - return new_state; -} Modified: trunk/src/jtag/ft2232.c =================================================================== --- trunk/src/jtag/ft2232.c 2009-02-03 04:30:33 UTC (rev 1365) +++ trunk/src/jtag/ft2232.c 2009-02-03 05:59:17 UTC (rev 1366) @@ -1,25 +1,34 @@ /*************************************************************************** - * Copyright (C) 2004, 2006 by Dominic Rath * - * Dom...@gm... * - * * - * Copyright (C) 2008 by Spencer Oliver * - * sp...@sp... * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ +* Copyright (C) 2004, 2006 by Dominic Rath * +* Dom...@gm... * +* * +* Copyright (C) 2008 by Spencer Oliver * +* sp...@sp... * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + + +/* This code uses information contained in the MPSSE specification which was + * found here: + * http://www.ftdichip.com/Documents/AppNotes/AN2232C-01_MPSSE_Cmnd.pdf + * Hereafter this is called the "MPSSE Spec". + */ + + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -64,17 +73,17 @@ int ft2232_execute_queue(void); int ft2232_speed(int speed); -int ft2232_speed_div(int speed, int *khz); -int ft2232_khz(int khz, int *jtag_speed); -int ft2232_register_commands(struct command_context_s *cmd_ctx); +int ft2232_speed_div(int speed, int* khz); +int ft2232_khz(int khz, int* jtag_speed); +int ft2232_register_commands(struct command_context_s* cmd_ctx); int ft2232_init(void); int ft2232_quit(void); -int ft2232_handle_device_desc_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -int ft2232_handle_serial_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -int ft2232_handle_layout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -int ft2232_handle_vid_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -int ft2232_handle_latency_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); +int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc); +int ft2232_handle_serial_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc); +int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc); +int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc); +int ft2232_handle_latency_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc); /** @@ -85,36 +94,36 @@ * @param num_cycles is the count of clocks cycles to send. * @return int - ERROR_OK or ERROR_JTAG_QUEUE_FAILED */ -static int ft2232_stableclocks(int num_cycles, jtag_command_t *cmd); +static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd); -char *ft2232_device_desc = NULL; -char *ft2232_serial = NULL; -char *ft2232_layout = NULL; +char* ft2232_device_desc = NULL; +char* ft2232_serial = NULL; +char* ft2232_layout = NULL; unsigned char ft2232_latency = 2; -#define MAX_USB_IDS 8 +#define MAX_USB_IDS 8 /* vid = pid = 0 marks the end of the list */ -static u16 ft2232_vid[MAX_USB_IDS+1] = { 0x0403, 0 }; -static u16 ft2232_pid[MAX_USB_IDS+1] = { 0x6010, 0 }; +static u16 ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 }; +static u16 ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 }; typedef struct ft2232_layout_s { char* name; - int(*init)(void); - void(*reset)(int trst, int srst); - void(*blink)(void); + int (*init)(void); + void (*reset)(int trst, int srst); + void (*blink)(void); } ft2232_layout_t; /* init procedures for supported layouts */ -int usbjtag_init(void); -int jtagkey_init(void); -int olimex_jtag_init(void); -int flyswatter_init(void); -int turtle_init(void); -int comstick_init(void); -int stm32stick_init(void); -int axm0432_jtag_init(void); +int usbjtag_init(void); +int jtagkey_init(void); +int olimex_jtag_init(void); +int flyswatter_init(void); +int turtle_init(void); +int comstick_init(void); +int stm32stick_init(void); +int axm0432_jtag_init(void); /* reset procedures for supported layouts */ void usbjtag_reset(int trst, int srst); @@ -130,68 +139,68 @@ void olimex_jtag_blink(void); void turtle_jtag_blink(void); -ft2232_layout_t ft2232_layouts[] = +ft2232_layout_t ft2232_layouts[] = { - {"usbjtag", usbjtag_init, usbjtag_reset, NULL}, - {"jtagkey", jtagkey_init, jtagkey_reset, NULL}, - {"jtagkey_prototype_v1", jtagkey_init, jtagkey_reset, NULL}, - {"oocdlink", jtagkey_init, jtagkey_reset, NULL}, - {"signalyzer", usbjtag_init, usbjtag_reset, NULL}, - {"evb_lm3s811", usbjtag_init, usbjtag_reset, NULL}, - {"olimex-jtag", olimex_jtag_init, olimex_jtag_reset, olimex_jtag_blink}, - {"flyswatter", flyswatter_init, flyswatter_reset, NULL}, - {"turtelizer2", turtle_init, turtle_reset, turtle_jtag_blink}, - {"comstick", comstick_init, comstick_reset, NULL}, - {"stm32stick", stm32stick_init, stm32stick_reset, NULL}, - {"axm0432_jtag", axm0432_jtag_init, axm0432_jtag_reset, NULL}, - {NULL, NULL, NULL}, + { "usbjtag", usbjtag_init, usbjtag_reset, NULL }, + { "jtagkey", jtagkey_init, jtagkey_reset, NULL }, + { "jtagkey_prototype_v1", jtagkey_init, jtagkey_reset, NULL }, + { "oocdlink", jtagkey_init, jtagkey_reset, NULL }, + { "signalyzer", usbjtag_init, usbjtag_reset, NULL }, + { "evb_lm3s811", usbjtag_init, usbjtag_reset, NULL }, + { "olimex-jtag", olimex_jtag_init, olimex_jtag_reset, olimex_jtag_blink }, + { "flyswatter", flyswatter_init, flyswatter_reset, NULL }, + { "turtelizer2", turtle_init, turtle_reset, turtle_jtag_blink }, + { "comstick", comstick_init, comstick_reset, NULL }, + { "stm32stick", stm32stick_init, stm32stick_reset, NULL }, + { "axm0432_jtag", axm0432_jtag_init, axm0432_jtag_reset, NULL }, + { NULL, NULL, NULL }, }; -static u8 nTRST, nTRSTnOE, nSRST, nSRSTnOE; +static u8 nTRST, nTRSTnOE, nSRST, nSRSTnOE; -static ft2232_layout_t *layout; -static u8 low_output = 0x0; -static u8 low_direction = 0x0; -static u8 high_output = 0x0; -static u8 high_direction = 0x0; +static ft2232_layout_t* layout; +static u8 low_output = 0x0; +static u8 low_direction = 0x0; +static u8 high_output = 0x0; +static u8 high_direction = 0x0; #if BUILD_FT2232_FTD2XX == 1 -static FT_HANDLE ftdih = NULL; +static FT_HANDLE ftdih = NULL; #elif BUILD_FT2232_LIBFTDI == 1 static struct ftdi_context ftdic; #endif -static jtag_command_t *first_unsent; /* next command that has to be sent */ -static int require_send; +static jtag_command_t* first_unsent; /* next command that has to be sent */ +static int require_send; -static u8 *ft2232_buffer = NULL; -static int ft2232_buffer_size = 0; -static int ft2232_read_pointer = 0; -static int ft2232_expect_read = 0; +static u8* ft2232_buffer = NULL; +static int ft2232_buffer_size = 0; +static int ft2232_read_pointer = 0; +static int ft2232_expect_read = 0; -#define FT2232_BUFFER_SIZE 131072 -#define BUFFER_ADD ft2232_buffer[ft2232_buffer_size++] -#define BUFFER_READ ft2232_buffer[ft2232_read_pointer++] +#define FT2232_BUFFER_SIZE 131072 +#define BUFFER_ADD ft2232_buffer[ft2232_buffer_size++] +#define BUFFER_READ ft2232_buffer[ft2232_read_pointer++] jtag_interface_t ft2232_interface = { - .name = "ft2232", + .name = "ft2232", .execute_queue = ft2232_execute_queue, - .speed = ft2232_speed, + .speed = ft2232_speed, .speed_div = ft2232_speed_div, - .khz = ft2232_khz, - .register_commands = ft2232_register_commands, + .khz = ft2232_khz, + .register_commands = ft2232_register_commands, .init = ft2232_init, .quit = ft2232_quit, }; -int ft2232_write(u8 *buf, int size, u32* bytes_written) +int ft2232_write(u8* buf, int size, u32* bytes_written) { #if BUILD_FT2232_FTD2XX == 1 FT_STATUS status; - DWORD dw_bytes_written; - if ((status = FT_Write(ftdih, buf, size, &dw_bytes_written)) != FT_OK) + DWORD dw_bytes_written; + if ( ( status = FT_Write(ftdih, buf, size, &dw_bytes_written) ) != FT_OK ) { *bytes_written = dw_bytes_written; LOG_ERROR("FT_Write returned: %lu", status); @@ -204,10 +213,10 @@ } #elif BUILD_FT2232_LIBFTDI == 1 int retval; - if ((retval = ftdi_write_data(&ftdic, buf, size)) < 0) + if ( ( retval = ftdi_write_data(&ftdic, buf, size) ) < 0 ) { *bytes_written = 0; - LOG_ERROR("ftdi_write_data: %s", ftdi_get_error_string(&ftdic)); + LOG_ERROR( "ftdi_write_data: %s", ftdi_get_error_string(&ftdic) ); return ERROR_JTAG_DEVICE_ERROR; } else @@ -218,18 +227,19 @@ #endif } + int ft2232_read(u8* buf, int size, u32* bytes_read) { #if BUILD_FT2232_FTD2XX == 1 - DWORD dw_bytes_read; + DWORD dw_bytes_read; FT_STATUS status; - int timeout = 5; + int timeout = 5; *bytes_read = 0; - while ((*bytes_read < size) && timeout--) + while ( (*bytes_read < size) && timeout-- ) { - if ((status = FT_Read(ftdih, buf + *bytes_read, size - - *bytes_read, &dw_bytes_read)) != FT_OK) + if ( ( status = FT_Read(ftdih, buf + *bytes_read, size - + *bytes_read, &dw_bytes_read) ) != FT_OK ) { *bytes_read = 0; LOG_ERROR("FT_Read returned: %lu", status); @@ -237,21 +247,23 @@ } *bytes_read += dw_bytes_read; } + #elif BUILD_FT2232_LIBFTDI == 1 int retval; int timeout = 100; *bytes_read = 0; - while ((*bytes_read < size) && timeout--) + while ( (*bytes_read < size) && timeout-- ) { - if ((retval = ftdi_read_data(&ftdic, buf + *bytes_read, size - *bytes_read)) < 0) + if ( ( retval = ftdi_read_data(&ftdic, buf + *bytes_read, size - *bytes_read) ) < 0 ) { *bytes_read = 0; - LOG_ERROR("ftdi_read_data: %s", ftdi_get_error_string(&ftdic)); + LOG_ERROR( "ftdi_read_data: %s", ftdi_get_error_string(&ftdic) ); return ERROR_JTAG_DEVICE_ERROR; } *bytes_read += retval; } + #endif if (*bytes_read < size) @@ -263,18 +275,19 @@ return ERROR_OK; } + int ft2232_speed(int speed) { - u8 buf[3]; + u8 buf[3]; int retval; u32 bytes_written; - buf[0] = 0x86; /* command "set divisor" */ - buf[1] = speed & 0xff; /* valueL (0=6MHz, 1=3MHz, 2=2.0MHz, ...*/ - buf[2] = (speed >> 8) & 0xff; /* valueH */ + buf[0] = 0x86; /* command "set divisor" */ + buf[1] = speed & 0xff; /* valueL (0=6MHz, 1=3MHz, 2=2.0MHz, ...*/ + buf[2] = (speed >> 8) & 0xff; /* valueH */ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]); - if (((retval = ft2232_write(buf, 3, &bytes_written)) != ERROR_OK) || (bytes_written != 3)) + if ( ( ( retval = ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) ) { LOG_ERROR("couldn't set FT2232 TCK speed"); return retval; @@ -283,24 +296,27 @@ return ERROR_OK; } -int ft2232_speed_div(int speed, int *khz) + +int ft2232_speed_div(int speed, int* khz) { /* Take a look in the FT2232 manual, * AN2232C-01 Command Processor for * MPSSE and MCU Host Bus. Chapter 3.8 */ - *khz = 6000 / (1+speed); + *khz = 6000 / (1 + speed); return ERROR_OK; } -int ft2232_khz(int khz, int *jtag_speed) + +int ft2232_khz(int khz, int* jtag_speed) { if (khz==0) { LOG_ERROR("RCLK not supported"); return ERROR_FAIL; } + /* Take a look in the FT2232 manual, * AN2232C-01 Command Processor for * MPSSE and MCU Host Bus. Chapter 3.8 @@ -333,25 +349,27 @@ return ERROR_OK; } -int ft2232_register_commands(struct command_context_s *cmd_ctx) + +int ft2232_register_commands(struct command_context_s* cmd_ctx) { register_command(cmd_ctx, NULL, "ft2232_device_desc", ft2232_handle_device_desc_command, - COMMAND_CONFIG, "the USB device description of the FTDI FT2232 device"); + COMMAND_CONFIG, "the USB device description of the FTDI FT2232 device"); register_command(cmd_ctx, NULL, "ft2232_serial", ft2232_handle_serial_command, - COMMAND_CONFIG, "the serial number of the FTDI FT2232 device"); + COMMAND_CONFIG, "the serial number of the FTDI FT2232 device"); register_command(cmd_ctx, NULL, "ft2232_layout", ft2232_handle_layout_command, - COMMAND_CONFIG, "the layout of the FT2232 GPIO signals used to control output-enables and reset signals"); + COMMAND_CONFIG, "the layout of the FT2232 GPIO signals used to control output-enables and reset signals"); register_command(cmd_ctx, NULL, "ft2232_vid_pid", ft2232_handle_vid_pid_command, - COMMAND_CONFIG, "the vendor ID and product ID of the FTDI FT2232 device"); + COMMAND_CONFIG, "the vendor ID and product ID of the FTDI FT2232 device"); register_command(cmd_ctx, NULL, "ft2232_latency", ft2232_handle_latency_command, - COMMAND_CONFIG, "set the FT2232 latency timer to a new value"); + COMMAND_CONFIG, "set the FT2232 latency timer to a new value"); return ERROR_OK; } -void ft2232_end_state(enum tap_state state) + +void ft2232_end_state(tap_state_t state) { - if (tap_move_map[state] != -1) - end_state = state; + if (tap_is_state_stable(state)) + tap_set_end_state(state); else { LOG_ERROR("BUG: %i is not a valid end state", state); @@ -359,13 +377,14 @@ } } + void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size) { int num_bytes = (scan_size + 7) / 8; int bits_left = scan_size; - int cur_byte = 0; + int cur_byte = 0; - while(num_bytes-- > 1) + while (num_bytes-- > 1) { buffer[cur_byte] = BUFFER_READ; cur_byte++; @@ -379,15 +398,15 @@ buffer[cur_byte] = BUFFER_READ >> 1; } - buffer[cur_byte] = (buffer[cur_byte] | ((BUFFER_READ & 0x02) << 6)) >> (8 - bits_left); - + buffer[cur_byte] = ( buffer[cur_byte] | ( (BUFFER_READ & 0x02) << 6 ) ) >> (8 - bits_left); } + void ft2232_debug_dump_buffer(void) { - int i; - char line[256]; - char *line_p = line; + int i; + char line[256]; + char* line_p = line; for (i = 0; i < ft2232_buffer_size; i++) { @@ -403,19 +422,20 @@ LOG_DEBUG("%s", line); } -int ft2232_send_and_recv(jtag_command_t *first, jtag_command_t *last) + +int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last) { - jtag_command_t *cmd; - u8 *buffer; - int scan_size; - enum scan_type type; - int retval; - u32 bytes_written; - u32 bytes_read; + jtag_command_t* cmd; + u8* buffer; + int scan_size; + enum scan_type type; + int retval; + u32 bytes_written; + u32 bytes_read; #ifdef _DEBUG_USB_IO_ - struct timeval start, inter, inter2, end; - struct timeval d_inter, d_inter2, d_end; + struct timeval start, inter, inter2, end; + struct timeval d_inter, d_inter2, d_end; #endif #ifdef _DEBUG_USB_COMMS_ @@ -427,7 +447,7 @@ gettimeofday(&start, NULL); #endif - if ((retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written)) != ERROR_OK) + if ( ( retval = ft2232_write(ft2232_buffer, ft2232_buffer_size, &bytes_written) ) != ERROR_OK ) { LOG_ERROR("couldn't write MPSSE commands to FT2232"); return retval; @@ -446,7 +466,7 @@ gettimeofday(&inter2, NULL); #endif - if ((retval = ft2232_read(ft2232_buffer, ft2232_expect_read, &bytes_read)) != ERROR_OK) + if ( ( retval = ft2232_read(ft2232_buffer, ft2232_expect_read, &bytes_read) ) != ERROR_OK ) { LOG_ERROR("couldn't read from FT2232"); return retval; @@ -459,15 +479,18 @@ timeval_subtract(&d_inter2, &inter2, &start); timeval_subtract(&d_end, &end, &start); - LOG_INFO("inter: %i.%06i, inter2: %i.%06i end: %i.%06i", d_inter.tv_sec, d_inter.tv_usec, d_inter2.tv_sec, d_inter2.tv_usec, d_end.tv_sec, d_end.tv_usec); + LOG_INFO("inter: %i.%06i, inter2: %i.%06i end: %i.%06i", d_inter.tv_sec, d_inter.tv_usec, d_inter2.tv_sec, + d_inter2.tv_usec, d_end.tv_sec, + d_end.tv_usec); #endif - ft2232_buffer_size = bytes_read; if (ft2232_expect_read != ft2232_buffer_size) { - LOG_ERROR("ft2232_expect_read (%i) != ft2232_buffer_size (%i) (%i retries)", ft2232_expect_read, ft2232_buffer_size, 100 - timeout); + LOG_ERROR("ft2232_expect_read (%i) != ft2232_buffer_size (%i) (%i retries)", ft2232_expect_read, + ft2232_buffer_size, + 100 - timeout); ft2232_debug_dump_buffer(); exit(-1); @@ -479,7 +502,7 @@ #endif } - ft2232_expect_read = 0; + ft2232_expect_read = 0; ft2232_read_pointer = 0; /* return ERROR_OK, unless a jtag_read_buffer returns a failed check @@ -492,21 +515,23 @@ { switch (cmd->type) { - case JTAG_SCAN: - type = jtag_scan_type(cmd->cmd.scan); - if (type != SCAN_OUT) - { - scan_size = jtag_scan_size(cmd->cmd.scan); - buffer = calloc(CEIL(scan_size, 8), 1); - ft2232_read_scan(type, buffer, scan_size); - if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK) - retval = ERROR_JTAG_QUEUE_FAILED; - free(buffer); - } - break; - default: - break; + case JTAG_SCAN: + type = jtag_scan_type(cmd->cmd.scan); + if (type != SCAN_OUT) + { + scan_size = jtag_scan_size(cmd->cmd.scan); + buffer = calloc(CEIL(scan_size, 8), 1); + ft2232_read_scan(type, buffer, scan_size); + if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK) + retval = ERROR_JTAG_QUEUE_FAILED; + free(buffer); + } + break; + + default: + break; } + cmd = cmd->next; } @@ -515,71 +540,76 @@ return retval; } -void ft2232_add_pathmove(pathmove_command_t *cmd) + +void ft2232_add_pathmove(pathmove_command_t* cmd) { int num_states = cmd->num_states; - u8 tms_byte; - int state_count; + int state_count = 0; - state_count = 0; while (num_states) { + u8 tms_byte = 0; /* zero this on each MPSSE batch */ + int bit_count = 0; int nu... [truncated message content] |
From: <kc...@ma...> - 2009-02-03 05:30:48
|
Author: kc8apf Date: 2009-02-03 05:30:33 +0100 (Tue, 03 Feb 2009) New Revision: 1365 Added: trunk/Doxyfile Log: Doxygen config file Added: trunk/Doxyfile =================================================================== --- trunk/Doxyfile 2009-02-03 04:27:48 UTC (rev 1364) +++ trunk/Doxyfile 2009-02-03 04:30:33 UTC (rev 1365) @@ -0,0 +1,1364 @@ +# Doxyfile 1.5.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = OpenOCD + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, +# and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text " + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.h \ + *.c + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = doxygen + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = src/target \ + src/pld \ + src/xsvf \ + src/jtag \ + src/flash \ + src/flash/at91sam7x \ + src/helper \ + src/server + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = *.h + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is enabled by default, which results in a transparent +# background. Warning: Depending on the platform used, enabling this option +# may lead to badly anti-aliased labels on the edges of a graph (i.e. they +# become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO Property changes on: trunk/Doxyfile ___________________________________________________________________ Name: svn:eol-style + native |
From: <kc...@ma...> - 2009-02-03 05:27:56
|
Author: kc8apf Date: 2009-02-03 05:27:48 +0100 (Tue, 03 Feb 2009) New Revision: 1364 Added: trunk/tools/uncrustify1.sh trunk/uncrustify.cfg Log: Add uncrustify config file and helper script Added: trunk/tools/uncrustify1.sh =================================================================== --- trunk/tools/uncrustify1.sh 2009-01-28 13:08:06 UTC (rev 1363) +++ trunk/tools/uncrustify1.sh 2009-02-03 04:27:48 UTC (rev 1364) @@ -0,0 +1,30 @@ +#!/bin/sh +# Run the beautifier "Uncrustify" on a single file. +# Because the file "uncrustify.cfg" only exists in the top level of the project +# you should run this script from there so this script can find your uncrustify.cfg file. + + +UNCRUSTIFYTMP=/tmp/uncrustify.tmp + + +if [ ! -f uncrustify.cfg ]; then + echo "unable to find uncrustify.cfg, aborting" + exit 1 +fi + +UNCRUSTIFYBIN=`which uncrustify` + +if [ "$UNCRUSTIFYBIN" = "" ]; then + echo "you must specify uncrustify in your PATH, I cannot find it" + exit 2 +fi + +if [ $# -lt 1 ]; then + echo "Usage $0 <filename .c or .h>" + exit 3 +fi + +uncrustify -c uncrustify.cfg <$1 >$UNCRUSTIFYTMP + +# you can comment this out while tuning the uncrustify.cfg file: +mv $UNCRUSTIFYTMP $1 Property changes on: trunk/tools/uncrustify1.sh ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + text/x-sh Name: svn:eol-style + native Added: trunk/uncrustify.cfg =================================================================== --- trunk/uncrustify.cfg 2009-01-28 13:08:06 UTC (rev 1363) +++ trunk/uncrustify.cfg 2009-02-03 04:27:48 UTC (rev 1364) @@ -0,0 +1,1161 @@ +# Uncrustify 0.51+svn + +# +# General options +# + +# The type of line endings +newlines = auto # auto/lf/crlf/cr + +# The original size of tabs in the input +input_tab_size = 4 # number + +# The size of tabs in the output (only used if align_with_tabs=true) +output_tab_size = 4 # number + +# The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn) +string_escape_char = 92 # number + +# Alternate string escape char for Pawn. Only works right before the quote char. +string_escape_char2 = 0 # number + +# +# Indenting +# + +# The number of columns to indent per level. +# Usually 2, 3, 4, or 8. +indent_columns = 4 # number + +# How to use tabs when indenting code +# 0=spaces only +# 1=indent with tabs, align with spaces +# 2=indent and align with tabs +indent_with_tabs = 1 # number + +# Whether to indent strings broken by '\' so that they line up +indent_align_string = true # false/true + +# The number of spaces to indent multi-line XML strings. +# Requires indent_align_string=True +indent_xml_string = 0 # number + +# Spaces to indent '{' from level +indent_brace = 0 # number + +# Whether braces are indented to the body level +indent_braces = false # false/true + +# Disabled indenting function braces if indent_braces is true +indent_braces_no_func = false # false/true + +# Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc. +indent_brace_parent = false # false/true + +# Whether the 'namespace' body is indented +indent_namespace = false # false/true + +# Whether the 'extern "C"' body is indented +indent_extern = false # false/true + +# Whether the 'class' body is indented +indent_class = true # false/true + +# Whether to indent the stuff after a leading class colon +indent_class_colon = false # false/true + +# False=treat 'else\nif' as 'else if' for indenting purposes +# True=indent the 'if' one level +indent_else_if = true # false/true + +# Amount to indent variable declarations after a open brace. neg=relative, pos=absolute +indent_var_def_blk = 0 # number + +# True: indent continued function call parameters one indent level +# False: align parameters under the open paren +indent_func_call_param = true # false/true + +# Same as indent_func_call_param, but for function defs +indent_func_def_param = true # false/true + +# Same as indent_func_call_param, but for function protos +indent_func_proto_param = true # false/true + +# Same as indent_func_call_param, but for class declarations +indent_func_class_param = false # false/true + +# Same as indent_func_call_param, but for class variable constructors +indent_func_ctor_var_param = false # false/true + +# Same as indent_func_call_param, but for templates +indent_template_param = false # false/true + +# Double the indent for indent_func_xxx_param options +indent_func_param_double = true # false/true + +# Indentation column for standalone 'const' function decl/proto qualifier +indent_func_const = 0 # number + +# Indentation column for standalone 'throw' function decl/proto qualifier +indent_func_throw = 0 # number + +# The number of spaces to indent a continued '->' or '.' +# Usually set to 0, 1, or indent_columns. +indent_member = 0 # number + +# Spaces to indent single line ('//') comments on lines before code +indent_sing_line_comments = 0 # number + +# If set, will indent trailing single line ('//') comments relative +# to the code instead of trying to keep the same absolute column +indent_relative_single_line_comments = false # false/true + +# Spaces to indent 'case' from 'switch' +# Usually 0 or indent_columns. +indent_switch_case = 0 # number + +# Spaces to shift the 'case' line, without affecting any other lines +# Usually 0. +indent_case_shift = 0 # number + +# Spaces to indent '{' from 'case'. +# By default, the brace will appear under the 'c' in case. +# Usually set to 0 or indent_columns. +indent_case_brace = 0 # number + +# Whether to indent comments found in first column +indent_col1_comment = false # false/true + +# How to indent goto labels +# >0 : absolute column where 1 is the leftmost column +# <=0 : subtract from brace indent +indent_label = 1 # number + +# Same as indent_label, but for access specifiers that are followed by a colon +indent_access_spec = 1 # number + +# Indent the code after an access specifier by one level. +# If set, this option forces 'indent_access_spec=0' +indent_access_spec_body = false # false/true + +# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended) +indent_paren_nl = false # false/true + +# Controls the indent of a close paren after a newline. +# 0: Indent to body level +# 1: Align under the open paren +# 2: Indent to the brace level +indent_paren_close = 0 # number + +# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren +indent_comma_paren = false # false/true + +# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren +indent_bool_paren = false # false/true + +# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended) +indent_square_nl = false # false/true + +# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies +indent_preserve_sql = false # false/true + +# Align continued statements at the '='. Default=True +# If FALSE or the '=' is followed by a newline, the next line is indent one tab. +indent_align_assign = true # false/true + +# +# Spacing options +# + +# Add or remove space around arithmetic operator '+', '-', '/', '*', etc +sp_arith = force # ignore/add/remove/force + +# Add or remove space around assignment operator '=', '+=', etc +sp_assign = force # ignore/add/remove/force + +# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign. +sp_before_assign = ignore # ignore/add/remove/force + +# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign. +sp_after_assign = ignore # ignore/add/remove/force + +# Add or remove space around assignment '=' in enum +sp_enum_assign = force # ignore/add/remove/force + +# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign. +sp_enum_before_assign = ignore # ignore/add/remove/force + +# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign. +sp_enum_after_assign = ignore # ignore/add/remove/force + +# Add or remove space around boolean operators '&&' and '||' +sp_bool = ignore # ignore/add/remove/force + +# Add or remove space around compare operator '<', '>', '==', etc +sp_compare = ignore # ignore/add/remove/force + +# Add or remove space inside '(' and ')' +sp_inside_paren = ignore # ignore/add/remove/force + +# Add or remove space between nested parens +sp_paren_paren = add # ignore/add/remove/force + +# Whether to balance spaces inside nested parens +sp_balance_nested_parens = true # false/true + +# Add or remove space between ')' and '{' +sp_paren_brace = add # ignore/add/remove/force + +# Add or remove space before pointer star '*' +sp_before_ptr_star = remove # ignore/add/remove/force + +# Add or remove space before pointer star '*' that isn't followed by a variable name +# If set to 'ignore', sp_before_ptr_star is used instead. +sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force + +# Add or remove space between pointer stars '*' +sp_between_ptr_star = remove # ignore/add/remove/force + +# Add or remove space after pointer star '*', if followed by a word. +sp_after_ptr_star = add # ignore/add/remove/force + +# Add or remove space after a pointer star '*', if followed by a func proto/def. +sp_after_ptr_star_func = add # ignore/add/remove/force + +# Add or remove space before a pointer star '*', if followed by a func proto/def. +sp_before_ptr_star_func = remove # ignore/add/remove/force + +# Add or remove space before a reference sign '&' +sp_before_byref = remove # ignore/add/remove/force + +# Add or remove space before a reference sign '&' that isn't followed by a variable name +# If set to 'ignore', sp_before_byref is used instead. +sp_before_unnamed_byref = ignore # ignore/add/remove/force + +# Add or remove space after reference sign '&', if followed by a word. +sp_after_byref = force # ignore/add/remove/force + +# Add or remove space after a reference sign '&', if followed by a func proto/def. +sp_after_byref_func = ignore # ignore/add/remove/force + +# Add or remove space before a reference sign '&', if followed by a func proto/def. +sp_before_byref_func = ignore # ignore/add/remove/force + +# Add or remove space between type and word +sp_after_type = force # ignore/add/remove/force + +# Add or remove space in 'template <' vs 'template<'. +# If set to ignore, sp_before_angle is used. +sp_template_angle = ignore # ignore/add/remove/force + +# Add or remove space before '<>' +sp_before_angle = ignore # ignore/add/remove/force + +# Add or remove space inside '<' and '>' +sp_inside_angle = ignore # ignore/add/remove/force + +# Add or remove space after '<>' +sp_after_angle = ignore # ignore/add/remove/force + +# Add or remove space between '<>' and '(' as found in 'new List<byte>();' +sp_angle_paren = ignore # ignore/add/remove/force + +# Add or remove space between '<>' and a word as in 'List<byte> m;' +sp_angle_word = ignore # ignore/add/remove/force + +# Add or remove space before '(' of 'if', 'for', 'switch', and 'while' +sp_before_sparen = force # ignore/add/remove/force + +# Add or remove space inside if-condition '(' and ')' +sp_inside_sparen = remove # ignore/add/remove/force + +# Add or remove space before if-condition ')'. Overrides sp_inside_sparen. +sp_inside_sparen_close = remove # ignore/add/remove/force + +# Add or remove space after ')' of 'if', 'for', 'switch', and 'while' +sp_after_sparen = ignore # ignore/add/remove/force + +# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while' +sp_sparen_brace = add # ignore/add/remove/force + +# Add or remove space between 'invariant' and '(' in the D language. +sp_invariant_paren = ignore # ignore/add/remove/force + +# Add or remove space after the ')' in 'invariant (C) c' in the D language. +sp_after_invariant_paren = ignore # ignore/add/remove/force + +# Add or remove space before empty statement ';' on 'if', 'for' and 'while' +sp_special_semi = add # ignore/add/remove/force + +# Add or remove space before ';' +sp_before_semi = remove # ignore/add/remove/force + +# Add or remove space before ';' in non-empty 'for' statements +sp_before_semi_for = remove # ignore/add/remove/force + +# Add or remove space before a semicolon of an empty part of a for statment. +sp_before_semi_for_empty = add # ignore/add/remove/force + +# Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; <here> ). +sp_after_semi_for_empty = ignore # ignore/add/remove/force + +# Add or remove space before '[' (except '[]') +sp_before_square = remove # ignore/add/remove/force + +# Add or remove space before '[]' +sp_before_squares = ignore # ignore/add/remove/force + +# Add or remove space inside '[' and ']' +sp_inside_square = remove # ignore/add/remove/force + +# Add or remove space after ',' +sp_after_comma = force # ignore/add/remove/force + +# Add or remove space before ',' +sp_before_comma = remove # ignore/add/remove/force + +# Add or remove space after class ':' +sp_after_class_colon = ignore # ignore/add/remove/force + +# Add or remove space before class ':' +sp_before_class_colon = ignore # ignore/add/remove/force + +# Add or remove space before case ':' +sp_before_case_colon = remove # ignore/add/remove/force + +# Add or remove space between 'operator' and operator sign +sp_after_operator = ignore # ignore/add/remove/force + +# Add or remove space between the operator symbol and the open paren, as in 'operator ++(' +sp_after_operator_sym = ignore # ignore/add/remove/force + +# Add or remove space after C/D cast, ie 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a' +sp_after_cast = force # ignore/add/remove/force + +# Add or remove spaces inside cast parens +sp_inside_paren_cast = remove # ignore/add/remove/force + +# Add or remove space between the type and open paren in a C++ cast, ie 'int(exp)' vs 'int (exp)' +sp_cpp_cast_paren = ignore # ignore/add/remove/force + +# Add or remove space between 'sizeof' and '(' +sp_sizeof_paren = remove # ignore/add/remove/force + +# Add or remove space after the tag keyword (Pawn) +sp_after_tag = ignore # ignore/add/remove/force + +# Add or remove space inside enum '{' and '}' +sp_inside_braces_enum = force # ignore/add/remove/force + +# Add or remove space inside struct/union '{' and '}' +sp_inside_braces_struct = add # ignore/add/remove/force + +# Add or remove space inside '{' and '}' +sp_inside_braces = add # ignore/add/remove/force + +# Add or remove space inside '{}' +sp_inside_braces_empty = ignore # ignore/add/remove/force + +# Add or remove space between return type and function name +# A minimum of 1 is forced except for pointer return types. +sp_type_func = add # ignore/add/remove/force + +# Add or remove space between function name and '(' on function declaration +sp_func_proto_paren = remove # ignore/add/remove/force + +# Add or remove space between function name and '(' on function definition +sp_func_def_paren = remove # ignore/add/remove/force + +# Add or remove space inside empty function '()' +sp_inside_fparens = remove # ignore/add/remove/force + +# Add or remove space inside function '(' and ')' +sp_inside_fparen = remove # ignore/add/remove/force + +# Add or remove space between ']' and '(' when part of a function call. +sp_square_fparen = ignore # ignore/add/remove/force + +# Add or remove space between ')' and '{' of function +sp_fparen_brace = add # ignore/add/remove/force + +# Add or remove space between function name and '(' on function calls +sp_func_call_paren = remove # ignore/add/remove/force + +# Add or remove space between the user function name and '(' on function calls +# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file. +sp_func_call_user_paren = ignore # ignore/add/remove/force + +# Add or remove space between a constructor/destructor and the open paren +sp_func_class_paren = remove # ignore/add/remove/force + +# Add or remove space between 'return' and '(' +sp_return_paren = add # ignore/add/remove/force + +# Add or remove space between '__attribute__' and '(' +sp_attribute_paren = ignore # ignore/add/remove/force + +# Add or remove space between 'defined' and '(' in '#if defined (FOO)' +sp_defined_paren = remove # ignore/add/remove/force + +# Add or remove space between 'throw' and '(' in 'throw (something)' +sp_throw_paren = ignore # ignore/add/remove/force + +# Add or remove space between macro and value +sp_macro = add # ignore/add/remove/force + +# Add or remove space between macro function ')' and value +sp_macro_func = add # ignore/add/remove/force + +# Add or remove space between 'else' and '{' if on the same line +sp_else_brace = add # ignore/add/remove/force + +# Add or remove space between '}' and 'else' if on the same line +sp_brace_else = ignore # ignore/add/remove/force + +# Add or remove space between '}' and the name of a typedef on the same line +sp_brace_typedef = ignore # ignore/add/remove/force + +# Add or remove space between 'catch' and '{' if on the same line +sp_catch_brace = add # ignore/add/remove/force + +# Add or remove space between '}' and 'catch' if on the same line +sp_brace_catch = add # ignore/add/remove/force + +# Add or remove space between 'finally' and '{' if on the same line +sp_finally_brace = add # ignore/add/remove/force + +# Add or remove space between '}' and 'finally' if on the same line +sp_brace_finally = add # ignore/add/remove/force + +# Add or remove space between 'try' and '{' if on the same line +sp_try_brace = add # ignore/add/remove/force + +# Add or remove space between get/set and '{' if on the same line +sp_getset_brace = add # ignore/add/remove/force + +# Add or remove space before the '::' operator +sp_before_dc = ignore # ignore/add/remove/force + +# Add or remove space after the '::' operator +sp_after_dc = ignore # ignore/add/remove/force + +# Add or remove around the D named array initializer ':' operator +sp_d_array_colon = ignore # ignore/add/remove/force + +# Add or remove space after the '!' (not) operator. +sp_not = remove # ignore/add/remove/force + +# Add or remove space after the '~' (invert) operator. +sp_inv = remove # ignore/add/remove/force + +# Add or remove space after the '&' (address-of) operator. +# This does not affect the spacing after a '&' that is part of a type. +sp_addr = remove # ignore/add/remove/force + +# Add or remove space around the '.' or '->' operators +sp_member = remove # ignore/add/remove/force + +# Add or remove space after the '*' (dereference) operator. +# This does not affect the spacing after a '*' that is part of a type. +sp_deref = remove # ignore/add/remove/force + +# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7' +sp_sign = remove # ignore/add/remove/force + +# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;' +sp_incdec = remove # ignore/add/remove/force + +# Add or remove space before a backslash-newline at the end of a line +sp_before_nl_cont = add # ignore/add/remove/force + +# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;' +sp_after_oc_scope = ignore # ignore/add/remove/force + +# Add or remove space after the colon in message specs +# '-(int) f:(int) x;' vs '-(int) f: (int) x;' +sp_after_oc_colon = ignore # ignore/add/remove/force + +# Add or remove space before the colon in message specs +# '-(int) f: (int) x;' vs '-(int) f : (int) x;' +sp_before_oc_colon = ignore # ignore/add/remove/force + +# Add or remove space after the colon in message specs +# '[object setValue:1];' vs '[object setValue: 1];' +sp_after_send_oc_colon = ignore # ignore/add/remove/force + +# Add or remove space before the colon in message specs +# '[object setValue:1];' vs '[object setValue :1];' +sp_before_send_oc_colon = ignore # ignore/add/remove/force + +# Add or remove space after the (type) in message specs +# '-(int) f: (int) x;' vs '-(int) f: (int)x;' +sp_after_oc_type = ignore # ignore/add/remove/force + +# Add or remove space around the ':' in 'b ? t : f' +sp_cond_colon = add # ignore/add/remove/force + +# Add or remove space around the '?' in 'b ? t : f' +sp_cond_question = add # ignore/add/remove/force + +# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here. +sp_case_label = force # ignore/add/remove/force + +# Control the space around the D '..' operator. +sp_range = ignore # ignore/add/remove/force + +# Control the space after the opening of a C++ comment '// A' vs '//A' +sp_cmt_cpp_start = add # ignore/add/remove/force + +# +# Code alignment (not left column spaces/tabs) +# + +# Whether to keep non-indenting tabs +align_keep_tabs = false # false/true + +# Whether to use tabs for alinging +align_with_tabs = false # false/true + +# Whether to bump out to the next tab when aligning +align_on_tabstop = true # false/true + +# Whether to left-align numbers +align_number_left = false # false/true + +# Align variable definitions in prototypes and functions +align_func_params = false # false/true + +# Align parameters in single-line functions that have the same name. +# The function names must already be aligned with each other. +align_same_func_call_params = false # false/true + +# The span for aligning variable definitions (0=don't align) +align_var_def_span = 3 # number + +# How to align the star in variable definitions. +# 0=Part of the type 'void * foo;' +# 1=Part of the variable 'void *foo;' +# 2=Dangling 'void *foo;' +align_var_def_star_style = 0 # number + +# How to align the '&' in variable definitions. +# 0=Part of the type +# 1=Part of the variable +# 2=Dangling +align_var_def_amp_style = 0 # number + +# The threshold for aligning variable definitions (0=no limit) +align_var_def_thresh = 12 # number + +# The gap for aligning variable definitions +align_var_def_gap = 0 # number + +# Whether to align the colon in struct bit fields +align_var_def_colon = false # false/true + +# Whether to align inline struct/enum/union variable definitions +align_var_def_inline = true # false/true + +# The span for aligning on '=' in assignments (0=don't align) +align_assign_span = 1 # number + +# The threshold for aligning on '=' in assignments (0=no limit) +align_assign_thresh = 4 # number + +# The span for aligning on '=' in enums (0=don't align) +align_enum_equ_span = 3 # number + +# The threshold for aligning on '=' in enums (0=no limit) +align_enum_equ_thresh = 0 # number + +# The span for aligning struct/union (0=don't align) +align_var_struct_span = 1 # number + +# The threshold for aligning struct/union member definitions (0=no limit) +align_var_struct_thresh = 0 # number + +# The gap for aligning struct/union member definitions +align_var_struct_gap = 0 # number + +# The span for aligning struct initializer values (0=don't align) +align_struct_init_span = 1 # number + +# The minimum space between the type and the synonym of a typedef +align_typedef_gap = 1 # number + +# The span for aligning single-line typedefs (0=don't align) +align_typedef_span = 2 # number + +# How to align typedef'd functions with other typedefs +# 0: Don't mix them at all +# 1: align the open paren with the types +# 2: align the function type name with the other type names +align_typedef_func = 0 # number + +# Controls the positioning of the '*' in typedefs. Just try it. +# 0: Align on typdef type, ignore '*' +# 1: The '*' is part of type name: typedef int *pint; +# 2: The '*' is part of the type, but dangling: typedef int *pint; +align_typedef_star_style = 0 # number + +# Controls the positioning of the '&' in typedefs. Just try it. +# 0: Align on typdef type, ignore '&' +# 1: The '&' is part of type name: typedef int &pint; +# 2: The '&' is part of the type, but dangling: typedef int &pint; +align_typedef_amp_style = 0 # number + +# The span for aligning comments that end lines (0=don't align) +align_right_cmt_span = 3 # number + +# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment +align_right_cmt_mix = false # false/true + +# If a trailing comment is more than this number of columns away from the text it follows, +# it will qualify for being aligned. +align_right_cmt_gap = 0 # number + +# The span for aligning function prototypes (0=don't align) +align_func_proto_span = 3 # number + +# Minimum gap between the return type and the function name. +align_func_proto_gap = 0 # number + +# Align function protos on the 'operator' keyword instead of what follows +align_on_operator = false # false/true + +# Whether to mix aligning prototype and variable declarations. +# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options. +align_mix_var_proto = false # false/true + +# Align single-line functions with function prototypes, uses align_func_proto_span +align_single_line_func = false # false/true + +# Aligning the open brace of single-line functions. +# Requires align_single_line_func=true, uses align_func_proto_span +align_single_line_brace = false # false/true + +# Gap for align_single_line_brace. +align_single_line_brace_gap = 0 # number + +# The span for aligning ObjC msg spec (0=don't align) +align_oc_msg_spec_span = 0 # number + +# Whether to align macros wrapped with a backslash and a newline. +# This will not work right if the macro contains a multi-line comment. +align_nl_cont = false # false/true + +# The minimum space between label and value of a preprocessor define +align_pp_define_gap = 1 # number + +# The span for aligning on '#define' bodies (0=don't align) +align_pp_define_span = 1 # number + +# Align lines that start with '<<' with previous '<<'. Default=true +align_left_shift = true # false/true + +# +# Newline adding and removing options +# + +# Whether to collapse empty blocks between '{' and '}' +nl_collapse_empty_body = false # false/true + +# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };' +nl_assign_leave_one_liners = true # false/true + +# Don't split one-line braced statements inside a class xx { } body +nl_class_leave_one_liners = true # false/true + +# Don't split one-line enums: 'enum foo { BAR = 15 };' +nl_enum_leave_one_liners = false # false/true + +# Don't split one-line get or set functions +nl_getset_leave_one_liners = true # false/true + +# Don't split one-line function definitions - 'int foo() { return 0; }' +nl_func_leave_one_liners = true # false/true + +# Don't split one-line if/else statements - 'if(a) b++;' +nl_if_leave_one_liners = false # false/true + +# Add or remove newlines at the start of the file +nl_start_of_file = ignore # ignore/add/remove/force + +# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force' +nl_start_of_file_min = 0 # number + +# Add or remove newline at the end of the file +nl_end_of_file = force # ignore/add/remove/force + +# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force') +nl_end_of_file_min = 1 # number + +# Add or remove newline between '=' and '{' +nl_assign_brace = add # ignore/add/remove/force + +# Add or remove newline between '=' and '[' (D only) +nl_assign_square = add # ignore/add/remove/force + +# Add or remove newline after '= [' (D only). Will also affect the newline before the ']' +nl_after_square_assign = ignore # ignore/add/remove/force + +# The number of newlines after a block of variable definitions +nl_func_var_def_blk = 1 # number + +# Add or remove newline between a function call's ')' and '{', as in: +# list_for_each(item, &list) { } +nl_fcall_brace = remove # ignore/add/remove/force + +# Add or remove newline between 'enum' and '{' +nl_enum_brace = remove # ignore/add/remove/force + +# Add or remove newline between 'struct and '{' +nl_struct_brace = add # ignore/add/remove/force + +# Add or remove newline between 'union' and '{' +nl_union_brace = add # ignore/add/remove/force + +# Add or remove newline between 'if' and '{' +nl_if_brace = force # ignore/add/remove/force + +# Add or remove newline between '}' and 'else' +nl_brace_else = force # ignore/add/remove/force + +# Add or remove newline between 'else if' and '{' +# If set to ignore, nl_if_brace is used instead +nl_elseif_brace = force # ignore/add/remove/force + +# Add or remove newline between 'else' and '{' +nl_else_brace = force # ignore/add/remove/force + +# Add or remove newline between 'else' and 'if' +nl_else_if = remove # ignore/add/remove/force + +# Add or remove newline between '}' and 'finally' +nl_brace_finally = ignore # ignore/add/remove/force + +# Add or remove newline between 'finally' and '{' +nl_finally_brace = ignore # ignore/add/remove/force + +# Add or remove newline between 'try' and '{' +nl_try_brace = force # ignore/add/remove/force + +# Add or remove newline between get/set and '{' +nl_getset_brace = ignore # ignore/add/remove/force + +# Add or remove newline between 'for' and '{' +nl_for_brace = force # ignore/add/remove/force + +# Add or remove newline between 'catch' and '{' +nl_catch_brace = force # ignore/add/remove/force + +# Add or remove newline between '}' and 'catch' +nl_brace_catch = force # ignore/add/remove/force + +# Add or remove newline between 'while' and '{' +nl_while_brace = force # ignore/add/remove/force + +# Add or remove newline between 'do' and '{' +nl_do_brace = ignore # ignore/add/remove/force + +# Add or remove newline between '}' and 'while' of 'do' statement +nl_brace_while = remove # ignore/add/remove/force + +# Add or remove newline between 'switch' and '{' +nl_switch_brace = force # ignore/add/remove/force + +# Add or remove newline when condition spans two or more lines +nl_multi_line_cond = false # false/true + +# Force a newline in a define after the macro name for multi-line defines. +nl_multi_line_define = false # false/true + +# Whether to put a newline before 'case' statement +nl_before_case = true # false/true + +# Add or remove newline between ')' and 'throw' +nl_before_throw = ignore # ignore/add/remove/force + +# Whether to put a newline after 'case' statement +nl_after_case = true # false/true + +# Newline between namespace and { +nl_namespace_brace = ignore # ignore/add/remove/force + +# Add or remove newline between 'template<>' and whatever follows. +nl_template_class = force # ignore/add/remove/force + +# Add or remove newline between 'class' and '{' +nl_class_brace = force # ignore/add/remove/force + +# Add or remove newline after each ',' in the constructor member initialization +nl_class_init_args = add # ignore/add/remove/force + +# Add or remove newline between return type and function name in definition +nl_func_type_name = remove # ignore/add/remove/force + +# Add or remove newline between return type and function name in a prototype +nl_func_proto_type_name = remove # ignore/add/remove/force + +# Add or remove newline between a function name and the opening '(' +nl_func_paren = remove # ignore/add/remove/force + +# Add or remove newline after '(' in a function declaration +nl_func_decl_start = remove # ignore/add/remove/force + +# Add or remove newline after each ',' in a function declaration +nl_func_decl_args = remove # ignore/add/remove/force + +# Add or remove newline before the ')' in a function declaration +nl_func_decl_end = remove # ignore/add/remove/force + +# Add or remove newline between function signature and '{' +nl_fdef_brace = force # ignore/add/remove/force + +# Whether to put a newline after 'return' statement +nl_after_return = false # false/true + +# Add or remove a newline between the return keyword and return expression. +nl_return_expr = ignore # ignore/add/remove/force + +# Whether to put a newline after semicolons, except in 'for' statements +nl_after_semicolon = false # false/true + +# Whether to put a newline after brace open. +# This also adds a newline before the matching brace close. +nl_after_brace_open = true # false/true + +# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is +# placed between the open brace and a trailing single-line comment. +nl_after_brace_open_cmt = true # false/true + +# Whether to put a newline after a virtual brace open. +# These occur in un-braced if/while/do/for statement bodies. +nl_after_vbrace_open = true # false/true + +# Whether to alter newlines in '#define' macros +nl_define_macro = false # false/true + +# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif' +nl_squeeze_ifdef = false # false/true + +# Add or remove newline before 'if' +nl_before_if = ignore # ignore/add/remove/force + +# Add or remove newline after 'if' +nl_after_if = ignore # ignore/add/remove/force + +# Add or remove newline before 'for' +nl_before_for = ignore # ignore/add/remove/force + +# Add or remove newline after 'for' +nl_after_for = add # ignore/add/remove/force + +# Add or remove newline before 'while' +nl_before_while = ignore # ignore/add/remove/force + +# Add or remove newline after 'while' +nl_after_while = add # ignore/add/remove/force + +# Add or remove newline before 'switch' +nl_before_switch = ignore # ignore/add/remove/force + +# Add or remove newline after 'switch' +nl_after_switch = add # ignore/add/remove/force + +# Add or remove newline before 'do' +nl_before_do = ignore # ignore/add/remove/force + +# Add or remove newline after 'do' +nl_after_do = add # ignore/add/remove/force + +# Whether to double-space commented-entries in struct/enum +nl_ds_struct_enum_cmt = true # false/true + +# Whether to double-space before the close brace of a struct/union/enum +nl_ds_struct_enum_close_brace = false # false/true + +# Add or remove a newline around a class colon. +# Related to pos_class_colon, nl_class_init_args, and pos_comma. +nl_class_colon = ignore # ignore/add/remove/force + +# Change simple unbraced if statements into a one-liner +# 'if(b)\n i++;' => 'if(b) i++;' +nl_create_if_one_liner = false # false/true + +# Change simple unbraced for statements into a one-liner +# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);' +nl_create_for_one_liner = false # false/true + +# Change simple unbraced while statements into a one-liner +# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);' +nl_create_while_one_liner = false # false/true + +# +# Positioning options +# + +# The position of arithmetic operators in wrapped expressions +pos_arith = ignore # ignore/lead/trail + +# The position of assignment in wrapped expressions +pos_assign = ignore # ignore/lead/trail + +# The position of boolean operators in wrapped expressions +pos_bool = lead # ignore/lead/trail + +# The position of the comma in wrapped expressions +pos_comma = trail # ignore/lead/trail + +# The position of the comma in the constructor initialization list +pos_class_comma = ignore # ignore/lead/trail + +# The position of colons between constructor and member initialization +pos_class_colon = trail # ignore/lead/trail + +# +# Line Splitting options +# + +# Try to limit code width to N number of columns +code_width = 120 # number + +# Whether to fully split long 'for' statements at semi-colons +ls_for_split_full = true # false/true + +# Whether to fully split long function protos/calls at commas +ls_func_split_full = false # false/true + +# +# Blank line options +# + +# The maximum consecutive newlines +nl_max = 3 # number + +# The number of newlines after a function prototype, if followed by another function prototype +nl_after_func_proto = 0 # number + +# The number of newlines after a function prototype, if not followed by another function prototype +nl_after_func_proto_group = 2 # number + +# The number of newlines after '}' of a multi-line function body +nl_after_func_body = 3 # number + +# The number of newlines after '}' of a single line function body +nl_after_func_body_one_liner = 1 # number + +# The minimum number of newlines before a multi-line comment. +# Doesn't apply if after a brace open or another multi-line comment. +nl_before_block_comment = 2 # number + +# The minimum number of newlines before a single-line C comment. +# Doesn't apply if after a brace open or other single-line C comments. +nl_before_c_comment = 1 # number + +# The minimum number of newlines before a CPP comment. +# Doesn't apply if after a brace open or other CPP comments. +nl_before_cpp_comment = 2 # number + +# Whether to force a newline after a mulit-line comment. +nl_after_multiline_comment = false # false/true + +# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. +# Will not change the newline count if after a brace open. +# 0 = No change. +nl_before_access_spec = 0 # number + +# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. +# 0 = No change. +nl_after_access_spec = 0 # number + +# The number of newlines between a function def and the function comment. +# 0 = No change. +nl_comment_func_def = 0 # number + +# The number of newlines after a try-catch-finally block that isn't followed by a brace close. +# 0 = No change. +nl_after_try_catch_finally = 1 # number + +# The number of newlines before and after a property, indexer or event decl. +# 0 = No change. +nl_around_cs_property = 0 # number + +# The number of newlines between the get/set/add/remove handlers in C#. +# 0 = No change. +nl_between_get_set = 0 # number + +# Whether to remove blank lines after '{' +eat_blanks_after_open_brace = true # false/true + +# Whether to remove blank lines before '}' +eat_blanks_before_close_brace = true # false/true + +# +# Code modifying options (non-whitespace) +# + +# Add or remove braces on single-line 'do' statement +mod_full_brace_do = add # ignore/add/remove/force + +# Add or remove braces on single-line 'for' statement +mod_full_brace_for = ignore # ignore/add/remove/force + +# Add or remove braces on single-line function defintions. (Pawn) +mod_full_brace_function = ignore # ignore/add/remove/force + +# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'. +mod_full_brace_if = ignore # ignore/add/remove/force + +# Don't remove braces around statements that span N newlines +mod_full_brace_nl = 3 # number + +# Add or remove braces on single-line 'while' statement +mod_full_brace_while = ignore # ignore/add/remove/force + +# Add or remove unnecessary paren on 'return' statement +mod_paren_on_return = remove # ignore/add/remove/force + +# Whether to change optional semicolons to real semicolons +mod_pawn_semicolon = false # false/true + +# Add parens on 'while' and 'if' statement around bools +mod_full_paren_if_bool = false # false/true + +# Whether to remove superfluous semicolons +mod_remove_extra_semicolon = false # false/true + +# If a function body exceeds the specified number of newlines and doesn't have a comment after +# the close brace, a comment will be added. +mod_add_long_function_closebrace_comment = 0 # number + +# If a switch body exceeds the specified number of newlines and doesn't have a comment after +# the close brace, a comment will be added. +mod_add_long_switch_closebrace_comment = 0 # number + +# If TRUE, will sort consecutive single-line 'import' statements [Java, D] +mod_sort_import = false # false/true + +# If TRUE, will sort consecutive single-line 'using' statements [C#] +mod_sort_using = false # false/true + +# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C] +# This is generally a bad idea, as it may break your code. +mod_sort_include = false # false/true + +# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace. +mod_move_case_break = false # false/true + +# If TRUE, it will remove a void 'return;' that appears as the last statement in a function. +mod_remove_empty_return = false # false/true + +# +# Comment modifications +# + +# Try to wrap comments at cmt_width columns +cmt_width = 0 # number + +# If false, disable all multi-line comment changes, including cmt_width and leading chars. +# Default is true. +cmt_indent_multi = true # false/true + +# Whether to group c-comments that look like they are in a block +cmt_c_group = false # false/true + +# Whether to put an empty '/*' on the first line of the combined c-comment +cmt_c_nl_start = false # false/true + +# Whether to put a newline before the closing '*/' of the combined c-comment +cmt_c_nl_end = false # false/true + +# Whether to group cpp-comments that look like they are in a block +cmt_cpp_group = false # false/true + +# Whether to put an empty '/*' on the first line of the combined cpp-comment +cmt_cpp_nl_start = false # false/true + +# Whether to put a newline before the closing '*/' of the combined cpp-comment +cmt_cpp_nl_end = false # false/true + +# Whether to change cpp-comments into c-comments +cmt_cpp_to_c = false # false/true + +# Whether to put a star on subsequent comment lines +cmt_star_cont = true # false/true + +# The number of spaces to insert at the start of subsequent comment lines +cmt_sp_before_star_cont = 0 # number + +# The number of spaces to insert after the star on subsequent comment lines +cmt_sp_after_star_cont = 1 # number + +# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of +# the comment are the same length. Default=True +cmt_multi_check_last = true # false/true + +# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment. +# Will substitue $(filename) with the current file's name. +cmt_insert_file_header = "" # string + +# The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment. +# Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff. +# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... } +cmt_insert_func_header = "" # string + +# The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment. +# Will substitue $(class) with the class name. +cmt_insert_class_header = "" # string + +# If a preprocessor is encountered when stepping backwards from a function name, then +# this option decides whether the comment should be inserted. +# Affects cmt_insert_func_header and cmt_insert_class_header. +cmt_insert_before_preproc = false # false/true + +# +# Preprocessor options +# + +# Control indent of preprocessors inside #if blocks at brace level 0 +pp_indent = ignore # ignore/add/remove/force + +# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false) +pp_indent_at_level = false # false/true + +# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1. +pp_indent_count = 1 # number + +# Add or remove space after # based on pp_level of #if blocks +pp_space = ignore # ignore/add/remove/force + +# Sets the number of spaces added with pp_space +pp_space_count = 1 # number + +# The indent for #region and #endregion in C# and '#pragma region' in C/C++ +pp_indent_region = 0 # number + +# Whether to indent the code between #region and #endregion +pp_region_indent_code = false # false/true + +# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level +pp_indent_if = 1 # number + +# Control whether to indent the code between #if, #else and #endif when not at file-level +pp_if_indent_code = false # false/true + +# Whether to indent '#define' at the brace level (true) or from column 1 (false) +pp_define_at_level = false # false/true + +# You can force a token to be a type with the 'type' option. +# Example: +# type myfoo1 myfoo2 +# +# You can create custom macro-based indentation using macro-open, +# macro-else and macro-close. +# Example: +# macro-open BEGIN_TEMPLATE_MESSAGE_MAP +# macro-open BEGIN_MESSAGE_MAP +# macro-close END_MESSAGE_MAP +# +# You can assign any keyword to any type with the set option. +# set func_call_user _ N_ Property changes on: trunk/uncrustify.cfg ___________________________________________________________________ Name: svn:eol-style + native |
From: <oh...@ma...> - 2009-01-28 14:08:12
|
Author: oharboe Date: 2009-01-28 14:08:06 +0100 (Wed, 28 Jan 2009) New Revision: 1363 Added: trunk/src/target/test/ trunk/src/target/test/syntax1.cfg Modified: trunk/src/target/Makefile.am trunk/src/target/target.c Log: chain position is now required when creating a target Modified: trunk/src/target/Makefile.am =================================================================== --- trunk/src/target/Makefile.am 2009-01-26 07:38:08 UTC (rev 1362) +++ trunk/src/target/Makefile.am 2009-01-28 13:08:06 UTC (rev 1363) @@ -29,4 +29,7 @@ # Various preconfigured boards nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/board/*.cfg) +# test files +nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/test/*.cfg) + MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/target/target.c =================================================================== --- trunk/src/target/target.c 2009-01-26 07:38:08 UTC (rev 1362) +++ trunk/src/target/target.c 2009-01-28 13:08:06 UTC (rev 1363) @@ -3341,6 +3341,8 @@ break; } } /* while( goi->argc ) */ + + /* done - we return */ return JIM_OK; } @@ -3839,6 +3841,13 @@ /* Do the rest as "configure" options */ goi->isconfigure = 1; e = target_configure( goi, target); + + if (target->tap == NULL) + { + Jim_SetResultString( interp, "-chain-position required when creating target", -1); + e=JIM_ERR; + } + if( e != JIM_OK ){ free( target->type ); free( target ); Added: trunk/src/target/test/syntax1.cfg =================================================================== --- trunk/src/target/test/syntax1.cfg 2009-01-26 07:38:08 UTC (rev 1362) +++ trunk/src/target/test/syntax1.cfg 2009-01-28 13:08:06 UTC (rev 1363) @@ -0,0 +1,29 @@ +jtag_nsrst_delay 200 +jtag_ntrst_delay 200 + +#use combined on interfaces or targets that can't set TRST/SRST separately +reset_config trst_and_srst srst_pulls_trst + +#LPCs need reset pulled while RTCK is low. 0 to activate JTAG, power-on reset is not enough +jtag_reset 1 1 +jtag_reset 0 0 + +#jtag scan chain +#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) +jtag newtap lpc2148 one -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x4f1f0f0f + +#target configuration +#daemon_startup reset + +set _TARGETNAME [format "%s.cpu" lpc2148] +target create lpc2148.cpu arm7tdmi -endian little -work-area-size 0x4000 -work-area-phys 0x40000000 -work-area-virt 0 -work-area-backup 0 + +$_TARGETNAME configure -event reset-init { +soft_reset_halt +mvb 0xE01FC040 0x01 +} + + + +flash bank lpc2000 0x0 0x7d000 0 0 0 lpc2000_v2 14765 + |
From: <oh...@ma...> - 2009-01-26 08:38:10
|
Author: oharboe Date: 2009-01-26 08:38:08 +0100 (Mon, 26 Jan 2009) New Revision: 1362 Modified: trunk/testing/examples/ledtest-imx31pdk/test.elf Log: update symbols to match source file Modified: trunk/testing/examples/ledtest-imx31pdk/test.elf =================================================================== (Binary files differ) |
From: ntfreak at B. <nt...@ma...> - 2009-01-23 13:07:18
|
Author: ntfreak Date: 2009-01-23 13:07:15 +0100 (Fri, 23 Jan 2009) New Revision: 1361 Modified: trunk/configure.in Log: - AC_CHECK_FILE not supported when cross-compiling Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-01-23 07:10:11 UTC (rev 1360) +++ trunk/configure.in 2009-01-23 12:07:15 UTC (rev 1361) @@ -33,9 +33,11 @@ AS_HELP_STRING([--enable-release], [Enable Release Build, default no]), [build_release=$enableval], [build_release=no]) -if test $build_release = no; then - # check we can find guess-rev.sh - AC_CHECK_FILE("$srcdir/guess-rev.sh", build_release=no, build_release=yes) +if test $cross_compiling = no; then + if test $build_release = no; then + # check we can find guess-rev.sh + AC_CHECK_FILE("$srcdir/guess-rev.sh", build_release=no, build_release=yes) + fi fi # We are not *ALWAYS* being installed in the standard place. |
From: <kc...@ma...> - 2009-01-23 08:10:23
|
Author: kc8apf Date: 2009-01-23 08:10:11 +0100 (Fri, 23 Jan 2009) New Revision: 1360 Modified: trunk/src/jtag/bitbang.c trunk/src/jtag/ft2232.c trunk/src/jtag/jtag.c trunk/src/jtag/jtag.h trunk/src/xsvf/xsvf.c Log: xvsf player fixes by Dick Hollenbeck <di...@so...> Modified: trunk/src/jtag/bitbang.c =================================================================== --- trunk/src/jtag/bitbang.c 2009-01-23 07:08:18 UTC (rev 1359) +++ trunk/src/jtag/bitbang.c 2009-01-23 07:10:11 UTC (rev 1360) @@ -38,6 +38,14 @@ #include <unistd.h> +/** + * Function bitbang_stableclocks + * issues a number of clock cycles while staying in a stable state. + * Because the TMS value required to stay in the RESET state is a 1, whereas + * the TMS value required to stay in any of the other stable states is a 0, + * this function checks the current stable state to decide on the value of TMS + * to use. + */ static void bitbang_stableclocks(int num_cycles); @@ -162,13 +170,14 @@ static void bitbang_stableclocks(int num_cycles) { + int tms = (cur_state == TAP_RESET ? 1 : 0); int i; /* send num_cycles clocks onto the cable */ for (i = 0; i < num_cycles; i++) { - bitbang_interface->write(1, 0, 0); - bitbang_interface->write(0, 0, 0); + bitbang_interface->write(1, tms, 0); + bitbang_interface->write(0, tms, 0); } } @@ -293,6 +302,9 @@ break; case JTAG_STABLECLOCKS: + /* this is only allowed while in a stable state. A check for a stable + * state was done in jtag_add_clocks() + */ bitbang_stableclocks(cmd->cmd.stableclocks->num_cycles); break; Modified: trunk/src/jtag/ft2232.c =================================================================== --- trunk/src/jtag/ft2232.c 2009-01-23 07:08:18 UTC (rev 1359) +++ trunk/src/jtag/ft2232.c 2009-01-23 07:10:11 UTC (rev 1360) @@ -1415,22 +1415,9 @@ break; case JTAG_STABLECLOCKS: - /* "if (tap_move_map[cur_state] != -1)" is of no help when cur_state==TAP_IDLE */ - switch(cur_state) - { - case TAP_DRSHIFT: - case TAP_IDLE: - case TAP_RESET: - case TAP_DRPAUSE: - case TAP_IRSHIFT: - case TAP_IRPAUSE: - break; /* above stable states are OK */ - default: - LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"", - jtag_state_name(cur_state) ); - retval = ERROR_JTAG_QUEUE_FAILED; - } - + /* this is only allowed while in a stable state. A check for a stable + * state was done in jtag_add_clocks() + */ if (ft2232_stableclocks(cmd->cmd.stableclocks->num_cycles, cmd) != ERROR_OK) retval = ERROR_JTAG_QUEUE_FAILED; #ifdef _DEBUG_JTAG_IO_ @@ -2336,11 +2323,15 @@ { int retval = 0; + /* 7 bits of either ones or zeros. */ + u8 tms = (cur_state == TAP_RESET ? 0x7F : 0x00); + while (num_cycles > 0) { /* the command 0x4b, "Clock Data to TMS/CS Pin (no Read)" handles * at most 7 bits per invocation. Here we invoke it potentially * several times. + * see: http://www.ftdichip.com/Documents/AppNotes/AN2232C-01_MPSSE_Cmnd.pdf */ int bitcount_per_command = (num_cycles > 7) ? 7 : num_cycles; @@ -2358,8 +2349,8 @@ /* scan 7 bit */ BUFFER_ADD = bitcount_per_command - 1; - /* TMS data bits are all zeros to stay in the current stable state */ - BUFFER_ADD = 0x0; + /* TMS data bits are either all zeros or ones to stay in the current stable state */ + BUFFER_ADD = tms; require_send = 1; Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-01-23 07:08:18 UTC (rev 1359) +++ trunk/src/jtag/jtag.c 2009-01-23 07:10:11 UTC (rev 1360) @@ -1093,11 +1093,31 @@ { int retval; - jtag_prelude1(); + /* "if (tap_move_map[cm_queue_cur_state] != -1)" is of no help when cur_state==TAP_IDLE */ + switch(cmd_queue_cur_state) + { + case TAP_DRSHIFT: + case TAP_IDLE: + case TAP_RESET: + case TAP_DRPAUSE: + case TAP_IRSHIFT: + case TAP_IRPAUSE: + break; /* above stable states are OK */ + default: + LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"", + jtag_state_name(cmd_queue_cur_state) ); + jtag_error = ERROR_JTAG_NOT_STABLE_STATE; + return; + } - retval=interface_jtag_add_clocks(num_cycles); - if (retval!=ERROR_OK) - jtag_error=retval; + if( num_cycles > 0 ) + { + jtag_prelude1(); + + retval=interface_jtag_add_clocks(num_cycles); + if (retval!=ERROR_OK) + jtag_error=retval; + } } void jtag_add_reset(int req_tlr_or_trst, int req_srst) @@ -1287,7 +1307,7 @@ if (cmd->fields[i].out_value) { #ifdef _DEBUG_JTAG_IO_ - char* char_buf = buf_to_str(cmd->fields[i].out_value, (cmd->fields[i].num_bits > 64) ? 64 : cmd->fields[i].num_bits, 16); + char* char_buf = buf_to_str(cmd->fields[i].out_value, (cmd->fields[i].num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : cmd->fields[i].num_bits, 16); #endif buf_set_buf(cmd->fields[i].out_value, 0, *buffer, bit_count, cmd->fields[i].num_bits); #ifdef _DEBUG_JTAG_IO_ @@ -1297,9 +1317,6 @@ } bit_count += cmd->fields[i].num_bits; -#ifdef _DEBUG_JTAG_IO_ - LOG_DEBUG("bit_count totalling: %i", bit_count ); -#endif } return bit_count; @@ -1325,7 +1342,7 @@ u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits); #ifdef _DEBUG_JTAG_IO_ - char *char_buf = buf_to_str(captured, (num_bits > 64) ? 64 : num_bits, 16); + char *char_buf = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16); LOG_DEBUG("fields[%i].in_value[%i]: 0x%s", i, num_bits, char_buf); free(char_buf); #endif @@ -1391,13 +1408,13 @@ jtag_tap_name(field->tap)); if (compare_failed) { - char *captured_char = buf_to_str(captured, (num_bits > 64) ? 64 : num_bits, 16); - char *in_check_value_char = buf_to_str(field->in_check_value, (num_bits > 64) ? 64 : num_bits, 16); + char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16); + char *in_check_value_char = buf_to_str(field->in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16); if (field->in_check_mask) { char *in_check_mask_char; - in_check_mask_char = buf_to_str(field->in_check_mask, (num_bits > 64) ? 64 : num_bits, 16); + in_check_mask_char = buf_to_str(field->in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16); LOG_WARNING("value captured during scan didn't pass the requested check:"); LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s", captured_char, in_check_value_char, in_check_mask_char); Modified: trunk/src/jtag/jtag.h =================================================================== --- trunk/src/jtag/jtag.h 2009-01-23 07:08:18 UTC (rev 1359) +++ trunk/src/jtag/jtag.h 2009-01-23 07:10:11 UTC (rev 1360) @@ -34,6 +34,11 @@ #define _DEBUG_JTAG_IO_ #endif +#ifndef DEBUG_JTAG_IOZ +#define DEBUG_JTAG_IOZ 64 +#endif + + /* 16 Tap States, from page 21 of ASSET InterTech, Inc.'s svf.pdf */ typedef enum tap_state @@ -499,12 +504,14 @@ * JTAG subsystem uses codes between -100 and -199 */ #define ERROR_JTAG_INIT_FAILED (-100) -#define ERROR_JTAG_INVALID_INTERFACE (-101) +#define ERROR_JTAG_INVALID_INTERFACE (-101) #define ERROR_JTAG_NOT_IMPLEMENTED (-102) -#define ERROR_JTAG_TRST_ASSERTED (-103) +#define ERROR_JTAG_TRST_ASSERTED (-103) #define ERROR_JTAG_QUEUE_FAILED (-104) +#define ERROR_JTAG_NOT_STABLE_STATE (-105) #define ERROR_JTAG_DEVICE_ERROR (-107) + /* this allows JTAG devices to implement the entire jtag_xxx() layer in hw/sw */ #ifdef HAVE_JTAG_MINIDRIVER_H /* Here a #define MINIDRIVER() and an inline version of hw fifo interface_jtag_add_dr_out can be defined */ Modified: trunk/src/xsvf/xsvf.c =================================================================== --- trunk/src/xsvf/xsvf.c 2009-01-23 07:08:18 UTC (rev 1359) +++ trunk/src/xsvf/xsvf.c 2009-01-23 07:10:11 UTC (rev 1360) @@ -107,6 +107,7 @@ #define LCOUNT 0x19 #define LDELAY 0x1A #define LSDR 0x1B +#define XTRST 0x1C /* XSVF valid state values for the XSTATE command, from appendix B of xapp503.pdf */ @@ -127,6 +128,11 @@ #define XSV_IREXIT2 0x0E #define XSV_IRUPDATE 0x0F +/* arguments to XTRST */ +#define XTRST_ON 0 +#define XTRST_OFF 1 +#define XTRST_Z 2 +#define XTRST_ABSENT 3 #define XSTATE_MAX_PATH 12 @@ -210,7 +216,7 @@ int xsvf_register_commands(struct command_context_s *cmd_ctx) { register_command(cmd_ctx, NULL, "xsvf", handle_xsvf_command, - COMMAND_EXEC, "run xsvf <file> [virt2]"); + COMMAND_EXEC, "run xsvf <file> [virt2] [quiet]"); return ERROR_OK; } @@ -288,6 +294,8 @@ int unsupported = 0; int tdo_mismatch = 0; int result; + int verbose = 1; + char* filename; int runtest_requires_tck = 0; /* a flag telling whether to clock TCK during waits, or simply sleep, controled by virt2 */ @@ -300,10 +308,12 @@ if (argc < 2) { - command_print(cmd_ctx, "usage: xsvf <device#|plain> <file> <variant>"); + command_print(cmd_ctx, "usage: xsvf <device#|plain> <file> [<variant>] [quiet]"); return ERROR_FAIL; } + filename = args[1]; /* we mess with args starting point below, snapshot filename here */ + if (strcmp(args[0], "plain") != 0) { tap = jtag_TapByString( args[0] ); @@ -314,9 +324,9 @@ } } - if ((xsvf_fd = open(args[1], O_RDONLY)) < 0) + if ((xsvf_fd = open(filename, O_RDONLY)) < 0) { - command_print(cmd_ctx, "file \"%s\" not found", args[1]); + command_print(cmd_ctx, "file \"%s\" not found", filename); return ERROR_FAIL; } @@ -324,10 +334,17 @@ if ((argc > 2) && (strcmp(args[2], "virt2") == 0)) { runtest_requires_tck = 1; + --argc; + ++args; } - LOG_USER("xsvf processing file: \"%s\"", args[1]); + if ((argc > 2) && (strcmp(args[2], "quiet") == 0)) + { + verbose = 0; + } + LOG_USER("xsvf processing file: \"%s\"", filename); + while( read(xsvf_fd, &opcode, 1) > 0 ) { /* record the position of the just read opcode within the file */ @@ -462,7 +479,8 @@ jtag_add_pathmove( sizeof(exception_path)/sizeof(exception_path[0]), exception_path); - LOG_USER("%s %d retry %d", op_name, xsdrsize, attempt); + if (verbose) + LOG_USER("%s %d retry %d", op_name, xsdrsize, attempt); } field.tap = tap; @@ -749,7 +767,8 @@ } while (uc != 0); comment[sizeof(comment)-1] = 0; /* regardless, terminate */ - LOG_USER(comment); + if (verbose) + LOG_USER(comment); } break; @@ -918,20 +937,24 @@ { scan_field_t field; + xsvf_add_statemove( loop_state ); + jtag_add_clocks(loop_clocks); + jtag_add_sleep(loop_usecs); + field.tap = tap; field.num_bits = xsdrsize; field.out_value = dr_out_buf; field.out_mask = NULL; field.in_value = NULL; - if (attempt > 0) + if (attempt > 0 && verbose) LOG_USER("LSDR retry %d", attempt); jtag_set_check_value(&field, dr_in_buf, dr_in_mask, NULL); if (tap == NULL) - jtag_add_plain_dr_scan(1, &field, loop_state); + jtag_add_plain_dr_scan(1, &field, TAP_DRPAUSE); else - jtag_add_dr_scan(1, &field, loop_state); + jtag_add_dr_scan(1, &field, TAP_DRPAUSE); /* LOG_DEBUG("FLUSHING QUEUE"); */ result = jtag_execute_queue(); @@ -940,9 +963,6 @@ matched = 1; break; } - - jtag_add_clocks(loop_clocks); - jtag_add_sleep(loop_usecs); } if (!matched ) @@ -954,6 +974,34 @@ } break; + case XTRST: + { + u8 trst_mode; + + if (read(xsvf_fd, &trst_mode, 1) < 0) + { + do_abort = 1; + break; + } + + switch( trst_mode ) + { + case XTRST_ON: + jtag_add_reset(1, 0); + break; + case XTRST_OFF: + case XTRST_Z: + jtag_add_reset(0, 0); + break; + case XTRST_ABSENT: + break; + default: + LOG_ERROR( "XTRST mode argument (0x%02X) out of range", trst_mode ); + do_abort = 1; + } + } + break; + default: LOG_ERROR("unknown xsvf command (0x%02X)\n", uc); unsupported = 1; |
From: <kc...@ma...> - 2009-01-23 08:08:21
|
Author: kc8apf Date: 2009-01-23 08:08:18 +0100 (Fri, 23 Jan 2009) New Revision: 1359 Modified: trunk/src/svf/svf.c Log: Fixes for svf player by Simon Qian <sim...@Si...> Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-01-23 07:07:02 UTC (rev 1358) +++ trunk/src/svf/svf.c 2009-01-23 07:08:18 UTC (rev 1359) @@ -37,6 +37,7 @@ #include "jtag.h" #include "command.h" #include "log.h" +#include "time_support.h" #include <ctype.h> #include <stdlib.h> @@ -187,10 +188,12 @@ static int svf_line_number = 1; static jtag_tap_t *tap = NULL; +static tap_state_t last_state = TAP_RESET; #define SVF_MAX_BUFFER_SIZE_TO_COMMIT (4 * 1024) static u8 *svf_tdi_buffer = NULL, *svf_tdo_buffer = NULL, *svf_mask_buffer = NULL; static int svf_buffer_index = 0, svf_buffer_size = 0; +static int svf_quiet = 0; int svf_register_commands(struct command_context_s *cmd_ctx) @@ -230,23 +233,47 @@ static int handle_svf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { +#define SVF_NUM_OF_OPTIONS 1 int command_num = 0, i; int ret = ERROR_OK; + long long time_ago; - if (argc < 1) + if ((argc < 1) || (argc > (1 + SVF_NUM_OF_OPTIONS))) { - command_print(cmd_ctx, "usage: svf <file>"); + command_print(cmd_ctx, "usage: svf <file> [quiet]"); return ERROR_FAIL; } + // parse variant + svf_quiet = 0; + for (i = 1; i < argc; i++) + { + if (!strcmp(args[i], "quiet")) + { + svf_quiet = 1; + } + else + { + LOG_ERROR("unknown variant for svf: %s", args[i]); + + // no need to free anything now + return ERROR_FAIL; + } + } + if ((svf_fd = open(args[0], O_RDONLY)) < 0) { command_print(cmd_ctx, "file \"%s\" not found", args[0]); + + // no need to free anything now return ERROR_FAIL; } LOG_USER("svf processing file: \"%s\"", args[0]); + // get time + time_ago = timeval_ms(); + // init svf_line_number = 1; svf_command_buffer_size = 0; @@ -315,6 +342,9 @@ ret = ERROR_FAIL; } + // print time + command_print(cmd_ctx, "%d ms used", timeval_ms() - time_ago); + free_all: close(svf_fd); @@ -655,6 +685,22 @@ return ERROR_OK; } +static int svf_execute_tap(void) +{ + if (ERROR_OK != jtag_execute_queue()) + { + return ERROR_FAIL; + } + else if (ERROR_OK != svf_check_tdo()) + { + return ERROR_FAIL; + } + + svf_buffer_index = 0; + + return ERROR_OK; +} + // not good to use this extern jtag_command_t** jtag_get_last_command_p(void); extern void* cmd_queue_alloc(size_t size); @@ -681,7 +727,10 @@ // for STATE tap_state_t *path = NULL, state; - LOG_DEBUG("%s", cmd_str); + if (!svf_quiet) + { + LOG_USER("%s", svf_command_buffer); + } if (ERROR_OK != svf_parse_cmd_string(cmd_str, strlen(cmd_str), argus, &num_of_argu)) { @@ -736,6 +785,10 @@ LOG_ERROR("HZ not found in FREQUENCY command"); return ERROR_FAIL; } + if (ERROR_OK != svf_execute_tap()) + { + return ERROR_FAIL; + } svf_para.frequency = atof(argus[1]); // TODO: set jtag speed to if (svf_para.frequency > 0) @@ -776,7 +829,7 @@ xxr_para_tmp->data_mask = 0; for (i = 2; i < num_of_argu; i += 2) { - if ((argus[i + 1][0] != '(') || (argus[i + 1][strlen(argus[i + 1]) - 1] != ')')) + if ((strlen(argus[i + 1]) < 3) || (argus[i + 1][0] != '(') || (argus[i + 1][strlen(argus[i + 1]) - 1] != ')')) { LOG_ERROR("data section error"); return ERROR_FAIL; @@ -931,6 +984,7 @@ jtag_add_plain_dr_scan(1, &field, svf_para.dr_end_state); svf_buffer_index += (i + 7) >> 3; + last_state = svf_para.dr_end_state; } else if (SIR == command) { @@ -1031,6 +1085,7 @@ jtag_add_plain_ir_scan(1, &field, svf_para.ir_end_state); svf_buffer_index += (i + 7) >> 3; + last_state = svf_para.ir_end_state; } break; case PIO: @@ -1126,14 +1181,50 @@ { if (run_count > 0) { + // run_state and end_state is checked to be stable state // TODO: do runtest +#if 1 + // enter into run_state if necessary + if (last_state != svf_para.runtest_run_state) + { + last_cmd = jtag_get_last_command_p(); + *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t)); + last_comand_pointer = &((*last_cmd)->next); + (*last_cmd)->next = NULL; + (*last_cmd)->type = JTAG_STATEMOVE; + (*last_cmd)->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t)); + (*last_cmd)->cmd.statemove->end_state = svf_para.runtest_run_state; + + cmd_queue_end_state = cmd_queue_cur_state = (*last_cmd)->cmd.statemove->end_state; + } + + // call jtag_add_clocks + jtag_add_clocks(run_count); + + if (svf_para.runtest_end_state != svf_para.runtest_run_state) + { + // move to end_state + last_cmd = jtag_get_last_command_p(); + *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t)); + last_comand_pointer = &((*last_cmd)->next); + (*last_cmd)->next = NULL; + (*last_cmd)->type = JTAG_STATEMOVE; + (*last_cmd)->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t)); + (*last_cmd)->cmd.statemove->end_state = svf_para.runtest_end_state; + + cmd_queue_end_state = cmd_queue_cur_state = (*last_cmd)->cmd.statemove->end_state; + } + last_state = svf_para.runtest_end_state; +#else if (svf_para.runtest_run_state != TAP_IDLE) { // RUNTEST can only executed in TAP_IDLE LOG_ERROR("cannot runtest in %s state", svf_tap_state_name[svf_para.runtest_run_state]); return ERROR_FAIL; } + jtag_add_runtest(run_count, svf_para.runtest_end_state); +#endif } } else @@ -1158,32 +1249,45 @@ LOG_ERROR("not enough memory"); return ERROR_FAIL; } - for (i = 1; i < num_of_argu; i++) + num_of_argu--; // num of path + i_tmp = 1; // path is from patameter 1 + for (i = 0; i < num_of_argu; i++) { - path[i - 1] = svf_find_string_in_array(argus[i], (char **)svf_tap_state_name, dimof(svf_tap_state_name)); - if (!svf_tap_state_is_valid(path[i - 1])) + path[i] = svf_find_string_in_array(argus[i_tmp++], (char **)svf_tap_state_name, dimof(svf_tap_state_name)); + if (!svf_tap_state_is_valid(path[i])) { - LOG_ERROR("%s is not valid state", svf_tap_state_name[path[i - 1]]); + LOG_ERROR("%s is not valid state", svf_tap_state_name[path[i]]); return ERROR_FAIL; } - if (TAP_RESET == path[i - 1]) + if (TAP_RESET == path[i]) { - LOG_ERROR("TAP_RESET is not allowed in pathmove"); - return ERROR_FAIL; + if (i > 0) + { + jtag_add_pathmove(i, path); + } + jtag_add_tlr(); + num_of_argu -= i + 1; + i = -1; } } - if (svf_tap_state_is_stable(path[num_of_argu - 1])) + if (num_of_argu > 0) { - // last state MUST be stable state - // TODO: call path_move - jtag_add_pathmove(num_of_argu - 1, path); - LOG_DEBUG("\tmove to %s by path_move", svf_tap_state_name[path[num_of_argu - 1]]); + // execute last path if necessary + if (svf_tap_state_is_stable(path[num_of_argu - 1])) + { + // last state MUST be stable state + // TODO: call path_move + jtag_add_pathmove(num_of_argu, path); + last_state = path[num_of_argu - 1]; + LOG_DEBUG("\tmove to %s by path_move", svf_tap_state_name[path[num_of_argu - 1]]); + } + else + { + LOG_ERROR("%s is not valid state", svf_tap_state_name[path[num_of_argu - 1]]); + return ERROR_FAIL; + } } - else - { - LOG_ERROR("%s is not valid state", svf_tap_state_name[path[num_of_argu - 1]]); - return ERROR_FAIL; - } + // no need to keep this memory, in jtag_add_pathmove, path will be duplicated if (NULL != path) { free(path); @@ -1205,6 +1309,9 @@ (*last_cmd)->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t)); (*last_cmd)->cmd.statemove->end_state = state; + cmd_queue_end_state = cmd_queue_cur_state = (*last_cmd)->cmd.statemove->end_state; + last_state = state; + LOG_DEBUG("\tmove to %s by state_move", svf_tap_state_name[state]); } else @@ -1223,17 +1330,21 @@ } if (svf_para.trst_mode != TRST_ABSENT) { + if (ERROR_OK != svf_execute_tap()) + { + return ERROR_FAIL; + } i_tmp = svf_find_string_in_array(argus[1], (char **)svf_trst_mode_name, dimof(svf_trst_mode_name)); switch (i_tmp) { case TRST_ON: + last_state = TAP_RESET; jtag_add_reset(1, 0); break; + case TRST_Z: case TRST_OFF: - jtag_add_reset(1, 1); + jtag_add_reset(0, 0); break; - case TRST_Z: - break; case TRST_ABSENT: break; default: @@ -1262,22 +1373,17 @@ (((command != STATE) && (command != RUNTEST)) || \ ((command == STATE) && (num_of_argu == 2)))) { - // there is data to be executed - if (ERROR_OK != jtag_execute_queue()) + if (ERROR_OK != svf_execute_tap()) { return ERROR_FAIL; } + // output debug info if ((SIR == command) || (SDR == command)) { + // in debug mode, data is from index 0 LOG_DEBUG("\tTDO read = 0x%X", (*(int*)svf_tdi_buffer) & ((1 << (svf_check_tdo_para[0].bit_len)) - 1)); } - if (ERROR_OK != svf_check_tdo()) - { - return ERROR_FAIL; - } - - svf_buffer_index = 0; } } else @@ -1288,16 +1394,7 @@ (((command != STATE) && (command != RUNTEST)) || \ ((command == STATE) && (num_of_argu == 2)))) { - if (ERROR_OK != jtag_execute_queue()) - { - return ERROR_FAIL; - } - else if (ERROR_OK != svf_check_tdo()) - { - return ERROR_FAIL; - } - - svf_buffer_index = 0; + return svf_execute_tap(); } } |
From: <kc...@ma...> - 2009-01-23 08:07:07
|
Author: kc8apf Date: 2009-01-23 08:07:02 +0100 (Fri, 23 Jan 2009) New Revision: 1358 Modified: trunk/src/helper/options.c Log: Search path fixes for MinGW builds. Courtesy of Dimitar Dimitrov <di...@gm...> Modified: trunk/src/helper/options.c =================================================================== --- trunk/src/helper/options.c 2009-01-23 07:05:04 UTC (rev 1357) +++ trunk/src/helper/options.c 2009-01-23 07:07:02 UTC (rev 1358) @@ -80,6 +80,28 @@ strcat(strExePath, "\\.."); add_script_search_dir(strExePath); } + /* + * Add support for the default (as of 20080121) layout when + * using autotools and cygwin to build native MinGW binary. + * Path separator is converted to UNIX style so that MinGW is + * pleased. + * + * bin/openocd.exe + * lib/openocd/event/at91eb40a_reset.cfg + * lib/openocd/target/at91eb40a.cfg + */ + { + char strExePath [MAX_PATH]; + char *p; + GetModuleFileName (NULL, strExePath, MAX_PATH); + *strrchr(strExePath, '\\')=0; + strcat(strExePath, "/../lib/"PACKAGE); + for(p=strExePath; *p; p++) { + if(*p == '\\') + *p = '/'; + } + add_script_search_dir(strExePath); + } #else /* Add dir for openocd supplied scripts last so that user can over ride those scripts if desired. */ |
From: <kc...@ma...> - 2009-01-23 08:05:12
|
Author: kc8apf Date: 2009-01-23 08:05:04 +0100 (Fri, 23 Jan 2009) New Revision: 1357 Modified: trunk/tools/xsvf_tools/svf2xsvf.py trunk/tools/xsvf_tools/xsvfdump.py Log: Add TRST support to xsvf tools. Courtesy of Dick Hollenbeck <di...@so...> Modified: trunk/tools/xsvf_tools/svf2xsvf.py =================================================================== --- trunk/tools/xsvf_tools/svf2xsvf.py 2009-01-23 07:02:47 UTC (rev 1356) +++ trunk/tools/xsvf_tools/svf2xsvf.py 2009-01-23 07:05:04 UTC (rev 1357) @@ -57,6 +57,11 @@ doCOMMENTs = True # Save XCOMMENTs in the output xsvf file #doCOMMENTs = False # Save XCOMMENTs in the output xsvf file +# pick your file encoding +file_encoding = 'ISO-8859-1' +#file_encoding = 'utf-8' + + xrepeat = 0 # argument to XREPEAT, gives retry count for masked compares @@ -74,7 +79,8 @@ (XCOMPLETE,XTDOMASK,XSIR,XSDR,XRUNTEST,hole0,hole1,XREPEAT,XSDRSIZE,XSDRTDO, XSETSDRMASKS,XSDRINC,XSDRB,XSDRC,XSDRE,XSDRTDOB,XSDRTDOC, - XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,LCOUNT,LDELAY,LSDR) = range(28) + XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE, + LCOUNT,LDELAY,LSDR,XTRST) = range(29) #Note: LCOUNT, LDELAY, and LSDR are Lattice extensions to SVF and provide a way to loop back # and check a completion status, essentially waiting on a part until it signals that it is done. @@ -90,6 +96,8 @@ TDO (1); """ +#XTRST is an opcode Xilinx seemed to have missed and it comes from the SVF TRST statement. + LineNumber = 1 def s_ident(scanner, token): return ("ident", token.upper(), LineNumber) @@ -127,9 +135,14 @@ re.MULTILINE ) +# open the file using the given encoding +file = open( sys.argv[1], encoding=file_encoding ) + # read all svf file input into string "input" -input = open( sys.argv[1] ).read() +input = file.read() +file.close() + # Lexer: # create a list of tuples containing (tokenType, tokenValue, LineNumber) tokens = scanner.scan( input )[0] @@ -368,6 +381,8 @@ enddr_state_allowed = ('DRPAUSE', 'IDLE') endir_state_allowed = ('IRPAUSE', 'IDLE') +trst_mode_allowed = ('ON', 'OFF', 'Z', 'ABSENT') + enddr_state = IDLE endir_state = IDLE @@ -681,6 +696,19 @@ if tokVal != ';': raise ParseError( tokLn, tokVal, "Expecting ';' after FREQUENCY cycles HZ") + elif tokVal == 'TRST': + nextTok() + if tokVal not in trst_mode_allowed: + raise ParseError( tokLn, tokVal, "Expecting 'ON|OFF|Z|ABSENT' after TRST") + trst_mode = tokVal + nextTok() + if tokVal != ';': + raise ParseError( tokLn, tokVal, "Expecting ';' after TRST trst_mode") + obuf = bytearray( 2 ) + obuf[0] = XTRST + obuf[1] = trst_mode_allowed.index( trst_mode ) # use the index as the binary argument to XTRST opcode + output.write( obuf ) + else: raise ParseError( tokLn, tokVal, "Unknown token '%s'" % tokVal) Modified: trunk/tools/xsvf_tools/xsvfdump.py =================================================================== --- trunk/tools/xsvf_tools/xsvfdump.py 2009-01-23 07:02:47 UTC (rev 1356) +++ trunk/tools/xsvf_tools/xsvfdump.py 2009-01-23 07:05:04 UTC (rev 1357) @@ -39,7 +39,8 @@ (XCOMPLETE,XTDOMASK,XSIR,XSDR,XRUNTEST,hole0,hole1,XREPEAT,XSDRSIZE,XSDRTDO, XSETSDRMASKS,XSDRINC,XSDRB,XSDRC,XSDRE,XSDRTDOB,XSDRTDOC, - XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE,LCOUNT,LDELAY,LSDR) = range(28) + XSDRTDOE,XSTATE,XENDIR,XENDDR,XSIR2,XCOMMENT,XWAIT,XWAITSTATE, + LCOUNT,LDELAY,LSDR,XTRST) = range(29) (RESET,IDLE, @@ -51,6 +52,10 @@ "DRSELECT","DRCAPTURE","DRSHIFT","DREXIT1","DRPAUSE","DREXIT2","DRUPDATE", "IRSELECT","IRCAPTURE","IRSHIFT","IREXIT1","IRPAUSE","IREXIT2","IRUPDATE") + +trst_mode_allowed = ('ON', 'OFF', 'Z', 'ABSENT') + + Setsdrmasks = 0 SetsdrmasksOnesCount = 0 @@ -229,6 +234,14 @@ tdo = bytes2hexString( f, Xsdrsize ) print("LSDR 0x%s 0x%s" % (tdi, tdo) ) + elif op == XTRST: + # the argument is a single byte and it is the index into "trst_mode_allowed" + trst_mode = ReadByte(f) + if trst_mode <= 3: + print("TRST %s" % trst_mode_allowed[trst_mode] ) + else: + print("TRST 0x%02X" % trst_mode ); + else: print("UNKNOWN op 0x%02X %d" % (op, op)) exit(1) |
From: <kc...@ma...> - 2009-01-23 08:03:00
|
Author: kc8apf Date: 2009-01-23 08:02:47 +0100 (Fri, 23 Jan 2009) New Revision: 1356 Modified: trunk/src/jtag/vsllink.c Log: vsllink support for stable clocks by Simon Qian <sim...@Si...> Modified: trunk/src/jtag/vsllink.c =================================================================== --- trunk/src/jtag/vsllink.c 2009-01-21 04:16:20 UTC (rev 1355) +++ trunk/src/jtag/vsllink.c 2009-01-23 07:02:47 UTC (rev 1356) @@ -44,7 +44,7 @@ #endif #ifdef _DEBUG_JTAG_IO_ -#define DEBUG_JTAG_IO(expr ...) LOG_DEBUG(expr) +#define DEBUG_JTAG_IO(expr ...) LOG_DEBUG(expr) #else #define DEBUG_JTAG_IO(expr ...) #endif @@ -54,7 +54,7 @@ u8 vsllink_bulkout; u8 vsllink_bulkin; -#define VSLLINK_USB_TIMEOUT 5000 +#define VSLLINK_USB_TIMEOUT 10000 static int VSLLINK_BufferSize = 1024; @@ -76,7 +76,7 @@ #define VSLLINK_CMD_HW_SWDCMD 0xA2 #define VSLLINK_CMDJTAGSEQ_TMSBYTE 0x00 -#define VSLLINK_CMDJTAGSEQ_TMS0BYTE 0x40 +#define VSLLINK_CMDJTAGSEQ_TMSCLOCK 0x40 #define VSLLINK_CMDJTAGSEQ_SCAN 0x80 #define VSLLINK_CMDJTAGSEQ_CMDMSK 0xC0 @@ -92,7 +92,7 @@ #define JTAG_PINMSK_TDO (1 << 7) -#define VSLLINK_TAP_MOVE(from, to) VSLLINK_tap_move[tap_move_map[from]][tap_move_map[to]] +#define VSLLINK_TAP_MOVE(from, to) VSLLINK_tap_move[tap_move_map[from]][tap_move_map[to]] /* VSLLINK_tap_move[i][j]: tap movement command to go from state i to state j * 0: Test-Logic-Reset @@ -206,6 +206,7 @@ void vsllink_state_move(void); void vsllink_path_move(int num_states, enum tap_state *path); void vsllink_runtest(int num_cycles); +void vsllink_stableclocks(int num_cycles, int tms); void vsllink_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command); void vsllink_reset(int trst, int srst); void vsllink_simple_command(u8 command); @@ -257,7 +258,7 @@ enum scan_type type; u8 *buffer; - DEBUG_JTAG_IO("--------------------------------------------------------------------------------"); + DEBUG_JTAG_IO("--------------------------------- vsllink -------------------------------------"); vsllink_usb_out_buffer[0] = VSLLINK_CMD_HW_JTAGSEQCMD; vsllink_usb_out_buffer_idx = 3; @@ -332,7 +333,7 @@ DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst); vsllink_tap_execute(); - + if (cmd->cmd.reset->trst == 1) { cur_state = TAP_RESET; @@ -348,9 +349,33 @@ vsllink_tap_execute(); jtag_sleep(cmd->cmd.sleep->us); break; - + + case JTAG_STABLECLOCKS: + DEBUG_JTAG_IO("add %d clocks", cmd->cmd.stableclocks->num_cycles); + switch(cur_state) + { + case TAP_RESET: + // tms should be '1' to stay in TAP_RESET mode + scan_size = 1; + break; + case TAP_DRSHIFT: + case TAP_IDLE: + case TAP_DRPAUSE: + case TAP_IRSHIFT: + case TAP_IRPAUSE: + // in other mode, tms should be '0' + scan_size = 0; + break; /* above stable states are OK */ + default: + LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"", + jtag_state_name(cur_state) ); + exit(-1); + } + vsllink_stableclocks(cmd->cmd.stableclocks->num_cycles, scan_size); + break; + default: - LOG_ERROR("BUG: unknown JTAG command type encountered"); + LOG_ERROR("BUG: unknown JTAG command type encountered: %d", cmd->type); exit(-1); } cmd = cmd->next; @@ -752,92 +777,94 @@ } } -void vsllink_runtest(int num_cycles) +void vsllink_stableclocks(int num_cycles, int tms) { int tms_len; - enum tap_state saved_end_state = end_state; + u16 tms_append_byte; - if (cur_state != TAP_IDLE) + if (vsllink_tms_data_len > 0) { - // enter into IDLE state - vsllink_end_state(TAP_IDLE); - vsllink_state_move(); - } - else - { - // cur_state == TAP_IDLE - if (vsllink_tms_data_len > 0) + // there are vsllink_tms_data_len more tms bits to be shifted + // so there are vsllink_tms_data_len + num_cycles tms bits in all + tms_len = vsllink_tms_data_len + num_cycles; + if (tms > 0) { - // there are vsllink_tms_data_len more tms bits to be shifted - // so there are vsllink_tms_data_len + num_cycles tms bits in all - tms_len = vsllink_tms_data_len + num_cycles; - if (tms_len <= 16) + // append '1' for tms + tms_append_byte = (u16)((((1 << num_cycles) - 1) << vsllink_tms_data_len) & 0xFFFF); + } + else + { + // append '0' for tms + tms_append_byte = 0; + } + if (tms_len <= 16) + { + // merge into last tms shift + if (tms_len < 8) { - // merge into last tms shift - if (tms_len < 8) + // just add to vsllink_tms_data_len + // same result if tun through + //vsllink_tms_data_len += num_cycles; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] |= (u8)(tms_append_byte & 0xFF); + } + else if (tms_len == 8) + { + // end last tms shift command + // just reduce it, and append last tms byte + (*vsllink_tms_cmd_pos)--; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF); + } + else if (tms_len < 16) + { + if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) < VSLLINK_CMDJTAGSEQ_LENMSK) { - // just add to vsllink_tms_data_len - // same result if tun through - //vsllink_tms_data_len += num_cycles; + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // there is enought tms length in the current tms shift command + // increase the tms byte length by 1 and set the last byte to 0 + (*vsllink_tms_cmd_pos)++; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF); + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (u8)(tms_append_byte >> 8); } - else if (tms_len == 8) + else { - // end last tms shift command - // just reduce it, no need to append_tms + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // not enough tms length in the current tms shift command + // so a new command should be added + // first decrease byte length of last tms shift command (*vsllink_tms_cmd_pos)--; - vsllink_usb_out_buffer_idx++; + // append last tms byte and move the command pointer to the next empty position + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF); + // add new command(3 bytes) + vsllink_tap_ensure_space(0, 3); + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (u8)(tms_append_byte >> 8); } - else if (tms_len < 16) - { - if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) < VSLLINK_CMDJTAGSEQ_LENMSK) - { - // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most - // there is enought tms length in the current tms shift command - // increase the tms byte length by 1 and set the last byte to 0 - (*vsllink_tms_cmd_pos)++; - vsllink_usb_out_buffer_idx++; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; - } - else - { - // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most - // not enough tms length in the current tms shift command - // so a new command should be added - // first decrease byte length of last tms shift command - (*vsllink_tms_cmd_pos)--; - // move the command pointer to the next empty position - vsllink_usb_out_buffer_idx++; - // add new command(3 bytes) - vsllink_tap_ensure_space(0, 3); - vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; - } - } - else if (tms_len == 16) - { - // end last tms shift command - vsllink_usb_out_buffer_idx++; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0; - } - - vsllink_tms_data_len = (vsllink_tms_data_len + num_cycles) & 7; - if (vsllink_tms_data_len == 0) - { - vsllink_tms_cmd_pos = NULL; - } - num_cycles = 0; } - else + else if (tms_len == 16) { - vsllink_usb_out_buffer_idx++; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0; + // end last tms shift command + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF); + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (u8)(tms_append_byte >> 8); + } - num_cycles -= 16 - vsllink_tms_data_len; - vsllink_tms_data_len = 0; + vsllink_tms_data_len = tms_len & 7; + if (vsllink_tms_data_len == 0) + { vsllink_tms_cmd_pos = NULL; } + num_cycles = 0; } + else + { + // more shifts will be needed + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF); + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (u8)(tms_append_byte >> 8); + + num_cycles -= 16 - vsllink_tms_data_len; + vsllink_tms_data_len = 0; + vsllink_tms_cmd_pos = NULL; + } } // from here vsllink_tms_data_len == 0 or num_cycles == 0 @@ -860,7 +887,15 @@ vsllink_tap_ensure_space(1, 5); // if tms_len > 0, vsllink_tms_data_len == 0 // so just add new command - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMS0BYTE; + // LSB of the command byte is the tms value when do the shifting + if (tms > 0) + { + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSCLOCK | 1; + } + else + { + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSCLOCK; + } vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 0) & 0xff; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 8) & 0xff; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 16) & 0xff; @@ -873,21 +908,43 @@ if (tms_len > 0xFFFF) { vsllink_tap_execute(); - vsllink_usb_out_buffer[0] = VSLLINK_CMD_HW_JTAGSEQCMD; - vsllink_usb_out_buffer_idx = 3; } } + // post-process vsllink_tms_data_len = num_cycles & 7; if (vsllink_tms_data_len > 0) { vsllink_tap_ensure_space(0, 3); vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; + if (tms > 0) + { + // append '1' for tms + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (1 << vsllink_tms_data_len) - 1; + } + else + { + // append '0' for tms + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0x00; + } } } +} +void vsllink_runtest(int num_cycles) +{ + enum tap_state saved_end_state = end_state; + + if (cur_state != TAP_IDLE) + { + // enter into IDLE state + vsllink_end_state(TAP_IDLE); + vsllink_state_move(); + } + + vsllink_stableclocks(num_cycles, 0); + // post-process // set end_state vsllink_end_state(saved_end_state); @@ -1122,8 +1179,6 @@ if (scans > available_scans || bytes > available_bytes) { vsllink_tap_execute(); - vsllink_usb_out_buffer[0] = VSLLINK_CMD_HW_JTAGSEQCMD; - vsllink_usb_out_buffer_idx = 3; } } @@ -1238,7 +1293,10 @@ vsllink_tap_init(); } - + + vsllink_usb_out_buffer[0] = VSLLINK_CMD_HW_JTAGSEQCMD; + vsllink_usb_out_buffer_idx = 3; + return ERROR_OK; } |
From: <kc...@ma...> - 2009-01-21 05:16:35
|
Author: kc8apf Date: 2009-01-21 05:16:20 +0100 (Wed, 21 Jan 2009) New Revision: 1355 Added: branches/openocd-0.1/contrib/openocd.udev tags/openocd-0.1.0/contrib/openocd.udev Modified: branches/openocd-0.1/Makefile.am branches/openocd-0.1/configure.in branches/openocd-0.1/doc/openocd.texi tags/openocd-0.1.0/Makefile.am tags/openocd-0.1.0/configure.in tags/openocd-0.1.0/doc/openocd.texi Log: Merge r1351, r1352, and r1354 into 0.1.x and 0.1.0 Modified: branches/openocd-0.1/Makefile.am =================================================================== --- branches/openocd-0.1/Makefile.am 2009-01-21 04:13:16 UTC (rev 1354) +++ branches/openocd-0.1/Makefile.am 2009-01-21 04:16:20 UTC (rev 1355) @@ -6,7 +6,8 @@ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ contrib/libdcc/example.c \ - contrib/libdcc/README + contrib/libdcc/README \ + contrib/openocd.udev SUBDIRS = src doc Modified: branches/openocd-0.1/configure.in =================================================================== --- branches/openocd-0.1/configure.in 2009-01-21 04:13:16 UTC (rev 1354) +++ branches/openocd-0.1/configure.in 2009-01-21 04:16:20 UTC (rev 1355) @@ -35,7 +35,7 @@ if test $build_release = no; then # check we can find guess-rev.sh - AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) + AC_CHECK_FILE("$srcdir/guess-rev.sh", build_release=no, build_release=yes) fi # We are not *ALWAYS* being installed in the standard place. Copied: branches/openocd-0.1/contrib/openocd.udev (from rev 1354, trunk/contrib/openocd.udev) Modified: branches/openocd-0.1/doc/openocd.texi =================================================================== --- branches/openocd-0.1/doc/openocd.texi 2009-01-21 04:13:16 UTC (rev 1354) +++ branches/openocd-0.1/doc/openocd.texi 2009-01-21 04:16:20 UTC (rev 1355) @@ -331,7 +331,12 @@ @itemize @bullet @item -@option{--enable-gccwarnings} - enable extra gcc warnings during build +@option{--enable-gccwarnings} - enable extra gcc warnings during build. +Default is enabled. +@item +@option{--enable-release} - enable building of a openocd release, generally +this is for developers. It simply omits the svn version string when the +openocd @option{-v} is executed. @end itemize @node JTAG Hardware Dongles Modified: tags/openocd-0.1.0/Makefile.am =================================================================== --- tags/openocd-0.1.0/Makefile.am 2009-01-21 04:13:16 UTC (rev 1354) +++ tags/openocd-0.1.0/Makefile.am 2009-01-21 04:16:20 UTC (rev 1355) @@ -6,7 +6,8 @@ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ contrib/libdcc/example.c \ - contrib/libdcc/README + contrib/libdcc/README \ + contrib/openocd.udev SUBDIRS = src doc Modified: tags/openocd-0.1.0/configure.in =================================================================== --- tags/openocd-0.1.0/configure.in 2009-01-21 04:13:16 UTC (rev 1354) +++ tags/openocd-0.1.0/configure.in 2009-01-21 04:16:20 UTC (rev 1355) @@ -35,7 +35,7 @@ if test $build_release = no; then # check we can find guess-rev.sh - AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) + AC_CHECK_FILE("$srcdir/guess-rev.sh", build_release=no, build_release=yes) fi # We are not *ALWAYS* being installed in the standard place. Copied: tags/openocd-0.1.0/contrib/openocd.udev (from rev 1354, trunk/contrib/openocd.udev) Modified: tags/openocd-0.1.0/doc/openocd.texi =================================================================== --- tags/openocd-0.1.0/doc/openocd.texi 2009-01-21 04:13:16 UTC (rev 1354) +++ tags/openocd-0.1.0/doc/openocd.texi 2009-01-21 04:16:20 UTC (rev 1355) @@ -331,7 +331,12 @@ @itemize @bullet @item -@option{--enable-gccwarnings} - enable extra gcc warnings during build +@option{--enable-gccwarnings} - enable extra gcc warnings during build. +Default is enabled. +@item +@option{--enable-release} - enable building of a openocd release, generally +this is for developers. It simply omits the svn version string when the +openocd @option{-v} is executed. @end itemize @node JTAG Hardware Dongles |
From: <kc...@ma...> - 2009-01-21 05:13:28
|
Author: kc8apf Date: 2009-01-21 05:13:16 +0100 (Wed, 21 Jan 2009) New Revision: 1354 Added: trunk/contrib/openocd.udev Modified: trunk/Makefile.am Log: Add udev rules to contrib. Courtesy of Uwe Hermann <uw...@he...> Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-01-20 16:07:10 UTC (rev 1353) +++ trunk/Makefile.am 2009-01-21 04:13:16 UTC (rev 1354) @@ -6,7 +6,8 @@ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ contrib/libdcc/example.c \ - contrib/libdcc/README + contrib/libdcc/README \ + contrib/openocd.udev SUBDIRS = src doc Added: trunk/contrib/openocd.udev =================================================================== --- trunk/contrib/openocd.udev 2009-01-20 16:07:10 UTC (rev 1353) +++ trunk/contrib/openocd.udev 2009-01-21 04:13:16 UTC (rev 1354) @@ -0,0 +1,25 @@ +BUS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="openocd_rules_end" + +# Olimex ARM-USB-OCD +SYSFS{idVendor}=="15ba", SYSFS{idProduct}=="0003", MODE="664", GROUP="plugdev" + +# Olimex ARM-USB-OCD-TINY +SYSFS{idVendor}=="15ba", SYSFS{idProduct}=="0004", MODE="664", GROUP="plugdev" + +# USBprog with OpenOCD firmware +SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c63", MODE="664", GROUP="plugdev" + +# Amontec JTAGkey +SYSFS{idVendor}=="0403", SYSFS{idProduct}=="cff8", MODE="664", GROUP="plugdev" + +# Amontec JTAGkey-HiSpeed +SYSFS{idVendor}=="0fbb", SYSFS{idProduct}=="1000", MODE="664", GROUP="plugdev" + +# IAR J-Link USB +SYSFS{idVendor}=="1366", SYSFS{idProduct}=="0101", MODE="664", GROUP="plugdev" + +# Raisonance RLink +SYSFS{idVendor}=="138e", SYSFS{idProduct}=="9000", MODE="664", GROUP="plugdev" + +LABEL="openocd_rules_end" + |
From: <kc...@ma...> - 2009-01-20 17:07:17
|
Author: kc8apf Date: 2009-01-20 17:07:10 +0100 (Tue, 20 Jan 2009) New Revision: 1353 Modified: trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg Log: Fix for incorrect filename in include for at91sam9260 in unknown-board-atmel-at91sam9260.cfg Modified: trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg =================================================================== --- trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg 2009-01-20 13:27:02 UTC (rev 1352) +++ trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg 2009-01-20 16:07:10 UTC (rev 1353) @@ -3,7 +3,7 @@ ###################################### # We add to the minimal configuration. -source [find target/at91sam9260minimal.cfg] +source [find target/at91sam9260.cfg] ###################### # Target configuration |
From: ntfreak at B. <nt...@ma...> - 2009-01-20 14:27:02
|
Author: ntfreak Date: 2009-01-20 14:27:02 +0100 (Tue, 20 Jan 2009) New Revision: 1352 Modified: trunk/configure.in Log: - fix issue with configure when building srcdir != builddir Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-01-20 09:08:39 UTC (rev 1351) +++ trunk/configure.in 2009-01-20 13:27:02 UTC (rev 1352) @@ -35,7 +35,7 @@ if test $build_release = no; then # check we can find guess-rev.sh - AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) + AC_CHECK_FILE("$srcdir/guess-rev.sh", build_release=no, build_release=yes) fi # We are not *ALWAYS* being installed in the standard place. |
From: ntfreak at B. <nt...@ma...> - 2009-01-20 10:08:41
|
Author: ntfreak Date: 2009-01-20 10:08:39 +0100 (Tue, 20 Jan 2009) New Revision: 1351 Modified: trunk/doc/openocd.texi Log: - add --enable-release to docs Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-01-20 04:29:46 UTC (rev 1350) +++ trunk/doc/openocd.texi 2009-01-20 09:08:39 UTC (rev 1351) @@ -331,7 +331,12 @@ @itemize @bullet @item -@option{--enable-gccwarnings} - enable extra gcc warnings during build +@option{--enable-gccwarnings} - enable extra gcc warnings during build. +Default is enabled. +@item +@option{--enable-release} - enable building of a openocd release, generally +this is for developers. It simply omits the svn version string when the +openocd @option{-v} is executed. @end itemize @node JTAG Hardware Dongles |
From: <kc...@ma...> - 2009-01-20 05:29:56
|
Author: kc8apf Date: 2009-01-20 05:29:46 +0100 (Tue, 20 Jan 2009) New Revision: 1350 Added: trunk/src/target/board/olimex_sam9_l9260.cfg trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg trunk/src/target/interface/olimex-jtag-tiny.cfg trunk/src/target/target/at91sam9260.cfg Removed: trunk/src/target/target/at91sam9260.cfg trunk/src/target/target/at91sam9260minimal.cfg Log: AT91SAM9260 and Olimex changes by Dean Glazeski <dn...@gm...> Added: trunk/src/target/board/olimex_sam9_l9260.cfg =================================================================== --- trunk/src/target/board/olimex_sam9_l9260.cfg 2009-01-20 04:14:00 UTC (rev 1349) +++ trunk/src/target/board/olimex_sam9_l9260.cfg 2009-01-20 04:29:46 UTC (rev 1350) @@ -0,0 +1,10 @@ +## +# Olimex SAM9-L9260 board configuration file +# +# Date Author Change +# ---- ----- ----- +# 17/Jan/2009 Dean Glazeski Initial Creation +# +## + +source [find target/at91sam9260.cfg] Property changes on: trunk/src/target/board/olimex_sam9_l9260.cfg ___________________________________________________________________ Name: svn:eol-style + native Copied: trunk/src/target/board/unknown-board-atmel-at91sam9260.cfg (from rev 1348, trunk/src/target/target/at91sam9260.cfg) Added: trunk/src/target/interface/olimex-jtag-tiny.cfg =================================================================== --- trunk/src/target/interface/olimex-jtag-tiny.cfg 2009-01-20 04:14:00 UTC (rev 1349) +++ trunk/src/target/interface/olimex-jtag-tiny.cfg 2009-01-20 04:29:46 UTC (rev 1350) @@ -0,0 +1,11 @@ +## +# Olimex JTAG TINY USB Debugger +# Linux USB tends to see the device description without the 'A' as in target/olimex-jtag-tiny.cfg, +# but Windows still needs the 'A'. This is a replacement for Linux users. +## + +# REFERENCE: http://www.olimex.com/dev/arm-usb-tiny.html +interface ft2232 +ft2232_device_desc "Olimex OpenOCD JTAG TINY" +ft2232_layout olimex-jtag +ft2232_vid_pid 0x15ba 0x0004 Property changes on: trunk/src/target/interface/olimex-jtag-tiny.cfg ___________________________________________________________________ Name: svn:eol-style + native Deleted: trunk/src/target/target/at91sam9260.cfg =================================================================== --- trunk/src/target/target/at91sam9260.cfg 2009-01-20 04:14:00 UTC (rev 1349) +++ trunk/src/target/target/at91sam9260.cfg 2009-01-20 04:29:46 UTC (rev 1350) @@ -1,82 +0,0 @@ -# Thanks to Pieter Conradie for this script! -# Target: Atmel AT91SAM9260 -###################################### - -# We add to the minimal configuration. -source [find target/at91sam9260minimal.cfg] - -###################### -# Target configuration -###################### - -$_TARGETNAME configure -event reset-init { - # at reset chip runs at 32khz - jtag_khz 8 - mww 0xfffffd08 0xa5000501 # RSTC_MR : enable user reset - mww 0xfffffd44 0x00008000 # WDT_MR : disable watchdog - - mww 0xfffffc20 0x00004001 # CKGR_MOR : enable the main oscillator - sleep 20 # wait 20 ms - mww 0xfffffc30 0x00000001 # PMC_MCKR : switch to main oscillator - sleep 10 # wait 10 ms - mww 0xfffffc28 0x2060bf09 # CKGR_PLLAR: Set PLLA Register for 198,656MHz - sleep 20 # wait 20 ms - mww 0xfffffc30 0x00000101 # PMC_MCKR : Select prescaler - sleep 10 # wait 10 ms - mww 0xfffffc30 0x00000102 # PMC_MCKR : Clock from PLLA is selected - sleep 10 # wait 10 ms - - # Now run at anything fast... ie: 10mhz! - jtag_khz 10000 # Increase JTAG Speed to 6 MHz - arm7_9 dcc_downloads enable # Enable faster DCC downloads - - mww 0xffffec00 0x01020102 # SMC_SETUP0 : Setup SMC for Intel NOR Flash JS28F128P30T85 128MBit - mww 0xffffec04 0x09070806 # SMC_PULSE0 - mww 0xffffec08 0x000d000b # SMC_CYCLE0 - mww 0xffffec0c 0x00001003 # SMC_MODE0 - - flash probe 0 # Identify flash bank 0 - - mww 0xfffff870 0xffff0000 # PIO_ASR : Select peripheral function for D15..D31 - mww 0xfffff804 0xffff0000 # PIO_PDR : Disable PIO function for D15..D31 - - mww 0xffffef1c 0x2 # EBI_CSA : Assign EBI Chip Select 1 to SDRAM - - #mww 0xffffea08 0x85227259 # SDRAMC_CR : Configure SDRAM (2 x Samsung K4S561632H-UC75 : 4M x 16Bit x 4 Banks) - mww 0xffffea08 0x85227254 # SDRAMC_CR : Configure SDRAM (2 x Samsung K4S641632H-UC75 : 1M x 16Bit x 4 Banks) - - mww 0xffffea00 0x1 # SDRAMC_MR : issue a NOP command - mww 0x20000000 0 - mww 0xffffea00 0x2 # SDRAMC_MR : issue an 'All Banks Precharge' command - mww 0x20000000 0 - mww 0xffffea00 0x4 # SDRAMC_MR : issue 8 x 'Auto-Refresh' Command - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x4 - mww 0x20000000 0 - mww 0xffffea00 0x3 # SDRAMC_MR : issue a 'Load Mode Register' command - mww 0x20000000 0 - mww 0xffffea00 0x0 # SDRAMC_MR : normal mode - mww 0x20000000 0 - mww 0xffffea04 0x5d2 # SDRAMC_TR : Set refresh timer count to 15us -} - - -##################### -# Flash configuration -##################### - -#flash bank cfi <base> <size> <chip width> <bus width> <target#> -flash bank cfi 0x10000000 0x01000000 2 2 0 - Copied: trunk/src/target/target/at91sam9260.cfg (from rev 1348, trunk/src/target/target/at91sam9260minimal.cfg) Deleted: trunk/src/target/target/at91sam9260minimal.cfg =================================================================== --- trunk/src/target/target/at91sam9260minimal.cfg 2009-01-20 04:14:00 UTC (rev 1349) +++ trunk/src/target/target/at91sam9260minimal.cfg 2009-01-20 04:29:46 UTC (rev 1350) @@ -1,42 +0,0 @@ -###################################### -# Target: Atmel AT91SAM9260 -###################################### - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME at91sam9260 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - # force an error till we get a good number - set _CPUTAPID 0x0792603f -} - -reset_config trst_and_srst - -# -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -jtag_nsrst_delay 200 -jtag_ntrst_delay 200 - -###################### -# Target configuration -###################### - -set _TARGETNAME [format "%s.cpu" $_CHIPNAME] -target create $_TARGETNAME arm926ejs -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm926ejs - -# Internal sram1 memory -$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x00300000 -work-area-size 0x1000 -work-area-backup 1 - - |
From: <kc...@ma...> - 2009-01-20 05:14:05
|
Author: kc8apf Date: 2009-01-20 05:14:00 +0100 (Tue, 20 Jan 2009) New Revision: 1349 Added: trunk/src/target/interface/axm0432.cfg Log: Add axm0432 interface config courtesy of Alan Carvalho de Assis <ac...@gm...> Added: trunk/src/target/interface/axm0432.cfg =================================================================== --- trunk/src/target/interface/axm0432.cfg 2009-01-20 04:05:00 UTC (rev 1348) +++ trunk/src/target/interface/axm0432.cfg 2009-01-20 04:14:00 UTC (rev 1349) @@ -0,0 +1,6 @@ +#interface +interface ft2232 +ft2232_device_desc "Symphony SoundBite A" +ft2232_layout "axm0432_jtag" +ft2232_vid_pid 0x0403 0x6010 + Property changes on: trunk/src/target/interface/axm0432.cfg ___________________________________________________________________ Name: svn:eol-style + native |
From: <kc...@ma...> - 2009-01-20 05:05:14
|
Author: kc8apf Date: 2009-01-20 05:05:00 +0100 (Tue, 20 Jan 2009) New Revision: 1348 Modified: branches/openocd-0.1/Makefile.am branches/openocd-0.1/configure.in branches/openocd-0.1/src/Makefile.am branches/openocd-0.1/src/openocd.c tags/openocd-0.1.0/Makefile.am tags/openocd-0.1.0/configure.in tags/openocd-0.1.0/src/Makefile.am tags/openocd-0.1.0/src/openocd.c Log: Merge r1347 into 0.1.x and 0.1.0 Modified: branches/openocd-0.1/Makefile.am =================================================================== --- branches/openocd-0.1/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) +++ branches/openocd-0.1/Makefile.am 2009-01-20 04:05:00 UTC (rev 1348) @@ -2,8 +2,6 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 -EXTRA_DIST = guess-rev.sh - nobase_dist_pkgdata_DATA = \ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ Modified: branches/openocd-0.1/configure.in =================================================================== --- branches/openocd-0.1/configure.in 2009-01-20 04:03:31 UTC (rev 1347) +++ branches/openocd-0.1/configure.in 2009-01-20 04:05:00 UTC (rev 1348) @@ -27,7 +27,17 @@ is_cygwin=no is_mingw=no is_win32=no +build_release=yes +AC_ARG_ENABLE(release, + AS_HELP_STRING([--enable-release], [Enable Release Build, default no]), + [build_release=$enableval], [build_release=no]) + +if test $build_release = no; then + # check we can find guess-rev.sh + AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) +fi + # We are not *ALWAYS* being installed in the standard place. # We may be installed in a "tool-build" specific location. # Normally with other packages - as part of a tool distro. @@ -627,6 +637,7 @@ AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(openocd, 0.1.x) +AM_CONDITIONAL(RELEASE, test $build_release = yes) AM_CONDITIONAL(PARPORT, test $build_parport = yes) AM_CONDITIONAL(DUMMY, test $build_dummy = yes) AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes) Modified: branches/openocd-0.1/src/Makefile.am =================================================================== --- branches/openocd-0.1/src/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) +++ branches/openocd-0.1/src/Makefile.am 2009-01-20 04:05:00 UTC (rev 1348) @@ -6,7 +6,6 @@ MAINFILE = main.c endif - openocd_SOURCES = $(MAINFILE) openocd.c # set the include path found by configure @@ -17,10 +16,17 @@ # pass path to prefix path openocd_CPPFLAGS = \ -DPKGLIBDIR=\"$(pkglibdir)\" \ - -DPKGBLDDATE=\"`date +%F-%R`\" \ - -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" \ - @CPPFLAGS@ + -DPKGBLDDATE=\"`date +%F-%R`\" +if RELEASE +openocd_CPPFLAGS += -DRELSTR=\"Release\" -DPKGBLDREV=\"\" +else +openocd_CPPFLAGS += -DRELSTR=\"svn:\" -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" +endif + +# add default CPPFLAGS +openocd_CPPFLAGS += @CPPFLAGS@ + # the library search path. openocd_LDFLAGS = $(all_libraries) SUBDIRS = helper jtag xsvf target server flash pld @@ -59,8 +65,6 @@ endif endif - - openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a \ $(top_builddir)/src/target/libtarget.a $(top_builddir)/src/jtag/libjtag.a \ $(top_builddir)/src/helper/libhelper.a \ @@ -69,13 +73,10 @@ $(top_builddir)/src/pld/libpld.a \ $(FTDI2232LIB) $(MINGWLDADD) $(LIBUSB) - if HTTPD openocd_LDADD += -lmicrohttpd endif - - nobase_dist_pkglib_DATA = \ tcl/bitsbytes.tcl \ tcl/chip/atmel/at91/aic.tcl \ Modified: branches/openocd-0.1/src/openocd.c =================================================================== --- branches/openocd-0.1/src/openocd.c 2009-01-20 04:03:31 UTC (rev 1347) +++ branches/openocd-0.1/src/openocd.c 2009-01-20 04:05:00 UTC (rev 1348) @@ -24,7 +24,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") svn:" PKGBLDREV +#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") "RELSTR PKGBLDREV #ifdef HAVE_CONFIG_H #include "config.h" Modified: tags/openocd-0.1.0/Makefile.am =================================================================== --- tags/openocd-0.1.0/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) +++ tags/openocd-0.1.0/Makefile.am 2009-01-20 04:05:00 UTC (rev 1348) @@ -2,8 +2,6 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 -EXTRA_DIST = guess-rev.sh - nobase_dist_pkgdata_DATA = \ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ Modified: tags/openocd-0.1.0/configure.in =================================================================== --- tags/openocd-0.1.0/configure.in 2009-01-20 04:03:31 UTC (rev 1347) +++ tags/openocd-0.1.0/configure.in 2009-01-20 04:05:00 UTC (rev 1348) @@ -27,7 +27,17 @@ is_cygwin=no is_mingw=no is_win32=no +build_release=yes +AC_ARG_ENABLE(release, + AS_HELP_STRING([--enable-release], [Enable Release Build, default no]), + [build_release=$enableval], [build_release=no]) + +if test $build_release = no; then + # check we can find guess-rev.sh + AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) +fi + # We are not *ALWAYS* being installed in the standard place. # We may be installed in a "tool-build" specific location. # Normally with other packages - as part of a tool distro. @@ -627,6 +637,7 @@ AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(openocd, 0.1.0) +AM_CONDITIONAL(RELEASE, test $build_release = yes) AM_CONDITIONAL(PARPORT, test $build_parport = yes) AM_CONDITIONAL(DUMMY, test $build_dummy = yes) AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes) Modified: tags/openocd-0.1.0/src/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) +++ tags/openocd-0.1.0/src/Makefile.am 2009-01-20 04:05:00 UTC (rev 1348) @@ -6,7 +6,6 @@ MAINFILE = main.c endif - openocd_SOURCES = $(MAINFILE) openocd.c # set the include path found by configure @@ -17,10 +16,17 @@ # pass path to prefix path openocd_CPPFLAGS = \ -DPKGLIBDIR=\"$(pkglibdir)\" \ - -DPKGBLDDATE=\"`date +%F-%R`\" \ - -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" \ - @CPPFLAGS@ + -DPKGBLDDATE=\"`date +%F-%R`\" +if RELEASE +openocd_CPPFLAGS += -DRELSTR=\"Release\" -DPKGBLDREV=\"\" +else +openocd_CPPFLAGS += -DRELSTR=\"svn:\" -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" +endif + +# add default CPPFLAGS +openocd_CPPFLAGS += @CPPFLAGS@ + # the library search path. openocd_LDFLAGS = $(all_libraries) SUBDIRS = helper jtag xsvf target server flash pld @@ -59,8 +65,6 @@ endif endif - - openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a \ $(top_builddir)/src/target/libtarget.a $(top_builddir)/src/jtag/libjtag.a \ $(top_builddir)/src/helper/libhelper.a \ @@ -69,13 +73,10 @@ $(top_builddir)/src/pld/libpld.a \ $(FTDI2232LIB) $(MINGWLDADD) $(LIBUSB) - if HTTPD openocd_LDADD += -lmicrohttpd endif - - nobase_dist_pkglib_DATA = \ tcl/bitsbytes.tcl \ tcl/chip/atmel/at91/aic.tcl \ Modified: tags/openocd-0.1.0/src/openocd.c =================================================================== --- tags/openocd-0.1.0/src/openocd.c 2009-01-20 04:03:31 UTC (rev 1347) +++ tags/openocd-0.1.0/src/openocd.c 2009-01-20 04:05:00 UTC (rev 1348) @@ -24,7 +24,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") svn:" PKGBLDREV +#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") "RELSTR PKGBLDREV #ifdef HAVE_CONFIG_H #include "config.h" |
From: <kc...@ma...> - 2009-01-20 05:03:37
|
Author: kc8apf Date: 2009-01-20 05:03:31 +0100 (Tue, 20 Jan 2009) New Revision: 1347 Modified: trunk/Makefile.am trunk/configure.in trunk/src/Makefile.am trunk/src/openocd.c Log: Fixes for handling release versions Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) +++ trunk/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) @@ -2,8 +2,6 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 -EXTRA_DIST = guess-rev.sh - nobase_dist_pkgdata_DATA = \ contrib/libdcc/dcc_stdio.c \ contrib/libdcc/dcc_stdio.h \ Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-01-20 03:58:39 UTC (rev 1346) +++ trunk/configure.in 2009-01-20 04:03:31 UTC (rev 1347) @@ -27,7 +27,17 @@ is_cygwin=no is_mingw=no is_win32=no +build_release=yes +AC_ARG_ENABLE(release, + AS_HELP_STRING([--enable-release], [Enable Release Build, default no]), + [build_release=$enableval], [build_release=no]) + +if test $build_release = no; then + # check we can find guess-rev.sh + AC_CHECK_FILE("guess-rev.sh", build_release=no, build_release=yes) +fi + # We are not *ALWAYS* being installed in the standard place. # We may be installed in a "tool-build" specific location. # Normally with other packages - as part of a tool distro. @@ -627,6 +637,7 @@ AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(openocd, 1.0) +AM_CONDITIONAL(RELEASE, test $build_release = yes) AM_CONDITIONAL(PARPORT, test $build_parport = yes) AM_CONDITIONAL(DUMMY, test $build_dummy = yes) AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes) Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) +++ trunk/src/Makefile.am 2009-01-20 04:03:31 UTC (rev 1347) @@ -6,7 +6,6 @@ MAINFILE = main.c endif - openocd_SOURCES = $(MAINFILE) openocd.c # set the include path found by configure @@ -17,10 +16,17 @@ # pass path to prefix path openocd_CPPFLAGS = \ -DPKGLIBDIR=\"$(pkglibdir)\" \ - -DPKGBLDDATE=\"`date +%F-%R`\" \ - -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" \ - @CPPFLAGS@ + -DPKGBLDDATE=\"`date +%F-%R`\" +if RELEASE +openocd_CPPFLAGS += -DRELSTR=\"Release\" -DPKGBLDREV=\"\" +else +openocd_CPPFLAGS += -DRELSTR=\"svn:\" -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh`\" +endif + +# add default CPPFLAGS +openocd_CPPFLAGS += @CPPFLAGS@ + # the library search path. openocd_LDFLAGS = $(all_libraries) SUBDIRS = helper jtag xsvf svf target server flash pld @@ -59,8 +65,6 @@ endif endif - - openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a $(top_builddir)/src/svf/libsvf.a \ $(top_builddir)/src/target/libtarget.a $(top_builddir)/src/jtag/libjtag.a \ $(top_builddir)/src/helper/libhelper.a \ @@ -69,13 +73,10 @@ $(top_builddir)/src/pld/libpld.a \ $(FTDI2232LIB) $(MINGWLDADD) $(LIBUSB) - if HTTPD openocd_LDADD += -lmicrohttpd endif - - nobase_dist_pkglib_DATA = \ tcl/bitsbytes.tcl \ tcl/chip/atmel/at91/aic.tcl \ Modified: trunk/src/openocd.c =================================================================== --- trunk/src/openocd.c 2009-01-20 03:58:39 UTC (rev 1346) +++ trunk/src/openocd.c 2009-01-20 04:03:31 UTC (rev 1347) @@ -24,7 +24,7 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") svn:" PKGBLDREV +#define OPENOCD_VERSION "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") "RELSTR PKGBLDREV #ifdef HAVE_CONFIG_H #include "config.h" |
Author: kc8apf Date: 2009-01-20 04:58:39 +0100 (Tue, 20 Jan 2009) New Revision: 1346 Modified: branches/openocd-0.1/Makefile.am branches/openocd-0.1/doc/Makefile.am branches/openocd-0.1/src/Makefile.am branches/openocd-0.1/src/flash/Makefile.am branches/openocd-0.1/src/helper/Makefile.am branches/openocd-0.1/src/jtag/Makefile.am branches/openocd-0.1/src/pld/Makefile.am branches/openocd-0.1/src/server/Makefile.am branches/openocd-0.1/src/target/Makefile.am branches/openocd-0.1/src/xsvf/Makefile.am tags/openocd-0.1.0/Makefile.am tags/openocd-0.1.0/doc/Makefile.am tags/openocd-0.1.0/src/Makefile.am tags/openocd-0.1.0/src/flash/Makefile.am tags/openocd-0.1.0/src/helper/Makefile.am tags/openocd-0.1.0/src/jtag/Makefile.am tags/openocd-0.1.0/src/pld/Makefile.am tags/openocd-0.1.0/src/server/Makefile.am tags/openocd-0.1.0/src/target/Makefile.am tags/openocd-0.1.0/src/xsvf/Makefile.am Log: Merge r1345 into 0.1.x and 0.1.0 Modified: branches/openocd-0.1/Makefile.am =================================================================== --- branches/openocd-0.1/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -11,3 +11,14 @@ contrib/libdcc/README SUBDIRS = src doc + +MAINTAINERCLEANFILES = \ + configure \ + Makefile.in \ + depcomp \ + config.guess \ + config.sub \ + config.h.in \ + missing \ + aclocal.m4 \ + install-sh Modified: branches/openocd-0.1/doc/Makefile.am =================================================================== --- branches/openocd-0.1/doc/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/doc/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,4 @@ man_MANS = openocd.1 EXTRA_DIST = openocd.1 +MAINTAINERCLEANFILES = Makefile.in mdate-sh texinfo.tex Modified: branches/openocd-0.1/src/Makefile.am =================================================================== --- branches/openocd-0.1/src/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -95,3 +95,5 @@ tcl/memory.tcl \ tcl/mmr_helpers.tcl \ tcl/readable.tcl + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/flash/Makefile.am =================================================================== --- branches/openocd-0.1/src/flash/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/flash/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -8,3 +8,5 @@ noinst_HEADERS = flash.h lpc2000.h cfi.h non_cfi.h at91sam7.h at91sam7_old.h str7x.h str9x.h nand.h lpc3180_nand_controller.h \ stellaris.h str9xpec.h stm32x.h tms470.h s3c24xx_nand.h s3c24xx_regs_nand.h lpc288x.h mflash.h \ ocl.h pic32mx.h + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/helper/Makefile.am =================================================================== --- branches/openocd-0.1/src/helper/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/helper/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -32,3 +32,5 @@ # add startup_tcl.c to make clean list CLEANFILES = startup_tcl.c bin2char$(EXEEXT_FOR_BUILD) + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/jtag/Makefile.am =================================================================== --- branches/openocd-0.1/src/jtag/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/jtag/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -106,3 +106,5 @@ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/pld/Makefile.am =================================================================== --- branches/openocd-0.1/src/pld/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/pld/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libpld.a noinst_HEADERS = pld.h xilinx_bit.h virtex2.h libpld_a_SOURCES = pld.c xilinx_bit.c virtex2.c + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/server/Makefile.am =================================================================== --- branches/openocd-0.1/src/server/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/server/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -17,3 +17,5 @@ nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/target/Makefile.am =================================================================== --- branches/openocd-0.1/src/target/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/target/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -28,3 +28,5 @@ nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/interface/*.cfg) # Various preconfigured boards nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/board/*.cfg) + +MAINTAINERCLEANFILES = Makefile.in Modified: branches/openocd-0.1/src/xsvf/Makefile.am =================================================================== --- branches/openocd-0.1/src/xsvf/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ branches/openocd-0.1/src/xsvf/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libxsvf.a noinst_HEADERS = xsvf.h libxsvf_a_SOURCES = xsvf.c + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/Makefile.am =================================================================== --- tags/openocd-0.1.0/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -11,3 +11,14 @@ contrib/libdcc/README SUBDIRS = src doc + +MAINTAINERCLEANFILES = \ + configure \ + Makefile.in \ + depcomp \ + config.guess \ + config.sub \ + config.h.in \ + missing \ + aclocal.m4 \ + install-sh Modified: tags/openocd-0.1.0/doc/Makefile.am =================================================================== --- tags/openocd-0.1.0/doc/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/doc/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,4 @@ man_MANS = openocd.1 EXTRA_DIST = openocd.1 +MAINTAINERCLEANFILES = Makefile.in mdate-sh texinfo.tex Modified: tags/openocd-0.1.0/src/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -95,3 +95,5 @@ tcl/memory.tcl \ tcl/mmr_helpers.tcl \ tcl/readable.tcl + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/flash/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/flash/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/flash/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -8,3 +8,5 @@ noinst_HEADERS = flash.h lpc2000.h cfi.h non_cfi.h at91sam7.h at91sam7_old.h str7x.h str9x.h nand.h lpc3180_nand_controller.h \ stellaris.h str9xpec.h stm32x.h tms470.h s3c24xx_nand.h s3c24xx_regs_nand.h lpc288x.h mflash.h \ ocl.h pic32mx.h + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/helper/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/helper/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/helper/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -32,3 +32,5 @@ # add startup_tcl.c to make clean list CLEANFILES = startup_tcl.c bin2char$(EXEEXT_FOR_BUILD) + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/jtag/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/jtag/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/jtag/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -106,3 +106,5 @@ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/pld/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/pld/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/pld/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libpld.a noinst_HEADERS = pld.h xilinx_bit.h virtex2.h libpld_a_SOURCES = pld.c xilinx_bit.c virtex2.c + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/server/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/server/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/server/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -17,3 +17,5 @@ nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/target/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/target/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/target/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -28,3 +28,5 @@ nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/interface/*.cfg) # Various preconfigured boards nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/board/*.cfg) + +MAINTAINERCLEANFILES = Makefile.in Modified: tags/openocd-0.1.0/src/xsvf/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/xsvf/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) +++ tags/openocd-0.1.0/src/xsvf/Makefile.am 2009-01-20 03:58:39 UTC (rev 1346) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libxsvf.a noinst_HEADERS = xsvf.h libxsvf_a_SOURCES = xsvf.c + +MAINTAINERCLEANFILES = Makefile.in |
From: <kc...@ma...> - 2009-01-20 04:55:53
|
Author: kc8apf Date: 2009-01-20 04:55:38 +0100 (Tue, 20 Jan 2009) New Revision: 1345 Modified: trunk/Makefile.am trunk/doc/Makefile.am trunk/src/Makefile.am trunk/src/flash/Makefile.am trunk/src/helper/Makefile.am trunk/src/jtag/Makefile.am trunk/src/pld/Makefile.am trunk/src/server/Makefile.am trunk/src/svf/Makefile.am trunk/src/target/Makefile.am trunk/src/xsvf/Makefile.am Log: Fix 'make maintainer-clean' courtesy of Zach Welch <zw...@su...> Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -11,3 +11,14 @@ contrib/libdcc/README SUBDIRS = src doc + +MAINTAINERCLEANFILES = \ + configure \ + Makefile.in \ + depcomp \ + config.guess \ + config.sub \ + config.h.in \ + missing \ + aclocal.m4 \ + install-sh Modified: trunk/doc/Makefile.am =================================================================== --- trunk/doc/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/doc/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -3,3 +3,4 @@ man_MANS = openocd.1 EXTRA_DIST = openocd.1 +MAINTAINERCLEANFILES = Makefile.in mdate-sh texinfo.tex Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -95,3 +95,5 @@ tcl/memory.tcl \ tcl/mmr_helpers.tcl \ tcl/readable.tcl + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/flash/Makefile.am =================================================================== --- trunk/src/flash/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/flash/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -8,3 +8,5 @@ noinst_HEADERS = flash.h lpc2000.h cfi.h non_cfi.h at91sam7.h at91sam7_old.h str7x.h str9x.h nand.h lpc3180_nand_controller.h \ stellaris.h str9xpec.h stm32x.h tms470.h s3c24xx_nand.h s3c24xx_regs_nand.h lpc288x.h mflash.h \ ocl.h pic32mx.h + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/helper/Makefile.am =================================================================== --- trunk/src/helper/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/helper/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -32,3 +32,5 @@ # add startup_tcl.c to make clean list CLEANFILES = startup_tcl.c bin2char$(EXEEXT_FOR_BUILD) + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/jtag/Makefile.am =================================================================== --- trunk/src/jtag/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/jtag/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -106,3 +106,5 @@ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/pld/Makefile.am =================================================================== --- trunk/src/pld/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/pld/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libpld.a noinst_HEADERS = pld.h xilinx_bit.h virtex2.h libpld_a_SOURCES = pld.c xilinx_bit.c virtex2.c + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/server/Makefile.am =================================================================== --- trunk/src/server/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/server/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -17,3 +17,5 @@ nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/svf/Makefile.am =================================================================== --- trunk/src/svf/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/svf/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libsvf.a noinst_HEADERS = svf.h libsvf_a_SOURCES = svf.c + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/target/Makefile.am =================================================================== --- trunk/src/target/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/target/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -28,3 +28,5 @@ nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/interface/*.cfg) # Various preconfigured boards nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/board/*.cfg) + +MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/xsvf/Makefile.am =================================================================== --- trunk/src/xsvf/Makefile.am 2009-01-20 03:50:12 UTC (rev 1344) +++ trunk/src/xsvf/Makefile.am 2009-01-20 03:55:38 UTC (rev 1345) @@ -3,3 +3,5 @@ noinst_LIBRARIES = libxsvf.a noinst_HEADERS = xsvf.h libxsvf_a_SOURCES = xsvf.c + +MAINTAINERCLEANFILES = Makefile.in |
From: <kc...@ma...> - 2009-01-20 04:50:16
|
Author: kc8apf Date: 2009-01-20 04:50:12 +0100 (Tue, 20 Jan 2009) New Revision: 1344 Modified: trunk/src/svf/ Log: Ignore src/svf/Makefile.in Property changes on: trunk/src/svf ___________________________________________________________________ Name: svn:ignore + Makefile.in |