Commit graph

826 commits

Author SHA1 Message Date
Ryan Pavlik a36d351a18 d/psmv: clang-tidy 2019-12-07 18:25:36 +00:00
Ryan Pavlik c9f1b2be4b d/vive: Port realloc to helper macro 2019-12-07 18:24:56 +00:00
Ryan Pavlik 2d86dfd560 d/v4l2: Type safety fixes and realloc porting 2019-12-07 18:24:56 +00:00
Ryan Pavlik e11eb0203f d/vive: Initializer order fix 2019-12-07 18:24:56 +00:00
Ryan Pavlik 282f38ca62 d/vive: Type safety fix 2019-12-07 18:24:52 +00:00
Ryan Pavlik be8530db74 d/psvr: Type correctness fixes 2019-12-07 18:21:28 +00:00
Ryan Pavlik a7a7545d0d d/psmv: Casting/type safety fixes 2019-12-07 18:21:22 +00:00
Ryan Pavlik 86db0622f9 d/vive: Split nxjson sources from vive sources 2019-12-07 18:21:17 +00:00
Ryan Pavlik 7ca4fb34d5 d/v4l2: typo fix 2019-12-03 09:39:06 -06:00
Jakob Bornecrantz ee3d9d08f6 u/time: Send in a pointer to pointer to the timekeeping destroy function 2019-11-15 20:30:01 +00:00
Jakob Bornecrantz 76445c8fe9 d/psvr: Fix use after free of timekeeping 2019-11-15 15:23:25 +00:00
Jakob Bornecrantz b33811930b d/psvr: Get data info packet 0x82 2019-11-15 14:55:18 +00:00
Ryan Pavlik 21352ca338 t_imu: Add param for accelerometer output 2019-11-14 12:14:58 +00:00
Ryan Pavlik 29c630cec8 d/psvr: Port PSVR to use timestamps 2019-11-14 12:14:58 +00:00
Ryan Pavlik 194938c405 d/psmv: Port positional tracking to use t_imu_fusion with timestamps 2019-11-14 12:14:58 +00:00
Ryan Pavlik aaf08a2abd d/psmv: Porting to changed API that uses timestamps instead of dt 2019-11-14 12:14:58 +00:00
Ryan Pavlik ca7397be45 d/psmv: Initial port to imu fusion for orientation-only 2019-11-14 12:14:58 +00:00
Ryan Pavlik e44dd1a755 d/vive: Use define for standard gravity 2019-11-11 17:57:40 -06:00
Drew DeVault 4c7f830ea5 d/vive: reset orientation on headset button 2019-11-07 09:39:33 -05:00
Jakob Bornecrantz 1f02c54858 d/vive: Fix copy typo 2019-11-07 13:45:56 +00:00
Lubosz Sarnecki 2ffa77d923 d/vive: Handle error when config could not be read. 2019-11-07 14:16:09 +01:00
Lubosz Sarnecki db1e5b9f16 d/vive: Initialize useful defaults.
This initializes default values in the display, distortion and IMU
properties so the runtime is happy in case the JSON config could not be
read.

