File indexing completed on 2024-12-01 11:20:31

0001 /***************************************************************************
0002  *   Copyright (C) 2003 by David Saxton                                    *
0003  *   david@bluehaze.org                                                    *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  ***************************************************************************/
0010 
0011 #include "pulse.h"
0012 #include "flowcode.h"
0013 #include "libraryitem.h"
0014 #include "icndocument.h"
0015 
0016 #include <KLocalizedString>
0017 
0018 Item *Pulse::construct(ItemDocument *itemDocument, bool newItem, const char *id)
0019 {
0020     return new Pulse(static_cast<ICNDocument *>(itemDocument), newItem, id);
0021 }
0022 
0023 LibraryItem *Pulse::libraryItem()
0024 {
0025     return new LibraryItem(QStringList(QString("flow/pulse")), i18n("Pulse"), i18n("Functions"), "pppulse.png", LibraryItem::lit_flowpart, Pulse::construct);
0026 }
0027 
0028 Pulse::Pulse(ICNDocument *icnDocument, bool newItem, const char *id)
0029     : FlowPart(icnDocument, newItem, id ? id : "pulse")
0030 {
0031     m_name = i18n("Pulse");
0032     initProcessSymbol();
0033     createStdInput();
0034     createStdOutput();
0035 
0036     createProperty("0-duration", Variant::Type::Double);
0037     property("0-duration")->setCaption(i18n("Duration"));
0038     property("0-duration")->setUnit("sec");
0039     property("0-duration")->setValue(2.0);
0040 
0041     createProperty("1-high", Variant::Type::Double);
0042     property("1-high")->setCaption(i18n("High Time"));
0043     property("1-high")->setUnit("sec");
0044     property("1-high")->setValue(0.5);
0045 
0046     createProperty("2-low", Variant::Type::Double);
0047     property("2-low")->setCaption(i18n("Low Time"));
0048     property("2-low")->setUnit("sec");
0049     property("2-low")->setValue(0.5);
0050 
0051     createProperty("3-pin", Variant::Type::Pin);
0052     property("3-pin")->setCaption(i18n("Pin"));
0053     property("3-pin")->setValue("RA0");
0054 }
0055 
0056 Pulse::~Pulse()
0057 {
0058 }
0059 
0060 void Pulse::dataChanged()
0061 {
0062     double pulse = dataDouble("0-duration");
0063     setCaption(i18n("Pulse %1 for %2 sec", dataString("3-pin"), QString::number(pulse / getMultiplier(pulse), 'f', 1) + getNumberMag(pulse)));
0064 }
0065 
0066 void Pulse::generateMicrobe(FlowCode *code)
0067 {
0068     const double duration_ms = dataDouble("0-duration") * 1e3;
0069     const double high_ms = dataDouble("1-high") * 1e3;
0070     const double low_ms = dataDouble("2-low") * 1e3;
0071     const QString pin = dataString("3-pin");
0072 
0073     // TODO Do we want to change the format for pulsing?
0074     code->addCode("pulse " + pin + " " + QString::number(duration_ms) + " " + QString::number(high_ms) + " " + QString::number(low_ms));
0075     code->addCodeBranch(outputPart("stdoutput"));
0076 }