#!/bin/bash
if [ "$1" == "-h" ] || [ "$1" == "help" ] || [ "$1" == "h" ] ; then
echo "Usage: m5latest.sh [y] [y/n]"
echo " 第一引数の y : ビルド完了まで待ち、ダウンロード後に自動で書込みを行います。"
echo " 第二引数の y/n : シリアルモニタを開く場合はyを指定してください。"
echo "例: m5latest.sh y y # ビルド完了まで待ち、書込みを行い、シリアルモニタを開く。"
exit
fi
# ダウンロードURL
URL="https://lattr.istlab.info/ino_download_latest"
URL_SHOW="https://lattr.istlab.info/ino_show_latest"
## あなたの情報 https://lattr.istlab.info/dashboard に書かれていますので設定してください。
# (例)
# MYUID="44"
# LOGIN="33"
MYUID="44"
LOGIN="33"
if [ ${MYUID} -eq 0 ] ; then
echo "m5latest.sh をつかうには、20行目付近に、あなたの情報(MYUID と LOGIN)を書き込む必要があります。"
echo "あなたの情報は https://lattr.istlab.info/dashboard に書かれています。"
read -p "あなたの情報を確認するため、ブラウザを開きますか?(y/n): " yn
echo "一旦終了します。エディタで m5latest.sh をひらき、MYUID と LOGIN を設定し、保存してください。"
echo "(sedコマンドによる文字列置換で設定したいときは、99_m5latest_setup.sh を実行してください。)"
sleep 2
if [ $yn = "y" ]; then
url=https://lattr.istlab.info/dashboard
unameOut="$(uname -s)"
case "${unameOut}" in
Darwin*)
# macOS の場合
open "$url"
;;
MINGW*|MSYS*|CYGWIN*)
# Windows (Git Bash, MSYS, Cygwin) の場合
start "$url"
;;
*)
echo "このOSでは自動でブラウザを開けません。URL: $url"
;;
esac
fi
exit
fi
# echo connecting to ${URL}
info=`curl -s -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL_SHOW}`
echo "------------------------------"
echo ${info}
# もし、infoにhash:p1 が含まれていたら、注意喚起する
if [[ $info =~ hash:p1 ]]; then
echo "注:Plus2(黄色)ではなく、Plus(オレンジ色)用のプログラムです。"
board="plus"
else
board="plus2"
fi
echo "------------------------------"
# POSTリクエストを送信し、レスポンスコードを取得
RESPONSE_CODE=$(curl -o latest.bin -s -w "%{http_code}" -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL})
if [ "$RESPONSE_CODE" -ne 200 ]; then
echo "エラー: レスポンスコード $RESPONSE_CODE が返されました。"
if [ "$RESPONSE_CODE" -eq 403 ]; then
echo "ユーザIDとログインIDが間違っています。"
exit
fi
fi
# レスポンスコードが404でない場合、メッセージを表示
if [ "$RESPONSE_CODE" -eq 404 ]; then
echo "まだビルド(コンパイル)が終わっていません。"
if [ "$1" == "y" ]; then
while true ; do
sleep 5
RESPONSE_CODE=$(curl -o latest.bin -s -w "%{http_code}" -X POST -d "uid=${MYUID}&login=${LOGIN}" ${URL})
if [ "$RESPONSE_CODE" -eq 200 ]; then
break
fi
echo -n "."
done
fi
fi
if [ "$RESPONSE_CODE" -eq 200 ]; then
echo "ダウンロード成功: (レスポンスコード $RESPONSE_CODE)"
curl -o latest.partitions.bin -s -X POST -d "uid=${MYUID}&login=${LOGIN}&type=partitions" ${URL}
curl -o latest.bootloader.bin -s -X POST -d "uid=${MYUID}&login=${LOGIN}&type=bootloader" ${URL}
# 書き込みを行う
serials=`arduino-cli board list | grep USB | awk '{print $1}'`
seriallist=($serials)
if [ "$1" == "y" ]; then
yn='y'
else
read -p "書き込みを行いますか?(y/n): " yn
fi
if [ $yn = "y" ]; then
if [ -z "${serials}" ]; then
echo "デバイスがみつかりませんでした。"
sleep 2
echo "デバイスを接続しているのに認識しないときは、ドライバを入れてください。"
sleep 2
echo "https://ftdichip.com/drivers/vcp-drivers/ → Click here to download の hereをおす。ZIP解凍して実行。"
exit
fi
for ser in ${seriallist[@]} ; do
echo ${ser}
arduino-cli upload --fqbn esp32:esp32:m5stack_stickc_${board} -p ${ser} --input-file latest.bin
done
fi
# 接続デバイスが1つのみの場合、シリアルモニタを開くか確認
if [[ "${#seriallist[@]}" -eq 1 ]]; then
if [ -z "$2" ]; then
read -p "シリアルモニタを開きますか?(y/n): " yn
else
yn=$2
fi
if [ $yn = "y" ]; then
echo "終了するときはCtrl+Cを押してください。"
arduino-cli monitor -p ${seriallist[0]} --config 115200
fi
fi
fi