@@ -4,6 +4,7 @@ const std = @import("std");
44
55const Ccsds = @This ();
66
7+ packetType : pktType ,
78header : HeaderMetadata ,
89primaryHeader : []const u8 ,
910secondaryHeader : ? []const u8 ,
@@ -13,6 +14,24 @@ allocator: std.mem.Allocator,
1314
1415pub fn init (pl : []const u8 , allocator : std.mem.Allocator , config : ? Config ) ! Ccsds {
1516 var rawPackets = try allocator .dupe (u8 , pl ); // dupe so it doesn't go out of scope too early
17+ const primaryHeader = rawPackets [0.. 6];
18+ const headers = fetchHeader (rawPackets , config );
19+ const end = 5 + headers .header .packetSize ; // num of header bytes + packet_size
20+ const packets = rawPackets [headers .start .. end ];
21+
22+ _ = allocator .resize (rawPackets , end );
23+
24+ return .{
25+ .header = headers .header ,
26+ .primaryHeader = primaryHeader ,
27+ .secondaryHeader = headers .secondaryHeader ,
28+ .packets = packets ,
29+ .rawData = rawPackets ,
30+ .allocator = allocator ,
31+ };
32+ }
33+
34+ pub fn fetchHeader (rawPackets : []u8 , config : ? Config ) struct {header : HeaderMetadata , secondaryHeader : ? []const u8 , start : u8 } {
1635 const primaryHeader = rawPackets [0.. 6];
1736 const version = @as (u3 , @truncate ((primaryHeader [0 ] >> 5 ) & 0x07 ));
1837 const packetType = @as (u1 , @truncate ((primaryHeader [0 ] >> 4 ) & 0x01 ));
@@ -46,18 +65,11 @@ pub fn init(pl: []const u8, allocator: std.mem.Allocator, config: ?Config) !Ccsd
4665 .packetSequenceCount = packetSequenceCount ,
4766 .packetSize = packetSize + 1 ,
4867 };
49- const end = 5 + header .packetSize ; // num of header bytes + packet_size
50- const packets = rawPackets [start .. end ];
51-
52- _ = allocator .resize (rawPackets , end );
5368
5469 return .{
55- .header = header ,
56- .primaryHeader = primaryHeader ,
57- .secondaryHeader = secondaryHeader ,
58- .packets = packets ,
59- .rawData = rawPackets ,
60- .allocator = allocator ,
70+ .header = header ,
71+ .secondaryHeader = secondaryHeader ,
72+ .start = start ,
6173 };
6274}
6375
@@ -83,6 +95,11 @@ pub const HeaderMetadata = packed struct {
8395 packetSize : u16 ,
8496};
8597
98+ pub const pktType = enum {
99+ spacePkt ,
100+ uslp
101+ };
102+
86103/// If you choose to use the CCSDS config you need to call this function first to get the Config struct
87104pub fn parseConfig (configContent : []const u8 , allocator : std.mem.Allocator ) ! Config {
88105 const configParsed = try std .json .parseFromSlice (Config , allocator , configContent , .{});
0 commit comments