#include "sr_sunrise.h"

//组件默认的参数定义，详见param_def.h
/*
#define SR_PARAM_DEFINE    { \
PARAM_STRING(car,         15,     wow)  \
PARAM_ARRAY (mac_addr,    6,      AB CD EF 01 02 03)  \
PARAM_INT   (my_age,      25)   \
PARAM_INT64 (my_money,    56789123456789) \
PARAM_HEX   (reg_addr,    A001)  \
PARAM_HEX64 (reg_value,   12345678ABCDEF) \
PARAM_FLOAT (voltage,     12.34) \
PARAM_DOUBLE(energy,      87654321.123) \
*/

/*
typedef enum{
    PTYPE_STR = 0,      //0-string
    PTYPE_ARRAY,        //1-unsigned char array
    PTYPE_INT,          //2-32/64 bits signed int
    PTYPE_HEX,          //3-32/64 bits unsigned int
    PTYPE_FLOAT         //4-float/double
}param_type_t;
*/

static int _ParamInit(int argc, char *argv[])
{
	int ret = 0;
	
	param_init();
	
	ret = param_load_from_flash();
	
	if(ret != SR_OK)
	{
       SR_LOG(INFO,"param first load fail,ready to save!");
	   ret = param_save_to_flash();
       SR_LOG(INFO,"param save,ret(%d)!",ret);
	}
	
	return ret;
}
SR_SHELL_CMD_EXPORT(paramInit, _ParamInit);


//paramRead <name> <type>
static int _ParamRead(int argc, char *argv[])
{
	int ret = 0,i;
	uint8_t buf[64]={0};
	uint8_t type=0;
	int *val;

	if(argc<3) return -1;
	type = atoi(argv[2]);
	
	ret = param_read_by_name(argv[1], buf, sizeof(buf));
	SR_LOG(INFO,"param read ,ret(%d)",ret);
	
	if(ret>0)
	{
	   switch(type)
	   	{
          case 0:
               SR_LOG(INFO,"str(%s)",buf);
		  break;
		      
		  case 1:
		  	{
		  	   SR_Printf("arr[ ");
               for(i=0;i<ret;i++) SR_Printf("%X ",buf[i]);
			   SR_Printf("]");
		  	}
		  break;
               
		  case 2:
		  	   val = (int *)&buf[0];
               SR_LOG(INFO,"int(%d)",*val);
		  break;	 
	   }
	   
	}
	
	return ret;
}
SR_SHELL_CMD_EXPORT(paramRead, _ParamRead);


//paramWrite <name> <type> <buf>
static int _ParamWrite(int argc, char *argv[])
{
	int ret = -1;
	int value=0;
    uint8_t type=0;
	if(argc<4) return -1;

    type = atoi(argv[2]);

	switch(type)
   	{
      case 0:		  	      
	  case 1:
	  	  ret = param_write_by_name(argv[1], argv[3], strlen(argv[3]));   
	  break;
           
	  case 2:
           value = atoi(argv[3]);
		   ret = param_write_by_name(argv[1], &value, sizeof(int)); 
           
	  break;	 
   }
	
	SR_LOG(INFO,"param write,ret(%d)",ret);
	if(ret==SR_OK) param_save_to_flash();

	return ret;
}
SR_SHELL_CMD_EXPORT(paramWrite, _ParamWrite);




