bool execute_master_command_1(Meridim90Union a_meridim, bool a_flg_exe)


Master Commandの第1群を実行する. 受信コマンドに基づき, 異なる処理を行う.
引数1 : a_meridim 実行したいコマンドの入ったMeridim配列を渡す.
引数2 : a_flg_exe Meridimの受信成功判定フラグを渡す.
戻り値 : コマンドを実行した場合はtrue, しなかった場合はfalseを返す.


/// @brief Master Commandの第1群を実行する. 受信コマンドに基づき, 異なる処理を行う.
/// @param a_meridim 実行したいコマンドの入ったMeridim配列を渡す.
/// @param a_flg_exe Meridimの受信成功判定フラグを渡す.
/// @return コマンドを実行した場合はtrue, しなかった場合はfalseを返す.
bool execute_master_command_1(Meridim90Union a_meridim, bool a_flg_exe) {
  if (!a_flg_exe) {
    return false;
  }

  // コマンド[90]: 1~999は MeridimのLength. デフォルトは90

  // コマンド:MCMD_CLEAR_SERVO_ERROR_ID (10004) 通信エラーサーボIDのクリア
  if (a_meridim.sval[MRD_MASTER] == MCMD_CLEAR_SERVO_ERROR_ID) {
    r_udp_meridim.bval[MRD_ERR_l] = 0;
    s_udp_meridim.bval[MRD_ERR_l] = 0;
    for (int i = 0; i < IXL_MAX; i++) {
      sv.IXL_err[i] = 0;
    }
    for (int i = 0; i < IXR_MAX; i++) {
      sv.IXR_err[i] = 0;
    }
    Serial.println("Servo Error ID reset.");
    return true;
  }

  // コマンド:MCMD_BOARD_TRANSMIT_ACTIVE (10005) UDP受信の通信周期制御をボード側主導に(デフォルト)
  if (a_meridim.sval[MRD_MASTER] == MCMD_BOARD_TRANSMIT_ACTIVE) {
    flg.udp_board_passive = false; // UDP送信をアクティブモードに
    flg.frame_timer_reset = true; // フレームの管理時計をリセットフラグをセット
    return true;
  }

  // コマンド:MCMD_ENTER_EEPROM_WRITE_MODE (10009) EEPROMの書き込みモードスタート
  if (a_meridim.sval[MRD_MASTER] == MCMD_ENTER_EEPROM_WRITE_MODE) {
    flg.eeprom_write_mode = true; // 書き込みモードのフラグをセット
    flg.frame_timer_reset = true; // フレームの管理時計をリセットフラグをセット
    return true;
  }
  return false;
}