ponyprog/SrcPony/x2444.cpp

153 lines
3.5 KiB
C++

//=========================================================================//
// //
// PonyProg - Serial Device Programmer //
// //
// Copyright (C) 1997-2019 Claudio Lanconelli //
// //
// http://ponyprog.sourceforge.net //
// //
//-------------------------------------------------------------------------//
// //
// This program is free software; you can redistribute it and/or //
// modify it under the terms of the GNU General Public License //
// as published by the Free Software Foundation; either version2 of //
// the License, or (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //
// General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program (see LICENSE); if not, write to the //
// Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //
// //
//=========================================================================//
#include "types.h"
#include "x2444.h" // Header file
#include "errcode.h"
#include "eeptypes.h"
#include <QDebug>
X2444::X2444(e2AppWinInfo *wininfo, BusIO *busp)
: Device(wininfo, busp, 2)
{
qDebug() << "X2444::X2444()";
DefaultBankSize();
}
void X2444::DefaultBankSize()
{
if (GetBus() == 0)
{
Device::DefaultBankSize();
}
else
{
if (GetBus()->GetOrganization() == ORG16)
{
SetBankSize(2);
}
else
{
SetBankSize(1);
}
}
}
int X2444::Read(int probe, int type)
{
qDebug() << "X2444::Read(" << probe << ")";
if (probe || GetNoOfBank() == 0)
{
Probe();
}
int size = GetNoOfBank() * GetBankSize();
int rv = size;
if (type & PROG_TYPE)
{
rv = GetBus()->Read(0, GetBufPtr(), size);
if (rv != size)
{
if (rv > 0)
{
rv = OP_ABORTED;
}
}
}
qDebug() << "X2444::Read() = " << rv;
return rv;
}
int X2444::Write(int probe, int type)
{
if (probe || GetNoOfBank() == 0)
{
Probe();
}
int size = GetNoOfBank() * GetBankSize();
int rv = size;
if (type & PROG_TYPE)
{
rv = GetBus()->Write(0, GetBufPtr(), size);
if (rv != size)
{
if (rv > 0)
{
rv = OP_ABORTED;
}
}
}
return rv;
}
int X2444::Verify(int type)
{
if (GetNoOfBank() == 0)
{
return BADPARAM;
}
int rval = 1;
if (type & PROG_TYPE)
{
int size = GetNoOfBank() * GetBankSize();
unsigned char *localbuf;
localbuf = new unsigned char[size];
rval = GetBus()->Read(0, localbuf, size);
if (rval != size)
{
if (rval > 0)
{
rval = OP_ABORTED;
}
}
else
{
rval = (memcmp(GetBufPtr(), localbuf, size) != 0) ? 0 : 1;
}
delete[] localbuf;
}
return rval;
}