diff --git a/44_write_latest.sh b/44_write_latest.sh index 7559a07..0364e1a 100755 --- a/44_write_latest.sh +++ b/44_write_latest.sh @@ -2,46 +2,159 @@ source ./lib.sh -# Get esptool command -BUILD_TOOL=$(lib_get_esptool_command) - -# Find port - Cross-platform detection -PORT=$(lib_detect_esptool_port) - -# Check if PORT is set, otherwise prompt user -if [ -z "$PORT" ]; then - lib_no_esp_device_message_and_exit +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 -echo "Using port: $PORT" +# ダウンロードURL +URL="https://lattr.istlab.info/ino_download_latest" +URL_SHOW="https://lattr.istlab.info/ino_show_latest" -# Define the paths to the firmware files -BUILD_PATH="." -BOOTLOADER_PATH="$BUILD_PATH/latest.bootloader.bin" -PARTITIONS_PATH="$BUILD_PATH/latest.partitions.bin" -FIRMWARE_PATH="$BUILD_PATH/latest.bin" -# Check if all required files exist -if [ ! -f "$BOOTLOADER_PATH" ]; then - echo "Bootloader file not found at $BOOTLOADER_PATH" - exit 1 -fi -if [ ! -f "$PARTITIONS_PATH" ]; then - echo "Partitions file not found at $PARTITIONS_PATH" - exit 1 -fi -if [ ! -f "$FIRMWARE_PATH" ]; then - echo "Firmware file not found at $FIRMWARE_PATH" - exit 1 +## あなたの情報 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_latest_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 "Flashing complete ESP32 firmware..." -echo "Bootloader: $BOOTLOADER_PATH" -echo "Partitions: $PARTITIONS_PATH" -echo "Main firmware: $FIRMWARE_PATH" -# Upload the complete firmware using esptool.py -$BUILD_TOOL --chip esp32 --port "$PORT" --baud 460800 write_flash -z \ - 0x1000 "$BOOTLOADER_PATH" \ - 0x8000 "$PARTITIONS_PATH" \ - 0x10000 "$FIRMWARE_PATH" && echo "Flashing completed." \ No newline at end of file +# 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} + # 書き込みを行う + if [ "$1" == "y" ]; then + yn='y' + else + read -p "書き込みを行いますか?(y/n): " yn + fi + if [ $yn = "y" ]; then + # Get esptool command + BUILD_TOOL=$(lib_get_esptool_command) + # BUILD_TOOLの文字列の長さが25以上の場合は、終了する + if [ ${#BUILD_TOOL} -ge 25 ]; then + echo $BUILD_TOOL + echo "===" + echo "Please execute the script again." + echo "(上記のメッセージを確認したあと) もう一度実行してください。" + echo "===" + exit 1 + fi + + # Find port - Cross-platform detection + PORT=$(lib_detect_esptool_port) + + # Check if PORT is set, otherwise prompt user + if [ -z "$PORT" ]; then + lib_no_esp_device_message_and_exit + fi + + echo "Using port: $PORT" + + # Check if all required files exist + if [ ! -f "latest.bootloader.bin" ]; then + echo "Bootloader file not found: latest.bootloader.bin" + exit 1 + fi + if [ ! -f "latest.partitions.bin" ]; then + echo "Partitions file not found: latest.partitions.bin" + exit 1 + fi + if [ ! -f "latest.bin" ]; then + echo "Firmware file not found: latest.bin" + exit 1 + fi + + echo "Flashing ESP32 firmware using esptool..." + echo "Bootloader: latest.bootloader.bin" + echo "Partitions: latest.partitions.bin" + echo "Main firmware: latest.bin" + + # Upload the firmware using esptool.py + $BUILD_TOOL --chip esp32 --port "$PORT" --baud 460800 write-flash -z \ + 0x1000 "latest.bootloader.bin" \ + 0x8000 "latest.partitions.bin" \ + 0x10000 "latest.bin" + + echo "Flashing completed." + fi + # シリアルモニタを開くか確認 + if [ -z "$2" ]; then + read -p "シリアルモニタを開きますか?(y/n): " yn + else + yn=$2 + fi + if [ $yn = "y" ]; then + echo "終了するときはCtrl+Cを押してください。" + arduino-cli monitor -p "$PORT" --config 115200 + fi +fi diff --git a/m5latest.sh b/m5latest.sh index cbf3131..0364e1a 100755 --- a/m5latest.sh +++ b/m5latest.sh @@ -27,7 +27,7 @@ echo "あなたの情報は https://lattr.istlab.info/dashboard に書かれています。" read -p "あなたの情報を確認するため、ブラウザを開きますか?(y/n): " yn echo "一旦終了します。エディタで m5latest.sh をひらき、MYUID と LOGIN を設定し、保存してください。" - echo "(sedコマンドによる文字列置換で設定したいときは、99_m5latest_setup.sh を実行してください。)" + echo "(sedコマンドによる文字列置換で設定したいときは、99_latest_setup.sh を実行してください。)" sleep 2 if [ $yn = "y" ]; then url=https://lattr.istlab.info/dashboard