#include "Tuo_mode_Module.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <stdint.h>
#include <stddef.h>
#include "esp_intr_alloc.h"
#include "esp_attr.h"
#include "driver/timer.h"
#include "esp_types.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "soc/timer_group_struct.h"
#include "driver/periph_ctrl.h"
#include "driver/gpio.h"
#include "driver/ledc.h"
#include "esp_err.h"
#include <math.h>
#include <stdbool.h>
#define scalar   (0.25)
#define scalar2  (0.9)
#define LEDC_HS_TIMER          LEDC_TIMER_0
#define LEDC_HS_MODE           LEDC_HIGH_SPEED_MODE
#define LEDC_HS_CH0_GPIO       (18)
#define LEDC_HS_CH0_CHANNEL    LEDC_CHANNEL_0
#define LEDC_HS_CH1_GPIO       (19)
#define LEDC_HS_CH1_CHANNEL    LEDC_CHANNEL_1

#define LEDC_LS_TIMER          LEDC_TIMER_0
#define LEDC_LS_MODE           LEDC_LOW_SPEED_MODE
#define LEDC_LS_CH2_GPIO       (4)
#define LEDC_LS_CH2_CHANNEL    LEDC_CHANNEL_2
#define LEDC_LS_CH3_GPIO       (5)
#define LEDC_LS_CH3_CHANNEL    LEDC_CHANNEL_3
#define LEDC_LS_CH4_GPIO       (16)
#define LEDC_TEST_CH_NUM       (5)
#define CHANNEL0               (0)
#define CHANNEL1               (1)
#define CHANNEL2               (2)
#define CHANNEL3               (3)
#define CHANNEL4               (4)
#define MAX_CHANNEL_NUM        (5)
#define FORWARD                (0x5F)
#define BACKWARD               (0x5B)
typedef struct get_mode
{
 uint8_t header[2];
 uint8_t version;
 uint8_t Sel_Channel_Number[5];
 uint8_t msb ;
 uint8_t lsb;
 uint8_t direction;
}get_mode_start;

ledc_channel_config_t ledc_channel[LEDC_TEST_CH_NUM];
int red = 0;
int lim = 1;
int grn = 2;
int blu = 3;
int vio = 4;
static intr_handle_t s_timer_handle;
int rind = 0; int redind = 0;
int lind = 0; int limind = 0;
int gind = 0; int grnind = 0;
int bind = 0; int bluind = 0;
int vind = 0; int vioind = 0;
double redgain = 1; //0.875 * scalar * scalar2;
double limgain =1; //0.5 * scalar  * scalar2;
double grngain = 1;//0.5 * scalar;
double blugain = 1;//* scalar;
double viogain = 1; //* scalar;
int redoffset = 0;
int limoffset = 0;//round(65535 * scalar / scalar2);
int grnoffset = 0;
int bluoffset = 0;
int viooffset = 0;

volatile int redval = 0;
volatile int limval = 0;
volatile int grnval = 0;
volatile int bluval = 0;
volatile int vioval = 0;

// phase = counting from LUT forwards or backwards
// NOTE:  Reverse Ramp and Ramp are both versions of forward or backward counting
// programs order:  DC, Square, Sin, Ramp, Triangle
int CHANNEL_LUT_SEL[5][5]={
                   {0, 0, 0, 0, 1}, //lim
                   {0, 0, 0, 0, 0}, //red
                   {0, 0, 0, 0, 0}, //etc
                   {0, 0, 0, 0, 0},
                   {0, 0, 0, 0, 0},
                   };
bool redphase0 = false; int redlutsel[] = {1, 0, 0, 0, 0};
bool limphase0 = true; int limlutsel[] = {0, 1, 0, 0, 0};
bool grnphase0 = true; int grnlutsel[] = {0, 0, 1, 0, 0};
bool bluphase0 = false; int blulutsel[] = {0, 0, 0, 1, 0};
bool viophase0 = true; int violutsel[] = {0, 0, 0, 0, 1};

