kopia lustrzana https://github.com/Hamlib/Hamlib
augmented C++ API
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@813 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.1.3
rodzic
e66509d2c5
commit
dcf4cb10ba
262
c++/rigclass.cc
262
c++/rigclass.cc
|
@ -11,7 +11,7 @@
|
|||
* Hamlib C++ bindings - main file
|
||||
* Copyright (c) 2001 by Stephane Fillod
|
||||
*
|
||||
* $Id: rigclass.cc,v 1.6 2001-12-20 07:46:12 fillods Exp $
|
||||
* $Id: rigclass.cc,v 1.7 2001-12-27 21:50:14 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -79,6 +79,30 @@ void Rig::close(void) {
|
|||
CHECK_RIG( rig_close(theRig) );
|
||||
}
|
||||
|
||||
void Rig::setConf(token_t token, const char *val)
|
||||
{
|
||||
CHECK_RIG( rig_set_conf(theRig, token, val) );
|
||||
}
|
||||
void Rig::setConf(const char *name, const char *val)
|
||||
{
|
||||
CHECK_RIG( rig_set_conf(theRig, tokenLookup(name), val) );
|
||||
}
|
||||
|
||||
void Rig::getConf(token_t token, char *val)
|
||||
{
|
||||
CHECK_RIG( rig_get_conf(theRig, token, val) );
|
||||
}
|
||||
void Rig::getConf(const char *name, char *val)
|
||||
{
|
||||
CHECK_RIG( rig_get_conf(theRig, tokenLookup(name), val) );
|
||||
}
|
||||
|
||||
token_t Rig::tokenLookup(const char *name)
|
||||
{
|
||||
return rig_token_lookup(theRig, name);
|
||||
}
|
||||
|
||||
|
||||
void Rig::setFreq(freq_t freq, vfo_t vfo) {
|
||||
CHECK_RIG( rig_set_freq(theRig, vfo, freq) );
|
||||
}
|
||||
|
@ -202,6 +226,67 @@ float Rig::getLevelF(setting_t level, vfo_t vfo)
|
|||
return val.f;
|
||||
}
|
||||
|
||||
void Rig::setParm(setting_t parm, int vali)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
val.i = vali;
|
||||
CHECK_RIG( rig_set_parm(theRig, parm, val) );
|
||||
}
|
||||
|
||||
void Rig::setParm(setting_t parm, float valf)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
val.f = valf;
|
||||
CHECK_RIG( rig_set_parm(theRig, parm, val) );
|
||||
}
|
||||
|
||||
|
||||
void Rig::getParm(setting_t parm, int& vali)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
if (RIG_LEVEL_IS_FLOAT(parm))
|
||||
THROW(new RigException (-RIG_EINVAL));
|
||||
|
||||
CHECK_RIG( rig_get_parm(theRig, parm, &val) );
|
||||
vali = val.i;
|
||||
}
|
||||
|
||||
void Rig::getParm(setting_t parm, float& valf)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
if (!RIG_LEVEL_IS_FLOAT(parm))
|
||||
THROW(new RigException (-RIG_EINVAL));
|
||||
|
||||
CHECK_RIG( rig_get_parm(theRig, parm, &val) );
|
||||
valf = val.f;
|
||||
}
|
||||
|
||||
int Rig::getParmI(setting_t parm)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
if (RIG_LEVEL_IS_FLOAT(parm))
|
||||
THROW(new RigException (-RIG_EINVAL));
|
||||
|
||||
CHECK_RIG( rig_get_parm(theRig, parm, &val) );
|
||||
return val.i;
|
||||
}
|
||||
|
||||
float Rig::getParmF(setting_t parm)
|
||||
{
|
||||
value_t val;
|
||||
|
||||
if (!RIG_LEVEL_IS_FLOAT(parm))
|
||||
THROW(new RigException (-RIG_EINVAL));
|
||||
|
||||
CHECK_RIG( rig_get_parm(theRig, parm, &val) );
|
||||
return val.f;
|
||||
}
|
||||
|
||||
void Rig::setSplitFreq(freq_t tx_freq, vfo_t vfo) {
|
||||
CHECK_RIG( rig_set_split_freq(theRig, vfo, tx_freq) );
|
||||
}
|
||||
|
@ -239,13 +324,22 @@ split_t Rig::getSplit(vfo_t vfo) {
|
|||
return split;
|
||||
}
|
||||
|
||||
setting_t Rig::hasGetLevel (setting_t level)
|
||||
bool Rig::hasGetLevel (setting_t level)
|
||||
{
|
||||
return rig_has_get_level(theRig, level);
|
||||
return rig_has_get_level(theRig, level) == level;
|
||||
}
|
||||
setting_t Rig::hasSetLevel (setting_t level)
|
||||
bool Rig::hasSetLevel (setting_t level)
|
||||
{
|
||||
return rig_has_set_level(theRig, level);
|
||||
return rig_has_set_level(theRig, level) == level;
|
||||
}
|
||||
|
||||
bool Rig::hasGetParm (setting_t parm)
|
||||
{
|
||||
return rig_has_get_parm(theRig, parm) == parm;
|
||||
}
|
||||
bool Rig::hasSetParm (setting_t parm)
|
||||
{
|
||||
return rig_has_set_parm(theRig, parm) == parm;
|
||||
}
|
||||
|
||||
const char *Rig::getInfo (void)
|
||||
|
@ -310,6 +404,63 @@ shortfreq_t Rig::getTs (vfo_t vfo = RIG_VFO_CURR)
|
|||
return ts;
|
||||
}
|
||||
|
||||
void Rig::setCTCSS (tone_t tone, vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
CHECK_RIG( rig_set_ctcss_tone(theRig, vfo, tone) );
|
||||
}
|
||||
|
||||
tone_t Rig::getCTCSS (vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
tone_t tone;
|
||||
|
||||
CHECK_RIG( rig_get_ctcss_tone(theRig, vfo, &tone) );
|
||||
|
||||
return tone;
|
||||
}
|
||||
|
||||
void Rig::setDCS (tone_t code, vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
CHECK_RIG( rig_set_dcs_code(theRig, vfo, code) );
|
||||
}
|
||||
|
||||
tone_t Rig::getDCS (vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
tone_t code;
|
||||
|
||||
CHECK_RIG( rig_get_dcs_code(theRig, vfo, &code) );
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
void Rig::setCTCSSsql (tone_t tone, vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
CHECK_RIG( rig_set_ctcss_sql(theRig, vfo, tone) );
|
||||
}
|
||||
|
||||
tone_t Rig::getCTCSSsql (vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
tone_t tone;
|
||||
|
||||
CHECK_RIG( rig_get_ctcss_sql(theRig, vfo, &tone) );
|
||||
|
||||
return tone;
|
||||
}
|
||||
|
||||
void Rig::setDCSsql (tone_t code, vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
CHECK_RIG( rig_set_dcs_sql(theRig, vfo, code) );
|
||||
}
|
||||
|
||||
tone_t Rig::getDCSsql (vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
tone_t code;
|
||||
|
||||
CHECK_RIG( rig_get_dcs_sql(theRig, vfo, &code) );
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
|
||||
void Rig::setFunc (setting_t func, bool status, vfo_t vfo = RIG_VFO_CURR)
|
||||
{
|
||||
CHECK_RIG( rig_set_func(theRig, vfo, func, status? 1:0) );
|
||||
|
@ -324,6 +475,87 @@ bool Rig::getFunc (setting_t func, vfo_t vfo = RIG_VFO_CURR)
|
|||
return status ? true : false;
|
||||
}
|
||||
|
||||
void Rig::VFOop (vfo_op_t op, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG( rig_vfo_op(theRig, vfo, op) );
|
||||
}
|
||||
|
||||
bool Rig::hasVFOop (vfo_op_t op)
|
||||
{
|
||||
return rig_has_vfo_op(theRig, op)==op;
|
||||
}
|
||||
|
||||
void Rig::scan (scan_t scan, int ch, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG( rig_scan(theRig, vfo, scan, ch) );
|
||||
}
|
||||
|
||||
bool Rig::hasScan (scan_t scan)
|
||||
{
|
||||
return rig_has_scan(theRig, scan)==scan;
|
||||
}
|
||||
|
||||
|
||||
void Rig::setRit(shortfreq_t rit, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG(rig_set_rit(theRig, vfo, rit));
|
||||
}
|
||||
|
||||
shortfreq_t Rig::getRit(vfo_t vfo)
|
||||
{
|
||||
shortfreq_t rit;
|
||||
|
||||
CHECK_RIG( rig_get_rit(theRig, vfo, &rit) );
|
||||
|
||||
return rit;
|
||||
}
|
||||
|
||||
void Rig::setXit(shortfreq_t xit, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG(rig_set_xit(theRig, vfo, xit));
|
||||
}
|
||||
|
||||
shortfreq_t Rig::getXit(vfo_t vfo)
|
||||
{
|
||||
shortfreq_t xit;
|
||||
|
||||
CHECK_RIG( rig_get_xit(theRig, vfo, &xit) );
|
||||
|
||||
return xit;
|
||||
}
|
||||
|
||||
void Rig::setAnt(ant_t ant, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG(rig_set_ant(theRig, vfo, ant));
|
||||
}
|
||||
|
||||
ant_t Rig::getAnt(vfo_t vfo)
|
||||
{
|
||||
ant_t ant;
|
||||
|
||||
CHECK_RIG( rig_get_ant(theRig, vfo, &ant) );
|
||||
|
||||
return ant;
|
||||
}
|
||||
|
||||
void Rig::sendDtmf(const char *digits, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG(rig_send_dtmf(theRig, vfo, digits));
|
||||
}
|
||||
|
||||
int Rig::recvDtmf(char *digits, vfo_t vfo)
|
||||
{
|
||||
int len;
|
||||
|
||||
CHECK_RIG( rig_recv_dtmf(theRig, vfo, digits, &len) );
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
void Rig::sendMorse(const char *msg, vfo_t vfo)
|
||||
{
|
||||
CHECK_RIG(rig_send_morse(theRig, vfo, msg));
|
||||
}
|
||||
|
||||
|
||||
shortfreq_t Rig::getResolution (rmode_t mode)
|
||||
|
@ -402,6 +634,26 @@ int Rig::getMem (vfo_t vfo = RIG_VFO_CURR)
|
|||
return mem;
|
||||
}
|
||||
|
||||
void Rig::saveChannel (channel_t *chan)
|
||||
{
|
||||
CHECK_RIG( rig_save_channel(theRig, chan) );
|
||||
}
|
||||
|
||||
void Rig::restoreChannel (const channel_t *chan)
|
||||
{
|
||||
CHECK_RIG( rig_restore_channel(theRig, chan) );
|
||||
}
|
||||
|
||||
void Rig::setChannel (const channel_t *chan)
|
||||
{
|
||||
CHECK_RIG( rig_set_channel(theRig, chan) );
|
||||
}
|
||||
|
||||
void Rig::getChannel (channel_t *chan)
|
||||
{
|
||||
CHECK_RIG( rig_get_channel(theRig, chan) );
|
||||
}
|
||||
|
||||
|
||||
void Rig::setPowerStat (powerstat_t status)
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib C++ bindings - API header
|
||||
* Copyright (c) 2001 by Stephane Fillod
|
||||
*
|
||||
* $Id: rigclass.h,v 1.7 2001-12-20 07:46:12 fillods Exp $
|
||||
* $Id: rigclass.h,v 1.8 2001-12-27 21:50:14 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -45,6 +45,12 @@ public:
|
|||
// This method close the communication port to the rig
|
||||
void close(void);
|
||||
|
||||
void setConf(token_t token, const char *val);
|
||||
void setConf(const char *name, const char *val);
|
||||
void getConf(token_t token, char *val);
|
||||
void getConf(const char *name, char *val);
|
||||
token_t tokenLookup(const char *name);
|
||||
|
||||
void setFreq(freq_t freq, vfo_t vfo = RIG_VFO_CURR);
|
||||
freq_t getFreq(vfo_t vfo = RIG_VFO_CURR);
|
||||
void setMode(rmode_t, pbwidth_t width = RIG_PASSBAND_NORMAL, vfo_t vfo = RIG_VFO_CURR);
|
||||
|
@ -62,8 +68,28 @@ public:
|
|||
void getLevel(setting_t level, float& valf, vfo_t vfo = RIG_VFO_CURR);
|
||||
int getLevelI(setting_t level, vfo_t vfo = RIG_VFO_CURR);
|
||||
float getLevelF(setting_t level, vfo_t vfo = RIG_VFO_CURR);
|
||||
setting_t hasGetLevel (setting_t level);
|
||||
setting_t hasSetLevel (setting_t level);
|
||||
bool hasGetLevel (setting_t level);
|
||||
bool hasSetLevel (setting_t level);
|
||||
|
||||
void setParm(setting_t parm, int vali);
|
||||
void setParm(setting_t parm, float valf);
|
||||
void getParm(setting_t parm, int& vali);
|
||||
void getParm(setting_t parm, float& valf);
|
||||
int getParmI(setting_t parm);
|
||||
float getParmF(setting_t parm);
|
||||
bool hasGetParm (setting_t parm);
|
||||
bool hasSetParm (setting_t parm);
|
||||
|
||||
void setFunc (setting_t func, bool status, vfo_t vfo = RIG_VFO_CURR);
|
||||
bool getFunc (setting_t func, vfo_t vfo = RIG_VFO_CURR);
|
||||
bool hasGetFunc (setting_t func);
|
||||
bool hasSetFunc (setting_t func);
|
||||
|
||||
void VFOop(vfo_op_t op, vfo_t vfo = RIG_VFO_CURR);
|
||||
bool hasVFOop (vfo_op_t op);
|
||||
|
||||
void scan(scan_t scan, int ch, vfo_t vfo = RIG_VFO_CURR);
|
||||
bool hasScan (scan_t scan);
|
||||
|
||||
const char *getInfo (void);
|
||||
pbwidth_t passbandNormal (rmode_t);
|
||||
|
@ -76,8 +102,17 @@ public:
|
|||
shortfreq_t getRptrOffs (vfo_t vfo = RIG_VFO_CURR);
|
||||
void setTs (shortfreq_t ts, vfo_t vfo = RIG_VFO_CURR);
|
||||
shortfreq_t getTs (vfo_t vfo = RIG_VFO_CURR);
|
||||
void setFunc (setting_t func, bool status, vfo_t vfo = RIG_VFO_CURR);
|
||||
bool getFunc (setting_t func, vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void setCTCSS (tone_t tone, vfo_t vfo = RIG_VFO_CURR);
|
||||
tone_t getCTCSS (vfo_t vfo = RIG_VFO_CURR);
|
||||
void setDCS (tone_t code, vfo_t vfo = RIG_VFO_CURR);
|
||||
tone_t getDCS (vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void setCTCSSsql (tone_t tone, vfo_t vfo = RIG_VFO_CURR);
|
||||
tone_t getCTCSSsql (vfo_t vfo = RIG_VFO_CURR);
|
||||
void setDCSsql (tone_t tone, vfo_t vfo = RIG_VFO_CURR);
|
||||
tone_t getDCSsql (vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
|
||||
unsigned int power2mW (float power, freq_t freq, rmode_t mode);
|
||||
float mW2power (unsigned int mwpower, freq_t freq, rmode_t mode);
|
||||
|
@ -86,6 +121,12 @@ public:
|
|||
void setBank (int bank, vfo_t vfo = RIG_VFO_CURR);
|
||||
void setMem (int ch, vfo_t vfo = RIG_VFO_CURR);
|
||||
int getMem (vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void restoreChannel (const channel_t *chan);
|
||||
void saveChannel (channel_t *chan);
|
||||
void setChannel (const channel_t *chan);
|
||||
void getChannel (channel_t *chan);
|
||||
|
||||
void setPowerStat (powerstat_t status);
|
||||
powerstat_t getPowerStat (void);
|
||||
rmode_t RngRxModes (freq_t freq);
|
||||
|
@ -98,11 +139,21 @@ public:
|
|||
void setSplit(split_t split, vfo_t vfo = RIG_VFO_CURR);
|
||||
split_t getSplit(vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void setRit (shortfreq_t rit, vfo_t vfo = RIG_VFO_CURR);
|
||||
shortfreq_t getRit (vfo_t vfo = RIG_VFO_CURR);
|
||||
void setXit (shortfreq_t xit, vfo_t vfo = RIG_VFO_CURR);
|
||||
shortfreq_t getXit (vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void setAnt (ant_t ant, vfo_t vfo = RIG_VFO_CURR);
|
||||
ant_t getAnt (vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
void sendDtmf (const char *digits, vfo_t vfo = RIG_VFO_CURR);
|
||||
int recvDtmf (char *digits, vfo_t vfo = RIG_VFO_CURR);
|
||||
void sendMorse (const char *msg, vfo_t vfo = RIG_VFO_CURR);
|
||||
|
||||
|
||||
shortfreq_t getResolution (rmode_t mode);
|
||||
void reset (reset_t reset);
|
||||
bool hasGetFunc (setting_t func);
|
||||
bool hasSetFunc (setting_t func);
|
||||
|
||||
// callbacks available in your derived object
|
||||
virtual int FreqEvent(vfo_t, freq_t) const {
|
||||
|
@ -126,55 +177,6 @@ public:
|
|||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
extern HAMLIB_EXPORT(int) rig_set_ctcss HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t tone));
|
||||
extern HAMLIB_EXPORT(int) rig_get_ctcss HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t *tone));
|
||||
extern HAMLIB_EXPORT(int) rig_set_dcs HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t code));
|
||||
extern HAMLIB_EXPORT(int) rig_get_dcs HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t *code));
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_set_ctcss_sql HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t tone));
|
||||
extern HAMLIB_EXPORT(int) rig_get_ctcss_sql HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t *tone));
|
||||
extern HAMLIB_EXPORT(int) rig_set_dcs_sql HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t code));
|
||||
extern HAMLIB_EXPORT(int) rig_get_dcs_sql HAMLIB_PARAMS((RIG *rig, vfo_t vfo, tone_t *code));
|
||||
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_set_rit HAMLIB_PARAMS((RIG *rig, vfo_t vfo, shortfreq_t rit));
|
||||
extern HAMLIB_EXPORT(int) rig_get_rit HAMLIB_PARAMS((RIG *rig, vfo_t vfo, shortfreq_t *rit));
|
||||
extern HAMLIB_EXPORT(int) rig_set_xit HAMLIB_PARAMS((RIG *rig, vfo_t vfo, shortfreq_t xit));
|
||||
extern HAMLIB_EXPORT(int) rig_get_xit HAMLIB_PARAMS((RIG *rig, vfo_t vfo, shortfreq_t *xit));
|
||||
|
||||
|
||||
|
||||
|
||||
#define rig_get_strength(r,v,s) rig_get_level((r),(v),RIG_LEVEL_STRENGTH, (value_t*)(s))
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_set_parm HAMLIB_PARAMS((RIG *rig, setting_t parm, value_t val));
|
||||
extern HAMLIB_EXPORT(int) rig_get_parm HAMLIB_PARAMS((RIG *rig, setting_t parm, value_t *val));
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_set_ant HAMLIB_PARAMS((RIG *rig, vfo_t vfo, ant_t ant)); /* antenna */
|
||||
extern HAMLIB_EXPORT(int) rig_get_ant HAMLIB_PARAMS((RIG *rig, vfo_t vfo, ant_t *ant));
|
||||
|
||||
|
||||
extern HAMLIB_EXPORT(setting_t) rig_has_get_parm HAMLIB_PARAMS((RIG *rig, setting_t parm));
|
||||
extern HAMLIB_EXPORT(setting_t) rig_has_set_parm HAMLIB_PARAMS((RIG *rig, setting_t parm));
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_send_dtmf HAMLIB_PARAMS((RIG *rig, vfo_t vfo, const char *digits));
|
||||
extern HAMLIB_EXPORT(int) rig_recv_dtmf HAMLIB_PARAMS((RIG *rig, vfo_t vfo, char *digits, int *length));
|
||||
extern HAMLIB_EXPORT(int) rig_send_morse HAMLIB_PARAMS((RIG *rig, vfo_t vfo, const char *msg));
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_vfo_op HAMLIB_PARAMS((RIG *rig, vfo_t vfo, vfo_op_t op));
|
||||
extern HAMLIB_EXPORT(vfo_op_t) rig_has_vfo_op HAMLIB_PARAMS((RIG *rig, vfo_op_t op));
|
||||
|
||||
extern HAMLIB_EXPORT(int) rig_restore_channel HAMLIB_PARAMS((RIG *rig, const channel_t *chan)); /* curr VFO */
|
||||
extern HAMLIB_EXPORT(int) rig_save_channel HAMLIB_PARAMS((RIG *rig, channel_t *chan));
|
||||
extern HAMLIB_EXPORT(int) rig_set_channel HAMLIB_PARAMS((RIG *rig, const channel_t *chan)); /* mem */
|
||||
extern HAMLIB_EXPORT(int) rig_get_channel HAMLIB_PARAMS((RIG *rig, channel_t *chan));
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __GNUG__
|
||||
# if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8))
|
||||
# if HAVE_TYPEINFO
|
||||
|
|
Ładowanie…
Reference in New Issue