+#ifdef ENABLE_ACCEL
+#include <accel_sensor.h>
+#endif
+#ifdef ENABLE_GYRO
+#include <gyro_sensor.h>
+#endif
+#ifdef ENABLE_PROXI
+#include <proxi_sensor.h>
+#endif
+#ifdef ENABLE_LIGHT
+#include <light_sensor.h>
+#endif
+#ifdef ENABLE_GEO
+#include <geo_sensor.h>
+#endif
+#ifdef ENABLE_AUTO_ROTATION
+#include <auto_rotation_sensor.h>
+#endif
+#ifdef ENABLE_PRESSURE
+#include <pressure_sensor.h>
+#endif
+#ifdef ENABLE_TEMPERATURE
+#include <temperature_sensor.h>
+#endif
+#ifdef ENABLE_ULTRAVIOLET
+#include <ultraviolet_sensor.h>
+#endif
+#ifdef ENABLE_BIO_LED_RED
+#include <bio_led_red_sensor.h>
+#endif
+#ifdef ENABLE_ORIENTATION
+#include <orientation_sensor.h>
+#endif
+#ifdef ENABLE_GEOMAGNETIC_RV
+#include <geomagnetic_rv_sensor.h>
+#endif
+#ifdef ENABLE_GAMING_RV
+#include <gaming_rv_sensor.h>
+#endif
+#ifdef ENABLE_TILT
+#include <tilt_sensor.h>
+#endif
+#ifdef ENABLE_UNCAL_GYRO
+#include <uncal_gyro_sensor.h>
+#endif
+#ifdef ENABLE_GRAVITY
+#include <gravity_sensor.h>
+#endif
+#ifdef ENABLE_LINEAR_ACCEL
+#include <linear_accel_sensor.h>
+#endif
+#ifdef ENABLE_RV
+#include <rv_sensor.h>
+#endif
+#ifdef ENABLE_RV_RAW
+#include <rv_raw_sensor.h>
+#endif
+
+#include <sf_common.h>
+
+extern "C" sensor_module* create(void)
+{
+ sensor_module *module = new(std::nothrow) sensor_module;
+ retvm_if(!module, NULL, "Failed to allocate memory");
+
+#ifdef ENABLE_ACCEL
+ accel_sensor *accel_sensor_ptr = NULL;
+ try {
+ accel_sensor_ptr = new(std::nothrow) accel_sensor;
+ } catch (int err) {
+ ERR("Failed to create accel_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (accel_sensor_ptr != NULL) {
+ module->sensors.push_back(accel_sensor_ptr);
+ }
+#endif
+
+#ifdef ENABLE_AUTO_ROTATION
+ auto_rotation_sensor *auto_rotation_sensor_ptr = NULL;
+ try {
+ auto_rotation_sensor_ptr = new(std::nothrow) auto_rotation_sensor;
+ } catch (int err) {
+ ERR("Failed to create auto_rotation_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (auto_rotation_sensor_ptr != NULL)
+ module->sensors.push_back(auto_rotation_sensor_ptr);
+#endif
+
+#ifdef ENABLE_GYRO
+ gyro_sensor *gyro_sensor_ptr = NULL;
+ try {
+ gyro_sensor_ptr = new(std::nothrow) gyro_sensor;
+ } catch (int err) {
+ ERR("Failed to create gyro_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (gyro_sensor_ptr != NULL)
+ module->sensors.push_back(gyro_sensor_ptr);
+#endif
+
+#ifdef ENABLE_PROXI
+ proxi_sensor *proxi_sensor_ptr = NULL;
+ try {
+ proxi_sensor_ptr = new(std::nothrow) proxi_sensor;
+ } catch (int err) {
+ ERR("Failed to create proxi_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (proxi_sensor_ptr != NULL)
+ module->sensors.push_back(proxi_sensor_ptr);
+#endif
+
+#ifdef ENABLE_LIGHT
+ light_sensor *light_sensor_ptr = NULL;
+ try {
+ light_sensor_ptr = new(std::nothrow) light_sensor;
+ } catch (int err) {
+ ERR("Failed to create light_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (light_sensor_ptr != NULL)
+ module->sensors.push_back(light_sensor_ptr);
+#endif
+
+#ifdef ENABLE_GEO
+ geo_sensor *geo_sensor_ptr = NULL;
+ try {
+ geo_sensor_ptr = new(std::nothrow) geo_sensor;
+ } catch (int err) {
+ ERR("Failed to create geo_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (geo_sensor_ptr != NULL)
+ module->sensors.push_back(geo_sensor_ptr);
+#endif
+
+#ifdef ENABLE_PRESSURE
+ pressure_sensor *pressure_sensor_ptr = NULL;
+ try {
+ pressure_sensor_ptr = new(std::nothrow) pressure_sensor;
+ } catch (int err) {
+ ERR("Failed to create pressure_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (pressure_sensor_ptr != NULL)
+ module->sensors.push_back(pressure_sensor_ptr);
+#endif
+
+#ifdef ENABLE_TEMPERATURE
+ temperature_sensor *temperature_sensor_ptr = NULL;
+ try {
+ temperature_sensor_ptr = new(std::nothrow) temperature_sensor;
+ } catch (int err) {
+ ERR("Failed to create temperature_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (temperature_sensor_ptr != NULL)
+ module->sensors.push_back(temperature_sensor_ptr);
+#endif
+
+#ifdef ENABLE_ULTRAVIOLET
+ ultraviolet_sensor *ultraviolet_sensor_ptr = NULL;
+ try {
+ ultraviolet_sensor_ptr = new(std::nothrow) ultraviolet_sensor;
+ } catch (int err) {
+ ERR("Failed to create ultraviolet_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (ultraviolet_sensor_ptr != NULL)
+ module->sensors.push_back(ultraviolet_sensor_ptr);
+#endif
+
+#ifdef DENABLE_SENSOR_FUSION
+ fusion_sensor *fusion_sensor_ptr = NULL;
+ try {
+ fusion_sensor_ptr = new(std::nothrow) fusion_sensor;
+ } catch (int err) {
+ ERR("Failed to create fusion_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (fusion_sensor_ptr != NULL)
+ module->sensors.push_back(fusion_sensor_ptr);
+#endif
+
+#ifdef ENABLE_ORIENTATION
+ orientation_sensor *orientation_sensor_ptr = NULL;
+ try {
+ orientation_sensor_ptr = new(std::nothrow) orientation_sensor;
+ } catch (int err) {
+ ERR("Failed to create orientation_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (orientation_sensor_ptr != NULL)
+ module->sensors.push_back(orientation_sensor_ptr);
+#endif
+
+#ifdef ENABLE_GRAVITY
+ gravity_sensor *gravity_sensor_ptr = NULL;
+ try {
+ gravity_sensor_ptr = new(std::nothrow) gravity_sensor;
+ } catch (int err) {
+ ERR("Failed to create gravity_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (gravity_sensor_ptr != NULL)
+ module->sensors.push_back(gravity_sensor_ptr);
+#endif
+
+#ifdef ENABLE_LINEAR_ACCEL
+ linear_accel_sensor *linear_accel_sensor_ptr = NULL;
+ try {
+ linear_accel_sensor_ptr = new(std::nothrow) linear_accel_sensor;
+ } catch (int err) {
+ ERR("Failed to create linear_accel_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (linear_accel_sensor_ptr != NULL)
+ module->sensors.push_back(linear_accel_sensor_ptr);
+#endif
+
+#ifdef ENABLE_GEOMAGNETIC_RV
+ geomagnetic_rv_sensor *geomagnetic_rv_sensor_ptr = NULL;
+ try {
+ geomagnetic_rv_sensor_ptr = new(std::nothrow) geomagnetic_rv_sensor;
+ } catch (int err) {
+ ERR("Failed to create geomagnetic_rv_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (geomagnetic_rv_sensor_ptr != NULL)
+ module->sensors.push_back(geomagnetic_rv_sensor_ptr);
+#endif
+
+#ifdef ENABLE_GAMING_RV
+ gaming_rv_sensor *gaming_rv_sensor_ptr = NULL;
+ try {
+ gaming_rv_sensor_ptr = new(std::nothrow) gaming_rv_sensor;
+ } catch (int err) {
+ ERR("Failed to create gaming_rv_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (gaming_rv_sensor_ptr != NULL)
+ module->sensors.push_back(gaming_rv_sensor_ptr);
+#endif
+
+#ifdef ENABLE_RV
+ rv_sensor *rv_sensor_ptr = NULL;
+ try {
+ rv_sensor_ptr = new(std::nothrow) rv_sensor;
+ } catch (int err) {
+ ERR("Failed to create rv_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (rv_sensor_ptr != NULL)
+ module->sensors.push_back(rv_sensor_ptr);
+#endif
+
+#ifdef ENABLE_TILT
+ tilt_sensor *tilt_sensor_ptr = NULL;
+ try {
+ tilt_sensor_ptr = new(std::nothrow) tilt_sensor;
+ } catch (int err) {
+ ERR("Failed to create tilt_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (tilt_sensor_ptr != NULL)
+ module->sensors.push_back(tilt_sensor_ptr);
+#endif
+
+#ifdef ENABLE_UNCAL_GYRO
+ uncal_gyro_sensor *uncal_gyro_sensor_ptr = NULL;
+ try {
+ uncal_gyro_sensor_ptr = new(std::nothrow) uncal_gyro_sensor;
+ } catch (int err) {
+ ERR("Failed to create uncal_gyro_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (uncal_gyro_sensor_ptr != NULL)
+ module->sensors.push_back(uncal_gyro_sensor_ptr);
+#endif
+
+#ifdef ENABLE_BIO_LED_RED
+ bio_led_red_sensor *bio_led_red_sensor_ptr = NULL;
+ try {
+ bio_led_red_sensor_ptr = new(std::nothrow) bio_led_red_sensor;
+ } catch (int err) {
+ ERR("Failed to create bio_led_red_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (bio_led_red_sensor_ptr != NULL)
+ module->sensors.push_back(bio_led_red_sensor_ptr);
+#endif
+
+#ifdef ENABLE_RV_RAW
+ rv_raw_sensor *rv_raw_sensor_ptr = NULL;
+ try {
+ rv_raw_sensor_ptr = new(std::nothrow) rv_raw_sensor;
+ } catch (int err) {
+ ERR("Failed to create rv_raw_sensor module, err: %d, cause: %s", err, strerror(err));
+ }
+ if (rv_raw_sensor_ptr != NULL)
+ module->sensors.push_back(rv_raw_sensor_ptr);
+#endif
+
+ return module;
+}