From f729b32745639dc5f934ad17e62219307f59838a Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 31 Jul 2016 15:09:46 +0200 Subject: [PATCH] C-Netz: Fixed multi-transceiver mode and show channel in various logs --- src/cnetz/cnetz.c | 100 +++++++++++++++++++++--------------------- src/cnetz/dsp.c | 8 ++-- src/cnetz/telegramm.c | 6 ++- src/common/debug.c | 16 +++++-- src/common/debug.h | 5 ++- src/common/sender.c | 30 +++++++------ 6 files changed, 91 insertions(+), 74 deletions(-) diff --git a/src/cnetz/cnetz.c b/src/cnetz/cnetz.c index b5e90f8..617bcf7 100644 --- a/src/cnetz/cnetz.c +++ b/src/cnetz/cnetz.c @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +#define CHAN cnetz->sender.kanal + #include #include #include @@ -77,7 +79,7 @@ static void cnetz_new_state(cnetz_t *cnetz, enum cnetz_state new_state) { if (cnetz->state == new_state) return; - PDEBUG(DCNETZ, DEBUG_DEBUG, "State change: %s -> %s\n", cnetz_state_name(cnetz->state), cnetz_state_name(new_state)); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "State change: %s -> %s\n", cnetz_state_name(cnetz->state), cnetz_state_name(new_state)); cnetz->state = new_state; } @@ -622,7 +624,7 @@ void transaction_timeout(struct timer *timer) switch (trans->state) { case TRANS_WAF: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after dialing request 'Wahlaufforderung'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after dialing request 'Wahlaufforderung'\n"); if (++trans->count == 3) { /* no response to dialing is like MA failed */ trans->ma_failed = 1; @@ -632,7 +634,7 @@ void transaction_timeout(struct timer *timer) trans_new_state(trans, TRANS_VWG); break; case TRANS_BQ: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after channel allocation 'Belegung Quittung'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after channel allocation 'Belegung Quittung'\n"); if (trans->mt_call) { call_in_release(cnetz->sender.callref, CAUSE_OUTOFORDER); cnetz->sender.callref = 0; @@ -641,9 +643,9 @@ void transaction_timeout(struct timer *timer) break; case TRANS_VHQ: if (cnetz->dsp_mode != DSP_MODE_SPK_V) - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response hile holding call 'Quittung Verbindung halten'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response hile holding call 'Quittung Verbindung halten'\n"); else - PDEBUG(DCNETZ, DEBUG_NOTICE, "Lost signal from 'FuTln' (mobile station)\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Lost signal from 'FuTln' (mobile station)\n"); if (trans->mt_call || trans->mo_call) { call_in_release(cnetz->sender.callref, CAUSE_TEMPFAIL); cnetz->sender.callref = 0; @@ -651,30 +653,30 @@ void transaction_timeout(struct timer *timer) cnetz_release(trans, CNETZ_CAUSE_FUNKTECHNISCH); break; case TRANS_DS: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after connect 'Durchschalten'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after connect 'Durchschalten'\n"); call_in_release(cnetz->sender.callref, CAUSE_TEMPFAIL); cnetz->sender.callref = 0; cnetz_release(trans, CNETZ_CAUSE_FUNKTECHNISCH); break; case TRANS_RTA: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after ringing order 'Rufton anschalten'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after ringing order 'Rufton anschalten'\n"); call_in_release(cnetz->sender.callref, CAUSE_TEMPFAIL); cnetz->sender.callref = 0; cnetz_release(trans, CNETZ_CAUSE_FUNKTECHNISCH); break; case TRANS_AHQ: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after answer 'Abhebequittung'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after answer 'Abhebequittung'\n"); call_in_release(cnetz->sender.callref, CAUSE_TEMPFAIL); cnetz->sender.callref = 0; cnetz_release(trans, CNETZ_CAUSE_FUNKTECHNISCH); break; case TRANS_MFT: - PDEBUG(DCNETZ, DEBUG_NOTICE, "No response after keepalive order 'Meldeaufruf'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "No response after keepalive order 'Meldeaufruf'\n"); trans->ma_failed = 1; destroy_transaction(trans); break; default: - PDEBUG(DCNETZ, DEBUG_ERROR, "Timeout unhandled in state %d\n", trans->state); + PDEBUG_CHAN(DCNETZ, DEBUG_ERROR, "Timeout unhandled in state %d\n", trans->state); } } @@ -757,18 +759,18 @@ const telegramm_t *cnetz_transmit_telegramm_rufblock(cnetz_t *cnetz) telegramm.futln_rest_nr = trans->futln_rest; switch (trans->state) { case TRANS_EM: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Einbuchquittung' to Attachment request.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Einbuchquittung' to Attachment request.\n"); telegramm.opcode = OPCODE_EBQ_R; destroy_transaction(trans); break; case TRANS_UM: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Umbuchquittung' to Roaming requuest.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Umbuchquittung' to Roaming requuest.\n"); telegramm.opcode = OPCODE_UBQ_R; destroy_transaction(trans); break; case TRANS_WBN: wbn: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending call reject 'Wahlbestaetigung negativ'.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending call reject 'Wahlbestaetigung negativ'.\n"); telegramm.opcode = OPCODE_WBN_R; destroy_transaction(trans); cnetz_go_idle(cnetz); @@ -779,17 +781,17 @@ wbn: PDEBUG(DCNETZ, DEBUG_NOTICE, "No free channel anymore, rejecting call!\n"); goto wbn; } - PDEBUG(DCNETZ, DEBUG_INFO, "Sending call accept 'Wahlbestaetigung positiv'.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending call accept 'Wahlbestaetigung positiv'.\n"); telegramm.opcode = OPCODE_WBP_R; trans_new_state(trans, TRANS_VAG); break; case TRANS_VAG: case TRANS_VAK: if (trans->state == TRANS_VAG) { - PDEBUG(DCNETZ, DEBUG_INFO, "Sending channel assignment 'Verbindungsaufbau gehend'.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending channel assignment 'Verbindungsaufbau gehend'.\n"); telegramm.opcode = OPCODE_VAG_R; } else { - PDEBUG(DCNETZ, DEBUG_INFO, "Sending channel assignment 'Verbindungsaufbau kommend'.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending channel assignment 'Verbindungsaufbau kommend'.\n"); telegramm.opcode = OPCODE_VAK_R; } trans_new_state(trans, TRANS_BQ); @@ -817,7 +819,7 @@ wbn: /* change state to busy */ cnetz_new_state(spk, CNETZ_BUSY); /* schedule switching two slots ahead */ - cnetz_set_sched_dsp_mode(cnetz, DSP_MODE_SPK_K, 2); + cnetz_set_sched_dsp_mode(spk, DSP_MODE_SPK_K, 2); /* relink */ unlink_transaction(trans); link_transaction(trans, spk); @@ -851,7 +853,7 @@ const telegramm_t *cnetz_transmit_telegramm_meldeblock(cnetz_t *cnetz) if (trans) { switch (trans->state) { case TRANS_VWG: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Wahlaufforderung' to outging call\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending acknowledgment 'Wahlaufforderung' to outging call\n"); telegramm.opcode = OPCODE_WAF_M; telegramm.futln_nationalitaet = trans->futln_nat; telegramm.futln_heimat_fuvst_nr = trans->futln_fuvst; @@ -860,7 +862,7 @@ const telegramm_t *cnetz_transmit_telegramm_meldeblock(cnetz_t *cnetz) timer_start(&trans->timer, 4.0); /* Wait two slot cycles until resending */ break; case TRANS_MA: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending keepalive request 'Meldeaufruf'\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending keepalive request 'Meldeaufruf'\n"); telegramm.opcode = OPCODE_MA_M; telegramm.futln_nationalitaet = trans->futln_nat; telegramm.futln_heimat_fuvst_nr = trans->futln_fuvst; @@ -890,9 +892,9 @@ void cnetz_receive_telegramm_ogk(cnetz_t *cnetz, telegramm_t *telegramm, int blo break; rufnummer = telegramm2rufnummer(telegramm); if (cnetz->auth && telegramm->chipkarten_futelg_bit) - PDEBUG(DCNETZ, DEBUG_INFO, "Received Attachment 'Einbuchen' message from Subscriber '%s' with chip card's ID %d (vendor id %d, hardware version %d, software version %d)\n", rufnummer, telegramm->kartenkennung, telegramm->herstellerkennung, telegramm->hardware_des_futelg, telegramm->software_des_futelg); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received Attachment 'Einbuchen' message from Subscriber '%s' with chip card's ID %d (vendor id %d, hardware version %d, software version %d)\n", rufnummer, telegramm->kartenkennung, telegramm->herstellerkennung, telegramm->hardware_des_futelg, telegramm->software_des_futelg); else - PDEBUG(DCNETZ, DEBUG_INFO, "Received Attachment 'Einbuchen' message from Subscriber '%s' with %s card's security code %d\n", rufnummer, (telegramm->chipkarten_futelg_bit) ? "chip":"magnet", telegramm->sicherungs_code); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received Attachment 'Einbuchen' message from Subscriber '%s' with %s card's security code %d\n", rufnummer, (telegramm->chipkarten_futelg_bit) ? "chip":"magnet", telegramm->sicherungs_code); if (cnetz->state != CNETZ_IDLE) { PDEBUG(DCNETZ, DEBUG_NOTICE, "Ignoring Attachment from subscriber '%s', because we are busy becoming SpK.\n", rufnummer); break; @@ -909,9 +911,9 @@ void cnetz_receive_telegramm_ogk(cnetz_t *cnetz, telegramm_t *telegramm, int blo break; rufnummer = telegramm2rufnummer(telegramm); if (cnetz->auth && telegramm->chipkarten_futelg_bit) - PDEBUG(DCNETZ, DEBUG_INFO, "Received Roaming 'Umbuchen' message from Subscriber '%s' with chip card's ID %d (vendor id %d, hardware version %d, software version %d)\n", rufnummer, telegramm->kartenkennung, telegramm->herstellerkennung, telegramm->hardware_des_futelg, telegramm->software_des_futelg); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received Roaming 'Umbuchen' message from Subscriber '%s' with chip card's ID %d (vendor id %d, hardware version %d, software version %d)\n", rufnummer, telegramm->kartenkennung, telegramm->herstellerkennung, telegramm->hardware_des_futelg, telegramm->software_des_futelg); else - PDEBUG(DCNETZ, DEBUG_INFO, "Received Roaming 'Umbuchen' message from Subscriber '%s' with %s card's security code %d\n", rufnummer, (telegramm->chipkarten_futelg_bit) ? "chip":"magnet", telegramm->sicherungs_code); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received Roaming 'Umbuchen' message from Subscriber '%s' with %s card's security code %d\n", rufnummer, (telegramm->chipkarten_futelg_bit) ? "chip":"magnet", telegramm->sicherungs_code); if (cnetz->state != CNETZ_IDLE) { PDEBUG(DCNETZ, DEBUG_NOTICE, "Ignoring Roaming from subscriber '%s', because we are busy becoming SpK.\n", rufnummer); break; @@ -928,7 +930,7 @@ void cnetz_receive_telegramm_ogk(cnetz_t *cnetz, telegramm_t *telegramm, int blo if (!match_fuz(cnetz, telegramm, cnetz->cell_nr)) break; rufnummer = telegramm2rufnummer(telegramm); - PDEBUG(DCNETZ, DEBUG_INFO, "Received outgoing Call 'Verbindungswunsch gehend' message from Subscriber '%s'\n", rufnummer); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received outgoing Call 'Verbindungswunsch gehend' message from Subscriber '%s'\n", rufnummer); if (cnetz->state != CNETZ_IDLE) { PDEBUG(DCNETZ, DEBUG_NOTICE, "Ignoring Call from subscriber '%s', because we are busy becoming SpK.\n", rufnummer); break; @@ -949,12 +951,12 @@ void cnetz_receive_telegramm_ogk(cnetz_t *cnetz, telegramm_t *telegramm, int blo case OPCODE_WUE_M: trans = search_transaction(cnetz, TRANS_WAF | TRANS_WBP | TRANS_VAG); if (!trans) { - PDEBUG(DCNETZ, DEBUG_NOTICE, "Received dialing digits 'Wahluebertragung' message without transaction, ignoring!\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Received dialing digits 'Wahluebertragung' message without transaction, ignoring!\n"); break; } rufnummer = transaction2rufnummer(trans); strncpy(trans->dialing, telegramm->wahlziffern, sizeof(trans->dialing) - 1); - PDEBUG(DCNETZ, DEBUG_INFO, "Received dialing digits 'Wahluebertragung' message from Subscriber '%s' to Number '%s'\n", rufnummer, trans->dialing); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received dialing digits 'Wahluebertragung' message from Subscriber '%s' to Number '%s'\n", rufnummer, trans->dialing); timer_stop(&trans->timer); trans_new_state(trans, TRANS_WBP); valid_frame = 1; @@ -962,16 +964,16 @@ void cnetz_receive_telegramm_ogk(cnetz_t *cnetz, telegramm_t *telegramm, int blo case OPCODE_MFT_M: trans = search_transaction_number(cnetz, telegramm->futln_nationalitaet, telegramm->futln_heimat_fuvst_nr, telegramm->futln_rest_nr); if (!trans) { - PDEBUG(DCNETZ, DEBUG_NOTICE, "Received acknowledge 'Meldung Funktelefonteilnehmer' message without transaction, ignoring!\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Received acknowledge 'Meldung Funktelefonteilnehmer' message without transaction, ignoring!\n"); break; } rufnummer = transaction2rufnummer(trans); - PDEBUG(DCNETZ, DEBUG_INFO, "Received acknowledge 'Meldung Funktelefonteilnehmer' message from Subscriber '%s'\n", rufnummer); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received acknowledge 'Meldung Funktelefonteilnehmer' message from Subscriber '%s'\n", rufnummer); destroy_transaction(trans); valid_frame = 1; break; default: - PDEBUG(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); } if (cnetz->sender.loopback) { @@ -1011,7 +1013,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) switch (trans->state) { case TRANS_BQ: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Belegungsquittung' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Belegungsquittung' on traffic channel\n"); telegramm.opcode = OPCODE_BQ_K; if (++trans->count >= 8 && !timer_running(&trans->timer)) { trans_new_state(trans, TRANS_VHQ); @@ -1021,7 +1023,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) break; case TRANS_VHQ: if (!cnetz->sender.loopback) - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Quittung Verbindung halten' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Quittung Verbindung halten' on traffic channel\n"); telegramm.opcode = OPCODE_VHQ_K; if (!cnetz->sender.loopback && (cnetz->sched_ts & 7) == 7 && cnetz->sched_r_m && !timer_running(&trans->timer)) { /* next sub frame */ @@ -1048,7 +1050,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) } break; case TRANS_DS: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Durchschalten' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Durchschalten' on traffic channel\n"); telegramm.opcode = OPCODE_DSB_K; if ((cnetz->sched_ts & 7) == 7 && cnetz->sched_r_m && !timer_running(&trans->timer)) { /* next sub frame */ @@ -1061,11 +1063,11 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) } break; case TRANS_RTA: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Rufton anschalten' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Rufton anschalten' on traffic channel\n"); telegramm.opcode = OPCODE_RTA_K; break; case TRANS_AHQ: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Abhebe Quittung' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Abhebe Quittung' on traffic channel\n"); telegramm.opcode = OPCODE_AHQ_K; if ((cnetz->sched_ts & 7) == 7 && cnetz->sched_r_m) { /* next sub frame */ @@ -1077,7 +1079,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_k(cnetz_t *cnetz) break; case TRANS_AF: call_failed: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Ausloesen durch FuFSt' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Ausloesen durch FuFSt' on traffic channel\n"); telegramm.opcode = OPCODE_AF_K; if (++trans->count == N_AFKT) { destroy_transaction(trans); @@ -1085,7 +1087,7 @@ call_failed: } break; case TRANS_AT: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Auslosen durch FuTln' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Auslosen durch FuTln' on traffic channel\n"); telegramm.opcode = OPCODE_AF_K; if (++trans->count == 1) { destroy_transaction(trans); @@ -1115,7 +1117,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received allocation 'Belegung' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received allocation 'Belegung' message.\n"); valid_frame = 1; if (trans->state != TRANS_BQ) break; @@ -1128,7 +1130,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received assignment confirm 'Durchschaltung Quittung' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received assignment confirm 'Durchschaltung Quittung' message.\n"); valid_frame = 1; if (trans->state != TRANS_DS) break; @@ -1142,7 +1144,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received connection hold 'Verbindung halten' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received connection hold 'Verbindung halten' message.\n"); valid_frame = 1; if (trans->state != TRANS_VHQ) break; @@ -1156,7 +1158,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) break; } valid_frame = 1; - PDEBUG(DCNETZ, DEBUG_INFO, "Received ringback 'Rufton anschalten Quittung' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received ringback 'Rufton anschalten Quittung' message.\n"); if (trans->state != TRANS_RTA) break; timer_start(&trans->timer, 0.0375 * F_RTA); /* F_RTA frames */ @@ -1168,7 +1170,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received answer frame 'Abheben' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received answer frame 'Abheben' message.\n"); valid_frame = 1; /* if already received this frame, or if we are already on VHQ or if we are releasing */ if (trans->state == TRANS_AHQ || trans->state == TRANS_VHQ || trans->state == TRANS_AF) @@ -1186,7 +1188,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received release frame 'Ausloesen durch FuTln' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received release frame 'Ausloesen durch FuTln' message.\n"); valid_frame = 1; /* if already received this frame, if we are releasing */ if (trans->state == TRANS_AT || trans->state == TRANS_AF) @@ -1200,7 +1202,7 @@ void cnetz_receive_telegramm_spk_k(cnetz_t *cnetz, telegramm_t *telegramm) } break; default: - PDEBUG(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); } if (valid_frame) @@ -1235,14 +1237,14 @@ const telegramm_t *cnetz_transmit_telegramm_spk_v(cnetz_t *cnetz) switch (trans->state) { case TRANS_VHQ: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Quittung Verbindung halten' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Quittung Verbindung halten' on traffic channel\n"); if ((cnetz->sched_ts & 8) == 0) /* sub frame 1 and 3 */ telegramm.opcode = OPCODE_VHQ1_V; else /* sub frame 2 and 4 */ telegramm.opcode = OPCODE_VHQ2_V; break; case TRANS_AF: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Ausloesen durch FuFSt' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Ausloesen durch FuFSt' on traffic channel\n"); telegramm.opcode = OPCODE_AF_V; if (++trans->count == N_AFV) { destroy_transaction(trans); @@ -1250,7 +1252,7 @@ const telegramm_t *cnetz_transmit_telegramm_spk_v(cnetz_t *cnetz) } break; case TRANS_AT: - PDEBUG(DCNETZ, DEBUG_INFO, "Sending 'Auslosen durch FuTln' on traffic channel\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Sending 'Auslosen durch FuTln' on traffic channel\n"); telegramm.opcode = OPCODE_AF_V; if (++trans->count == 1) { destroy_transaction(trans); @@ -1283,7 +1285,7 @@ void cnetz_receive_telegramm_spk_v(cnetz_t *cnetz, telegramm_t *telegramm) if (trans->state != TRANS_VHQ) break; timer_start(&trans->timer, 0.6 * F_VHQ); /* F_VHQ frames */ - PDEBUG(DCNETZ, DEBUG_INFO, "Received supervisory frame 'Verbindung halten' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received supervisory frame 'Verbindung halten' message.\n"); valid_frame = 1; cnetz->scrambler = telegramm->betriebs_art; break; @@ -1294,7 +1296,7 @@ void cnetz_receive_telegramm_spk_v(cnetz_t *cnetz, telegramm_t *telegramm) if (!match_futln(telegramm, trans->futln_nat, trans->futln_fuvst, trans->futln_rest)) { break; } - PDEBUG(DCNETZ, DEBUG_INFO, "Received release frame 'Ausloesen durch FuTln' message.\n"); + PDEBUG_CHAN(DCNETZ, DEBUG_INFO, "Received release frame 'Ausloesen durch FuTln' message.\n"); valid_frame = 1; /* if already received this frame, if we are releasing */ if (trans->state == TRANS_AT || trans->state == TRANS_AF) @@ -1309,7 +1311,7 @@ void cnetz_receive_telegramm_spk_v(cnetz_t *cnetz, telegramm_t *telegramm) } break; default: - PDEBUG(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); + PDEBUG_CHAN(DCNETZ, DEBUG_NOTICE, "Received unexpected Telegramm (opcode %d = %s)\n", opcode, telegramm_name(opcode)); } if (valid_frame) diff --git a/src/cnetz/dsp.c b/src/cnetz/dsp.c index 8c8d836..115ce56 100644 --- a/src/cnetz/dsp.c +++ b/src/cnetz/dsp.c @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +#define CHAN cnetz->sender.kanal + #include #include #include @@ -638,7 +640,7 @@ again: if (cnetz->sched_switch_mode && cnetz->sched_r_m == 0) { if (--cnetz->sched_switch_mode == 0) { /* OgK / SpK(K) / SpK(V) */ - PDEBUG(DDSP, DEBUG_INFO, "Switching channel (mode)\n"); + PDEBUG_CHAN(DDSP, DEBUG_INFO, "Switching channel (mode)\n"); cnetz_set_dsp_mode(cnetz, cnetz->sched_dsp_mode); } } @@ -829,13 +831,13 @@ void unshrink_speech(cnetz_t *cnetz, int16_t *speech_buffer, int count) void cnetz_set_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode) { - PDEBUG(DDSP, DEBUG_DEBUG, "DSP mode %d -> %d\n", cnetz->dsp_mode, mode); + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "DSP mode %d -> %d\n", cnetz->dsp_mode, mode); cnetz->dsp_mode = mode; } void cnetz_set_sched_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode, int frames_ahead) { - PDEBUG(DDSP, DEBUG_DEBUG, "Schedule DSP mode %d -> %d in %d frames\n", cnetz->dsp_mode, mode, frames_ahead); + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, " Schedule DSP mode %d -> %d in %d frames\n", cnetz->dsp_mode, mode, frames_ahead); cnetz->sched_dsp_mode = mode; cnetz->sched_switch_mode = frames_ahead; } diff --git a/src/cnetz/telegramm.c b/src/cnetz/telegramm.c index 75ed2ea..aaa03e4 100644 --- a/src/cnetz/telegramm.c +++ b/src/cnetz/telegramm.c @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +#define CHAN cnetz->sender.kanal + #include #include #include @@ -1481,9 +1483,9 @@ void cnetz_decode_telegramm(cnetz_t *cnetz, const char *bits, double level, doub telegramm.jitter = jitter; if (bit_errors) - PDEBUG(DDSP, DEBUG_INFO, "RX Level: %.0f%% Jitter: %.2f Sync Time: %.2f (TS %.2f) Bit errors: %d %s\n", fabs(level) * 32767.0 / cnetz->fsk_deviation * 100.0, jitter, sync_time, sync_time / 396.0, bit_errors, (level < 0) ? "NEGATIVE" : "POSITIVE"); + PDEBUG_CHAN(DDSP, DEBUG_INFO, "RX Level: %.0f%% Jitter: %.2f Sync Time: %.2f (TS %.2f) Bit errors: %d %s\n", fabs(level) * 32767.0 / cnetz->fsk_deviation * 100.0, jitter, sync_time, sync_time / 396.0, bit_errors, (level < 0) ? "NEGATIVE" : "POSITIVE"); else - PDEBUG(DDSP, DEBUG_INFO, "RX Level: %.0f%% Jitter: %.2f Sync Time: %.2f (TS %.2f) %s\n", fabs(level) * 32767.0 / cnetz->fsk_deviation * 100.0, jitter, sync_time, sync_time / 396.0, (level < 0) ? "NEGATIVE" : "POSITIVE"); + PDEBUG_CHAN(DDSP, DEBUG_INFO, "RX Level: %.0f%% Jitter: %.2f Sync Time: %.2f (TS %.2f) %s\n", fabs(level) * 32767.0 / cnetz->fsk_deviation * 100.0, jitter, sync_time, sync_time / 396.0, (level < 0) ? "NEGATIVE" : "POSITIVE"); if (cnetz->sender.loopback) { PDEBUG(DFRAME, DEBUG_NOTICE, "Received Telegramm in loopback test mode (opcode %d = %s)\n", opcode, definition_opcode[opcode].message_name); diff --git a/src/common/debug.c b/src/common/debug.c index c075f13..dfbc368 100644 --- a/src/common/debug.c +++ b/src/common/debug.c @@ -58,22 +58,30 @@ struct debug_cat { int debuglevel = DEBUG_INFO; uint64_t debug_mask = ~0; +extern int num_kanal; -void _printdebug(const char *file, const char *function, int line, int cat, int level, const char *fmt, ...) +void _printdebug(const char *file, const char *function, int line, int cat, int level, int chan, const char *fmt, ...) { - char buffer[4096]; + char buffer[4096], *b = buffer; const char *p; va_list args; if (debuglevel > level) return; + buffer[sizeof(buffer) - 1] = '\0'; + + /* if chan is used, prefix the channel number */ + if (num_kanal > 1 && chan >= 0) { + sprintf(buffer, "(chan %d) ", chan); + b = strchr(buffer, '\0'); + } + if (!(debug_mask & (1 << cat))) return; va_start(args, fmt); - vsnprintf(buffer, sizeof(buffer) - 1, fmt, args); - buffer[sizeof(buffer) - 1] = '\0'; + vsnprintf(b, sizeof(buffer) - strlen(buffer) - 1, fmt, args); va_end(args); while ((p = strchr(file, '/'))) diff --git a/src/common/debug.h b/src/common/debug.h index 92ffe08..8374c24 100644 --- a/src/common/debug.h +++ b/src/common/debug.h @@ -20,8 +20,9 @@ #define DDMS 13 #define DSMS 14 -#define PDEBUG(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, fmt, ## arg) -void _printdebug(const char *file, const char *function, int line, int cat, int level, const char *fmt, ...); +#define PDEBUG(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, -1, fmt, ## arg) +#define PDEBUG_CHAN(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, CHAN, fmt, ## arg) +void _printdebug(const char *file, const char *function, int line, int cat, int level, int chan, const char *fmt, ...); const char *debug_amplitude(double level); diff --git a/src/common/sender.c b/src/common/sender.c index 16c7ac4..0fcd97a 100644 --- a/src/common/sender.c +++ b/src/common/sender.c @@ -20,6 +20,8 @@ /* Uncomment this for writing TX as wave (For debug purpose) */ //#define WAVE_WRITE_TX +#define CHAN sender->kanal + #include #include #include @@ -38,7 +40,19 @@ int sender_create(sender_t *sender, int kanal, const char *sounddev, int sampler sender_t *master; int rc = 0; - PDEBUG(DSENDER, DEBUG_DEBUG, "Creating 'Sender' instance\n"); + sender->kanal = kanal; + strncpy(sender->sounddev, sounddev, sizeof(sender->sounddev) - 1); + sender->samplerate = samplerate; + sender->cross_channels = cross_channels; + sender->rx_gain = rx_gain; + sender->pre_emphasis = pre_emphasis; + sender->de_emphasis = de_emphasis; + sender->loopback = loopback; + sender->loss_volume = loss_volume; + sender->use_pilot_signal = use_pilot_signal; + sender->pilotton_phaseshift = 1.0 / ((double)samplerate / 1000.0); + + PDEBUG_CHAN(DSENDER, DEBUG_DEBUG, "Creating 'Sender' instance\n"); /* if we find a channel that uses the same device as we do, * we will link us as slave to this master channel. then we @@ -89,18 +103,6 @@ int sender_create(sender_t *sender, int kanal, const char *sounddev, int sampler } } - sender->samplerate = samplerate; - sender->cross_channels = cross_channels; - sender->rx_gain = rx_gain; - sender->pre_emphasis = pre_emphasis; - sender->de_emphasis = de_emphasis; - sender->kanal = kanal; - sender->loopback = loopback; - sender->loss_volume = loss_volume; - sender->use_pilot_signal = use_pilot_signal; - sender->pilotton_phaseshift = 1.0 / ((double)samplerate / 1000.0); - strncpy(sender->sounddev, sounddev, sizeof(sender->sounddev) - 1); - rc = init_samplerate(&sender->srstate, samplerate); if (rc < 0) { PDEBUG(DSENDER, DEBUG_ERROR, "Failed to init sample rate conversion!\n"); @@ -148,7 +150,7 @@ error: /* Destroy transceiver instance and unlink from list. */ void sender_destroy(sender_t *sender) { - PDEBUG(DSENDER, DEBUG_DEBUG, "Destroying 'Sender' instance\n"); + PDEBUG_CHAN(DSENDER, DEBUG_DEBUG, "Destroying 'Sender' instance\n"); sender_tailp = &sender_head; while (*sender_tailp) {