/*************************************************************************** * Copyright (C) 2005-2007 Nicolas Hadacek * * * * 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 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef PIC_CONFIG_H #define PIC_CONFIG_H #include #include #include "common/common/bitvalue.h" #include "pic_protection.h" #include "pic.h" namespace Pic { class Data; BEGIN_DECLARE_ENUM(ConfigNameType) Default = 0, Extra, SDCC END_DECLARE_ENUM_STD(ConfigNameType) class Config { public: class Value { public: TQString name; TQMap configNames; BitValue value; bool operator <(const Value &cv) const { return value values; // ordered from lower to higher bool operator <(const Mask &cm) const { return value tqmasks; // ordered from lower to higher BitValue usedMask() const; }; public: Config(const Pic::Data &data) : _data(data), _protection(data, *this) {} TQValueVector _words; const Protection &protection() const { return _protection; } const Value *findValue(const TQString &tqmask, const TQString &value) const; const Mask *findMask(const TQString &tqmask, uint *wordIndex = 0) const; static bool hasMaskName(const TQString &tqmask); static TQString tqmaskLabel(const TQString &tqmask); bool checkValueName(const TQString &tqmask, const TQString &name) const; static TQString valueLabel(const TQString &tqmask, const TQString &name); private: class MapData { public: MapData() {} MapData(int i, int b) : index(i), block(b) {} int index, block; }; static TQMap &tqmasks(); static TQMap *_tqmasks; // tqmask name -> index in DATA struct NameData { const char *name, *label; }; enum Type { Fixed, ValueDouble, ValueUInt, Ratio, MemoryRange, Toggle, Pin, Pins }; class Data { public: const NameData tqmask; Type type; const NameData values[50]; }; static const Data DATA[]; private: const Pic::Data &_data; Protection _protection; }; TQDataStream &operator <<(TQDataStream &s, const Config::Value &value); TQDataStream &operator >>(TQDataStream &s, Config::Value &value); TQDataStream &operator <<(TQDataStream &s, const Config::Mask &tqmask); TQDataStream &operator >>(TQDataStream &s, Config::Mask &tqmask); TQDataStream &operator <<(TQDataStream &s, const Config::Word &word); TQDataStream &operator >>(TQDataStream &s, Config::Word &word); TQDataStream &operator <<(TQDataStream &s, const Config &config); TQDataStream &operator >>(TQDataStream &s, Config &config); } //namespace #endif