diff --git a/src/osdi/osdiext.h b/src/osdi/osdiext.h index 9174a2cf3..936424c86 100644 --- a/src/osdi/osdiext.h +++ b/src/osdi/osdiext.h @@ -22,6 +22,7 @@ extern int OSDIparam(int, IFvalue *, GENinstance *, IFvalue *); extern int OSDIsetup(SMPmatrix *, GENmodel *, CKTcircuit *, int *); extern int OSDIunsetup(GENmodel *, CKTcircuit *); extern int OSDIask(CKTcircuit *, GENinstance *, int, IFvalue *, IFvalue *); +extern int OSDImAsk(CKTcircuit *, GENmodel *, int, IFvalue *); extern int OSDIload(GENmodel *, CKTcircuit *); extern int OSDItemp(GENmodel *, CKTcircuit *); extern int OSDIacLoad(GENmodel *, CKTcircuit *); @@ -39,5 +40,4 @@ extern int OSDIbindCSCComplex(GENmodel *inModel, CKTcircuit *ckt); /* extern int OSDIconvTest(GENmodel*,CKTcircuit*); */ /* extern int OSDImDelete(GENmodel*); */ /* extern int OSDIgetic(GENmodel*,CKTcircuit*); */ -/* extern int OSDImAsk(CKTcircuit*,GENmodel*,int,IFvalue*); */ /* extern int OSDIsoaCheck(CKTcircuit *, GENmodel *); */ diff --git a/src/osdi/osdiinit.c b/src/osdi/osdiinit.c index b647de25e..58174d022 100644 --- a/src/osdi/osdiinit.c +++ b/src/osdi/osdiinit.c @@ -188,6 +188,7 @@ extern SPICEdev *osdi_create_spicedev(const OsdiRegistryEntry *entry) { OSDIinfo->DEVparam = OSDIparam; OSDIinfo->DEVmodParam = OSDImParam; OSDIinfo->DEVask = OSDIask; + OSDIinfo->DEVmodAsk = OSDImAsk; OSDIinfo->DEVsetup = OSDIsetup; OSDIinfo->DEVpzSetup = OSDIsetup; OSDIinfo->DEVtemperature = OSDItemp; diff --git a/src/osdi/osdiparam.c b/src/osdi/osdiparam.c index bf39aaa19..f4664629d 100644 --- a/src/osdi/osdiparam.c +++ b/src/osdi/osdiparam.c @@ -162,3 +162,21 @@ extern int OSDIask(CKTcircuit *ckt, GENinstance *instPtr, int id, void *src = descr->access(inst, model, (uint32_t)id, flags); return osdi_read_param(src, value, id, descr); } + +extern int OSDImAsk(CKTcircuit *ckt, GENmodel *modelPtr, int id, + IFvalue *value) { + + NG_IGNORE(ckt); + + OsdiRegistryEntry *entry = osdi_reg_entry_model(modelPtr); + const OsdiDescriptor *descr = entry->descriptor; + + void *model = osdi_model_data(modelPtr); + + if (id >= (int)(descr->num_params)) { + return (E_BADPARM); + } + + void *src = descr->access(NULL, model, (uint32_t)id, ACCESS_FLAG_READ); + return osdi_read_param(src, value, id, descr); +}