Commit Graph

376 Commits

Author SHA1 Message Date
darren siepka 90420359f7 improve ini selection robustness to prevent impossible selection according to mcu type etc.
allow canbus options to be chosen that were not previously available
2018-09-23 22:50:15 +01:00
Josh Stewart a21f0eb63f Do not attempt to perform a priming pulse or pump prime if set to 0 2018-09-19 16:40:03 +10:00
Josh Stewart 62b367595a Add some missing parts for staging on different cylinder counts. Needs further testing (See #162) 2018-09-13 17:38:29 +10:00
Josh Stewart 91a46210e7 Single channel 3 cyl ignition now produces 3 pulses per 720 crank deg (4 stroke only) 2018-09-11 16:37:40 +10:00
Josh Stewart b903f42093 Correct IGN3 start angle on 3 cylinder configs 2018-09-11 16:31:53 +10:00
Josh Stewart e394ffebb6 Fix new ignition mode on Nissan 360 trigger 2018-09-08 12:04:35 +10:00
Josh Stewart 8e4a9c82f3 Corrected limiting of 2 stroke injection to 360 degrees. See #162 2018-09-07 13:52:50 +10:00
Josh Stewart ec516f5192 Only use per tooth timing when fixed cranking isn't operational 2018-09-04 19:47:04 +10:00
Josh Stewart b555392636 Minor cleanups to missing tooth per tooth calc 2018-09-04 17:07:21 +10:00
Josh Stewart 765e52fce5 Move a chunk of the prediction code out of speeduino.ino into crankMaths 2018-08-31 17:35:29 +10:00
Josh Stewart 726755ad8e Fix for crank speed being wrong on Basic Distrbutor, Miata9905 and Subaru 67 patterns 2018-08-18 08:49:19 +10:00
Josh Stewart bc096fbae3 Bunch of minor error cleanup 2018-08-15 17:44:30 +10:00
Josh Stewart 189234015f Huge amount of optimsation work on new ignition system 2018-08-14 12:46:39 +10:00
Josh Stewart 0bbed9f316 Cleanup of aux PR and add init routing for these channels 2018-07-26 17:07:31 +10:00
Josh Stewart f1182d569d
Merge branch 'master' into local_auxin3 2018-07-25 16:38:07 +10:00
Josh Stewart 45bbb4bad8 Correct check for new board on startup. Fixes #153 2018-07-24 15:50:16 +10:00
Josh Stewart 2287c9086c Add sync loss counter to log (And apply to other patterns) 2018-07-24 10:44:47 +10:00
Josh Stewart cfe1062dd2 New rolling cut method 2018-07-22 21:28:05 +10:00
Josh Stewart 0dee4ab7f2 Still more warnings cleanup 2018-07-22 00:17:08 +10:00
Josh Stewart ce0e399201 More warnings cleanup 2018-07-19 23:26:31 +10:00
Josh Stewart 9e2d649f61 Begin some work on warnings cleanup 2018-07-19 17:35:35 +10:00
Josh Stewart f741a3bef1 Fix for sequential ignition not working on 2 cyl 2018-07-18 18:19:59 +10:00
Josh Stewart b8a5586422 Initial conversion to the new timing maths code 2018-07-12 20:45:27 +10:00
darren siepka 8dd9ed9fbd improve TS ini selection options
fix bit masking
storage table fix
2018-07-04 01:16:35 +01:00
Autohome2 fbfa727f6f
Merge pull request #60 from noisymime/master
update for 03072018 release
2018-07-03 21:51:12 +01:00
Josh Stewart 5c79f2ac15 Multiple nitrous control fixes. Appears to be working fully. Closes #147 2018-07-03 15:46:23 +10:00
Josh Stewart 043673dd78 Improvements to nitrous contol. Now complete and needing testing #147 2018-07-01 20:37:57 +10:00
darren siepka a124f4d6b1 fix minor typos 2018-06-29 23:38:41 +01:00
Autohome2 757256bbb7
Merge pull request #59 from noisymime/master
update with josh 29062018
2018-06-29 23:15:31 +01:00
darren siepka a480996cfc add option to use can channels for local input pins 2018-06-29 23:09:27 +01:00
Josh Stewart 8ff299e3ac Initial nitrous control implementation (Needs tweaking and testing) 2018-06-30 01:19:51 +10:00
Josh Stewart d291d6433f Fix minor bug where cranking RPM would be rough on startup for 1 second 2018-06-17 11:29:47 +10:00
Josh Stewart 6258fd1556 Correct schedule function definitions to match actual functions 2018-06-06 12:15:07 +10:00
Josh Stewart a694651caa Add open loop boost option back in 2018-05-15 14:05:45 +10:00
Josh Stewart 19e258ecfb Independent fuel and ignition load algorithms 2018-05-08 16:43:18 +10:00
Josh Stewart 4b5f580649 All base work on EMAP sensor configuration and reading 2018-04-24 21:31:52 +10:00
Josh Stewart d473e00ce4 Groundwork for proper variable algorithms 2018-04-24 17:11:10 +10:00
Josh Stewart 1d5a79757a Send through channel and squirt info to TS 2018-04-23 15:27:57 +10:00
Josh Stewart 1f998a2764 Add sequential set modes for 6 and 8 cylinder fuel 2018-04-20 17:13:20 +10:00
Josh Stewart 8706c107fb Multi-squirt enable (giggity) 2018-04-20 17:02:35 +10:00
darren siepka aa3904b448 add dvjcodec rev a and b teensy board entry
reactivate second o2 input
2018-04-10 23:17:38 +01:00
darren siepka 2498f53730 fix second o2 error 2018-04-05 22:11:58 +01:00
Josh Stewart 8d7370e0df Multiple safety checks and fixes on fixed cranking and Miata 99-05 decoder 2018-04-04 14:40:09 +10:00
Vitor Moreno B. Sales 17a551d89b
Merge pull request #18 from noisymime/master
Early March Sync
2018-03-16 22:17:54 -03:00
Josh Stewart 981d087d64 Work on the dynamic ignition functions 2018-03-10 14:07:29 +11:00
Josh Stewart 4183be51f2 Fast versions of millis() and micros() that use timer5 rather than timer0. Current disabled 2018-03-10 14:07:06 +11:00
Josh Stewart 4c47ea93d3 Add a check that prevents staged injection from trying to run when there are more cylinders than injection channels 2018-02-22 23:10:35 +11:00
VitorBoss 8a636e407f Update Timers and limited BluePill to 4 Inj/Ign 2018-02-16 20:44:12 -02:00
Vitor Moreno B. Sales e510c0e909
Merge pull request #17 from noisymime/master
Get latest fixes from Josh
2018-02-09 13:06:05 -02:00
Josh Stewart c038ebb1d7 Fix bug that prevents the per tooth based timing from functioning 2018-02-05 16:13:26 +11:00
VitorBoss 27e22eef1b Merge branch 'master' of git://github.com/noisymime/speeduino 2018-02-01 18:28:53 -02:00
Josh Stewart 33b85f3b9d Cleanup a bunch of errors and warnings for stm32 2018-01-27 22:14:11 +11:00
Josh Stewart b1c307b01b Fixup errors from last merge 2018-01-26 00:37:38 +11:00
Josh Stewart 05ebf72e53
Merge branch 'master' into 0x15e-master-amalgamation 2018-01-25 17:25:11 +11:00
Josh Stewart 8e2e3f125b Convert all tables in code to match the numbering in the ini (Probably has bugs for now) 2018-01-24 12:05:50 +11:00
Josh Stewart c0f0cd2a0a
Merge branch 'master' into 0x15e-master-amalgamation 2018-01-23 16:52:19 +11:00
Josh Stewart 80a77d4c4a More work on the dynamic channel usage 2018-01-23 16:14:03 +11:00
Josh Stewart c3173296f5 Some initial ground work for the dynamic inj/ign assignment 2018-01-22 12:21:33 +11:00
Murray b5c56495e9 Merge branch 'flextable' of https://github.com/0x15e/speeduino into 0x15e-master-amalgamation
# Conflicts:
#	reference/speeduino.ini
#	speeduino/comms.h
#	speeduino/comms.ino
#	speeduino/globals.h
2018-01-21 14:55:47 -06:00
Murray 9369ec73d8 Merge branch 'reset-lock' of https://github.com/0x15e/speeduino into 0x15e-master-amalgamation
# Conflicts:
#	reference/speeduino.ini
#	speeduino/globals.h
2018-01-21 14:32:51 -06:00
Murray 8e789d4644 Merge branch 'master' of https://github.com/noisymime/speeduino into flextable
# Conflicts:
#	reference/speeduino.ini
#	speeduino/globals.h
2018-01-20 18:16:19 -06:00
Murray 23862103e5 extremely rough flex table editors. added flexBoostCorrection to currentStatus. shortened flex correction table names. gave each flex table its own set of eth% bins. fixed the incredibly broken EEPROM update code. 2018-01-20 16:33:14 -06:00
Murray 929756b63a Merge branch 'master' of https://github.com/noisymime/speeduino into flextable
# Conflicts:
#	.gitignore
#	reference/speeduino.ini
#	speeduino/globals.h
2018-01-19 22:24:02 -06:00
Murray 2350d5d785 Table-based flex fuel corrections
Changed the linear low / high flex fuel correction method to a table2D-based one.
2018-01-19 21:25:01 -06:00
ConnerMcLaughlin 124c0d51da Launch Control TPS II
Adding TPS limit on launch control
2018-01-14 17:42:38 -06:00
Murray 2819adb865 Custom bootloader recognition
Added a new serial command that allows a custom 16u2 firmware to let the speeduino know about itself. After issuing a `, the speeduino will expect one more byte indicating the capabilities level of the custom firmware (only 1 for now).
2018-01-12 21:37:21 -06:00
Josh Stewart dd9941ce5d Introduce end-of-line normalization 2018-01-12 14:04:43 +11:00
Murray 43f0d35839 Merge branch 'master' of https://github.com/noisymime/speeduino into reset-lock 2018-01-07 16:22:55 -06:00
Murray ae8ea08d41 Reset Control
Changed reset lock feature to a more general "reset control" feature. Moved reset control settings to the general Settings menu. added a serial U command that will halt comms and set the control pin low when another byte is received to facilitate reset control for devices that lack an AtmegaXXu2 usb controller. Improved context help for reset control. Corrected reset lock status indicator on / off labels. moved reset control setup to utils.ino.
2018-01-07 16:22:18 -06:00
Vitor Moreno B. Sales 936c0e882b
Merge pull request #14 from noisymime/master
Jan2018
2018-01-05 20:05:11 -02:00
Josh Stewart a2e1379fd6 MISRA cleanup 2018-01-03 20:48:35 +11:00
Josh Stewart 3a98d08c1a Prevent staging and sequential trying to function at once 2018-01-03 20:12:37 +11:00
Josh Stewart 9f53002b9d Adjust injector setting priority so that sequential will override the Simultaneous/Alternating option 2018-01-03 17:27:22 +11:00
Murray 03e6c2d476 Software controlled auto-reset prevention
This feature enables the Speeduino to set a pin high that will tell the Arduino's 8U2/16U2 firmware not to reset on new serial connections. This requires a slightly modified firmware for the 8U2/16U2 that will only reset on DTR when PB7 is also held low.
2018-01-01 15:39:43 -06:00
Vitor Moreno B. Sales b13297cb44
Merge pull request #13 from noisymime/master
Early december
2017-12-21 17:29:36 -02:00
Josh Stewart ef0f6dd6cb Clear RUN and ASE flags in the timeout area to make sure they don't come on incorrectly upon power on 2017-12-20 12:23:14 +11:00
Vitor Moreno B. Sales 2c10a969dd
Merge pull request #12 from noisymime/master
December merge
2017-12-13 15:25:10 -02:00
Josh Stewart e19ce69bfd Warnings and MISRA violation cleanup 2017-12-10 22:29:53 +11:00
Josh Stewart a57be61913 Missed lines from last commit 2017-12-07 13:46:25 +11:00
Josh Stewart 35fa068575 Staged injection (Table and automatic modes) 2017-12-07 13:46:04 +11:00
VitorBoss 31d134c05d Merge branch 'master' of git://github.com/noisymime/speeduino 2017-12-06 16:13:58 -02:00
Josh Stewart 2989e32f15 Memory adjustments for staging fuel table 2017-11-21 15:17:55 +11:00
Josh Stewart 0de3a231c9 Minor cleanups before release 2017-11-07 22:05:23 +11:00
Josh Stewart 4b5b040615
Merge pull request #110 from Autohome2/can-serial3
Can serial3 updates
2017-11-03 00:00:53 +11:00
darren siepka 380ffc20b8 update serial3 and canbus related data transfer protocols and naming 2017-11-01 20:17:47 +00:00
Josh Stewart 17030a9df7 Add in check for ignition count to the closed loop AFR control 2017-11-01 16:10:06 +11:00
Josh Stewart 91bea0766f Fix bug that could cause RPM to spike when first cranking on missing tooth patterns 2017-10-24 21:07:22 +11:00
Josh Stewart 2ec972948f Changes to logged variables 2017-10-24 16:54:18 +11:00
Josh Stewart 6a8ab1015b Move the pulse width function into the speeduino.h scope 2017-10-24 14:08:32 +11:00
VitorBoss 59be466201 Typo fix 2017-10-06 16:44:29 -03:00
VitorBoss bc71f23895 Merge branch 'master' of git://github.com/noisymime/speeduino into noisymime-master 2017-10-06 14:43:56 -03:00
Josh Stewart ef89229e27 More consistent rolling hard cut 2017-10-04 21:16:08 +11:00
Josh Stewart 485affc81e Cleanup some of the strings to reduce sketch size for Bluepill 2017-10-04 18:02:12 +11:00
Josh Stewart 683fe44562 Initial work on rolling sign cut rev limit 2017-10-04 09:48:46 +11:00
VitorBoss 44a0da5a62 Small fixes 2017-09-23 11:47:48 -03:00
Josh Stewart 46b1663da9 Support chunk serial comms mode 2017-09-20 14:06:55 +10:00
Josh Stewart 5b3df5ac4d Merge config pages 6 and 7 2017-09-19 14:51:33 +10:00
Josh Stewart 6763ff15b4 Initial work on new serial comms protocols (Working, but slow) 2017-09-19 14:10:07 +10:00
Josh Stewart ae780dc940 New per page based EEPROM writes 2017-09-19 14:05:43 +10:00
Josh Stewart 02976029cf Comment cleanup 2017-09-18 10:38:49 +10:00
Josh Stewart 7c0932a396 Adjust boost timings slightly 2017-09-07 06:20:22 +10:00
Josh Stewart 4e858f1ca8 Completed new PID mode for boost control 2017-09-04 11:50:55 +10:00
VitorBoss da39db1476 Fix potential crash on IDLE when first flash
Other cosmetic changes
2017-09-01 16:16:45 -03:00
VitorBoss 04fe29010c Merge branch 'master' of https://github.com/VitorBoss/speeduino 2017-08-31 17:40:21 -03:00
VitorBoss 6b205e832f Fix error on IDLE 2017-08-31 17:38:41 -03:00
Josh Stewart 976c18fb26 Merge branch 'master' into master 2017-08-31 14:46:06 +10:00
Josh Stewart 0ccab57e61 Fix for potential miss on trailing spark of FC rotary mode at high RPM 2017-08-31 12:09:13 +10:00
VitorBoss 1ffbad8a43 Revert "Merge branch 'master' into pr/5"
This reverts commit d8898db9fe, reversing
changes made to b1e7b854d0.
2017-08-28 02:01:36 -03:00
Vitor Moreno B. Sales d8898db9fe Merge branch 'master' into pr/5 2017-08-28 01:53:24 -03:00
VitorBoss c10a637853 Sync with last changes 2017-08-28 01:35:49 -03:00
Josh Stewart e01dccc6b8 Initial work on revised version of the Miata 99-05 decoder 2017-08-27 09:26:36 +10:00
VitorBoss 38a89e41d0 082617 2017-08-26 19:48:04 -03:00
Josh Stewart 630a3bfe2a Checks on trailing ignition angles for FC rotary 2017-08-24 10:17:35 +10:00
Josh Stewart 0a7b782af9 Better method of doing trailing select for FC rotary configs 2017-08-24 00:55:44 +10:00
Josh Stewart 7db1101429 Completely untested trailing spark for FC rotary ignitions
May God have mercy on us all
2017-08-23 17:18:59 +10:00
Josh Stewart 539618c583 Initial interface work on rotary ignition modes 2017-08-23 08:14:11 +10:00
Josh Stewart cf6beeb53c Disable VVT and Boost control timers when engine is off 2017-08-22 19:57:45 +10:00
Josh Stewart 13e3b1f37b Starting improvements on the 4g63 pattern 2017-08-21 11:52:12 +10:00
Josh Stewart afa83cfdd7 Experimental new low res mode (Testing only) 2017-08-17 13:51:12 +10:00
Josh Stewart 77094a59d1 Better startup procedure and DIY watchdog 2017-08-17 11:24:26 +10:00
Josh Stewart 83b486ef1f Change to single calculation of the cranking RPM 2017-08-10 11:44:32 +10:00
Josh Stewart 692cb68cf1 Better locked ignition timing during cranking 2017-08-09 10:37:53 +10:00
VitorBoss bf21e87829 MISRA work 2017-08-07 22:05:35 -03:00
Vitor Moreno B. Sales 33f14e8fe5 Merge branch 'master' into master 2017-08-07 21:57:58 -03:00
VitorBoss 1defafb387 Work on boost/vvt and timers for STM32 2017-08-07 21:40:27 -03:00
Josh Stewart 482bbfab40 Cleanup unused variables ignXLastRev 2017-08-07 16:42:34 +10:00
Josh Stewart 4f7e11c233 Fix for spark miss every ~250 revs 2017-08-06 17:00:58 +10:00
VitorBoss 9f64ba2b6c idle, boost and vvt PWM added 2017-08-04 00:13:32 -03:00
VitorBoss 9398dadb48 Merge remote-tracking branch 'refs/remotes/noisymime/master'
# Conflicts:
#	speeduino/speeduino.ino
2017-08-03 22:49:10 -03:00
Josh Stewart e4207d9ee3 Add check to prevent system hanging on startup with fresh board if invalid flex pin is attempted 2017-08-03 23:45:51 +10:00
Vitor Moreno B. Sales d9f38f82de Fixing last comit 2017-08-02 22:51:07 -03:00
Vitor Moreno B. Sales e9db1a2f78 New update to STM32
Using timer bits instead (mainLoopCount & 31) comparators.
Few changes to support another library on STM32
2017-08-02 22:46:48 -03:00
Josh Stewart 07afb535d0 Updater for July firmware 2017-07-30 23:04:37 +10:00
Josh Stewart c69499497b Better baro reading on startup 2017-07-30 14:25:07 +10:00
Josh Stewart 8db6ef21f8 New experimental boost control PID 2017-07-29 22:38:54 +10:00
Josh Stewart ccb6e194b7 Initial work creating a new memory page (pg 11) 2017-07-20 16:54:50 +10:00
Josh Stewart 9d2e938a4d Initial (mostly untested) live baro reading 2017-07-17 17:06:14 +10:00
Josh Stewart fa49d38253 Tweaks to the missing tooth per tooth timing 2017-07-05 21:12:21 +10:00
Josh Stewart 5992e31f2f Experimental commit of per tooth based ignition timing 2017-07-03 18:39:10 +10:00
Josh Stewart f67f24f16d Merge pull request #89 from Autohome2/can_io_2
External devices over serial3 update
2017-07-02 22:40:45 +10:00
Josh Stewart 652624b288 Add initial Daihatsu +1 decoder (also 3 cylinder sequential ignition) 2017-06-26 17:34:10 +10:00
Josh Stewart 595edccd2a New secondary scheduling method for fuel schedules 2017-06-21 13:00:58 +10:00
Autohome2 8db13859e1 Merge branch 'master' into can_io_2 2017-06-20 02:44:51 +01:00
darren siepka 35dfa6395d support read values(16channel) from gpio or other external device . other device can also access the speeduino data values(realtime)
all via serial3
2017-06-20 02:29:55 +01:00
Josh Stewart 6b8961e088 MISRA compliant decoders.ino 2017-06-16 08:45:39 +10:00
Josh Stewart 865c2cfe5b Cleanup unused code from last commit 2017-06-14 16:29:17 +10:00
Josh Stewart 19ec917b94 Move to new output triggering method (Injectors only for now) 2017-06-14 12:15:26 +10:00
Josh Stewart 3dc0ebf15a Fix Teensy #ifdef typo 2017-06-13 17:23:14 +10:00
darren siepka 0296f06438 changes to serial3 protocol and further tidyng with new canserial use 2017-06-13 03:02:50 +01:00
Josh Stewart 02564d3218 May signature 2017-06-05 14:28:28 +10:00
Vitor Moreno B. Sales c925905c95 Initial STM32F4 series support 2017-06-02 18:09:36 -03:00
Josh Stewart 65415c0aff Correct issue where injector timing was forced to simultaneous on 6 and 8 cylinders 2017-05-26 11:06:20 +10:00
Josh Stewart fbde19253f Clear cranking and WUE bits when engine speed drops to 0rpm 2017-05-16 22:01:33 +10:00
Josh Stewart f27f883a5c Add updater mechanism for translating data between firmware versions 2017-05-16 15:05:39 +10:00
Josh Stewart 7b13b8995c Prevent the IAT retard curve from clobbering spark advance values below 0 2017-05-10 15:46:14 +10:00
Josh Stewart a7460f93d2 Merge pull request #85 from Autohome2/can-serial3
serial3 and canbus integration improvements
2017-05-10 12:15:29 +10:00
Josh Stewart 04a6866115 Allow spark advance values below 0 in the main table 2017-05-09 17:29:55 +10:00
darren siepka 49a23d9a33 This version is based from the can-serial3 branch which was updated from josh's master on 07/05/2017
Before change it compiled at
bytes of 63,444 flash(24%) and 4137 bytes of ram(50%) used
upon pr submission this changed to
bytes of 63,574 flash(25%) and 4155 bytes of ram(50%) used

Changes were to allow the use of the "r" command to access specific data in the realtime list
It contains minor changes to the ini file to link to the help for serial3 and can interface.
also change 0x07 to 0x30(dec48) as discussed on slck with josh for the r command
added teensy and stm32 can references and some specific canwork for teensy3.5
need to use pawelsky flexcan library (https://github.com/pawelsky/FlexCAN_Library)
2017-05-08 23:15:03 +01:00
Josh Stewart 7c909f021e Set appropriate type for fixed cranking additional dwell 2017-05-04 13:47:50 +10:00
Josh Stewart 3f099f06f1 Merge branch 'master' into pr/77
# Conflicts:
#	reference/speeduino.ini
#	speeduino/comms.ino
2017-05-02 12:25:51 +10:00
Vitor Moreno B. Sales fc577c9a59 Updated STM work 2017-04-21 11:30:13 -03:00
Josh Stewart 538bc5f0bf Initial commit of dwell limiting when it exceeds maximum time in revolution 2017-04-21 17:29:09 +10:00
darren siepka 9bff58a265 added 8ch input over serial3 , displays data in TS live and logs to TS log file.
Data format follows j1939 type methods , see protocol doc
2017-04-09 01:17:36 +01:00
Josh Stewart 676a001fb8 Initial commit of Subaru 6/7 (Likely has bugs) 2017-03-31 22:39:33 +11:00
Josh Stewart 3820fa8201 Some Teensy compatibility improvements 2017-03-29 14:03:38 +11:00
Josh Stewart 4897e44f55 Merge branch 'master' into pr/73
# Conflicts:
#	reference/speeduino.ini
#	speeduino/comms.h
#	speeduino/comms.ino
#	speeduino/globals.h
2017-03-25 09:17:06 +11:00
Josh Stewart eb334b5a1c Cleanup of variable names and Enable check 2017-03-15 23:19:08 +11:00
Josh Stewart afb6f71aae Complete closed loop stepper idle (Needs testing) 2017-03-14 17:25:59 +11:00
darren siepka 74cf93b979 add test modes to injector and spark outputs 2017-03-10 00:46:11 +00:00
Josh Stewart 22af95db32 Seemingly working Nissan 360 decoder (4 and 6 cylinder) 2017-03-01 16:17:30 +11:00
Josh Stewart 0ae02e23f1 Minor cleanups or warnings and error (from last commit) 2017-02-14 01:07:05 +11:00
Josh Stewart 650a096175 Initial (untested) commit of Nissan 360. ONLY support 4 cylinder so far 2017-02-12 18:35:18 +13:00
Josh Stewart 667e80dc26 Add boost target to log 2017-02-12 14:31:37 +13:00
Josh Stewart bec06bca3a Improve calculation speed of boost control 2017-02-11 22:33:07 +13:00
Josh Stewart 4ca8205591 More MAP sanity settings 2017-02-09 14:22:57 +11:00
Josh Stewart c555bbc060 Move to PlatformIO for project layout 2017-02-06 20:56:46 +11:00