plat_button应用程序

本文介绍了一个通过按钮控制LED灯状态(开、关、闪烁)的程序实现方法。使用了C语言,并涉及文件描述符操作、设备文件交互等概念。


#include <stdlib.h>  
#include <stdio.h>  
#include <errno.h>  
#include <fcntl.h>  
#include <unistd.h>  
#include <stdarg.h> 
#include <sys/ioctl.h> 
#include <sys/types.h>  
#include <sys/stat.h>  

#define  button_one    0x1
#define  button_two    0x2
#define  button_three  0x4
#define  button_four   0x8
#define PLATDRV_MAGIC             0x60  
#define LED_OFF                   _IO (PLATDRV_MAGIC, 0x18)  
#define LED_ON                    _IO (PLATDRV_MAGIC, 0x19)  
#define LED_BLINK                 _IO (PLATDRV_MAGIC, 0x1A)

/********************************************************************************
 *  Description:
 *   Input Args:
 *  Output Args:
 * Return Value:
 ********************************************************************************/
int main (int argc, char **argv)
{
    int i;
    int j=1;
    int button_fd;
    int led_fd;
    int ret=0;
    int button_status;
    fd_set rds;

    button_fd=open("/dev/button",O_RDWR);
    led_fd=open("/dev/led",O_RDWR);

    if(button_fd<0)
    {
        printf("open device button false");
        exit(1);
    }
    if(led_fd<0)
    {
        printf("open device led false");
        exit(1);
    }



    while(1)
    {
        FD_ZERO(&rds);// 清空文件文件描述符  ,每次循环都要清空集合,否则不能检测描述符变化
        FD_SET(button_fd,&rds);// 将该文件描述符,添加到文件描述符集中,
        // 是系统调用select检查是否能从/dev/button 设备读取数据
        ret=select(button_fd+1,&rds,NULL,NULL,NULL); //设置为阻塞模式
       if(ret==-1) 
       {
           printf("select error\n");
           exit(-1);
       }
    
        if(ret==0) //经过了timeout等待后没有文件满足要求
        {
            printf("timeout!\n");

        }

        else if(FD_ISSET(button_fd,&rds))  //测试是否可读,文件描述符是否在文件描述符集中
        {
            read(button_fd,&button_status,sizeof(button_status));//读fd指定的文件,读取<span style="font-family: Arial, Helvetica, sans-serif;">sizeof(button_status)个字节,读到</span><span style="font-family: Arial, Helvetica, sans-serif;">button_status中</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>

  //         if(ret<0)
    //        printf("read worr\n");
    
        }
        printf("mi");
        if(button_one==button_status)
        {
           switch(j%3)
           {
              case 1:ioctl(led_fd,LED_ON,0);j++;break;
              case 2:ioctl(led_fd,LED_OFF,0); j++;break;
              case 0:ioctl(led_fd,LED_BLINK,0);j++;break;
              default:   break;
           }
        }

        
    }

    close (led_fd);
    close(button_fd);
    return 0;
} /* ----- End of main() ----- */



全局变量J的意思是按一次灯亮,两次灯灭,三次闪烁。大家可以验证一下


