Programmer TinyG2 sur Mac OSX

TinyG2 est un logiciel très prometteur de pilotage de CNC. De grosses évolutions ont eu leu ces dernières semaines, conduisant à une évolution de l'architecture du logiciel pour permettre la compilation sur différents plateformes à base d'Arm. Pour ce faire, toutes les fonctions de pilotage de CNC ont été mises dans un coeur baptisé G2Core (https://github.com/synthetos/g2 ), l'interface matérielle ayant été déportée dans un sous projet nommé Motate (https://github.com/synthetos/Motate/). Un petit bug dans un script annexe empeche la programmation après compilation à partir d'un Mac. Voyons comment le corriger...

G2 Core, le moteur de TinyG2 : g2core.png

Le problème :

Le script DueFromOSX.sh est censé envoyer un binaire à la carte en utilisant l'un des éléments de la chaine de compilation arduino : bossac. Malheureusement, le script utilise l’architecture de répertoires définie dans l'environnement Arduino pour des version inférieures à la 1.5. Or depuis la 1.5 qui supporte des cartes additionnelles, les compilateurs additionnels sont placés dans un répertoire ~/Library/Arduino15/ et non dans /Application/Arduino.app/Contents/Resources/Java/hardware/tools/. Ca marche donc pas terrible.

La solution, version 1 :

Remplacer le script DueFromOsx.sh par le script suivant (en gras les lignes modifées):

#!/bin/bash
__arduinoLibDir=~/Library/Arduino15/
#PATH=$PATH:$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/g++_arm_none_eabi/bin/:$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/
PATH=$PATH:$arduinoLibDir/packages/arduino/tools/arm-none-eabi-gcc/*/bin/:$arduinoLibDir/packages/arduino/tools/__


function show_usage() {
	cat <<END
	USAGE: $0 -f TinyG.elf -p <native port>
    
	Replacing <native port> with the device name of the Arduino Due native port
	or TinyG v9 port, respctively.

	One of the following may be a valid choice:
	
END
	
	ls -1 /dev/tty.usbmodem* | xargs echo "          "
	
	cat <<END

	You may be able to use /dev/tty.usbmodem* (with the star) if there is only one.
END
}

file=""
port=""
native_port="true"

while getopts h?f:p:P: flag; do
	case $flag in
		f)
			file=$OPTARG
			;;
		p)
			port=$OPTARG
			;;
		P)
			port=$OPTARG
			native_port="false"
			;;
		[h])
			show_usage;
			exit 0
			;;
	esac
done

if [[ ${file} == "" ]]; then
	echo "Error: Please specify a file to program. The name will most likely be 'TinyG.elf'."
	exit 1;
fi

if [[ ${port} == "" ]]; then
	echo "Error: Please specify a port with -p or -P. Currently visible ports:"
	ls -1 /dev/tty.usbmodem* | xargs echo "    "
	exit 1;
fi


arm-none-eabi-objcopy -O binary "${file}" "${file/.elf/.bin}" 

echo "Forcing reset using 1200bps open/close on port ${port}"
# perl -e 'open(my $fh, ">", "${port}"); close($fh);'
stty -f "${port}" 1200
echo "wait..."
# echo "" > "${port}"
# perl -e 'open(my $fh, ">", "${port}"); close($fh);'

sleep 0.5

# stty -f "${port}" 115200

echo "Starting programming of file ${file} -> ${file/.elf/.bin} on port ${port/\/dev\//}"
__#$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/bossac -e -w -v -b "${file/.elf/.bin}"
$arduinoLibDir/packages/arduino/tools/bossac/*/bossac -e -w -v -b "${file/.elf/.bin}"__
echo
echo "WARNING: You may need to hit the RESET button on the device at this point."

##----------- PROGRAMMING port
#Forcing reset using 1200bps open/close on port /dev/tty.usbmodem26231
#bossac --port=tty.usbmodem26231 -U false -e -w -v -b $tmp/BareMinimum.cpp.bin -R 

La solution, version 2 :

Elle est trouvable dans les propositions de MAJ sur le Github: https://github.com/synthetos/g2/pull/118/files?diff=split Cela repose sur la commande locate afin de trovuer l'utilitaire "bossac", mais je suis moins fan, car il semblerait qu'Arduino n'envisage pas de changer les répertoires de si tôt. Il me semble donc plus logique d'utiliser la dernière arborescence connue et d'aller chercher directement bossac dans ~/Library/Arduino15/packages/arduino/tools/bossac/*/bossac . Mais tout cela n'est qu'une affaire de goût.

Ok, et après?

Et bien après il suffit de compiler avec la commande make, en précisant la config choisie (ici, compilation avec une machine de mon cru c'est à dire une Proxxon KT150, et une shield également de mon cru, la GTwo (cf https://github.com/labsud/GTwo):

make CONFIG=proxxon BOARD=GTwo clean
make CONFIG=proxxon BOARD=GTwo
../Resources/TinyG2-OSX-Programmer/DueFromOSX.sh -f bin/proxxon-GTwo/g2core.elf -p /dev/tty.usbmodem*