sensor hal

// 记录下 sensor hal 层

ambient_light_module_init 以这个 举例.
这个 是 sensor 的 hal 层的 入口函数
sensor hal_第1张图片这里的 factory ? 指的 就是 设计模式中的 工厂模式??

register_sensor :注册 sensor
通过register_sensor将type和func放入callbacks的unordered_map中。并将datatype插入到datatypes的unordered_set中,以便后面使用。
暂时 还不知道 get_available_als_sensors 这个 函数会什么时候调用
看下 注释:
在这里插入图片描述这个是 创建 这种功能的函数

static vector<unique_ptr<sensor>> get_available_als_sensors()
{
    const vector<sensor_uid>& als_suids =
     
    //1:  获取  suid      sensor_factory::instance().get_suids(SSC_DATATYPE_AMBIENT_LIGHT);
    vector<unique_ptr<sensor>> sensors;
    for (const auto& suid : als_suids) {
   
   //  2: 获取  attributes 
        const sensor_attributes& attr =
            sensor_factory::instance().get_attributes(suid);
        /* publish only on-change proximity sensor */
        if (attr.get_stream_type() != SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE) {
            continue;
        }
        try {
       //  3: make_unique 智能指针,会调用到 构造函数... 
            sensors.push_back(make_unique<ambient_light>(suid, SENSOR_WAKEUP));
        } catch (const exception& e) {
            sns_loge("failed for wakeup, %s", e.what());
        }
        try {
            sensors.push_back(make_unique<ambient_light>(suid, SENSOR_NO_WAKEUP));
        } catch (const exception& e) {
            sns_loge("failed for nowakeup, %s", e.what());
        }
    }
    return sensors;
}

看下3 的构造函数的实现

ambient_light::ambient_light(sensor_uid suid, sensor_wakeup_type wakeup):
    ssc_sensor(suid, wakeup)
{
    set_type(SENSOR_TYPE_LIGHT);
    set_string_type(SENSOR_STRING_TYPE_LIGHT);
    set_sensor_typename("Ambient Light Sensor");

    set_nowk_msgid(SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_PHYSICAL_CONFIG_EVENT);
	

}

class ambient_light : public ssc_sensor
继承了 class ssc_sensor : public sensor
sensor 是 基类…
sensor hal_第2张图片继续回到
ambient_light 函数

    /**
     * @brief Adds a message id into the no wakeup message id list
     * maintained for the sensor.
     * @param msg_id
     */
   注册了一个  消息 id   set_nowk_msgid(SNS_STD_SENSOR_MSGID_SNS_STD_SENSOR_PHYSICAL_CONFIG_EVENT);
// 该command下下去后,会在SLPI侧 driver 中做相应的动作 
// tcs3707_send_config_event  中 通过 pb_send_event 传回 client (hal 端 )

一看 , 我曹,没了. 就看完了??
还有个 这个函数
handle_sns_std_sensor_event
对 事件的处理 函数

1: 解析 数据.  
    pb_sensor_event.ParseFromString(pb_event.payload());

你可能感兴趣的:(sensor,高通,c++)