java 獲取泛型T的class,Linux使用CLASS_ATTR創建節點

 2023-12-25 阅读 26 评论 0

摘要:首先創建一個class結構體指針 static struct class *sensor_class; 然后在module_init的模塊加載函數中調用以下接口: sensor_class = class_create(THIS_MODULE, "sensor_class"); ret = class_create_file(sensor_class, &class_attr_gyro_lsm9d

首先創建一個class結構體指針

static struct class *sensor_class;

然后在module_init的模塊加載函數中調用以下接口:

sensor_class = class_create(THIS_MODULE, "sensor_class");
ret = class_create_file(sensor_class, &class_attr_gyro_lsm9ds1);if (ret) {printk(KERN_ERR "%s:Fail to creat gyro class file\n", __func__);return ret;}

然后調用CLASS_ATTR創建節點,這里是gyro_lsm9ds1:

static CLASS_ATTR(gyro_lsm9ds1, 0664, gyro_lsm9ds1_show, gyro_lsm9ds1_store);

然后創建讀寫函數(adb使用cat或者echo可以操作節點讀寫):

1、讀函數(cat):

 376 static ssize_t gyro_lsm9ds1_show(struct class *class,377                 struct class_attribute *attr, char *buf)378 {379         struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_ACCEL]; // gyro no device, so use SENSOR_TYPE_ACCEL380381         if(sensor == NULL)382                 return sprintf(buf, "no gyro sensor find\n");383384         if (sensor->status_cur == SENSOR_OFF)385                 dev_err(&sensor->client->dev, "%s: status_cur: off[%d]\n", __func__, SENSOR_OFF);386387         if (sensor->status_cur == SENSOR_ON)388                 return sprintf(buf, "[gyro-x-]: %d\n \n[gyro-y-]: %d\n \n[gyro-z-]: %d\n", gyro_lsm9ds1_x, gyro_lsm9ds1_y, gyro_lsm9ds1_z);389390         return sprintf(buf, "temhum: read error with SENSOR_OFF\n");391392 }

java 獲取泛型T的class、2、寫函數(echo):

 394 static ssize_t gyro_lsm9ds1_store(struct class *class,395         struct class_attribute *attr, const char *buf, size_t count)396 {397         struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_GYROSCOPE];398         int val, ret;399400         if (sensor == NULL)401                 return -1;402403         ret = kstrtoint(buf, 10, &val);404         if (ret) {405                 dev_err(&sensor->client->dev, "%s: kstrtoint error return %d\n", __func__, ret);406                 return -1;407         }408409         mutex_lock(&sensor->operation_mutex);410         if (val == 1) {411                 if (sensor->status_cur == SENSOR_OFF)412                         sensor_enable(sensor, SENSOR_ON);413         } else if (val == 0) {414                 if (sensor->status_cur == SENSOR_ON)415                         sensor_enable(sensor, SENSOR_OFF);416         }417         mutex_unlock(&sensor->operation_mutex);418419         dev_err(&sensor->client->dev, "[%s()]check ret[%d] with value[%d]\n", __func__, ret, val);420421         return ret ? ret : count;422423 }

然后就可以在adb操作節點讀到數據:

rk3399_all:/ # cat sys/class/sensor_class/gyro_lsm9ds1                         
[gyro-x-]: 69[gyro-y-]: -10[gyro-z-]: 156
rk3399_all:/ #

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/194841.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息