aboutsummaryrefslogtreecommitdiffstats
path: root/src/fuvst/mup.h
blob: f1fefd1ad1787ec468d4634ef85cb28653f6096c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#define OPCODE_SWAF	0xc0	/* Wiederanlaufauftrag der BS */
#define OPCODE_SWQU	0xe0	/* Wiederanlaufquittung des MSC */

#define OPCODE_SSSAF	0xcc	/* Sprechkanal-Sammel-Sperrauftrag der BS */
#define OPCODE_SSSQU	0xec	/* Sprechkanal-Sammel-Sperrquitting des MSC */
#define OPCODE_SSAF	0xd8	/* SPRECHKANAL-SPERR-AUFTRAG DER BS */
#define OPCODE_SSQU	0xd1	/* SPRECHKANAL-SPERR-QUITTUNG VON DER MSC */
#define OPCODE_SFAF	0xda	/* SPRECHKANAL-FREIGABE-AUFTRAG DER BS */
#define OPCODE_SFQU	0xd3	/* SPRECHKANAL-FREIGABE-QUITTUNG VON DER MSC */

#define OPCODE_SUAF	0xc5	/* Datum-Uhrzeit-Auftrag der BS */
#define OPCODE_SUQU	0xe6	/* Datum-Uhrzeit-Quittung des MSC */

#define OPCODE_SVAF	0xc2	/* Vermittlungsfaehig-Auftrag der BS */
#define OPCODE_SVQU	0xe2	/* Vermittlungsfaehig-Quittung des MSC */

#define OPCODE_YLSAF	0xc3	/* Systemmeldungsanforderung an MSC */
#define OPCODE_YLSMU	0xe3	/* Systemmeldungsbestaetigung vom MSC */
#define OPCODE_YLSMF	0xdf	/* Systemmeldung an MSC */
#define OPCODE_YLSEF	0xcb	/* Systemmeldungsuebertragungsende an MSC */

#define OPCODE_STDAF	0xc6	/* Tarifdatenauftrag der BS */
#define OPCODE_XGTAU	0x90	/* Tarifdatensignalisierung vom MSC */

#define OPCODE_EBAF	0x09	/* EINBUCHUNGS-AUFTRAG DER BS */
#define OPCODE_EBPQU	0x01	/* EINBUCHUNGS-POSITIV-QUITTUNG VOM MSC */
#define OPCODE_EBNQU	0x02	/* EINBUCHUNGS-NEGATIV-QUITTUNG VOM MSC */

#define OPCODE_ABAF	0x08	/* AUSBUCHUNGS-AUFTRAG DER BS */

#define OPCODE_GVAF	0x12	/* GEHENDER VERBINDUNGS-AUFTRAG DER BS */
#define OPCODE_GVWAF	0x13	/* GEHENDER VERBINDUNGS-WARTESCHLANGEN-AUFTRAG DER BS */
#define OPCODE_GVPQU	0x22	/* GEHENDE VERBINDUNGS-POSITIV-QUITTUNG VOM MSC */
#define OPCODE_GVNQU	0x23	/* GEHENDE VERBINDUNGS-NEGATIV-QUITTUNG VOM MSC */

#define OPCODE_KVAU	0x20	/* KOMMENDER VERBINDUNGS-AUFTRAG VOM MSC */
#define OPCODE_KVWQF	0x11	/* KOMMENDE VERBINDUNGS-WARTESCHLANGEN-QUITTUNG DER BS */
#define OPCODE_KVBAF	0x10	/* KOMMENDE VERBINDUNGS-BEGINN-AUFTRAG DER BS */

#define OPCODE_STAF	0x18	/* SCHLEIFENTEST-AUFTRAG DER BS */
#define OPCODE_STPQU	0x28	/* SCHLEIFENTEST-POSITIV-QUITTUNG VOM MSC */
#define OPCODE_STNQU	0x29	/* SCHLEIFENTEST-NEGATIV-QUITTUNG VOM MSC */

