Commit Graph

242 Commits

Author SHA1 Message Date
Michael Oborne 61e5b09f28 Send FS state to gcs for AC 2013-02-09 10:11:36 +08:00
Pat Hickey d418197898 ArduCopter: fixed memory unsafe member access in GCS_MAVLINK
* Smokey, this is not 'Nam. this is bowling. there are rules
2013-02-02 22:43:56 -08:00
Andrew Tridgell 47cc247046 Copter: limit number of bytes read per GCS check 2013-01-23 09:34:54 +11:00
Andrew Tridgell ae5f46abc9 Copter: fixed mavlink fetch of 16 character parameter 2013-01-21 16:52:01 +11: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
Randy Mackay 177da0ca74 ArduCopter: fixed minor bug in logging of parameter changes to dataflash
It is questionable whether we should even bother writing these to the
dataflash as there is no way to recognise which parameter has been
affectded
2013-01-13 00:15:34 +09:00
Andrew Tridgell dcb181d2d8 Copter: use new AP_Scheduler library 2013-01-12 12:02:57 +11:00
Andrew Tridgell a237b6cc7b Copter: update for new AP_Param API 2013-01-09 13:30:58 +11:00
Andrew Tridgell 860f4b2605 Copter: merge the latest 2.9 changes into master 2013-01-08 14:37:40 -08:00
Andrew Tridgell 647b3b09b6 Copter: ensure we process deferred mavlink messages 2013-01-07 11:07:39 +11:00
Andrew Tridgell d952ccf968 Copter: added main_loop_ready() function
this tells us when the main loop is ready to run. MAVLink won't send a
message if the main loop could run.
2013-01-07 11:07:34 +11:00
Andrew Tridgell b079a96eaf Copter: removed GPS_STATUS message
this message is huge, and completely pointless now that we have
num_satellites in GPS_RAW_INT
2013-01-05 20:39:31 +11:00
rmackay9 861a66e26e ArduCopter: remove @brief from GCS_MAVLINK class's comments because they mess up the mission planner's parsing of parameter descriptions 2013-01-03 00:34:10 +09:00
rmackay9 4ef7e7b1c6 ArduCopter: add parameter descriptions for GCS_Mavlink objects 2013-01-02 23:36:48 +09:00
Andrew Tridgell 94e3322e24 Copter: fixed build on px4 2013-01-02 22:09:02 +11:00
Andrew Tridgell ead38f917f Copter: use GRAVITY_MSS 2013-01-02 14:45:08 +11:00
rmackay9 68b62abd38 ArduCopter with the new Camera and Relay classes for APM1 and APM2.
All changes by Sandro Benigno
2013-01-02 09:55:37 +11:00
rmackay9 e77b54c7dc ArduCopter: bug fix to GUIDED mode. Now checks that desired altitude was reached before deciding the waypoint is complete. 2013-01-02 09:24:31 +11:00
rmackay9 331a73c4ac ArduCopter: remove duplicate (?) send of MSG_EXTENDED_STATUS1 2013-01-02 09:20:08 +11:00
rmackay9 6baddf4aee ArduCopter: remove unused variable last_5hz 2013-01-02 09:20:08 +11:00
rmackay9 1f5fdcdaa8 ArduCopter: remove unnecessary "Initialising APM message..." 2013-01-02 09:20:08 +11:00
rmackay9 d926360e81 ArduCopter: move gcs updates to run only when there are 4ms of spare time before the next 100hz iteration starts 2013-01-02 09:14:31 +11:00
rmackay9 6da68c53a5 ArduCopter: bug fix so AP_Limits does not use up memory if it is disabled 2013-01-02 09:13:42 +11:00
rmackay9 0ab82f8c4e ArduCopter: clear ahrs roll and pitch trims after an accel level command 2013-01-02 09:12:17 +11:00
Andrew Tridgell 9931009db2 Math: use pythagorous2() in some more places 2012-12-20 15:16:18 +11:00
Pat Hickey 1878290510 ArduCopter: fixes for AP_InertialSenor_UserInteract 2012-12-20 14:53:23 +11:00
Pat Hickey 2ad4fed8cd Rover/Copter/Plane: change from vsnprintf to vsnprintf_P 2012-12-20 14:52:38 +11:00
Pat Hickey 54b98c0a7c ArduPlane: use hal's vsnprintf 2012-12-20 14:52:37 +11:00
Andrew Tridgell 9e986801c9 Copter: fixed SITL for ArduCopter 2012-12-20 14:52:34 +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
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
Michael Oborne 68aa5e4682 AC add ability to start new accel_scale via mavlink 2012-11-28 21:38:58 +08:00
Andrew Tridgell 2949d58b71 Copter: re-enable sending of GLOBAL_POSITION_INT message
this gives important raw GPS velocity information, plus relative and
absolute height
2012-11-28 11:26:19 +11:00
Andrew Tridgell 5818aaad42 Copter: fixed build error
thanks to Marco for pointing this out
2012-11-24 20:39:35 +11:00
Andrew Tridgell f6ec932d63 Copter: added reboot in CLI and over MAVLink
useful for getting out of CLI
2012-11-24 18:20:37 +11:00
Andrew Tridgell cd07d965a7 Copter: ported RSSI_PIN option from ArduPlane
this is useful for OSD users
2012-11-22 20:59:33 +11:00
Andrew Tridgell dbdb3e1194 ACM: allow fetch of parameters by index
this makes it more efficient to re-fetch parameters that are missing
2012-11-22 00:16:57 +11:00
Andrew Tridgell bcae83c4f6 ACM: make it possible to run CLI on radio port in ArduCopter 2012-11-21 21:41:34 +11:00
Andrew Tridgell 704da2a5d9 MAVLink: make it possible to enter the CLI over the radio
this only works on the APM2, where UART0 is also the radio port
2012-11-21 14:11:05 +11:00
Andrew Tridgell bcf740a82f ACM: support 16 character parameter names 2012-11-20 21:38:58 +11:00
Andrew Tridgell 69fbcc8683 MAVLink: fixed accel and gyro sensor offsets in MAVLink 2012-11-20 18:32:26 +11:00
Andrew Tridgell 531e62d3b5 MAVLink: improve usefulness of logged GPS velocities
we need them to align with time to use them for accelerations
2012-11-17 17:45:30 +11:00
rmackay9 cdfd3f9ccc ArduCopter, ArduPlane: rename ap variable in GCS_Mavlink.pde to resolve compiler warning re shadowing of variable 'ap'
Changed ArduPlane to keep function consistent with ArduCopter
2012-11-12 13:30:04 +09:00
Andrew Tridgell fddfb0b1a3 MAVLink: update compass health in SYS_STATUS
this will make it easier to tell if a I2C error occurred in flight
2012-11-12 11:26:54 +11:00
rmackay9 bcb9519fd7 ArduCopter: renamed system bitmap to ap_system to resolve desktop compile issues 2012-11-11 22:42:10 +09:00
rmackay9 95f6357d35 ArduCopter: fix APM2 build 2012-11-10 22:06:23 +09:00
Jason Short d2a5928c06 Ap state updates 2012-11-09 22:15:15 -08:00
rmackay9 a1b4ec6d0e ArduCopter: move to use new INS library instead of IMU library 2012-11-07 19:21:09 +09:00
Andrew Tridgell e8ab62f6e5 ACM: switch to GPS velocity numbers in GLOBAL_POSITION_INT
these numbers are much more useful than the redundent rotated ground
speed. They tell us exactly what the GPS is giving to AHRS
2012-11-05 15:23:41 +11:00
Pat Hickey bbc7f050e5 ArduCopter GCS_MAVLink: COMMAND_LONG for arm/disarm motors
Date: Wed, 26 Sep 2012 15:56:43 -0700
Subject: ArduCopter arm/disarm command consensus
From: Pat Hickey
To: Michael Oborne
Cc: "Craig J. Elder", arducopter
<arducopter@googlegroups.com>,
    mavelous <mavelous@googlegroups.com>

    Michael,

    Per our discussion today,

    In a MAVLINK_MSG_ID_COMMAND_LONG
    A MAV_CMD of type MAV_CMD_COMPONENT_ARM_DISARM
    with component id MAV_COMP_ID_SYSTEM_CONTROL = 250,
    uses param index 1 to specify an arm/disarm motors event: 1 to arm,
    0 to disarm

    Thanks for working this out with me. Sorry to get it so completely
    wrong the first time around!

    Best
    Pat