This patch also moves default value initialization for the Index
into one place with the others, for cases we do not have the data.
2019-11-07 14:16:09 +01:00
Jakob Bornecrantz e7e550fa8d d/psmv: Fix build 2019-11-06 19:51:24 +00:00
Jakob Bornecrantz a54cdb2632 d/psvr: Can we get some info out of the calibration data 2019-11-06 19:50:07 +00:00
Jakob Bornecrantz 845af78c20 d/psvr: Only flip Z-axis after calibration is applied 2019-11-06 19:50:07 +00:00
Jakob Bornecrantz c60b9881e2 d/psmv: More verbose error handling 2019-11-06 19:48:01 +00:00
Jakob Bornecrantz 93218fa9e4 d/psvr: Tweak panotools values 2019-11-05 12:31:42 +00:00
Ryan Pavlik 059234bbfc d/vive: Cleanup scopes, types, leak in vive_sensors_read_config 2019-11-01 22:41:22 +00:00
Ryan Pavlik e8660a18bd build: Use CMAKE_POSITION_INDEPENDENT_CODE instead of target props.
Reduces repetitive code.
2019-11-01 16:51:54 -05:00
Drew DeVault 6bce0838e0 d/vive: Fix minor typo in vive driver 2019-11-01 14:35:41 +00:00
Christoph Haag 746cccca36 meson: HDK driver does not depend on hidapi 2019-10-31 02:26:19 +01:00
Christoph Haag 680b8971b3 d/hdk: Remove unused hidapi include 2019-10-31 01:50:30 +01:00
Jakob Bornecrantz 477e740568 d/psmv: Fix flipped bit for cross and square 2019-10-29 20:08:49 +00:00
Ryan Pavlik 56f61412f5 d/psmv: Fix possible alignment issues and endianness comments 2019-10-25 18:08:20 +01:00
Jakob Bornecrantz 06ffb8da8f d/psvr: Remove none used inbuilt mesh 2019-10-25 13:05:54 +00:00
pblack 73420739d9 d/psvr: Adjust values and remove comments 2019-10-25 13:05:54 +00:00
Jakob Bornecrantz c5e1511271 d/psvr: Use new mesh distortion generator functions 2019-10-25 13:05:54 +00:00
Jakob Bornecrantz be712c7049 d/ohmd: Use mesh shader for none distortion 2019-10-25 13:05:54 +00:00
Jakob Bornecrantz c906caabf4 d/psvr: Disable mesh distortion 2019-10-25 13:05:54 +00:00
Jakob Bornecrantz babd3af4ae d/psvr: Add link to documention 2019-10-25 12:32:40 +01:00
Jakob Bornecrantz b9e1ca6e55 d/psvr: Document calibration data getting process better 2019-10-25 12:27:54 +01:00
Jakob Bornecrantz fda43c5a19 d/psvr: Add code to get device name and calibration data 2019-10-25 11:11:45 +01:00
Jakob Bornecrantz 6580e3ee3f d/psmv: Use U_ZERO 2019-10-24 22:45:07 +01:00
Jakob Bornecrantz 6bfb1d9110 d/psmv: Fix buttons parsing 2019-10-24 22:16:40 +01:00
Jakob Bornecrantz aa52da072f xrt: Remove relation input type 2019-10-24 21:51:07 +01:00
Jakob Bornecrantz 8f6da565e2 d/v4l2: Align up the buffer size 2019-10-24 16:43:45 +01:00
Jakob Bornecrantz 6b99e2fbdc d/psvr: Add new imu code, but it's stubbed out... Unless? 2019-10-22 19:51:24 +01:00
Jakob Bornecrantz 35ae8f31ce d/vive: Add some variable tracking 2019-10-22 18:52:52 +01:00
Lubosz Sarnecki 5becb60714 d/vive: Use different device string for each variant. 2019-10-22 19:18:47 +02:00
Lubosz Sarnecki 02dc839ca8 d/vive: Add initial support for the Valve Index. 2019-10-22 19:18:47 +02:00
Lubosz Sarnecki 2ed3109c95 d/vive: Add initial support for Vive Pro. 2019-10-22 19:18:47 +02:00
Lubosz Sarnecki e063e8245e d/vive: Add native driver for the Vive.
This adds a driver for the Vive family of devices based on Philipp
Zabel's ouvrt.
The driver currently only handles the IMU and main board report streams,
but is able to acquire the JSON configuration and utilize it for IMU
calibration as well as distortion configuration.
2019-10-22 19:18:47 +02:00
pblack e32902843c comp: Add chromatic aberration correction to mesh 2019-10-22 14:44:26 +01:00
Jakob Bornecrantz 0b16e1e94d d/v4l2: Set the timestamp 2019-10-22 09:44:39 +01:00
Jakob Bornecrantz 4d0b2f0b81 d/v4l2: Better control quirking tools 2019-10-21 17:21:28 +01:00
Jakob Borncrantz d245fc33c9 d/ohmd: Add variable tracking 2019-10-15 21:00:12 +02:00
Lubosz Sarnecki 6ec8721899 xrt: Add num_devices to prober found interface.
In order to access multiple devices the prober found interface needs to
pass the length of the device list. This patch updates the found
interface in all drivers.
2019-10-11 15:56:20 +01:00
Lubosz Sarnecki 3e8bd73e34 d/hdk: Use float to avoid implicit cast. 2019-10-11 15:55:18 +01:00
Jakob Bornecrantz fece0458b6 t/psmv: Make it possible to get the tracked ball pose 2019-10-11 15:40:42 +01:00
pblack 1dacea071d d/psvr: Add hacked mesh distortion 2019-10-10 13:28:01 +01:00
Jakob Bornecrantz 473047962f d/psvr: Correct screen size 2019-10-08 11:19:14 +01:00
Ryan Pavlik 5d9311bd30 d/psmv: Fix size of tracking ball. 2019-10-07 12:39:56 +00:00
Jakob Bornecrantz 3bee6e3a8b d/ohmd: Code style, pointer star location 2019-09-29 11:45:23 +01:00
Jakob Bornecrantz 30de1d0928 d/psvr: Code style, pointer star location 2019-09-29 11:45:23 +01:00
Jakob Bornecrantz 216f7df355 d/ohmd: Less distorted view on external device 2019-09-27 20:28:04 +01:00
Jakob Bornecrantz 765d263b96 d/psvr: Use os_nanosleep 2019-09-27 11:44:54 +01:00
Drew DeVault 064aef3526 build: port to meson 2019-09-26 15:05:22 +00:00
Jakob Bornecrantz 9c7c818637 d/v4l2: Use more portable sysconf(_SC_PAGESIZE) 2019-09-26 16:03:48 +01:00
Jakob Bornecrantz 871b06cd72 aux/tracking: Add stub PSVR tracker 2019-09-22 11:50:34 +01:00
Jakob Bornecrantz a4ee0dd838 d/psvr: Use tracking interface 2019-09-21 19:02:13 +01:00
Jakob Bornecrantz b47efb1520 d/psmv: Use tracking interface 2019-09-21 18:33:45 +01:00
Jakob Bornecrantz 387bc123f8 xrt: Expand tracking interface 2019-09-21 18:22:06 +01:00
Jakob Bornecrantz 046c9e18b9 d/psmv: Fix timestamp parsing (ZCM2) 2019-09-20 12:06:58 +01:00
Ryan Pavlik 63d62cf4fe d/psmv: Fix timestamp parsing (ZCM1) 2019-09-20 12:06:48 +01:00
Lubosz Sarnecki 9dec3dda81 drv_psvr: Fix prototype warnings in clang. 2019-09-20 10:14:49 +02:00
Jakob Bornecrantz ff341e43f0 d/psvr: Use standard gravity value 2019-09-16 16:36:54 +01:00
Jakob Bornecrantz d3eb48ada4 d/psmv: Normalize acceleration to gravity 2019-09-16 16:36:48 +01:00
Jakob Bornecrantz 46389cd6ae xrt: Send in real prober to auto probers 2019-09-15 23:24:58 +01:00
Jakob Bornecrantz 59a2b87c43 d/psmv: Tidy code and add some comments 2019-09-15 23:22:25 +01:00
Jakob Bornecrantz d4e139f09e d/psmv: Use gyro_bias from calibration data on ZCM2 2019-09-15 23:22:25 +01:00
Jakob Bornecrantz 548f4edee3 d/psmv: Don't use the copy sample on ZCM2 2019-09-15 23:22:25 +01:00
Jakob Bornecrantz ee5fe9a4e5 d/psmv: Even more tidy 2019-09-15 15:43:57 +01:00
Jakob Bornecrantz 0641342b7d d/psmv: Tidy driver 2019-09-15 15:29:47 +01:00
Jakob Bornecrantz 3d744c5959 d/psmv: Add support for ZCM2 2019-09-15 15:29:45 +01:00
Jakob Bornecrantz e98fb81c56 d/psmv: Make calibration values slight more readable 2019-09-15 15:29:43 +01:00
Jakob Bornecrantz 7dcfe5ca50 d/psmv: Flip axis once more 2019-09-15 15:29:41 +01:00
Jakob Bornecrantz 932b8dfd70 d/psmv: Refactor calibration and make room for ZCM2 2019-09-15 12:28:53 +01:00
Jakob Bornecrantz b5c7f080de d/psmv: Use new thread helper to create a pulling thread 2019-09-13 22:17:34 +01:00
Jakob Bornecrantz e82f3616c9 d/psmv: Tick time 2019-09-11 22:21:53 +01:00
Jakob Bornecrantz b5c37bcf10 d/psmv: Don't force sending of update packet when setting output 2019-09-11 22:21:53 +01:00
Jakob Bornecrantz 523c9980c9 d/psmv: Super simple sensor "fusion" 2019-09-11 22:21:53 +01:00
Jakob Bornecrantz 1488dcf579 d/psmv: Add stub update fusion function 2019-09-11 22:21:53 +01:00
Jakob Bornecrantz d2acc9d6e4 d/psmv: Also set gyro data 2019-09-11 22:20:22 +01:00
Jakob Bornecrantz c5e5c98c9c d/psmv: Shouldn't negate Z-axis in gyro calibration data 2019-09-11 22:20:20 +01:00
Jakob Bornecrantz 5b02974ae0 d/psmv: Correctly handle z-axis 2019-09-11 16:43:09 +01:00
Jakob Bornecrantz e179349644 d/psvr: Super simple sensor "fusion" 2019-09-11 16:43:09 +01:00
Jakob Bornecrantz 750b8bb755 d/psvr: Expose more data via variable code 2019-09-11 16:43:09 +01:00
Jakob Bornecrantz c2c230b3de d/psvr: Refactor and improve packet reading 2019-09-11 16:43:09 +01:00
Jakob Bornecrantz bf9bcf8e26 d/psvr: Read sensor packets when updating input 2019-09-11 16:43:09 +01:00
Jakob Bornecrantz 94d4822afb d/psmv: Use correct calibration value 2019-09-08 10:01:55 +01:00
Jakob Bornecrantz 3b1abffa2d xrt: Refactor frameserver start stream arguments 2019-09-07 14:34:20 +01:00
Jakob Bornecrantz 1b35846506 d/psmv: Expose more variables and add gui annotations 2019-09-07 14:34:20 +01:00
Jakob Bornecrantz 2a6e194b2d d/psmv: Improve accelerometer adjustment 2019-09-06 19:14:12 +01:00
Jakob Bornecrantz 2e5c8f43a0 d/psmv: Export a whole lot more variables 2019-09-06 19:14:12 +01:00
Jakob Bornecrantz 9cf6108899 aux/util: Add more types to variable tracker 2019-09-06 18:12:15 +01:00
Jakob Bornecrantz 3f13224502 d/psmv: Fix strict aliasing warnings when compiling with optimisations 2019-09-06 15:46:17 +01:00
Jakob Bornecrantz d6465bc017 d/psvr: Enable by default 2019-09-06 14:37:45 +01:00
Jakob Bornecrantz 8570493db1 d/psvr: Add variable tracking 2019-09-06 14:37:45 +01:00
Jakob Bornecrantz 9192c9c6b5 d/psmv: Add variable tracking 2019-09-06 14:37:45 +01:00
Jakob Bornecrantz 676bc81f40 d/v4l2: Add variable tracking 2019-09-06 14:37:45 +01:00
Jakob Bornecrantz 58008d2ff1 d/psmv: Return error code 2019-09-05 22:18:14 +01:00
Jakob Bornecrantz 1ae8acc71c d/psmv: Read calibration data 2019-09-05 17:24:57 +01:00
Jakob Bornecrantz 29b1713be9 xrt: Add enum xrt_device_name so that state trackers can reason about device 2019-09-04 12:47:18 +01:00
Jakob Bornecrantz a0f2793457 xrt: It's a cross not a x 2019-09-03 15:26:10 +01:00
Jakob Bornecrantz cfa89b84c1 d/psmv: Tidy doc 2019-08-27 09:04:03 +01:00
Jakob Bornecrantz 1e93ba2461 xrt: Refactor frame interface 2019-08-27 08:17:21 +01:00
Jakob Bornecrantz 98d7c3542c d/v4l2: Minor fixes 2019-08-27 08:17:21 +01:00
Ryan Pavlik 12de62fdbc d/psmv: Fix typo in bit mask.
Found by clang-tidy.
2019-08-21 14:28:54 -05:00
Jakob Bornecrantz c8f16be641 xrt: Refactor out frame from frameserver 2019-08-20 12:35:55 +01:00
Ryan Pavlik ca47a216c3 d/psmv: Minor clang-tidy fixes 2019-08-16 17:25:29 -05:00
Ryan Pavlik eef6d87da4 d/v4l2: Minor clang-tidy fixes 2019-08-16 17:25:29 -05:00
Ryan Pavlik 6088402605 d/psvr: Fix narrowing conversions 2019-08-16 10:45:26 -05:00
Ryan Pavlik 261b9125f6 d/hdk: Use string descriptor to guess at revision 2019-08-15 12:36:01 +00:00
Ryan Pavlik 853f8ab68e d/hdk: Port to internal HID wrapper.
Not entirely feature-complete due to lack of access to descriptor strings.
2019-08-15 12:36:01 +00:00
Ryan Pavlik 2cd28914c7 d/hydra: Initially-functional multi-device Razer Hydra driver.
Not pretty - no filtering on tracking, coordinate system
probably a little bit wrong still, no hemisphere tracking,
but enough to show movement and resizing in hello_xr.
2019-07-29 03:01:57 +00:00
Jakob Bornecrantz fb24bb979f d/hdk: Fix warnings during release builds 2019-07-25 00:53:04 +01:00
Jakob Bornecrantz 4237b97d37 d/v4l2: Add control functions and expand PS4 quirk 2019-07-24 19:49:48 +01:00
Jakob Bornecrantz 718a81608a d/v4l2: Add new frameserver 2019-07-23 17:41:34 +01:00
Jakob Bornecrantz 35093bee3c d/psmv: Use new prober function helpers 2019-06-30 14:35:27 +01:00
Jakob Bornecrantz cc83b93733 d/psmv: Add helper function to convert value to u8 2019-06-28 18:32:30 +01:00
Ryan Pavlik 1f84814721 st/prober: Allow "found" functions called by prober to make more than one device. 2019-06-22 11:34:51 +01:00
Jakob Bornecrantz 0fa7af1dd2 d/psvr: Set name of PSVR headset 2019-06-21 21:55:43 +01:00
Ryan Pavlik 3cc7ee872a d/psmv: Fix typo 2019-06-21 13:17:55 -05:00
Jakob Bornecrantz 542208bd42 d/ohmd: Fix warning by including right header 2019-06-19 16:45:10 +01:00
Caleb Szalacinski 6664588eba Added a delay quirk to allow the Oculus Rift CV1 to initialize properly. 2019-06-18 20:36:43 -05:00
Ryan Pavlik 3de9b08ebc d/psmv: Use U_ZERO 2019-06-18 14:14:01 -05:00
Ryan Pavlik 2175a4226b d/psvr: Use U_ZERO 2019-06-18 14:14:01 -05:00
Ryan Pavlik 287bd1cb06 d/ohmd: Cast bitmask enum 2019-06-18 18:43:20 +00:00
Ryan Pavlik 839d08616e drv/psvr: Fix some enum casting build errors 2019-06-18 18:43:20 +00:00
Ryan Pavlik fbfee92601 d/oh: Have prober include interface header
Without this, the implementation definition might drift from the declaration,
and it doesn't get its extern "C"-ness.
2019-06-18 13:32:07 -05:00
Ryan Pavlik 0472bef1fa d/hdk: Have prober include interface header
Without this, the implementation definition might drift from the declaration,
and it doesn't get its extern "C"-ness.
2019-06-18 13:31:32 -05:00
Ryan Pavlik de0506fb0c d/oh: Codespell fix 2019-06-18 13:09:59 -05:00
Ryan Pavlik aeff374fcb d/psvr: Codespell fix 2019-06-18 13:09:59 -05:00
Jakob Bornecrantz b71e143eaa d/psmv: Add PS Move driver 2019-06-18 17:56:10 +01:00
Jakob Bornecrantz 89d8315b3b xrt: Add output interfaces 2019-06-10 14:47:19 +01:00
Jakob Bornecrantz 1f64f714f6 xrt: Add input, hmd_parts and tracking interface
This patch has been spun of the rather massive amount of work for adding input
devices into Monado. The interfaces feels somewhat stable now so could do
with another pair of eyes on them, before too much work is done on st/oxr.
2019-06-10 14:47:19 +01:00
Jakob Bornecrantz 42cddb2580 d/psvr: Add a experimental PSVR driver
Hidden behind a env variable.
2019-05-06 16:46:10 +00:00
Jakob Bornecrantz dc9ab44a5a xrt: Rename xrt_prober to xrt_auto_prober 2019-05-03 18:53:07 +01:00
Jakob Bornecrantz c8cdf3ee38 d/ohmd: Tidy code style 2019-04-30 14:02:00 +01:00
Jakob Bornecrantz 9c05e853cc build: Refactor flags and definitions (and fix fallout)
Defines:
* XRT_HAVE_[name] is a external dep indicator.
* XRT_DRIVER_[name] if a internal driver is built.

