 // Файл с кодами ошибок для драйверов внешней флешпамяти
 // v 1.2 от 22/07/15
 // v 1.21 от 14/10/19
 // v 1.22 от 07/10/20
 // Автор: Сычев А

#ifndef FLASHDRIVER_ERR_H
#define FLASHDRIVER_ERR_H

    typedef enum
    {
    //--- коды расширенного статуса выполнения ----------------------------

    //                защита от стирания/записи
    FLERR_PROTECT_ENABLED           = 0xdeed, // установлена защита
    FLERR_PROTECT_DISABLED          = 0xbeef, // защита не установлена

    //--- коды успешного выполнения ---------------------------------------

    FLERR_SUCCESS                   = 0,      // успешное выполнение команды

    //--- коды ошибочного выполнения ---------------------------------------

    //                коды ошибок инициализации
    FLERR_LL_INITFAIL_NOTFOUND      =-1,      // ID микросхемы прочитан как All-FF, что означает, что чип отсутствует.

    FLERR_LL_INITFAIL_WRONGID       =-2,      // неверный ID микросхемы (Manufacturer ID)

    FLERR_LL_INITFAIL_WRONGDENSITY  =-3,      // неверный размер микросхемы (Density)

    FLERR_LL_INITFAIL_WRONGFAMILY   =-4,      // неверный семейство микросхемы (Family)

    FLERR_LL_INITFAIL_PAGESIZE      =-5,      // неверный размер страницы.
                                              // Причина: Выбран режим эмуляции страницы по 512 байт, либо выбран режим 528 байт
                                              // когда в чипе установлен фиксированный размер страницы 512 байт.
                                              // Необходимо объявить макрос AT45DB161E_PRM512 в файле "AT45DB161E_CONF.h"

    //                коды общих ошибок
    FLERR_TIMEOUT                   =-6,      // таймаут операций API
                                              // Причина: устройство занято

    FLERR_INVALID_PARAMETER         =-7,      // Ошибка в переданном параметре. см. описание функции

    FLERR_GENERIC_ERROR             =-8,      // Ошибка выполнения команды.
                                              // Причина зависит от функции
    FLERR_VERIFY_ERROR              =-9,      // Ошибка верификации данных во время записи flash_write()

    FLERR_INVALID_BUFFER            =-10,     // Ошибка: неверный буфер / недостаточно места в буфере

    FLERR_DEVICE_MALFUNCTION        =-13,     // Ошибка: непредсказуемое состояние, ошибка в работе чипа

    FLERR_WRONG_CONTEXT             =-16,     // Ошибка: неправильный контекст (не используется 17/04/19)
                                              // Причина: функция требует выполнения только в контексте задачи или прерывания

    //                коды фатальных ошибок
    FLERR_UNEXPECTED_BUSY           =-32,     // Ошибка, устройство занято во время критической операции. Условия выполнения
                                              // функции нарушены, результат не гарантируется. Ожидаемое состояние устройства
                                              // не гарантируется. Причина: устройство возвращает статус "занято" по истечении
                                              // критического таймаута.
    }
    flash_err_t;

    #define FLASH_SUCCESS(err)      (((err) >= FLERR_SUCCESS)?((__FLASH_DWORD)(-1)):0ul)
    #define FLASH_ERROR(err)        (((err) <  FLERR_SUCCESS)?((__FLASH_DWORD)(-1)):0ul)
#endif