QString MySniff::get_current_channels(void) { QString chn(""); uint16_t *freqs; freqs=current_freq(); if (freqs!=NULL){ while (*freqs!=0){ chn.append(QString::number(ieee80211mhz2chan(*freqs))); freqs++; if (*freqs!=0){ chn.append(","); } } } return chn; }
int reduc_winformat(int *bufp, int *outp, int *messp, int *pesp, int *pdesp, int *pedesp, float final_edeshift[64], int *pwritestat, int *perrstat, int newoutlength) { float r; float evfrac; int ie, i, iE_counter; int header_id, header_mask; int tpu, nextpointer, temp, xrow, telescopeno; int header, xindex, yindex, currentpointer, pattern; int good, writestatus; int gevents, events, evlen; int rawevent[1024]; int bufferlength; int tel; int writestat, errstat; int outlength; int l_word; int words, nword, nboe, nbox; writestat = *pwritestat; errstat = *perrstat; outlength = newoutlength; r = drand48() - 0.5; /* Random between -0.5 and +0.5 */ bufferlength = 32768; errstat = 0; /* Initialisering */ words = 0; errstat = 0; /* Initialisering */ currentpointer = 0; nextpointer = 0; gevents = 0; events = 0; writestat = 0; good =-1; telescopeno = *(messp + 11); /* Number of telescopes used */ while (words < bufferlength) { /* Go through buffer */ dpnu = -1; /* Reset numbers */ pnu = -1; nanu = -1; tnanu = -1; nimnu = -1; cadcnu = -1; ctdcnu = -1; punu = -1; scnu = -1; iE_counter = -1; /* ************************************************************** */ /* Testing header word of event */ /* No more data in buffer if header = 0, return from function */ /* If this should occur too early (partly filled buffer), it may */ /* be a serious problem. Mark such a buffer as bad buffer. */ /* ************************************************************** */ currentpointer = nextpointer; l_word = *(bufp + nextpointer); nboe = boe(l_word); if(nboe == 0xc){ /* Begin of event */ nword = ndw(l_word); /* Number of words (ADCs) with data */ }else{ if(l_word != EOB ) errstat = -1; /* End of buffer */ goto L999; /* Drop current buffer */ } /* Save pointer to next event */ evlen = nword + 1; if( evlen > 1024){ printf("Warning, eventlength > 1024 \n"); errstat = -1; goto L999; } nextpointer = evlen + currentpointer; /* Save the raw event */ for( i = 0; i < evlen; i++){ rawevent[i] = *(bufp + currentpointer + i); } /* **************************************** */ /* Looping through all words (ADCs) and */ /* storing in respective vectors */ /* **************************************** */ for (i = 1; i <= nword; i++){ l_word = *(bufp + i + words); nbox = box(l_word); /* The box that has fired */ if(nbox == 0x00){ /* Pattern ch 0 - 3, NIM ADCs ch 4 - 15*/ nimnu++; nimi[nimnu] = chn(l_word); nim[nimnu] = dta(l_word); } if(nbox == 0x01){ nimnu++; /* Wall-clock time ch 16 - 17*/ nimi[nimnu] = chn(l_word); nim[nimnu] = dta(l_word); } if(nbox == 0x02){ /* VME scaler 1151N ch 0-31*/ scnu++; sci[scnu] = chn(l_word); sc[scnu] = dta(l_word); } if(nbox == 0x10){ /* Time of NaI ch 0-31*/ tnanu++; tnai[tnanu] = chn(l_word); tna[tnanu] = dta(l_word); } if(nbox == 0x20){ /* Energy of NaI ch 0-31*/ nanu++; nai[nanu] = chn(l_word); na[nanu] = dta(l_word); } if(nbox == 0x21){ /* Energy E ch 0-32 */ pnu++; /* Only 8 E counters in */ pi[pnu] = chn(l_word); /* ch 0, 2,..., 16 */ p[pnu] = dta(l_word); } if(nbox == 0x22){ /* Energy dE1 ch 0-31 */ dpnu++; dpi[dpnu] = chn(l_word); dp[dpnu] = dta(l_word); } if(nbox == 0x23){ /* Energy dE2 ch 32-61 */ dpnu++; dpi[dpnu] = chn(l_word) + 32; dp[dpnu] = dta(l_word); } #if 0 if(nbox == 6){ /* Camac ADC1 ch 0-7*/ cadcnu++; cadci[cadcnu] = chn(l_word); cadc[cadcnu] = dta(l_word); } if(nbox == 7){ /* Camac ADC2 ch 0-7*/ cadcnu++; cadci[cadcnu] = chn(l_word) + 8; cadc[cadcnu] = dta(l_word); } if(nbox == 8){ /* Camac ADC3 ch 0-7*/ cadcnu++; cadci[cadcnu] = chn(l_word) + 16; cadc[cadcnu] = dta(l_word); } if(nbox == 9){ /* Camac ADC4 ch 0-7*/ cadcnu++; cadci[cadcnu] = chn(l_word) + 24; cadc[cadcnu] = dta(l_word); } if(nbox == 10){ /* Camac TDC1 ch 0-7*/ ctdcnu++; ctdci[ctdcnu] = chn(l_word); ctdc[ctdcnu] = dta(l_word) ; } if(nbox == 11){ /* Camac TDC2 ch 0-7*/ ctdcnu++; ctdci[ctdcnu] = chn(l_word) + 8; ctdc[ctdcnu] = dta(l_word); } if(nbox == 12){ /* Camac TDC3 ch 0-7*/ ctdcnu++; ctdci[ctdcnu] = chn(l_word) + 16; ctdc[ctdcnu] = dta(l_word); } if(nbox == 13){ /* Camac TDC4 ch 0-7*/ ctdcnu++; ctdci[ctdcnu] = chn(l_word) + 24; ctdc[ctdcnu] = dta(l_word); } if(nbox == 14){ /* Camac Pile-up ch 0-1*/ punu++; pui[punu] = chn(l_word); pu[punu] = dta(l_word); } #endif } words = words + evlen; /* ====================================================== */ /* Now, the event is formatted and ready to be sorted */ /* ====================================================== */ good = reduc_winsort( pesp, pdesp, pedesp); /* Gate on particles, returns 0 of OK */ ++events; if (good == 0 ){ /* Good event, save it */ ++gevents; /* No of good events */ evfrac = (gevents * 100) / events; *(messp + 14) = (int) evfrac; /* Percent events accepted */ if (outlength > bufferlength - evlen) { writestatus = write_exa(outp, messp); /* Write databuffer to target device */ if (writestatus == -1){ /* Error in write, terminate session */ writestat = -1; printf("Error in write, terminate session = -1\n"); goto L999; } ++grec; /* Increment "good" buffers */ *(messp + 15) = grec; /* Number of accepted buffers */ outlength = 0; /* Reset local output buffer pointer */ for (i = 0; i < bufferlength; ++i){ /* Zeroing local output buffer */ *(outp + i) = 0; } } } /* ******************************************************************** */ /* Shift the E detector with the calculated shift. The event has one */ /* and only one particle event word for E, located in iE_counter */ /* ******************************************************************** */ p[pnu] = (int)((float)p[pnu] + final_edeshift[pi[pnu]] + r + 0.5); if(p[pnu] < 0 | p[pnu] > 2047) p[pnu] = 0; /* ********************************************* */ /* Replace the event word for E with new energy */ /* First we zero the energy, then add the energy */ /* ********************************************* */ rawevent[iE_counter] = rawevent[iE_counter] & 0xffff0000; rawevent[iE_counter] = rawevent[iE_counter] + p[pnu]; /* **************************************************** */ /* Store E-counter gain-stabilized event in good Buffer */ /* **************************************************** */ for (i = 0; i < evlen; ++i){ *(outp + outlength + i) = rawevent[i]; } outlength = outlength + evlen; } /* End of good event block */ /* End-Of-Event Loop, fetch next event */ L999: return outlength; }