~ubuntu-branches/ubuntu/quantal/openmsx-debugger/quantal

« back to all changes in this revision

Viewing changes to src/OpenMSXConnection.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Joost Yervante Damad
  • Date: 2009-12-06 07:40:02 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20091206074002-kssfkg1d6xbp6w9e
Tags: 0.0.0.svn20091206-1
New svn snapshot (Closes: #559612)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// $Id: OpenMSXConnection.cpp 129 2006-08-09 23:08:34Z mthuurne $
 
1
// $Id: OpenMSXConnection.cpp 9347 2009-03-06 22:47:13Z m9710797 $
2
2
 
3
3
#include "OpenMSXConnection.h"
4
4
#include <QXmlInputSource>
38
38
        return QString("debug_bin2hex [ debug read_block %1 %2 %3 ]")
39
39
                       .arg(debuggable).arg(offset).arg(size);
40
40
}
 
41
 
 
42
ReadDebugBlockCommand::ReadDebugBlockCommand(const QString& commandString,
 
43
                unsigned size_, unsigned char* target_)
 
44
        : SimpleCommand(commandString)
 
45
        , size(size_), target(target_)
 
46
{
 
47
}
 
48
 
41
49
ReadDebugBlockCommand::ReadDebugBlockCommand(const QString& debuggable,
42
50
                unsigned offset, unsigned size_, unsigned char* target_)
43
51
        : SimpleCommand(createDebugCommand(debuggable, offset, size_))
45
53
{
46
54
}
47
55
 
 
56
static QString createDebugWriteCommand(const QString& debuggable,
 
57
                unsigned offset, unsigned size, unsigned char *data )
 
58
{
 
59
        QString cmd = QString("debug write_block %1 %2 [ debug_hex2bin \"")
 
60
                          .arg(debuggable).arg(offset);
 
61
        for (unsigned i = offset; i < offset + size; ++i) {
 
62
                cmd += QString("%1").arg(int(data[i]), 2, 16, QChar('0')).toUpper();
 
63
        }
 
64
        cmd += "\" ]";
 
65
        return cmd;
 
66
}
 
67
WriteDebugBlockCommand::WriteDebugBlockCommand(const QString& debuggable,
 
68
                unsigned offset, unsigned size_, unsigned char* source_)
 
69
        : SimpleCommand(createDebugWriteCommand(debuggable, offset, size_, source_))
 
70
{
 
71
}
 
72
 
 
73
 
48
74
static unsigned char hex2val(char c)
49
75
{
50
76
        return (c <= '9') ? (c - '0') : (c - 'A' + 10);
99
125
 
100
126
void OpenMSXConnection::cleanup()
101
127
{
102
 
        if (connected) {
103
 
                connected = false;
104
 
                if (socket->isValid()) {
105
 
                        socket->disconnect( this, SLOT(processData()));
106
 
                        socket->disconnect( this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
107
 
                        socket->disconnect( this, SLOT(socketError(QAbstractSocket::SocketError)));
108
 
                        socket->write("</openmsx-control>\n");
109
 
                        socket->disconnectFromHost();
110
 
                }
111
 
                cancelPending();
112
 
                emit disconnected();
 
128
        if (!connected) return;
 
129
 
 
130
        connected = false;
 
131
        if (socket->isValid()) {
 
132
                socket->disconnect(this, SLOT(processData()));
 
133
                socket->disconnect(this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
 
134
                socket->disconnect(this, SLOT(socketError(QAbstractSocket::SocketError)));
 
135
                socket->write("</openmsx-control>\n");
 
136
                socket->disconnectFromHost();
113
137
        }
 
138
        cancelPending();
 
139
        emit disconnected();
114
140
}
115
141
 
116
142
void OpenMSXConnection::cancelPending()
151
177
 
152
178
bool OpenMSXConnection::fatalError(const QXmlParseException& exception)
153
179
{
154
 
        qWarning((QString("Fatal error on line") + exception.lineNumber() +
155
 
                  ", column" + exception.columnNumber() +
156
 
                  ": " + exception.message()).toAscii().data());
 
180
        qWarning("Fatal error on line %i, column %i: %s",
 
181
                 exception.lineNumber(), exception.columnNumber(),
 
182
                 exception.message().toAscii().data());
157
183
        cleanup();
158
184
        return false;
159
185
}
190
216
        } else if (qName == "update") {
191
217
                emit updateParsed(xmlAttrs.value("type"), xmlAttrs.value("name"), xmlData);
192
218
        } else {
193
 
                qWarning((QString("Unknown XML tag: ") + qName).toAscii().data());
 
219
                qWarning("Unknown XML tag: %s", qName.toAscii().data());
194
220
        }
195
221
        return true;
196
222
}