firewire_dice_protocols/
lib.rs

1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (c) 2020 Takashi Sakamoto
3
4#![doc = include_str!("../README.md")]
5
6pub mod alesis;
7pub mod avid;
8pub mod focusrite;
9pub mod lexicon;
10pub mod loud;
11pub mod maudio;
12pub mod presonus;
13pub mod tcat;
14pub mod tcelectronic;
15pub mod weiss;
16
17use {
18    glib::Error,
19    hinawa::{FwNode, FwReq},
20};
21
22fn serialize_bool(val: &bool, raw: &mut [u8]) {
23    assert!(raw.len() >= 4);
24
25    raw[..4].copy_from_slice(&(*val as u32).to_be_bytes())
26}
27
28fn deserialize_bool(val: &mut bool, raw: &[u8]) {
29    assert!(raw.len() >= 4);
30
31    let mut quadlet = [0; 4];
32    quadlet.copy_from_slice(&raw[..4]);
33    *val = u32::from_be_bytes(quadlet) > 0;
34}
35
36fn serialize_i32(val: &i32, raw: &mut [u8]) {
37    assert!(raw.len() >= 4);
38
39    raw[..4].copy_from_slice(&val.to_be_bytes())
40}
41
42fn deserialize_i32(val: &mut i32, raw: &[u8]) {
43    assert!(raw.len() >= 4);
44
45    let mut quadlet = [0; 4];
46    quadlet.copy_from_slice(&raw[..4]);
47    *val = i32::from_be_bytes(quadlet);
48}
49
50fn serialize_i8(val: &i8, raw: &mut [u8]) {
51    serialize_i32(&(*val as i32), raw)
52}
53
54fn deserialize_i8(val: &mut i8, raw: &[u8]) {
55    let mut v = 0i32;
56    deserialize_i32(&mut v, raw);
57    *val = v as i8;
58}
59
60fn serialize_i16(val: &i16, raw: &mut [u8]) {
61    serialize_i32(&(*val as i32), raw)
62}
63
64fn deserialize_i16(val: &mut i16, raw: &[u8]) {
65    let mut v = 0i32;
66    deserialize_i32(&mut v, raw);
67    *val = v as i16;
68}
69
70fn serialize_u32(val: &u32, raw: &mut [u8]) {
71    assert!(raw.len() >= 4);
72
73    raw[..4].copy_from_slice(&val.to_be_bytes())
74}
75
76fn deserialize_u32(val: &mut u32, raw: &[u8]) {
77    assert!(raw.len() >= 4);
78
79    let mut quadlet = [0; 4];
80    quadlet.copy_from_slice(&raw[..4]);
81    *val = u32::from_be_bytes(quadlet);
82}
83
84fn serialize_u8(val: &u8, raw: &mut [u8]) {
85    assert!(raw.len() >= 4);
86
87    serialize_u32(&(*val as u32), raw);
88}
89
90fn deserialize_u8(val: &mut u8, raw: &[u8]) {
91    assert!(raw.len() >= 4);
92
93    let mut v = 0u32;
94    deserialize_u32(&mut v, raw);
95    *val = v as u8;
96}
97
98fn serialize_usize(val: &usize, raw: &mut [u8]) {
99    assert!(raw.len() >= 4);
100
101    serialize_u32(&(*val as u32), raw);
102}
103
104fn deserialize_usize(val: &mut usize, raw: &[u8]) {
105    assert!(raw.len() >= 4);
106
107    let mut v = 0u32;
108    deserialize_u32(&mut v, raw);
109    *val = v as usize;
110}