1 | unsigned char mirror(unsigned char original) {
|
2 | unsigned char i;
|
3 | unsigned char gespiegelt = 0;
|
4 |
|
5 | for (i = 0; i < 8; i++) {
|
6 | gespiegelt >>= 1;
|
7 | gespiegelt |= original & 0x80;
|
8 | original <<= 1;
|
9 | }
|
10 | return gespiegelt;
|
11 | }
|
12 |
|
13 | unsigned char mirror7bit(unsigned char original) {
|
14 | unsigned char i;
|
15 | unsigned char gespiegelt = 0;
|
16 |
|
17 | for (i = 0; i < 8; i++) {
|
18 | gespiegelt >>= 1;
|
19 | gespiegelt |= original & 0x80;
|
20 | original <<= 1;
|
21 | }
|
22 | gespiegelt = gespiegelt >> 1;
|
23 | return gespiegelt;
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 | void SMS_sortieren() {
|
29 |
|
30 | char SMS_7bit[350];
|
31 | //SMS-Text wird in eigenes SMS-Array gespeichert
|
32 | int lv1 = 0;
|
33 | int lv2 = 0;
|
34 |
|
35 | char zwischen1 = 0;
|
36 | char zwischen2 = 0;
|
37 | unsigned char status = 1;
|
38 |
|
39 | //Die 8-Bit-Ketten werden gespiegelt
|
40 | while (SMS_Text_sortiert[lv1] != '\0') {
|
41 | SMS_Text_sortiert[lv1] = mirror(SMS_Text_sortiert[lv1]);
|
42 | lv1++;
|
43 | }
|
44 |
|
45 | //8Bit-->7Bit konverter
|
46 | lv1 = 0;
|
47 | lv2 = 0;
|
48 | while (SMS_Text_sortiert[lv1] != '\0') {
|
49 |
|
50 | switch (status) {
|
51 |
|
52 | case 1:
|
53 |
|
54 | //original des zeichen 1 wird gesichert
|
55 | zwischen1 = SMS_Text_sortiert[lv1];
|
56 | //7-Bit des Zeichen 1 wird erzeugt
|
57 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 1;
|
58 |
|
59 | //Übertrag wird erzeugt
|
60 | zwischen1 = zwischen1 << 7;
|
61 | zwischen1 = zwischen1 >> 1;
|
62 |
|
63 | status = 2;
|
64 | break;
|
65 |
|
66 | case 2:
|
67 |
|
68 | //original des Zeichen 2 wird gesichert
|
69 | zwischen2 = SMS_Text_sortiert[lv1];
|
70 |
|
71 | //7-Bit des Zeichen 2 wird erzeugt
|
72 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 2;
|
73 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen1;
|
74 |
|
75 | //Übertrag wird erzeugt
|
76 | zwischen2 = zwischen2 << 6;
|
77 | zwischen2 = zwischen2 >> 1;
|
78 |
|
79 | status = 3;
|
80 | break;
|
81 |
|
82 | case 3:
|
83 | //original des Zeichen 3 wird gesichert
|
84 | zwischen1 = SMS_Text_sortiert[lv1];
|
85 |
|
86 | //7-Bit des Zeichen 3 wird erzeugt
|
87 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 3;
|
88 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen2;
|
89 |
|
90 | //Übertrag wird erzeugt
|
91 | zwischen1 = zwischen1 << 5;
|
92 | zwischen1 = zwischen1 >> 1;
|
93 |
|
94 | status = 4;
|
95 |
|
96 | break;
|
97 |
|
98 | case 4:
|
99 | //original des Zeichen 4 wird gesichert
|
100 | zwischen2 = SMS_Text_sortiert[lv1];
|
101 |
|
102 | //7-Bit des Zeichen 4 wird erzeugt
|
103 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 4;
|
104 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen1;
|
105 |
|
106 | //Übertrag wird erzeugt
|
107 | zwischen2 = zwischen2 << 4;
|
108 | zwischen2 = zwischen2 >> 1;
|
109 |
|
110 | status = 5;
|
111 |
|
112 | break;
|
113 |
|
114 | case 5:
|
115 | //original des Zeichen 5 wird gesichert
|
116 | zwischen1 = SMS_Text_sortiert[lv1];
|
117 |
|
118 | //7-Bit des Zeichen 5 wird erzeugt
|
119 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 5;
|
120 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen2;
|
121 |
|
122 | //Übertrag wird erzeugt
|
123 | zwischen1 = zwischen1 << 3;
|
124 | zwischen1 = zwischen1 >> 1;
|
125 |
|
126 | status = 6;
|
127 |
|
128 | break;
|
129 |
|
130 | case 6:
|
131 | //original des Zeichen 6 wird gesichert
|
132 | zwischen2 = SMS_Text_sortiert[lv1];
|
133 |
|
134 | //7-Bit des Zeichen 6 wird erzeugt
|
135 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 6;
|
136 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen1;
|
137 |
|
138 | //Übertrag wird erzeugt
|
139 | zwischen2 = zwischen2 << 2;
|
140 | zwischen2 = zwischen2 >> 1;
|
141 |
|
142 | status = 7;
|
143 |
|
144 | break;
|
145 |
|
146 | case 7:
|
147 | //original des Zeichen 7 wird gesichert
|
148 | zwischen1 = SMS_Text_sortiert[lv1];
|
149 |
|
150 | //7-Bit des Zeichen 7 wird erzeugt
|
151 | SMS_7bit[lv2] = SMS_Text_sortiert[lv1] >> 7;
|
152 | SMS_7bit[lv2] = SMS_7bit[lv2] + zwischen2;
|
153 |
|
154 | ////Übertrag wird erzeugt
|
155 | zwischen1 = zwischen1 << 1;
|
156 | zwischen1 = zwischen1 >> 1;
|
157 |
|
158 | status = 8;
|
159 | break;
|
160 |
|
161 | case 8:
|
162 |
|
163 | // zwischen2 = SMS_Text_sortiert[lv1];
|
164 | SMS_7bit[lv2] = zwischen1;
|
165 |
|
166 | status = 1;
|
167 | lv1--;
|
168 | break;
|
169 |
|
170 | }
|
171 | lv1++;
|
172 | lv2++;
|
173 | }
|
174 | SMS_Text_sortiert[lv1] = '\0';
|
175 | SMS_7bit[lv2] = '\0';
|
176 |
|
177 | //umkopieren in globales Array
|
178 |
|
179 | lv1 = 0;
|
180 | while (SMS_7bit[lv1] != '\0') {
|
181 | SMS_Text_sortiert[lv1] = SMS_7bit[lv1];
|
182 | lv1++;
|
183 | }
|
184 | SMS_Text_sortiert[lv1] = '\0';
|
185 |
|
186 | //spiegeln zur endgültigen Form!
|
187 | lv1 = 0;
|
188 | while (SMS_Text_sortiert[lv1] != '\0') {
|
189 | SMS_Text_sortiert[lv1] = mirror7bit(SMS_Text_sortiert[lv1]);
|
190 | lv1++;
|
191 | }
|
192 |
|
193 | }
|