code: def send_calibrate_magnetometer(self):
          
  
          # ArduPilot requires the MAV_CMD_DO_START_MAG_CAL command, only present in the ardupilotmega.xml definition
          if self._autopilot_type == mavutil.mavlink.MAV_AUTOPILOT_ARDUPILOTMEGA:
              calibration_command = self.message_factory.command_long_encode(
                  self._handler.target_system, 0,  # target_system, target_component
                  mavutil.mavlink.MAV_CMD_DO_START_MAG_CAL,  # command
                  0,  # confirmation
                  0,  # param 1, uint8_t bitmask of magnetometers (0 means all).
                  1,  # param 2, Automatically retry on failure (0=no retry, 1=retry).
                  1,  # param 3, Save without user input (0=require input, 1=autosave).
                  0,  # param 4, Delay (seconds).
                  0,  # param 5, Autoreboot (0=user reboot, 1=autoreboot).
                  0,  # param 6, Empty.
                  0,  # param 7, Empty.
              )
          else:
              calibration_command = self.message_factory.command_long_encode(
                  self._handler.target_system, 0,  # target_system, target_component
                  mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION,  # command
                  0,  # confirmation
                  0,  # param 1, 1: gyro calibration, 3: gyro temperature calibration
                  1,  # param 2, 1: magnetometer calibration
                  0,  # param 3, 1: ground pressure calibration
                  0,  # param 4, 1: radio RC calibration, 2: RC trim calibration
                  0,  # param 5, 1: accelerometer calibration, 2: board level calibration, 3: accelerometer temperature calibration, 4: simple accelerometer calibration
                  0,  # param 6, 2: airspeed calibration
                  0,  # param 7, 1: ESC calibration, 3: barometer temperature calibration
              )
  
          self.send_mavlink(calibration_command)
docs: Request magnetometer calibration.