int sin_lut[] = {32768,32960,33152,33344,33536,33728,33920,34112,34304,34496,34688,34880,35072,35264,35520,35712,35904,36096,36288,36480,36672,36864,37056,37248,37440,37632,37824,38016,38208,38400,38592,38784,38976,
39168,39360,39552,39744,39936,40128,40320,40512,40704,40896,41088,41280,41472,41664,41856,42048,42240,42432,42624,42816,43008,43200,43328,43520,43712,43904,44096,44288,44480,44672,44800,44992,45184,45376,45568,45760,45888,46080,46272,46464,
46656,46784,46976,47168,47360,47488,47680,47872,48064,48192,48384,48576,48704,48896,49088,49216,49408,49536,49728,49920,50048,50240,50368,50560,50752,50880,51072,51200,51392,51520,51712,51840,52032,52160,52288,52480,52608,52800,52928,53120,
53248,53376,53568,53696,53824,54016,54144,54272,54400,54592,54720,54848,54976,55168,55296,55424,55552,55680,55808,56000,56128,56256,56384,56512,56640,56768,56896,57024,57152,57280,57408,57536,57664,57792,57920,58048,58176,58240,58368,58496,
58624,58752,58880,58944,59072,59200,59328,59392,59520,59648,59712,59840,59968,60032,60160,60224,60352,60480,60544,60672,60736,60864,60928,61056,61120,61184,61312,61376,61504,61568,61632,61760,61824,61888,62016,62080,62144,62208,62272,62400,
62464,62528,62592,62656,62720,62784,62848,62912,62976,63104,63104,63168,63232,63296,63360,63424,63488,63552,63616,63680,63680,63744,63808,63872,63872,63936,64000,64064,64064,64128,64192,64192,64256,64256,64320,64320,64384,64384,64448,64448,
64512,64512,64576,64576,64576,64640,64640,64640,64704,64704,64704,64704,64768,64768,64768,64768,64768,64768,64832,64832,64832,64832,64832,64832,64832,64832,64832,64832,64832,64768,64768,64768,64768,64768,64768,64704,64704,64704,64704,64640,
64640,64640,64576,64576,64576,64512,64512,64448,64448,64384,64384,64320,64320,64256,64256,64192,64192,64128,64064,64064,64000,63936,63872,63872,63808,63744,63680,63680,63616,63552,63488,63424,63360,63296,63232,63168,63104,63104,62976,62912,
62848,62784,62720,62656,62592,62528,62464,62400,62272,62208,62144,62080,62016,61888,61824,61760,61632,61568,61504,61376,61312,61184,61120,61056,60928,60864,60736,60672,60544,60480,60352,60224,60160,60032,59968,59840,59712,59648,59520,59392,
59328,59200,59072,58944,58880,58752,58624,58496,58368,58240,58176,58048,57920,57792,57664,57536,57408,57280,57152,57024,56896,56768,56640,56512,56384,56256,56128,56000,55808,55680,55552,55424,55296,55168,54976,54848,54720,54592,54400,54272,
54144,54016,53824,53696,53568,53376,53248,53120,52928,52800,52608,52480,52288,52160,52032,51840,51712,51520,51392,51200,51072,50880,50752,50560,50368,50240,50048,49920,49728,49536,49408,49216,49088,48896,48704,48576,48384,48192,48064,47872,
47680,47488,47360,47168,46976,46784,46656,46464,46272,46080,45888,45760,45568,45376,45184,44992,44800,44672,44480,44288,44096,43904,43712,43520,43328,43200,43008,42816,42624,42432,42240,42048,41856,41664,41472,41280,41088,40896,40704,40512,
40320,40128,39936,39744,39552,39360,39168,38976,38784,38592,38400,38208,38016,37824,37632,37440,37248,37056,36864,36672,36480,36288,36096,35904,35712,35520,35264,35072,34880,34688,34496,34304,34112,33920,33728,33536,33344,33152,32960,32768,
32512,32320,32128,31936,31744,31552,31360,31168,30976,30784,30592,30400,30208,29952,29760,29568,29376,29184,28992,28800,28608,28416,28224,28032,27840,27648,27456,27264,27072,26880,26688,26496,26304,26112,25920,25728,25536,25344,25152,24960,
24768,24576,24384,24192,24000,23808,23616,23424,23232,23040,22848,22656,22464,22272,22144,21952,21760,21568,21376,21184,20992,20800,20672,20480,20288,20096,19904,19712,19584,19392,19200,19008,18816,18688,18496,18304,18112,17984,17792,17600,
17408,17280,17088,16896,16768,16576,16384,16256,16064,15936,15744,15552,15424,15232,15104,14912,14720,14592,14400,14272,14080,13952,13760,13632,13440,13312,13184,12992,12864,12672,12544,12352,12224,12096,11904,11776,11648,11456,11328,11200,
11072,10880,10752,10624,10496,10304,10176,10048,9920,9792,9664,9472,9344,9216,9088,8960,8832,8704,8576,8448,8320,8192,8064,7936,7808,7680,7552,7424,7296,7232,7104,6976,6848,6720,6592,6528,6400,6272,6144,6080,5952,5824,5760,5632,5504,5440,5312,
5248,5120,4992,4928,4800,4736,4608,4544,4416,4352,4288,4160,4096,3968,3904,3840,3712,3648,3584,3456,3392,3328,3264,3200,3072,3008,2944,2880,2816,2752,2688,2624,2560,2496,2368,2368,2304,2240,2176,2112,2048,1984,1920,1856,1792,1792,1728,1664,
1600,1600,1536,1472,1408,1408,1344,1280,1280,1216,1216,1152,1152,1088,1088,1024,1024,960,960,896,896,896,832,832,832,768,768,768,768,704,704,704,704,704,704,640,640,640,640,640,640,640,640,640,640,640,704,704,704,704,704,704,768,768,768,768,
832,832,832,896,896,896,960,960,1024,1024,1088,1088,1152,1152,1216,1216,1280,1280,1344,1408,1408,1472,1536,1600,1600,1664,1728,1792,1792,1856,1920,1984,2048,2112,2176,2240,2304,2368,2368,2496,2560,2624,2688,2752,2816,2880,2944,3008,3072,3200,
3264,3328,3392,3456,3584,3648,3712,3840,3904,3968,4096,4160,4288,4352,4416,4544,4608,4736,4800,4928,4992,5120,5248,5312,5440,5504,5632,5760,5824,5952,6080,6144,6272,6400,6528,6592,6720,6848,6976,7104,7232,7296,7424,7552,7680,7808,7936,8064,
8192,8320,8448,8576,8704,8832,8960,9088,9216,9344,9472,9664,9792,9920,10048,10176,10304,10496,10624,10752,10880,11072,11200,11328,11456,11648,11776,11904,12096,12224,12352,12544,12672,12864,12992,13184,13312,13440,13632,13760,13952,14080,
14272,14400,14592,14720,14912,15104,15232,15424,15552,15744,15936,16064,16256,16384,16576,16768,16896,17088,17280,17408,17600,17792,17984,18112,18304,18496,18688,18816,19008,19200,19392,19584,19712,19904,20096,20288,20480,20672,20800,20992,
21184,21376,21568,21760,21952,22144,22272,22464,22656,22848,23040,23232,23424,23616,23808,24000,24192,24384,24576,24768,24960,25152,25344,25536,25728,25920,26112,26304,26496,26688,26880,27072,27264,27456,27648,27840,28032,28224,28416,28608,
28800,28992,29184,29376,29568,29760,29952,30208,30400,30592,30784,30976,31168,31360,31552,31744,31936,32128,32320,32512};

