FreeCalypso > hg > freecalypso-hwlab
comparison simtool/select.c @ 94:b84df973cd8b
fc-simtool: parse_ef_select_response() function added
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 24 Jan 2021 20:35:23 +0000 |
parents | d4150123ca45 |
children | 5f826e428641 |
comparison
equal
deleted
inserted
replaced
93:d4150123ca45 | 94:b84df973cd8b |
---|---|
171 default: | 171 default: |
172 printf("File type: %02X (unknown)\n", sim_resp_data[6]); | 172 printf("File type: %02X (unknown)\n", sim_resp_data[6]); |
173 } | 173 } |
174 return(0); | 174 return(0); |
175 } | 175 } |
176 | |
177 parse_ef_select_response() | |
178 { | |
179 if (sim_resp_data_len < 14) { | |
180 fprintf(stderr, | |
181 "error: SELECT response length of %u bytes is too short\n", | |
182 sim_resp_data_len); | |
183 return(-1); | |
184 } | |
185 if (sim_resp_data[6] != 0x04) { | |
186 fprintf(stderr, "error: selected file is not an EF\n"); | |
187 return(-1); | |
188 } | |
189 curfile_total_size = (sim_resp_data[2] << 8) | sim_resp_data[3]; | |
190 curfile_structure = sim_resp_data[13]; | |
191 switch (curfile_structure) { | |
192 case 0x00: | |
193 /* transparent */ | |
194 break; | |
195 case 0x01: | |
196 case 0x03: | |
197 /* record-based */ | |
198 if (sim_resp_data_len < 15) { | |
199 fprintf(stderr, | |
200 "error: SELECT response length of %u bytes is too short for record-based EF\n", | |
201 sim_resp_data_len); | |
202 return(-1); | |
203 } | |
204 curfile_record_len = sim_resp_data[14]; | |
205 if (!curfile_record_len) { | |
206 fprintf(stderr, | |
207 "error: SELECT response indicates record length of 0\n"); | |
208 return(-1); | |
209 } | |
210 if (curfile_total_size % curfile_record_len) { | |
211 fprintf(stderr, | |
212 "error: returned file size is not divisible by record length\n"); | |
213 return(-1); | |
214 } | |
215 curfile_record_count = curfile_total_size / curfile_record_len; | |
216 break; | |
217 default: | |
218 fprintf(stderr, "error: unknown EF structure code %02X\n", | |
219 curfile_structure); | |
220 return(-1); | |
221 } | |
222 return(0); | |
223 } |