aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2023-07-17 18:27:14 +0900
committer坂本 貴史 <o-takashi@sakamocchi.jp>2023-07-17 22:49:46 +0900
commita32b1bff36e517184bcaa33bb51d9c8d88d38282 (patch)
tree4969bcbb7018f35666a92aaeb15af7148ec5e9d0
parent42b29538e8ddb205534ab1211423a96781d6f466 (diff)
downloadlibhinoko-a32b1bff36e517184bcaa33bb51d9c8d88d38282.tar.gz
fw_iso_it: implement Hinoko.FwIsoCtx.read_cycle_time() method
This commit implements the new abstract method. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
-rwxr-xr-xsamples/iso-it12
-rw-r--r--src/fw_iso_it.c14
-rwxr-xr-xtests/fw-iso-it2
3 files changed, 21 insertions, 7 deletions
diff --git a/samples/iso-it b/samples/iso-it
index 9b1c09f..470626c 100755
--- a/samples/iso-it
+++ b/samples/iso-it
@@ -4,10 +4,8 @@ from threading import Timer
from struct import unpack,pack
import gi
-gi.require_version('GLib', '2.0')
-from gi.repository import GLib
-gi.require_version('Hinoko', '0.0')
-from gi.repository import Hinoko
+gi.require_versions({'GLib': '2.0', 'Hinawa': '3.0', 'Hinoko': '0.0'})
+from gi.repository import GLib, Hinawa, Hinoko
class IsoIt(Hinoko.FwIsoIt):
def new(self, path, channel, maximum_bytes_per_payload, packets_per_buffer):
@@ -47,10 +45,10 @@ class IsoIt(Hinoko.FwIsoIt):
self.sy = 0
# Start 100 msec later. Scheduling is available with lower 2 bits of second field.
- cycle_timer = Hinoko.CycleTimer.new()
+ cycle_time = Hinawa.CycleTime.new()
clock_id = 4 # CLOCK_MONOTONIC_RAW
- _, cycle_timer = self.get_cycle_timer(clock_id, cycle_timer)
- (sec, cycle, tick) = cycle_timer.get_cycle_timer()
+ _, cycle_time = self.read_cycle_time(clock_id, cycle_time)
+ (sec, cycle, tick) = cycle_time.get_fields()
sec, cycle = self.__increment_cycle(sec, cycle, 800)
cycle_match = (sec & 0x3, cycle)
diff --git a/src/fw_iso_it.c b/src/fw_iso_it.c
index 4553cee..5037f04 100644
--- a/src/fw_iso_it.c
+++ b/src/fw_iso_it.c
@@ -130,6 +130,19 @@ static void fw_iso_it_release(HinokoFwIsoCtx *inst)
fw_iso_ctx_state_release(&priv->state);
}
+static gboolean fw_iso_it_read_cycle_time(HinokoFwIsoCtx *inst, gint clock_id,
+ HinawaCycleTime *const *cycle_time, GError **error)
+{
+ HinokoFwIsoIt *self;
+ HinokoFwIsoItPrivate *priv;
+
+ g_return_val_if_fail(HINOKO_IS_FW_ISO_IT(inst), FALSE);
+ self = HINOKO_FW_ISO_IT(inst);
+ priv = hinoko_fw_iso_it_get_instance_private(self);
+
+ return fw_iso_ctx_state_read_cycle_time(&priv->state, clock_id, cycle_time, error);
+}
+
static gboolean fw_iso_it_get_cycle_timer(HinokoFwIsoCtx *inst, gint clock_id,
HinokoCycleTimer *const *cycle_timer,
GError **error)
@@ -203,6 +216,7 @@ static void fw_iso_ctx_iface_init(HinokoFwIsoCtxInterface *iface)
iface->stop = fw_iso_it_stop;
iface->unmap_buffer = fw_iso_it_unmap_buffer;
iface->release = fw_iso_it_release;
+ iface->read_cycle_time = fw_iso_it_read_cycle_time;
iface->get_cycle_timer = fw_iso_it_get_cycle_timer;
iface->flush_completions = fw_iso_it_flush_completions;
iface->create_source = fw_iso_it_create_source;
diff --git a/tests/fw-iso-it b/tests/fw-iso-it
index 69ef456..319fbaf 100755
--- a/tests/fw-iso-it
+++ b/tests/fw-iso-it
@@ -25,6 +25,7 @@ methods = (
'stop',
'unmap_buffer',
'release',
+ 'read_cycle_time',
'get_cycle_timer',
'create_source',
'flush_completions',
@@ -35,6 +36,7 @@ vmethods = (
'do_stop',
'do_unmap_buffer',
'do_release',
+ 'do_read_cycle_time',
'do_get_cycle_timer',
'do_flush_completions',
'do_create_source',