# sensor<a name="ZH-CN_TOPIC_0000001078202098"></a> - [简介](#section11660541593) - [目录](#section161941989596) - [说明](#section45490312053) - [接å£è¯´æ˜Ž](#section14840627279) - [使用说明](#section460510231888) - [相关仓](#section12495154795416) ## 简介<a name="section11660541593"></a> Sensor驱动模型主è¦åŒ…å«Sensorï¼ˆä¼ æ„Ÿå™¨ï¼‰ç›¸å…³HDI接å£ä¸Žå®žçŽ°ï¼Œæä¾›Sensor HDI(**H**ardware **D**river **I**nterface)能力接å£ï¼Œä¸»è¦åŒ…括所有Sensorä¿¡æ¯æŸ¥è¯¢ã€Sensorå¯åœã€Sensor订阅/去订阅ã€Sensor傿•°é…ç½®ç‰ç¨³å®šçš„æŽ¥å£ï¼Œç®€åŒ–æœåС开å‘。 **图 1** Sensoré©±åŠ¨æ¨¡å—æž¶æž„图<a name="fig1292918466322"></a>  ## 目录<a name="section161941989596"></a> Sensor驱动下æºä»£ç 目录结构如下所示: ``` /drivers/peripheral/sensor ├── hal # sensor模å—hal层代ç │ └── include # sensor模å—hal层内部头文件 │ └── src # sensor模å—hal层代ç 的实现 ├── interfaces # sensor模å—对上层æœåŠ¡æä¾›çš„é©±åŠ¨èƒ½åŠ›æŽ¥å£ â”‚ └── include # sensor模å—对外æä¾›çš„æŽ¥å£å®šä¹‰ ├── test # sensoræ¨¡å—æµ‹è¯•代ç │ └── unittest # sensor模å—å•元测试代ç ``` ## 说明<a name="section45490312053"></a> æœ¬èŠ‚ä»¥è®¢é˜…åŠ é€Ÿåº¦ä¼ æ„Ÿå™¨æ•°æ®ä¸ºä¾‹è¿›è¡Œä»‹ç»ã€‚ ### 接å£è¯´æ˜Ž<a name="section14840627279"></a> Sensor驱动HALæ¨¡å—æä¾›ç»™SensoræœåŠ¡å¯ç›´æŽ¥è°ƒç”¨çš„能力接å£ï¼Œä¸»è¦åŠŸèƒ½æœ‰ï¼šæŸ¥è¯¢ï¼Œé…置,数æ®è®¢é˜…ç‰æ“作。Sensor驱动模型对HDI开放的API接å£åŠŸèƒ½å¦‚è¡¨1: **表 1** Sensor HDI 接å£åˆ—表 <a name="table132511511499"></a> <table><thead align="left"><tr id="row22545164911"><th class="cellrowborder" valign="top" width="9.85098509850985%" id="mcps1.2.4.1.1"><p id="p17401913133218"><a name="p17401913133218"></a><a name="p17401913133218"></a>功能分类</p> </th> <th class="cellrowborder" valign="top" width="53.88538853885388%" id="mcps1.2.4.1.2"><p id="p20921103144918"><a name="p20921103144918"></a><a name="p20921103144918"></a>接å£å</p> </th> <th class="cellrowborder" valign="top" width="36.26362636263626%" id="mcps1.2.4.1.3"><p id="p109216317495"><a name="p109216317495"></a><a name="p109216317495"></a>功能æè¿°</p> </th> </tr> </thead> <tbody><tr id="row9256564919"><td class="cellrowborder" valign="top" width="9.85098509850985%" headers="mcps1.2.4.1.1 "><p id="p8437193673211"><a name="p8437193673211"></a><a name="p8437193673211"></a>查询æ“作</p> </td> <td class="cellrowborder" valign="top" width="53.88538853885388%" headers="mcps1.2.4.1.2 "><p id="p11001322173912"><a name="p11001322173912"></a><a name="p11001322173912"></a>int32_t <strong id="b935414557240"><a name="b935414557240"></a><a name="b935414557240"></a>GetAllSensors</strong>(struct SensorInformation **sensorInfo, int32_t *count)</p> </td> <td class="cellrowborder" valign="top" width="36.26362636263626%" headers="mcps1.2.4.1.3 "><p id="p199227318499"><a name="p199227318499"></a><a name="p199227318499"></a>获å–ç³»ç»Ÿä¸æ³¨å†Œçš„æ‰€æœ‰ä¼ 感器信æ¯ï¼Œä¸€ç§ç±»åž‹ä¼ 感器信æ¯åŒ…æ‹¬ä¼ æ„Ÿå™¨åå—ã€è®¾å¤‡åނ商ã€å›ºä»¶ç‰ˆæœ¬å·ã€ç¡¬ä»¶ç‰ˆæœ¬å·ã€ä¼ 感器类型编å·ã€ä¼ æ„Ÿå™¨æ ‡è¯†ã€æœ€å¤§é‡ç¨‹ã€ç²¾åº¦ã€åŠŸè€—ã€‚</p> </td> </tr> <tr id="row1026352493"><td class="cellrowborder" rowspan="5" valign="top" width="9.85098509850985%" headers="mcps1.2.4.1.1 "><p id="p06071477324"><a name="p06071477324"></a><a name="p06071477324"></a>é…ç½®æ“作</p> </td> <td class="cellrowborder" valign="top" width="53.88538853885388%" headers="mcps1.2.4.1.2 "><p id="p38874252376"><a name="p38874252376"></a><a name="p38874252376"></a>int32_t <strong id="b199602219271"><a name="b199602219271"></a><a name="b199602219271"></a>Enable</strong>(int32_t sensorId)</p> </td> <td class="cellrowborder" valign="top" width="36.26362636263626%" headers="mcps1.2.4.1.3 "><p id="p5922331114916"><a name="p5922331114916"></a><a name="p5922331114916"></a>使能一ç§ä¼ æ„Ÿå™¨è®¾å¤‡ï¼Œåªæœ‰æ•°æ®è®¢é˜…è€…ä½¿èƒ½ä¼ æ„Ÿå™¨åŽï¼Œæ‰èƒ½èŽ·å–è®¢é˜…çš„ä¼ æ„Ÿå™¨æ•°æ®ã€‚</p> </td> </tr> <tr id="row42612518492"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6923143184914"><a name="p6923143184914"></a><a name="p6923143184914"></a>int32_t <strong id="b84601875330"><a name="b84601875330"></a><a name="b84601875330"></a>Disable</strong>(int32_t sensorId)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p139231531184912"><a name="p139231531184912"></a><a name="p139231531184912"></a>去使能一ç§ä¼ 感器设备。</p> </td> </tr> <tr id="row14261659498"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p992473112496"><a name="p992473112496"></a><a name="p992473112496"></a>int32_t <strong id="b16691194511438"><a name="b16691194511438"></a><a name="b16691194511438"></a>SetBatch</strong>(iint32_t sensorId, int64_t samplingInterval, int64_t reportInterval)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14924203134910"><a name="p14924203134910"></a><a name="p14924203134910"></a>设置一ç§ä¼ 感器的数æ®é‡‡æ ·é—´éš”和数æ®ä¸ŠæŠ¥é—´éš”。</p> </td> </tr> <tr id="row82615144912"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p170411511281"><a name="p170411511281"></a><a name="p170411511281"></a>int32_t <strong id="b170414153284"><a name="b170414153284"></a><a name="b170414153284"></a>SetMode</strong>(int32_t sensorTypeId, SensorUser *user, int32_t mode)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p107051159281"><a name="p107051159281"></a><a name="p107051159281"></a>设置一ç§ä¼ 感器的工作模å¼ï¼Œä¸åŒçš„工作模å¼ï¼Œä¸ŠæŠ¥æ•°æ®æ–¹å¼ä¸åŒã€‚</p> </td> </tr> <tr id="row7260574918"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p492513120494"><a name="p492513120494"></a><a name="p492513120494"></a>int32_t <strong id="b7501191019330"><a name="b7501191019330"></a><a name="b7501191019330"></a>SetOption</strong>(int32_t sensorId, uint32_t option)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p5926031124914"><a name="p5926031124914"></a><a name="p5926031124914"></a>设置一ç§ä¼ 感器é‡ç¨‹ï¼Œç²¾åº¦ç‰å¯é€‰é…置。</p> </td> </tr> <tr id="row5261957493"><td class="cellrowborder" rowspan="2" valign="top" width="9.85098509850985%" headers="mcps1.2.4.1.1 "><p id="p1039815743211"><a name="p1039815743211"></a><a name="p1039815743211"></a>æ•°æ®è®¢é˜…æ“作</p> </td> <td class="cellrowborder" valign="top" width="53.88538853885388%" headers="mcps1.2.4.1.2 "><p id="p11530101054411"><a name="p11530101054411"></a><a name="p11530101054411"></a>int32_t <strong id="b0569161217334"><a name="b0569161217334"></a><a name="b0569161217334"></a>Register</strong>(RecordDataCallback cb)</p> </td> <td class="cellrowborder" valign="top" width="36.26362636263626%" headers="mcps1.2.4.1.3 "><p id="p892633118493"><a name="p892633118493"></a><a name="p892633118493"></a>è®¢é˜…è€…æ³¨å†Œä¼ æ„Ÿå™¨æ•°æ®å›žè°ƒå‡½æ•°ï¼Œç³»ç»Ÿä¼šå°†èŽ·å–åˆ°çš„ä¼ æ„Ÿå™¨æ•°æ®ä¸ŠæŠ¥ç»™è®¢é˜…者。</p> </td> </tr> <tr id="row10900102644918"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p196491214133110"><a name="p196491214133110"></a><a name="p196491214133110"></a>int32_t <strong id="b13758151483317"><a name="b13758151483317"></a><a name="b13758151483317"></a>Unregister</strong>(void)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p5817133119"><a name="p5817133119"></a><a name="p5817133119"></a>è®¢é˜…è€…åŽ»æ³¨å†Œä¼ æ„Ÿå™¨æ•°æ®å›žè°ƒå‡½æ•°ã€‚</p> </td> </tr> <tr id="row0353356768"><td class="cellrowborder" rowspan="2" valign="top" width="9.85098509850985%" headers="mcps1.2.4.1.1 "><p id="p6596162112564"><a name="p6596162112564"></a><a name="p6596162112564"></a>接å£å®žä¾‹</p> </td> <td class="cellrowborder" valign="top" width="53.88538853885388%" headers="mcps1.2.4.1.2 "><p id="p13679191616561"><a name="p13679191616561"></a><a name="p13679191616561"></a>const struct SensorInterface *<strong id="b334310134717"><a name="b334310134717"></a><a name="b334310134717"></a>NewSensorInterfaceInstance</strong>(void)</p> </td> <td class="cellrowborder" valign="top" width="36.26362636263626%" headers="mcps1.2.4.1.3 "><p id="p19679181612563"><a name="p19679181612563"></a><a name="p19679181612563"></a>åˆ›å»ºä¼ æ„Ÿå™¨æŽ¥å£å®žä¾‹ã€‚</p> </td> </tr> <tr id="row53542561265"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p15680111655611"><a name="p15680111655611"></a><a name="p15680111655611"></a>int32_t <strong id="b99024181871"><a name="b99024181871"></a><a name="b99024181871"></a>FreeSensorInterfaceInstance</strong>(void)</p> </td> <td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p18680916165620"><a name="p18680916165620"></a><a name="p18680916165620"></a>é‡Šæ”¾ä¼ æ„Ÿå™¨æŽ¥å£å®žä¾‹ã€‚</p> </td> </tr> </tbody> </table> ### 使用说明<a name="section460510231888"></a> 代ç 示例 ``` #include "sensor_if.h" #include "sensor_type.h" /* 创建回调函数 */ void SensorDataCallback(struct SensorEvents *event) { if(event == NULL){ return; } float *sensorData=(float *)event->data; printf("sensor data[%f]", *sensorData); } void SensorSample(void) { int ret; struct SensorInformation *sensorInfo = NULL; int32_t count = 0; int32_t sensorInterval = 200000000; /* æ•°æ®é‡‡æ ·çŽ‡è®¾ç½®200毫秒,å•ä½çº³ç§’ */ /* 1.åˆ›å»ºä¼ æ„Ÿå™¨æŽ¥å£å®žä¾‹ */ const struct SensorInterface *sensorDev = NewSensorInterfaceInstance(); if (sensorDev == NULL) { return; } /* 2.è®¢é˜…è€…æ³¨å†Œä¼ æ„Ÿå™¨æ•°æ®å›žè°ƒå¤„ç†å‡½æ•° */ ret = sensorDev->Register(0, SensorDataCallback); if (ret != 0) { return; } /* 3.获å–设备支æŒçš„Sensor列表 */ ret = sensorDev->GetAllSensors(&sensorInfo, &count); if (ret != 0) { return; } /* 4.è®¾ç½®ä¼ æ„Ÿå™¨é‡‡æ ·çŽ‡ */ ret = sensorDev->SetBatch(SENSOR_TYPE_ACCELEROMETER, sensorInterval, 0); if (ret != 0) { return; } /* 5.ä½¿èƒ½ä¼ æ„Ÿå™¨ */ ret = sensorDev->Enable(SENSOR_TYPE_ACCELEROMETER); if (ret != 0) { return; } /* 6.åŽ»ä½¿èƒ½ä¼ æ„Ÿå™¨ */ ret = sensorDev->Disable(SENSOR_TYPE_ACCELEROMETER); if (ret != 0) { return; } /* 7.å–æ¶ˆä¼ 感器数æ®è®¢é˜…函数 */ ret = sensorDev->Unregister(0); if (ret != 0) { return; } /* 8.é‡Šæ”¾ä¼ æ„Ÿå™¨æŽ¥å£å®žä¾‹ */ ret = FreeSensorInterfaceInstance(); if (ret != 0) { return; } } ``` ## 相关仓<a name="section12495154795416"></a> [驱动å系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) [drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) [drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) [drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) [drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral)