Example #1
0
static void parse_cfg_cmd(struct ubl_header *ublhdr, int32_t cmd, char *token,
				char *name, int lineno, int fld, int dcd_len)
{
	static int cmd_ver_first = ~0;

	switch (cmd) {
	case CMD_BOOT_MODE:
		ublhdr->magic = get_table_entry_id(ublimage_bootops,
					"ublimage special boot mode", token);
		if (ublhdr->magic == -1) {
			fprintf(stderr, "Error: %s[%d] -Invalid boot mode"
				"(%s)\n", name, lineno, token);
			exit(EXIT_FAILURE);
		}
		ublhdr->magic += UBL_MAGIC_BASE;
		if (unlikely(cmd_ver_first != 1))
			cmd_ver_first = 0;
		break;
	case CMD_ENTRY:
		ublhdr->entry = get_cfg_value(token, name, lineno);
		break;
	case CMD_PAGE:
		ublhdr->pages = get_cfg_value(token, name, lineno);
		break;
	case CMD_ST_BLOCK:
		ublhdr->block = get_cfg_value(token, name, lineno);
		break;
	case CMD_ST_PAGE:
		ublhdr->page = get_cfg_value(token, name, lineno);
		break;
	case CMD_LD_ADDR:
		ublhdr->pll_m = get_cfg_value(token, name, lineno);
		break;
	}
}
Example #2
0
static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
		char *token, char *name, int lineno, int fld, int *dcd_len)
{
	int value;

	switch (fld) {
	case CFG_COMMAND:
		*cmd = get_table_entry_id(imximage_cmds,
			"imximage commands", token);
		if (*cmd < 0) {
			fprintf(stderr, "Error: %s[%d] - Invalid command"
			"(%s)\n", name, lineno, token);
			exit(EXIT_FAILURE);
		}
		break;
	case CFG_REG_SIZE:
		parse_cfg_cmd(imxhdr, *cmd, token, name, lineno, fld, *dcd_len);
		break;
	case CFG_REG_ADDRESS:
	case CFG_REG_VALUE:
		switch(*cmd) {
		case CMD_WRITE_DATA:
		case CMD_WRITE_CLR_BIT:
		case CMD_WRITE_SET_BIT:
		case CMD_CHECK_BITS_SET:
		case CMD_CHECK_BITS_CLR:

			value = get_cfg_value(token, name, lineno);
			if (set_dcd_param)
				(*set_dcd_param)(imxhdr, *dcd_len, *cmd);
			(*set_dcd_val)(imxhdr, name, lineno, fld, value,
					*dcd_len);

			if (fld == CFG_REG_VALUE) {
				(*dcd_len)++;
				if (*dcd_len > max_dcd_entries) {
					fprintf(stderr, "Error: %s[%d] -"
						"DCD table exceeds maximum size(%d)\n",
						name, lineno, max_dcd_entries);
					exit(EXIT_FAILURE);
				}
			}
			break;
		case CMD_PLUGIN:
			value = get_cfg_value(token, name, lineno);
			imximage_iram_free_start = value;
			break;
		default:
			break;
		}
		break;
	default:
		break;
	}
}
Example #3
0
cfgdata split_cfg_line(char *cfgline)
{
	cfgdata retval;
	get_cfg_name(cfgline, retval.cfgname, '=');
	get_cfg_value(cfgline, retval.cfgval, '=');
	return retval;
} // split_cfg_line()
Example #4
0
// find there is a input type is "radio" in this line and insert the value for displaying
inline void radio_value_insert(char *line, char *var_head, FILE *out)
{
    char *file_head1, *file_head2, *radio_var, *ptr;

    if((radio_var=parsestr1(var_head,"/*value=\"")) && (file_head1=parsestr1(var_head,"/*name=\"")))
    {
	if(file_head1<radio_var){
	    file_head2=radio_var;
	    ptr=file_head1;
	}else{
	    file_head2=file_head1;
	    ptr=radio_var;
	}
	file_head2=strchr(file_head2,'\"');
	file_head2[0]='\0';
	file_head2++;
	fprintf(out,"%s\" %s\"", line, var_head);

	ptr=strchr(ptr,'\"');
	ptr[0]='\0';
	ptr++;

	ptr = get_cfg_value(NULL, file_head1, 0);	//another ptr
	if(ptr && (strcmp(ptr,radio_var)==0) )
		    fprintf(out,"checked");
	point[1] = file_head2;
    }
    else fprintf(out, "%s\"", line);	/* send out the remain of line */
}
static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name)
{
	FILE *fd = NULL;
	char *line = NULL;
	char *token, *saveptr1, *saveptr2;
	int lineno = 0;
	int fld, value;
	size_t len;
	int dcd_len = 0;
	dcd_t *dcd = &imxhdr->dcd_table;
	int32_t cmd;

	fd = fopen(name, "r");
	if (fd == 0) {
		fprintf(stderr, "Error: %s - Can't open DCD file\n", name);
		exit(EXIT_FAILURE);
	}

	/* Very simple parsing, line starting with # are comments
	 * and are dropped
	 */
	while ((getline(&line, &len, fd)) > 0) {
		lineno++;

		token = strtok_r(line, "\r\n", &saveptr1);
		if (token == NULL)
			continue;

		/* Check inside the single line */
		for (fld = CFG_COMMAND, cmd = CMD_INVALID,
				line = token; ; line = NULL, fld++) {
			token = strtok_r(line, " \t", &saveptr2);
			if (token == NULL)
				break;

			/* Drop all text starting with '#' as comments */
			if (token[0] == '#')
				break;

			/* parse all fields in a single line */
			switch (fld) {
			case CFG_COMMAND:
				cmd = get_table_entry_id(imximage_cmds,
					"imximage commands", token);
				if (cmd < 0) {
					fprintf(stderr,
						"Error: %s[%d] - "
						"Invalid command (%s)\n",
						name, lineno, token);
					exit(EXIT_FAILURE);
				}
				break;
			case CFG_REG_SIZE:
				switch (cmd) {
				case CMD_BOOT_FROM:
					/* Get flash header offset */
					imxhdr->flash_offset =
						get_table_entry_id(
							imximage_bootops,
							"imximage boot option",
							token);
					if (imxhdr->flash_offset == -1) {
						fprintf(stderr,
							"Error: %s[%d] -"
							"Invalid boot device"
							"(%s)\n",
							name, lineno, token);
						exit(EXIT_FAILURE);
					}
					break;
				case CMD_DATA:
					value = get_cfg_value(token,
							name, lineno);

					/* Byte, halfword, word */
					if ((value != 1) &&
						(value != 2) && (value != 4)) {
						fprintf(stderr,
							"Error: %s[%d] - "
							"Invalid register size "
							"(%d)\n",
							name, lineno, value);
						exit(EXIT_FAILURE);
					}
					dcd->addr_data[dcd_len].type = value;
					break;
				}

			case CFG_REG_ADDRESS:
				if (cmd == CMD_DATA)
					dcd->addr_data[dcd_len].addr =
						get_cfg_value(token,
							name, lineno);
				break;
			case CFG_REG_VALUE:
				if (cmd == CMD_DATA) {
					dcd->addr_data[dcd_len].value =
						get_cfg_value(token,
							name, lineno);
					dcd_len++;
				}
				break;
			}
		}

		if (dcd_len > MAX_HW_CFG_SIZE) {
			fprintf(stderr,
				"Error: %s[%d] -"
				"DCD table exceeds maximum size(%d)\n",
				name, lineno, MAX_HW_CFG_SIZE);
		}
	}
	dcd->preamble.barker = DCD_BARKER;
	dcd->preamble.length = dcd_len * sizeof(dcd_type_addr_data_t);
	fclose(fd);

	return dcd_len;
}
Example #6
0
static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token,
				char *name, int lineno, int fld, int dcd_len)
{
	int value;
	static int cmd_ver_first = ~0;

	switch (cmd) {
	case CMD_IMAGE_VERSION:
		imximage_version = get_cfg_value(token, name, lineno);
		if (cmd_ver_first == 0) {
			fprintf(stderr, "Error: %s[%d] - IMAGE_VERSION "
				"command need be the first before other "
				"valid command in the file\n", name, lineno);
			exit(EXIT_FAILURE);
		}
		cmd_ver_first = 1;
		set_hdr_func();
		break;
	case CMD_BOOT_FROM:
		imximage_ivt_offset = get_table_entry_id(imximage_boot_offset,
					"imximage boot option", token);
		if (imximage_ivt_offset == -1) {
			fprintf(stderr, "Error: %s[%d] -Invalid boot device"
				"(%s)\n", name, lineno, token);
			exit(EXIT_FAILURE);
		}

		imximage_init_loadsize =
			get_table_entry_id(imximage_boot_loadsize,
					   "imximage boot option", token);

		if (imximage_init_loadsize == -1) {
			fprintf(stderr,
				"Error: %s[%d] -Invalid boot device(%s)\n",
				name, lineno, token);
			exit(EXIT_FAILURE);
		}

		/*
		 * The SOC loads from the storage starting at address 0
		 * then ensures that the load size contains the offset
		 */
		if (imximage_init_loadsize < imximage_ivt_offset)
			imximage_init_loadsize = imximage_ivt_offset;
		if (unlikely(cmd_ver_first != 1))
			cmd_ver_first = 0;
		break;
	case CMD_BOOT_OFFSET:
		imximage_ivt_offset = get_cfg_value(token, name, lineno);
		if (unlikely(cmd_ver_first != 1))
			cmd_ver_first = 0;
		break;
	case CMD_WRITE_DATA:
	case CMD_WRITE_CLR_BIT:
	case CMD_WRITE_SET_BIT:
	case CMD_CHECK_BITS_SET:
	case CMD_CHECK_BITS_CLR:
		value = get_cfg_value(token, name, lineno);
		if (set_dcd_param)
			(*set_dcd_param)(imxhdr, dcd_len, cmd);
		(*set_dcd_val)(imxhdr, name, lineno, fld, value, dcd_len);
		if (unlikely(cmd_ver_first != 1))
			cmd_ver_first = 0;
		break;
	case CMD_CSF:
		if (imximage_version != 2) {
			fprintf(stderr,
				"Error: %s[%d] - CSF only supported for VERSION 2(%s)\n",
				name, lineno, token);
			exit(EXIT_FAILURE);
		}
		imximage_csf_size = get_cfg_value(token, name, lineno);
		if (unlikely(cmd_ver_first != 1))
			cmd_ver_first = 0;
		break;
	case CMD_PLUGIN:
		plugin_image = 1;
		copy_plugin_code(imxhdr, token);
		break;
	}
}
int AccelSensor::gsensor_cfg()
{
        FILE *fp;
        int name_match = 0;
        char buf[128] = {0};
        char * val;
        
        if((fp = fopen(GSENSOR_CONFIG_PATH, "rb")) == NULL) {
                ALOGD("can't not open file!\n");
                return 0;
        }
        
        while(fgets(buf, LINE_LENGTH, fp))
        {
                if (!strncmp(buf, GSENSOR_NAME, strlen(GSENSOR_NAME))) {
                        val = get_cfg_value(buf);
                        #ifdef DEBUG_SENSOR
                                ALOGD("val:%s\n",val);
                        #endif
                        name_match = (strncmp(val, gsensorInfo.sensorName, strlen(gsensorInfo.sensorName))) ? 0 : 1;
                                
                        if (name_match)  {
                                convert = (GRAVITY_EARTH/gsensorInfo.priData);
                                #ifdef DEBUG_SENSOR
                                        ALOGD("lsg: %f,convert:%f", gsensorInfo.priData, convert);
                                #endif
                                memset(&buf, 0, sizeof(buf));
                                continue;
                        } 
                        
                }  
                
                if(name_match ==0){
                        memset(&buf, 0, sizeof(buf));
                        continue;
                }else if(name_match < 5){
                        name_match++;
                        val = get_cfg_value(buf); 
                        #ifdef DEBUG_SENSOR
                                ALOGD("val:%s\n", val);
                        #endif
                        
                       if (!strncmp(buf,GSENSOR_DIRECTX, strlen(GSENSOR_DIRECTX))){                                
                                  direct_x = (strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert;      
                       }
                       
                       if (!strncmp(buf, GSENSOR_DIRECTY, strlen(GSENSOR_DIRECTY))){                                         
                                  direct_y =(strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert;      
                       }
                       
                      if (!strncmp(buf, GSENSOR_DIRECTZ, strlen(GSENSOR_DIRECTZ))){
                                 direct_z =(strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert; 
                       }
                       
                       if (!strncmp(buf,GSENSOR_XY, strlen(GSENSOR_XY))){
                                 direct_xy = (strncmp(val, TRUE,strlen(val))) ? 0 : 1; 
                       }
                       
                
                }else{
                        name_match = 0;
                        break;
                }
                memset(&buf, 0, sizeof(buf));
        }
        
        #ifdef DEBUG_SENSOR
                ALOGD("direct_x: %f,direct_y: %f,direct_z: %f,direct_xy:%d,sensor_name:%s \n",
                        direct_x, direct_y, direct_z, direct_xy, gsensorInfo.sensorName);
        #endif
        
        if((direct_x == 0) || (direct_y == 0) || (direct_z == 0) || (direct_xy == (-1)) || (convert == 0.0)) {
                return 0;
        }
        
        fclose(fp);
        return 1;
    
}
Example #8
0
/**used by DoHTML for scanning some values in http-files and insert DATA and send them to browser**/
int handle_get(char *data, FILE *write_f)
{
    char *var_index;
    char *sel_value='\0';
    int if_prm = 1;

static int loop_counter = 0;	// used if loops exissted
if(loop_counter > 10){
	fprintf(write_f, "max loop counter reached\n");
	return 0;
	}
loop_counter++;

//    alarm(TIMEOUT);//RAW

//    free_page_mem();	//free memory of page includes

//in search used parsestr1()
char *search[] = {"<!--/ if=\"/[/*/]\"/ -->/,\n,",	//0
		  "<!--/ else/ -->/,\n,",		//1
		  "<!--/ //if/ -->/,\n,",		//2
		  "<!--/ CGI:/ /[/*/]END_CGI/ -->",	//3
		  "??/[/*/]??",		//4
		  "<!--/ #include/ /[/*/]-->/,\n,",
		  "<!--/ TABLE:/ /[/*/]END_TABLE/ -->",	//6
//		  "<input/ type=\"/[/*/]\"",	//maybe replace via 4
		  "<input/ type=\"radio\"",
		  "<select/*name=\"/[/*/]\"",		//8
		  "<option/*value=\"/[/*/]\"",
		  "<!--/*-->",
		  NULL};



int i = 0;
char *ptr, *file_head;

while(*data){
    if(*data == *search[i] && (var_index = parsestr1(data+1, search[i]+1))){
    ptr = point[1];
	//do something with i.
	switch(i){
	    case 0:
	    	    if(cfg_arg_strcmp(var_index, 0)){		//compare WEB_NAME
		    //not matching, skip
		    if_prm = 0;
		    } else
		    // is matching, print
		    if_prm = 1;
		    break;
	    case 1: if_prm = !if_prm;	//invers
		    break;
	    case 2:
		    //is matching, print
		    if_prm = 1;
		    break;
	}
	if(if_prm) switch(i){
	    case 3: //CGI script
		    parse_cgi_script(var_index);
		    point[1] = ptr;
	    case 4:
		    //show variables value
		    file_head = get_var(NULL, var_index);

		    if(file_head) print(write_f, file_head);/*fprintf(write_f,"%s", file_head);*/
#ifdef DEBUG
		    printf(" Var_index %s file_head %s\n", var_index, file_head);
#endif
			point[1] = ptr;
		    break;
	    case 5:
		    //include descriptor
			include_(data, var_index, write_f);
			point[1] = ptr;
		    break;
	    case 6:
		    //table
			parse_tbl(var_index);
			point[1] = ptr;
		    break;
	    case 7:
		    //input-form-atribute
/*        	    if (!strcmp(var_index, "text") || 
			!strcmp(var_index, "password") ||
			!strcmp(var_index, "hidden"))	//main used for def. input text
			text_value_insert(file_head, point[1], write_f);
//			text_value_insert(file_head, ptr, write_f);
		    else */ 
//		    if (!strcmp(var_index, "radio"))
			radio_value_insert(data, point[1], write_f);
//		    else fprintf(write_f,"%s\"", data);
		    break;
	    case 8:
		    //select-form-attribute
		    // find there is a 'select drop-down list' in this line and insert the value for displaying
		    fprintf(write_f,"%s\"", data);
		    sel_value = get_cfg_value(NULL, var_index, 0);
		    break;
	    case 9:
		    //option-form-attribute
		    fprintf(write_f,"%s\"", data);
		    if(sel_value && strcmp(sel_value,var_index)==0)
			fprintf(write_f, " selected");
#ifdef DEBUG
		    printf("select_value_insert: %s, =? value: %s\n", var_index, sel_value);
#endif
		    break;
	    case 10: break;//comments not show!!
	}
	data = point[1];
	i = 0;
//printf("INDEX %d\n", i);
    }
    else {
        i++;
//	if(!if_prm && (i==4)) {i= 0;continue;}//if_prm ==0 =>check only first three lines
	if(search[i]) continue;
	i = 0;
//	if(if_prm) fprintf(write_f,"%c", *file_head);
	if(if_prm) putc(*data, write_f);
	data++;
    }
}

loop_counter--;
//    printf("Time to ALARM: %d\n", alarm(0));//RAW
  return 0;
}
Example #9
0
char *get_var(unsigned long long *size_ptr, char *var_index){

    char *ptr = NULL;
    unsigned long long size = 0;	//if Zero - not write able

    if(*var_index == '_'){	/* global variables */
	var_index++;

        if(*var_index == '_'){	//??__variable?? - show environment variable
	    var_index++;
	    ptr = getenv(var_index);
	}else if(*var_index == '#'){	//??_#variable?? - show command variable index.html?variable=5
	    var_index++;
	    if(*var_index == '#'){	//??_##variable?? - show local command variable index.html?variable=5
		var_index++;
		return get_arg(var_index, size_ptr, 1);
	    }
	    return get_arg(var_index, size_ptr, 0);
//	    if(ptr) size = strlen(ptr) + 1;//for remove_show_chars needed
	}else if(*var_index == '%'){	//??_%variable?? - show new_variable
	    var_index++;
	    return get_cfg_value(size_ptr, var_index, 1);
	}else if(*var_index == '&'){	//??_&variable?? - show fresh_variable
	    var_index++;
	    return get_cfg_value(size_ptr, var_index, 2);
	}else if(*var_index == '@'){	//??_@variable?? - show variable from rnd table
	    var_index++;
	    ptr = get_tbl(var_index);
	}else if(*var_index == '?'){	//??_?file|expression?? -> in file this expression
	    var_index++;

	FILE *fip;
	char *ptr1;
	
	
	ptr1 = w_strtok(&var_index, '|');
	if (ptr1){
	
	    if((fip = fopen(ptr1,"r")) == NULL)
		printf("No file: %s\n", ptr1);
	    else{
	    while(fgets(copybuf,sizeof(copybuf),fip) != NULL){
		if((ptr1 = parsestr1_(copybuf,var_index)) != NULL){
		    ptr = ptr1;
		    break;
		}
	    }
	    fclose(fip);
	    }
	}
	return ptr;
	} else if(!strcmp(var_index,"referer")){
	    ptr = referer;
	} else if(!strcmp(var_index,"short_referer")){
/*	    ptr = "";
    	    char *c = referer;	//get only name of html
    	    while (*c){
		if(*c == '/') ptr = c + 1;
		c++;
	    }
*/		ptr = parsestr1_(referer, "/L/L");	//get the last '/'
	}else if(!strcmp(var_index,"user_agent")){
	    ptr = user_agent;
	}else if(!strcmp(var_index,"ip")){
	    ptr = ip;
	    size = 20;
	}else if(!strcmp(var_index,"port")){
	    ptr = port;
	    size = 10;
	}else if(!strcmp(var_index,"srv_ip")){
	    ptr = CONFIG.IP;
	}else if(!strcmp(var_index,"srv_port")){
	    ptr = CONFIG.ADMIN_PORT;
	}else if(!strcmp(var_index,"dns_name")){
	    ptr = dns_name;
	}else if(!strcmp(var_index,"etc_save")){
	    ptr = etc_save;
	    size = 2;
	}else if(!strcmp(var_index,"file_name")){
	    ptr = file;
	}else if(!strcmp(var_index,"buf")){
	    ptr = buf;
	    size = 16384;
	}

    
    }/*end of global variables*/
    else  return get_cfg_value(size_ptr, var_index, 0); /*if not found - return NULL*/
    
    if(size_ptr) *size_ptr = size; 
    return ptr;
}