int tri_lut[] = {32640,32768,32896,33024,33152,33280,33408,33536,33600,33728,33856,33984,34112,34240,34368,34496,34624,34752,34880,35008,35136,35264,35392,35456,35584,35712,35840,35968,36096,36224,36352,36480,36608,
36736,36864,36992,37120,37248,37312,37440,37568,37696,37824,37952,38080,38208,38336,38464,38592,38720,38848,38976,39104,39168,39296,39424,39552,39680,39808,39936,40064,40192,40320,40448,40576,40704,40832,40960,41024,41152,41280,41408,41536,
41664,41792,41920,42048,42176,42304,42432,42560,42688,42816,42880,43008,43136,43264,43392,43520,43648,43776,43904,44032,44160,44288,44416,44544,44672,44736,44864,44992,45120,45248,45376,45504,45632,45760,45888,46016,46144,46272,46400,46528,
46592,46720,46848,46976,47104,47232,47360,47488,47616,47744,47872,48000,48128,48256,48384,48448,48576,48704,48832,48960,49088,49216,49344,49472,49600,49728,49856,49984,50112,50240,50304,50432,50560,50688,50816,50944,51072,51200,51328,51456,
51584,51712,51840,51968,52096,52160,52288,52416,52544,52672,52800,52928,53056,53184,53312,53440,53568,53696,53824,53952,54016,54144,54272,54400,54528,54656,54784,54912,55040,55168,55296,55424,55552,55680,55808,55872,56000,56128,56256,56384,
56512,56640,56768,56896,57024,57152,57280,57408,57536,57664,57728,57856,57984,58112,58240,58368,58496,58624,58752,58880,59008,59136,59264,59392,59520,59584,59712,59840,59968,60096,60224,60352,60480,60608,60736,60864,60992,61120,61248,61376,
61440,61568,61696,61824,61952,62080,62208,62336,62464,62592,62720,62848,62976,63104,63232,63296,63424,63552,63680,63808,63936,64064,64192,64320,64192,64064,63936,63808,63680,63552,63424,63296,63232,63104,62976,62848,62720,62592,62464,62336,
62208,62080,61952,61824,61696,61568,61440,61376,61248,61120,60992,60864,60736,60608,60480,60352,60224,60096,59968,59840,59712,59584,59520,59392,59264,59136,59008,58880,58752,58624,58496,58368,58240,58112,57984,57856,57728,57664,57536,57408,
57280,57152,57024,56896,56768,56640,56512,56384,56256,56128,56000,55872,55808,55680,55552,55424,55296,55168,55040,54912,54784,54656,54528,54400,54272,54144,54016,53952,53824,53696,53568,53440,53312,53184,53056,52928,52800,52672,52544,52416,
52288,52160,52096,51968,51840,51712,51584,51456,51328,51200,51072,50944,50816,50688,50560,50432,50304,50240,50112,49984,49856,49728,49600,49472,49344,49216,49088,48960,48832,48704,48576,48448,48384,48256,48128,48000,47872,47744,47616,47488,
47360,47232,47104,46976,46848,46720,46592,46528,46400,46272,46144,46016,45888,45760,45632,45504,45376,45248,45120,44992,44864,44736,44672,44544,44416,44288,44160,44032,43904,43776,43648,43520,43392,43264,43136,43008,42880,42816,42688,42560,
42432,42304,42176,42048,41920,41792,41664,41536,41408,41280,41152,41024,40960,40832,40704,40576,40448,40320,40192,40064,39936,39808,39680,39552,39424,39296,39168,39104,38976,38848,38720,38592,38464,38336,38208,38080,37952,37824,37696,37568,
37440,37312,37248,37120,36992,36864,36736,36608,36480,36352,36224,36096,35968,35840,35712,35584,35456,35392,35264,35136,35008,34880,34752,34624,34496,34368,34240,34112,33984,33856,33728,33600,33536,33408,33280,33152,33024,32896,32768,32640,
32512,32384,32256,32128,32000,31872,31744,31680,31552,31424,31296,31168,31040,30912,30784,30656,30528,30400,30272,30144,30016,29888,29824,29696,29568,29440,29312,29184,29056,28928,28800,28672,28544,28416,28288,28160,28032,27968,27840,27712,
27584,27456,27328,27200,27072,26944,26816,26688,26560,26432,26304,26176,26112,25984,25856,25728,25600,25472,25344,25216,25088,24960,24832,24704,24576,24448,24320,24256,24128,24000,23872,23744,23616,23488,23360,23232,23104,22976,22848,22720,
22592,22464,22400,22272,22144,22016,21888,21760,21632,21504,21376,21248,21120,20992,20864,20736,20608,20544,20416,20288,20160,20032,19904,19776,19648,19520,19392,19264,19136,19008,18880,18752,18688,18560,18432,18304,18176,18048,17920,17792,
17664,17536,17408,17280,17152,17024,16896,16832,16704,16576,16448,16320,16192,16064,15936,15808,15680,15552,15424,15296,15168,15040,14976,14848,14720,14592,14464,14336,14208,14080,13952,13824,13696,13568,13440,13312,13184,13120,12992,12864,
12736,12608,12480,12352,12224,12096,11968,11840,11712,11584,11456,11328,11264,11136,11008,10880,10752,10624,10496,10368,10240,10112,9984,9856,9728,9600,9472,9408,9280,9152,9024,8896,8768,8640,8512,8384,8256,8128,8000,7872,7744,7616,7552,7424,
7296,7168,7040,6912,6784,6656,6528,6400,6272,6144,6016,5888,5760,5696,5568,5440,5312,5184,5056,4928,4800,4672,4544,4416,4288,4160,4032,3904,3840,3712,3584,3456,3328,3200,3072,2944,2816,2688,2560,2432,2304,2176,2048,1984,1856,1728,1600,1472,
1344,1216,1088,960,1088,1216,1344,1472,1600,1728,1856,1984,2048,2176,2304,2432,2560,2688,2816,2944,3072,3200,3328,3456,3584,3712,3840,3904,4032,4160,4288,4416,4544,4672,4800,4928,5056,5184,5312,5440,5568,5696,5760,5888,6016,6144,6272,6400,
6528,6656,6784,6912,7040,7168,7296,7424,7552,7616,7744,7872,8000,8128,8256,8384,8512,8640,8768,8896,9024,9152,9280,9408,9472,9600,9728,9856,9984,10112,10240,10368,10496,10624,10752,10880,11008,11136,11264,11328,11456,11584,11712,11840,11968,
12096,12224,12352,12480,12608,12736,12864,12992,13120,13184,13312,13440,13568,13696,13824,13952,14080,14208,14336,14464,14592,14720,14848,14976,15040,15168,15296,15424,15552,15680,15808,15936,16064,16192,16320,16448,16576,16704,16832,16896,
17024,17152,17280,17408,17536,17664,17792,17920,18048,18176,18304,18432,18560,18688,18752,18880,19008,19136,19264,19392,19520,19648,19776,19904,20032,20160,20288,20416,20544,20608,20736,20864,20992,21120,21248,21376,21504,21632,21760,21888,
22016,22144,22272,22400,22464,22592,22720,22848,22976,23104,23232,23360,23488,23616,23744,23872,24000,24128,24256,24320,24448,24576,24704,24832,24960,25088,25216,25344,25472,25600,25728,25856,25984,26112,26176,26304,26432,26560,26688,26816,
26944,27072,27200,27328,27456,27584,27712,27840,27968,28032,28160,28288,28416,28544,28672,28800,28928,29056,29184,29312,29440,29568,29696,29824,29888,30016,30144,30272,30400,30528,30656,30784,30912,31040,31168,31296,31424,31552,31680,31744,
31872,32000,32128,32256,32384,32512};

