2 * This file is part of the PulseView project.
4 * Copyright (C) 2015 Daniel Elstner <daniel.kitta@gmail.com>
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include "assetreader.hpp"
24 #include <QtCore/QDebug>
25 #include <QtCore/QFile>
26 #include <QtCore/QStandardPaths>
28 #include <libsigrok/libsigrok.h>
33 using std::unique_ptr
;
35 void AndroidAssetReader::open(struct sr_resource
*res
, string name
)
37 if (res
->type
== SR_RESOURCE_FIRMWARE
) {
38 auto path
= QStandardPaths::locate(QStandardPaths::GenericDataLocation
,
39 QString::fromStdString("sigrok-firmware/" + name
));
41 path
= QString::fromStdString("assets:/sigrok-firmware/" + name
);
43 unique_ptr
<QFile
> file
{new QFile
{path
}};
45 if (!file
->open(QIODevice::ReadOnly
))
46 throw sigrok::Error
{SR_ERR
};
48 const auto size
= file
->size();
50 throw sigrok::Error
{SR_ERR
};
53 res
->handle
= file
.release();
55 qWarning() << "AndroidAssetReader: Unknown resource type" << res
->type
;
56 throw sigrok::Error
{SR_ERR
};
60 void AndroidAssetReader::close(struct sr_resource
*res
)
63 qCritical("AndroidAssetReader: Invalid handle");
64 throw sigrok::Error
{SR_ERR_ARG
};
66 const unique_ptr
<QFile
> file
{static_cast<QFile
*>(res
->handle
)};
67 res
->handle
= nullptr;
72 size_t AndroidAssetReader::read(const struct sr_resource
*res
, void *buf
, size_t count
)
75 qCritical("AndroidAssetReader: Invalid handle");
76 throw sigrok::Error
{SR_ERR_ARG
};
78 auto *const file
= static_cast<QFile
*>(res
->handle
);
80 const auto n_read
= file
->read(static_cast<char*>(buf
), count
);
82 throw sigrok::Error
{SR_ERR
};