3 # bit $1 is set in $2 (8 bits)
5 return $[ $[ $2 / $[ ( 1 << $1 ) ] ] % 2 ]
6 # <<$ fix syntax coloration
17 NAME=`cut -d ' ' -f 2- ${MCU_DESC_FILE} | grep "^$bit $1" | cut -d ' ' -f 3`
18 if [ -z "$NAME" ]; then
23 echo -n "$NAME=$bitval"
33 echo "0x`cat $1 | head -1 | cut -b10-11`" > $1.tmp
39 printf ":01000000%.2X" `cat $1` > $1.tmp
40 printf "%.2X\n" $[ 0xFF - `cat $1` ] >> $1.tmp
41 echo ":00000001FF" >> $1.tmp
46 # 1/ read fuse state if possible
52 echo "----------------------------------------------------------"
53 echo " Programming fuses"
54 echo "----------------------------------------------------------"
56 echo "Warning : It can bue dangerous to program your fuses: some"
57 echo "configurations will prevent you to program your uC. Be sure"
58 echo "that you have carrefully read the documentation, and that"
59 echo "you know what you're doing"
61 echo "Warning : 0 means programmed and 1 means unprogrammed (see"
62 echo "AVR documentation for details"
64 echo "BIT FAT WARNING ! PLEASE CHECK THE DOCUMENTATION BEFORE"
65 echo "PROGRAMMING BECAUSE SOME PARTS HAVE NOT BEEN TESTED"
70 echo -n "Are you sure ? [y/n] "
82 echo " Please type 'y' or 'n'"
86 if [ ! -f ${MCU_DESC_FILE} ]; then
88 echo "Can't find the file ${MCU_DESC_FILE}"
89 echo "If `basename ${MCU_DESC_FILE}` is a valid uC, you should add it in"
90 echo "AVERSIVE/config/fuses_defs directory"
94 if [ -z "${PROGRAMMER}" ]; then
96 echo " PROGRAMMER variable is not defined, check that the script"
97 echo " is launched from a 'make fuse' in project directory"
101 if [ "${PROGRAMMER}" = "avrdude" -a -z "${AVRDUDE}" ]; then
103 echo " AVRDUDE variable is not defined, check that the script"
104 echo " is launched from a 'make fuse' in project directory"
108 if [ "${AVARICE}" = "avarice" -a -z "${AVARICE}" ]; then
110 echo " AVARICE variable is not defined, check that the script"
111 echo " is launched from a 'make fuse' in project directory"
115 if [ "${PROGRAMMER}" = "avarice" ]; then
117 echo " Sorry, AVARICE fuse programming is not implemented now"
121 if [ `wc -c ${MCU_DESC_FILE} | cut -d ' ' -f 1` -eq 0 ]; then
122 echo "Aborting : this uC does not have any fuse to program."
127 FUSE_LIST=`cut -d ' ' -f 3 ${MCU_DESC_FILE} | sort -u`
129 echo "Reading current fuse state"
131 if [ ! -z "${AVRDUDE_DELAY}" ]; then
132 DELAY="-i ${AVRDUDE_DELAY}"
139 for f in ${FUSE_LIST}
141 rm -f $f 2> /dev/null
143 ${AVRDUDE} ${DELAY} -p ${MCU} -P `echo ${AVRDUDE_PORT} | sed 's,",,g'` -c ${AVRDUDE_PROGRAMMER} -U ${f}:r:${f}:i
152 if [ $CANNOT_READ -eq 1 ]; then
153 echo -n "Problem during reading fuse. Continue anyway with writing ? [y/N] "
167 for f in ${FUSE_LIST}; do
169 disp_fuse $f `cat $f`
175 echo "Now please enter the new value for each fuse. The default one"
176 echo "is the value that has been read, or factory default if read failed"
180 NB_LINE=`wc -l ${MCU_DESC_FILE} | cut -d ' ' -f 1`
181 SEQ_END=$[ ${NB_LINE} - 1 ]
183 for i in `seq 0 ${SEQ_END}`
185 LINE=`grep "^${i} " ${MCU_DESC_FILE}`
186 BIT=`echo ${LINE} | cut -d ' ' -f 2`
187 FUSE=`echo ${LINE} | cut -d ' ' -f 3`
188 NAME=`echo ${LINE} | cut -d ' ' -f 4`
189 FACTORY=`echo ${LINE} | cut -d ' ' -f 5`
192 HELP=`echo ${LINE} | cut -d ' ' -f 6-`
193 if [ -f ${FUSE} ]; then
195 bit_is_set $BIT `printf "%d" $BIN_FUSE`
200 echo -n "[$FUSE:${BIT}] ${NAME} <${HELP}> (factory=${DEFAULT}) (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 ${AVRDUDE} -p ${MCU} -P `echo ${AVRDUDE_PORT} | sed 's,",,g'` -c ${AVRDUDE_PROGRAMMER} -U ${f}:w:${f}_new:i ${DELAY}
256 echo " Please type 'y' or 'n'"