Written Offer The software included in this product contains copyrighted software that is licensed under the GPL,LGPL,AGPL,MPL...etc, you may find a copy of the source at https://github.com/oppo-source. If the source code cannot be found on our website, please contact oppo_github@oppo.com. You may obtain the complete Corresponding Source code from us for a period of three years after our last shipment of this product by sending us an email or visiting our website. If you want to obtain a complete corresponding source code in the physical medium such as CD-ROM, the cost of physically performing source distribution may be charged. This offer is valid to anyone in receipt of this information. /debug_ramdisk/userdebug_plat_sepolicy.cil /kernel /my_bigball/app/InCallUI/InCallUI.apk /my_bigball/app/OppoPhoneActivation/OppoPhoneActivation.apk /my_bigball/plugin/BatterySecretPlugin/BatterySecretPlugin.apk /my_bigball/priv-app/CTAutoRegist/CTAutoRegist.apk /my_heytap/app/Instant/Instant.apk /my_heytap/app/InstantService/InstantService.apk /my_heytap/app/OplusThirdKit/OplusThirdKit.apk /my_heytap/del-app/Melody/Melody.apk /my_heytap/del-app/XGame/XGame.apk /my_product/app/NetworkLocationAmap/NetworkLocationAmap.apk /my_region/plugin/LogKitUploadPlugin/LogKitUploadPlugin.apk /my_region/plugin/SafeCenterConfigPlugin/SafeCenterConfigPlugin.apk /my_stock/app/Aod/Aod.apk /my_stock/app/COSA/COSA.apk /my_stock/app/ChildrenSpace/ChildrenSpace.apk /my_stock/app/CodeBook/CodeBook.apk /my_stock/app/DigitalWellBeing/DigitalWellBeing.apk /my_stock/app/FileEncryption/FileEncryption.apk /my_stock/app/FloatAssistant/FloatAssistant.apk /my_stock/app/FocusMode/FocusMode.apk /my_stock/app/HealthCheck/HealthCheck.apk /my_stock/app/HeyDlnaService/HeyDlnaService.apk /my_stock/app/Karaoke/Karaoke.apk /my_stock/app/MapComFrame/MapComFrame.apk /my_stock/app/OpenCapabilityService/OpenCapabilityService.apk /my_stock/app/OppoOperationManual/OppoOperationManual.apk /my_stock/app/OppoWeatherService/OppoWeatherService.apk /my_stock/app/RomUpdate/RomUpdate.apk /my_stock/app/SceneMode/SceneMode.apk /my_stock/app/SecurePay/SecurePay.apk /my_stock/app/SecurityGuard/SecurityGuard.apk /my_stock/app/VariUIEngine/VariUIEngine.apk /my_stock/app/ViewTalk/ViewTalk.apk /my_stock/app/Wallpapers/Wallpapers.apk /my_stock/app/WifiSecureDetect/WifiSecureDetect.apk /my_stock/plugin/GamePerformanceOpt/GamePerformanceOpt.apk /my_stock/plugin/TeleServiceCarrierConfig/TeleServiceCarrierConfig.apk /my_stock/priv-app/AccessoryFramework/AccessoryFramework.apk /my_stock/priv-app/ColorfulEngine/ColorfulEngine.apk /my_stock/priv-app/HeyCast/HeyCast.apk /my_stock/priv-app/HeySynergy/HeySynergy.apk /my_stock/priv-app/MDSService/MDSService.apk /my_stock/priv-app/MyDevices/MyDevices.apk /my_stock/priv-app/ONet/ONet.apk /my_stock/priv-app/OPSynergy/OPSynergy.apk /my_stock/priv-app/OShare/OShare.apk /my_stock/priv-app/OppoBootReg/OppoBootReg.apk /my_stock/priv-app/RemoteGuardService/RemoteGuardService.apk /my_stock/priv-app/SOSHelper/SOSHelper.apk /odm/bin/iwpriv /odm/etc/selinux/precompiled_sepolicy /odm/etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256 /odm/etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256 /odm/etc/selinux/precompiled_sepolicy.system_ext_sepolicy_and_mapping.sha256 /odm/etc/selinux/precompiled_sepolicy_debug /odm/etc/selinux/precompiled_sepolicy_debug.plat_sepolicy_and_mapping.sha256 /odm/etc/selinux/precompiled_sepolicy_debug.product_sepolicy_and_mapping.sha256 /odm/etc/selinux/precompiled_sepolicy_debug.system_ext_sepolicy_and_mapping.sha256 /odm/lib/libAlgoInterface.so /odm/lib/libAlgoProcess.so /odm/lib/libapsexif.so /odm/lib/libapsjpeg.so /odm/lib/libavcodec.so /odm/lib/libavformat.so /odm/lib/libavutil.so /odm/lib/libdav1d.so.4 /odm/lib/libmindroid-app.so /odm/lib/libmindroid-framework.so /odm/lib/libmpbase.so /odm/lib/libqsee_keybox_ca.so /odm/lib/libswresample.so /odm/lib/libswscale.so /odm/overlay/CarrierConfigOverlay.21091.apk /product/app/ConferenceDialer/ConferenceDialer.apk /product/app/PowerOffAlarm/PowerOffAlarm.apk /product/app/com.google.android.modulemetadata/com.google.android.modulemetadata.apk /product/app/com.google.mainline.telemetry/com.google.mainline.telemetry.apk /product/app/xdivert/xdivert.apk /product/etc/permissions/com.android.imsserviceentitlement.xml /product/etc/permissions/privapp-permissions-soundrecorder.xml /product/etc/selinux/mapping/26.0.cil /product/etc/selinux/mapping/27.0.cil /product/etc/selinux/mapping/28.0.cil /product/etc/selinux/mapping/29.0.cil /product/etc/selinux/mapping/30.0.cil /product/etc/selinux/mapping/31.0.cil /product/etc/selinux/product_file_contexts /product/etc/selinux/product_hwservice_contexts /product/etc/selinux/product_mac_permissions.xml /product/etc/selinux/product_property_contexts /product/etc/selinux/product_seapp_contexts /product/etc/selinux/product_sepolicy.cil /product/etc/selinux/product_sepolicy_and_mapping.sha256 /product/etc/selinux/product_sepolicy_and_mapping_debug.sha256 /product/etc/selinux/product_sepolicy_debug.cil /product/etc/selinux/product_service_contexts /product/etc/sysconfig/GoogleCellBroadcast_config.xml /product/etc/sysconfig/preinstalled-packages-platform-handheld-product.xml /product/etc/sysconfig/preinstalled-packages-platform-overlays.xml /product/lib/libjni_eglfence.so /product/lib/libjni_filtershow_filters.so /product/lib/libjni_jpegstream.so /product/lib/libjni_jpegutil.so /product/lib/libjni_latinime.so /product/lib/libjni_tinyplanet.so /product/lib64/libjni_eglfence.so /product/lib64/libjni_filtershow_filters.so /product/lib64/libjni_jpegstream.so /product/lib64/libjni_jpegutil.so /product/lib64/libjni_latinime.so /product/lib64/libjni_tinyplanet.so /product/overlay/CarrierConfigResCommon_Sys.apk /product/overlay/CellBroadcastReceiverResCommon_Sys.apk /product/overlay/DisplayCutoutEmulationCorner/DisplayCutoutEmulationCornerOverlay.apk /product/overlay/DisplayCutoutEmulationDouble/DisplayCutoutEmulationDoubleOverlay.apk /product/overlay/DisplayCutoutEmulationHole/DisplayCutoutEmulationHoleOverlay.apk /product/overlay/DisplayCutoutEmulationTall/DisplayCutoutEmulationTallOverlay.apk /product/overlay/DisplayCutoutEmulationWaterfall/DisplayCutoutEmulationWaterfallOverlay.apk /product/overlay/FontNotoSerifSource/FontNotoSerifSourceOverlay.apk /product/overlay/FrameworksResCommon_Sys.apk /product/overlay/NavigationBarMode3Button/NavigationBarMode3ButtonOverlay.apk /product/overlay/NavigationBarModeGestural/NavigationBarModeGesturalOverlay.apk /product/overlay/NavigationBarModeGesturalExtraWideBack/NavigationBarModeGesturalOverlayExtraWideBack.apk /product/overlay/NavigationBarModeGesturalNarrowBack/NavigationBarModeGesturalOverlayNarrowBack.apk /product/overlay/NavigationBarModeGesturalWideBack/NavigationBarModeGesturalOverlayWideBack.apk /product/overlay/OneHandedModeGestural/OneHandedModeGesturalOverlay.apk /product/overlay/SettingsResCommon_Sys.apk /product/overlay/SystemUIResCommon_Sys.apk /product/overlay/TelecommResCommon_Sys.apk /product/overlay/TelephonyResCommon_Sys.apk
最新发布
01-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值