From 23d4b69ce1606a8dcbe55fa8506aace3d4442dc4 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Thu, 28 Mar 2024 18:24:27 +0000 Subject: [PATCH] Implement vhpi_get_cb_info --- src/vhpi/vhpi-model.c | 15 ++++++++++++++- test/vhpi/vhpi1.c | 7 ++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/vhpi/vhpi-model.c b/src/vhpi/vhpi-model.c index c49d579e..4ee749a5 100644 --- a/src/vhpi/vhpi-model.c +++ b/src/vhpi/vhpi-model.c @@ -1854,7 +1854,20 @@ int vhpi_enable_cb(vhpiHandleT cb_obj) DLLEXPORT int vhpi_get_cb_info(vhpiHandleT object, vhpiCbDataT *cb_data_p) { - VHPI_MISSING; + vhpi_clear_error(); + + VHPI_TRACE("object=%s", handle_pp(object)); + + c_vhpiObject *obj = from_handle(object); + if (obj == NULL) + return 1; + + c_callback *cb = cast_callback(obj); + if (cb == NULL) + return 1; + + *cb_data_p = cb->data; + return 0; } DLLEXPORT diff --git a/test/vhpi/vhpi1.c b/test/vhpi/vhpi1.c index a037175c..f8c5941c 100644 --- a/test/vhpi/vhpi1.c +++ b/test/vhpi/vhpi1.c @@ -551,6 +551,12 @@ void vhpi1_startup(void) check_error(); fail_unless(vhpi_get(vhpiStateP, handle_sos) == vhpiEnable); + vhpiCbDataT cb_data_rtn; + vhpi_get_cb_info(handle_sos, &cb_data_rtn); + fail_unless(cb_data_rtn.reason == vhpiCbStartOfSimulation); + fail_unless(cb_data_rtn.cb_rtn == start_of_sim); + fail_unless(cb_data_rtn.user_data == cb_data1.user_data); + vhpiCbDataT cb_data2 = { .reason = vhpiCbEndOfSimulation, .cb_rtn = end_of_sim @@ -579,5 +585,4 @@ void vhpi1_startup(void) fail_unless(vhpi_get(vhpiArgcP, tool) == i); vhpi_release_handle(tool); - } -- 2.39.2