X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fiio_driver.c;h=824e0b1dbd11dd0e3a6feafb71399fefa9c6f623;hb=HEAD;hp=eb9ceddc402ee89fb37c87ef047ac982d5693476;hpb=8c19105309befb4c1f63a7ab58f007e0dc75d5d2;p=contrib%2Fmraa.git diff --git a/examples/iio_driver.c b/examples/iio_driver.c index eb9cedd..824e0b1 100644 --- a/examples/iio_driver.c +++ b/examples/iio_driver.c @@ -23,27 +23,123 @@ */ #include -//! [Interesting] #include "mraa/iio.h" +static void +printword(uint16_t input, mraa_iio_channel* chan) +{ + int16_t res; + + if (!chan->lendian) { + input = be16toh(input); + } else { + input = le16toh(input); + } + + input >>= chan->shift; + input &= chan->mask; + if (chan->signedd) { + res = (int16_t)(input << (16 - chan->bits_used)) >> (16 - chan->bits_used); + } else { + res = input; + } + printf(" value = %05f\n", (float) res); +} + +mraa_iio_context iio_device0; +mraa_iio_context iio_device6; + +void +interrupt(char* data) +{ + mraa_iio_channel* channels = mraa_iio_get_channels(iio_device0); + int i = 0; + + for (i; i < mraa_iio_get_channel_count(iio_device0); i++) { + if (channels[i].enabled) { + printf("channel %d - bytes %d\n", channels[i].index, channels[i].bytes); + switch (channels[i].bytes) { + case 2: + printword(*(uint16_t*) (data + channels[i].location), &channels[i]); + } + } + } +} + +void +event_interrupt(struct iio_event_data* data) +{ + int chan_type; + int modifier; + int type; + int direction; + int channel; + int channel2; + int different; + mraa_iio_event_extract_event(data, &chan_type, &modifier, &type, &direction, &channel, &channel2, &different); + + printf("event time %lld id %lld extracted chan_type %d modifier %d type %d direction %d " + "channel %d channel2 %d different %d\n", + data->timestamp, data->id, chan_type, modifier, type, direction, channel, channel2, different); +} + int main() { - mraa_iio_context iio_device0; - + //! [Interesting] iio_device0 = mraa_iio_init(0); if (iio_device0 == NULL) { return EXIT_FAILURE; } - float iio_value; - mraa_result_t ret = mraa_iio_read(iio_device0, 0, "raw", &iio_value); + float iio_float; + int iio_int; + mraa_result_t ret; + + ret = mraa_iio_write_float(iio_device0, "in_accel_scale", 0.019163); + if (ret == MRAA_SUCCESS) { + fprintf(stdout, "IIO write success\n"); + } + + ret = mraa_iio_read_float(iio_device0, "in_accel_scale", &iio_float); + if (ret == MRAA_SUCCESS) { + fprintf(stdout, "IIO read %f\n", iio_float); + } + + ret = mraa_iio_write_int(iio_device0, "scan_elements/in_accel_x_en", 1); + if (ret == MRAA_SUCCESS) { + fprintf(stdout, "IIO write success\n"); + } + + ret = mraa_iio_read_int(iio_device0, "scan_elements/in_accel_x_en", &iio_int); if (ret == MRAA_SUCCESS) { - fprintf(stdout, "IIO read %f\n", iio_value); + fprintf(stdout, "IIO read %d\n", iio_int); + } + + if (mraa_iio_trigger_buffer(iio_device0, interrupt, NULL) == MRAA_SUCCESS) { + sleep(100); + return EXIT_SUCCESS; + } + + /* + struct iio_event_data event; + iio_device6 = mraa_iio_init(6); + if (iio_device6 == NULL) { + return EXIT_FAILURE; + } + mraa_iio_write_int(iio_device6, "events/in_proximity2_thresh_either_en", 1); + + + // Blocking until event fired + if (mraa_iio_event_poll(iio_device6, &event) == MRAA_SUCCESS) { + event_interrupt(&event); //just to show data } - mraa_iio_stop(iio_device0); + if (mraa_iio_event_setup_callback(iio_device6, event_interrupt, NULL) == MRAA_SUCCESS) { + sleep(100); + return EXIT_SUCCESS; + }*/ - return EXIT_SUCCESS; + //! [Interesting] + return EXIT_FAILURE; } -//! [Interesting]