function decodeUplink(input) {
        return { 
            data: Decode(input.fPort, input.bytes, input.variables)
        };   
}
function datalog(i,bytes){
  var aa= parseFloat((bytes[1+i]<<8 | bytes[2+i])/100).toFixed(2);
  var bb= parseFloat((bytes[3+i]<<8 | bytes[4+i])/100).toFixed(2);
  var cc= parseFloat((bytes[5+i]<<8 | bytes[6+i])/100).toFixed(2);   
  var dd= (bytes[0+i]&0x02) ? "High":"Low";
  var ee= (bytes[0+i]&0x01) ? "True":"False";
  var ff= getMyDate((bytes[7+i]<<24 | bytes[8+i]<<16 | bytes[9+i]<<8 | bytes[10+i]).toString(10));
  var string='['+aa+','+bb+','+cc+','+dd+','+ee+','+ff+']'+',';  
  
  return string;
}

function datalog2(i,bytes){
  var aa= parseFloat((bytes[i]<<8 | bytes[i+1])/100).toFixed(2); 
  var string='['+ aa +']'+',';  
  return string;
}

function getzf(c_num){ 
  if(parseInt(c_num) < 10)
    c_num = '0' + c_num; 

  return c_num; 
}

function getMyDate(str){ 
  var c_Date;
  if(str > 9999999999)
    c_Date = new Date(parseInt(str));
  else 
    c_Date = new Date(parseInt(str) * 1000);
  
  var c_Year = c_Date.getFullYear(), 
  c_Month = c_Date.getMonth()+1, 
  c_Day = c_Date.getDate(),
  c_Hour = c_Date.getHours(), 
  c_Min = c_Date.getMinutes(), 
  c_Sen = c_Date.getSeconds();
  var c_Time = c_Year +'-'+ getzf(c_Month) +'-'+ getzf(c_Day) +' '+ getzf(c_Hour) +':'+ getzf(c_Min) +':'+getzf(c_Sen); 
  
  return c_Time;
}

function Decode(fPort, bytes, variables) {
  //CS01-LB Decode   
  if(fPort==0x02)
  {
    var decode = {}; 
    var value=(bytes[0]<<8 | bytes[1]) & 0x3FFF;
    decode.BatV= value/1000;
    decode.EXTI_Trigger=(bytes[0] & 0x40)? "TRUE":"FALSE";
    decode.EXTI_Level=(bytes[0] & 0x80)? "HIGH":"LOW";
    decode.Current1_A=(bytes[2]<<8 | bytes[3])/100;
    decode.Current2_A=(bytes[4]<<8 | bytes[5])/100;
    decode.Current3_A=(bytes[6]<<8 | bytes[7])/100;
    decode.Current4_A=(bytes[8]<<8 | bytes[9])/100;
    decode.Cur1L_status= (bytes[10] &0x80)? "True":"False";
    decode.Cur1H_status= (bytes[10] &0x40)? "True":"False";
    decode.Cur2L_status= (bytes[10] &0x20)? "True":"False";
    decode.Cur2H_status= (bytes[10] &0x10)? "True":"False";   
    decode.Cur3L_status= (bytes[10] &0x08)? "True":"False";
    decode.Cur3H_status= (bytes[10] &0x04)? "True":"False";
    decode.Cur4L_status= (bytes[10] &0x02)? "True":"False";
    decode.Cur4H_status= (bytes[10] &0x01)? "True":"False"; 
    decode.Node_type="CS01-LB";
    if(bytes.length==11)
    {
      return decode;     
    }
  }
  else if(fPort==7)
  {
    var Bat= (bytes[0]<<8 | bytes[1])/1000;
    for(var k=2;k<bytes.length;k=k+2)
    {
      data= datalog2(k,bytes);
      if(k=='2')
        data_sum=data;
      else
        data_sum+=data;
    }
    return{
	Node_type:"CS01-LB",
    Bat_V:Bat,
    DATALOG:data_sum
    };    
  }  
  else if(fPort==0x03)  
  {
    var pnack= ((bytes[0]>>7)&0x01) ? "True":"False";
    for(var i=0;i<bytes.length;i=i+11)
    {
      var data= datalog(i,bytes);
      if(i=='0')
        data_sum=data;
      else
        data_sum+=data;
    }
    return{
	Node_type:"CS01-LB",
    DATALOG:data_sum,
    PNACKMD:pnack,
    };    
  }  
  else if(fPort==0x05)
  {
  	var freq_band;
  	var sub_band;
    var sensor;
    
    if(bytes[0]==0x33)
      sensor= "CS01-LB";
      
	  var firm_ver= (bytes[1]&0x0f)+'.'+(bytes[2]>>4&0x0f)+'.'+(bytes[2]&0x0f);
	  
    if(bytes[3]==0x01)
        freq_band="EU868";
  	else if(bytes[3]==0x02)
        freq_band="US915";
  	else if(bytes[3]==0x03)
        freq_band="IN865";
  	else if(bytes[3]==0x04)
        freq_band="AU915";
  	else if(bytes[3]==0x05)
        freq_band="KZ865";
  	else if(bytes[3]==0x06)
        freq_band="RU864";
  	else if(bytes[3]==0x07)
        freq_band="AS923";
  	else if(bytes[3]==0x08)
        freq_band="AS923_1";
  	else if(bytes[3]==0x09)
        freq_band="AS923_2";
  	else if(bytes[3]==0x0A)
        freq_band="AS923_3";
  	else if(bytes[3]==0x0F)
        freq_band="AS923_4";
  	else if(bytes[3]==0x0B)
        freq_band="CN470";
  	else if(bytes[3]==0x0C)
        freq_band="EU433";
  	else if(bytes[3]==0x0D)
        freq_band="KR920";
  	else if(bytes[3]==0x0E)
        freq_band="MA869";
  	
    if(bytes[4]==0xff)
      sub_band="NULL";
	  else
      sub_band=bytes[4];

    var bat= (bytes[5]<<8 | bytes[6])/1000;
    
  	return {
  	  SENSOR_MODEL:sensor,
      FIRMWARE_VERSION:firm_ver,
      FREQUENCY_BAND:freq_band,
      SUB_BAND:sub_band,
      BAT:bat,
  	}
  }  
}