CMake variables:
* BUILD_WITH_[name] is a external dep indicator.
* BUILD_DRIVER_[name] tells if we should build a specific driver.
2019-04-29 17:18:09 +01:00
Jakob Bornecrantz 831b52f71e d/ohmd: Refactor quirking some more 2019-04-27 09:21:12 +01:00
Jakob Bornecrantz 8675142e32 d/ohmd: Refactor quirking code 2019-04-27 09:06:33 +01:00
Jakob Bornecrantz 79d7555449 d/ohmd: Make rotate in be more correct 2019-04-27 08:32:44 +01:00
Jakob Bornecrantz e39260eb67 d/ohmd: Add quirk for PSVR
The OpenHMD driver does not have any sensible panotools values
2019-04-19 14:56:47 +01:00
Jakob Bornecrantz ab6defc610 d/*: Add a bit of documentation organization 2019-04-12 14:08:46 +01:00
Ryan Pavlik 5cfa0907b6 build: Use and obey config options for driver selection.
We had BUILD_WITH_OPENHMD but it was unused,
while the HDK driver always built if the deps were found.
2019-04-08 19:11:04 +00:00
Christoph Haag 55ec276810 d/ohmd: Set xrt_device name to name from OpenHMD 2019-04-05 09:52:29 +01:00
Jakob Bornecrantz e4a016f4d6 d/hdk: Tidy code style 2019-04-03 17:00:43 +01:00
Jakob Bornecrantz 5d5d420fb6 d/hdk: Fix unhandled case warnings 2019-03-27 17:34:46 +00:00
Ryan Pavlik dc990a8e77 d/hdk: Adjust timestamp for latency, based on experiments. 2019-03-27 16:22:45 +00:00
Jakob Bornecrantz bf2eae1524 d/hdk: Tidy code style 2019-03-27 13:36:30 +00:00
Ryan Pavlik 605005b7c2 oh: Compare current and previous quaternion to detect old data.
Bitwise comparison because we have no timestamp to check.
2019-03-25 16:37:12 -05:00
Ryan Pavlik cfb315d714 oh: Use finite differencing to find ang velocity.
Only if we can't get it from OpenHMD directly,
and only if not disabled explicitly.
2019-03-25 12:28:54 -05:00
Ryan Pavlik 9004ea80bb xrt: Devices get a timekeeping object, must return a timestamp.
Updates drivers to match.
2019-03-25 12:28:54 -05:00
Ryan Pavlik 294be21392 d/oh: Populate nominal frame interval 2019-03-25 12:28:54 -05:00
Ryan Pavlik 3e7b9169d6 d/hdk: Populate nominal frame interval 2019-03-25 12:28:54 -05:00
Ryan Pavlik a06a9eaac2 hdk: Skip apparent matches that have weird USB props. 2019-03-22 17:05:02 -05:00
Ryan Pavlik f7d990c7e3 xrt: Use U_TYPED_CALLOC 2019-03-22 13:47:51 -05:00
Ryan Pavlik 142a9a77eb d/hdk: clarify display transforms and add an ifdef to not rotate. 2019-03-22 17:35:18 +00:00
Ryan Pavlik 3a1a120238 d/hdk: Fix orientation and angular velocity of tracker 2019-03-22 17:35:18 +00:00
Ryan Pavlik 32fd930ada d/hdk: Neatly handle disconnects 2019-03-22 17:35:18 +00:00
Ryan Pavlik 9d0888cd7d d/hdk: Harden against USB issues in prober. 2019-03-22 17:35:18 +00:00
Ryan Pavlik b74e7c74e2 d/hdk: Handle more models 2019-03-22 17:35:18 +00:00
Ryan Pavlik d1ec5fa66a oh: Fix type issues 2019-03-22 16:54:14 +00:00
Lubosz Sarnecki a87e6e664e oh: Initialize VIVE distortion parameters with default values from my VIVE. 2019-03-18 14:45:31 +01:00
Jakob Bornecrantz 15a97422ba xrt: Add all of Monado 2019-03-18 05:52:32 +00:00