#include "dsd.h" #include "provoice_const.h" void processProVoice (dsd_opts * opts, dsd_state * state) { int i, j, dibit, k; uint8_t lid[80]; uint8_t lidbyte[10]; uint8_t init[64]; uint8_t initbyte[8]; char imbe7100_fr1[7][24]; char imbe7100_fr2[7][24]; const int *w, *x; fprintf (stderr," VOICE"); if (opts->p25_trunk == 1 && opts->p25_is_tuned == 1) { fprintf (stderr, "%s", KGRN); fprintf (stderr, " Site [%02llX][%03lld] Group [%05d] Source [%08d] LCN[%02d] ", state->edacs_site_id, state->edacs_site_id, state->lasttg, state->lastsrc, state->edacs_tuned_lcn); fprintf (stderr, "%s", KNRM); } for (i = 0; i < 64; i++) { dibit = getDibit (opts, state); init[i] = dibit; #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif //iNitial 64 bits if (opts->payload == 1) { k = 0; fprintf (stderr, "\n N64: "); for(i = 0; i < 8; i++) { initbyte[i] = 0; for (j = 0; j < 8; j++) { initbyte[i] = initbyte[i] << 1; initbyte[i] = initbyte[i] | init[k]; k++; } fprintf (stderr, "%02X", initbyte[i]); if (i == 3) fprintf (stderr, "-"); } fprintf (stderr, "\n"); } // lid for (i = 0; i < 16; i++) { dibit = getDibit (opts, state); lid[i] = dibit; #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif for (i = 0; i < 64; i++) { dibit = getDibit (opts, state); lid[i+16] = dibit; #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif //load lid (bits) into lidbyte if (opts->payload == 1) { k = 0; fprintf (stderr, " LID: "); for(i = 0; i < 10; i++) { lidbyte[i] = 0; for (j = 0; j < 8; j++) { lidbyte[i] = lidbyte[i] << 1; lidbyte[i] = lidbyte[i] | lid[k]; k++; } fprintf (stderr, "%02X", lidbyte[i]); if (i == 3 || i == 7) fprintf (stderr, "-"); } // fprintf (stderr, "\n"); } // imbe frames 1,2 first half w = pW; x = pX; for (i = 0; i < 11; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif } for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 4; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif // spacer bits dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); fprintf (stderr," "); #endif // imbe frames 1,2 second half for (j = 0; j < 2; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif for (i = 0; i < 3; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif } for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 5; x -= 5; for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif for (i = 0; i < 7; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif } for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 5; x -= 5; for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif processMbeFrame (opts, state, NULL, NULL, imbe7100_fr1); processMbeFrame (opts, state, NULL, NULL, imbe7100_fr2); // spacer bits dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); fprintf (stderr," "); #endif for (i = 0; i < 16; i++) { dibit = getDibit (opts, state); //HERE init[i] = dibit; //recycle #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif if (opts->payload == 1) { k = 0; fprintf (stderr, "\n 16B: "); for(i = 0; i < 2; i++) { initbyte[i] = 0; for (j = 0; j < 8; j++) { initbyte[i] = initbyte[i] << 1; initbyte[i] = initbyte[i] | init[k]; k++; } fprintf (stderr, "%02X", initbyte[i]); } // fprintf (stderr, "\n"); } // imbe frames 3,4 first half w = pW; x = pX; for (i = 0; i < 11; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif } for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 4; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP fprintf (stderr," "); #endif // spacer bits dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); //fprintf (stderr,"_"); #endif // imbe frames 3,4 second half for (j = 0; j < 2; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif for (i = 0; i < 3; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif } for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif w -= 5; x -= 5; for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr," "); #endif for (i = 0; i < 7; i++) { for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif w -= 6; x -= 6; for (j = 0; j < 6; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif } for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr1[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr,"_"); #endif w -= 5; x -= 5; for (j = 0; j < 5; j++) { dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif imbe7100_fr2[*w][*x] = dibit; w++; x++; } #ifdef PROVOICE_DUMP //fprintf (stderr," "); #endif processMbeFrame (opts, state, NULL, NULL, imbe7100_fr1); processMbeFrame (opts, state, NULL, NULL, imbe7100_fr2); // spacer bits dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); #endif dibit = getDibit (opts, state); #ifdef PROVOICE_DUMP //fprintf (stderr,"%i", dibit); //fprintf (stderr," "); #endif if (opts->errorbars == 1) { fprintf (stderr,"\n"); } }