@@ -102,7 +102,11 @@ package body Controller.Messages is
102
102
Handle : CubedOS.File_Server.API.File_Handle_Type;
103
103
Read_Request : Message_Record;
104
104
Incomming_Message : Message_Record;
105
- Header : CubedOS.Lib.Space_Packets.Primary_Header;
105
+ Amount_Read : Read_Result_Size_Type;
106
+ Data : CubedOS.Lib.Octet_Array(0 .. 256 ); -- the data decoded from the image
107
+ Space_Packet : CubedOS.Lib.Space_Packets.Space_Packet(512 );
108
+ Space_Data : CubedOS.Lib.Octet_Array(0 .. 512 ); -- the full data to send in the space packet
109
+ Position : CubedOS.Lib.Octet_Array_Index := 0 ; -- the index to which Space_Data has been filled
106
110
begin
107
111
CubedOS.File_Server.API.Open_Reply_Decode
108
112
(Message => Message,
@@ -115,13 +119,13 @@ package body Controller.Messages is
115
119
elsif Handle = CubedOS.File_Server.API.Invalid_Handle then
116
120
CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
117
121
CubedOS.Log_Server.API.Error,
118
- " File failed to open" );
122
+ " Image file failed to open" );
119
123
else
120
124
CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
121
125
CubedOS.Log_Server.API.Informational,
122
- " File has been opened..." );
126
+ " Image file has been opened. Sending a read request ..." );
123
127
-- encode a space packet of 512 octets
124
- Header := CubedOS.Lib.Space_Packets.Format_Primary_Header
128
+ Space_Packet. Header := CubedOS.Lib.Space_Packets.Format_Primary_Header
125
129
(APID => 42 ,
126
130
Packet_Type => CubedOS.Lib.Space_Packets.Telemetry,
127
131
Sequence_Count => 0 ,
@@ -140,6 +144,46 @@ package body Controller.Messages is
140
144
CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
141
145
CubedOS.Log_Server.API.Informational,
142
146
" Received a read reply" );
147
+ Read_Reply_Decode(Incomming_Message, Handle, Amount_Read, Data, Status);
148
+ if Status = Malformed then
149
+ CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
150
+ CubedOS.Log_Server.API.Error,
151
+ " Read reply is malformed! Closing image..." );
152
+ Message_Manager.Route_Message
153
+ (CubedOS.File_Server.API.Close_Request_Encode
154
+ (Name_Resolver.Controller, 0 , Handle));
155
+ else
156
+ if Amount_Read = 0 then
157
+ CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
158
+ CubedOS.Log_Server.API.Informational,
159
+ " Finished reading image, closing file..." );
160
+ Message_Manager.Route_Message
161
+ (CubedOS.File_Server.API.Close_Request_Encode
162
+ (Name_Resolver.Controller, 0 , Handle));
163
+ if Position > 0 then
164
+ Space_Packet := CubedOS.Lib.Space_Packets.From_Raw_Array(Space_Data(Space_Data'First .. Position + Space_Data'First));
165
+ -- TODO: send last space packet
166
+ end if ;
167
+ elsif Position + Amount_Read > Space_Data'Last then
168
+ Space_Data(Position + Space_Data'First .. Space_Data'Last)
169
+ := Data(Data'First .. Space_Data'Last - Position + Data'First);
170
+ Space_Packet := CubedOS.Lib.Space_Packets.From_Raw_Array(Space_Data);
171
+ -- TODO: send space packet
172
+ Space_Data(Space_Data'First .. Data'Last - (Space_Data'Last - Position + Data'First))
173
+ := Data(Space_Data'Last - Position + Data'First .. Data'Last);
174
+ Position := Data'Last - (Space_Data'Last - Position) + 1 ;
175
+ Message_Manager.Route_Message
176
+ (CubedOS.File_Server.API.Read_Request_Encode(Name_Resolver.Controller, 0 , Handle, 256 ));
177
+ else
178
+ Space_Data(Position .. Position + Data'Length) := Data;
179
+ Position := Position + Data'Length + 1 ;
180
+ CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
181
+ CubedOS.Log_Server.API.Informational,
182
+ " Loading space packet" );
183
+ Message_Manager.Route_Message
184
+ (CubedOS.File_Server.API.Read_Request_Encode(Name_Resolver.Controller, 0 , Handle, 256 ));
185
+ end if ;
186
+ end if ;
143
187
else
144
188
CubedOS.Log_Server.API.Log_Message(Name_Resolver.Controller,
145
189
CubedOS.Log_Server.API.Error,
0 commit comments