3 # bit $1 is set in $2 (8 bits)
5 return $[ $[ $2 / $[ ( 1 << $1 ) ] ] % 2 ]
6 # <<$ fix syntax coloration
15 while [ $bit -ge 0 ]; do
16 NAME=`cut -d ' ' -f 2- ${MCU_DESC_FILE} | grep "^$bit $1" | cut -d ' ' -f 3`
17 if [ -z "$NAME" ]; then
22 echo -n "$NAME=$bitval"
32 echo "0x`cat $1 | head -1 | cut -b10-11`" > $1.tmp
38 printf ":01000000%.2X" `cat $1` > $1.tmp
39 printf "%.2X\n" $[ 0xFF - `cat $1` ] >> $1.tmp
40 echo ":00000001FF" >> $1.tmp
45 # 1/ read fuse state if possible
51 echo "----------------------------------------------------------"
52 echo " Programming fuses"
53 echo "----------------------------------------------------------"
55 echo "Warning : It can bue dangerous to program your fuses: some"
56 echo "configurations will prevent you to program your uC. Be sure"
57 echo "that you have carrefully read the documentation, and that"
58 echo "you know what you're doing"
60 echo "Warning : 0 means programmed and 1 means unprogrammed (see"
61 echo "AVR documentation for details"
63 echo "BIT FAT WARNING ! PLEASE CHECK THE DOCUMENTATION BEFORE"
64 echo "PROGRAMMING BECAUSE SOME PARTS HAVE NOT BEEN TESTED"
68 echo -n "Are you sure ? [y/n] "
80 echo " Please type 'y' or 'n'"
84 if [ ! -f ${MCU_DESC_FILE} ]; then
86 echo "Can't find the file ${MCU_DESC_FILE}"
87 echo "If `basename ${MCU_DESC_FILE}` is a valid uC, you should add it in"
88 echo "AVERSIVE/config/fuses_defs directory"
92 if [ -z "${PROGRAMMER}" ]; then
94 echo " PROGRAMMER variable is not defined, check that the script"
95 echo " is launched from a 'make fuse' in project directory"
99 if [ "${PROGRAMMER}" = "avrdude" -a -z "${AVRDUDE}" ]; then
101 echo " AVRDUDE variable is not defined, check that the script"
102 echo " is launched from a 'make fuse' in project directory"
106 if [ "${AVARICE}" = "avarice" -a -z "${AVARICE}" ]; then
108 echo " AVARICE variable is not defined, check that the script"
109 echo " is launched from a 'make fuse' in project directory"
113 if [ "${PROGRAMMER}" = "avarice" ]; then
115 echo " Sorry, AVARICE fuse programming is not implemented now"
119 if [ `wc -c ${MCU_DESC_FILE} | cut -d ' ' -f 1` -eq 0 ]; then
120 echo "Aborting : this uC does not have any fuse to program."
125 FUSE_LIST=`cut -d ' ' -f 3 ${MCU_DESC_FILE} | sort -u`
127 echo "Reading current fuse state"
129 if [ ! -z "${AVRDUDE_DELAY}" ]; then
130 DELAY="-i ${AVRDUDE_DELAY}"
137 for f in ${FUSE_LIST}
139 rm -f $f 2> /dev/null
141 ${AVRDUDE} ${DELAY} -p ${MCU} -P `echo ${AVRDUDE_PORT} | sed 's,",,g'` \
142 -c ${AVRDUDE_PROGRAMMER} -U ${f}:r:${f}:i
151 if [ $CANNOT_READ -eq 1 ]; then
152 echo -n "Problem during reading fuse. Continue anyway with writing ? [y/N] "
166 for f in ${FUSE_LIST}; do
168 disp_fuse $f `cat $f`
174 echo "Now please enter the new value for each fuse. The default one"
175 echo "is the value that has been read, or factory default if read failed"
179 NB_LINE=`wc -l ${MCU_DESC_FILE} | cut -d ' ' -f 1`
180 SEQ_END=$[ ${NB_LINE} - 1 ]
182 for i in `seq 0 ${SEQ_END}`
184 LINE=`grep "^${i} " ${MCU_DESC_FILE}`
185 BIT=`echo ${LINE} | cut -d ' ' -f 2`
186 FUSE=`echo ${LINE} | cut -d ' ' -f 3`
187 NAME=`echo ${LINE} | cut -d ' ' -f 4`
188 FACTORY=`echo ${LINE} | cut -d ' ' -f 5`
191 HELP=`echo ${LINE} | cut -d ' ' -f 6-`
192 if [ -f ${FUSE} ]; then
194 bit_is_set $BIT `printf "%d" $BIN_FUSE`
199 echo -n "[$FUSE:${BIT}] ${NAME} <${HELP}> (factory=${DEFAULT}) "
200 echo -n "(current=${CURRENT}) [${DEFAULT}] ? "
203 if [ -z "$ans" ] ; then
209 printf "0x%x\n" $[ $[ ( 1 << $BIT ) ] + `cat ${FUSE}_new` ] > ${FUSE}_new
210 # <<$ fix syntax coloration
211 echo " get 1 (unprogrammed)"
214 echo " get 0 (programmed)"
217 echo "Bad answer, aborting..."
224 echo "Summary of new values :"
227 for f in ${FUSE_LIST}; do
228 if [ ! -f ${f}_new ]; then
229 echo "ERROR: cannot find ${f}_new, aborting"
232 disp_fuse $f `cat ${f}_new`
240 echo -n "Are you sure ? [y/n] "
245 for f in ${FUSE_LIST}; do
247 PORT=`echo ${AVRDUDE_PORT} | sed 's,",,g'`
248 ${AVRDUDE} -p ${MCU} -P ${PORT} \
249 -c ${AVRDUDE_PROGRAMMER} \
250 -U ${f}:w:${f}_new:i ${DELAY}
259 echo " Please type 'y' or 'n'"