module VPCD_Types {

/* VPCD/VPICC Types, implementing the protocol used by vpcd/vpicc of
 * vsmartcard.git by Frank Morgner.
 */

import from General_Types all;
import from Osmocom_Types all;

type enumerated VPCD_CtrlCmd {
	VPCD_CTRL_OFF	(0),
	VPCD_CTRL_ON	(1),
	VPCD_CTRL_RESET (2),
	VPCD_CTRL_ATR	(4)
} with { variant "FIELDLENGTH(8)" };

type union VPCD_MsgUnion {
	VPCD_CtrlCmd	ctrl,
	octetstring	data
};

type record VPCD_PDU {
	uint16_t 	len,
	VPCD_MsgUnion	u
} with {
	variant (len) "LENGTHTO(u)"
	variant (u) "CROSSTAG(
			ctrl,	len = 1;
			data,	OTHERWISE)"
};


template (value) VPCD_PDU ts_VPCD_CTRL(template (value) VPCD_CtrlCmd cmd) := {
	len := 0, // overwritten
	u := {
		ctrl := cmd
	}
}
template (value) VPCD_PDU ts_VPCD_CTRL_OFF := ts_VPCD_CTRL(VPCD_CTRL_OFF);
template (value) VPCD_PDU ts_VPCD_CTRL_ON := ts_VPCD_CTRL(VPCD_CTRL_ON);
template (value) VPCD_PDU ts_VPCD_CTRL_RESET := ts_VPCD_CTRL(VPCD_CTRL_RESET);
template (value) VPCD_PDU ts_VPCD_CTRL_ATR := ts_VPCD_CTRL(VPCD_CTRL_ATR);
template (value) VPCD_PDU ts_VPCD_DATA(template (value) octetstring data) := {
	len := 0, //overwritten
	u := {
		data := data
	}
}

template (present) VPCD_PDU tr_VPCD_CTRL(template (present) VPCD_CtrlCmd cmd) := {
	len := ?,
	u := {
		ctrl := cmd
	}
}
template (present) VPCD_PDU tr_VPCD_CTRL_OFF := tr_VPCD_CTRL(VPCD_CTRL_OFF);
template (present) VPCD_PDU tr_VPCD_CTRL_ON := tr_VPCD_CTRL(VPCD_CTRL_ON);
template (present) VPCD_PDU tr_VPCD_CTRL_RESET := tr_VPCD_CTRL(VPCD_CTRL_RESET);
template (present) VPCD_PDU tr_VPCD_CTRL_ATR := tr_VPCD_CTRL(VPCD_CTRL_ATR);
template (present) VPCD_PDU tr_VPCD_DATA(template (present) octetstring data) := {
	len := ?,
	u := {
		data := data
	}
}

external function enc_VPCD_PDU(in VPCD_PDU msg) return octetstring
	with { extension "prototype(convert) encode(RAW)" };

external function dec_VPCD_PDU(in octetstring msg) return VPCD_PDU
	with { extension "prototype(convert) decode(RAW)" };



} with { encode "RAW" };
