/* --- Packet size in number of samples. One sample is 16-bit. */ #define J 32 #pragma FUNC_INTERRUPT_THRESHOLD (0); extern "C" int ldc_(unsigned int* sig, unsigned int* Obuf) { /* --- Bit stream buffer, mask, word being filled, and number of words */ unsigned int Ovalue=0, mask, msk0; unsigned int Osize=0; int nbit = 32; unsigned int k; /* --- Loop over blocks of 32 channels */ for(int npacket=0; npacket<4; npacket++){ /* ------------------------------------------------------------ * Preprocessor * Compute the estimator for the best split-sample (ESA report) * ------------------------------------------------------------ */ unsigned int gp0 = 0; for(int i=0; i> -nbit; Obuf[Osize++] = Ovalue; nbit += 32; Ovalue = 0; } Ovalue |= value << nbit; } /* --- Mask for the LSB */ msk0 = 1<> k; nbit -= value; if (nbit < 0){ Obuf[Osize++] = Ovalue; nbit += 32; Ovalue = 0; } } /* ------------------------------ * LSB * ------------------------------ */ { unsigned int value = (sig[i] & mask) | msk0; nbit -= (k+1); if (nbit < 0){ Ovalue |= value >> -nbit; Obuf[Osize++] = Ovalue; nbit += 32; Ovalue = 0; } Ovalue |= value << nbit; } } /* --- Finished with this block */ sig += J; } /* --- Flush the output buffer */ Obuf[Osize++] = Ovalue; return Osize; }