mirror of
https://github.com/eclipse/upm.git
synced 2025-03-28 03:10:06 +03:00
kxcjk1013: code cleanup and update sensor description
Code cleanup and proper close iio device in destructor. KXCJK-1013 is tri-axis accelerometer from Kionix. This sensor can measure acceleration in metre per second squared or in G-forces. The library provided is libupm-kxcjk1013.so.0.4.0. The example provided is kxcjk1013-example where it will print x,y,z axis when trigger buffer data is ready. Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com> Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
parent
bbb31fcab2
commit
398d50de2e
3
examples/c++/kxcjk1013.cxx
Normal file → Executable file
3
examples/c++/kxcjk1013.cxx
Normal file → Executable file
@ -44,8 +44,7 @@ data_callback(char* data)
|
|||||||
{
|
{
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
accelerometer->extract3Axis(data, &x, &y, &z);
|
accelerometer->extract3Axis(data, &x, &y, &z);
|
||||||
printf("%.1f %.1f %.1f\n", x, y, z);
|
printf("% .1f % .1f % .1f\n", x, y, z);
|
||||||
// usleep(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
18
src/kxcjk1013/kxcjk1013.cxx
Normal file → Executable file
18
src/kxcjk1013/kxcjk1013.cxx
Normal file → Executable file
@ -28,6 +28,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "kxcjk1013.hpp"
|
#include "kxcjk1013.hpp"
|
||||||
|
|
||||||
|
#define NUMBER_OF_BITS_IN_BYTE 8
|
||||||
|
|
||||||
using namespace upm;
|
using namespace upm;
|
||||||
|
|
||||||
KXCJK1013::KXCJK1013(int device)
|
KXCJK1013::KXCJK1013(int device)
|
||||||
@ -45,7 +47,7 @@ KXCJK1013::KXCJK1013(int device)
|
|||||||
sprintf(trigger, "hrtimer-kxcjk1013-hr-dev%d", device);
|
sprintf(trigger, "hrtimer-kxcjk1013-hr-dev%d", device);
|
||||||
|
|
||||||
if (mraa_iio_create_trigger(m_iio, trigger) != MRAA_SUCCESS)
|
if (mraa_iio_create_trigger(m_iio, trigger) != MRAA_SUCCESS)
|
||||||
fprintf(stderr, "Create trigger failed\n");
|
fprintf(stderr, "Create trigger %s failed\n", trigger);
|
||||||
|
|
||||||
if (mraa_iio_get_mounting_matrix(m_iio, m_mount_matrix) == MRAA_SUCCESS)
|
if (mraa_iio_get_mounting_matrix(m_iio, m_mount_matrix) == MRAA_SUCCESS)
|
||||||
m_mount_matrix_exist = true;
|
m_mount_matrix_exist = true;
|
||||||
@ -58,7 +60,8 @@ KXCJK1013::KXCJK1013(int device)
|
|||||||
|
|
||||||
KXCJK1013::~KXCJK1013()
|
KXCJK1013::~KXCJK1013()
|
||||||
{
|
{
|
||||||
// mraa_iio_stop(m_iio);
|
if(m_iio)
|
||||||
|
mraa_iio_close(m_iio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -70,21 +73,20 @@ KXCJK1013::installISR(void (*isr)(char*), void* arg)
|
|||||||
int64_t
|
int64_t
|
||||||
KXCJK1013::getChannelValue(unsigned char* input, mraa_iio_channel* chan)
|
KXCJK1013::getChannelValue(unsigned char* input, mraa_iio_channel* chan)
|
||||||
{
|
{
|
||||||
uint64_t u64;
|
uint64_t u64 = 0;
|
||||||
int i;
|
int i;
|
||||||
int storagebits = chan->bytes * 8;
|
int storagebits = chan->bytes * NUMBER_OF_BITS_IN_BYTE;
|
||||||
int realbits = chan->bits_used;
|
int realbits = chan->bits_used;
|
||||||
int zeroed_bits = storagebits - realbits;
|
int zeroed_bits = storagebits - realbits;
|
||||||
uint64_t sign_mask;
|
uint64_t sign_mask;
|
||||||
uint64_t value_mask;
|
uint64_t value_mask;
|
||||||
|
|
||||||
u64 = 0;
|
|
||||||
|
|
||||||
if (!chan->lendian)
|
if (!chan->lendian)
|
||||||
for (i = 0; i < storagebits / 8; i++)
|
for (i = 0; i < storagebits / NUMBER_OF_BITS_IN_BYTE; i++)
|
||||||
u64 = (u64 << 8) | input[i];
|
u64 = (u64 << NUMBER_OF_BITS_IN_BYTE) | input[i];
|
||||||
else
|
else
|
||||||
for (i = storagebits / 8 - 1; i >= 0; i--)
|
for (i = storagebits / NUMBER_OF_BITS_IN_BYTE - 1; i >= 0; i--)
|
||||||
u64 = (u64 << 8) | input[i];
|
u64 = (u64 << 8) | input[i];
|
||||||
|
|
||||||
u64 = (u64 >> chan->shift) & (~0ULL >> zeroed_bits);
|
u64 = (u64 >> chan->shift) & (~0ULL >> zeroed_bits);
|
||||||
|
3
src/kxcjk1013/kxcjk1013.hpp
Normal file → Executable file
3
src/kxcjk1013/kxcjk1013.hpp
Normal file → Executable file
@ -59,10 +59,12 @@ class KXCJK1013
|
|||||||
* @param iio device number
|
* @param iio device number
|
||||||
*/
|
*/
|
||||||
KXCJK1013(int device);
|
KXCJK1013(int device);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* KXCJK1013 destructor
|
* KXCJK1013 destructor
|
||||||
*/
|
*/
|
||||||
~KXCJK1013();
|
~KXCJK1013();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installs an interrupt service routine (ISR) to be called when
|
* Installs an interrupt service routine (ISR) to be called when
|
||||||
* an interrupt occurs
|
* an interrupt occurs
|
||||||
@ -73,6 +75,7 @@ class KXCJK1013
|
|||||||
* argument to the ISR.
|
* argument to the ISR.
|
||||||
*/
|
*/
|
||||||
void installISR(void (*isr)(char*), void* arg);
|
void installISR(void (*isr)(char*), void* arg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the channel value based on channel type
|
* Extract the channel value based on channel type
|
||||||
* @param input Channel data
|
* @param input Channel data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user