示例#1
0
/**
 *  @brief This function handle the generic file close
 *
 *  @param inode   A pointer to inode structure
 *  @param file    A pointer to file structure
 *  @return		N/A
 */
static void
proc_on_close(struct inode *inode, struct file *file)
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
	struct proc_private_data *priv = PDE_DATA(inode);
#else
	struct proc_private_data *priv = PDE(inode)->data;
#endif
	struct proc_data *pdata = file->private_data;
	char *line;
	int i;
	ENTER();
	if (!pdata->wrlen)
		return;
	line = pdata->wrbuf;
	while (line[0]) {
		for (i = 0; i < priv->num_items; i++) {
			if (!strncmp
			    (line, priv->pdata[i].name,
			     strlen(priv->pdata[i].name))) {
				line += strlen(priv->pdata[i].name) + 1;
				if (priv->pdata[i].size == 1)
					*((u8 *)priv->pdata[i].addr) =
						(u8)string_to_number(line);
				else if (priv->pdata[i].size == 2)
					*((u16 *) priv->pdata[i].addr) =
						(u16) string_to_number(line);
				else if (priv->pdata[i].size == 4)
					*((u32 *)priv->pdata[i].addr) =
						(u32)string_to_number(line);
			}
		}
		while (line[0] && line[0] != '\n')
			line++;
		if (line[0])
			line++;
	}
	if (priv->pbt->bt_dev.hscmd || priv->pbt->bt_dev.pscmd
	    || priv->pbt->bt_dev.sdio_pull_ctrl
	    || priv->pbt->bt_dev.test_mode || priv->pbt->bt_dev.hscfgcmd) {
		bt_prepare_command(priv->pbt);
		wake_up_interruptible(&priv->pbt->MainThread.waitQ);
	}
	LEAVE();
	return;
}
示例#2
0
/** 
 *  @brief This function handle the generic file close 
 *  
 *  @param inode   A pointer to inode structure
 *  @param file    A pointer to file structure
 *  @return 	   BT_STATUS_SUCCESS or other 
 */
static void
proc_on_close(struct inode *inode, struct file *file)
{
    struct proc_dir_entry *entry = PDE(inode);
    struct proc_private_data *priv = entry->data;
    struct proc_data *pdata = file->private_data;
    char *line;
    int i;
    ENTER();
    if (!pdata->wrlen)
        return;
    line = pdata->wrbuf;
    while (line[0]) {
        for (i = 0; i < priv->num_items; i++) {
            if (!strncmp
                (line, priv->pdata[i].name, strlen(priv->pdata[i].name))) {
                line += strlen(priv->pdata[i].name) + 1;
                if (priv->pdata[i].size == 1)
                    *((u8 *) priv->pdata[i].addr) = (u8) string_to_number(line);
                else if (priv->pdata[i].size == 2)
                    *((u16 *) priv->pdata[i].addr) =
                        (u16) string_to_number(line);
                else if (priv->pdata[i].size == 4)
                    *((u32 *) priv->pdata[i].addr) =
                        (u32) string_to_number(line);
            }
        }
        while (line[0] && line[0] != '\n')
            line++;
        if (line[0])
            line++;
    }
    if (priv->pbt->bt_dev.hscmd || priv->pbt->bt_dev.pscmd
        || priv->pbt->bt_dev.hscfgcmd) {
        bt_prepare_command(priv->pbt);
        wake_up_interruptible(&priv->pbt->MainThread.waitQ);
    }
    LEAVE();
    return;
}