/src/main/initialisers/FixedConfig1.c

https://gitlab.com/libreems-suite/libreems-firmware · C · 388 lines · 326 code · 21 blank · 41 comment · 40 complexity · 898ad578fc770352f2ddc4b9d6e056f9 MD5 · raw file

  1. /* FreeEMS - the open source engine management system
  2. *
  3. * Copyright 2008-2012 Fred Cooke
  4. *
  5. * This file is part of the FreeEMS project.
  6. *
  7. * FreeEMS software is free software: you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation, either version 3 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * FreeEMS software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with any FreeEMS software. If not, see http://www.gnu.org/licenses/
  19. *
  20. * We ask that if you make any changes to this file you email them upstream to
  21. * us at admin(at)diyefi(dot)org or, even better, fork the code on github.com!
  22. *
  23. * Thank you for choosing FreeEMS to run your engine!
  24. */
  25. /** @file
  26. *
  27. * @ingroup dataInitialisers
  28. *
  29. * @brief First fixed config block
  30. *
  31. * This file contains the definition of the first fixed configuration block.
  32. * The declaration can be found in the global constants header file.
  33. *
  34. * Please ensure that all variables added here have good default values.
  35. */
  36. #include "../inc/freeEMS.h"
  37. /// @copydoc fixedConfig1
  38. const volatile fixedConfig1 fixedConfigs1 FIXEDCONF1 = {
  39. engineSettings:{
  40. #if CONFIG == TRUCK_ID
  41. perCylinderVolume: CYLINDER_VOLUME(500),
  42. cylinderCount: 4,
  43. strokesPerCycle: 4,
  44. injectorFlow: CC_PER_MINUTE(550), // RX7 "550" which em_knaps had tested at 650cc
  45. secondaryInjectorFlow: CC_PER_MINUTE(0),
  46. #elif CONFIG == PRESTO_ID
  47. perCylinderVolume: CYLINDER_VOLUME(400),
  48. cylinderCount: 4,
  49. strokesPerCycle: 4,
  50. injectorFlow: CC_PER_MINUTE(213),
  51. secondaryInjectorFlow: CC_PER_MINUTE(0),
  52. #elif CONFIG == SEANKLT1_ID
  53. perCylinderVolume: CYLINDER_VOLUME(727),
  54. cylinderCount: 8,
  55. strokesPerCycle: 4,
  56. injectorFlow: CC_PER_MINUTE(525),
  57. secondaryInjectorFlow: CC_PER_MINUTE(0),
  58. injectionStrategy: PLAIN_INJECTION,
  59. maxPrimaryDC: DUTYCYCLE(85.00),
  60. maxSecondaryDC: DUTYCYCLE(85.00),
  61. #elif CONFIG == SEANKR1_ID
  62. perCylinderVolume: CYLINDER_VOLUME(250),
  63. cylinderCount: 4,
  64. strokesPerCycle: 4,
  65. injectorFlow: CC_PER_MINUTE(425), // http://witchhunter.com/flowdatapix/d3920.jpg
  66. secondaryInjectorFlow: CC_PER_MINUTE(230), // http://witchhunter.com/flowdatapix/bcdh210.jpg
  67. injectionStrategy: STAGED_EXTENSION,
  68. maxPrimaryDC: DUTYCYCLE(85.00),
  69. maxSecondaryDC: DUTYCYCLE(85.00),
  70. #elif CONFIG == SLATER_ID
  71. perCylinderVolume: CYLINDER_VOLUME(324),
  72. cylinderCount: 4,
  73. strokesPerCycle: 4,
  74. injectorFlow: CC_PER_MINUTE(320),
  75. secondaryInjectorFlow: CC_PER_MINUTE(0),
  76. #elif CONFIG == PETERJSERIES_ID
  77. perCylinderVolume: CYLINDER_VOLUME(585),
  78. cylinderCount: 6,
  79. strokesPerCycle: 4,
  80. injectorFlow: CC_PER_MINUTE(320),
  81. secondaryInjectorFlow: CC_PER_MINUTE(0),
  82. #elif CONFIG == DEUCECOUPE_ID
  83. perCylinderVolume: CYLINDER_VOLUME(522),
  84. cylinderCount: 6,
  85. strokesPerCycle: 4,
  86. injectorFlow: CC_PER_MINUTE(235),
  87. secondaryInjectorFlow: CC_PER_MINUTE(0),
  88. #elif CONFIG == DEUCES10_ID
  89. perCylinderVolume: CYLINDER_VOLUME(548),
  90. cylinderCount: 4,
  91. strokesPerCycle: 4,
  92. injectorFlow: CC_PER_MINUTE(235),
  93. #elif CONFIG == SCAVENGER_ID
  94. perCylinderVolume: CYLINDER_VOLUME(399.25),
  95. injectorFlow: CC_PER_MINUTE(540),
  96. #else
  97. perCylinderVolume: CYLINDER_VOLUME(500),
  98. cylinderCount: 4,
  99. strokesPerCycle: 4,
  100. injectorFlow: CC_PER_MINUTE(550),
  101. secondaryInjectorFlow: CC_PER_MINUTE(0),
  102. injectionStrategy: PLAIN_INJECTION,
  103. maxPrimaryDC: DUTYCYCLE(85.00),
  104. maxSecondaryDC: DUTYCYCLE(85.00),
  105. #endif
  106. #if CONFIG == SEANKR1_ID
  107. stoichiometricAFR: STOICHIOMETRICAFRE85,
  108. densityOfFuelAtSTP: DENSITYOFE85
  109. #else
  110. stoichiometricAFR: STOICHIOMETRICAFRPETROL,
  111. densityOfFuelAtSTP: DENSITYOFPETROL
  112. #endif
  113. },
  114. serialSettings:{
  115. baudDivisor: SCI_BAUD_DIVISOR(115200) // 21.7013889 (22) http://duckduckgo.com/?q=40000000+%2F+%2816*115200%29
  116. // http://duckduckgo.com/?q=40000000+%2F+%2816*22%29 113.636 kHz actual speed
  117. // http://duckduckgo.com/?q=22+%2F+%28%2840000000%2F16%29%2F115200%29 1.376% error in speed
  118. },
  119. coarseBitBangSettings:{
  120. #if CONFIG == SNOTROCKET_ID // 24 events for a 24+1 CAS setup with 4 cylinder tacho
  121. outputActions: {1,0,0,2,0,0,1,0,0,2,0,0,1,0,0,2,0,0,1,0,0,2,0,0},
  122. #elif CONFIG == SLATER_ID // 11 events for 12-1 crank setup with 4 cylinder tacho
  123. outputActions: {1,0,0,2,0,0,1,0,0,2,0},
  124. #else
  125. outputActions: STANDARDTACHOARRAY,
  126. #endif
  127. ports: STANDARDTACHOPORTS,
  128. masks: STANDARDTACHOMASKS,
  129. numberConfigured: 1
  130. },
  131. schedulingSettings:{
  132. /* XGATE outputs should not be used for ignition control. There can be up to ~15uS of jitter which can translate to
  133. * a few degrees of movement in a high RPM engine. However, worst case fuel accuracy is about 1.5% and that is with
  134. * a 1mS fuel pulse. If you use them for ignition control your engine may appear to run fine, but again this is a bad idea. */
  135. #if CONFIG == TRUCK_ID // Fred's Ford Courier http://forum.diyefi.org/viewtopic.php?f=55&t=1069
  136. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)},
  137. outputEventPinNumbers: {0,1,2,3,4,5,4,5}, // COP and semi-sequential
  138. schedulingConfigurationBits: {0,0,0,0,1,1,1,1}, // First four ignition, last four fuel
  139. decoderEngineOffset: ANGLE(90.00), // FE-DOHC, 4and1 CAS approximately centre
  140. numberOfConfiguredOutputEvents: 8, // Migrated to new way
  141. numberOfInjectionsPerEngineCycle: 2 // Used to be batch, dead time being wrong could have affected AFRs
  142. #elif CONFIG == HOTEL_ID // Fred's Hotel Hyundai (Stellar) http://forum.diyefi.org/viewtopic.php?f=55&t=1086
  143. anglesOfTDC: {ANGLE(0)}, // Simple dual edge dizzy
  144. outputEventPinNumbers: {0}, // First pin
  145. schedulingConfigurationBits: {0}, // Ignition only
  146. decoderEngineOffset: ANGLE(0.00), // Locked dizzy with timing of TDC on edge, used for static timing during cranking.
  147. numberOfConfiguredOutputEvents: 1, // One per decoder cycle = 4
  148. numberOfInjectionsPerEngineCycle: 1 // Ditto
  149. #elif CONFIG == PRESTO_ID // Preston's silver-top-on-a-stand http://forum.diyefi.org/viewtopic.php?f=55&t=1101
  150. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)},
  151. outputEventPinNumbers: {0,1,0,1,4,5,4,5}, // Wasted spark, semi-sequential TODO migrate this to sequential
  152. schedulingConfigurationBits: {0,0,0,0,1,1,1,1}, // First four ignition, last four injection
  153. decoderEngineOffset: ANGLE(128.52), // Stock silver-top using G? for RPM2 and NE for RPM1, CAS approximately centre, @todo TODO find values for extremes of dizzy placement
  154. numberOfConfiguredOutputEvents: 8, // See two lines above
  155. numberOfInjectionsPerEngineCycle: 2 // Semi-sequential, for now.
  156. #elif CONFIG == SEANKLT1_ID // http://forum.diyefi.org/viewtopic.php?f=55&t=1146
  157. anglesOfTDC: {ANGLE(0), ANGLE(90), ANGLE(180), ANGLE(270), ANGLE(360), ANGLE(450), ANGLE(540), ANGLE(630), ANGLE(0), ANGLE(90), ANGLE(180), ANGLE(270), ANGLE(360), ANGLE(450), ANGLE(540), ANGLE(630)},
  158. outputEventPinNumbers: {0,0,0,0,0,0,0,0,2,3,4,5,2,3,4,5}, // LTCC e-dizzy, semi-sequential injection 1/6, 8/5, 4/7, 3/2, and repeat
  159. schedulingConfigurationBits: {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}, // See below two lines
  160. xgateOutputChannel: {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0,1,2,3,4,5,6,7}, // Disable xgate driven outputs
  161. decoderEngineOffset: ANGLE(0.00), // Decoder has a true zero zero mechanically hard coded
  162. numberOfConfiguredOutputEvents: 16, // First half ignition, second half injection
  163. numberOfInjectionsPerEngineCycle: 1 // Full sync fully-sequential
  164. #elif CONFIG == SNOTROCKET_ID // http://forum.diyefi.org/viewtopic.php?f=3&t=1263 Sim's 2.1 Volvo, carbed with CNP using LS1 coils.
  165. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)}, // 1,2,3,4: Firing order: 1-3-4-2 set up in loom
  166. outputEventPinNumbers: {0,1,2,3}, // COP/CNP ignition only
  167. schedulingConfigurationBits: {0,0,0,0}, // All ignition
  168. decoderEngineOffset: ANGLE(566.00), // Volvo B21A with DSM/Miata CAS + 24and1 disk
  169. numberOfConfiguredOutputEvents: 4, // COP setup
  170. numberOfInjectionsPerEngineCycle: 1 // Ditto
  171. #elif CONFIG == SPUDMN_ID // http://forum.diyefi.org/viewtopic.php?f=55&t=1507 Spudmn's mk1 racing mini in NZ :-)
  172. anglesOfTDC: {ANGLE(0), ANGLE(180)}, // 1 and 4, 2 and 3
  173. outputEventPinNumbers: {0,1}, // Ignition only
  174. schedulingConfigurationBits: {0,0}, // Ditto
  175. decoderEngineOffset: ANGLE(5.00), // To verify from source build!
  176. numberOfConfiguredOutputEvents: 2, // Wasted spark
  177. numberOfInjectionsPerEngineCycle: 1 // Ditto
  178. #elif CONFIG == SLATER_ID // http://forum.diyefi.org/viewtopic.php?f=62&t=1336 Citroen with t25 turbo on a flat 4 air cooled engine
  179. anglesOfTDC: {ANGLE(0), ANGLE(180),(0), ANGLE(180)}, // 1 and 4, 2 and 3, repeat
  180. outputEventPinNumbers: {0,1,4,5}, // 2 and 3 are unused in this config, fuel are on 4/5 because he plans to use the same hardware on the V8 Supra with wasted spark and thus 2/3 are required for ignition on that
  181. schedulingConfigurationBits: {0,0,1,1}, // 2 ignition 2 injection
  182. decoderEngineOffset: ANGLE(120.00), // May need adjusting
  183. numberOfConfiguredOutputEvents: 4, // Wasted spark, semi-sequential
  184. numberOfInjectionsPerEngineCycle: 2 // Semi-sequential, crank sync only
  185. #elif CONFIG == PETERJSERIES_ID // Firing order 1-4-2-5-3-6 http://forum.diyefi.org/viewtopic.php?f=62&t=1533
  186. anglesOfTDC: {ANGLE(0), ANGLE(120), ANGLE(240), ANGLE(360), ANGLE(480), ANGLE(600)},
  187. outputEventPinNumbers: {0,3,1,4,2,5}, // An example of wiring your engine with cylinder one on output one, harder to grok
  188. schedulingConfigurationBits: {1,1,1,1,1,1}, // Ones represent scheduling for injection, zeros represent scheduling for ignition
  189. decoderEngineOffset: ANGLE(0.00), // Trim fuel injection END point with this value.
  190. numberOfConfiguredOutputEvents: 6, // THESE ARE NOT IGN, THEY ARE FUEL
  191. numberOfInjectionsPerEngineCycle: 1 // Sequential, baby, yeah!
  192. #elif CONFIG == DEUCECOUPE_ID // DeuceEFI's GM 3100 V6, firing order 1-6-5-4-3-2, wasted spark DIS ignition http://forum.diyefi.org/viewtopic.php?f=3&t=1278
  193. anglesOfTDC: {ANGLE(0), ANGLE(120), ANGLE(240), ANGLE(360), ANGLE(480), ANGLE(600), ANGLE(0), ANGLE(120), ANGLE(240), ANGLE(360), ANGLE(480), ANGLE(600)},
  194. outputEventPinNumbers: {0,0,0,0,0,0,2,3,4,2,3,4}, // DIS E-dizzy and semi-sequential, for now.
  195. schedulingConfigurationBits: {0,0,0,0,0,0,1,1,1,1,1,1}, // Six E-dizzy style DIS ignition outputs and six injection events, two per cycle, semi sequential
  196. decoderEngineOffset: ANGLE(0.00), // Nothing for now, so as to be able to figure out what is going on.
  197. numberOfConfiguredOutputEvents: 12, // See three lines above
  198. numberOfInjectionsPerEngineCycle: 2 // Semi-sequential, for now.
  199. #elif CONFIG == DEUCES10_ID // Firing order 1-3-4-2 setup in wiring harness http://forum.diyefi.org/viewtopic.php?f=55&t=1962
  200. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)},
  201. outputEventPinNumbers: {0,0,0,0,2,3,4,5}, // DIS E-dizzy and Sequential (2 == Port-T4)
  202. schedulingConfigurationBits: {0,0,0,0,1,1,1,1}, // First 4 ign, Last 4 fuel
  203. decoderEngineOffset: ANGLE(0.00), // GM DIS 2x Reference signal is at 0 degrees.
  204. numberOfConfiguredOutputEvents: 8, // 4 coil events and 4 injector events.
  205. numberOfInjectionsPerEngineCycle: 1 // Sequential Fueling!
  206. #elif CONFIG == PETERTRUCK_ID // Firing order 1-5-3-6-2-4
  207. anglesOfTDC: {ANGLE(0), ANGLE(120), ANGLE(240), ANGLE(360), ANGLE(480), ANGLE(600)},
  208. outputEventPinNumbers: {0,4,2,5,1,3}, // An example of wiring your engine with cylinder one on output one, harder to grok
  209. schedulingConfigurationBits: {0,0,0,0,0,0}, // Ones represent scheduling for injection, zeros represent scheduling for ignition
  210. decoderEngineOffset: ANGLE(0.00), // Trim fuel injection END point with this value.
  211. numberOfConfiguredOutputEvents: 6, // THESE ARE IGN, THEY ARE NOT FUEL
  212. numberOfInjectionsPerEngineCycle: 1 // Sequential, baby, yeah!
  213. #elif CONFIG == SCAVENGER_ID // hentai
  214. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)},
  215. outputEventPinNumbers: {0,1,0,1,2,3,2,3}, // Wasted spark, semi-sequential TODO migrate this to sequential
  216. schedulingConfigurationBits: {0,0,0,0,1,1,1,1}, // First four ignition, last four injection
  217. decoderEngineOffset: ANGLE(128), // Hentai initial setup value, will change a bit
  218. numberOfConfiguredOutputEvents: 8, // See two lines above
  219. numberOfInjectionsPerEngineCycle: 2 // Semi-sequential, for now.
  220. #elif CONFIG == SEANKR1_ID // Firing order 1-2-3-4 COP/CNP
  221. anglesOfTDC: {ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540), ANGLE(0), ANGLE(180), ANGLE(360), ANGLE(540)},
  222. outputEventPinNumbers: {0,1,2,3,4,0xFF,0xFF,0xFF}, // Only use timer channels for ignition
  223. schedulingConfigurationBits: {0,0,0,0,1,1,1,1}, // First 4 ign, 4 fuel
  224. decoderEngineOffset: ANGLE(0.00), //
  225. numberOfConfiguredOutputEvents: 8, // 4 coils 8 injectors, the last 4 injectors are driven by the staged function for now
  226. xgateOutputChannel: {0xFF,0xFF,0xFF,0xFF,0,1,2,3}, // Use XGATE on fuel only
  227. correspondingCylinder: {1, 2, 3, 4, 1, 2, 3, 4}, // Used for individual trim calculations
  228. numberOfInjectionsPerEngineCycle: 1 // COP/Seq accept nothing less :)
  229. #else // Nothing scheduled by default, no sensible default for all possible vehicle setups.
  230. anglesOfTDC: {}, // Depends on cylinder count and other variables
  231. outputEventPinNumbers: {0,1,2,3,4,5}, // Default to a variety of pins for testing purposes. Note: Won't do anything without
  232. schedulingConfigurationBits: {}, // All ignition by guarantee of C, configured explicitly for real setups.
  233. decoderEngineOffset: ANGLE(0), // Start with zero, work your way to the correct value
  234. numberOfConfiguredOutputEvents: 0, // This disables scheduling completely, should match the first, second and third arrays
  235. xgateOutputChannel: {}, // Disable xgate driven outputs
  236. correspondingCylinder: {}, // Set to 0
  237. numberOfInjectionsPerEngineCycle: 1 // 720 degree decoders with one injection per cycle
  238. #endif
  239. },
  240. cutAndLimiterSettings:{
  241. InjectionRPM:{
  242. #if CONFIG == SLATER_ID
  243. disableThreshold: RPM(7000),
  244. reenableThreshold: RPM(6900)
  245. #elif CONFIG == DEUCES10_ID
  246. disableThreshold: RPM(5600),
  247. reenableThreshold: RPM(5400)
  248. #elif CONFIG == SCAVENGER_ID
  249. disableThreshold: RPM(7200),
  250. reenableThreshold: RPM(7150)
  251. #elif CONFIG == SEANKR1_ID
  252. disableThreshold: RPM(12050),
  253. reenableThreshold: RPM(11800)
  254. #else
  255. disableThreshold: RPM(5000),
  256. reenableThreshold: RPM(4900) // Come back on before ignition does
  257. #endif
  258. },
  259. IgnitionRPM:{
  260. #if CONFIG == HOTEL_ID
  261. disableThreshold: RPM(5800),
  262. reenableThreshold: RPM(5700) // Nice and close to save the exhaust
  263. #elif CONFIG == SNOTROCKET_ID
  264. disableThreshold: RPM(6300),
  265. reenableThreshold: RPM(6200)
  266. #elif CONFIG == SLATER_ID
  267. disableThreshold: RPM(7000),
  268. reenableThreshold: RPM(6850)
  269. #elif CONFIG == PETERJSERIES_ID
  270. disableThreshold: RPM(6000),
  271. reenableThreshold: RPM(5950)
  272. #elif CONFIG == PETERTRUCK_ID
  273. disableThreshold: RPM(5000),
  274. reenableThreshold: RPM(4950)
  275. #elif CONFIG == DEUCES10_ID
  276. disableThreshold: RPM(5600),
  277. reenableThreshold: RPM(5300)
  278. #elif CONFIG == SCAVENGER_ID
  279. disableThreshold: RPM(7200),
  280. reenableThreshold: RPM(7100)
  281. #elif CONFIG == SEANKR1_ID
  282. disableThreshold: RPM(12100),
  283. reenableThreshold: RPM(11900)
  284. #else
  285. disableThreshold: RPM(5000),
  286. reenableThreshold: RPM(4800) // Come back on after injection does
  287. #endif
  288. },
  289. OverBoost:{
  290. disableThreshold: KPA(250), // Cut close to std sensor max
  291. reenableThreshold: KPA(100) // Re enable when boost gone all together (force driver to lift)
  292. },
  293. cutsEnabled:{
  294. InjectionRPM: 1,
  295. IgnitionRPM: 1,
  296. InjOverBoost: 1,
  297. IgnOverBoost: 1,
  298. Spare0: 1,
  299. Spare1: 1,
  300. Spare2: 1,
  301. Spare3: 1,
  302. Spare4: 1,
  303. Spare5: 1,
  304. Spare6: 1,
  305. Spare7: 1,
  306. Spare8: 1,
  307. Spare9: 1,
  308. SpareA: 1,
  309. SpareB: 1
  310. }
  311. },
  312. simpleGPIOSettings:{
  313. outputConfigs:{
  314. #if CONFIG == DEUCECOUPE_ID
  315. [0] = {
  316. variable: &CoreVars0.RPM,
  317. upperValue: RPM(400),
  318. lowerValue: RPM(300),
  319. port: (unsigned char*)&PORTT,
  320. mask: BIT3,
  321. flags: 0
  322. },
  323. #elif CONFIG == DEUCES10_ID
  324. [0] = {
  325. variable: &CoreVars0.RPM,
  326. upperValue: RPM(400),
  327. lowerValue: RPM(300),
  328. port: (unsigned char*)&PORTT,
  329. mask: BIT3,
  330. flags: 0
  331. },
  332. #else
  333. [0] = {
  334. variable: &CoreVars0.RPM,
  335. upperValue: RPM(5000),
  336. lowerValue: RPM(4000),
  337. port: (unsigned char*)&PORTK,
  338. mask: BIT3,
  339. flags: 0
  340. },
  341. #endif
  342. [1] = {
  343. variable: &CoreVars0.CHT,
  344. #if CONFIG == SEANKR1_ID // At 250HP per liter she needs to stay cool
  345. upperValue: DEGREES_C(80),
  346. lowerValue: DEGREES_C(70),
  347. #else
  348. upperValue: DEGREES_C(100),
  349. lowerValue: DEGREES_C(90),
  350. #endif
  351. port: (unsigned char*)&PORTK,
  352. mask: BIT4,
  353. flags: 0
  354. }
  355. },
  356. numberConfigured: 2,
  357. spare: 0
  358. },
  359. userTextField: "Place your personal notes about whatever you like in here!"
  360. " Don't hesitate to tell us a story about something interesting."
  361. " Do keep in mind though that when you upload your settings file to "
  362. "the forum this message WILL be visible to all and sundry, so don't "
  363. "be putting too many personal details, bank account numbers, "
  364. "passwords, PIN numbers, license plates, national insurance numbers, "
  365. " love stories and other private information in this field. In fact it"
  366. " is probably best if you kee"
  367. };