00001 /* blockDetailsLookup.c 00002 00003 Copyright 2008 Fred Cooke 00004 00005 This file is part of the FreeEMS project. 00006 00007 FreeEMS software is free software: you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation, either version 3 of the License, or 00010 (at your option) any later version. 00011 00012 FreeEMS software is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with any FreeEMS software. If not, see <http://www.gnu.org/licenses/>. 00019 00020 We ask that if you make any changes to this file you send them upstream to us at admin@diyefi.org 00021 00022 Thank you for choosing FreeEMS to run your engine! */ 00023 00024 #define BLOCK_DETAILS_LOOKUP_C 00025 #include "inc/freeEMS.h" 00026 #include "inc/interrupts.h" 00027 #include "inc/blockDetailsLookup.h" 00028 00029 00030 /* Flash only blocks leave the ram address and page values */ 00031 /* set to zero. ID's that don't exist leave all set to zero. */ 00032 /* Error handling is to be done externally based on that. */ 00033 void lookupBlockDetails(unsigned short locationID, blockDetails* details){ 00034 /* Initialise the four values needed for operations on memory at 0 for error checking */ 00035 details->RAMPage = 0; 00036 details->FlashPage = 0; 00037 details->RAMAddress = 0; 00038 details->FlashAddress = 0; 00039 00040 /* Initialise the block size to 1024 to save code space and increase readability */ 00041 details->size = MAINTABLE_SIZE; 00042 00043 /* Look up the locations and set non default sizes */ 00044 switch (locationID) { 00045 /* flash only fixed conf full blocks */ 00046 case FixedConfig1LocationID: 00047 details->FlashPage = PPAGE; 00048 details->FlashAddress = (void*)&fixedConfigs1; 00049 break; 00050 case FixedConfig2LocationID: 00051 details->FlashPage = PPAGE; 00052 details->FlashAddress = (void*)&fixedConfigs2; 00053 break; 00054 00055 /* lookup tables */ 00056 case IATTransferTableLocationID: 00057 details->size = TransferTableSize; 00058 details->FlashPage = LOOKUP_PPAGE; 00059 details->FlashAddress = IATTransferTableLocation; 00060 break; 00061 case CHTTransferTableLocationID: 00062 details->size = TransferTableSize; 00063 details->FlashPage = LOOKUP_PPAGE; 00064 details->FlashAddress = CHTTransferTableLocation; 00065 break; 00066 case MAFTransferTableLocationID: 00067 details->size = TransferTableSize; 00068 details->FlashPage = LOOKUP_PPAGE; 00069 details->FlashAddress = MAFTransferTableLocation; 00070 break; 00071 case TestTransferTableLocationID: 00072 details->size = TransferTableSize; 00073 details->FlashPage = LOOKUP_PPAGE; 00074 details->FlashAddress = TestTransferTableLocation; 00075 break; 00076 00077 /* fuel tables */ 00078 case VETableMainLocationID: 00079 details->RAMPage = RPAGE_FUEL_ONE; 00080 details->FlashPage = FUELTABLES_PPAGE; 00081 details->RAMAddress = (void*)&TablesA; 00082 details->FlashAddress = VETableMainFlashLocation; 00083 break; 00084 case VETableMain2LocationID: 00085 details->RAMPage = RPAGE_FUEL_TWO; 00086 details->FlashPage = FUELTABLES_PPAGE; 00087 details->RAMAddress = (void*)&TablesA; 00088 details->FlashAddress = VETableMainFlash2Location; 00089 break; 00090 case VETableSecondaryLocationID: 00091 details->RAMPage = RPAGE_FUEL_ONE; 00092 details->FlashPage = FUELTABLES_PPAGE; 00093 details->RAMAddress = (void*)&TablesB; 00094 details->FlashAddress = VETableSecondaryFlashLocation; 00095 break; 00096 case VETableSecondary2LocationID: 00097 details->RAMPage = RPAGE_FUEL_TWO; 00098 details->FlashPage = FUELTABLES_PPAGE; 00099 details->RAMAddress = (void*)&TablesB; 00100 details->FlashAddress = VETableSecondaryFlash2Location; 00101 break; 00102 case VETableTertiaryLocationID: 00103 details->RAMPage = RPAGE_FUEL_ONE; 00104 details->FlashPage = FUELTABLES_PPAGE; 00105 details->RAMAddress = (void*)&TablesC; 00106 details->FlashAddress = VETableTertiaryFlashLocation; 00107 break; 00108 case VETableTertiary2LocationID: 00109 details->RAMPage = RPAGE_FUEL_TWO; 00110 details->FlashPage = FUELTABLES_PPAGE; 00111 details->RAMAddress = (void*)&TablesC; 00112 details->FlashAddress = VETableTertiaryFlash2Location; 00113 break; 00114 case LambdaTableLocationID: 00115 details->RAMPage = RPAGE_FUEL_ONE; 00116 details->FlashPage = FUELTABLES_PPAGE; 00117 details->RAMAddress = (void*)&TablesD; 00118 details->FlashAddress = LambdaTableFlashLocation; 00119 break; 00120 case LambdaTable2LocationID: 00121 details->RAMPage = RPAGE_FUEL_TWO; 00122 details->FlashPage = FUELTABLES_PPAGE; 00123 details->RAMAddress = (void*)&TablesD; 00124 details->FlashAddress = LambdaTableFlash2Location; 00125 break; 00126 00127 /* timing tables */ 00128 case IgnitionAdvanceTableMainLocationID: 00129 details->RAMPage = RPAGE_TIME_ONE; 00130 details->FlashPage = TIMETABLES_PPAGE; 00131 details->RAMAddress = (void*)&TablesA; 00132 details->FlashAddress = IgnitionAdvanceTableMainFlashLocation; 00133 break; 00134 case IgnitionAdvanceTableMain2LocationID: 00135 details->RAMPage = RPAGE_TIME_TWO; 00136 details->FlashPage = TIMETABLES_PPAGE; 00137 details->RAMAddress = (void*)&TablesA; 00138 details->FlashAddress = IgnitionAdvanceTableMainFlash2Location; 00139 break; 00140 case IgnitionAdvanceTableSecondaryLocationID: 00141 details->RAMPage = RPAGE_TIME_ONE; 00142 details->FlashPage = TIMETABLES_PPAGE; 00143 details->RAMAddress = (void*)&TablesB; 00144 details->FlashAddress = IgnitionAdvanceTableSecondaryFlashLocation; 00145 break; 00146 case IgnitionAdvanceTableSecondary2LocationID: 00147 details->RAMPage = RPAGE_TIME_TWO; 00148 details->FlashPage = TIMETABLES_PPAGE; 00149 details->RAMAddress = (void*)&TablesB; 00150 details->FlashAddress = IgnitionAdvanceTableSecondaryFlash2Location; 00151 break; 00152 case InjectionAdvanceTableMainLocationID: 00153 details->RAMPage = RPAGE_TIME_ONE; 00154 details->FlashPage = TIMETABLES_PPAGE; 00155 details->RAMAddress = (void*)&TablesC; 00156 details->FlashAddress = InjectionAdvanceTableMainFlashLocation; 00157 break; 00158 case InjectionAdvanceTableMain2LocationID: 00159 details->RAMPage = RPAGE_TIME_TWO; 00160 details->FlashPage = TIMETABLES_PPAGE; 00161 details->RAMAddress = (void*)&TablesC; 00162 details->FlashAddress = InjectionAdvanceTableMainFlash2Location; 00163 break; 00164 case InjectionAdvanceTableSecondaryLocationID: 00165 details->RAMPage = RPAGE_TIME_ONE; 00166 details->FlashPage = TIMETABLES_PPAGE; 00167 details->RAMAddress = (void*)&TablesD; 00168 details->FlashAddress = InjectionAdvanceTableSecondaryFlashLocation; 00169 break; 00170 case InjectionAdvanceTableSecondary2LocationID: 00171 details->RAMPage = RPAGE_TIME_TWO; 00172 details->FlashPage = TIMETABLES_PPAGE; 00173 details->RAMAddress = (void*)&TablesD; 00174 details->FlashAddress = InjectionAdvanceTableSecondaryFlash2Location; 00175 break; 00176 00177 /* small table full blocks */ 00178 case SmallTablesALocationID: 00179 details->RAMPage = RPAGE_TUNE_ONE; 00180 details->FlashPage = TUNETABLES_PPAGE; 00181 details->RAMAddress = (void*)&TablesA; 00182 details->FlashAddress = SmallTablesAFlashLocation; 00183 break; 00184 case SmallTablesA2LocationID: 00185 details->RAMPage = RPAGE_TUNE_TWO; 00186 details->FlashPage = TUNETABLES_PPAGE; 00187 details->RAMAddress = (void*)&TablesA; 00188 details->FlashAddress = SmallTablesAFlash2Location; 00189 break; 00190 case SmallTablesBLocationID: 00191 details->RAMPage = RPAGE_TUNE_ONE; 00192 details->FlashPage = TUNETABLES_PPAGE; 00193 details->RAMAddress = (void*)&TablesB; 00194 details->FlashAddress = SmallTablesBFlashLocation; 00195 break; 00196 case SmallTablesB2LocationID: 00197 details->RAMPage = RPAGE_TUNE_TWO; 00198 details->FlashPage = TUNETABLES_PPAGE; 00199 details->RAMAddress = (void*)&TablesB; 00200 details->FlashAddress = SmallTablesBFlash2Location; 00201 break; 00202 case SmallTablesCLocationID: 00203 details->RAMPage = RPAGE_TUNE_ONE; 00204 details->FlashPage = TUNETABLES_PPAGE; 00205 details->RAMAddress = (void*)&TablesC; 00206 details->FlashAddress = SmallTablesCFlashLocation; 00207 break; 00208 case SmallTablesC2LocationID: 00209 details->RAMPage = RPAGE_TUNE_TWO; 00210 details->FlashPage = TUNETABLES_PPAGE; 00211 details->RAMAddress = (void*)&TablesC; 00212 details->FlashAddress = SmallTablesCFlash2Location; 00213 break; 00214 case SmallTablesDLocationID: 00215 details->RAMPage = RPAGE_TUNE_ONE; 00216 details->FlashPage = TUNETABLES_PPAGE; 00217 details->RAMAddress = (void*)&TablesD; 00218 details->FlashAddress = SmallTablesDFlashLocation; 00219 break; 00220 case SmallTablesD2LocationID: 00221 details->RAMPage = RPAGE_TUNE_TWO; 00222 details->FlashPage = TUNETABLES_PPAGE; 00223 details->RAMAddress = (void*)&TablesD; 00224 details->FlashAddress = SmallTablesDFlash2Location; 00225 break; 00226 00227 /* TablesA small tables */ 00228 case dwellDesiredVersusVoltageTableLocationID: 00229 details->size = TWODTABLEUS_SIZE; 00230 details->RAMPage = RPAGE_TUNE_ONE; 00231 details->FlashPage = TUNETABLES_PPAGE; 00232 details->RAMAddress = (void*)&TablesA.SmallTablesA.dwellDesiredVersusVoltageTable; 00233 //details->FlashAddress = FlashLocation; 00234 break; 00235 case dwellDesiredVersusVoltageTable2LocationID: 00236 details->size = TWODTABLEUS_SIZE; 00237 details->RAMPage = RPAGE_TUNE_TWO; 00238 details->FlashPage = TUNETABLES_PPAGE; 00239 details->RAMAddress = (void*)&TablesA.SmallTablesA.dwellDesiredVersusVoltageTable; 00240 //details->FlashAddress = FlashLocation; 00241 break; 00242 case injectorDeadTimeTableLocationID: 00243 details->size = TWODTABLEUS_SIZE; 00244 details->RAMPage = RPAGE_TUNE_ONE; 00245 details->FlashPage = TUNETABLES_PPAGE; 00246 details->RAMAddress = (void*)&TablesA.SmallTablesA.injectorDeadTimeTable; 00247 //details->FlashAddress = FlashLocation; 00248 break; 00249 case injectorDeadTimeTable2LocationID: 00250 details->size = TWODTABLEUS_SIZE; 00251 details->RAMPage = RPAGE_TUNE_TWO; 00252 details->FlashPage = TUNETABLES_PPAGE; 00253 details->RAMAddress = (void*)&TablesA.SmallTablesA.injectorDeadTimeTable; 00254 //details->FlashAddress = FlashLocation; 00255 break; 00256 case postStartEnrichmentTableLocationID: 00257 details->size = TWODTABLEUS_SIZE; 00258 details->RAMPage = RPAGE_TUNE_ONE; 00259 details->FlashPage = TUNETABLES_PPAGE; 00260 details->RAMAddress = (void*)&TablesA.SmallTablesA.postStartEnrichmentTable; 00261 //details->FlashAddress = FlashLocation; 00262 break; 00263 case postStartEnrichmentTable2LocationID: 00264 details->size = TWODTABLEUS_SIZE; 00265 details->RAMPage = RPAGE_TUNE_TWO; 00266 details->FlashPage = TUNETABLES_PPAGE; 00267 details->RAMAddress = (void*)&TablesA.SmallTablesA.postStartEnrichmentTable; 00268 //details->FlashAddress = FlashLocation; 00269 break; 00270 case engineTempEnrichmentTableFixedLocationID: 00271 details->size = TWODTABLEUS_SIZE; 00272 details->RAMPage = RPAGE_TUNE_ONE; 00273 details->FlashPage = TUNETABLES_PPAGE; 00274 details->RAMAddress = (void*)&TablesA.SmallTablesA.engineTempEnrichmentTableFixed; 00275 //details->FlashAddress = FlashLocation; 00276 break; 00277 case engineTempEnrichmentTableFixed2LocationID: 00278 details->size = TWODTABLEUS_SIZE; 00279 details->RAMPage = RPAGE_TUNE_TWO; 00280 details->FlashPage = TUNETABLES_PPAGE; 00281 details->RAMAddress = (void*)&TablesA.SmallTablesA.engineTempEnrichmentTableFixed; 00282 //details->FlashAddress = FlashLocation; 00283 break; 00284 case primingVolumeTableLocationID: 00285 details->size = TWODTABLEUS_SIZE; 00286 details->RAMPage = RPAGE_TUNE_ONE; 00287 details->FlashPage = TUNETABLES_PPAGE; 00288 details->RAMAddress = (void*)&TablesA.SmallTablesA.primingVolumeTable; 00289 //details->FlashAddress = FlashLocation; 00290 break; 00291 case primingVolumeTable2LocationID: 00292 details->size = TWODTABLEUS_SIZE; 00293 details->RAMPage = RPAGE_TUNE_TWO; 00294 details->FlashPage = TUNETABLES_PPAGE; 00295 details->RAMAddress = (void*)&TablesA.SmallTablesA.primingVolumeTable; 00296 //details->FlashAddress = FlashLocation; 00297 break; 00298 case engineTempEnrichmentTablePercentLocationID: 00299 details->size = TWODTABLEUS_SIZE; 00300 details->RAMPage = RPAGE_TUNE_ONE; 00301 details->FlashPage = TUNETABLES_PPAGE; 00302 details->RAMAddress = (void*)&TablesA.SmallTablesA.engineTempEnrichmentTablePercent; 00303 //details->FlashAddress = FlashLocation; 00304 break; 00305 case engineTempEnrichmentTablePercent2LocationID: 00306 details->size = TWODTABLEUS_SIZE; 00307 details->RAMPage = RPAGE_TUNE_TWO; 00308 details->FlashPage = TUNETABLES_PPAGE; 00309 details->RAMAddress = (void*)&TablesA.SmallTablesA.engineTempEnrichmentTablePercent; 00310 //details->FlashAddress = FlashLocation; 00311 break; 00312 case dwellMaxVersusRPMTableLocationID: 00313 details->size = TWODTABLEUS_SIZE; 00314 details->RAMPage = RPAGE_TUNE_ONE; 00315 details->FlashPage = TUNETABLES_PPAGE; 00316 details->RAMAddress = (void*)&TablesA.SmallTablesA.dwellMaxVersusRPMTable; 00317 //details->FlashAddress = FlashLocation; 00318 break; 00319 case dwellMaxVersusRPMTable2LocationID: 00320 details->size = TWODTABLEUS_SIZE; 00321 details->RAMPage = RPAGE_TUNE_TWO; 00322 details->FlashPage = TUNETABLES_PPAGE; 00323 details->RAMAddress = (void*)&TablesA.SmallTablesA.dwellMaxVersusRPMTable; 00324 //details->FlashAddress = FlashLocation; 00325 break; 00326 00327 /* TablesB small tables */ 00328 case perCylinderFuelTrimsLocationID: 00329 details->size = 12; 00330 details->RAMPage = RPAGE_TUNE_ONE; 00331 details->FlashPage = TUNETABLES_PPAGE; 00332 details->RAMAddress = (void*)&TablesB.SmallTablesB.perCylinderFuelTrims; 00333 //details->FlashAddress = FlashLocation; 00334 break; 00335 case perCylinderFuelTrims2LocationID: 00336 details->size = 12; 00337 details->RAMPage = RPAGE_TUNE_TWO; 00338 details->FlashPage = TUNETABLES_PPAGE; 00339 details->RAMAddress = (void*)&TablesB.SmallTablesB.perCylinderFuelTrims; 00340 //details->FlashAddress = FlashLocation; 00341 break; 00342 00343 /* TablesC small tables */ 00344 // TODO 00345 00346 /* TablesD small tables */ 00347 // TODO 00348 00349 /* filler block entries */ 00350 case fillerALocationID: 00351 details->size = 576; 00352 details->RAMPage = RPAGE_TUNE_ONE; 00353 details->FlashPage = TUNETABLES_PPAGE; 00354 details->RAMAddress = (void*)&TablesA.SmallTablesA.filler; 00355 //details->FlashAddress = FlashLocation; 00356 break; 00357 case fillerA2LocationID: 00358 details->size = 576; 00359 details->RAMPage = RPAGE_TUNE_TWO; 00360 details->FlashPage = TUNETABLES_PPAGE; 00361 details->RAMAddress = (void*)&TablesA.SmallTablesA.filler; 00362 //details->FlashAddress = FlashLocation; 00363 break; 00364 case fillerBLocationID: 00365 details->size = 1012; 00366 details->RAMPage = RPAGE_TUNE_ONE; 00367 details->FlashPage = TUNETABLES_PPAGE; 00368 details->RAMAddress = (void*)&TablesB.SmallTablesB.filler; 00369 //details->FlashAddress = FlashLocation; 00370 break; 00371 case fillerB2LocationID: 00372 details->size = 1012; 00373 details->RAMPage = RPAGE_TUNE_TWO; 00374 details->FlashPage = TUNETABLES_PPAGE; 00375 details->RAMAddress = (void*)&TablesB.SmallTablesB.filler; 00376 //details->FlashAddress = FlashLocation; 00377 break; 00378 case fillerCLocationID: 00379 details->size = 1024; 00380 details->RAMPage = RPAGE_TUNE_ONE; 00381 details->FlashPage = TUNETABLES_PPAGE; 00382 details->RAMAddress = (void*)&TablesC.SmallTablesC.filler; 00383 //details->FlashAddress = FlashLocation; 00384 break; 00385 case fillerC2LocationID: 00386 details->size = 1024; 00387 details->RAMPage = RPAGE_TUNE_TWO; 00388 details->FlashPage = TUNETABLES_PPAGE; 00389 details->RAMAddress = (void*)&TablesC.SmallTablesC.filler; 00390 //details->FlashAddress = FlashLocation; 00391 break; 00392 case fillerDLocationID: 00393 details->size = 1024; 00394 details->RAMPage = RPAGE_TUNE_ONE; 00395 details->FlashPage = TUNETABLES_PPAGE; 00396 details->RAMAddress = (void*)&TablesD.SmallTablesD.filler; 00397 //details->FlashAddress = FlashLocation; 00398 break; 00399 00400 case fillerD2LocationID: 00401 details->size = 1024; 00402 details->RAMPage = RPAGE_TUNE_TWO; 00403 details->FlashPage = TUNETABLES_PPAGE; 00404 details->RAMAddress = (void*)&TablesD.SmallTablesD.filler; 00405 //details->FlashAddress = FlashLocation; 00406 break; 00407 } 00408 }