Exemplo n.º 1
0
// проверка проекта с чтением из flash
static BOOL validProjectALL(const BOOL flFlash)
{
BYTE CountFlash = 0;
// check error load flash
memset(&PROJ,0,sizeof(PROJ)); // чистим структуру проекта
memset(&crc_idp,0,sizeof(crc_idp));
if(flFlash)CountFlash = 1;
// read project
flash_rd(FLASH_PROGRAM,sizeof(TPROJECT)*CountFlash,(unsigned char*)&PROJ[CUR_DK], sizeof(PROJ[CUR_DK]));
// calcul crc32
const unsigned long crc=crc32_calc((unsigned char*)&PROJ[CUR_DK],sizeof(PROJ[CUR_DK])-sizeof(PROJ[CUR_DK].CRC32));
// read CRC32 programms
unsigned long crc_progs;
flash_rd(FLASH_PROGS,sizeof(TPROGRAMS)*(CUR_DK+1)-sizeof(crc_progs),(unsigned char*)&crc_progs,sizeof(crc_progs));
// check project
if(PROJ[CUR_DK].ProjectSize == sizeof(PROJ[CUR_DK])){
  if(crc==PROJ[CUR_DK].CRC32){
    if(crc_progs==PROJ[CUR_DK].CRC32_programs){
      // сохранить параметры IDP
      crc_idp.crc = PROJ[CUR_DK].IDP_CRC32;
      return true;
      }
    }
  }
return false;
}
Exemplo n.º 2
0
//------------------------------------------------------------------------------
// fin_try==0 - последняя поппытка, можно и записать в журнал ерроры
BOOL ligh_load_init(int  fin_try)
{
    //
    memset(&DK[CUR_DK],0,sizeof(DK[CUR_DK]));
    // clear crc
    memset(&crc_idp,0,sizeof(crc_idp));
    // FLASH_PROGS
    flash_rd(FLASH_PROGRAM, sizeof(TPROJECT)*CUR_DK,
             (unsigned char*)&PROJ[CUR_DK], sizeof(PROJ[CUR_DK]));
    unsigned long crc=crc32_calc((unsigned char*)&PROJ[CUR_DK] ,
                                 sizeof(PROJ[CUR_DK]) - sizeof(PROJ[CUR_DK].CRC32));
    //
    unsigned long crc_progs;
    flash_rd(FLASH_PROGS, sizeof(TPROGRAMS)*(CUR_DK+1)-sizeof(crc_progs) ,
             (unsigned char*)&crc_progs, sizeof(crc_progs));
    //
    crc_idp.crc =  crc_progs;// сохраним для передачи по UDP
    //i_size = sizeof(PROJ[CUR_DK]);
    if (PROJ[CUR_DK].ProjectSize ==sizeof(PROJ[CUR_DK]))
    {
      if ( crc == PROJ[CUR_DK].CRC32)
      {
        //
        if (crc_progs==PROJ[CUR_DK].CRC32_programs)
        {
          Init_DK();
          DK[CUR_DK].proj_valid=true;
          DK[CUR_DK].work = true;
          DK[CUR_DK].progs_valid = true;
          return true;
        }
        else
        {

            dbg_printf("FAULT. CRC32 of progs invalid");
            if (CUR_DK==0)
            if (!fin_try)
              Event_Push_Str("Некорр. программы (CRC)");
        }
      }
      else
      {
        dbg_printf("FAULT. PROJ.CRC32");
        if (CUR_DK==0)
        if (!fin_try)
          Event_Push_Str("Некорр. проект (CRC).");
      }
    }
    else
    {
      if (CUR_DK==0)
       if (!fin_try)
         Event_Push_Str("Некорр. проект (размер).");
       //
      dbg_printf("FAULT. PROJ.ProjectSize ==sizeof(PROJ)");
    }
return false;
}