• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » OMAP™ Applications Processors » OMAP 4 Forum » Gyroscope on custom board
Share
OMAP™ Applications Processors
  • Forums
Options
  • Subscribe via RSS

Gyroscope on custom board

Gyroscope on custom board

This question is answered
Haran Ashok
Posted by Haran Ashok
on May 02 2012 00:01 AM
Intellectual960 points

Hi,

I am using a a custom board which is similar to blaze but uses omap 4460 processor.I am using ICS on my custom board.There was no HAL for gyroscope so i wrote my own HAL but i am not getting any values for X Y and Z.Below is the code i wrote.The driver works fine.

Following is my HAL code:

#include <fcntl.h>
#include <errno.h>
#include <math.h>
#include <poll.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/select.h>
#include <cutils/log.h>

#include "ewtsa.h"

#define FETCH_FULL_EVENT_BEFORE_RETURN 0

/*****************************************************************************/

ewtsaSensor::ewtsaSensor()
    : SensorBase(NULL, "ewtsa"),
      mEnabled(0),
      mInputReader(4),
      mHasPendingEvent(false)
{
    mPendingEvent.version = sizeof(sensors_event_t);
    mPendingEvent.sensor = ID_GY;
    mPendingEvent.type = SENSOR_TYPE_GYROSCOPE;
    memset(mPendingEvent.data, 0, sizeof(mPendingEvent.data));

    if (data_fd) {
        strcpy(input_sysfs_path, "/sys/bus/i2c/drivers/ewtsa/4-0068/");
        input_sysfs_path_len = strlen(input_sysfs_path);
    }
                           }

ewtsaSensor::~ewtsaSensor() {
    if (mEnabled) {
        enable(0, 0);
    }
}

int ewtsaSensor::setInitialState() {
    struct input_absinfo absinfo_x;
    struct input_absinfo absinfo_y;
    struct input_absinfo absinfo_z;
    float value;
    if (!ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_x) &&
        !ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_y) &&
        !ioctl(data_fd, EVIOCGABS(EVENT_TYPE_GYRO_X), &absinfo_z)) {
        value = absinfo_x.value;
        mPendingEvent.data[0] = value * CONVERT_GYRO_X;
        value = absinfo_x.value;
        mPendingEvent.data[1] = value * CONVERT_GYRO_Y;
        value = absinfo_x.value;
        mPendingEvent.data[2] = value * CONVERT_GYRO_Z;
        mHasPendingEvent = true;
    }
    return 0;
}

int ewtsaSensor::enable(int32_t, int en) {
    int flags = en ? 1 : 0;
    if (flags != mEnabled) {
        int fd;
        strcpy(&input_sysfs_path[input_sysfs_path_len],"enable");
        fd = open(input_sysfs_path, O_RDWR);
        if (fd >= 0) {
            char buf[2];
            int err;
buf[1] = 0;
            if (flags) {
                buf[0] = '1';
            } else {
                buf[0] = '0';
            }
            err = write(fd, buf, sizeof(buf));
            close(fd);
            mEnabled = flags;
            setInitialState();
            return 0;
        }
        return -1;
    }
    return 0;
}
                                                                                                                                                    63,1          43%
bool ewtsaSensor::hasPendingEvents() const {
    return mHasPendingEvent;
}

int ewtsaSensor::setDelay(int32_t handle, int64_t delay_ns)
{
    int fd;
    strcpy(&input_sysfs_path[input_sysfs_path_len], "delay");
    fd = open(input_sysfs_path, O_RDWR);
    if (fd >= 0) {
        char buf[80];
        int32_t delay_ms = (int32_t)delay_ns/1000000;
        sprintf(buf, "%d", delay_ms);
        write(fd, buf, strlen(buf)+1);
        close(fd);
        return 0;
    }
    return -1;
}

