コード例 #1
0
/*!
 @brief _fta_manage_check_exportable

 check data for exportable

 @param [out] fta_manager  check data
 @param [in]  limit_size   data size

 @retval     TRUE : data is exportable
 @retval     FALSE: data is not exportable

*/
boolean _fta_manage_check_exportable(fta_manager_store_header *fta_manager, uint32 limit_size)
{
  if(fta_manager == NULL) return FALSE;

  if(!(fta_manager->cmn.tag    == FTA_TAG_MANAGER &&
       fta_manager->cmn.size   >= FTA_CALC_MANAGER_SIZE(fta_manager->count) &&
       fta_manager->cmn.size   <= limit_size &&
       fta_manager->cmn.offset == FTA_MANAGER_STORE_HEADER_LEN &&
       fta_manager->reclen     == FTA_MANAGER_STORE_ITEM_LEN &&
       fta_manager->count      >  0)) {
    return FALSE;
  }

  if(fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, 0) != 0) {
    return FALSE;
  }

  if(!(fta_manager->cmn.enabled == FTA_STORE_ENABLED_TRUE &&
       FTA_LIB_CHECKBIT(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING))) {
    return FALSE;
  }

  FTA_LIB_CHANGEBIT_CLR(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING);
  fta_manager->parity = fta_lib_check_parity16(
                                (uint16 *)fta_manager,
                                fta_manager->cmn.size / 2,
                                fta_manager->parity);

  return TRUE;
}
コード例 #2
0
/*!
 @brief fta_stop

 FTA stop function

 @param      none

 @retval     none
*/
void fta_stop(fta_stop_reason_enum reason)
{

  if(fta_manager == NULL) return;

  FTA_ENTER_LOCK();

  if(fta_lock_keeper.manager_status == FTA_MANAGER_STATUS_ENABLED) {
    fta_lock_keeper.manager_status = FTA_MANAGER_STATUS_STOP;
    /* - - - - - - - - */
    switch(reason) {
    case FTA_STOP_REASON_NORMAL:
      FTA_LIB_CHANGEBIT_CLR(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING);
      fta_manager->cmn.enabled = FTA_STORE_ENABLED_FALSE;
      fta_manager->parity      = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity);
      break;
    case FTA_STOP_REASON_ABNORMAL:
      break;
    case FTA_STOP_REASON_INTENTIONAL:
      FTA_LIB_CHANGEBIT_SET(fta_manager->cmn.statbit, FTA_STORE_STATBIT_INTENTIONAL);
      fta_manager->parity      = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity);
    }
    /* - - - - - - - - */
    FTA_MEMORY_FLUSH();
  }

  FTA_LEAVE_LOCK();

  _fta_manage_terminate_store_items(fta_manager);
  fta_reference = fta_reference_null;

  return;
}
コード例 #3
0
/*!
 @brief _fta_var_stop_common

 stop for variable area

 @param [in] store_item   item for manage

 @retval     none
*/
void _fta_var_stop_common(fta_manager_store_item *store_item)
{
    fta_var_store_header *var_header = (fta_var_store_header *)(store_item->addr);

    FTA_LIB_CHANGEBIT_CLR(var_header->cmn.statbit, FTA_STORE_STATBIT_RECORDING);

    return;
}
コード例 #4
0
/*!
 @brief fta_terminate

 FTA terminate function

 @param      none

 @retval     none
*/
void fta_terminate(void)
{

  if(fta_manager == NULL) return;

  FTA_ENTER_LOCK();

  fta_lock_keeper.manager_status = FTA_MANAGER_STATUS_STOP;
  FTA_LIB_CHANGEBIT_CLR(fta_manager->cmn.statbit, FTA_STORE_STATBIT_RECORDING);
  fta_manager->cmn.enabled = FTA_STORE_ENABLED_FALSE;
  fta_manager->parity      = fta_lib_check_parity16((uint16 *)fta_manager, fta_manager->cmn.size / 2, fta_manager->parity);
  FTA_MEMORY_FLUSH();

  FTA_LEAVE_LOCK();

  _fta_manage_terminate_store_items(fta_manager);
  fta_reference = fta_reference_null;

  return;
}