Newer
Older
m5scp2_exp / m5latest.sh
#!/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="1234"
# LOGIN="23a5000"
MYUID="0"
LOGIN="23a5000"

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 -o /dev/null -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 "MYUID と LOGIN が間違っています。https://lattr.istlab.info/dashboard を確認してください。"
    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