mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-16 21:28:33 +03:00
iso7816_fidi: Add iso7816_3_ prefix to symbols; fix terminology
Fi/Di are not the index into the table, but the contents of the table as resolved by Fi_index / Di_index. Let's clarify the terminology. Change-Id: If364e08e7c9a3a9707e6d54b9267c6a7c088e415
This commit is contained in:
@@ -21,10 +21,10 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
/* Table 7 of ISO 7816-3:2006 */
|
/* Table 7 of ISO 7816-3:2006 */
|
||||||
extern const uint16_t fi_table[];
|
extern const uint16_t iso7816_3_fi_table[16];
|
||||||
|
|
||||||
/* Table 8 from ISO 7816-3:2006 */
|
/* Table 8 from ISO 7816-3:2006 */
|
||||||
extern const uint8_t di_table[];
|
extern const uint8_t iso7816_3_di_table[16];
|
||||||
|
|
||||||
/* compute the F/D ratio based on Fi and Di values */
|
/* compute the F/D ratio based on F_index and D_index values */
|
||||||
int compute_fidi_ratio(uint8_t fi, uint8_t di);
|
int iso7816_3_compute_fd_ratio(uint8_t f_index, uint8_t d_index);
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ static void emu_update_fidi(struct card_handle *ch)
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = compute_fidi_ratio(ch->F_index, ch->D_index);
|
rc = iso7816_3_compute_fd_ratio(ch->F_index, ch->D_index);
|
||||||
if (rc > 0 && rc < 0x400) {
|
if (rc > 0 && rc < 0x400) {
|
||||||
TRACE_INFO("%u: computed F(%u)/D(%u) ratio: %d\r\n", ch->num,
|
TRACE_INFO("%u: computed F(%u)/D(%u) ratio: %d\r\n", ch->num,
|
||||||
ch->F_index, ch->D_index, rc);
|
ch->F_index, ch->D_index, rc);
|
||||||
@@ -508,7 +508,7 @@ static int tx_byte_atr(struct card_handle *ch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* update waiting time (see ISO 7816-3 10.2) */
|
/* update waiting time (see ISO 7816-3 10.2) */
|
||||||
ch->waiting_time = ch->wi * 960 * fi_table[ch->F_index];
|
ch->waiting_time = ch->wi * 960 * iso7816_3_fi_table[ch->F_index];
|
||||||
tc_etu_set_wtime(ch->tc_chan, ch->waiting_time);
|
tc_etu_set_wtime(ch->tc_chan, ch->waiting_time);
|
||||||
/* go to next state */
|
/* go to next state */
|
||||||
card_set_state(ch, ISO_S_WAIT_TPDU);
|
card_set_state(ch, ISO_S_WAIT_TPDU);
|
||||||
@@ -647,7 +647,7 @@ static int tx_byte_pts(struct card_handle *ch)
|
|||||||
ch->F_index = byte >> 4;
|
ch->F_index = byte >> 4;
|
||||||
ch->D_index = byte & 0xf;
|
ch->D_index = byte & 0xf;
|
||||||
TRACE_DEBUG("%u: found F=%u D=%u\r\n", ch->num,
|
TRACE_DEBUG("%u: found F=%u D=%u\r\n", ch->num,
|
||||||
fi_table[ch->F_index], di_table[ch->D_index]);
|
iso7816_3_fi_table[ch->F_index], iso7816_3_di_table[ch->D_index]);
|
||||||
/* FIXME: if F or D are 0, become unresponsive to signal error condition */
|
/* FIXME: if F or D are 0, become unresponsive to signal error condition */
|
||||||
break;
|
break;
|
||||||
case PTS_S_WAIT_RESP_PTS2:
|
case PTS_S_WAIT_RESP_PTS2:
|
||||||
|
|||||||
@@ -23,38 +23,38 @@
|
|||||||
#include "iso7816_fidi.h"
|
#include "iso7816_fidi.h"
|
||||||
|
|
||||||
/* Table 7 of ISO 7816-3:2006 */
|
/* Table 7 of ISO 7816-3:2006 */
|
||||||
const uint16_t fi_table[] = {
|
const uint16_t iso7816_3_fi_table[] = {
|
||||||
372, 372, 558, 744, 1116, 1488, 1860, 0,
|
372, 372, 558, 744, 1116, 1488, 1860, 0,
|
||||||
0, 512, 768, 1024, 1536, 2048, 0, 0
|
0, 512, 768, 1024, 1536, 2048, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Table 8 from ISO 7816-3:2006 */
|
/* Table 8 from ISO 7816-3:2006 */
|
||||||
const uint8_t di_table[] = {
|
const uint8_t iso7816_3_di_table[] = {
|
||||||
0, 1, 2, 4, 8, 16, 32, 64,
|
0, 1, 2, 4, 8, 16, 32, 64,
|
||||||
12, 20, 2, 4, 8, 16, 32, 64,
|
12, 20, 2, 4, 8, 16, 32, 64,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* compute the F/D ratio based on Fi and Di values */
|
/* compute the F/D ratio based on Fi and Di values */
|
||||||
int compute_fidi_ratio(uint8_t fi, uint8_t di)
|
int iso7816_3_compute_fd_ratio(uint8_t f_index, uint8_t d_index)
|
||||||
{
|
{
|
||||||
uint16_t f, d;
|
uint16_t f, d;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (fi >= ARRAY_SIZE(fi_table) ||
|
if (f_index >= ARRAY_SIZE(iso7816_3_fi_table) ||
|
||||||
di >= ARRAY_SIZE(di_table))
|
d_index >= ARRAY_SIZE(iso7816_3_di_table))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
f = fi_table[fi];
|
f = iso7816_3_fi_table[f_index];
|
||||||
if (f == 0)
|
if (f == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
d = di_table[di];
|
d = iso7816_3_di_table[d_index];
|
||||||
if (d == 0)
|
if (d == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* See table 7 of ISO 7816-3: From 1000 on we divide by 1/d,
|
/* See table 7 of ISO 7816-3: From 1000 on we divide by 1/d,
|
||||||
* which equals a multiplication by d */
|
* which equals a multiplication by d */
|
||||||
if (di < 8)
|
if (d_index < 8)
|
||||||
ret = f / d;
|
ret = f / d;
|
||||||
else
|
else
|
||||||
ret = f * d;
|
ret = f * d;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ void update_fidi(Usart_info *usart, uint8_t fidi)
|
|||||||
|
|
||||||
uint8_t fi = fidi >> 4;
|
uint8_t fi = fidi >> 4;
|
||||||
uint8_t di = fidi & 0xf;
|
uint8_t di = fidi & 0xf;
|
||||||
int ratio = compute_fidi_ratio(fi, di);
|
int ratio = iso7816_3_compute_fd_ratio(fi, di);
|
||||||
|
|
||||||
if (ratio > 0 && ratio < 0x8000) {
|
if (ratio > 0 && ratio < 0x8000) {
|
||||||
/* make sure USART uses new F/D ratio */
|
/* make sure USART uses new F/D ratio */
|
||||||
|
|||||||
@@ -658,9 +658,10 @@ static void process_byte_pps(uint8_t byte)
|
|||||||
fn = 1;
|
fn = 1;
|
||||||
dn = 1;
|
dn = 1;
|
||||||
}
|
}
|
||||||
TRACE_INFO("PPS negotiation successful: Fn=%u Dn=%u\n\r", fi_table[fn], di_table[dn]);
|
TRACE_INFO("PPS negotiation successful: Fn=%u Dn=%u\n\r",
|
||||||
|
iso7816_3_fi_table[fn], iso7816_3_di_table[dn]);
|
||||||
update_fidi(&sniff_usart, pps_cur[2]);
|
update_fidi(&sniff_usart, pps_cur[2]);
|
||||||
update_wt(0, di_table[dn]);
|
update_wt(0, iso7816_3_di_table[dn]);
|
||||||
usb_send_fidi(pps_cur[2]); /* send Fi/Di change notification to host software over USB */
|
usb_send_fidi(pps_cur[2]); /* send Fi/Di change notification to host software over USB */
|
||||||
} else { /* checksum is invalid */
|
} else { /* checksum is invalid */
|
||||||
TRACE_INFO("PPS negotiation failed\n\r");
|
TRACE_INFO("PPS negotiation failed\n\r");
|
||||||
|
|||||||
Reference in New Issue
Block a user