khancyr
5503a0069d
Rover: add proximity library
2018-01-22 17:18:41 +09:00
khancyr
c3fb985ec5
Rover: add fence support
2018-01-22 17:18:41 +09:00
Dylan Herman
c14af79975
Rover: now sends SCALED_PRESSURE msg
2018-01-22 10:04:57 +09:00
Randy Mackay
5167ec7708
Rover: send PID to GCS regardless of mode
...
Also add some comments
2018-01-12 08:15:34 +09:00
Randy Mackay
f6f40afcda
Rover: rename control_mode_from_num to mode_from_mode_num
2017-12-12 10:39:26 +09:00
Randy Mackay
8e80490098
Rover: reporting gets lat accel from attitude control
2017-12-09 12:18:49 +09:00
Randy Mackay
57067fb8bc
Rover: add WP_SPEED and RTL_SPEED
...
This separates the default/maximum speed used in Auto, Guided, RTL and SmartRTL from the CRUISE_SPEED which is used as the base for the speed-to-throttle controller (along with CRUISE_THROTTLE)
2017-12-07 07:29:10 +09:00
Randy Mackay
988e4290dd
Rover: formatting and comments for set-position-target handling
2017-12-05 12:15:33 +09:00
khancyr
9299943347
Rover: adjust setpoint_velocity handling
2017-12-05 12:14:46 +09:00
Peter Barker
1d2ec9054b
Rover: tighten return types of mavlink functions and variables
2017-12-01 17:01:10 +00:00
Randy Mackay
5b7cd31221
Rover: send steering PID tuning to GCS in most modes
...
Using manual_steering and auto_throttle is not perfectly correct because we will send steering rate PID info in HOLD mode but will not send throttle PID info in Steering mode
2017-11-29 09:38:53 +09:00
khancyr
279a57dc10
APMrover2: fix servo_out to GCS message
2017-11-21 20:23:55 +09:00
Peter Barker
baf82cec22
Rover: use gps singleton for GCS functions
2017-11-15 13:43:03 +00:00
Pierre Kancir
4d38eb85a1
APMRover2: Add support of MANUAL_CONTROL msg
2017-10-31 09:31:05 +09:00
Randy Mackay
2ef1e8e4c2
Rover: fix PID desired and achieved reporting
2017-10-26 19:44:18 +09:00
Andrew Tridgell
f25e8631ef
Rover: support simple accelcal
2017-10-10 10:57:38 +11:00
Lucas De Marchi
27be369be7
APMrover2: do not include version.h/ap_version.h
...
The interface provided by each vehicle should be used to get the
version.
2017-09-23 21:37:45 -07:00
Randy Mackay
3af5893f9e
Rover: command-long DO_SET_HOME check first param is zero
2017-09-20 12:14:38 +09:00
Randy Mackay
f7cb006d40
Rover: accept DO_SET_HOME within COMMAND_INT
2017-09-20 12:14:38 +09:00
Randy Mackay
b1684b5377
Rover: accept more mav-frame types
...
accept mav frames whether or not they have _INT appended
2017-09-20 12:14:38 +09:00
Peter Barker
b84e40a804
Rover: move handling of SET_GPS_GLOBAL_ORIGIN up
2017-09-19 15:44:23 +09:00
Randy Mackay
4899401679
Rover: minor comment fix
2017-09-19 10:30:15 +09:00
Randy Mackay
894bf2a23f
Rover: support SET_GPS_GLOBAL_ORIGIN message
2017-09-19 10:30:15 +09:00
Peter Barker
add5eb6907
Rover: remove old DO_SET_MODE support
...
We no longer support setting modes except via custom-modes
2017-09-19 01:24:11 +01:00
Peter Barker
25a32c93f2
Rover: move gcs_out_of_time into GCS object
2017-09-12 18:28:07 +01:00
Peter Barker
b5d234aa64
Rover: handle param_request_list in GCS_MAVLINK base class
2017-08-30 15:54:47 +01:00
Peter Barker
640b2b7a13
Rover: handle param_set in GCS_MAVLINK base class
2017-08-30 15:54:47 +01:00
Peter Barker
85ac69f701
Rover: move send_autopilot_request calls up to GCS base class
2017-08-30 15:54:46 +01:00
Peter Barker
d98c427514
Rover: add constant structure holding firmware version
2017-08-30 15:54:46 +01:00
Randy Mackay
14c74a5967
Rover: remove learning mode
...
saving waypoints can be done in manual or steering mode
2017-08-25 14:05:23 +09:00
Peter Barker
ee39ec3751
Rover: move serial_control case to base class
2017-08-17 12:42:31 +01:00
Peter Barker
92becb2875
Rover: move play_tune and led_control handling to base class
2017-08-17 12:27:10 +01:00
Peter Barker
f3a0d2b02b
Rover: use GCS_MAVLINK subclasses to handle set_mode
2017-08-16 11:58:10 +10:00
Peter Barker
4c2747bfe8
Rover: use rangefinder backend accessors
2017-08-15 18:30:45 +01:00
Michael du Breuil
a98c8427dd
Rover: Expose the AFS instance to MAVLink
2017-08-15 15:14:56 +01:00
Randy Mackay
d99108f3bc
Rover: use AR_AttitudeControl for throttle control
...
also direct throttle nudge replaced with speed nudge
calc_speed_max estimates vehicle's top speed based on cruise-speed and
cruise-throttle
steering mode now provides total target speed instead of using speed plug
throttle nudge
motor limits provided to attitude control to stop i-term buildup
uses negative desired speed instead of reversed flag
reporting to GCS uses new throttle controller
braking is simply enabled and allows a reverse motor output regardless of vehicle
speed
2017-08-15 20:47:19 +09:00
Randy Mackay
9097269d6d
Rover: use AR_AttitudeControl for steering control
2017-08-15 20:47:19 +09:00
Peter Barker
edab526b01
Rover: send gps messages as separate queued messages
2017-08-09 16:18:22 +01:00
Peter Barker
f7fd663f45
Rover: move sending of gps_raw up
2017-08-09 16:18:22 +01:00
Peter Barker
89a5272ab5
Rover: move sending of system_time up
2017-08-09 16:18:22 +01:00
Peter Barker
341a9ae032
Rover: move sending of camera_feedback up
2017-08-09 16:18:22 +01:00
Peter Barker
ece800ba90
Rover: move sending of meminfo up
2017-08-09 16:18:22 +01:00
Peter Barker
c642dc616a
Rover: use new retry_deferred method
2017-08-05 23:14:18 +01:00
Randy Mackay
3863542194
Rover: adjust set-position-target-local-ned handling
...
add support for just yaw or yaw-rate
remove support for simultaneous position and velocity
2017-08-05 11:20:58 +09:00
Randy Mackay
46faece76b
Rover: set-attitude-target accepts quaternions for target heading
2017-08-05 11:20:58 +09:00
Randy Mackay
d56d222971
Rover: set-attitude-target consumes thrust in -1 to +1 range
...
This makes the processing consistent with the mavlink spec
2017-08-05 11:20:58 +09:00
Randy Mackay
b9db9229d9
Rover: replace vehicle code guided methods with calls to guided mode class
...
set_guided_WP replaced by mode_guided.set_desired_location
nav_set_yaw_speed replaced with mode_guided.set_desired_heading_and_speed
set_guided_velocity replaced with mode_guided.set_desired_turn_rate_and_speed
guided_control structure replaced with mode_guided members
use_pivot_steering accepts yaw-error argument instead of calculating it itself internally
2017-08-05 11:20:58 +09:00
Randy Mackay
783f8243df
Rover: use mode class's get_distance_to_destination and speed_error
...
used for reporting to GCS and logging
2017-08-05 11:20:58 +09:00
Peter Barker
137d513fdc
Rover: move try_send_message queued_param_send up
2017-08-03 14:34:33 +01:00
Peter Barker
dbac7447d6
Rover: move try_send_message send_hwstatus up
2017-08-03 14:34:33 +01:00
Peter Barker
4da89a948a
Rover: move try_send_message mission handling up
2017-08-03 14:33:37 +01:00
Peter Barker
dbdfce570a
Rover: move try_send_message compass message handling up
2017-08-03 14:24:47 +01:00
Peter Barker
d44c7f0886
Rover: base SYS_STATUS load average on variable loop rate
2017-08-01 19:39:27 +01:00
khancyr
23532bf45c
Rover: add reason to set_mode
2017-07-31 18:01:17 +09:00
Peter Barker
2014eb0def
Rover: move common mavlink camera handling up
2017-07-28 14:32:58 +01:00
Peter Barker
81d52c282c
Rover: camera is responsible for taking distance-based-images and logging
2017-07-28 14:27:53 +01:00
Peter Barker
160831d4ca
Rover: move gps inject handling up to GCS_MAVLINK
2017-07-27 12:03:25 +01:00
Randy Mackay
ddc70058d5
Rover: reporting wheel encoder rpm
2017-07-27 16:52:29 +09:00
Peter Barker
fec152385c
Rover: handle common GPS messages in base GCS_MAVLINK class
2017-07-25 14:00:45 +01:00
Peter Barker
07f4603533
Rover: integrate mode class
2017-07-21 10:13:20 +09:00
Peter Barker
f1c3e16354
Rover: remove MSG_STATUSTEXT entirely
2017-07-18 16:12:59 +01:00
Randy Mackay
8a86b64776
Rover: motor test accepts negative percentages
2017-07-18 10:15:44 +09:00
khancyr
5208466629
Rover: add motor test
2017-07-18 10:15:44 +09:00
Peter Barker
cee7ce0571
Rover: move handling of PREFLIGHT_SET_SENSOR_OFFSETS up
2017-07-17 14:17:19 +01:00
Peter Barker
3586f0e8fb
Rover: move handling of MAG_CAL command longs up
2017-07-17 14:17:19 +01:00
Peter Barker
a963a80b91
Rover: move MAV_CMD_START_RX_PAIR handling to base class
2017-07-17 14:17:19 +01:00
Peter Barker
bcf7c6e6b6
Rover: move mavlink support for servo/relay up
2017-07-16 23:56:00 +01:00
Peter Barker
40eb07f472
Rover: add common handling of mavlink command messages
2017-07-16 23:56:00 +01:00
khancyr
40b860e240
Rover: rename sonar to rangefinder
2017-07-14 17:40:05 +01:00
Peter Barker
adb89c5ca6
Rover: remove unneeded telemetry_delayed parameter
2017-07-12 17:01:36 +01:00
Peter Barker
7aff4c6ab9
Rover: move handling of incoming statutext messages up
2017-07-12 16:52:24 +01:00
Peter Barker
901045b029
Rover: move common mission handling up to GCS_MAVLINK
2017-07-11 23:45:17 +01:00
Peter Barker
2692ee22d3
Rover: eliminate gcs_send_mission_item_reached wrapper
2017-07-11 23:45:16 +01:00
Peter Barker
130ad52a22
Rover: eliminate gcs_send_message wrapper
2017-07-11 23:45:16 +01:00
Peter Barker
9509f7f1bf
Rover: use send_text method on the GCS singleton
2017-07-09 17:17:29 -04:00
Peter Barker
7ad003a211
APMrover2: use Notify singleton for sending statustext
2017-07-09 17:17:29 -04:00
Pierre Kancir
267a1532b9
Rover: integrate motors library
...
move throttle_slew_limit and THR_SLEWRATE parameter
move have_skid_steering to library
move mix_skid_steering to library's output_skid_steering method
move radio.cpp's output channel initialisation to motor's init method
use motors.get_throttle and get_steering instead of getting from Servo objects
use motors.set_throttle and set_steering instead of setting to Servo object
AP_Arming::arming_required is replaced with SAFE_DISARM parameter
2017-07-08 16:07:13 +09:00
Peter Barker
cfeb449979
Rover: create GCS subclass, use inheritted methods
2017-07-07 16:18:37 +01:00
Randy Mackay
351b37fc31
Rover: only report system status after init has completed
...
This reduces errors reported to the GCS during startup
2017-06-28 11:32:01 +09:00
Peter Barker
3a85d8ed39
Rover: handle knowledge of in_log_download in DataFlash
2017-06-27 03:10:43 +01:00
Peter Barker
689a5cb238
Rover: move send-logs-via-mavlink code into DataFlash
2017-06-27 03:10:43 +01:00
Andrew Tridgell
d060fd2826
Rover: replace get_output_norm*100 for throttle with get_output_scaled
...
No functional change
2017-06-21 10:30:39 +09:00
Michael du Breuil
57c9afb77e
Rover: Handle NAV_CONTROLLER_OUTPUT.wp_dist overflowing
2017-06-20 15:41:50 +01:00
Peter Barker
900f0cc774
Rover: move MAVLINK_MSG_ID_REMOTE_LOG_BLOCK_STATUS handling up
2017-06-17 15:07:48 +01:00
Peter Barker
aeacc11573
APMrover2: stop using in_mavlink_delay as a proxy for disabling logging
2017-06-16 17:07:48 +01:00
Randy Mackay
584974fd74
Rover: set home from ekf position
2017-06-14 09:12:20 +09:00
Randy Mackay
0da6e73d76
Rover: add support for visual odometry
2017-06-14 09:12:20 +09:00
Pierre Kancir
a26710d769
APMRover2: add support for DISTANCE_SENSOR
2017-06-08 01:31:57 +01:00
Paulo Neves
74d67f8d05
Rover: Add MAV_CMD_DO_SET_CAM_TRIGG_DIST support.
2017-05-25 09:35:22 +09:00
Michael du Breuil
379a4fbfab
Rover: Ignore landing message
2017-05-24 15:22:27 -07:00
Grant Morphett
5ac1293a52
Rover: Make base_mode armed status depend upon the arming library, not
...
soft armed
This change brings it in line with Plane.
2017-05-23 14:51:22 +10:00
Pierre Kancir
f725e9f2b5
APMRover2: correct some style after addition of velocity controler
2017-05-04 19:53:21 +10:00
Pierre Kancir
670e7b7914
ROVER: put all guided param in one structure
2017-05-04 19:53:21 +10:00
Pierre Kancir
045d171ab9
Rover: add Guided velocity controller
2017-05-04 19:53:21 +10:00
Randy Mackay
d6b55b2d09
Rover: set_guided_WP accepts location
2017-05-04 19:53:21 +10:00
Andrew Tridgell
37585f213a
Rover: use common send_queued_parameters()
2017-05-01 14:36:10 +10:00
Pierre Kancir
2eb0ed6242
APMRover2: Remove, correct some cast
2017-04-26 08:43:09 +10:00
Pierre Kancir
20cc336885
APMRover2: const correctness
2017-04-26 08:43:09 +10:00
Pierre Kancir
c41e695c98
APMRover2: correct some style
2017-04-26 08:43:09 +10:00
Pierre Kancir
b634fe548d
APMRover2: Use c++ cast
2017-04-26 08:43:09 +10:00
Andrew Tridgell
7cc1009dab
Rover: ignore MSG_AOA_SSA
2017-04-19 20:48:42 +10:00
Michael du Breuil
7328a8ad41
Rover: Send BATTERY_STATUS
2017-04-12 10:21:49 +09:00
Peter Barker
82ac46e0ed
Rover: not in log download upon log erase
...
erase is a synchronous operation
2017-02-13 11:36:16 +11:00
Peter Barker
45e0765b97
Rover: Support for a GCS singleton
2017-02-13 09:32:01 +11:00
Peter Barker
407e251e1d
Rover: rename gcs[] to gcs_chan[]
...
Wish to use gcs() to return the gcs singleton
2017-02-13 09:32:01 +11:00
Dr.-Ing. Amilcar Do Carmo Lucas
7f5ef7cf3a
Rover: rename MSG_RADIO_OUT to MSG_SERVO_OUTPUT_RAW to better describe what it is
2017-02-07 11:41:12 +11:00
Randy Mackay
c701d6a715
Rover: send text to notify
2017-01-23 15:07:21 -08:00
Andrew Tridgell
93d6b012c2
Rover: convert to new SRV_Channel API
2017-01-12 17:39:37 +11:00
Pierre Kancir
d33f67e0c4
Rover: gcs_mavlink.cpp correct whitespace, remove tabs
2016-12-30 09:20:24 +09:00
murata
490571ba44
Rover: Changed if statements to switch statement.
...
Rover: Changed if statements to switch statement.
2016-12-24 08:53:20 +11:00
Randy Mackay
75aaf33d58
Rover: pass HIL_GPS to gps driver
2016-12-08 15:52:26 +09:00
Pierre Kancir
5ed9d22bf6
Rover: correct indentation and style on GCS_Mavlink
...
Remove trailling whitespace, tabs, limit single line if-statement scope, add missing space
2016-11-24 09:34:48 +11:00
Pierre Kancir
326e0f224f
Rover: added SYSID_ENFORCE parameter
2016-11-24 09:34:48 +11:00
Francisco Ferreira
e870c4bf99
Rover: support MAV_CMD_ACCELCAL_VEHICLE_POS
2016-11-15 11:42:54 -08:00
Andrew Tridgell
84179588a9
Rover: use handle_common_message()
2016-11-09 17:08:09 +11:00
murata
a71e889f51
Rover: To nullptr from NULL.
2016-10-28 16:22:44 -03:00
floaledm
629af84ca1
Rover: update sensor status error flags independently of sending a sys_status message
2016-10-28 15:11:44 +11:00
Michael du Breuil
b5684e7eb4
Rover: Allow compass to manage buffer space for MAG_CAL
2016-10-27 14:04:34 +11:00
Grant Morphett
2d09db4ecb
Rover: added a new form of GUIDED mode
...
Rover now accepts a new message MAV_CMD_NAV_SET_YAW_SPEED
which has an angle in centidegrees and a speed scale and the rover
will drive based on these inputs.
2016-10-25 08:04:01 +11:00
Mathieu OTHACEHE
152edf7189
Global: remove mode line from headers
...
Using a global .dir-locals.el file is a better alternative than
reincluding the same emacs header in every file of the project.
2016-10-24 09:42:01 -02:00
Andrew Tridgell
8b7c60dcd7
Rover: use handle_rc_bind
2016-10-15 21:42:38 +11:00
Andrew Tridgell
412dca1615
Rover: deprecate RC_CHANNELS_RAW
2016-10-13 21:24:13 +11:00
Michael du Breuil
8358809a02
Rover: Support GPS_RTCM_DATA
2016-10-11 11:00:36 +11:00
Lucas De Marchi
b4a3e8a9c9
APMrover2: Fix use of logical op instead of bitwise op
...
../../ArduCopter/GCS_Mavlink.cpp: In member function 'void Copter::send_extended_status1(mavlink_channel_t)':
../../ArduCopter/GCS_Mavlink.cpp:281:37: error: suggest parentheses around operand of '!' or change '&' to '&&' or '!' to '~' [-Werror=parentheses]
uint32_t sensors_error_flags = !control_sensors_health & control_sensors_enabled & control_sensors_present;
^
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
Thanks to Ralph Campbell <ralphcampbell1@gmail.com> for the bug report.
2016-09-29 11:36:23 -03:00
Tom Pittenger
72da58960c
Rover: log to dataflash statustext messages from my_gcs
2016-09-26 00:13:39 -07:00
floaledm
93f2de6780
Rover: change sensor health check to prevent false positive
2016-09-22 13:56:41 -05:00
Michael du Breuil
f1f8233220
Rover: Return RESULT_FAILED for GET_CMD_HOME if home is unset
2016-09-03 16:54:18 +09:00
Grant Morphett
df99941fc8
Rover: Added support for COMMAND_INT
...
And also made DO_SET_ROI available as a COMMAND_INT as this gives us
cm accuracy rather then 1.5m when a float is used.
2016-08-26 11:31:35 +10:00
Randy Mackay
1181acc4e4
Rover: add support for SET_POSITION_TARGET_GLOBAL_INT
...
Also supports SET_POSITION_TARGET_LOCAL_NED but for both messages only the position fields are consumed. Support for velocity, acceleration and yaw fields are not included.
2016-08-25 13:08:26 +09:00
Andrew Tridgell
203e0c7472
Rover: fixes for Frsky_Telem API changes
2016-08-25 10:16:19 +10:00
Peter Barker
6d98dd5233
Rover: add dataflash as a bit for the mavlink SYS_STATUS message
2016-08-11 17:48:44 -03:00
Lucas De Marchi
3223a1a542
APMrover2: Remove i2c lockup count
...
This was returned only for a single bus and on all supported platforms
this is hardcoded to 0.
2016-07-28 18:03:09 -03:00
Andrew Tridgell
a4270b1bb6
APMrover2: adjust for 16 channels in SERVO_OUTPUT_RAW
2016-07-25 10:06:02 +10:00
Andrew Tridgell
c3d39e9906
Rover: added PLAY_TUNE and LED_CONTROL
2016-07-22 15:00:17 +10:00
Allan Matthew
1aaeceac2e
Rover: support GPS_INPUT mavlink message
2016-07-12 15:35:23 +09:00
Tom Pittenger
07b22dc6eb
Rover: ignore ADSB_VEHICLE packet handling
2016-06-19 11:24:33 -07:00
Tom Pittenger
698017d0b1
APMrover2: sanity check gps latlng
2016-06-01 17:38:49 -07:00
Andrew Tridgell
cfaacf031b
Rover: use ahrs.groundspeed() in more places
2016-05-31 21:23:01 +10:00
Peter Barker
87a7907a63
Rover: move telemetry_delayed up into base class
2016-05-31 08:46:10 +10:00
Grant Morphett
35a132f74e
Rover: Added throttle PID logging
2016-05-31 08:44:52 +10:00
Peter Barker
de452eb760
Rover: move adjust_rate_for_stream up
2016-05-29 19:38:50 +10:00
Peter Barker
a1c97f4585
Rover: subclass GCS_MAVLink in place of defining its functions for it
2016-05-29 16:21:21 +10:00
Andrew Tridgell
f61ba903dd
Rover: don't stall EKF during baro cal
2016-05-24 17:00:55 +10:00
Andrew Tridgell
01caa7388a
Rover: use send_heartbeat() wrapper
2016-05-21 15:25:17 +10:00
Andrew Tridgell
ad7fe48991
Rover: always build with MAVLink2 headers
2016-05-21 15:25:15 +10:00
Andrew Tridgell
7c27e0dbec
APMrover2: handle SETUP_SIGNING message
2016-05-21 15:25:12 +10:00
Don Gagne
4743a34cf7
APMrover2: SET_SENSORS_OFFSETS support for third compass
2016-05-19 18:51:17 -03:00
Allan Matthew
1f4ba62456
Rover: handle new MAVLink rangefinder input
2016-05-19 16:21:28 +09:00
Andrew Tridgell
7957f25f32
Rover: cleanup unnecessarily complex gcs[] usage
2016-05-17 08:27:28 +10:00
skyscraper
8c9e55edfa
APMRover2: Fix up after refactoring RC_Channel class
...
Further to refactor of RC_Channel class which included
adding get_xx set_xx methods, change reads and writes to the public members
to calls to get and set functionsss
old public member(int16_t) get function -> int16_t set function (int16_t)
(expression where c is an object of type RC_Channel)
c.radio_in c.get_radio_in() c.set_radio_in(v)
c.control_in c.get_control_in() c.set_control_in(v)
c.servo_out c.get_servo_out() c.set_servo_out(v)
c.pwm_out c.get_pwm_out() // use existing
c.radio_out c.get_radio_out() c.set_radio_out(v)
c.radio_max c.get_radio_max() c.set_radio_max(v)
c.radio_min c.get_radio_min() c.set_radio_min(v)
c.radio_trim c.get_radio_trim() c.set_radio_trim(v);
c.min_max_configured() // return true if min and max are configured
Because data members of RC_Channels are now private and so cannot be written directly
some overloads are provided in the Plane classes to provide the old functionality
new overload Plane::stick_mix_channel(RC_Channel *channel)
which forwards to the previously existing
void stick_mix_channel(RC_Channel *channel, int16_t &servo_out);
new overload Plane::channel_output_mixer(Rc_Channel* , RC_Channel*)const
which forwards to
(uint8_t mixing_type, int16_t & chan1, int16_t & chan2)const;
Rename functions
RC_Channel_aux::set_radio_trim(Aux_servo_function_t function)
to RC_Channel_aux::set_trim_to_radio_in_for(Aux_servo_function_t function)
RC_Channel_aux::set_servo_out(Aux_servo_function_t function, int16_t value)
to RC_Channel_aux::set_servo_out_for(Aux_servo_function_t function, int16_t value)
Rationale:
RC_Channel is a complicated class, which combines
several functionalities dealing with stick inputs
in pwm and logical units, logical and actual actuator
outputs, unit conversion etc, etc
The intent of this PR is to clarify existing use of
the class. At the basic level it should now be possible
to grep all places where private variable is set by
searching for the set_xx function.
(The wider purpose is to provide a more generic and
logically simpler method of output mixing. This is a small step)
2016-05-10 16:21:16 +10:00