123

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
198:78dd6d14d108
Parent:
197:7a05523bf588
--- a/DeviceFlash.c	Wed Oct 19 10:55:05 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,377 +0,0 @@
-#include "Device.h"
-#include <stdio.h>
-
-extern Device device;
-extern HashParam hashParamTable[HASH_PARAM_COUNT];
-
-//Flash memory sectors
-#define FLASH_SECTOR0_SIZE   0x1000
-#define FLASH_SECTOR0_START  0x00000000
-#define FLASH_SECTOR0_END    0x00000FFF
-
-#define FLASH_SECTOR1_SIZE   0x1000
-#define FLASH_SECTOR1_START  0X00001000
-#define FLASH_SECTOR1_END    0X00001FFF
-
-#define FLASH_SECTOR2_SIZE   0x1000
-#define FLASH_SECTOR2_START  0X00002000
-#define FLASH_SECTOR2_END    0X00002FFF
-
-#define FLASH_SECTOR3_SIZE   0x1000
-#define FLASH_SECTOR3_START  0X00003000
-#define FLASH_SECTOR3_END    0X00003FFF
-
-#define FLASH_SECTOR4_SIZE   0x1000
-#define FLASH_SECTOR4_START  0X00004000
-#define FLASH_SECTOR4_END    0X00004FFF
-
-#define FLASH_SECTOR5_SIZE   0x1000
-#define FLASH_SECTOR5_START  0X00005000
-#define FLASH_SECTOR5_END    0X00005FFF
-
-#define FLASH_SECTOR6_SIZE   0x1000
-#define FLASH_SECTOR6_START  0X00006000
-#define FLASH_SECTOR6_END    0X00006FFF
-
-#define FLASH_SECTOR7_SIZE   0x1000
-#define FLASH_SECTOR7_START  0X00007000
-#define FLASH_SECTOR7_END    0X00007FFF
-
-#define FLASH_SECTOR8_SIZE   0x1000
-#define FLASH_SECTOR8_START  0x00008000
-#define FLASH_SECTOR8_END    0X00008FFF
-
-#define FLASH_SECTOR9_SIZE   0x1000
-#define FLASH_SECTOR9_START  0x00009000
-#define FLASH_SECTOR9_END    0X00009FFF
-
-#define FLASH_SECTOR10_SIZE  0x1000
-#define FLASH_SECTOR10_START 0x0000A000
-#define FLASH_SECTOR10_END   0X0000AFFF
-
-#define FLASH_SECTOR11_SIZE  0x1000
-#define FLASH_SECTOR11_START 0x0000B000
-#define FLASH_SECTOR11_END   0X0000BFFF
-
-#define FLASH_SECTOR12_SIZE  0x1000
-#define FLASH_SECTOR12_START 0x0000C000
-#define FLASH_SECTOR12_END   0X0000CFFF
-
-#define FLASH_SECTOR13_SIZE  0x1000
-#define FLASH_SECTOR13_START 0x0000D000
-#define FLASH_SECTOR13_END   0X0000DFFF
-
-#define FLASH_SECTOR14_SIZE  0x1000
-#define FLASH_SECTOR14_START 0x0000E000
-#define FLASH_SECTOR14_END   0X0000EFFF
-
-#define FLASH_SECTOR15_SIZE  0x1000
-#define FLASH_SECTOR15_START 0x0000F000
-#define FLASH_SECTOR15_END   0X0000FFFF
-
-#define FLASH_SECTOR16_SIZE  0x8000
-#define FLASH_SECTOR16_START 0x00010000
-#define FLASH_SECTOR16_END   0x00017FFF
-
-#define FLASH_SECTOR17_SIZE  0x8000
-#define FLASH_SECTOR17_START 0x00018000
-#define FLASH_SECTOR17_END   0x0001FFFF
-
-#define FLASH_SECTOR18_SIZE  0x8000
-#define FLASH_SECTOR18_START 0x00020000
-#define FLASH_SECTOR18_END   0x00027FFF
-
-#define FLASH_SECTOR19_SIZE  0x8000
-#define FLASH_SECTOR19_START 0x00028000
-#define FLASH_SECTOR19_END   0x0002FFFF
-
-#define FLASH_SECTOR20_SIZE  0x8000
-#define FLASH_SECTOR20_START 0x00030000
-#define FLASH_SECTOR20_END   0x00037FFF
-
-#define FLASH_SECTOR21_SIZE  0x8000
-#define FLASH_SECTOR21_START 0x00038000
-#define FLASH_SECTOR21_END   0x0003FFFF
-
-#define FLASH_SECTOR22_SIZE  0x8000
-#define FLASH_SECTOR22_START 0x00040000
-#define FLASH_SECTOR22_END   0x00047FFF
-
-#define FLASH_SECTOR23_SIZE  0x8000
-#define FLASH_SECTOR23_START 0x00048000
-#define FLASH_SECTOR23_END   0x0004FFFF
-
-#define FLASH_SECTOR24_SIZE  0x8000
-#define FLASH_SECTOR24_START 0x00050000
-#define FLASH_SECTOR24_END   0x00057FFF
-
-#define FLASH_SECTOR25_SIZE  0x8000
-#define FLASH_SECTOR25_START 0x00058000
-#define FLASH_SECTOR25_END   0x0005FFFF
-
-#define FLASH_SECTOR26_SIZE  0x8000
-#define FLASH_SECTOR26_START 0x00060000
-#define FLASH_SECTOR26_END   0x00067FFF
-
-#define FLASH_SECTOR27_SIZE  0x8000
-#define FLASH_SECTOR27_START 0x00068000
-#define FLASH_SECTOR27_END   0x0006FFFF
-
-#define FLASH_SECTOR28_SIZE  0x8000
-#define FLASH_SECTOR28_START 0x00070000
-#define FLASH_SECTOR28_END   0x00077FFF
-
-#define FLASH_SECTOR29_SIZE  0x8000
-#define FLASH_SECTOR29_START 0x00078000
-#define FLASH_SECTOR29_END   0x0007FFFF
-
-void InitFlashDefaultSettings(void){
-  device.controller.flash.settings.hashSector = 22;
-  device.controller.flash.settings.dataSector = 23;
-}
-
-void InitFlashState(void){
-}
-
-uint32_t AddressFromSector(uint8_t sector){
-  switch (sector){
-    case 0: return FLASH_SECTOR0_START;
-    case 1: return FLASH_SECTOR1_START;
-    case 2: return FLASH_SECTOR2_START;
-    case 3: return FLASH_SECTOR3_START;
-    case 4: return FLASH_SECTOR4_START;
-    case 5: return FLASH_SECTOR5_START;
-    case 6: return FLASH_SECTOR6_START;
-    case 7: return FLASH_SECTOR7_START;
-    case 8: return FLASH_SECTOR8_START;
-    case 9: return FLASH_SECTOR9_START;
-    case 10: return FLASH_SECTOR10_START;
-    case 11: return FLASH_SECTOR11_START;
-    case 12: return FLASH_SECTOR12_START;
-    case 13: return FLASH_SECTOR13_START;
-    case 14: return FLASH_SECTOR14_START;
-    case 15: return FLASH_SECTOR15_START;
-    case 16: return FLASH_SECTOR16_START;
-    case 17: return FLASH_SECTOR17_START;
-    case 18: return FLASH_SECTOR18_START;
-    case 19: return FLASH_SECTOR19_START;
-    case 20: return FLASH_SECTOR20_START;
-    case 21: return FLASH_SECTOR21_START;
-    case 22: return FLASH_SECTOR22_START;
-    case 23: return FLASH_SECTOR23_START;
-    case 24: return FLASH_SECTOR24_START;
-    case 25: return FLASH_SECTOR25_START;
-    case 26: return FLASH_SECTOR26_START;
-    case 27: return FLASH_SECTOR27_START;
-    case 28: return FLASH_SECTOR28_START;
-    case 29: return FLASH_SECTOR29_START;
-    default: return 0;
-  }
-}
-
-uint16_t LengthFromSector(uint8_t sector){
-  switch (sector){
-    case 0: return FLASH_SECTOR0_SIZE;
-    case 1: return FLASH_SECTOR1_SIZE;
-    case 2: return FLASH_SECTOR2_SIZE;
-    case 3: return FLASH_SECTOR3_SIZE;
-    case 4: return FLASH_SECTOR4_SIZE;
-    case 5: return FLASH_SECTOR5_SIZE;
-    case 6: return FLASH_SECTOR6_SIZE;
-    case 7: return FLASH_SECTOR7_SIZE;
-    case 8: return FLASH_SECTOR8_SIZE;
-    case 9: return FLASH_SECTOR9_SIZE;
-    case 10: return FLASH_SECTOR10_SIZE;
-    case 11: return FLASH_SECTOR11_SIZE;
-    case 12: return FLASH_SECTOR12_SIZE;
-    case 13: return FLASH_SECTOR13_SIZE;
-    case 14: return FLASH_SECTOR14_SIZE;
-    case 15: return FLASH_SECTOR15_SIZE;
-    case 16: return FLASH_SECTOR16_SIZE;
-    case 17: return FLASH_SECTOR17_SIZE;
-    case 18: return FLASH_SECTOR18_SIZE;
-    case 19: return FLASH_SECTOR19_SIZE;
-    case 20: return FLASH_SECTOR20_SIZE;
-    case 21: return FLASH_SECTOR21_SIZE;
-    case 22: return FLASH_SECTOR22_SIZE;
-    case 23: return FLASH_SECTOR23_SIZE;
-    case 24: return FLASH_SECTOR24_SIZE;
-    case 25: return FLASH_SECTOR25_SIZE;
-    case 26: return FLASH_SECTOR26_SIZE;
-    case 27: return FLASH_SECTOR27_SIZE;
-    case 28: return FLASH_SECTOR28_SIZE;
-    case 29: return FLASH_SECTOR29_SIZE;
-    default: return 0;
-  }
-}
-/*
-uint8_t sectorFromAddress(uint32_t address){
-       if (address >= FLASH_SECTOR29_START) return 29;
-  else if (address >= FLASH_SECTOR28_START) return 28;
-  else if (address >= FLASH_SECTOR27_START) return 27;
-  else if (address >= FLASH_SECTOR26_START) return 26;
-  else if (address >= FLASH_SECTOR25_START) return 25;
-  else if (address >= FLASH_SECTOR24_START) return 24;
-  else if (address >= FLASH_SECTOR23_START) return 23;
-  else if (address >= FLASH_SECTOR22_START) return 22;
-  else if (address >= FLASH_SECTOR21_START) return 21;
-  else if (address >= FLASH_SECTOR20_START) return 20;
-  else if (address >= FLASH_SECTOR19_START) return 19;
-  else if (address >= FLASH_SECTOR18_START) return 18;
-  else if (address >= FLASH_SECTOR17_START) return 17;
-  else if (address >= FLASH_SECTOR16_START) return 16;
-  else if (address >= FLASH_SECTOR15_START) return 15;
-  else if (address >= FLASH_SECTOR14_START) return 14;
-  else if (address >= FLASH_SECTOR13_START) return 13;
-  else if (address >= FLASH_SECTOR12_START) return 12;
-  else if (address >= FLASH_SECTOR11_START) return 11;
-  else if (address >= FLASH_SECTOR10_START) return 10;
-  else if (address >= FLASH_SECTOR9_START) return 9;
-  else if (address >= FLASH_SECTOR8_START) return 8;
-  else if (address >= FLASH_SECTOR7_START) return 7;
-  else if (address >= FLASH_SECTOR6_START) return 6;
-  else if (address >= FLASH_SECTOR5_START) return 5;
-  else if (address >= FLASH_SECTOR4_START) return 4;
-  else if (address >= FLASH_SECTOR3_START) return 3;
-  else if (address >= FLASH_SECTOR2_START) return 2;
-  else if (address >= FLASH_SECTOR1_START) return 1;
-  else return 0;
-}
-*/
-
-DeviceFlashHash * FlashFindByHash(uint32_t hash){
-  uint16_t sectorLength = LengthFromSector(device.controller.flash.settings.hashSector);
-  uint16_t hashCapacity = sectorLength / sizeof(DeviceFlashHash);
-  uint32_t sectorAddress = AddressFromSector(device.controller.flash.settings.hashSector);
-  DeviceFlashHash * item = (DeviceFlashHash *)sectorAddress;
-  for (uint16_t i = 0; i < hashCapacity; i++){
-    if (item->hash == 0) break;
-    if (item->hash == hash) return item;
-    item++;
-  }
-  return 0;
-}
-
-void DeviceFlashReadAll(void){
-  uint16_t count = 0;
-  uint16_t sectorLength = LengthFromSector(device.controller.flash.settings.hashSector);
-  uint16_t hashCapacity = sectorLength / sizeof(DeviceFlashHash);
-  uint32_t sectorAddress = AddressFromSector(device.controller.flash.settings.hashSector);
-  DeviceFlashHash * item = (DeviceFlashHash *)sectorAddress;
-  for (uint16_t i = 0; i < hashCapacity; i++){
-    if (item->hash == 0) break; //Cleared
-    if (item->hash == 0xffffffff) break; //Erased
-    for (uint32_t j = 0; j < HASH_PARAM_COUNT; j++){
-      if (item->hash == hashParamTable[j].hash){
-        //if (item->size == hashParamTable[j].size){
-          uint8_t * src = (uint8_t *)item->address;
-          uint8_t * dst = hashParamTable[j].ref;
-          for (uint16_t k = 0; k < hashParamTable[j].size; k++){
-            *dst = *src; src++; dst++;
-          }
-        //}
-      }
-    }
-    item++;
-    count++;
-  }
-  sprintf(device.service.buffer,"FlashReadAll(): %d\r\n",count); WriteConcole();
-}
-
-void FlashOperationWritePage(DeviceFlashWriteOperation * op){
-  uint32_t res;
-  if (op->sectorPosition == 0){
-    //Prepare new sector for write operation
-    res = u32IAP_PrepareSectors(op->sector, op->sector);
-    sprintf(device.service.buffer,"PrepareSectors(): %02d %08x\r\n",op->sector, res); WriteConcole();
-    //Erase new sector
-    res = u32IAP_EraseSectors(op->sector, op->sector);
-    sprintf(device.service.buffer,"EraseSectors(): %02d %08x\r\n",op->sector, res); WriteConcole();
-  }
-  if (op->bytes < op->maxBytes){
-    //Prepare sector for write operation
-    res = u32IAP_PrepareSectors(op->sector, op->sector);
-    sprintf(device.service.buffer,"PrepareSectors(): %02d %08x\r\n",op->sector, res); WriteConcole();
-    //Copy page buffer to flash
-    res = u32IAP_CopyRAMToFlash(op->sectorAddress + op->sectorPosition, (uint32_t)&op->pageBuffer[0], FLASH_PAGE_SIZE);
-    sprintf(device.service.buffer,"CopyRAMToFlash(): %8x %08x\r\n", op->sectorAddress + op->sectorPosition, res); WriteConcole();
-    //Update bytes count
-    op->bytes += FLASH_PAGE_SIZE;
-    //Update sector position
-    op->sectorPosition += FLASH_PAGE_SIZE;
-    if (op->sectorPosition == op->sectorLength){
-      //Update sector address
-      op->sectorAddress += op->sectorLength;
-      //Clear sector position
-      op->sectorPosition = 0;
-      //Update sector
-      op->sector += 1;
-    }
-    //Update page position
-    op->pagePosition = 0;
-  }
-}
-
-void FlashOperationAppend(DeviceFlashWriteOperation * op, void * src, uint16_t count){
-  uint8_t * ptr = (uint8_t*) src;
-  for (uint16_t i = 0; i < count; i++){
-    op->pageBuffer[op->pagePosition] = *ptr;
-    op->pagePosition++;
-    ptr++;
-    //Write page buffer
-    if (op->pagePosition == FLASH_PAGE_SIZE){
-      FlashOperationWritePage(op);
-    }
-  }
-}
-
-void FlashOperationComplete(DeviceFlashWriteOperation * op){
-  for (uint16_t i = op->pagePosition; i < FLASH_PAGE_SIZE; i++){
-    op->pageBuffer[op->pagePosition] = 0xff;
-    op->pagePosition++;
-  }
-  FlashOperationWritePage(op);
-}
-
-void DeviceFlashWriteAll(void){
-  //#pragma pack(push)  /* push current alignment to stack */
-  //#pragma pack(4)     /* set alignment to 4 byte boundary */
-  DeviceFlashWriteOperation hash;
-  //#pragma pack(pop)   /* restore original alignment from stack */
-  hash.sector = device.controller.flash.settings.hashSector;
-  hash.sectorAddress = AddressFromSector(hash.sector);
-  hash.sectorLength = LengthFromSector(hash.sector);
-  hash.sectorPosition = 0;
-  hash.pagePosition = 0;
-  //hash.pageLength = device.flash.settings.hashPageLength;
-  hash.bytes = 0;
-  hash.maxBytes = hash.sectorLength;
-  
-  DeviceFlashWriteOperation data;
-  data.sector = device.controller.flash.settings.dataSector;
-  data.sectorAddress = AddressFromSector(data.sector);
-  data.sectorLength = LengthFromSector(data.sector);
-  data.sectorPosition = 0;
-  data.pagePosition = 0;
-  //data.pageLength = device.flash.settings.dataPageLength;
-  data.bytes = 0;
-  data.maxBytes = FLASH_SECTOR29_END - data.sectorAddress;
-  
-  NVIC_DisableIRQ(TIMER1_IRQn);
-  NVIC_DisableIRQ(TIMER2_IRQn);
-  NVIC_DisableIRQ(EINT3_IRQn);
-  //SystemInitDef();
-  
-  for (uint32_t i = 0; i < HASH_PARAM_COUNT; i++){
-    FlashOperationAppend(&hash, &hashParamTable[i].hash, 4);
-    uint32_t address = data.sectorAddress + data.sectorPosition + data.pagePosition;
-    FlashOperationAppend(&hash, &address, 4);
-    FlashOperationAppend(&data, hashParamTable[i].ref, hashParamTable[i].size);
-  }
-  FlashOperationComplete(&hash);
-  FlashOperationComplete(&data);
-  
-  NVIC_EnableIRQ(TIMER1_IRQn);
-  NVIC_EnableIRQ(TIMER2_IRQn);
-  NVIC_EnableIRQ(EINT3_IRQn);
-}
\ No newline at end of file