int ewtsaSensor::readEvents(sensors_event_t* data, int count)
{
    if (count < 1)
        return -EINVAL;

    if (mHasPendingEvent) {
        mHasPendingEvent = false;
        mPendingEvent.timestamp = getTimestamp();
        *data = mPendingEvent;
        return mEnabled ? 1 : 0;
    }
                                  ssize_t n = mInputReader.fill(data_fd);
    if (n < 0)
        return n;

    int numEventReceived = 0;
    input_event const* event;

#if FETCH_FULL_EVENT_BEFORE_RETURN
again:
#endif
    while (count && mInputReader.readEvent(&event)) {
        int type = event->type;
        if (type == EV_REL) {
            float value = event->value;
            if (event->code == EVENT_TYPE_GYRO_X) {
                mPendingEvent.data[0] = value * CONVERT_GYRO_X;
            } else if (event->code == EVENT_TYPE_GYRO_Y) {
                mPendingEvent.data[1] = value * CONVERT_GYRO_Y;
            } else if (event->code == EVENT_TYPE_GYRO_Z) {
                mPendingEvent.data[2] = value * CONVERT_GYRO_Z;
            }
        } else if (type == EV_SYN) {
            mPendingEvent.timestamp = timevalToNano(event->time);
            if (mEnabled) {
                *data++ = mPendingEvent;
                count--;
                numEventReceived++;
            }
        } else {
            LOGE("ewtsa: unknown event (type=%d, code=%d)",
                    type, event->code);
        }
        mInputReader.next();
    }

#if FETCH_FULL_EVENT_BEFORE_RETURN
                                                                                                                                                    167,1         91%
   try again instead of returning with nothing and redoing poll. */
    if (numEventReceived == 0 && mEnabled == 1) {
        n = mInputReader.fill(data_fd);
        if (n)
            goto again;
    }
#endif

    return numEventReceived;
}

                                                                                                                                                    179,0-1       Bot
Please tell me what change I have to do here

Thanks

Haran

android
Report Abuse
  • Reply
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
All Replies
  • Manuel Contreras
    Posted by Manuel Contreras
    on May 02 2012 12:29 PM
    Expert8565 points

    Haran;

    Could you check that android.hardware.sensor.gyroscope.xml is in /system/etc/permissions/?

    this file is referenced from ./mydroid/device/ti/blaze_tablet/device.mk as PRODUCT_COPY_FILES and it is needed to get access to Gyroscope HW.

    see next post

    http://e2e.ti.com/support/omap/f/849/t/185611.aspx

    Please click the Verify Answer button on this post if it answers your question
    _______________________________________________________
    Be sure to read the OMAP4 and OMAP5 Forum Guidelines and FAQ
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • abhijit Panigrahi
    Posted by abhijit Panigrahi
    on May 11 2012 06:39 AM
    Intellectual470 points

    Hi Manuel,

    This permission is already there.

    Now the data is coming but its not changing.(driver side is working properly).

    What next ????

    Abhijit

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Manuel Contreras
    Posted by Manuel Contreras
    on May 11 2012 15:01 PM
    Verified Answer
    Verified by Magdalena Iovescu
    Expert8565 points

    Abhijit,

    Can you provide more information about your use case?

    1. What application are you using to test sensor changes?

    2. What changes have you made so far?

    3. How is being sensor open?

    Please click the Verify Answer button on this post if it answers your question
    _______________________________________________________
    Be sure to read the OMAP4 and OMAP5 Forum Guidelines and FAQ
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • abhijit Panigrahi
    Posted by abhijit Panigrahi
    on May 13 2012 23:57 PM
    Intellectual470 points

    Manuel,

    Gyroscope is working fine on my custom board.

    I was using Sensortest application provided by TI.

    Problem was in HAL code.

    Thanks for your support

    Abhijit

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
TI E2E™ Community
  • Support Forums
  • Blogs
  • Videos
  • Groups
  • Site Support & Feedback
  • Settings
TI E2E™ Community Groups
  • TI University Program
  • Make the Switch
  • Microcontroller Projects
  • Motor Drive & Control
Other Communities
  • Deyisupport
  • Designsomething.org
  • beagleboard.org
  • TI on Element 14
  • TI on TechXchangeSM
Other Technical & Support Resources
  • WEBENCH® Design Center
  • Product Information Centers
  • Technical Documents
  • TI Design Network
  • TI Technical Articles
  • TI Training

All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
embedded processors, along with software, tools and the industry’s largest sales/support staff.

© Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy Policy | Terms of Use