#ifndef __DONGLE_H #define __DONGLE_H #ifndef __DATE_H #include #endif #ifndef __STRINGS_H #include #endif enum TDongleHardware { _dongle_unknown, _dongle_hardlock, _dongle_eutron, _dongle_network }; enum TDongleType { _no_dongle, _user_dongle, _developer_dongle, _aga_dongle, _prassi_dongle, _procom_dongle }; enum { MAX_DONGLE_ASSIST = 8 }; class TDongle : public TObject { TDongleHardware _hardware; TDongleType _type; TString16 _admin, _admpwd; word _serno, _max_users, _year_assist; word _eprom[64]; TDate _last_update; TBit_array _module; bool _dirty; TString16 _admin, _admpwd; TDate _last_assist; unsigned long _assist[MAX_DONGLE_ASSIST]; // Centesimi di Euro pre-pagati protected: bool already_programmed() const; bool hardlock_login(bool test_all_dongles); bool eutron_login(bool test_all_dongles); bool network_login(bool test_all_dongles); bool burn_hardlock(); bool burn_eutron(); int can_try_server() const; public: // TObject virtual bool ok() const { return _hardware != _dongle_unknown && _type != _no_dongle && _serno != 0xFFFF; } public: bool login(bool test_all_dongles = FALSE); bool logout(); word number() const { return _serno; } word max_users() const { return _max_users; } word year_assist() const { return _year_assist; } void garble(word* data) const; // Solo per un po' di tempo, poi diverranno protected (servono a ba1500 old style) bool read_words(word reg, word len, word *data) const; bool write_words(word reg, word len, word *data) const; TDongleType type() const { return _type; } bool active(word module) const { return _module[module]; } void activate(word module, bool on = TRUE) { _module.set(module, on); _dirty = TRUE; } void deactivate(word module) { activate(module, FALSE); } void set_max_users(word u) { _max_users = u; _dirty = TRUE; } void set_year_assist(word y) { _year_assist = y; _dirty = TRUE; } const TDate& last_update() const { return _last_update; } bool dirty() const { return _dirty; } bool burn(); TDongleHardware hardware() const { return _hardware; } bool local() const { return _hardware == _dongle_hardlock || _hardware == _dongle_eutron; } bool network() const { return _hardware == _dongle_network; } real residual_assist(int index, bool lire) const; bool can_require_assist(int index) const; bool require_assist(int index, real imp, bool lire); bool pay_assist(int index, real imp, bool lire); const TString& administrator(TString* pwd = NULL); TDongle(); virtual ~TDongle(); }; TDongle& dongle(); bool destroy_dongle(); #endif