/* ----------------------------------------------------------------------------
 *         SAM Software Package License 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2014, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

/**
 * \file
 *
 * Interface for Real Time Clock calibration (RTC) .
 *
 */

#include "board.h"

const RTC_PPMLookup PPM_Lookup[] =
{
    {-40, -168 ,0, 1 ,22 },
    {-39, -163 ,0, 1 ,23 },
    {-38, -158 ,0, 1 ,24 },
    {-37, -153 ,0, 1 ,25 },
    {-36, -148 ,0, 1 ,25 },
    {-35, -143 ,0, 1 ,26 },
    {-34, -138 ,0, 1 ,27 },
    {-33, -134 ,0, 1 ,28 },
    {-32, -129 ,0, 1 ,29 },
    {-31, -124 ,0, 1 ,31 },
    {-30, -120 ,0, 1 ,32 },
    {-29, -116 ,0, 1 ,33 },
    {-28, -111 ,0, 1 ,34 },
    {-27, -107 ,0, 1 ,36 },
    {-26, -103 ,0, 1 ,37 },
    {-25, -99,  0, 1 ,38 },
    {-24, -95,  0, 1 ,40 },
    {-23, -91,  0, 1 ,42 },
    {-22, -87,  0, 1 ,44 },
    {-21, -84,  0, 1 ,45 },
    {-20, -80,  0, 1 ,48 },
    {-19, -76,  0, 1 ,50 },
    {-18, -73,  0, 1 ,53 },
    {-17, -70,  0, 1 ,55 },
    {-16, -66,  0, 1 ,58 },
    {-15, -63,  0, 1 ,61 },
    {-14, -60,  0, 1 ,64 },
    {-13, -57,  0, 1 ,68 },
    {-12, -54,  0, 1 ,71 },
    {-11, -51,  0, 1 ,76 },
    {-10, -48,  0, 1 ,80 },
    {-9 ,-45 ,  0, 1 ,86 },
    {-8 ,-43 ,  0, 1 ,90 },
    {-7 ,-40 ,  0, 1 ,97 },
    {-6 ,-37 ,  0, 1 ,105},
    {-5 ,-35 ,  0, 1 ,111},
    {-4 ,-33 ,  0, 1 ,117},
    {-3 ,-30 ,  0, 0 ,6  },
    {-2 ,-28 ,  0, 0 ,6  },
    {-1 ,-26 ,  0, 0 ,7  },
    {0 ,-24 ,   0, 0 ,7  },
    {1 ,-22 ,   0, 0 ,8  },
    {2 ,-20 ,   0, 0 ,9  },
    {3 ,-18 ,   0, 0 ,10 },
    {4 ,-17 ,   0, 0 ,10 },
    {5 ,-15 ,   0, 0 ,12 },
    {6 ,-13 ,   0, 0 ,14 },
    {7 ,-12 ,   0, 0 ,15 },
    {8 ,-11 ,   0, 0 ,17 },
    {9 ,-9 ,    0, 0 ,21 },
    {10 ,-8 ,   0, 0 ,23 },
    {11 ,-7 ,   0, 0 ,27 },
    {12 ,-6 ,   0, 0 ,32 },
    {13 ,-5 ,   0, 0 ,38 },
    {14 ,-4 ,   0, 0 ,48 },
    {15 ,-3 ,   0, 0 ,64 },
    {16 ,-2 ,   0, 0 ,97 },
    {17 ,-2 ,   0, 0 ,97 },
    {18 ,-1 ,   0, 0 ,127},
    {19 ,0,     1, 0 ,0  },
    {20 ,0,     1, 0 ,0  },
    {21 ,0,     1, 0 ,0  },
    {22 ,1,     1, 0 ,127},
    {23 ,1,     1, 0 ,127},
    {24 ,1,     1, 0 ,127},
    {25 ,1,     1, 0 ,127},
    {26 ,1,     1, 0 ,127},
    {27 ,1,     1, 0 ,127},
    {28 ,1,     1, 0 ,127},
    {29 ,0,     1, 0 ,0  },
    {30 ,0,     1, 0 ,0  },
    {31 ,0,     1, 0 ,0  },
    {32 ,-1,    0, 0 ,127},
    {33 ,-2,    0, 0 ,97 },
    {34 ,-2,    0, 0 ,97 },
    {35 ,-3,    0, 0 ,64 },
    {36 ,-4,    0, 0 ,48 },
    {37 ,-5,    0, 0 ,38 },
    {38 ,-6,    0, 0 ,32 },
    {39 ,-7,    0, 0 ,27 },
    {40 ,-8,    0, 0 ,23 },
    {41 ,-9,    0, 0 ,21 },
    {42 ,-11 ,  0, 0 ,17 },
    {43 ,-12 ,  0, 0 ,15 },
    {44 ,-13 ,  0, 0 ,14 },
    {45 ,-15 ,  0, 0 ,12 },
    {46 ,-17 ,  0, 0 ,10 },
    {47 ,-18 ,  0, 0 ,10 },
    {48 ,-20 ,  0, 0 ,9  },
    {49 ,-22 ,  0, 0 ,8  },
    {50 ,-24 ,  0, 0 ,7  },
    {51 ,-26 ,  0, 0 ,7  },
    {52 ,-28 ,  0, 0 ,6  },
    {53 ,-30 ,  0, 0 ,6  },
    {54 ,-33 ,  0, 1 ,117},
    {55 ,-35 ,  0, 1 ,111},
    {56 ,-37 ,  0, 1 ,105},
    {57 ,-40 ,  0, 1 ,97 },
    {58 ,-43 ,  0, 1 ,90 },
    {59 ,-45 ,  0, 1 ,86 },
    {60 ,-48 ,  0, 1 ,80 },
    {61 ,-51 ,  0, 1 ,76 },
    {62 ,-54 ,  0, 1 ,71 },
    {63 ,-57 ,  0, 1 ,68 },
    {64 ,-60 ,  0, 1 ,64 },
    {65 ,-63 ,  0, 1 ,61 },
    {66 ,-66 ,  0, 1 ,58 },
    {67 ,-70 ,  0, 1 ,55 },
    {68 ,-73 ,  0, 1 ,53 },
    {69 ,-76 ,  0, 1 ,50 },
    {70 ,-80 ,  0, 1 ,48 },
    {71 ,-84 ,  0, 1 ,45 },
    {72 ,-87 ,  0, 1 ,44 },
    {73 ,-91 ,  0, 1 ,42 },
    {74 ,-95 ,  0, 1 ,40 },
    {75 ,-99 ,  0, 1 ,38 },
    {76 ,-103 , 0, 1 ,37 },
    {77 ,-107 , 0, 1 ,36 },
    {78 ,-111 , 0, 1 ,34 },
    {79 ,-116 , 0, 1 ,33 },
    {80 ,-120 , 0, 1 ,32 },
    {81 ,-124 , 0, 1 ,31 },
    {82 ,-129 , 0, 1 ,29 },
    {83 ,-134 , 0, 1 ,28 },
    {84 ,-138 , 0, 1 ,27 },
    {85 ,-143 , 0, 1 ,26 }
} ;    

/**
 * \brief RTC calibration for Temperature or PPM drift
 */
extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr)
{
  uint16_t i;
  uint32_t MR_Reg, Size;
  
  Size = sizeof(PPM_Lookup);
  
  MR_Reg =0;
  for(i=0; i< Size; i++)
  {
  if(PPM_Lookup[i].Tempr == CurrentTempr)
      {
          MR_Reg |= RTC_MR_CORRECTION(PPM_Lookup[i].CORRECTION);  
          MR_Reg |= (PPM_Lookup[i].HIGHPPM << 15);
          MR_Reg |= (PPM_Lookup[i].NEGPPM << 4);
          pRtc->RTC_MR = MR_Reg;    // update the calibration value
          break;
      }
  }
  
 
  
}
