高通平台虛擬計步器

2021-08-15 07:12:32 字數 3202 閱讀 8594

螞蟻森林有個行走賺綠色能量的方法,但奈何我的手機不支援運動感測器(本身已支援計步感測器,如果寫個計步器的驅動,那應該就可以顯示步數了。網上搜尋發現了一篇文件(lm80-p0436-9_sensors_porting_guide.pdf),感覺這個有希望。

驅動如下

#include #include #include #include #define poll_default_interval_ms 500

static unsigned long step_count;

struct sensors_classdev step_counter_cdev =;

struct step_counter ;

static int step_counter_set_enable(struct sensors_classdev *sensors_cdev,unsigned int enable)

else

mutex_unlock(&virtual_step_counter->enable_lock);

return 0;

}static ssize_t step_count_show(struct device *dev,struct device_attribute *attr, char *buf)

static ssize_t step_count_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)

static device_attr(step_count, s_irusr|s_irgrp|s_iwusr,step_count_show,step_count_store);

int step_counter_poll_delay(struct sensors_classdev *sensors_cdev,unsigned int delay_msec)

static void step_counter_poll(struct work_struct *work)

static struct input_dev *step_counter_init_input(struct device *dev)

return input;

}static int step_counter_probe(struct platform_device *pdev)

init_delayed_work(&virtual_step_counter->dwork, step_counter_poll);

virtual_step_counter->data_wq =create_freezable_workqueue("step_counter_data_work");

if (!virtual_step_counter->data_wq)

atomic_set(&virtual_step_counter->delay, poll_default_interval_ms);

virtual_step_counter->idev=step_counter_init_input(&pdev->dev);

if(!virtual_step_counter->idev)

virtual_step_counter->cdev=step_counter_cdev;

virtual_step_counter->cdev.sensors_enable=step_counter_set_enable;

virtual_step_counter->cdev.sensors_poll_delay=step_counter_poll_delay;

ret=sensors_classdev_register(&virtual_step_counter->idev->dev,&virtual_step_counter->cdev);

if (ret)

mutex_init(&virtual_step_counter->enable_lock);

mutex_init(&virtual_step_counter->step_count_lock);

dev_set_drvdata(&pdev->dev, virtual_step_counter);

ret = device_create_file(&pdev->dev, &dev_attr_step_count);

printk("step_counter_probe ok\n");

return 0;

out_register_classdev:

input_unregister_device(virtual_step_counter->idev);

out_create_workqueue:

out_register_input:

destroy_workqueue(virtual_step_counter->data_wq);

out:

printk("step_counter_probe fail\n");

return ret;

}

static int step_counter_remove(struct platform_device *pdev)

static struct platform_device step_counter_devices =

;static struct platform_driver step_counter_driver =,};

static int sensor_init(void)

static void __exit sensor_exit(void)

module_init(sensor_init);

module_exit(sensor_exit);

module_license("gpl");

相關修改如下

見證成果的時候到了。

高通平台Bring up

3.2.amss 部分編譯 主要由以下部分構成 adsp,boot,debug,modem,rpm,trustzone,wcnss,分別根據高通的說明編譯這些模組,不過其中有些模組我們不會改,直接用release的binary檔案就行,比如 debug,rpm,trustzone,wcnss。3.3...

高通平台mipi panel kernel讀包方法

熟悉高通平台mipi panel kernel讀包方法,我想我們可以是的同一客戶要是使用2塊mipi panel的話我想我們可以通過讀取id來下不同序列而不用更換boot.img,還有能否讀id可以說明mipi通訊是否正常。還有我們只需在lk下面讀一次id再對全域性變數賦值通過lk傳遞到kernel...

高通平台 USB OTG功能

1 什麼是otg?usb otg 是usbon the go 的縮寫,即 otg技術就是實現在沒有 host 的情況下,實現裝置間的資料傳送。2 硬體介面 5根線 usb hs id usb hs d p usb hs d m usb vbus in gnd3 otg線 otg通訊的乙個關鍵是如何判...