|
@@ -139,8 +139,11 @@ READ:
|
139
|
139
|
data[0],
|
140
|
140
|
data[0] == 0x08 ? "No card" :
|
141
|
141
|
data[0] == 0x44 ? "No code word found" : "Unknown");
|
142
|
|
- c->key->is_valid_cw = 0;
|
143
|
|
- memcpy(c->key->cw, invalid_cw, 16);
|
|
142
|
+ c->ecm_recv_errors++;
|
|
143
|
+ if (c->ecm_recv_errors >= ECM_RECV_ERRORS_LIMIT) {
|
|
144
|
+ c->key->is_valid_cw = 0;
|
|
145
|
+ memcpy(c->key->cw, invalid_cw, 16);
|
|
146
|
+ }
|
144
|
147
|
return 0;
|
145
|
148
|
}
|
146
|
149
|
|
|
@@ -173,6 +176,8 @@ READ:
|
173
|
176
|
// At first ts_keyset is not initialized
|
174
|
177
|
last_ts_keyset = c->key->ts_keyset;
|
175
|
178
|
if (c->key->is_valid_cw) {
|
|
179
|
+ c->ecm_recv_errors = 0;
|
|
180
|
+
|
176
|
181
|
gettimeofday(&c->key->ts_keyset, NULL);
|
177
|
182
|
c->key->ts = c->key->ts_keyset.tv_sec;
|
178
|
183
|
ts->cw_last_warn = c->key->ts;
|
|
@@ -287,9 +292,17 @@ static int camd35_send_emm(struct ts *ts, uint16_t ca_id, uint8_t *data, uint8_t
|
287
|
292
|
usleep(ts->packet_delay);
|
288
|
293
|
|
289
|
294
|
int ret = camd35_send_buf(ts, to_send);
|
290
|
|
- if (ret <= 0) {
|
291
|
|
- ts_LOGf("ERR | Error sending emm packet, reconnecting to camd.\n");
|
292
|
|
- camd35_reconnect(ts);
|
|
295
|
+ if (ret < 0) {
|
|
296
|
+ c->emm_recv_errors++;
|
|
297
|
+ if (c->emm_recv_errors >= EMM_RECV_ERRORS_LIMIT) {
|
|
298
|
+ ts_LOGf("ERR | Error sending emm packet, reconnecting to camd.\n");
|
|
299
|
+ camd35_reconnect(ts);
|
|
300
|
+ c->emm_recv_errors = 0;
|
|
301
|
+ } else {
|
|
302
|
+ ts_LOGf("ERR | Error sending emm packet (nerrors: %d).\n", c->emm_recv_errors);
|
|
303
|
+ }
|
|
304
|
+ } else {
|
|
305
|
+ c->emm_recv_errors = 0;
|
293
|
306
|
}
|
294
|
307
|
return ret;
|
295
|
308
|
}
|