view src/cs/layer1/gtt_include/ctm/diag_deinterleaver.h @ 673:62a5285e014a

Lorekeeping: allow tpudrv-leonardo.lib on Leonardo/Tango Back in 2015 the Mother's idea was to produce a FreeCalypso development board that would be a clone of TI Leonardo, including the original quadband RFFE; one major additional stipulation was that this board needed to be able to run original unmodified TCS211-20070608 firmware with all blobs intact, with only minimal binary patches to main.lib and tpudrv.lib. The necessary patched libs were produced at that time in the tcs211-patches repository. That plan was changed and we produced FCDEV3B instead, with Openmoko's triband RFFE instead of Leonardo quadband, but when FC Magnetite started in 2016, a TPUDRV_blob= provision was still made, allowing the possibility of patching OM's tpudrv.lib for a restored Leonardo RFFE. Now in 2020 we have FC Tango which is essentially a verbatim clone of Leonardo core, including the original quadband RFFE. We have also deblobbed our firmware so much that we have absolutely no real need for a blob version of tpudrv.lib - but I thought it would be neat to put the ancient TPUDRV_blob= mechanism (classic config) to its originally intended use, just for the heck of it.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 29 May 2020 03:55:36 +0000
parents 945cf7f506b2
children
line wrap: on
line source

/*

*******************************************************************************

*

*      COPYRIGHT (C) 2000 BY ERICSSON EUROLAB DEUTSCHLAND GmbH

*      90411 NUERNBERG, GERMANY, Tel Int + 49 911 5217 100

*

*      The program(s) may be used and/or copied only with the

*      written permission from Ericsson or in accordance

*      with the terms and conditions stipulated in the agreement or

*      contract under which the program(s) have been supplied.

*

*******************************************************************************

*

*      File             : diag_interleaver.h

*      Purpose          : diagonal (chain) deinterleaver routine

*

*******************************************************************************

*/

#ifndef diag_deinterleaver_h

#define diag_deinterleaver_h "$Id: $"

#include "l1_confg.h"

/*

*******************************************************************************

*                         INCLUDE FILES

*******************************************************************************

*/



#include "init_interleaver.h"



/*

*******************************************************************************

*                         DECLARATION OF PROTOTYPES

*******************************************************************************

*/



/* ---------------------------------------------------------------------- */

/* diag_deinterleaver:                                                    */

/* Corresponding deinterleaver to diag_interleaver.                       */

/* An arbitrary number of bits can be interleaved, depending of the       */

/* length of the vector "in". The vector "out", which must have the same  */

/* length than "in", contains the interleaved samples.                    */

/* All states (memory etc.) of the interleaver are stored in the variable */

/* *intl_state. Therefore, a pointer to this variable must be handled to  */

/* this function. This variable initially has to be initialized by the    */

/* function init_interleaver, which offers also the possibility to        */

/* specify the dimensions of the deinterleaver matrix.                    */

/* ---------------------------------------------------------------------- */



void diag_deinterleaver(WORD16 *out,

                        WORD16 *in,

                        WORD16 num_valid_bits,

                        interleaver_state_t *intl_state);



/* ---------------------------------------------------------------------- */

/* shift_deinterleaver:                                                   */

/* Shift of the deinterleaver buffer by <shift> samples.                  */

/* shift>0  -> shift to the right                                         */

/* shift<0  -> shift to the left                                          */

/* The elements from <insert_bits> are inserted into the resulting space. */

/* The vector <insert_bits> must have at least abs(shift) elements.       */

/* ---------------------------------------------------------------------- */



void shift_deinterleaver(WORD16 shift,

                         WORD16 *insert_bits,

                         interleaver_state_t *ptr_state);


#if(NEW_WKA_PATCH==1)
  void just_shift(WORD16 shift, WORD16* in_bits, interleaver_state_t *intl_state);
#endif

#if (TTY_SYNC_MCU == 1)
  void flush_and_shift_deinterleaver(WORD16 shift,WORD16 *insert_bits,interleaver_state_t *ptr_state);
#endif

#if(TTY_SYNC_MCU_2==1)
  WORD16 flush_diag_deint(WORD16 *out, WORD16 *in, interleaver_state_t *intl_state);
  void zero_pad_deint(interleaver_state_t *intl_state);
#endif

#if(OPTIMISED==1)
void new_diag_deinterleaver(WORD16 *out,
                        WORD16 jump,
                        WORD16 *flush_vector,
                        WORD16 *in,
                        WORD16 num_valid_bits,
                        interleaver_state_t *intl_state);
#endif

#endif