Commit Graph

254 Commits

Author SHA1 Message Date
Randy Mackay f7524e5741 Copter: remove unnecessary cast to float in Log 2013-04-17 22:35:02 +09:00
Randy Mackay 7c8527e6a6 Copter: resolve compiler warning 2013-04-17 22:14:47 +09:00
Andrew Tridgell 61c2befd4d Copter: fixed logging for new API 2013-04-17 21:34:42 +10:00
Randy Mackay 8fe3e689f4 Copter: add WPNAV log message 2013-04-15 21:54:29 +09:00
Randy Mackay 1ee825ee9a Copter: move alt and wp checking to AC_WPNAV
RTL fix so that if it starts rtl-ing from above 80m it returns home
while descending instead of descending at initial position.
add get and set_target_alt_for_reporting
2013-04-14 10:39:23 +09:00
Randy Mackay 4de5f67a91 Copter: replace wp_nav.get_target_alt with get_destination_alt 2013-04-14 10:38:17 +09:00
Randy Mackay 5b93990e41 Copter: removed next_WP
Use the wp_nav.get_target_alt or controller_desired_alt in it's place
2013-04-14 10:38:07 +09:00
tobias 217b8d7a59 cleanup: use const for struct Location pointers and references
this allows the compiler to generate more efficient code
2013-04-09 12:10:32 +10:00
Randy Mackay 1dcd46bffc Copter: reduce compiler warnings 2013-04-05 22:25:58 +09:00
Randy Mackay 40f6416b3d Copter: update Log_Read_Compass comment 2013-04-02 11:02:14 +09:00
Randy Mackay f9539384a1 Copter: rename failsafe to failsafe_radio
Makes way for separation of failsafes for throttle, gps and gcs
2013-03-16 17:14:21 +09:00
Randy Mackay 998511f506 Copter: use unsigned long for dataflash log for gps time
Updated some formatting of comments in the same file
2013-03-04 23:13:06 +09:00
Randy Mackay 6b2b69535f Copter: Compass log stores/retrieves motor offsets 2013-03-02 00:03:20 +09:00
Andrew Tridgell 637ecd5279 Copter: updates for new dataflash API 2013-03-01 07:18:26 +11:00
Andrew Tridgell 9a3bd17cfb Copter: fixes for new DataFlash API 2013-03-01 07:18:25 +11:00
Randy Mackay c8f09ac219 Copter: fix compile error for PX4 re Compass logging 2013-02-25 13:26:58 +09:00
Randy Mackay cbde042ec5 Copter: remove non-inav loiter and wp controllers
lon_speed, lat_speed changed to float
do_takeoff, do_land now set roll-pitch, yaw and nav modes specifically
removed fast_corners functionality (may need to be reimplemented with
new inertial nav controllers)
2013-02-24 14:41:52 +09:00
Randy Mackay 609676e26c Copter: add logging of compass values
Removed rarely used ITERM because we didn't have enough bits in the log
mask
2013-02-24 14:41:48 +09:00
Randy Mackay 67c69a19ee Copter: remove baro-only alt hold
Saves 8 bytes of memory and more importantly simplifies the alt hold
calculations
2013-02-24 14:41:29 +09:00
Randy Mackay ce370bab0c Copter: rename CUR and CURR to CURRENT for logging
Based on user complaint that enable/disable was using CUR while message
was appearing as CURR
2013-01-26 17:20:41 +09:00
Randy Mackay fb1358a629 Copter: make all message output csv 2013-01-26 17:05:38 +09:00
Jonathan Challinger 6565d83e73 InertialNav: Fixed signs, remove body-frame rotation, apply correction at 100hz. 2013-01-22 18:37:45 +09:00
James Bielman 5631f865b2 Update floating point calculations to use floats instead of doubles.
- Allows use of hardware floating point on the Cortex-M4.
- Added "f" suffix to floating point literals.
- Call floating point versions of stdlib math functions.
2013-01-16 13:52:01 +11:00
Andrew Tridgell 56f22f9226 Copter: use common log reading function 2013-01-15 14:03:51 +11:00
Andrew Tridgell 72c8a14e76 Copter: fix trad heli log build 2013-01-13 17:57:47 +11:00
Andrew Tridgell 78fd5bb23f Copter: get rid of remaining Log.pde warnings 2013-01-13 17:53:39 +11:00
Andrew Tridgell 3039c37f95 Copter: use macros from common header 2013-01-13 17:31:42 +11:00
Pat Hickey d7eeeab79e ArduCopter: fix new style Log.pde build for PX4.
randy - you should please review these changes to make sure you wanted
to have the int16_t type in all of these structs, or how you want to
convert all these other integer types to int16_t if you do need it that
way.
2013-01-12 13:11:25 -08:00
Randy Mackay 87627d883b ArduCopter: use new logging method for remaining packet types
Additional changes include renaming RAW dataflash type to IMU
2013-01-13 00:17:44 +09:00
Andrew Tridgell af478d52bc Copter: use the new logging methods for 2 packet types
the rest still need to be converted
2013-01-12 18:15:23 +11:00
Andrew Tridgell 91ad870f11 Copter: check bitmask in more logging functions 2013-01-09 23:06:40 +11:00
Andrew Tridgell 4236b10edc Copter: fixed board ID string 2013-01-02 10:18:05 +11:00
Andrew Tridgell 17a63dc76a Copter: fixes for AP_HAL merge 2013-01-02 09:55:55 +11:00
rmackay9 672fdfbf71 ArduCopter: added ERR dataflash message
Failsafe events changed to errors so they are more obvious.
Errors recorded to dataflash for failure to init compass and optical flow sensor.
Errors recorded for pwm failure.
Resolved a compile error when dataflash logging is disabled.
2013-01-02 09:55:37 +11:00
rmackay9 92e271e517 AP_InertialNav: increase baro delay to 0.5 sec (was 0.2sec) to allow slower baro updates on APM1 2013-01-02 09:55:37 +11:00
rmackay9 466097b383 ArduCopter: use inertial nav for current altitude and climb rate 2013-01-02 09:22:51 +11:00
rmackay9 b786cf40f7 ArduCopter: change GPS dataflash message to output unfiltered gps lat and lon 2013-01-02 09:19:39 +11:00
Pat Hickey 7af03127f6 ArduCopter: more work 2012-12-20 14:52:28 +11:00
Pat Hickey d9e0bbbbab ArduCopter: first pass at AP_HAL porting
* changed all the byte types to uint8_t
* fixed up much of the serial stuff
2012-12-20 14:52:27 +11:00
Jason Short 19ae5c30eb ACM : Formatting 2012-12-13 20:12:39 -08:00
rmackay9 154e3c33f7 ArduCopter, AP_InertialNav: consolidated ThirdOrderComplementaryFilter into AP_InertialNav to save about 200bytes of RAM 2012-12-10 00:43:11 +09:00
rmackay9 9dd978576b ArduCopter: auto yaw changes to allow pilot override of yaw during missions
Added set_yaw_mode to better control of yaw controller changes and variable initialisation.
Replaced AUTO_YAW mode with separate yaw controllers YAW_LOOK_AT_NEXT_WP, YAW_LOOK_AT_LOCATION, YAW_LOOK_AT_HEADING.
Pilot manual override of yaw causes yaw to change to YAW_HOLD (i.e. manual yaw) until next waypoint is reached.
Added get_yaw_slew function to control how quickly autopilot turns copter
Changed YAW_LOOK_AHEAD to use GPS heading and moved to new get_look_ahead_yaw function in Attitude.pde
Renamed variables: target_bearing->wp_bearing, original_target_bearing->original_wp_bearing.
Removed auto_yaw_tracking and auto_yaw variables and update_auto_yaw function as they are no longer needed.
Simplified MAV_CMD_CONDITION_YAW handling (do_yaw).  We lose ability to control direction of turn and ability to do long panorama shots but it now works between waypoints and save 20bytes.
2012-12-08 14:23:32 +09:00
rmackay9 3a90fc77f9 ArduCopter: add dataflash logging of camera events 2012-12-07 00:57:08 +09:00
rmackay9 072ffec493 ArduCopter: allow INERTIAL_NAV to be enabled separately for horizontal and vertical position 2012-12-06 10:31:41 +09:00
Andrew Tridgell bcae83c4f6 ACM: make it possible to run CLI on radio port in ArduCopter 2012-11-21 21:41:34 +11:00
rmackay9 810da878e7 ArduCopter: performance monitoring - changed loop counters to uint16_t.
Removed an unused items from dataflash logging of Performance.
2012-11-19 11:55:47 +09:00
rmackay9 07a7a1acd8 ArduCopter: replaced digitalRead and digitalWrite with faster calls
improved performance logging to dataflash
2012-11-19 01:16:07 +09:00
Jason Short be63481a8c ACM : Logging.pde formatting 2012-11-11 18:06:50 -08:00
Jason Short 4b5e0a5046 ACM Logging Events 2012-11-09 22:15:16 -08:00
Jason Short 6dba79e3a7 ACM Log, formatting 2012-11-09 22:15:16 -08:00
rmackay9 b13264c884 AP_InertialNav: reanme AP_InertialNav and ThirdOrderCompFilter classes to resolve desktop build compiler errors 2012-11-07 22:24:00 +09:00
rmackay9 1f801714e8 ArduCopter: incorporate new version of inertial navigation
Moved several navigation functions from ArduCopter.pde to navigation.pde
2012-11-07 19:21:31 +09:00
rmackay9 a1b4ec6d0e ArduCopter: move to use new INS library instead of IMU library 2012-11-07 19:21:09 +09:00
Andrew Tridgell 9592be5af7 ACM: saved some more memory for strings 2012-10-22 18:57:08 +11:00
rmackay9 78316adf75 ArduCopter: replace Serial.print with Serial.print_P to save memory.
Includes replacing flight_mode_strings with print_flight_mode function.
SendDebug macro replaced with direct Serial.print_P calls.
2012-10-22 16:45:24 +09:00
rmackay9 95763e610b ArduCopter: allow DMP to run in parallel with DCM
Parallel DMP can be enabled by #define SECONDARY_DMP_ENABLED in APM_Config.h
New DMP dataflash log type added to allow easy comparison with DCM
2012-09-30 00:25:40 +09:00
rmackay9 280488fa5e ArduCopter: bug fix to display ITERM enabled/disabled properly from cli
Also changed header for this message type to ITERM instead of just IT to make it more clear what it is
2012-09-27 17:40:30 +09:00
rmackay9 6f32f52377 ArduCopter: bug fix in Log_Read_Attitude. It was printing two uninitialised variables. 2012-09-17 13:44:29 +09:00
Jason Short 834f961409 ACM : Fix enduf 2012-09-10 21:25:53 -07:00
Jason Short 4c8e257ea2 ACM : forced setup_show to dump params during log dump for better analysis. 2012-09-10 20:52:30 -07:00
Jason Short 34e07c826f ACM : Added centralized Iterm logging at a lower rate. Logs all iterms. 2012-09-10 20:26:48 -07:00
Jason Short 51969dca22 ACM Log.pde : whitespace clean up 2012-08-28 21:22:07 -07:00
Jason Short fd4bc69d77 ACM : Logging updates 2012-08-28 15:40:08 -07:00
uncrustify c1ce689e38 uncrustify ArduCopter/Log.pde 2012-08-21 19:19:50 -07:00
rmackay9 99859ae42f ArduCopter: added cast to (int) in printf statments.
Also modified dump_log function's last_log_num to be int16_t to match return type from DataFlash's find_last_log method.
2012-08-18 18:58:15 +09:00
rmackay9 8c636ca263 ArduCopter: fix compiler error related to printing boarding type in dataflash logs. 2012-08-18 11:47:10 +09:00
Jason Short 0ac1373591 ACM Logging - added APM version #, stab_I term logging 2012-08-17 17:03:40 -07:00
Jason Short 0f9f72e8ab ACM: added nav_yaw to att logging
Removed unnecessary casting
2012-08-16 12:43:55 -07:00
rmackay9 36f947acb9 ArduCopter: changed all "int" to "int16_t" and a few "long"s to "int32_t".
Also moved "simple_counter" variable from global scope to the "update_simple_mode" function which is the only place that it's actually used.
2012-08-16 20:04:46 +09:00
Jason Short 99dcbd039d ACM Log : fixed formatting 2012-08-15 21:04:24 -07:00
Jason Short 66ac438b9e Arducopter
Better logging for Raw Inertial values
2012-07-18 22:57:11 -07:00
Jason Short 782ebf5176 Arducopter:Log.pde Logging the calculated Climbrate 2012-07-10 21:53:38 -07:00
Jason Short 1070eea70b Log.pde: formatting 2012-07-03 17:16:26 -07:00
Andrew Tridgell 33440567e6 ACM: ArduCopter updates for new compass interface 2012-06-27 16:01:50 +10:00
Jason Short 28829b0d60 Log.pde: removed nav_bearing reference and replaced with target_bearing ref 2012-06-25 23:06:28 -07:00
Jason Short c42f9ece43 Inertial Control
I added inertial navigation based on the simulator data. This is an option only available if you compile with Arduino and set
#define INERTIAL_NAV ENABLED
in the APM_Config.h file.

