Browse Source

Report how much miliseconds have passed since the last valid CW was received.

Georgi Chorbadzhiyski 12 years ago
parent
commit
21db3522e6
3 changed files with 22 additions and 9 deletions
  1. 18
    8
      camd.c
  2. 2
    0
      data.c
  3. 2
    1
      data.h

+ 18
- 8
camd.c View File

@@ -96,7 +96,7 @@ static int camd35_recv(struct camd35 *c, uint8_t *data, int *data_len) {
96 96
 
97 97
 static int camd35_recv_cw(struct ts *ts) {
98 98
 	struct camd35 *c = &ts->camd35;
99
-	struct timeval tv1, tv2;
99
+	struct timeval tv1, tv2, last_ts_keyset;
100 100
 	static uint8_t invalid_cw[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
101 101
 	uint8_t *data = c->buf;
102 102
 	int data_len = 0;
@@ -142,16 +142,26 @@ READ:
142 142
 
143 143
 	char cw_dump[16 * 6];
144 144
 	ts_hex_dump_buf(cw_dump, 16 * 6, cw, 16, 0);
145
-	ts_LOGf("CW  | CAID: 0x%04x [ %5llu ms ] --------------------- IDX: 0x%04x Data: %s\n",
146
-		ca_id, timeval_diff_msec(&tv1, &tv2), idx, cw_dump );
147 145
 
148
-	c->key->ts = time(NULL);
149 146
 	c->key->is_valid_cw = memcmp(c->key->cw, invalid_cw, 16) != 0;
150
-	dvbcsa_key_set(c->key->cw    , c->key->csakey[0]);
151
-	dvbcsa_key_set(c->key->cw + 8, c->key->csakey[1]);
152 147
 
153
-	dvbcsa_bs_key_set(c->key->cw    , c->key->bs_csakey[0]);
154
-	dvbcsa_bs_key_set(c->key->cw + 8, c->key->bs_csakey[1]);
148
+	// At first ts_keyset is not initialized
149
+	last_ts_keyset = c->key->ts_keyset;
150
+	if (c->key->is_valid_cw) {
151
+		gettimeofday(&c->key->ts_keyset, NULL);
152
+		c->key->ts = c->key->ts_keyset.tv_sec;
153
+
154
+		dvbcsa_key_set(c->key->cw    , c->key->csakey[0]);
155
+		dvbcsa_key_set(c->key->cw + 8, c->key->csakey[1]);
156
+
157
+		dvbcsa_bs_key_set(c->key->cw    , c->key->bs_csakey[0]);
158
+		dvbcsa_bs_key_set(c->key->cw + 8, c->key->bs_csakey[1]);
159
+	}
160
+
161
+	ts_LOGf("CW  | CAID: 0x%04x [ %5llu ms ] ( %6llu ms ) ------- IDX: 0x%04x Data: %s\n",
162
+		ca_id, timeval_diff_msec(&tv1, &tv2),
163
+		timeval_diff_msec(&last_ts_keyset, &tv2),
164
+		idx, cw_dump );
155 165
 
156 166
 	return ret;
157 167
 }

+ 2
- 0
data.c View File

@@ -36,6 +36,8 @@ void data_init(struct ts *ts) {
36 36
 	ts->key.bs_csakey[0] = dvbcsa_bs_key_alloc();
37 37
 	ts->key.bs_csakey[1] = dvbcsa_bs_key_alloc();
38 38
 
39
+	gettimeofday(&ts->key.ts_keyset, NULL);
40
+
39 41
 	// CAMD
40 42
 	memset(&ts->camd35, 0, sizeof(ts->camd35));
41 43
 	ts->camd35.server_fd    = -1;

+ 2
- 1
data.h View File

@@ -24,7 +24,8 @@ struct key {
24 24
 	int					is_valid_cw;
25 25
 	struct dvbcsa_key_s	*csakey[2];
26 26
 	struct dvbcsa_bs_key_s	*bs_csakey[2];
27
-	time_t				ts;	// At what time the key is set
27
+	time_t					ts;				// At what time the key is set
28
+	struct timeval			ts_keyset;		// At what time the key is set
28 29
 };
29 30
 
30 31
 // 4 auth header, 20 header size, 256 max data size, 16 potential padding

Loading…
Cancel
Save