123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686 |
- extern "C" {
- struct sensor_value {
-
- int32_t val1;
-
- int32_t val2;
- };
- enum sensor_channel {
-
- SENSOR_CHAN_ACCEL_X,
-
- SENSOR_CHAN_ACCEL_Y,
-
- SENSOR_CHAN_ACCEL_Z,
-
- SENSOR_CHAN_ACCEL_XYZ,
-
- SENSOR_CHAN_GYRO_X,
-
- SENSOR_CHAN_GYRO_Y,
-
- SENSOR_CHAN_GYRO_Z,
-
- SENSOR_CHAN_GYRO_XYZ,
-
- SENSOR_CHAN_MAGN_X,
-
- SENSOR_CHAN_MAGN_Y,
-
- SENSOR_CHAN_MAGN_Z,
-
- SENSOR_CHAN_MAGN_XYZ,
-
- SENSOR_CHAN_DIE_TEMP,
-
- SENSOR_CHAN_AMBIENT_TEMP,
-
- SENSOR_CHAN_PRESS,
-
- SENSOR_CHAN_PROX,
-
- SENSOR_CHAN_HUMIDITY,
-
- SENSOR_CHAN_LIGHT,
-
- SENSOR_CHAN_IR,
-
- SENSOR_CHAN_RED,
-
- SENSOR_CHAN_GREEN,
-
- SENSOR_CHAN_BLUE,
-
- SENSOR_CHAN_ALTITUDE,
-
- SENSOR_CHAN_PM_1_0,
-
- SENSOR_CHAN_PM_2_5,
-
- SENSOR_CHAN_PM_10,
-
- SENSOR_CHAN_DISTANCE,
-
- SENSOR_CHAN_CO2,
-
- SENSOR_CHAN_VOC,
-
- SENSOR_CHAN_GAS_RES,
-
- SENSOR_CHAN_VOLTAGE,
-
- SENSOR_CHAN_CURRENT,
-
- SENSOR_CHAN_POWER,
-
- SENSOR_CHAN_RESISTANCE,
-
- SENSOR_CHAN_ROTATION,
-
- SENSOR_CHAN_POS_DX,
-
- SENSOR_CHAN_POS_DY,
-
- SENSOR_CHAN_POS_DZ,
-
- SENSOR_CHAN_RPM,
-
- SENSOR_CHAN_GAUGE_VOLTAGE,
-
- SENSOR_CHAN_GAUGE_AVG_CURRENT,
-
- SENSOR_CHAN_GAUGE_STDBY_CURRENT,
-
- SENSOR_CHAN_GAUGE_MAX_LOAD_CURRENT,
-
- SENSOR_CHAN_GAUGE_TEMP,
-
- SENSOR_CHAN_GAUGE_STATE_OF_CHARGE,
-
- SENSOR_CHAN_GAUGE_FULL_CHARGE_CAPACITY,
-
- SENSOR_CHAN_GAUGE_REMAINING_CHARGE_CAPACITY,
-
- SENSOR_CHAN_GAUGE_NOM_AVAIL_CAPACITY,
-
- SENSOR_CHAN_GAUGE_FULL_AVAIL_CAPACITY,
-
- SENSOR_CHAN_GAUGE_AVG_POWER,
-
- SENSOR_CHAN_GAUGE_STATE_OF_HEALTH,
-
- SENSOR_CHAN_GAUGE_TIME_TO_EMPTY,
-
- SENSOR_CHAN_GAUGE_TIME_TO_FULL,
-
- SENSOR_CHAN_GAUGE_CYCLE_COUNT,
-
- SENSOR_CHAN_GAUGE_DESIGN_VOLTAGE,
-
- SENSOR_CHAN_GAUGE_DESIRED_VOLTAGE,
-
- SENSOR_CHAN_GAUGE_DESIRED_CHARGING_CURRENT,
-
- SENSOR_CHAN_ALL,
-
- SENSOR_CHAN_COMMON_COUNT,
-
- SENSOR_CHAN_PRIV_START = SENSOR_CHAN_COMMON_COUNT,
-
- SENSOR_CHAN_MAX = INT16_MAX,
- };
- enum sensor_trigger_type {
-
- SENSOR_TRIG_TIMER,
-
- SENSOR_TRIG_DATA_READY,
-
- SENSOR_TRIG_DELTA,
-
- SENSOR_TRIG_NEAR_FAR,
-
- SENSOR_TRIG_THRESHOLD,
-
- SENSOR_TRIG_TAP,
-
- SENSOR_TRIG_DOUBLE_TAP,
-
- SENSOR_TRIG_FREEFALL,
-
- SENSOR_TRIG_COMMON_COUNT,
-
- SENSOR_TRIG_PRIV_START = SENSOR_TRIG_COMMON_COUNT,
-
- SENSOR_TRIG_MAX = INT16_MAX,
- };
- struct sensor_trigger {
-
- enum sensor_trigger_type type;
-
- enum sensor_channel chan;
- };
- enum sensor_attribute {
-
- SENSOR_ATTR_SAMPLING_FREQUENCY,
-
- SENSOR_ATTR_LOWER_THRESH,
-
- SENSOR_ATTR_UPPER_THRESH,
-
- SENSOR_ATTR_SLOPE_TH,
-
- SENSOR_ATTR_SLOPE_DUR,
-
- SENSOR_ATTR_HYSTERESIS,
-
- SENSOR_ATTR_OVERSAMPLING,
-
- SENSOR_ATTR_FULL_SCALE,
-
- SENSOR_ATTR_OFFSET,
-
- SENSOR_ATTR_CALIB_TARGET,
-
- SENSOR_ATTR_CONFIGURATION,
-
- SENSOR_ATTR_CALIBRATION,
-
- SENSOR_ATTR_FEATURE_MASK,
-
- SENSOR_ATTR_ALERT,
-
- SENSOR_ATTR_COMMON_COUNT,
-
- SENSOR_ATTR_PRIV_START = SENSOR_ATTR_COMMON_COUNT,
-
- SENSOR_ATTR_MAX = INT16_MAX,
- };
- typedef void (*sensor_trigger_handler_t)(const struct device *dev,
- struct sensor_trigger *trigger);
- typedef int (*sensor_attr_set_t)(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- const struct sensor_value *val);
- typedef int (*sensor_attr_get_t)(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- struct sensor_value *val);
- typedef int (*sensor_trigger_set_t)(const struct device *dev,
- const struct sensor_trigger *trig,
- sensor_trigger_handler_t handler);
- typedef int (*sensor_sample_fetch_t)(const struct device *dev,
- enum sensor_channel chan);
- typedef int (*sensor_channel_get_t)(const struct device *dev,
- enum sensor_channel chan,
- struct sensor_value *val);
- __subsystem struct sensor_driver_api {
- sensor_attr_set_t attr_set;
- sensor_attr_get_t attr_get;
- sensor_trigger_set_t trigger_set;
- sensor_sample_fetch_t sample_fetch;
- sensor_channel_get_t channel_get;
- };
- __syscall int sensor_attr_set(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- const struct sensor_value *val);
- static inline int z_impl_sensor_attr_set(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- const struct sensor_value *val)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- if (api->attr_set == NULL) {
- return -ENOSYS;
- }
- return api->attr_set(dev, chan, attr, val);
- }
- __syscall int sensor_attr_get(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- struct sensor_value *val);
- static inline int z_impl_sensor_attr_get(const struct device *dev,
- enum sensor_channel chan,
- enum sensor_attribute attr,
- struct sensor_value *val)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- if (api->attr_get == NULL) {
- return -ENOSYS;
- }
- return api->attr_get(dev, chan, attr, val);
- }
- static inline int sensor_trigger_set(const struct device *dev,
- struct sensor_trigger *trig,
- sensor_trigger_handler_t handler)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- if (api->trigger_set == NULL) {
- return -ENOSYS;
- }
- return api->trigger_set(dev, trig, handler);
- }
- __syscall int sensor_sample_fetch(const struct device *dev);
- static inline int z_impl_sensor_sample_fetch(const struct device *dev)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- return api->sample_fetch(dev, SENSOR_CHAN_ALL);
- }
- __syscall int sensor_sample_fetch_chan(const struct device *dev,
- enum sensor_channel type);
- static inline int z_impl_sensor_sample_fetch_chan(const struct device *dev,
- enum sensor_channel type)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- return api->sample_fetch(dev, type);
- }
- __syscall int sensor_channel_get(const struct device *dev,
- enum sensor_channel chan,
- struct sensor_value *val);
- static inline int z_impl_sensor_channel_get(const struct device *dev,
- enum sensor_channel chan,
- struct sensor_value *val)
- {
- const struct sensor_driver_api *api =
- (const struct sensor_driver_api *)dev->api;
- return api->channel_get(dev, chan, val);
- }
- static inline int32_t sensor_ms2_to_g(const struct sensor_value *ms2)
- {
- int64_t micro_ms2 = ms2->val1 * 1000000LL + ms2->val2;
- if (micro_ms2 > 0) {
- return (micro_ms2 + SENSOR_G / 2) / SENSOR_G;
- } else {
- return (micro_ms2 - SENSOR_G / 2) / SENSOR_G;
- }
- }
- static inline void sensor_g_to_ms2(int32_t g, struct sensor_value *ms2)
- {
- ms2->val1 = ((int64_t)g * SENSOR_G) / 1000000LL;
- ms2->val2 = ((int64_t)g * SENSOR_G) % 1000000LL;
- }
- static inline int32_t sensor_rad_to_degrees(const struct sensor_value *rad)
- {
- int64_t micro_rad_s = rad->val1 * 1000000LL + rad->val2;
- if (micro_rad_s > 0) {
- return (micro_rad_s * 180LL + SENSOR_PI / 2) / SENSOR_PI;
- } else {
- return (micro_rad_s * 180LL - SENSOR_PI / 2) / SENSOR_PI;
- }
- }
- static inline void sensor_degrees_to_rad(int32_t d, struct sensor_value *rad)
- {
- rad->val1 = ((int64_t)d * SENSOR_PI / 180LL) / 1000000LL;
- rad->val2 = ((int64_t)d * SENSOR_PI / 180LL) % 1000000LL;
- }
- static inline double sensor_value_to_double(const struct sensor_value *val)
- {
- return (double)val->val1 + (double)val->val2 / 1000000;
- }
- static inline void sensor_value_from_double(struct sensor_value *val, double inp)
- {
- val->val1 = (int32_t) inp;
- val->val2 = (int32_t)(inp * 1000000) % 1000000;
- }
- }
|