//first six entries used to be 640, 704, 768, 832, 896, and 960
int rmp_lut[] = {0,0,0,0,0,0,1024,1088,1152,1216,1280,1344,1408,1472,1536,1600,1664,1728,1792,1856,1920,1984,2048,2112,2176,2240,2304,2304,2368,2432,2496,2560,2624,2688,2752,2816,2880,2944,3008,3072,3136,
3200,3264,3328,3392,3456,3520,3584,3648,3712,3776,3840,3904,3968,4032,4096,4160,4224,4288,4352,4416,4480,4544,4608,4672,4736,4800,4864,4928,4992,5056,5120,5184,5248,5312,5376,5440,5504,5568,5632,5696,5696,5760,5824,5888,5952,6016,6080,6144,
6208,6272,6336,6400,6464,6528,6592,6656,6720,6784,6848,6912,6976,7040,7104,7168,7232,7296,7360,7424,7488,7552,7616,7680,7744,7808,7872,7936,8000,8064,8128,8192,8256,8320,8384,8448,8512,8576,8640,8704,8768,8832,8896,8960,9024,9088,9088,9152,
9216,9280,9344,9408,9472,9536,9600,9664,9728,9792,9856,9920,9984,10048,10112,10176,10240,10304,10368,10432,10496,10560,10624,10688,10752,10816,10880,10944,11008,11072,11136,11200,11264,11328,11392,11456,11520,11584,11648,11712,11776,11840,
11904,11968,12032,12096,12160,12224,12288,12352,12416,12480,12480,12544,12608,12672,12736,12800,12864,12928,12992,13056,13120,13184,13248,13312,13376,13440,13504,13568,13632,13696,13760,13824,13888,13952,14016,14080,14144,14208,14272,14336,
14400,14464,14528,14592,14656,14720,14784,14848,14912,14976,15040,15104,15168,15232,15296,15360,15424,15488,15552,15616,15680,15744,15808,15872,15872,15936,16000,16064,16128,16192,16256,16320,16384,16448,16512,16576,16640,16704,16768,16832,
16896,16960,17024,17088,17152,17216,17280,17344,17408,17472,17536,17600,17664,17728,17792,17856,17920,17984,18048,18112,18176,18240,18304,18368,18432,18496,18560,18624,18688,18752,18816,18880,18944,19008,19072,19136,19200,19264,19264,19328,
19392,19456,19520,19584,19648,19712,19776,19840,19904,19968,20032,20096,20160,20224,20288,20352,20416,20480,20544,20608,20672,20736,20800,20864,20928,20992,21056,21120,21184,21248,21312,21376,21440,21504,21568,21632,21696,21760,21824,21888,
21952,22016,22080,22144,22208,22272,22336,22400,22464,22528,22592,22656,22656,22720,22784,22848,22912,22976,23040,23104,23168,23232,23296,23360,23424,23488,23552,23616,23680,23744,23808,23872,23936,24000,24064,24128,24192,24256,24320,24384,
24448,24512,24576,24640,24704,24768,24832,24896,24960,25024,25088,25152,25216,25280,25344,25408,25472,25536,25600,25664,25728,25792,25856,25920,25984,26048,26048,26112,26176,26240,26304,26368,26432,26496,26560,26624,26688,26752,26816,26880,
26944,27008,27072,27136,27200,27264,27328,27392,27456,27520,27584,27648,27712,27776,27840,27904,27968,28032,28096,28160,28224,28288,28352,28416,28480,28544,28608,28672,28736,28800,28864,28928,28992,29056,29120,29184,29248,29312,29376,29440,
29440,29504,29568,29632,29696,29760,29824,29888,29952,30016,30080,30144,30208,30272,30336,30400,30464,30528,30592,30656,30720,30784,30848,30912,30976,31040,31104,31168,31232,31296,31360,31424,31488,31552,31616,31680,31744,31808,31872,31936,
32000,32064,32128,32192,32256,32320,32384,32448,32512,32576,32640,32704,32768,32832,32832,32896,32960,33024,33088,33152,33216,33280,33344,33408,33472,33536,33600,33664,33728,33792,33856,33920,33984,34048,34112,34176,34240,34304,34368,34432,
34496,34560,34624,34688,34752,34816,34880,34944,35008,35072,35136,35200,35264,35328,35392,35456,35520,35584,35648,35712,35776,35840,35904,35968,36032,36096,36160,36160,36224,36288,36352,36416,36480,36544,36608,36672,36736,36800,36864,36928,
36992,37056,37120,37184,37248,37312,37376,37440,37504,37568,37632,37696,37760,37824,37888,37952,38016,38080,38144,38208,38272,38336,38400,38464,38528,38592,38656,38720,38784,38848,38912,38976,39040,39104,39168,39232,39296,39360,39424,39488,
39552,39552,39616,39680,39744,39808,39872,39936,40000,40064,40128,40192,40256,40320,40384,40448,40512,40576,40640,40704,40768,40832,40896,40960,41024,41088,41152,41216,41280,41344,41408,41472,41536,41600,41664,41728,41792,41856,41920,41984,
42048,42112,42176,42240,42304,42368,42432,42496,42560,42624,42688,42752,42816,42880,42944,42944,43008,43072,43136,43200,43264,43328,43392,43456,43520,43584,43648,43712,43776,43840,43904,43968,44032,44096,44160,44224,44288,44352,44416,44480,
44544,44608,44672,44736,44800,44864,44928,44992,45056,45120,45184,45248,45312,45376,45440,45504,45568,45632,45696,45760,45824,45888,45952,46016,46080,46144,46208,46272,46336,46336,46400,46464,46528,46592,46656,46720,46784,46848,46912,46976,
47040,47104,47168,47232,47296,47360,47424,47488,47552,47616,47680,47744,47808,47872,47936,48000,48064,48128,48192,48256,48320,48384,48448,48512,48576,48640,48704,48768,48832,48896,48960,49024,49088,49152,49216,49280,49344,49408,49472,49536,
49600,49664,49728,49728,49792,49856,49920,49984,50048,50112,50176,50240,50304,50368,50432,50496,50560,50624,50688,50752,50816,50880,50944,51008,51072,51136,51200,51264,51328,51392,51456,51520,51584,51648,51712,51776,51840,51904,51968,52032,
52096,52160,52224,52288,52352,52416,52480,52544,52608,52672,52736,52800,52864,52928,52992,53056,53120,53120,53184,53248,53312,53376,53440,53504,53568,53632,53696,53760,53824,53888,53952,54016,54080,54144,54208,54272,54336,54400,54464,54528,
54592,54656,54720,54784,54848,54912,54976,55040,55104,55168,55232,55296,55360,55424,55488,55552,55616,55680,55744,55808,55872,55936,56000,56064,56128,56192,56256,56320,56384,56448,56512,56512,56576,56640,56704,56768,56832,56896,56960,57024,
57088,57152,57216,57280,57344,57408,57472,57536,57600,57664,57728,57792,57856,57920,57984,58048,58112,58176,58240,58304,58368,58432,58496,58560,58624,58688,58752,58816,58880,58944,59008,59072,59136,59200,59264,59328,59392,59456,59520,59584,
59648,59712,59776,59840,59904,59904,59968,60032,60096,60160,60224,60288,60352,60416,60480,60544,60608,60672,60736,60800,60864,60928,60992,61056,61120,61184,61248,61312,61376,61440,61504,61568,61632,61696,61760,61824,61888,61952,62016,62080,
62144,62208,62272,62336,62400,62464,62528,62592,62656,62720,62784,62848,62912,62976,63040,63104,63168,63232,63296,63296,63360,63424,63488,63552,63616,63680,63744,63808,63872,63936,64000,64064,64128,64192,64256,64320,64384,64448,64512,64576,
64640,64704,64768,64832,64896};

