基于Dragonboard 410c的燃气烟雾检测器(四)

2024-03-09 10:48

本文主要是介绍基于Dragonboard 410c的燃气烟雾检测器(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  前面已经简单的将燃气烟雾检测模块MQ-2和温湿度检测模块dht11的底层驱动实现了,下面再加一个简单的红灯的驱动,用于报警:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/sysfs.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/err.h>
#include <linux/input.h>
#include <linux/mutex.h>
#include <linux/ctype.h>
#include <linux/pm_runtime.h>
#include <linux/device.h>
#include <linux/irq.h>
#include <linux/of_gpio.h>
 
#include <linux/wait.h>
#include <asm/uaccess.h>  
 
struct red_data{
    int pin;    
    int d;
    struct mutex data_lock;
};
 
static int parse_dt(struct platform_device* pdev,struct red_data* data){
    int rc;
    struct device_node* node = pdev->dev.of_node;
    data->pin = of_get_named_gpio(node,"thunder,pin",0);
    if(gpio_is_valid(data->pin)){
        rc = gpio_request(data->pin,"red_pin");
        if(rc < 0){
            pr_err("Unable to request pin gpio\n");
        }
        gpio_direction_output(data->pin, 1);
        data->d = 1;
    }
    return 0;
}
 
static ssize_t red_store_value(struct device *dev,                                                                                                                                                   
                struct device_attribute *attr,
                const char *buf, size_t size){
    struct red_data* data = dev_get_drvdata(dev);
    int da = simple_strtoul(buf,NULL,10);
    if(da == 1){
        gpio_set_value(data->pin, 1);
    }else{
        gpio_set_value(data->pin, 0);
    }
    data->d = da;
    return size;
}
 
static ssize_t red_show_value(struct device *dev,
                                  struct device_attribute* attr,char* buf){
    struct red_data* data = dev_get_drvdata(dev);
    ssize_t da;
    mutex_lock(&data->data_lock);
    da = sprintf(buf, "%d\n", data->d);
    mutex_unlock(&data->data_lock);
    return da;
}
 
static DEVICE_ATTR(value,0644,red_show_value,red_store_value);
 
static int red_probe(struct platform_device *pdev){
    struct red_data* data;
    int result;
    data = kmalloc(sizeof(struct red_data),GFP_KERNEL);
    if(!data){
        pr_err("%s kmalloc error\n",__FUNCTION__);
        return -ENOMEM;   
    }
    dev_set_drvdata(&pdev->dev,data);
    result = parse_dt(pdev,data);
    if(result<0){
        pr_err("%s error when parse dt\n",__FUNCTION__);
        result = -EINVAL;
        goto err_parse_dt;
    }
 
    mutex_init(&data->data_lock);
    
    result=sysfs_create_file(&pdev->dev.kobj,&dev_attr_value.attr);
    printk("red probe success\n");
    return 0;
err_parse_dt:
    kfree(data);
    printk("red probe failed\n");
    return result;
}
static int red_remove(struct platform_device *pdev){
    return 0;
}
 
 
static struct of_device_id red_match_table[] = {
    { .compatible = "thunder,red",},
    { },
};
 
 
 
static struct platform_driver red_driver = {
    .probe = red_probe,
    .remove = red_remove,
    .driver = {
        .owner = THIS_MODULE,
        .name = "red",
        .of_match_table = red_match_table,
    },
};
 
 
module_platform_driver(red_driver);
MODULE_AUTHOR("RED");
MODULE_LICENSE("GPL v2");


节点路径:/sys/bus/platform/drivers/red/rgb_red.64/value

这个节点是可读可写的,当节点值为0,灯亮报警;当节点值为1等灭,正常。

到此大部分底层需要的驱动都准备好了,节点也都有了,接下来就是向上走,大致流程:driver->hal->jni->app


这篇关于基于Dragonboard 410c的燃气烟雾检测器(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790451

相关文章

9,DMA可以获取光照烟雾值

ADC多通道问题需要用到DMA,与ADC相比,省去了获取AD转换数值(转换后数据存储在数据寄存器中,需要把数据拿出来)的步骤 DMA:数据传输高速通道 DMA概述:直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 两个DMA 控制器有12个通道(DMA1有7个通道,DMA2有5

基于YOLOv5s的野火烟雾检测(附数据集与Coovally操作步骤)

本文主要内容:详细介绍了野火烟雾检测的整个过程,从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 近几年火灾频发,随着社会对火灾防控的重视程度不断提高,对野火烟雾预测的需求也日益增加。传统的人工检测通常依赖于巡查人员,其覆盖范围和效率受限于人员数量和体能,难以实现大面积、实时的烟雾检测。为了应对这一难题,应用野火烟雾检测算法显得很重

FCOS:全卷积一阶段Anchor Free物体检测器,多种视觉任务的统一框架

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 导读 这是众多Anchor Free中比较有影响力的一篇文章,不光是效果好,而且思路清楚,简单,不需要任何trick,并将众多的视觉任务统一到了一个框架中,值得一看。 摘要 这是一篇one stage的anchor free的目标检测的文章,而且是个全卷积的结构。提出了一个非常简单和灵活的物体检测的框架,效果也非常的好。 1. 介绍

2024年燃气企业负责人和安全管理人员考试题库。

31.使用( )进行液化天然气(LNG)的输送,对于卸、装车可以缩短卸、装车时间,提高输送效率。 A.低温泵 B.增压器 C.减压器 答案:A 32.液化天然气(LNG)用作调峰气源时,应注意与原燃气的( ),当不满足要求时,应进行调质处理。 A.互换性 B.一致性 C.与原燃气无关 答案:A 33.为保证气化量,在设计空温式气化器时,通常设定空温式气化器的出口天然气温度比大气

【Cloudscapes V2】Blender商城10周年免费领取礼物超逼真的Vdb云和爆炸合集烟雾体积云字体符号轨迹火焰粒子

6月19号的限时免费领取插件挺牛的,可以在blender里渲染体积云、爆炸特效、火焰、烟雾等效果,非常逼真。 Blender商城10周年免费领取礼物:https://blendermarket.com/birthday Cloudscapes V2 - 超逼真的 Vdb 云和爆炸合集 CloudScapes 是 VDB 格式的 Blender 逼真的 3D 体积云库。它包括 18 种云和 3

多目标跟踪中检测器和跟踪器如何协同工作的

多目标跟踪中检测器和跟踪器如何协同工作的 flyfish 主要是两者 接口间的交互 假设 原始图像尺寸:1920(宽)x 1080(高) 模型输入尺寸:640(宽)x 640(高) 检测器处理流程 读取原始图像 : 检测器首先读取一张原始图像,大小是1920x1080。 预处理 : 检测器将原始图像调整大小,使其适合模型的输入尺寸640x640。 为了保持图像的比例不变,检测器会根

烟雾自动监测识别摄像机

烟雾自动监测识别摄像机是现代城市安全管理的关键装备,其在各类场所的应用日益广泛,尤其在大型建筑、工厂和公共设施中,其重要性更为突出。该类摄像机采用先进的传感技术,能够实时监测环境中的烟雾密度和变化。通过高灵敏度的传感器,它能迅速响应烟雾的出现,确保在火灾或其他烟雾相关事件发生时能够即刻发出警报,实现及早预警和应对。 这些摄像机配备了精准的图像识别系统,能够区分普通灰尘或雾气与

fastsam-pytorch基于YOLACT方法的实例分割分支的目标检测器模型

FastSAM 论文 Fast Segment Anything 模型结构 以yolov8-seg的instance segmentation为基础,检测时集成instance segmentation分支,主要分为两步全实例分割(all instance Segmentation)和基于prompt的mask输出(Prompt-guided Selection),仅使用了2%的SA-1B

Python烟雾液体弹性力微分模拟 | 出租车往返速度微分计算

🎯要点 🎯弹性连续力学 | 🎯弱可压缩液体 | 🎯不可压缩流体(烟雾)| 🎯高度场浅水波动 | 🎯质量弹簧系统地面碰撞 | 🎯前向欧拉方法台球刚体运动,动量和动能守恒 | 🎯高度场重建水面模型实现图像渲染器 | 🎯图像体积渲染器 | 🎯磁场模拟 🎯算法微分:Python | C++漂移扩散方程和无风险套利公式算法微分 🍇Python微分计算出租车往返速度模型 微分计

YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用

YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用 1. Decoupled Head 解耦头部的使用2. 强化数据增强策略3. 采用无锚点检测机制4. 多正样本策略5. SimOTA标签分配策略6. CSPDarkNet 网络结构DarkNet53 的深度特征提取能力DarkNet53 类比:图书馆系统 CSPNet 的