@@ -19,7 +19,8 @@ use crate::{
1919} ;
2020use alloc:: { boxed:: Box , string:: String , sync:: Arc , vec, vec:: Vec } ;
2121use core:: { ffi:: c_char, ffi:: c_void, mem:: size_of, ptr, slice, str:: from_utf8} ;
22-
22+ use crate :: config:: get_message_data_type;
23+ use crate :: MessageDataType :: NoData ;
2324// ============================================================================
2425// Constants / basic types shared with the C side
2526// ============================================================================
@@ -242,7 +243,7 @@ unsafe fn write_str_to_buf(s: &str, buf: *mut c_char, buf_len: usize) -> i32 {
242243/// Used in FFI logging helpers.
243244#[ inline]
244245fn width_is_valid ( width : usize ) -> bool {
245- matches ! ( width, 1 | 2 | 4 | 8 | 16 )
246+ matches ! ( width, 0 | 1 | 2 | 4 | 8 | 16 )
246247}
247248
248249/// FFI-facing clock adapter that calls back into C when present.
@@ -593,6 +594,22 @@ fn finish_with<T: LeBytes + Copy>(
593594 required_elems : usize ,
594595 elem_size : usize ,
595596) -> i32 {
597+ if get_message_data_type ( ty) == NoData {
598+ return ok_or_status ( unsafe {
599+ let router = & ( * r) . inner ; // shared borrow
600+ if queue {
601+ match ts {
602+ Some ( t) => router. log_queue_ts :: < T > ( ty, t, & [ ] ) ,
603+ None => router. log_queue :: < T > ( ty, & [ ] ) ,
604+ }
605+ } else {
606+ match ts {
607+ Some ( t) => router. log_ts :: < T > ( ty, t, & [ ] ) ,
608+ None => router. log :: < T > ( ty, & [ ] ) ,
609+ }
610+ }
611+ } ) ;
612+ }
596613 let mut tmp: Vec < T > = Vec :: with_capacity ( required_elems) ;
597614 // vectorize_data reads unaligned little-endian elements into tmp
598615 if let Err ( _) = vectorize_data :: < T > ( padded. as_ptr ( ) , required_elems, elem_size, & mut tmp) {
@@ -1136,7 +1153,6 @@ pub extern "C" fn seds_pkt_data_ptr(
11361153 view. payload as * const c_void
11371154}
11381155
1139-
11401156macro_rules! impl_seds_pkt_get_typed_from_packet {
11411157 ( $fname: ident, $method: ident, $ty: ty) => {
11421158 #[ unsafe ( no_mangle) ]
@@ -1182,7 +1198,6 @@ macro_rules! impl_seds_pkt_get_typed_from_packet {
11821198 } ;
11831199}
11841200
1185-
11861201// Typed getters using TelemetryPacket's data_as_* helpers.
11871202// All use "query" semantics like seds_pkt_copy_data:
11881203// - If out is NULL or out_elems < needed, return needed (element count) and do not copy.
@@ -1191,12 +1206,12 @@ macro_rules! impl_seds_pkt_get_typed_from_packet {
11911206impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_f32, data_as_f32, f32 ) ;
11921207impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_f64, data_as_f64, f64 ) ;
11931208
1194- impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_u8, data_as_u8, u8 ) ;
1209+ impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_u8, data_as_u8, u8 ) ;
11951210impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_u16, data_as_u16, u16 ) ;
11961211impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_u32, data_as_u32, u32 ) ;
11971212impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_u64, data_as_u64, u64 ) ;
11981213
1199- impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_i8, data_as_i8, i8 ) ;
1214+ impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_i8, data_as_i8, i8 ) ;
12001215impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_i16, data_as_i16, i16 ) ;
12011216impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_i32, data_as_i32, i32 ) ;
12021217impl_seds_pkt_get_typed_from_packet ! ( seds_pkt_get_i64, data_as_i64, i64 ) ;
@@ -1232,9 +1247,7 @@ pub extern "C" fn seds_pkt_get_string(
12321247}
12331248
12341249#[ unsafe( no_mangle) ]
1235- pub extern "C" fn seds_pkt_get_string_len (
1236- pkt : * const SedsPacketView ,
1237- ) -> i32 {
1250+ pub extern "C" fn seds_pkt_get_string_len ( pkt : * const SedsPacketView ) -> i32 {
12381251 if pkt. is_null ( ) {
12391252 return status_from_err ( TelemetryError :: BadArg ) ;
12401253 }
0 commit comments