Hi, Here is a work in progress patch set for getting android to run on the gumstix overo TI OMAP3503 processor, using the gumstix Palo43 expansion board.
Elvis Dowson project bionic/ diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h index da34344..ba86d2a 100644 --- a/libc/private/bionic_tls.h +++ b/libc/private/bionic_tls.h @@ -81,7 +81,8 @@ extern int __set_tls(void *ptr); /* get the TLS */ #ifdef __arm__ -# define __get_tls() ( *((volatile void **) 0xffff0ff0) ) +typedef void* (__get_tls_t)(void); +static const __get_tls_t* __get_tls = (const __get_tls_t *) 0xffff0fe0; #else extern void* __get_tls( void ); #endif project external/qemu/ diff --git a/Makefile.android b/Makefile.android index 4c697fb..98d2084 100644 --- a/Makefile.android +++ b/Makefile.android @@ -18,7 +18,7 @@ MY_CFLAGS := $(CONFIG_INCLUDES) -O2 -g \ # this is needed to build the emulator on 64-bit Linux systems ifeq ($(HOST_OS)-$(HOST_ARCH),linux-x86) - MY_CFLAGS += -Wa,--32 + MY_CFLAGS += -Wa,--32 -D_GNU_SOURCE endif ifeq ($(HOST_OS),freebsd) project frameworks/base/ diff --git a/include/ui/EGLDisplaySurface.h b/include/ui/ EGLDisplaySurface.h index a8b5853..002a940 100644 --- a/include/ui/EGLDisplaySurface.h +++ b/include/ui/EGLDisplaySurface.h @@ -25,7 +25,8 @@ #include <ui/EGLNativeSurface.h> #include <pixelflinger/pixelflinger.h> -#include <linux/fb.h> +#include <linux-omap3/fb.h> +#include <linux-omap3/omapfb.h> #include <EGL/egl.h> diff --git a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp b/ libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp index f14d7e9..85d81b6 100644 --- a/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp +++ b/libs/surfaceflinger/DisplayHardware/DisplayHardware.cpp @@ -138,7 +138,7 @@ void DisplayHardware::init(uint32_t dpy) const char* const egl_extensions = eglQueryString( display, EGL_EXTENSIONS); - LOGI("EGL informations:"); + LOGI("OpenGL ES information:"); LOGI("# of configs : %d", numConfigs); LOGI("vendor : %s", eglQueryString(display, EGL_VENDOR)); LOGI("version : %s", eglQueryString(display, EGL_VERSION)); @@ -163,7 +163,7 @@ void DisplayHardware::init(uint32_t dpy) mDisplaySurface = new EGLDisplaySurface(); surface = eglCreateWindowSurface(display, config, mDisplaySurface.get(), NULL); - //checkEGLErrors("eglCreateDisplaySurfaceANDROID"); + checkEGLErrors("eglCreateDisplaySurfaceANDROID"); if (eglQuerySurface(display, surface, EGL_SWAP_BEHAVIOR, &dummy) == EGL_TRUE) { if (dummy == EGL_BUFFER_PRESERVED) { @@ -201,7 +201,7 @@ void DisplayHardware::init(uint32_t dpy) */ context = eglCreateContext(display, config, NULL, NULL); - //checkEGLErrors("eglCreateContext"); + checkEGLErrors("eglCreateContext"); eglQuerySurface(display, surface, EGL_WIDTH, &mWidth); eglQuerySurface(display, surface, EGL_HEIGHT, &mHeight); diff --git a/libs/ui/EGLDisplaySurface.cpp b/libs/ui/ EGLDisplaySurface.cpp index d06c98b..ec406c6 100644 --- a/libs/ui/EGLDisplaySurface.cpp +++ b/libs/ui/EGLDisplaySurface.cpp @@ -175,8 +175,14 @@ uint32_t EGLDisplaySurface::swapBuffers() mIndex = 1 - mIndex; mInfo.activate = FB_ACTIVATE_VBL; mInfo.yoffset = mIndex ? mInfo.yres : 0; - if (ioctl(egl_native_window_t::fd, FBIOPUT_VSCREENINFO, &mInfo) == -1) { - LOGE("FBIOPUT_VSCREENINFO failed"); + if (ioctl(egl_native_window_t::fd, FBIOPAN_DISPLAY, &mInfo) == -1) { + LOGE("FBIOPAN_DISPLAY failed"); + return 0; + } + + // Wait for vertical blanking interval, to reduce tearing and flicker artifacts. + if (ioctl(egl_native_window_t::fd, OMAPFB_WAITFORVSYNC, &mInfo) == -1) { + LOGE("OMAPFB_WAITFORVSYNC failed"); return 0; } @@ -395,10 +401,10 @@ status_t EGLDisplaySurface::mapFrameBuffer() info.activate = FB_ACTIVATE_NOW; uint32_t flags = PAGE_FLIP; - if (ioctl(fd, FBIOPUT_VSCREENINFO, &info) == -1) { + if (ioctl(fd, FBIOPAN_DISPLAY, &info) == -1) { info.yres_virtual = info.yres; flags &= ~PAGE_FLIP; - LOGW("FBIOPUT_VSCREENINFO failed, page flipping not supported"); + LOGW("FBIOPAN_DISPLAY failed, page flipping not supported"); } if (info.yres_virtual < info.yres * 2) { diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp index 7c2fc8e..bedc2d2 100644 --- a/libs/ui/EventHub.cpp +++ b/libs/ui/EventHub.cpp @@ -517,7 +517,7 @@ int EventHub::open_device(const char *deviceName) mFDs = new_mFDs; mDevices = new_devices; -#if 0 +#if 1 LOGI("add device %d: %s\n", mFDCount, deviceName); LOGI(" bus: %04x\n" " vendor %04x\n" diff --git a/opengl/libs/Android.mk b/opengl/libs/Android.mk index 2ecc776..20444e6 100644 --- a/opengl/libs/Android.mk +++ b/opengl/libs/Android.mk @@ -34,7 +34,7 @@ include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - GLES_CM/gl.cpp.arm \ + GLES_CM/gl.cpp \ GLES_CM/gl_logger.cpp \ # diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp index 865cf44..35478f0 100644 --- a/opengl/libs/GLES_CM/gl.cpp +++ b/opengl/libs/GLES_CM/gl.cpp @@ -68,7 +68,7 @@ void glVertexPointerBounds(GLint size, GLenum type, #undef CALL_GL_API #undef CALL_GL_API_RETURN -#if USE_FAST_TLS_KEY +/* #if USE_FAST_TLS_KEY #define API_ENTRY(_api) __attribute__((naked)) _api @@ -90,7 +90,7 @@ void glVertexPointerBounds(GLint size, GLenum type, CALL_GL_API(_api, __VA_ARGS__) \ return 0; // placate gcc's warnings. never reached. -#else +#else */ #define API_ENTRY(_api) _api @@ -104,7 +104,7 @@ void glVertexPointerBounds(GLint size, GLenum type, GL_LOGGER_IMPL( log_##_api (__VA_ARGS__); ) \ return _c->_api(__VA_ARGS__) -#endif +//#endif extern "C" { #include "gl_api.in" diff --git a/services/java/com/android/server/InputDevice.java b/ services/java/com/android/server/InputDevice.java index 7b8a2a4..d9304c1 100644 --- a/services/java/com/android/server/InputDevice.java +++ b/services/java/com/android/server/InputDevice.java @@ -21,10 +21,15 @@ import android.view.Display; import android.view.MotionEvent; import android.view.Surface; import android.view.WindowManagerPolicy; +import java.io.FileInputStream; +import java.util.StringTokenizer; public class InputDevice { /** Amount that trackball needs to move in order to generate a key event. */ static final int TRACKBALL_MOVEMENT_THRESHOLD = 6; + + /** Touchscreen calibration file. */ + static final String CALIBRATION_FILE = "/etc/pointercal"; final int id; final int classes; @@ -33,6 +38,7 @@ public class InputDevice { final AbsoluteInfo absY; final AbsoluteInfo absPressure; final AbsoluteInfo absSize; + final TransformInfo tInfo; long mDownTime = 0; int mMetaKeysState = 0; @@ -86,12 +92,24 @@ public class InputDevice { h = tmp; } if (device.absX != null) { - scaledX = ((scaledX-device.absX.minValue) - / device.absX.range) * w; + if (device.tInfo != null) + scaledX = (device.tInfo.x1 * x + + device.tInfo.y1 * y + + device.tInfo.z1) + / device.tInfo.s; + else + scaledX = ((scaledX-device.absX.minValue) + / device.absX.range) * w; } if (device.absY != null) { - scaledY = ((scaledY-device.absY.minValue) - / device.absY.range) * h; + if (device.tInfo != null) + scaledY = (device.tInfo.x2 * x + + device.tInfo.y2 * y + + device.tInfo.z2) + / device.tInfo.s; + else + scaledY = ((scaledY-device.absY.minValue) + / device.absY.range) * h; } if (device.absPressure != null) { scaledPressure = @@ -199,6 +217,16 @@ public class InputDevice { int fuzz; }; + static class TransformInfo { + float x1; + float y1; + float z1; + float x2; + float y2; + float z2; + float s; + }; + InputDevice(int _id, int _classes, String _name, AbsoluteInfo _absX, AbsoluteInfo _absY, AbsoluteInfo _absPressure, AbsoluteInfo _absSize) { @@ -209,5 +237,38 @@ public class InputDevice { absY = _absY; absPressure = _absPressure; absSize = _absSize; + TransformInfo t = null; + + try { + FileInputStream is = new FileInputStream(CALIBRATION_FILE); + byte[] mBuffer = new byte[64]; + int len = is.read(mBuffer); + is.close(); + + if (len > 0) { + int i; + for (i = 0 ; i < len ; i++) { + if (mBuffer[i] == '\n' || mBuffer[i] == 0) { + break; + } + } + len = i; + } + + StringTokenizer st = new StringTokenizer( new String(mBuffer, 0, 0, len) ); + + t = new TransformInfo (); + t.x1 = Integer.parseInt( st.nextToken() ); + t.y1 = Integer.parseInt( st.nextToken() ); + t.z1 = Integer.parseInt( st.nextToken() ); + t.x2 = Integer.parseInt( st.nextToken() ); + t.y2 = Integer.parseInt( st.nextToken() ); + t.z2 = Integer.parseInt( st.nextToken() ); + t.s = Integer.parseInt( st.nextToken() ); + } catch (java.io.FileNotFoundException e) { + } catch (java.io.IOException e) { + } + tInfo = t; + } }; diff --git a/services/jni/com_android_server_BatteryService.cpp b/ services/jni/com_android_server_BatteryService.cpp index 6636a97..748f514 100644 --- a/services/jni/com_android_server_BatteryService.cpp +++ b/services/jni/com_android_server_BatteryService.cpp @@ -150,12 +150,12 @@ static void setBooleanField(JNIEnv* env, jobject obj, const char* path, jfieldID const int SIZE = 16; char buf[SIZE]; - jboolean value = false; - if (readFromFile(path, buf, SIZE) > 0) { + jboolean value = true; +/* if (readFromFile(path, buf, SIZE) > 0) { if (buf[0] == '1') { value = true; } - } + } */ env->SetBooleanField(obj, fieldID, value); } @@ -164,10 +164,10 @@ static void setIntField(JNIEnv* env, jobject obj, const char* path, jfieldID fie const int SIZE = 128; char buf[SIZE]; - jint value = 0; - if (readFromFile(path, buf, SIZE) > 0) { + jint value = 100; +/* if (readFromFile(path, buf, SIZE) > 0) { value = atoi(buf); - } + } */ env->SetIntField(obj, fieldID, value); } @@ -181,17 +181,21 @@ static void android_server_BatteryService_update (JNIEnv* env, jobject obj) setIntField(env, obj, BATTERY_VOLTAGE_PATH, gFieldIds.mBatteryVoltage); setIntField(env, obj, BATTERY_TEMPERATURE_PATH, gFieldIds.mBatteryTemperature); + env->SetIntField(obj, gFieldIds.mBatteryStatus, gConstants.statusFull); + env->SetIntField(obj, gFieldIds.mBatteryHealth, gConstants.healthGood); + env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env- >NewStringUTF("1")); + const int SIZE = 128; char buf[SIZE]; - if (readFromFile(BATTERY_STATUS_PATH, buf, SIZE) > 0) +/* if (readFromFile(BATTERY_STATUS_PATH, buf, SIZE) > 0) env->SetIntField(obj, gFieldIds.mBatteryStatus, getBatteryStatus(buf)); if (readFromFile(BATTERY_HEALTH_PATH, buf, SIZE) > 0) env->SetIntField(obj, gFieldIds.mBatteryHealth, getBatteryHealth(buf)); if (readFromFile(BATTERY_TECHNOLOGY_PATH, buf, SIZE) > 0) - env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env- >NewStringUTF(buf)); + env->SetObjectField(obj, gFieldIds.mBatteryTechnology, env- >NewStringUTF(buf)); */ } static JNINativeMethod sMethods[] = { --~--~---------~--~----~------------~-------~--~----~ unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting -~----------~----~----~----~------~----~------~--~---