2 EIBD eib bus access and management daemon
3 Copyright (C) 2005-2011 Martin Koegler <mkoegler@auto.tuwien.ac.at>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 TPDU::fromPacket (const CArray
& c
)
29 if ((c
[0] & 0xfc) == 0)
30 t
= new T_DATA_XXX_REQ_PDU ();
32 t
= new T_CONNECT_REQ_PDU ();
34 t
= new T_DISCONNECT_REQ_PDU ();
35 if ((c
[0] & 0xC3) == 0xC2)
37 if ((c
[0] & 0xC3) == 0xC3)
38 t
= new T_NACK_PDU ();
39 if ((c
[0] & 0xC0) == 0x40)
40 t
= new T_DATA_CONNECTED_REQ_PDU ();
47 t
= new T_UNKNOWN_PDU ();
55 T_UNKNOWN_PDU::T_UNKNOWN_PDU ()
60 T_UNKNOWN_PDU::init (const CArray
& c
)
66 CArray
T_UNKNOWN_PDU::ToPacket ()
71 String
T_UNKNOWN_PDU::Decode ()
81 for (i
= 0; i
< pdu (); i
++)
89 T_DATA_XXX_REQ_PDU::T_DATA_XXX_REQ_PDU ()
94 T_DATA_XXX_REQ_PDU::init (const CArray
& c
)
102 CArray
T_DATA_XXX_REQ_PDU::ToPacket ()
104 assert (data () > 0);
107 pdu
[0] = (pdu
[0] & 0x3);
111 String
T_DATA_XXX_REQ_PDU::Decode ()
114 a
= APDU::fromPacket (data
);
116 s ("T_DATA_XXX_REQ ");
123 /* T_DATA_CONNECTED_REQ */
125 T_DATA_CONNECTED_REQ_PDU::T_DATA_CONNECTED_REQ_PDU ()
131 T_DATA_CONNECTED_REQ_PDU::init (const CArray
& c
)
136 serno
= (c
[0] >> 2) & 0x0f;
140 CArray
T_DATA_CONNECTED_REQ_PDU::ToPacket ()
142 assert (data () > 0);
143 assert ((serno
& 0xf0) == 0);
146 pdu
[0] = (pdu
[0] & 0x3) | 0x40 | ((serno
& 0x0f) << 2);
150 String
T_DATA_CONNECTED_REQ_PDU::Decode ()
152 assert ((serno
& 0xf0) == 0);
154 a
= APDU::fromPacket (data
);
156 s ("T_DATA_CONNECTED_REQ serno:");
166 T_CONNECT_REQ_PDU::T_CONNECT_REQ_PDU ()
171 T_CONNECT_REQ_PDU::init (const CArray
& c
)
178 CArray
T_CONNECT_REQ_PDU::ToPacket ()
182 return CArray (&c
, 1);
185 String
T_CONNECT_REQ_PDU::Decode ()
187 return "T_CONNECT_REQ";
190 /* T_DISCONNECT_REQ */
192 T_DISCONNECT_REQ_PDU::T_DISCONNECT_REQ_PDU ()
197 T_DISCONNECT_REQ_PDU::init (const CArray
& c
)
204 CArray
T_DISCONNECT_REQ_PDU::ToPacket ()
208 return CArray (&c
, 1);
211 String
T_DISCONNECT_REQ_PDU::Decode ()
213 return "T_DISCONNECT_REQ";
218 T_ACK_PDU::T_ACK_PDU ()
224 T_ACK_PDU::init (const CArray
& c
)
228 serno
= (c
[0] >> 2) & 0x0f;
232 CArray
T_ACK_PDU::ToPacket ()
234 assert ((serno
& 0xf0) == 0);
236 c
= 0xC2 | ((serno
& 0x0f) << 2);
237 return CArray (&c
, 1);
240 String
T_ACK_PDU::Decode ()
242 assert ((serno
& 0xf0) == 0);
251 T_NACK_PDU::T_NACK_PDU ()
256 bool T_NACK_PDU::init (const CArray
& c
)
260 serno
= (c
[0] >> 2) & 0x0f;
264 CArray
T_NACK_PDU::ToPacket ()
266 assert ((serno
& 0xf0) == 0);
268 c
= 0xC3 | ((serno
& 0x0f) << 2);
269 return CArray (&c
, 1);
272 String
T_NACK_PDU::Decode ()
274 assert ((serno
& 0xf0) == 0);