LCOV - code coverage report
Current view: top level - backend/devices/parallel - eprom.cpp (source / functions) Hit Total Coverage
Test: "6f9243f" Lines: 89 89 100.0 %
Date: 2024-02-24 14:58:06 Functions: 16 17 94.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // ---------------------------------------------------------------------------
       2             : // USB EPROM/Flash Programmer
       3             : //
       4             : // Copyright (2023) Robson Martins
       5             : //
       6             : // This work is licensed under a Creative Commons Attribution-NonCommercial-
       7             : // ShareAlike 4.0 International License.
       8             : // ---------------------------------------------------------------------------
       9             : /**
      10             :  * @ingroup Software
      11             :  * @file backend/devices/parallel/eprom.cpp
      12             :  * @brief Implementation of the Parallel EPROM.
      13             :  *
      14             :  * @author Robson Martins (https://www.robsonmartins.com)
      15             :  */
      16             : // ---------------------------------------------------------------------------
      17             : 
      18             : #include <QLoggingCategory>
      19             : #include "eprom.hpp"
      20             : 
      21             : // ---------------------------------------------------------------------------
      22             : // Logging
      23             : 
      24          20 : Q_LOGGING_CATEGORY(deviceParEprom, "device.parallel.eprom")
      25             : 
      26             : #define DEBUG qCDebug(deviceParEprom)
      27             : #define INFO qCInfo(deviceParEprom)
      28             : #define WARNING qCWarning(deviceParEprom)
      29             : #define CRITICAL qCCritical(deviceParEprom)
      30             : #define FATAL qCFatal(deviceParEprom)
      31             : 
      32             : // ---------------------------------------------------------------------------
      33             : 
      34           4 : EPROM::EPROM(QObject *parent) : ParDevice(parent) {
      35           4 :     info_.name = "EPROM";
      36           4 :     info_.capability.hasRead = true;
      37           4 :     info_.capability.hasProgram = true;
      38           4 :     info_.capability.hasVerify = true;
      39           4 :     info_.capability.hasBlankCheck = true;
      40           4 :     info_.capability.hasGetId = true;
      41           4 :     info_.capability.hasVDD = true;
      42           4 :     info_.capability.hasVPP = true;
      43           4 :     skipFF_ = true;
      44           4 :     twp_ = 600;
      45           4 :     twc_ = 8;
      46           4 :     vddRd_ = 5.0f;
      47           4 :     vddWr_ = 6.0f;
      48           4 :     vpp_ = 13.0f;
      49           4 :     vee_ = 13.0f;
      50           4 :     size_ = 2048;
      51           4 :     maxAttemptsProg_ = 25;
      52           4 :     flags_.skipFF = true;
      53           4 :     flags_.progWithVpp = true;
      54           4 :     flags_.pgmPositive = true;
      55           4 :     flags_.pgmCePin = true;
      56           4 :     algo_ = kCmdDeviceAlgorithmEPROM;
      57           8 :     DEBUG << info_.toString();
      58           4 : }
      59             : 
      60           4 : EPROM::~EPROM() {}
      61             : 
      62          13 : void EPROM::setSize(uint32_t value) {
      63          13 :     ParDevice::setSize(value);
      64             :     // set device flags
      65          13 :     switch (size_) {
      66           4 :         case 0x001000:  //  4KB
      67             :         case 0x010000:  // 64KB
      68             :         case 0x100000:  //  1MB
      69             :         case 0x400000:  //  4MB
      70             :             // ~OE/VPP Pin
      71           4 :             flags_.vppOePin = true;
      72           4 :             break;
      73           9 :         default:
      74             :             // ~OE and VPP Pin are separated
      75           9 :             flags_.vppOePin = false;
      76           9 :             break;
      77             :     }
      78          13 :     if (size_ == 0x800) {  // 2KB
      79             :         // Positive prog pulse (HI)
      80           4 :         flags_.pgmPositive = true;
      81             :     } else {
      82             :         // Normal negative prog pulse (LO)
      83           9 :         flags_.pgmPositive = false;
      84             :     }
      85          13 :     switch (size_) {
      86           4 :         case 0x02000:  //   8KB
      87             :         case 0x04000:  //  16KB
      88             :         case 0x20000:  // 128KB
      89             :         case 0x40000:  // 256KB
      90             :             // ~CE and ~PGM Pin are separated
      91           4 :             flags_.pgmCePin = false;
      92           4 :             break;
      93           9 :         default:
      94             :             // ~CE/PGM Pin
      95           9 :             flags_.pgmCePin = true;
      96           9 :             break;
      97             :     }
      98          13 : }
      99             : 
     100             : // ---------------------------------------------------------------------------
     101             : 
     102           1 : EPROM27::EPROM27(QObject *parent) : EPROM(parent) {
     103           1 :     info_.name = "EPROM 27 (NMOS)";
     104           1 :     twp_ = 50000;
     105           1 :     twc_ = 50;
     106           1 :     vddRd_ = 5.0f;
     107           1 :     vddWr_ = 5.0f;
     108           1 :     vpp_ = 25.0f;
     109           1 :     vee_ = 12.0f;
     110           2 :     DEBUG << info_.toString();
     111           1 : }
     112             : 
     113           2 : EPROM27::~EPROM27() {}
     114             : 
     115             : // ---------------------------------------------------------------------------
     116             : 
     117           3 : EPROM27C::EPROM27C(QObject *parent) : EPROM(parent) {
     118           3 :     info_.name = "EPROM 27C";
     119           3 :     twp_ = 500;
     120           3 :     twc_ = 8;
     121           3 :     vddRd_ = 5.0f;
     122           3 :     vddWr_ = 6.0f;
     123           3 :     vpp_ = 13.0f;
     124           3 :     vee_ = 12.0f;
     125           6 :     DEBUG << info_.toString();
     126           3 : }
     127             : 
     128           4 : EPROM27C::~EPROM27C() {}
     129             : 
     130             : // ---------------------------------------------------------------------------
     131             : 
     132           1 : EPROM27C16Bit::EPROM27C16Bit(QObject *parent) : EPROM27C(parent) {
     133           1 :     info_.name = "EPROM 27C (16Bit)";
     134           1 :     flags_.is16bit = true;
     135           2 :     DEBUG << info_.toString();
     136           1 : }
     137             : 
     138           2 : EPROM27C16Bit::~EPROM27C16Bit() {}
     139             : 
     140             : // ---------------------------------------------------------------------------
     141             : 
     142           1 : EPROM27E::EPROM27E(QObject *parent) : EPROM27C(parent) {
     143           1 :     info_.name = "EPROM W27C/27E/27SF";
     144           1 :     info_.capability.hasErase = true;
     145           1 :     info_.capability.hasFastProg = true;
     146           1 :     fastProg_ = true;
     147           1 :     twp_ = 100;
     148           1 :     twc_ = 15;
     149           1 :     vddRd_ = 5.0f;
     150           1 :     vddWr_ = 5.0f;
     151           1 :     vpp_ = 12.0f;
     152           1 :     vee_ = 14.0f;
     153           2 :     DEBUG << info_.toString();
     154           1 : }
     155             : 
     156           2 : EPROM27E::~EPROM27E() {}

Generated by: LCOV version 1.14