package android foreign import android "system:android" /* * A few useful constants */ /** Earth's gravity in m/s^2 */ ASENSOR_STANDARD_GRAVITY :: (9.80665) /** Maximum magnetic field on Earth's surface in uT */ ASENSOR_MAGNETIC_FIELD_EARTH_MAX :: (60.0) /** Minimum magnetic field on Earth's surface in uT*/ ASENSOR_MAGNETIC_FIELD_EARTH_MIN :: (30.0) ASENSOR_RESOLUTION_INVALID :: f32(0h7ff80000_00000001) ASENSOR_FIFO_COUNT_INVALID :: (-1) ASENSOR_DELAY_INVALID :: min(i32) ASENSOR_INVALID :: (-1) /** * Sensor types. * * See * [android.hardware.SensorEvent#values](https://developer.android.com/reference/android/hardware/SensorEvent.html#values) * for detailed explanations of the data returned for each of these types. */ SensorType :: enum i32 { /** * Invalid sensor type. Returned by {@link ASensor_getType} as error value. */ INVALID = -1, /** * {@link ASENSOR_TYPE_ACCELEROMETER} * reporting-mode: continuous * * All values are in SI units (m/s^2) and measure the acceleration of the * device minus the force of gravity. */ ACCELEROMETER = 1, /** * {@link ASENSOR_TYPE_MAGNETIC_FIELD} * reporting-mode: continuous * * All values are in micro-Tesla (uT) and measure the geomagnetic * field in the X, Y and Z axis. */ MAGNETIC_FIELD = 2, /* Deprecated in API level 15 * This isn't defined in the NDK but the procedures report it as a valid sensor and can work with it. */ ORIENTATION = 3, /** * {@link ASENSOR_TYPE_GYROSCOPE} * reporting-mode: continuous * * All values are in radians/second and measure the rate of rotation * around the X, Y and Z axis. */ GYROSCOPE = 4, /** * {@link ASENSOR_TYPE_LIGHT} * reporting-mode: on-change * * The light sensor value is returned in SI lux units. */ LIGHT = 5, /** * {@link ASENSOR_TYPE_PRESSURE} * * The pressure sensor value is returned in hPa (millibar). */ PRESSURE = 6, /* Deprecated in API level 15. Use AMBIENT_TEMPERATURE instead. * This isn't defined in the NDK but the procedures report it as a valid sensor and can work with it. */ TEMPERATURE = 7, /** * {@link ASENSOR_TYPE_PROXIMITY} * reporting-mode: on-change * * The proximity sensor which turns the screen off and back on during calls is the * wake-up proximity sensor. Implement wake-up proximity sensor before implementing * a non wake-up proximity sensor. For the wake-up proximity sensor set the flag * SENSOR_FLAG_WAKE_UP. * The value corresponds to the distance to the nearest object in centimeters. */ PROXIMITY = 8, /** * {@link ASENSOR_TYPE_GRAVITY} * * All values are in SI units (m/s^2) and measure the direction and * magnitude of gravity. When the device is at rest, the output of * the gravity sensor should be identical to that of the accelerometer. */ GRAVITY = 9, /** * {@link ASENSOR_TYPE_LINEAR_ACCELERATION} * reporting-mode: continuous * * All values are in SI units (m/s^2) and measure the acceleration of the * device not including the force of gravity. */ LINEAR_ACCELERATION = 10, /** * {@link ASENSOR_TYPE_ROTATION_VECTOR} */ ROTATION_VECTOR = 11, /** * {@link ASENSOR_TYPE_RELATIVE_HUMIDITY} * * The relative humidity sensor value is returned in percent. */ RELATIVE_HUMIDITY = 12, /** * {@link ASENSOR_TYPE_AMBIENT_TEMPERATURE} * * The ambient temperature sensor value is returned in Celcius. */ AMBIENT_TEMPERATURE = 13, /** * {@link ASENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED} */ MAGNETIC_FIELD_UNCALIBRATED = 14, /** * {@link ASENSOR_TYPE_GAME_ROTATION_VECTOR} */ GAME_ROTATION_VECTOR = 15, /** * {@link ASENSOR_TYPE_GYROSCOPE_UNCALIBRATED} */ GYROSCOPE_UNCALIBRATED = 16, /** * {@link ASENSOR_TYPE_SIGNIFICANT_MOTION} */ SIGNIFICANT_MOTION = 17, /** * {@link ASENSOR_TYPE_STEP_DETECTOR} */ STEP_DETECTOR = 18, /** * {@link ASENSOR_TYPE_STEP_COUNTER} */ STEP_COUNTER = 19, /** * {@link ASENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR} */ GEOMAGNETIC_ROTATION_VECTOR = 20, /** * {@link ASENSOR_TYPE_HEART_RATE} */ HEART_RATE = 21, /** * {@link ASENSOR_TYPE_POSE_6DOF} */ POSE_6DOF = 28, /** * {@link ASENSOR_TYPE_STATIONARY_DETECT} */ STATIONARY_DETECT = 29, /** * {@link ASENSOR_TYPE_MOTION_DETECT} */ MOTION_DETECT = 30, /** * {@link ASENSOR_TYPE_HEART_BEAT} */ HEART_BEAT = 31, /** * A constant describing a dynamic sensor meta event sensor. * * A sensor event of this type is received when a dynamic sensor is added to or removed from * the system. This sensor type should always use special trigger report mode. */ DYNAMIC_SENSOR_META = 32, /** * This sensor type is for delivering additional sensor information aside * from sensor event data. * * Additional information may include: * - {@link ASENSOR_ADDITIONAL_INFO_INTERNAL_TEMPERATURE} * - {@link ASENSOR_ADDITIONAL_INFO_SAMPLING} * - {@link ASENSOR_ADDITIONAL_INFO_SENSOR_PLACEMENT} * - {@link ASENSOR_ADDITIONAL_INFO_UNTRACKED_DELAY} * - {@link ASENSOR_ADDITIONAL_INFO_VEC3_CALIBRATION} * * This type will never bind to a sensor. In other words, no sensor in the * sensor list can have the type {@link ASENSOR_TYPE_ADDITIONAL_INFO}. * * If a device supports the sensor additional information feature, it will * report additional information events via {@link ASensorEvent} and will * have the type of {@link ASensorEvent} set to * {@link ASENSOR_TYPE_ADDITIONAL_INFO} and the sensor of {@link ASensorEvent} set * to the handle of the reporting sensor. * * Additional information reports consist of multiple frames ordered by * {@link ASensorEvent#timestamp}. The first frame in the report will have * a {@link AAdditionalInfoEvent#type} of * {@link ASENSOR_ADDITIONAL_INFO_BEGIN}, and the last frame in the report * will have a {@link AAdditionalInfoEvent#type} of * {@link ASENSOR_ADDITIONAL_INFO_END}. * */ ADDITIONAL_INFO = 33, /** * {@link ASENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT} */ LOW_LATENCY_OFFBODY_DETECT = 34, /** * {@link ASENSOR_TYPE_ACCELEROMETER_UNCALIBRATED} */ ACCELEROMETER_UNCALIBRATED = 35, /** * {@link ASENSOR_TYPE_HINGE_ANGLE} * reporting-mode: on-change * * The hinge angle sensor value is returned in degrees. */ HINGE_ANGLE = 36, /** * {@link ASENSOR_TYPE_HEAD_TRACKER} * reporting-mode: continuous * * Measures the orientation and rotational velocity of a user's head. Only for internal use * within the Android system. */ HEAD_TRACKER = 37, /** * {@link ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES} * reporting-mode: continuous * * The first three values are in SI units (m/s^2) and measure the acceleration of the device * minus the force of gravity. The last three values indicate which acceleration axes are * supported. A value of 1.0 means supported and a value of 0 means not supported. */ ACCELEROMETER_LIMITED_AXES = 38, /** * {@link ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES} * reporting-mode: continuous * * The first three values are in radians/second and measure the rate of rotation around the X, * Y and Z axis. The last three values indicate which rotation axes are supported. A value of * 1.0 means supported and a value of 0 means not supported. */ GYROSCOPE_LIMITED_AXES = 39, /** * {@link ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED} * reporting-mode: continuous * * The first three values are in SI units (m/s^2) and measure the acceleration of the device * minus the force of gravity. The middle three values represent the estimated bias for each * axis. The last three values indicate which acceleration axes are supported. A value of 1.0 * means supported and a value of 0 means not supported. */ ACCELEROMETER_LIMITED_AXES_UNCALIBRATED = 40, /** * {@link ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED} * reporting-mode: continuous * * The first three values are in radians/second and measure the rate of rotation around the X, * Y and Z axis. The middle three values represent the estimated drift around each axis in * rad/s. The last three values indicate which rotation axes are supported. A value of 1.0 means * supported and a value of 0 means not supported. */ GYROSCOPE_LIMITED_AXES_UNCALIBRATED = 41, /** * {@link ASENSOR_TYPE_HEADING} * reporting-mode: continuous * * A heading sensor measures the direction in which the device is pointing * relative to true north in degrees. */ HEADING = 42, } /** * Sensor accuracy measure. */ SensorStatus :: enum i8 { NO_CONTACT = -1, UNRELIABLE = 0, ACCURACY_LOW = 1, ACCURACY_MEDIUM = 2, ACCURACY_HIGH = 3 } /** * Sensor Reporting Modes. */ SensorReportingMode :: enum i32 { INVALID = -1, CONTINUOUS = 0, ON_CHANGE = 1, ONE_SHOT = 2, SPECIAL_TRIGGER = 3 } /** * Sensor Direct Report Rates. */ SensorDirectReportRate :: enum i32 { /** stopped */ STOP = 0, /** nominal 50Hz */ NORMAL = 1, /** nominal 200Hz */ FAST = 2, /** nominal 800Hz */ VERY_FAST = 3 } /** * Sensor Direct Channel Type. */ SensorDirectChannelType :: enum i32 { /** shared memory created by ASharedMemory_create */ SHARED_MEMORY = 1, /** AHardwareBuffer */ HARDWARE_BUFFER = 2 } /** * Sensor Additional Info Types. * * Used to populate {@link AAdditionalInfoEvent#type}. */ SensorAdditionalInfo :: enum i32 { /** Marks the beginning of additional information frames */ BEGIN = 0, /** Marks the end of additional information frames */ END = 1, /** * Estimation of the delay that is not tracked by sensor timestamps. This * includes delay introduced by sensor front-end filtering, data transport, * etc. * float[2]: delay in seconds, standard deviation of estimated value */ UNTRACKED_DELAY = 0x10000, /** float: Celsius temperature */ INTERNAL_TEMPERATURE, /** * First three rows of a homogeneous matrix, which represents calibration to * a three-element vector raw sensor reading. * float[12]: 3x4 matrix in row major order */ VEC3_CALIBRATION, /** * Location and orientation of sensor element in the device frame: origin is * the geometric center of the mobile device screen surface; the axis * definition corresponds to Android sensor definitions. * float[12]: 3x4 matrix in row major order */ SENSOR_PLACEMENT, /** * float[2]: raw sample period in seconds, * standard deviation of sampling period */ SAMPLING, } /** * A sensor event. */ /* NOTE: changes to these structs have to be backward compatible */ ASensorVector :: struct { using _: struct #raw_union { v: [3]f32, using _: struct { x: f32, y: f32, z: f32, }, using _: struct { azimuth: f32, pitch: f32, roll: f32, }, }, status: SensorStatus, reserved: [3]u8, } AMetaDataEvent :: struct { what: i32, sensor: i32, } AUncalibratedEvent :: struct { using _: struct #raw_union { uncalib: [3]f32, using _: struct { x_uncalib: f32, y_uncalib: f32, z_uncalib: f32, }, }, using _: struct #raw_union { bias: [3]f32, using _: struct { x_bias: f32, y_bias: f32, z_bias: f32, }, }, } AHeartRateEvent :: struct { bpm: f32, status: SensorStatus, } ADynamicSensorEvent :: struct { connected: i32, handle: i32, } AAdditionalInfoEvent :: struct { /** * Event type, such as ASENSOR_ADDITIONAL_INFO_BEGIN, ASENSOR_ADDITIONAL_INFO_END and others. * Refer to {@link ASENSOR_TYPE_ADDITIONAL_INFO} for the expected reporting behavior. */ type: SensorAdditionalInfo, serial: i32, using _: struct #raw_union { data_int32: [14]i32, data_float: [14]f32, }, } AHeadTrackerEvent :: struct { /** * The fields rx, ry, rz are an Euler vector (rotation vector, i.e. a vector * whose direction indicates the axis of rotation and magnitude indicates * the angle to rotate around that axis) representing the transform from * the (arbitrary, possibly slowly drifting) reference frame to the * head frame. Expressed in radians. Magnitude of the vector must be * in the range [0, pi], while the value of individual axes are * in the range [-pi, pi]. */ rx: f32, ry: f32, rz: f32, /** * The fields vx, vy, vz are an Euler vector (rotation vector) representing * the angular velocity of the head (relative to itself), in radians per * second. The direction of this vector indicates the axis of rotation, and * the magnitude indicates the rate of rotation. */ vx: f32, vy: f32, vz: f32, /** * This value changes each time the reference frame is suddenly and * significantly changed, for example if an orientation filter algorithm * used for determining the orientation has had its state reset. */ discontinuity_count: i32, } ALimitedAxesImuEvent :: struct { using _: struct #raw_union { calib: [3]f32, using _: struct { x: f32, y: f32, z: f32, }, }, using _: struct #raw_union { supported: [3]f32, using _: struct { x_supported: f32, y_supported: f32, z_supported: f32, }, }, } ALimitedAxesImuUncalibratedEvent :: struct { using _: struct #raw_union { uncalib: [3]f32, using _: struct { x_uncalib: f32, y_uncalib: f32, z_uncalib: f32, }, }, using _: struct #raw_union { bias: [3]f32, using _: struct { x_bias: f32, y_bias: f32, z_bias: f32, }, }, using _: struct #raw_union { supported: [3]f32, using _: struct { x_supported: f32, y_supported: f32, z_supported: f32, }, }, } AHeadingEvent :: struct { /** * The direction in which the device is pointing relative to true north in * degrees. The value must be between 0.0 (inclusive) and 360.0 (exclusive), * with 0 indicating north, 90 east, 180 south, and 270 west. */ heading: f32, /** * Accuracy is defined at 68% confidence. In the case where the underlying * distribution is assumed Gaussian normal, this would be considered one * standard deviation. For example, if the heading returns 60 degrees, and * accuracy returns 10 degrees, then there is a 68 percent probability of * the true heading being between 50 degrees and 70 degrees. */ accuracy: f32, } // LINT.IfChange /** * Information that describes a sensor event, refer to * SensorEvent for additional * documentation. * * NOTE: changes to this struct has to be backward compatible and reflected in * sensors_event_t */ ASensorEvent :: struct { version: i32, /* sizeof(struct ASensorEvent) */ sensor: i32, /** The sensor that generates this event */ type: SensorType, /** Sensor type for the event, such as {@link ASENSOR_TYPE_ACCELEROMETER} */ reserved0: i32, /** do not use */ /** * The time in nanoseconds at which the event happened, and its behavior * is identical to * SensorEvent::timestamp in Java API. */ timestamp: i64, using _: struct #raw_union { using _: struct #raw_union { data: [16]f32, vector: ASensorVector, acceleration: ASensorVector, gyro: ASensorVector, magnetic: ASensorVector, temperature: f32, distance: f32, light: f32, pressure: f32, relative_humidity: f32, uncalibrated_acceleration: AUncalibratedEvent, uncalibrated_gyro: AUncalibratedEvent, uncalibrated_magnetic: AUncalibratedEvent, meta_data: AMetaDataEvent, heart_rate: AHeartRateEvent, dynamic_sensor_meta: ADynamicSensorEvent, additional_info: AAdditionalInfoEvent, head_tracker: AHeadTrackerEvent, limited_axes_imu: ALimitedAxesImuEvent, limited_axes_imu_uncalibrated: ALimitedAxesImuUncalibratedEvent, heading: AHeadingEvent, }, u64: struct #raw_union { data: [8]u64, step_counter: u64, }, }, flags: u32, reserved1: [3]i32, } /** * {@link ASensorManager} is an opaque type to manage sensors and * events queues. * * {@link ASensorManager} is a singleton that can be obtained using * ASensorManager_getInstance(). * * This file provides a set of functions that uses {@link * ASensorManager} to access and list hardware sensors, and * create and destroy event queues: * - ASensorManager_getSensorList() * - ASensorManager_getDefaultSensor() * - ASensorManager_getDefaultSensorEx() * - ASensorManager_createEventQueue() * - ASensorManager_destroyEventQueue() */ ASensorManager :: struct{} /** * {@link ASensorEventQueue} is an opaque type that provides access to * {@link ASensorEvent} from hardware sensors. * * A new {@link ASensorEventQueue} can be obtained using ASensorManager_createEventQueue(). * * This file provides a set of functions to enable and disable * sensors, check and get events, and set event rates on a {@link * ASensorEventQueue}. * - ASensorEventQueue_enableSensor() * - ASensorEventQueue_disableSensor() * - ASensorEventQueue_hasEvents() * - ASensorEventQueue_getEvents() * - ASensorEventQueue_setEventRate() * - ASensorEventQueue_requestAdditionalInfoEvents() */ ASensorEventQueue :: struct{} /** * {@link ASensor} is an opaque type that provides information about * an hardware sensors. * * A {@link ASensor} pointer can be obtained using * ASensorManager_getDefaultSensor(), * ASensorManager_getDefaultSensorEx() or from a {@link ASensorList}. * * This file provides a set of functions to access properties of a * {@link ASensor}: * - ASensor_getName() * - ASensor_getVendor() * - ASensor_getType() * - ASensor_getResolution() * - ASensor_getMinDelay() * - ASensor_getFifoMaxEventCount() * - ASensor_getFifoReservedEventCount() * - ASensor_getStringType() * - ASensor_getReportingMode() * - ASensor_isWakeUpSensor() * - ASensor_getHandle() */ ASensor :: struct{} /** * {@link ASensorRef} is a type for constant pointers to {@link ASensor}. * * This is used to define entry in {@link ASensorList} arrays. */ ASensorRef :: ^ASensor /** * {@link ASensorList} is an array of reference to {@link ASensor}. * * A {@link ASensorList} can be initialized using ASensorManager_getSensorList(). */ ASensorList :: [^]ASensorRef foreign android { /** * Get a reference to the sensor manager. ASensorManager is a singleton * per package as different packages may have access to different sensors. * * Deprecated: Use ASensorManager_getInstanceForPackage(const char*) instead. * Deprecated since API level 26 * * Example: * * ASensorManager* sensorManager = ASensorManager_getInstance() * */ @(deprecated="Use ASensorManager_getInstanceForPackage instead. Deprecated since API level 26.") ASensorManager_getInstance :: proc() -> ^ASensorManager --- /** * Get a reference to the sensor manager. ASensorManager is a singleton * per package as different packages may have access to different sensors. * * Example: * * ASensorManager* sensorManager = ASensorManager_getInstanceForPackage("foo.bar.baz") * * Available since API level 26. */ ASensorManager_getInstanceForPackage :: proc(packageName: cstring) -> ^ASensorManager --- /** * Returns the list of available sensors. The returned list is owned by the * sensor manager and will not change between calls to this function. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ ASensorManager_getSensorList :: proc(manager: ^ASensorManager, list: ^ASensorList) -> i32 --- /** * Returns the list of available dynamic sensors. If there are no dynamic * sensors available, returns nullptr in list. * * Each time this is called, the previously returned list is deallocated and * must no longer be used. * * Clients should call this if they receive a sensor update from * {@link ASENSOR_TYPE_DYNAMIC_SENSOR_META} indicating the sensors have changed. * If this happens, previously received lists from this method will be stale. * * Available since API level 33. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param list the returned list of dynamic sensors. * \return positive number of returned sensors or negative error code. * BAD_VALUE: manager is NULL. */ ASensorManager_getDynamicSensorList :: proc(manager: ^ASensorManager, list: ^ASensorList) -> int --- /** * Returns the default sensor for the given type, or NULL if no sensor * of that type exists. */ ASensorManager_getDefaultSensor :: proc(manager: ^ASensorManager, type: SensorType) -> ^ASensor --- /** * Returns the default sensor with the given type and wakeUp properties or NULL if no sensor * of this type and wakeUp properties exists. * * Available since API level 21. */ ASensorManager_getDefaultSensorEx :: proc(manager: ^ASensorManager, type: SensorType, wakeUp: bool) -> ^ASensor --- /** * Creates a new sensor event queue and associate it with a looper. * * "ident" is a identifier for the events that will be returned when * calling ALooper_pollOnce(). The identifier must be >= 0, or * ALOOPER_POLL_CALLBACK if providing a non-NULL callback. */ ASensorManager_createEventQueue :: proc(manager: ^ASensorManager, looper: ^ALooper, ident: i32, callback: ALooper_callbackFunc, data: rawptr) -> ^ASensorEventQueue --- /** * Destroys the event queue and free all resources associated to it. */ ASensorManager_destroyEventQueue :: proc(manager: ^ASensorManager, queue: ^ASensorEventQueue) -> i32 --- /** * Create direct channel based on shared memory * * Create a direct channel of {@link ASENSOR_DIRECT_CHANNEL_TYPE_SHARED_MEMORY} to be used * for configuring sensor direct report. * * Available since API level 26. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param fd file descriptor representing a shared memory created by * {@link ASharedMemory_create} * \param size size to be used, must be less or equal to size of shared memory. * * \return a positive integer as a channel id to be used in * {@link ASensorManager_destroyDirectChannel} and * {@link ASensorManager_configureDirectReport}, or value less or equal to 0 for failures. */ ASensorManager_createSharedMemoryDirectChannel :: proc(manager: ^ASensorManager, fd: i32, size: uint) -> i32 --- /** * Create direct channel based on AHardwareBuffer * * Create a direct channel of {@link ASENSOR_DIRECT_CHANNEL_TYPE_HARDWARE_BUFFER} type to be used * for configuring sensor direct report. * * Available since API level 26. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param buffer {@link AHardwareBuffer} instance created by {@link AHardwareBuffer_allocate}. * \param size the intended size to be used, must be less or equal to size of buffer. * * \return a positive integer as a channel id to be used in * {@link ASensorManager_destroyDirectChannel} and * {@link ASensorManager_configureDirectReport}, or value less or equal to 0 for failures. */ ASensorManager_createHardwareBufferDirectChannel :: proc(manager: ^ASensorManager, buffer: ^AHardwareBuffer, size: uint) -> i32 --- /** * Destroy a direct channel * * Destroy a direct channel previously created by using one of * ASensorManager_create*DirectChannel() derivative functions. * Note that the buffer used for creating the direct channel does not get destroyed with * ASensorManager_destroyDirectChannel and has to be closed or released separately. * * Available since API level 26. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param channelId channel id (a positive integer) returned from * {@link ASensorManager_createSharedMemoryDirectChannel} or * {@link ASensorManager_createHardwareBufferDirectChannel}. */ ASensorManager_destroyDirectChannel :: proc(manager: ^ASensorManager, channelId: i32) --- /** * Configure direct report on channel * * Configure sensor direct report on a direct channel: set rate to value other than * {@link ASENSOR_DIRECT_RATE_STOP} so that sensor event can be directly * written into the shared memory region used for creating the buffer. It returns a positive token * which can be used for identify sensor events from different sensors on success. Calling with rate * {@link ASENSOR_DIRECT_RATE_STOP} will stop direct report of the sensor specified in the channel. * * To stop all active sensor direct report configured to a channel, set sensor to NULL and rate to * {@link ASENSOR_DIRECT_RATE_STOP}. * * In order to successfully configure a direct report, the sensor has to support the specified rate * and the channel type, which can be checked by {@link ASensor_getHighestDirectReportRateLevel} and * {@link ASensor_isDirectChannelTypeSupported}, respectively. * * Example: * * ASensorManager *manager = ... * ASensor *sensor = ... * int channelId = ... * * ASensorManager_configureDirectReport(manager, sensor, channel_id, ASENSOR_DIRECT_RATE_FAST) * * Available since API level 26. * * \param manager the {@link ASensorManager} instance obtained from * {@link ASensorManager_getInstanceForPackage}. * \param sensor a {@link ASensor} to denote which sensor to be operate. It can be NULL if rate * is {@link ASENSOR_DIRECT_RATE_STOP}, denoting stopping of all active sensor * direct report. * \param channelId channel id (a positive integer) returned from * {@link ASensorManager_createSharedMemoryDirectChannel} or * {@link ASensorManager_createHardwareBufferDirectChannel}. * \param rate one of predefined ASENSOR_DIRECT_RATE_... that is supported by the sensor. * \return positive token for success or negative error code. */ ASensorManager_configureDirectReport :: proc(manager: ^ASensorManager, sensor: ^ASensor, channelId: i32, rate: SensorDirectReportRate) -> i32 --- /*****************************************************************************/ /** * Enable the selected sensor with sampling and report parameters * * Enable the selected sensor at a specified sampling period and max batch report latency. * To disable sensor, use {@link ASensorEventQueue_disableSensor}. * * \param queue {@link ASensorEventQueue} for sensor event to be report to. * \param sensor {@link ASensor} to be enabled. * \param samplingPeriodUs sampling period of sensor in microseconds. * \param maxBatchReportLatencyUs maximum time interval between two batches of sensor events are * delievered in microseconds. For sensor streaming, set to 0. * \return 0 on success or a negative error code on failure. */ ASensorEventQueue_registerSensor :: proc(queue: ^ASensorEventQueue, sensor: ^ASensor, samplingPeriodUs: i32, maxBatchReportLatencyUs: i64) -> i32 --- /** * Enable the selected sensor at default sampling rate. * * Start event reports of a sensor to specified sensor event queue at a default rate. * * \param queue {@link ASensorEventQueue} for sensor event to be report to. * \param sensor {@link ASensor} to be enabled. * * \return 0 on success or a negative error code on failure. */ ASensorEventQueue_enableSensor :: proc(queue: ^ASensorEventQueue, sensor: ^ASensor) -> i32 --- /** * Disable the selected sensor. * * Stop event reports from the sensor to specified sensor event queue. * * \param queue {@link ASensorEventQueue} to be changed * \param sensor {@link ASensor} to be disabled * \return 0 on success or a negative error code on failure. */ ASensorEventQueue_disableSensor :: proc(queue: ^ASensorEventQueue, sensor: ^ASensor) -> i32 --- /** * Sets the delivery rate of events in microseconds for the given sensor. * * This function has to be called after {@link ASensorEventQueue_enableSensor}. * Note that this is a hint only, generally event will arrive at a higher * rate. It is an error to set a rate inferior to the value returned by * ASensor_getMinDelay(). * * \param queue {@link ASensorEventQueue} to which sensor event is delivered. * \param sensor {@link ASensor} of which sampling rate to be updated. * \param usec sensor sampling period (1/sampling rate) in microseconds * \return 0 on sucess or a negative error code on failure. */ ASensorEventQueue_setEventRate :: proc(queue: ^ASensorEventQueue, sensor: ^ASensor, usec: i32) -> i32 --- /** * Determine if a sensor event queue has pending event to be processed. * * \param queue {@link ASensorEventQueue} to be queried * \return 1 if the queue has events 0 if it does not have events * or a negative value if there is an error. */ ASensorEventQueue_hasEvents :: proc(queue: ^ASensorEventQueue) -> i32 --- /** * Retrieve pending events in sensor event queue * * Retrieve next available events from the queue to a specified event array. * * \param queue {@link ASensorEventQueue} to get events from * \param events pointer to an array of {@link ASensorEvent}. * \param count max number of event that can be filled into array event. * \return number of events returned on success negative error code when * no events are pending or an error has occurred. * * Examples: * * ASensorEvent event * ssize_t numEvent = ASensorEventQueue_getEvents(queue, &event, 1) * * ASensorEvent eventBuffer[8] * ssize_t numEvent = ASensorEventQueue_getEvents(queue, eventBuffer, 8) * */ ASensorEventQueue_getEvents :: proc(queue: ^ASensorEventQueue, events: [^]ASensorEvent, count: uint) -> int --- /** * Request that {@link ASENSOR_TYPE_ADDITIONAL_INFO} events to be delivered on * the given {@link ASensorEventQueue}. * * Sensor data events are always delivered to the {@link ASensorEventQueue}. * * The {@link ASENSOR_TYPE_ADDITIONAL_INFO} events will be returned through * {@link ASensorEventQueue_getEvents}. The client is responsible for checking * {@link ASensorEvent#type} to determine the event type prior to handling of * the event. * * The client must be tolerant of any value for * {@link AAdditionalInfoEvent#type}, as new values may be defined in the future * and may delivered to the client. * * Available since API level 29. * * \param queue {@link ASensorEventQueue} to configure * \param enable true to request {@link ASENSOR_TYPE_ADDITIONAL_INFO} events, * false to stop receiving events * \return 0 on success or a negative error code on failure */ ASensorEventQueue_requestAdditionalInfoEvents :: proc(queue: ^ASensorEventQueue, enable: bool) -> i32 --- /*****************************************************************************/ /** * Returns this sensor's name (non localized) */ ASensor_getName :: proc(sensor: ^ASensor) -> cstring --- /** * Returns this sensor's vendor's name (non localized) */ ASensor_getVendor :: proc(sensor: ^ASensor) -> cstring --- /** * Return this sensor's type */ ASensor_getType :: proc(sensor: ^ASensor) -> SensorType --- /** * Returns this sensors's resolution */ ASensor_getResolution :: proc(sensor: ^ASensor) -> f32 --- /** * Returns the minimum delay allowed between events in microseconds. * A value of zero means that this sensor doesn't report events at a * constant rate, but rather only when a new data is available. */ ASensor_getMinDelay :: proc(sensor: ^ASensor) -> i32 --- /** * Returns the maximum size of batches for this sensor. Batches will often be * smaller, as the hardware fifo might be used for other sensors. * * Available since API level 21. */ ASensor_getFifoMaxEventCount :: proc(sensor: ^ASensor) -> i32 --- /** * Returns the hardware batch fifo size reserved to this sensor. * * Available since API level 21. */ ASensor_getFifoReservedEventCount :: proc(sensor: ^ASensor) -> i32 --- /** * Returns this sensor's string type. * * Available since API level 21. */ ASensor_getStringType :: proc(sensor: ^ASensor) -> cstring --- /** * Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants. * * Available since API level 21. */ ASensor_getReportingMode :: proc(sensor: ^ASensor) -> SensorReportingMode --- /** * Returns true if this is a wake up sensor, false otherwise. * * Available since API level 21. */ ASensor_isWakeUpSensor :: proc(sensor: ^ASensor) -> bool --- /** * Test if sensor supports a certain type of direct channel. * * Available since API level 26. * * \param sensor a {@link ASensor} to denote the sensor to be checked. * \param channelType Channel type constant, either * {@link ASENSOR_DIRECT_CHANNEL_TYPE_SHARED_MEMORY} * or {@link ASENSOR_DIRECT_CHANNEL_TYPE_HARDWARE_BUFFER}. * \returns true if sensor supports the specified direct channel type. */ ASensor_isDirectChannelTypeSupported :: proc(sensor: ^ASensor, channelType: SensorDirectChannelType) -> bool --- /** * Get the highest direct rate level that a sensor supports. * * Available since API level 26. * * \param sensor a {@link ASensor} to denote the sensor to be checked. * * \return a ASENSOR_DIRECT_RATE_... enum denoting the highest rate level supported by the sensor. * If return value is {@link ASENSOR_DIRECT_RATE_STOP}, it means the sensor * does not support direct report. */ ASensor_getHighestDirectReportRateLevel :: proc(sensor: ^ASensor) -> SensorDirectReportRate --- /** * Returns the sensor's handle. * * The handle identifies the sensor within the system and is included in the * sensor field of {@link ASensorEvent}, including those sent with type * {@link ASENSOR_TYPE_ADDITIONAL_INFO}. * * A sensor's handle is able to be used to map {@link ASENSOR_TYPE_ADDITIONAL_INFO} events to the * sensor that generated the event. * * It is important to note that the value returned by {@link ASensor_getHandle} is not the same as * the value returned by the Java API * android.hardware.Sensor's getId() and no mapping exists between the values. * * Available since API level 29. */ ASensor_getHandle :: proc(sensor: ^ASensor) -> i32 --- }