int sqr_lut[] = {65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int dc_lut[] = {65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535};

void UpdateLEDs() {
  if (rind > 1023) { rind = 0; } else { rind+=1; }
  if (redphase0) { redind = rind; } else { redind = 1023 - rind; }

  if (lind > 1023) { lind = 0; } else { lind+=1; }
  if (limphase0) { limind = lind; } else { limind = 1023 - lind; }

  if (gind > 1023) { gind = 0; } else { gind+=1; }
  if (grnphase0) { grnind = gind; } else { grnind = 1023 - gind; }

  if (bind > 1023) { bind = 0; } else { bind+=1; }
  if (bluphase0) { bluind = bind; } else { bluind = 1023 - bind; }

  if (vind > 1023) { vind = 0; } else { vind+=1; }
  if (viophase0) { vioind = vind; } else { vioind = 1023 - vind; }

  limval = round(limgain * (   CHANNEL_LUT_SEL[CHANNEL0][0]*  dc_lut[limind]
                             + CHANNEL_LUT_SEL[CHANNEL0][1] * sqr_lut[limind]
                             + CHANNEL_LUT_SEL[CHANNEL0][2]* sin_lut[limind]
                             + CHANNEL_LUT_SEL[CHANNEL0][3]* rmp_lut[limind]
                             + CHANNEL_LUT_SEL[CHANNEL0][4]* tri_lut[limind]) + limoffset);

  redval =  round(redgain * (CHANNEL_LUT_SEL[CHANNEL1][0] *  dc_lut[redind]
                           + CHANNEL_LUT_SEL[CHANNEL1][1] * sqr_lut[redind]
                           + CHANNEL_LUT_SEL[CHANNEL1][2] * sin_lut[redind]
                           + CHANNEL_LUT_SEL[CHANNEL1][3] * rmp_lut[redind]
                           + CHANNEL_LUT_SEL[CHANNEL1][4]* tri_lut[redind]) + redoffset);

  grnval = round(grngain * ( CHANNEL_LUT_SEL[CHANNEL2][0] *  dc_lut[grnind]
                           + CHANNEL_LUT_SEL[CHANNEL2][1] * sqr_lut[grnind]
                           + CHANNEL_LUT_SEL[CHANNEL2][2] * sin_lut[grnind]
                           + CHANNEL_LUT_SEL[CHANNEL2][3]* rmp_lut[grnind]
                           + CHANNEL_LUT_SEL[CHANNEL2][4] * tri_lut[grnind]) + grnoffset);

  bluval = round(blugain * ( CHANNEL_LUT_SEL[CHANNEL3][0]*  dc_lut[bluind]
                           + CHANNEL_LUT_SEL[CHANNEL3][1] * sqr_lut[bluind]
                           + CHANNEL_LUT_SEL[CHANNEL3][2] * sin_lut[bluind]
                           + CHANNEL_LUT_SEL[CHANNEL3][3]* rmp_lut[bluind]
                           + CHANNEL_LUT_SEL[CHANNEL3][4] * tri_lut[bluind]) + bluoffset);

  vioval = round(viogain * ( CHANNEL_LUT_SEL[CHANNEL4][0]*  dc_lut[vioind]
                           + CHANNEL_LUT_SEL[CHANNEL4][1]* sqr_lut[vioind]
                           + CHANNEL_LUT_SEL[CHANNEL4][2]* sin_lut[vioind]
                           + CHANNEL_LUT_SEL[CHANNEL4][3] * rmp_lut[vioind]
                           + CHANNEL_LUT_SEL[CHANNEL4][4] * tri_lut[vioind]) + viooffset);
}
static void timer_isr(void* arg)
{
    TIMERG0.int_clr_timers.t0 = 1;
    TIMERG0.hw_timer[0].config.alarm_en = 1;
    UpdateLEDs();
    ledc_set_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel,limval);
    ledc_update_duty(ledc_channel[0].speed_mode, ledc_channel[0].channel);
    //ledc_set_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel,redval);
    //ledc_update_duty(ledc_channel[1].speed_mode, ledc_channel[1].channel);
    //ledc_set_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel,grnval);
   // ledc_update_duty(ledc_channel[2].speed_mode, ledc_channel[2].channel);
    /*ledc_set_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel,bluval);
    ledc_update_duty(ledc_channel[3].speed_mode, ledc_channel[3].channel);
    ledc_set_duty(ledc_channel[4].speed_mode, ledc_channel[4].channel,vioval);
    ledc_update_duty(ledc_channel[4].speed_mode, ledc_channel[4].channel);*/
    // your code, runs in the interrupt
}
void init_timer(int timer_period_us)
{
    timer_config_t config = {
            .alarm_en = true,
            .counter_en = false,
            .intr_type = TIMER_INTR_LEVEL,
            .counter_dir = TIMER_COUNT_UP,
            .auto_reload = true,
            .divider = 80  /* 1 us per tick */
    };

    timer_init(TIMER_GROUP_0, TIMER_0, &config);
    timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0);
    timer_set_alarm_value(TIMER_GROUP_0, TIMER_0, timer_period_us);
    timer_enable_intr(TIMER_GROUP_0, TIMER_0);
    timer_isr_register(TIMER_GROUP_0, TIMER_0, &timer_isr, NULL, 0, &s_timer_handle);

    timer_start(TIMER_GROUP_0, TIMER_0);
}
double requested = 1;
void Tuo_mode_Start(get_mode_start *mode_pointer)
{
       int ch;
       ledc_timer_config_t ledc_timer = {
               .duty_resolution = LEDC_TIMER_16_BIT, // resolution of PWM duty
               .freq_hz =1000,                      // frequency of PWM signal
               .speed_mode = LEDC_HS_MODE,           // timer mode
               .timer_num = LEDC_HS_TIMER            // timer index
           };
           ledc_timer_config(&ledc_timer);
           // Prepare and set configuration of timer1 for low speed channels
           /*ledc_timer.speed_mode = LEDC_LS_MODE;
           ledc_timer.timer_num = LEDC_LS_TIMER;
           ledc_timer_config(&ledc_timer);*/
           ledc_channel_config_t ledc_channel[LEDC_TEST_CH_NUM] = {
                   {
                       .channel    = LEDC_HS_CH0_CHANNEL,
                       .duty       = 0,
                       .gpio_num   = LEDC_HS_CH0_GPIO,
                       .speed_mode = LEDC_HS_MODE,
                       .hpoint     = 0,
                       .timer_sel  = LEDC_HS_TIMER
                   },
                   {
                       .channel    = LEDC_HS_CH1_CHANNEL,
                       .duty       = 0,
                       .gpio_num   = LEDC_HS_CH1_GPIO,
                       .speed_mode = LEDC_HS_MODE,
                       .hpoint     = 0,
                       .timer_sel  = LEDC_HS_TIMER
                   },
                   {
                       .channel    = LEDC_HS_CH2_CHANNEL,
                       .duty       = 0,
                       .gpio_num   = LEDC_LS_CH2_GPIO,
                       .speed_mode = LEDC_HS_MODE,
                       .hpoint     = 0,
                       .timer_sel  = LEDC_HS_TIMER
                   },
                   {
                       .channel    = LEDC_HS_CH3_CHANNEL,
                       .duty       = 0,
                       .gpio_num   = LEDC_LS_CH3_GPIO,
                       .speed_mode = LEDC_HS_MODE,
                       .hpoint     = 0,
                       .timer_sel  = LEDC_HS_TIMER
                   },
                   {
                      .channel    = LEDC_HS_CH4_CHANNEL,
                      .duty       = 0,
                      .gpio_num   = LEDC_LS_CH4_GPIO,
                      .speed_mode = LEDC_HS_MODE,
                      .hpoint     = 0,
                      .timer_sel  = LEDC_HS_TIMER
                   },
               };

       for (ch = 0; ch < LEDC_TEST_CH_NUM; ch++)
       {
           ledc_channel_config(&ledc_channel[ch]);
       }
    printf("Value of Header %02X%02X\r\n",mode_pointer->header[0],mode_pointer->header[1]);
    printf("Value of Version %d\r\n",mode_pointer->version);
    printf("Value of LUT %02X%02X%02X%02X%02X \r\n",mode_pointer->Sel_Channel_Number[0],mode_pointer->Sel_Channel_Number[1],mode_pointer->Sel_Channel_Number[2],mode_pointer->Sel_Channel_Number[3],mode_pointer->Sel_Channel_Number[4]);
    printf("Value of MSB %d\r\n",mode_pointer->msb);
    printf("Value of LSB %d\r\n",mode_pointer->lsb);
    printf("Value of Direction %02X\r\n",mode_pointer->direction);
    if(mode_pointer->header[0] != 0xAA && mode_pointer->header[1] != 0xBB )
    {
        return;
    }
         if(mode_pointer->version==1)
         {
          for(int j=0;j<MAX_CHANNEL_NUM;j++)
          {
             int tmp_lut = mode_pointer->Sel_Channel_Number[j];
             for(int i=4;i>=0;--i)
             {
              if(tmp_lut & 0x01)
              {
                  //CHANNEL_LUT_SEL[j][i]= 1;
              }
              tmp_lut >>= 1;
             }
          }
         }
         for(int x=0;x<MAX_CHANNEL_NUM;++x)
         {
           for(int y =0;y<5;++y){
           printf("%d" ,CHANNEL_LUT_SEL[x][y]);

           }
           printf("\n");
         }
   if (requested >5.0||requested < 0.5)
           {
           printf("Please Enter correct frequency\r\n");
           }
    else
           {
            double result = pow(requested,(-0.995));
            requested = 970 * result;
            init_timer(requested);
           }
}
