Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2001-2003, David Janssens
  3.  * Copyright (c) 2002-2003, Yannick Verschueren
  4.  * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
  5.  * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team
  6.  * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  7.  * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  20.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  23.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  24.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  25.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  26.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  27.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  28.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  29.  * POSSIBILITY OF SUCH DAMAGE.
  30.  */
  31.  
  32. #ifdef USE_JPWL
  33.  
  34. /**
  35. @file rs.h
  36. @brief Functions used to compute Reed-Solomon parity and check of byte arrays
  37.  
  38. */
  39.  
  40. #ifndef __RS_HEADER__
  41. #define __RS_HEADER__
  42.  
  43. /** Global definitions for Reed-Solomon encoder/decoder
  44.  * Phil Karn KA9Q, September 1996
  45.  *
  46.  * The parameters MM and KK specify the Reed-Solomon code parameters.
  47.  *
  48.  * Set MM to be the size of each code symbol in bits. The Reed-Solomon
  49.  * block size will then be NN = 2**M - 1 symbols. Supported values are
  50.  * defined in rs.c.
  51.  *
  52.  * Set KK to be the number of data symbols in each block, which must be
  53.  * less than the block size. The code will then be able to correct up
  54.  * to NN-KK erasures or (NN-KK)/2 errors, or combinations thereof with
  55.  * each error counting as two erasures.
  56.  */
  57. #define MM  8           /* RS code over GF(2**MM) - change to suit */
  58. //static int    KK;
  59. int     KK;
  60.  
  61. /* Original code */
  62. /*#define KK  239*/             /* KK = number of information symbols */
  63.  
  64. #define NN ((1 << MM) - 1)
  65.  
  66. #if (MM <= 8)
  67. typedef unsigned char dtype;
  68. #else
  69. typedef unsigned int dtype;
  70. #endif
  71.  
  72. /** Initialization function */
  73. void init_rs(int);
  74.  
  75. /** These two functions *must* be called in this order (e.g.,
  76.  * by init_rs()) before any encoding/decoding
  77.  */
  78. void generate_gf(void); /* Generate Galois Field */
  79. void gen_poly(void);    /* Generate generator polynomial */
  80.  
  81. /** Reed-Solomon encoding
  82.  * data[] is the input block, parity symbols are placed in bb[]
  83.  * bb[] may lie past the end of the data, e.g., for (255,223):
  84.  *      encode_rs(&data[0],&data[223]);
  85.  */
  86. int encode_rs(dtype data[], dtype bb[]);
  87.  
  88. /** Reed-Solomon erasures-and-errors decoding
  89.  * The received block goes into data[], and a list of zero-origin
  90.  * erasure positions, if any, goes in eras_pos[] with a count in no_eras.
  91.  *
  92.  * The decoder corrects the symbols in place, if possible and returns
  93.  * the number of corrected symbols. If the codeword is illegal or
  94.  * uncorrectible, the data array is unchanged and -1 is returned
  95.  */
  96. int eras_dec_rs(dtype data[], int eras_pos[], int no_eras);
  97.  
  98. /**
  99. Computes the minimum between two integers
  100. @param a first integer to compare
  101. @param b second integer to compare
  102. @return returns the minimum integer between a and b
  103. */
  104. #ifndef min
  105. #define min(a,b)    (((a) < (b)) ? (a) : (b))
  106. #endif /* min */
  107.  
  108. #endif /* __RS_HEADER__ */
  109.  
  110.  
  111. #endif /* USE_JPWL */
  112.