#define OPCODE_APF	0x1d	/* AUTORISIERUNGSPARAMETER */

#define OPCODE_GSTAU	0x2a	/* GEBUEHREN-START-AUFTRAG VOM MSC */

#define OPCODE_FAF	0x19	/* FANG-AUFTRAG BS */

#define OPCODE_NAF	0x14	/* NEVATIV-AUFTRAG DER BS */
#define OPCODE_EQU	0x25	/* ENDE-QUITTUNG VOM MSC */

#define OPCODE_AAF	0x16	/* AUSLOESE-AUFTRAG DER BS */
#define OPCODE_AQU	0x27	/* AUSLOESE-QUITTUNG VOM MSC */

#define OPCODE_NAU	0x24	/* NEVATIV-AUFTRAG VOM MSC */
#define OPCODE_EQF	0x15	/* ENDE-QUITTUNG DER BS */

#define OPCODE_AAU	0x26	/* AUSLOESE-AUFTRAG VOM MSC */
#define OPCODE_AQF	0x17	/* AUSLOESE-QUITTUNG DER BS */

#define OPCODE_XADBF	0x86	/* ANFORDERUNG EINES BS-DB-DATENBLOCKES VON DER MSC */
#define OPCODE_XEDBU	0x9b	/* BS-DB-TRANSFER-ERGEBNIS-SIGN. VON DER MSC */

#define OPCODE_YAAAU	0xd4	/* ANLAUF-AKTIVIERUNGS-AUFTRAG DER MSC  (INITIALISIEREN DER BS) */

#define OPCODE_SWAU	0xe1	/* Wiederanlaufauftrag des MSC */
#define OPCODE_SWQF	0xc1	/* Wiederanlauf-Quittung von der BS */

#define OPCODE_SADAU	0xe4	/* Aktivdatei-Auftrag vom MSC */
#define OPCODE_SADQF	0xc4	/* Aktivdateiquittung der BS */

#define VERSION_LM8	6

struct SysMeld {
	uint16_t	FUKO;
	uint8_t		Monat;
	uint8_t		Tag;
	uint8_t		Stunde;
	uint8_t		Minute;
	uint8_t		Kennzeichen_posthum;
	uint16_t	Systemmeldungsnr;
	uint8_t		Indizienlaenge;
	uint8_t		Indizien[10];
	uint8_t		ASCII_Typ;
	uint8_t		Einrichtungstyp;
	uint8_t		Einrichtungsnr;
	uint8_t		Zusatzinfo[4];
};

const char *einrichtrungstyp_string(uint8_t T);