This has been tested for one real flight and did not crash my quad, but consider it very alpha. The quad may be unpredictable at first until the error correction fixes poorly calibrated accels. Be Careful.

Most of the real work is in the inertia file, but the error correction, new variable defines and calibration calls are sprinkled throughout.

The Log should record RAW messages with special debugging values.
2012-06-13 22:34:45 -07:00
rmackay9 dcdeae412e ArduCopter: Another attempt at fixing the lat/lon printing bug in which small negative lattitudes or longitudes were appearing as positives.
Fixed in both ArduCopter Log.pde and the GPS Auto test sketch
2012-06-03 16:58:19 +09:00
rmackay9 2a216ce900 ArduCopter: fixed print_latlon bug in which it would print negative lat/lon numbers incorrectly (i.e. -1234567890 would be printed as -124.xxx). 2012-06-02 12:51:12 +09:00
Andrew Tridgell 66544a5db2 Log: don't print '+' while erasing logs
we no longer do page based erase, so printing a + every 128 pages
makes no sense
2012-05-22 20:10:29 -07:00
Andrew Tridgell 422dc82f32 MAVLink: allow parameter fetch during mavlink_delay()
this allows the planner to fully connect to the APM with MAVLink while
doing a DataFlash erase
2012-05-22 16:13:35 +10:00
Jason Short 9c19138fb8 Log.pde : Updated Flash Logging to log Floats properly vs scaled integers. 2012-04-21 15:25:53 -07:00
Jason Short e22832a832 Added a union for casting floats to ints and back when storing Floats to the DataFlash 2012-04-21 15:17:09 -07:00
rmackay9 8402a3d837 ArduCopter - Log.pde - changed MOT output to dataflash to take values from AP_Motors class's motor_out array instead of the global motor_out array. 2012-04-04 22:53:21 +09:00
rmackay9 1f4cfb9333 ArduCopter - added PID log type. Implemented for Yaw stabilize and rate controllers. 2012-03-25 16:09:08 +09:00
Andrew Tridgell 547b4ed55b AHRS: adapt ArduCopter for new AHRS framework 2012-03-19 17:29:02 +11:00
Jason Short 6201bdb8a7 ACM: Fixed comment 2012-03-16 14:10:19 -07:00
rmackay9 a869a01294 ArduCopter - Log.pde - added wrap_360 to compass heading field of ATT message to resolve overflow problem that caused heading to appear as being off by 70 degrees 2012-03-12 12:09:04 +09:00
rmackay9 c7480f2281 ArduCopter - fix to dataflash logging of Mag heading 2012-03-11 01:27:29 +09:00
Jason Short 1e254cbca0 Compass heading added to ATT log 2012-02-24 12:11:15 -08:00
Andrew Tridgell 95ef9206dc DCM: renorm_sqrt_count is now called renorm_range_count 2012-02-23 08:16:08 +11:00
Andrew Tridgell a2d0900460 fixed warning in Log build 2012-02-13 16:22:52 +11:00
Andrew Tridgell f1a41b041f log: fixed some integer size errors
need to be careful with the types passed to printf()
2012-02-12 20:38:37 +11:00
Randy Mackay f1a129c8ea ArduCopter - Log.pde - fixed Log_Read_Control_Tuning so that it doesn't read too many bytes. Also fixed up some comments 2012-02-05 16:56:51 +09:00
Jason Short 90099d4a42 ATT tuning update 2012-01-30 21:13:03 -08:00
Jason Short 7833cea9d4 2.2B6 - Please verify Heli still functions properly.
Added AC_PID lib
Updated landing code
bug fixes
2012-01-28 22:00:05 -08:00
Jason Short f638a4b81d recording nav_bearing rather than target bearing
recording x and y speed rather than Iterms for nav since they are always 0 now
2012-01-21 22:10:28 -08:00
Doug Weibel ed9f7cb1b6 Update battery monitoring code for ArduCopter
Fixes compatibility for APM2.  Also a significant update to the battery monitoring code:  We previously had monitoring modes for individual cell voltages for 3 and 4 cell lipos.  These have been removed as they were never really supported (the cell voltages were computed but were not reported or recorded anywhere).  Also, some clean-up/prep work was done for supporting monitoring 2 separate battery packs.  The CLI battery and current monitoring tests were consolidated into 1 test.
changed
2012-01-15 17:10:02 -07:00
Jason Short 84e001594d comma 2012-01-10 23:45:33 -08:00
Randy Mackay f68d23d91e ArduCopter - added ROLL_PITCH_STABLE_OF (i.e. Stabilised Roll/Pitch + adjustments based on optical flow)
Removed optical flow from regular loiter for now until it's tested.
2012-01-09 13:53:54 +09:00
Andrew Tridgell 92f9c0b648 ACM: fixed a signed/unsigned warning 2012-01-05 10:14:12 +11:00
Jason Short fe8c99c49b removed PM test field 1 - not needed 2012-01-04 09:28:37 -08:00
Jason Short 2c1fe93856 cosmetic 2011-12-29 23:02:03 -08:00
Randy Mackay bbe6dea980 OptFlow - initial support for APM2 (there are still problems) including adding ability to set Chip Select pin.
Other unrelated changes are:
a) fixed typo in 'esitmate_velocity' to 'estimate_velocity'.
b) moved init_compass from system.pde to sensors.pde which seemed consistent with other sensors.
2011-12-30 12:06:31 +09:00
Andrew Tridgell 73e6d5ee11 ACM: update for DataFlash changes 2011-12-28 16:00:49 +11:00
Andrew Tridgell ab64a689c8 ACM-log: use DataFlash.df_NumLogs
this fixes the flash size on APM2
2011-12-26 19:17:11 +11:00
Randy Mackay c24b5229e1 AP_GPS - updated MTK rate to 10Hz and fixed lat/lon printing inaccuracy in Arducopter logs and AP_TEST example sketch 2011-12-25 12:33:06 +09:00
Jason Short d9590a44d6 Fixed merge issues 2011-12-23 14:51:40 -08:00
Jason Short be4b031c7d added back in the Disabled log - gave up on Log Simple idea 2011-12-23 14:45:56 -08:00
Pat Hickey f1624621b3 ArduCopter Logging: DISABLED means DISABLED again; CONFIG_LOGGING added
CONFIG_LOGGING selects LOGGING_SIMPLE and LOGGING_VERBOSE. Verbose
logging is the default, implemented in Log.pde. Simple logging is
optional, but the default for the 1280 build, implemented in
Log_simple.pde
2011-12-19 21:04:51 -08:00
Andrew Tridgell ad9c0533d8 ACM: run mavlink loop while erasing logs 2011-12-18 10:19:41 +11:00
Jason Short 8970948804 Sync logging 2011-12-16 22:02:41 -08:00
Doug Weibel 8b78c4a4c5 Changes to logging file system to avoid problems with 0 and 1 page logs 2011-12-13 20:09:07 -07:00
Jason Short f3e408e7e0 Added a simplified Log that is just GPS for my 1280 board 2011-12-12 17:47:45 -08:00
Jason Short 0289e35347 Ground course saved as long for SIM compat 2011-12-10 10:19:20 -08:00
Doug Weibel 502a98dda1 Add hook to dump log filesystem index for debugging 2011-12-07 08:13:30 -07:00
Doug Weibel 88ab4f7d70 Fix for intermittent bug of log #1 starting on page 2 and confusing file system 2011-11-28 19:43:10 -07:00
Doug Weibel b03de3095e Add DataFlash.Init before doing a forced log erase on eeprom reset.
Add progress indication during log erase
2011-11-28 19:42:27 -07:00
Jason Short 909e5796eb Logging input to find this freeze bug 2011-11-28 10:33:06 -08:00
Jason Short cc1593d16d made Logs dump with dump 0 or -1 2011-11-27 22:23:02 -08:00
Andrew Tridgell a048709828 Logs: don't print hundreds of bogus log boundaries
this can take quite a long time
2011-11-26 17:02:55 +11:00
Doug Weibel 9ecfac1156 Change ArduCopter DataFlash log file system to new file system which allows overwriting logs.
Also changed the feature to dump all DataFlash memory to occur when user requests dumping log "-1"
2011-11-25 07:17:15 -07:00
Jason Short 6d99e78887 removed unused function 2011-11-20 21:59:55 -08:00
Jason Short 5c797e91b5 Better function definition 2011-11-20 20:32:46 -08:00
Jason Short beeba99b92 Missed a function definition for no_logs option 2011-11-20 20:29:58 -08:00
Jason Short 56179a24e1 Added Arbitrary data logging 2011-11-19 16:59:54 -08:00
Jason Short 791fd194a4 added logging of raw baro 2011-11-19 11:08:13 -08:00
Jason Short 802dd6994a PM restored to normal output 2011-11-17 10:37:01 -08:00
Jason Short 7ebab2a9fe Log type error fix 2011-11-17 10:27:02 -08:00
Jason Short 2c9ebf11b8 removed unused functions, log fix 2011-11-09 23:28:50 -08:00
Jason Short 6e3b3fd974 CTUN log update 2011-11-09 12:28:12 -08:00
Andrew Tridgell 3b67321945 Log: try to fix -ve lat in logging 2011-11-09 08:46:05 +11:00
Jason Short c3d5d92a71 Updated Logs to be C++ compliant 2011-11-07 22:23:48 -08:00
Andrew Tridgell dc6fb484cd Log: fixed a few more casts 2011-11-08 11:59:30 +11:00
Andrew Tridgell 28634f51b7 ArduCopter: use specific sized data types in a lot of places
this will make the Desktop build more consistent with the real AVR
build, and also with a future ARM build
2011-11-08 11:05:36 +11:00
Andrew Tridgell 3176d4ffc5 HIL: enable CTUN log message in ATTITUDE HIL 2011-11-08 07:58:35 +11:00
Andrew Tridgell 92471aead2 Log: better way to check for -1 long portably 2011-11-08 07:58:34 +11:00
Andrew Tridgell 2bd451b445 Log: make find_last_log_page() portable
this makes it work with platforms with a larger 'long'
2011-11-07 23:50:49 +11:00
Andrew Tridgell ae1e1c940f Log: fixed a bug where we could index outside an array
when we first start up, num_existing_logs may be zero
2011-11-07 22:56:13 +11:00
Jason Short c8304114a3 renamed some command variables to align with Arduplane
reworked the arming code and moved the DCM gains out.
updated climb_rate to include sonar data.
2011-11-04 21:41:51 -07:00
Jason Short c6ed8ed0ea alt hold logging 2011-11-01 09:28:04 -07:00
Jason Short 67e98ae867 Added additional NTUN logging entries. 2011-10-29 11:53:50 -07:00
Jason Short 1238944573 logging type change in CTUN 2011-10-28 21:59:47 -07:00
Jason Short 07daf34ccc Added a slew rate to the alt change rate.
Added better reporting of throttle control
upped constraints for alt hold
Additional logging for CTUN lay hold
2011-10-28 21:29:10 -07:00
Jason Short 46590e5f28 Log updates
Added motor logging for different frame types. Switched the PM log to some new debugging values and speed up the writing of the value to the logs.
2011-10-27 22:36:25 -07:00
Jason Short 2330006fbe logging for gyro and accell testing 2011-10-12 21:21:46 -07:00
Andrew Tridgell d89ae696ef merged the GCS updates from ArduPlane to ArduCopter
this removes all the non-MAVLink GCS options, and simplifies the HIL
and GCS code a lot. It also adds async sending of low priority GCS
text messages.
2011-10-11 20:53:43 +11:00
Jason Short 239164fa19 Fixed Flip code to compile. Flip still not flight tested! 2011-09-25 12:21:54 -07:00
rmackay9 c825e76a88 ArduCopter - small changes to fix compile errors when optical flow enabled 2011-09-17 22:09:18 +09:00
Jason Short 4607bdb4b5 fixed naming for opt flow 2011-09-16 19:26:17 -07:00
Jason Short 129c13e065 Fixed CIRCLE mode trig error
made loiter_radius * 100 in Params
updated gains
2011-09-16 16:54:45 -07:00