2012-10-10 18:59:55 +08:00
Michael Oborne a38fef65c7 AP,AC Add ability to override an altitude in any auto mode, on the current active target 2012-09-30 07:29:33 +08:00
Jason Short e8e8c27db4 ACM Mavlink - fixed comparison of unsigned to signed int by casting to uint8_t 2012-09-10 20:22:57 -07:00
Andrew Tridgell e8d928cca4 ACM: added TELEM_DELAY to ArduCopter 2012-08-30 09:03:01 +10:00
uncrustify f7a748d43b uncrustify ArduCopter/GCS_Mavlink.pde 2012-08-21 18:56:01 -07:00
rmackay9 11e946eb54 ArduCopter, ArduPilot: revert mavlink delay callback to be "unsigned long" 2012-08-18 20:34:41 +09:00
rmackay9 2e4e8bbf1a ArduCopter: changed "unsigned long" to "uint32_t" 2012-08-18 19:05:55 +09: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
Andrew Tridgell ed064b2506 MAVLink: enable fetching of single parameters
this makes it possible for the GCS to fetch a single parameter by
name, which is useful for parameters that change in flight
2012-08-16 10:14:46 +10:00
Andrew Tridgell dc47074dbd MAVLink: removed the need for Mavlink_compat.h
we have now fully transitioned to MAVLink 1.0, so we no longer need
the compatibility layer and the old names in the code
2012-08-09 12:22:46 +10:00
Andrew Tridgell 2a7b298bbc MAVLink: moved mavlink variables back to library
these were moved to the main sketches to allow for compile time
selection of MAVLink 0.9 vs 1.0. We no longer support 0.9, so we can
move it back, which simplifies some test sketches
2012-08-09 12:06:21 +10:00
Andrew Tridgell c2a4d59132 AP_Param: update ArduCopter core for new AP_Param interface 2012-08-08 12:11:57 +10:00
Michael Oborne e577b51e17 AC remove attitude hil unused extra (gps jump issue.) 2012-07-29 08:18:41 +08:00
Michael Oborne ef870e3ca1 AC remove some attitude HIL limitations 2012-07-28 13:59:30 +08:00
rmackay9 8e5312a759 ArduCopter: add support for MAVLink's MAV_CMD_NAV_ROI command
do_nav_roi and verify_nav_roi functions added to turn the copter and/or mount in response to a MAV_CMD_NAV_ROI way point
2012-07-25 11:02:54 +09:00
Andrew Tridgell 85465c9126 MAVLink: fixed another two places where micros() was used for a millisecond time 2012-07-20 11:57:15 +10:00
Jonathan Challinger fc4f111d15 Changed mavlink GLOBAL_POSITION_INT.relative_alt message to correctly return altitude above ground. 2012-07-17 16:15:11 +10:00
Andreas M. Antonopoulos a976a59c88 AP_Limits: Configuration defaults moved to config.h. Fixed AP_LIMITS==DISABLED handling. 2012-07-16 11:46:43 -07:00
Andreas M. Antonopoulos c73f7ef3ab AP_Limits library, provides modular "limits" such as altitude and geo-fencing. 2012-07-14 19:26:17 -07:00
Andrew Tridgell 8220ae8096 MAVLink: climb_rate is in m/s 2012-07-05 13:20:26 +10:00
Andrew Tridgell 60caaa4b04 MAVLink: remove MAVLink 0.9 protocol support
this simplifies the code a lot. We're not going back to 1.0
2012-07-05 13:00:46 +10:00
Jason Short 3cf16c1424 GCS_Mavlink.pde
removed Approach define
2012-07-01 13:40:11 -07:00
Jason Short c276fe8fa0 GCS_Mavlink: added notes to #if malink10 2012-06-29 21:20:28 -07:00
Andrew Tridgell 55092c25a6 SITL: enable the SIM_* parameters in ArduCopter and ArduPlane 2012-06-29 15:10:52 +10:00
Andrew Tridgell dae1a57dc5 ACM: adapt the ArduCopter code for new barometer interface 2012-06-27 16:01:50 +10:00
rmackay9 068fe64b9b ArduCopter HIL: changed calls to setHIL to send in time as a uint32_t (it was a float) 2012-06-26 22:50:17 +09:00
Jason Short 46fb3b783a GCS_Mavlink.pde : mav_nav only used in legacy Mavlink. 2012-06-25 23:08:25 -07:00
Jason Short c71c503c84 GCS Mavlink.pde: change reference to nav_bearing to target_bearing. 2012-06-25 23:06:28 -07:00
Andreas M. Antonopoulos bef005b5f2 AC2.6: Fix battery calculation and scaling bug for MAV1.0, now same as ArduPlane
http://code.google.com/p/arducopter/issues/detail?id=430
2012-06-24 17:01:25 -07:00
Michael Oborne 14be88dd55 AC: add hilstate message 2012-06-04 16:24:08 +08:00
Andrew Tridgell 7c63d2c17b ACM: MAVLINK10 uses HIL_STATE
thanks to Michael for noticing this
2012-06-04 13:31:07 +10:00
Andrew Tridgell 3f4e87cccc ACM: fixed HIL build for MAVLINK10 2012-06-04 13:14:52 +10:00
Michael Oborne 9303a89573 fix AC hil build 2012-06-04 11:12:52 +08:00
Andrew Tridgell d9457ecc38 MAVLink: send time of GPS fix accurately
when we send a GPS_RAW message, set the usec field to the time we got
the fix from the GPS, not the current time. This makes it possible for
aerial photo processing to be more accurate, as the usec field with
more accurately reflect the planes position/time pair
2012-05-23 17:33:33 +10: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
Andrew Tridgell 4fee26437b MAVLink: make ACM build with MAVLink 1.0 possible in arduino GUI 2012-04-24 22:24:58 +10:00
Andrew Tridgell fe970221e2 ACM: added support for MAVLink 1.0 to ArduCopter
most operations should now work
2012-04-24 19:54:20 +10:00
rmackay9 e5710958bc ArduCopter - GCS_Mavlink.pde - changed output to ground station to use new AP_Motor's class motors array inplace of the global "motor_out" array. 2012-04-04 22:52:26 +09:00
Andrew Tridgell c0a54762c6 MAVLink: port the new adaptive flow control to ArduCopter
This allows for arbitrary stream rates, and supports flow control if
you are using a 3DR radio
2012-04-02 11:18:53 +10:00
Andrew Tridgell e0bb7e2777 MAVLink: don't waste 100 bytes of bandwidth sending 1 byte of information
the GPS_STATUS message is a massive waste of bandwidth, but it is the
only message that tells us the number of visible satellites. So only
send it if that information changes.