void decode_swaf(uint8_t *data, int len, uint8_t *V, uint8_t *N, uint8_t *U, uint8_t *F, uint8_t *C, uint8_t *B);
int encode_swqu(uint8_t *opcode, uint8_t **data, uint8_t A);
void decode_suaf(uint8_t *data, int len, uint8_t *V, uint8_t *N, uint8_t *U, uint8_t *F, uint8_t *C, uint8_t *B);
int encode_suqu(uint8_t *opcode, uint8_t **data, uint8_t Q, uint8_t N, time_t now);
void decode_sssaf(uint8_t *data, int len);
void encode_sssqu(uint8_t *opcode);
void decode_ssaf(uint8_t *data, int len, uint8_t *S);
int encode_ssqu(uint8_t *opcode, uint8_t **data, uint8_t S);
void decode_sfaf(uint8_t *data, int len, uint8_t *S);
int encode_sfqu(uint8_t *opcode, uint8_t **data, uint8_t S);
void decode_svaf(uint8_t *data, int len);
int encode_svqu(uint8_t *opcode, uint8_t **data);
void decode_ylsaf(uint8_t *data, int len);
int encode_ylsmu(uint8_t *opcode, uint8_t **data);
void decode_ylsmf(uint8_t *data, int len, uint8_t *N, uint8_t *C, struct SysMeld *SM);
void decode_ylsef(uint8_t *data, int len);
void decode_stdaf(uint8_t *data, int len);
int encode_xgtau(uint8_t *opcode, uint8_t **data, uint8_t Z, uint32_t T, uint8_t S, uint8_t K, uint16_t CS);
void decode_ebaf(uint8_t *data, int len, uint16_t *T, uint8_t *U, uint8_t *N, uint16_t *s, uint8_t *u, uint8_t *b, uint8_t *l);
int encode_ebpqu(uint8_t *opcode, uint8_t **data);
void decode_abaf(uint8_t *data, int len, uint16_t *T, uint8_t *U, uint8_t *N);
void decode_gvaf(uint8_t *data, int len, uint16_t *T, uint8_t *U, uint8_t *N, char *number);
void decode_gvwaf(uint8_t *data, int len, uint16_t *T, uint8_t *U, uint8_t *N, char *number);
int encode_gvpqu(uint8_t *opcode, uint8_t **data, uint8_t P, uint8_t e);
int encode_gvnqu(uint8_t *opcode, uint8_t **data, uint8_t X, uint8_t Y);
int encode_kvau(uint8_t *opcode, uint8_t **data, uint16_t T, uint8_t U, uint8_t N, uint8_t F, uint8_t e);
void decode_kvwqf(uint8_t __attribute__((unused)) *data, int __attribute__((unused)) len);
void decode_kvbaf(uint8_t __attribute__((unused)) *data, int __attribute__((unused)) len);
void decode_staf(uint8_t *data, int len, uint8_t *Q, uint8_t *V, uint8_t *e, uint64_t *n);
int encode_stpqu(uint8_t *opcode, uint8_t **data, uint8_t Q, uint8_t A, uint8_t K, uint16_t G, uint8_t U, uint8_t X, uint8_t Y, uint8_t mystery);
int encode_stnqu(uint8_t *opcode, uint8_t **data, uint8_t Q);
void decode_apf(uint8_t *data, int len, uint8_t *Q, uint64_t *a);
int encode_gstau(uint8_t *opcode, uint8_t **data, uint8_t Q, uint16_t G, uint8_t U, uint8_t Y, uint8_t A, uint8_t K);
void decode_faf(uint8_t __attribute__((unused)) *data, int __attribute__((unused)) len);
void decode_naf(uint8_t *data, int len, uint8_t *X);
int encode_equ(uint8_t *opcode, uint8_t **data);
void decode_aaf(uint8_t *data, int len, uint8_t *Q, uint8_t *X);
int encode_aqu(uint8_t *opcode, uint8_t **data, uint8_t Q);
int encode_nau(uint8_t *opcode, uint8_t **data, uint8_t X, uint8_t Y);
void decode_eqf(uint8_t *data, int len);
int encode_aau(uint8_t *opcode, uint8_t **data, uint8_t Q, uint8_t X, uint8_t Y);
void decode_aqf(uint8_t *data, int len, uint8_t *Q);
void decode_xadbf(uint8_t *data, int len, uint8_t *PJ, uint16_t *D, uint16_t *L);
int encode_xedbu_1(uint8_t *opcode, uint8_t **data, uint8_t R, uint8_t PJ, uint16_t A);
int encode_xedbu_2(uint8_t *opcode, uint8_t **data, uint8_t S, uint8_t PJ, uint8_t *P);
int encode_xedbu_3(uint8_t *opcode, uint8_t **data, uint8_t S, uint8_t PJ, uint16_t D, uint16_t L, uint32_t CS);
int encode_yaaau(uint8_t *opcode, uint8_t **data, uint8_t J);
int encode_swau(uint8_t *opcode, uint8_t **data, uint8_t V);
void decode_swqf(uint8_t *data, int len, uint8_t *V, uint8_t *N, uint8_t *U, uint8_t *F, uint8_t *C, uint8_t *B);
void encode_sadau(uint8_t *opcode);
int decode_sadqf(uint8_t *data, int len, uint16_t *S, uint8_t *E, uint8_t *l, uint16_t *T, uint8_t *U, uint8_t *N);