int GetPhyRegData(uint8_t type, uint8_t dev_id, void *buffer, int buf_len) { int mark = 0, ret = 0; sensor_handle_t *phy_sensor = GetPollSensStruct(type, dev_id); if (phy_sensor == NULL) return -1; if ((phy_sensor->stat_flag & ON) == 0) { int length = sizeof(struct sensor_data) + phy_sensor->sensor_data_frame_size; struct sensor_data *temp_ptr = NULL; temp_ptr = (struct sensor_data *)balloc(length, NULL); temp_ptr->data_length = phy_sensor->sensor_data_frame_size; phy_sensor->buffer = (void *)temp_ptr->data; phy_sensor_enable(phy_sensor->ptr, 1); mark++; } void *temp_ptr = phy_sensor->buffer - offsetof(struct sensor_data, data); if (0 == phy_sensor_data_read(phy_sensor->ptr, (struct sensor_data *)temp_ptr)) { ret = -1; goto out; } memcpy(buffer, phy_sensor->buffer, buf_len); out: if (mark != 0) phy_sensor_enable(phy_sensor->ptr, 0); return ret; }
static int motion_det_init(struct phy_driver *phy_drv){ int ret; uint8_t device_id; phy_sensor_type_t sensor_type; sensor_t my_sensor; ret = get_sensor_list((1 << SENSOR_MOTION_DETECTOR), sensor_list,1); if(ret <= 0){ psh_err2(PSH_ITSELF,"NO really sensor_list was got\n"); return 0; } device_id = sensor_list[0].dev_id; sensor_type = sensor_list[0].sensor_type; my_sensor = phy_sensor_open(sensor_type, device_id); real_sensor = my_sensor; if(my_sensor == NULL){ psh_err2(PSH_ITSELF,"NO really sensor was found,open failed\n"); return 0; } phy_sensor_enable(real_sensor, 1); phy_sensor_data_register_callback(real_sensor, motion_detect_test_callback, NULL, 0); return 0; }
static void ClosePhySensor(sensor_handle_t* phy_sensor) { // if(phy_sensor->fifo_length > 0 && phy_sensor->fifo_use_flag != 0){ if(phy_sensor->buffer_length / phy_sensor->sensor_data_frame_size > 1){ phy_sensor_enable_hwfifo(phy_sensor->ptr, 0, 0); if(phy_sensor->buffer != NULL) bfree(phy_sensor->buffer); }else{ phy_sensor_enable(phy_sensor->ptr, 0); if(phy_sensor->buffer != NULL){ void* temp_ptr = phy_sensor->buffer - offsetof(struct sensor_data, data); bfree(temp_ptr); } }