This makes MAVLink work better at low baud rates
2012-03-30 17:46:20 +11:00
Andrew Tridgell 34506b170f Mavlink: fixed warnings about limits on int32 values 2012-03-27 15:37:25 +11:00
Andrew Tridgell 458d55e5bc MAVLink: constrain variable changes to the datatype range
if someone tries to set a AP_Int16 to a value of 300000, they now get
32767 instead of -27678
2012-03-19 17:29:02 +11:00
Andrew Tridgell 547b4ed55b AHRS: adapt ArduCopter for new AHRS framework 2012-03-19 17:29:02 +11:00
Andrew Tridgell d75e883fe8 GCS: get_integrator() is now get_gyro_drift() in DCM 2012-03-10 10:34:33 +11:00
Andrew Tridgell 7291dfc25a ACM: removed the special case for quaternions in GCS code 2012-03-10 10:34:31 +11:00
Andrew Tridgell 7e4c8592ff ACM: make it possible to build ArduCopter with quaternions 2012-03-10 10:34:29 +11:00
Andrew Tridgell a0ce202d87 ACM: added SIMSTATE, DCM and HWSTATUS messages to ACM 2012-03-10 10:34:27 +11:00
Andrew Tridgell 690dc9052a GCS: force scalar type in copy_name()
this enables access to compass offsets over MAVLink
2012-02-25 11:37:20 +11:00
Andrew Tridgell 2e9105c68a AP_Param: added special handling for Vector3f
We would like to be able to use Vector3f as a parameter while exposing
the individual elements of the vector as MAVLink parameters. This
change to AP_Param makes that possible, by giving AP_Vector3f a dual
personality
2012-02-25 11:37:20 +11:00
Andrew Tridgell df8a557630 AP_Param: update users of AP_Param for ParamToken 2012-02-19 17:05:28 +11:00
Andrew Tridgell ecdbfd257a token is 16 bits now 2012-02-13 16:22:53 +11:00
Andrew Tridgell 0b3e3ec5c8 added group indexes to GCS_MAVLINK class 2012-02-13 16:22:52 +11:00
Andrew Tridgell d4305e0ae2 fixed apm2beta build with AP_Param 2012-02-13 16:22:52 +11:00
Andrew Tridgell c9c422539e update ACM MAVLink code for AP_Param 2012-02-13 16:22:52 +11: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 dd1e08a7e0 Causes Aero_SIM to fail 2012-01-22 09:34:43 -08:00
Jason Short 2fa24e0557 added conversions of CM to M 2012-01-21 22:09:39 -08:00
Jason Short 287ffb5fb4 enabled Mavlink Land command 2012-01-20 22:52:30 -08:00
Michael Oborne 3142a75913 AC fix attitude level hil 2012-01-21 07:52:52 +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 28262dd825 Added Xplane output option 2012-01-04 09:28:38 -08:00
Jason Short a2c8f5af15 removed unused vars 2012-01-04 09:28:37 -08:00
Jason Short 2fc6a645b4 removed unused Airspeed config 2012-01-04 09:28:36 -08:00
Jason Short dac29af7ab Sync with Arduplane 2011-12-30 23:48:04 -08:00
Michael Oborne e20d3a3676 add method of detecting if motors are armed 2011-12-14 06:18:29 +08:00
Andrew Tridgell 483bef35e5 IMU: update ACM and APM for flash_leds change in IMU init 2011-12-13 18:19:41 +11:00
Pat Hickey 6dbd6b4181 ArduCopter: Get barometer data in terms of AP_Baro interface
* Major change: Log.pde Log_Write_Control_Tuning has changed significantly
* MS5611 has no concept of RawPres and _offset_press
* Log the get_pressure() instead. (If we don't trust the barometer, what's the point?)
2011-12-11 15:21:10 -08:00
Jason Short d7cc241f85 formatting 2011-12-03 15:29:33 -08:00
Andrew Tridgell 39a36fe946 fixed the "reboot on GPS lock" bug
the problem was that with APM2 we may not have a 2nd GCS instance. The
"gps alt: xxx" message was being unconditionally sent to both GCS
instances, which caused a crash
2011-12-04 09:06:58 +11:00
Jason Short b3bd4bd3c9 Cosmetic cleanup, commented functions for compiler warnings 2011-11-27 22:23:02 -08:00
Jason Short ca5e4bb802 Allow output of system type 2011-11-26 16:39:28 -08:00
Jason Short 52297679c4 sending Mavlink system type 2011-11-26 16:39:28 -08:00
Andrew Tridgell 3a542b3ef3 USB-MUX: enable USB MUX switching for ArduCopter 2011-11-25 20:00:19 -08:00
Andrew Tridgell 338445e60c ArduCopter-HIL: fixed HIL build
Logging isn't always enabled
2011-11-25 20:00:18 -08:00
Andrew Tridgell aa558eb033 fixed a valgrind error
this error is harmless, but false positives can disguise real errors
2011-11-25 20:00:18 -08:00
Jason Short 7feecf3220 renamed WP mask 2011-11-20 00:22:53 -08:00
Jason Short 194778a6f9 Logging APVar saves 2011-11-19 16:59:54 -08:00
Jason Short 8392e375e1 Do not write home from GS,
MAV_Action_Continue disabled until I find out what it does and how to do it.
2011-11-16 00:22:23 -08:00
Jason Short 901e46334d updates to Mavlink for zero based WP counting 2011-11-12 21:44:38 -08:00
Jason Short 27d9bc92f3 Added more output to Mavlink for debugging 2011-11-09 11:00:40 -08:00
Jason Short e5b37d9d89 Added MAV_CMD YAW parsing 2011-11-08 23:44:14 -08:00
Jason Short 7714f203f9 Added Mav_CMD_Yaw parsing 2011-11-08 23:42:41 -08:00
Jason Short 90ee0f7e09 bad hijacking of GPS_Status 2011-11-08 10:48:47 -08:00
Jason Short 1ab1d8bab4 Fixes for Sim - Missing climb rate calculation 2011-11-08 10:46:52 -08: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
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
Andrew Tridgell 56390c4696 GCS: fixed timeout loading waypoints (ArduCopter)
prevents link saturation
2011-10-31 21:25:58 +11:00
Andrew Tridgell 5a44298d57 CLI: enable "hit enter 3 times" support for CLI
if you hit enter 3 times before you send any mavlink packets, we will
enter CLI mode
2011-10-27 21:54:07 +11: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
Michael Oborne b33eaa8c9c heli hil config 2011-09-27 07:34:32 +08:00
Michael Oborne e43b711e96 fix remote error value 2011-09-15 18:26:59 +08:00
Andrew Tridgell 1456a2a912 renamed top level directories
ArduCopterMega -> ArduCopter
added archives directory for old code
2011-09-09 11:27:41 +10:00