--- /dev/null
+/*
+ * This file is part of the PulseView project.
+ *
+ * Copyright (C) 2015 Daniel Elstner <daniel.kitta@gmail.com>
+ *
+ * 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 version 3 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. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "assetreader.hpp"
+#include <libsigrok/libsigrok.h>
+#include <memory>
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+
+using namespace pv;
+
+AndroidAssetReader::~AndroidAssetReader()
+{}
+
+void AndroidAssetReader::open(struct sr_resource *res, std::string name)
+{
+ if (res->type == SR_RESOURCE_FIRMWARE) {
+ const auto path = QString::fromStdString("assets:/sigrok-firmware/" + name);
+ std::unique_ptr<QFile> file {new QFile{path}};
+
+ if (!file->open(QIODevice::ReadOnly))
+ throw sigrok::Error{SR_ERR};
+
+ const auto size = file->size();
+ if (size < 0)
+ throw sigrok::Error{SR_ERR};
+
+ res->size = size;
+ res->handle = file.release();
+ } else {
+ qWarning() << "AndroidAssetReader: Unknown resource type" << res->type;
+ throw sigrok::Error{SR_ERR};
+ }
+}
+
+void AndroidAssetReader::close(struct sr_resource *res)
+{
+ if (!res->handle) {
+ qCritical("AndroidAssetReader: Invalid handle");
+ throw sigrok::Error{SR_ERR_ARG};
+ }
+ const std::unique_ptr<QFile> file {static_cast<QFile*>(res->handle)};
+ res->handle = nullptr;
+
+ file->close();
+}
+
+size_t AndroidAssetReader::read(const struct sr_resource *res, void *buf, size_t count)
+{
+ if (!res->handle) {
+ qCritical("AndroidAssetReader: Invalid handle");
+ throw sigrok::Error{SR_ERR_ARG};
+ }
+ auto *const file = static_cast<QFile*>(res->handle);
+
+ const auto n_read = file->read(static_cast<char*>(buf), count);
+ if (n_read < 0)
+ throw sigrok::Error{SR_ERR};
+
+ return n_read;
+}
--- /dev/null
+/*
+ * This file is part of the PulseView project.
+ *
+ * Copyright (C) 2015 Daniel Elstner <daniel.kitta@gmail.com>
+ *
+ * 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 version 3 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. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef PULSEVIEW_ANDROID_ASSETREADER_HPP
+#define PULSEVIEW_ANDROID_ASSETREADER_HPP
+
+#include <libsigrokcxx/libsigrokcxx.hpp>
+
+namespace pv {
+
+class AndroidAssetReader : public sigrok::ResourceReader
+{
+public:
+ AndroidAssetReader() {}
+ virtual ~AndroidAssetReader();
+
+private:
+ void open(struct sr_resource *res, std::string name) override;
+ void close(struct sr_resource *res) override;
+ size_t read(const struct sr_resource *res, void *buf, size_t count) override;
+};
+
+} // namespace pv
+
+#endif // !PULSEVIEW_ANDROID_ASSETREADER_HPP
#include "pv/mainwindow.hpp"
#ifdef ANDROID
#include <libsigrokandroidutils/libsigrokandroidutils.h>
+#include "android/assetreader.hpp"
#include "android/loghandler.hpp"
#endif
#ifdef ANDROID
srau_init_environment();
pv::AndroidLogHandler::install_callbacks();
+ pv::AndroidAssetReader asset_reader;
#endif
// Parse arguments
// Initialise libsigrok
context = sigrok::Context::create();
-
+#ifdef ANDROID
+ context->set_resource_reader(&asset_reader);
+#endif
do {
#ifdef ENABLE_DECODE