stage for 1.1a1
This commit is contained in:
parent
a3403ab062
commit
115d35c09a
@ -3,6 +3,7 @@
|
|||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="src" path="gen"/>
|
<classpathentry kind="src" path="gen"/>
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
<classpathentry kind="lib" path="/home/onaips/Dropbox/projectos/workspace/droidVNCserver/libs/GoogleAdMobAdsSdk-4.1.1.jar"/>
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="lib" path="libs/GoogleAdMobAdsSdk-6.0.1.jar"/>
|
||||||
|
<classpathentry kind="output" path="bin/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,4 @@
|
|||||||
bin
|
bin
|
||||||
|
gen
|
||||||
|
libs
|
||||||
|
obj
|
||||||
|
@ -1,49 +1,74 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.onaips.vnc" android:versionCode="56" android:versionName="1.0a3">
|
package="org.onaips.vnc"
|
||||||
<uses-sdk android:minSdkVersion="5"/>
|
android:versionCode="56"
|
||||||
|
android:versionName="1.0a3" >
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
|
<uses-sdk android:minSdkVersion="5" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.WRITE_SETTINGS" >
|
||||||
|
</uses-permission>
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:name="MainApplication"
|
||||||
|
android:debuggable="true"
|
||||||
|
android:icon="@drawable/icon"
|
||||||
|
android:label="droid VNC server" >
|
||||||
|
<activity
|
||||||
|
android:name=".MainActivity"
|
||||||
|
android:icon="@drawable/icon"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:launchMode="singleInstance" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
|
||||||
<application android:label="droid VNC server" android:icon="@drawable/icon"
|
|
||||||
android:name="MainApplication" android:debuggable="true">
|
|
||||||
<activity android:name=".MainActivity" android:launchMode="singleInstance"
|
|
||||||
android:label="@string/app_name" android:icon="@drawable/icon">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
<action android:name="org.onaips.vnc.ACTIVITY_UPDATE" />
|
<action android:name="org.onaips.vnc.ACTIVITY_UPDATE" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="preferences"
|
||||||
|
android:label="Preferences" >
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="com.google.ads.AdActivity"
|
||||||
|
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
|
||||||
|
|
||||||
</intent-filter>
|
<service android:name=".ServerManager" >
|
||||||
</activity>
|
<intent-filter>
|
||||||
<activity android:name="preferences" android:label="Preferences"></activity>
|
<action android:name="org.onaips.vnc.ServerManager" >
|
||||||
<activity android:name="com.google.ads.AdActivity"
|
</action>
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation" />
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
|
||||||
<service android:name=".ServerManager">
|
<receiver android:name=".StartServiceAtBootReceiver" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="org.onaips.vnc.ServerManager"></action>
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
</intent-filter>
|
|
||||||
</service>
|
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.HOME" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
<receiver android:name=".StartServiceAtBootReceiver">
|
<service android:name="avncservice" >
|
||||||
<intent-filter>
|
</service>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
</application>
|
||||||
<category android:name="android.intent.category.HOME" />
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
|
|
||||||
<service android:name="avncservice"></service>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >
|
||||||
</application><uses-permission android:name="android.permission.READ_FRAME_BUFFER"></uses-permission>
|
</uses-permission>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
|
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" >
|
||||||
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"></uses-permission>
|
</uses-permission>
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
|
</uses-permission>
|
||||||
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
|
||||||
<uses-permission android:name="android.permission.GET_TASKS"></uses-permission>
|
</uses-permission>
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
|
<uses-permission android:name="android.permission.INTERNET" >
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
|
</uses-permission>
|
||||||
|
<uses-permission android:name="android.permission.GET_TASKS" >
|
||||||
|
</uses-permission>
|
||||||
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
|
||||||
|
</uses-permission>
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK" >
|
||||||
|
</uses-permission>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
|
v1.1a
|
||||||
|
|
||||||
- Changed to official libvncserver 0.9- Changed to official libvncserver 0.99
|
- Changed to official libvncserver v0.9.9.
|
||||||
- Decoupled native screen grabber from jni sources, you wont need to have AOSP anymore
|
- Decoupled native screen grabber from jni sources, you wont need to have AOSP anymore, just the precompiled libs.
|
||||||
|
|
||||||
|
|
||||||
v1.0a
|
v1.0a
|
||||||
|
|
||||||
|
7
README
7
README
@ -1,12 +1,9 @@
|
|||||||
the Droid VNC server projects consists in two parts: the daemon and GUI.
|
The droid-VNC-server projects consists in two parts: the daemon and GUI.
|
||||||
|
|
||||||
|
GUI handles general user input, and connects to the daemon using local IPC. You can compile it using Eclipse or Ant (the latter not tested though).
|
||||||
GUI handles general user input, and connects to the daemon using local IPC. You can compile it using Eclipse or Ant (not tested for long time).
|
|
||||||
|
|
||||||
If you wish to contribute to the project, just fork it and commit some interesting features...
|
If you wish to contribute to the project, just fork it and commit some interesting features...
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-------------- Compile C daemon -------------------
|
-------------- Compile C daemon -------------------
|
||||||
NOTE: to compile the C daemon you must have a working AOSP source tree, and copy it to external folder.
|
NOTE: to compile the C daemon you must have a working AOSP source tree, and copy it to external folder.
|
||||||
Do something like:
|
Do something like:
|
||||||
|
14
TODO
14
TODO
@ -1,5 +1,9 @@
|
|||||||
- change tcp socket to unix socket
|
[ADD] GnuTLS support (already working on libvncserver)
|
||||||
- click on address field will iterate show interface addresses
|
[ADD] Map volume keys
|
||||||
- map volume keys
|
[ADD] Custom key mapping
|
||||||
- custom key mapping
|
[ADD] MIPS and X86 to APP_ABI (and more)
|
||||||
- add MIPS and X86 to APP_ABI (and more)
|
[ADD] Key/Touch injection though WindowManagerService/Binder mechanism (looking for a aidl->cpp translator)
|
||||||
|
|
||||||
|
[CHANGE] Tcp socket to unix socket
|
||||||
|
|
||||||
|
[FIX] Click on address field will iterate show interface addresses
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
# This file is automatically generated by Android Tools.
|
|
||||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
|
||||||
#
|
|
||||||
# This file must be checked in Version Control Systems.
|
|
||||||
#
|
|
||||||
# To customize properties used by the Ant build system use,
|
|
||||||
# "build.properties", and override values to adapt the script to your
|
|
||||||
# project structure.
|
|
||||||
|
|
||||||
# Project target.
|
|
||||||
target=android-10
|
|
@ -1,24 +0,0 @@
|
|||||||
LOCAL_PATH:= $(call my-dir)
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
|
|
||||||
LOCAL_SRC_FILES = \
|
|
||||||
droidVncGrab.cpp
|
|
||||||
|
|
||||||
#LOCAL_CFLAGS += -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
|
|
||||||
|
|
||||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
|
||||||
|
|
||||||
LOCAL_PRELINK_MODULE:=false #override prelink map
|
|
||||||
LOCAL_MODULE:= droidvncgrab_sdk$(PLATFORM_SDK_VERSION)
|
|
||||||
LOCAL_MODULE_TAGS:= optional
|
|
||||||
|
|
||||||
ifeq ($(PLATFORM_SDK_VERSION),9)
|
|
||||||
LOCAL_SHARED_LIBRARIES := libsurfaceflinger_client libui libbinder libutils libcutils #libcrypto libssl libhardware
|
|
||||||
else ifeq ($(PLATFORM_SDK_VERSION),15)
|
|
||||||
LOCAL_SHARED_LIBRARIES := libgui libui libbinder libcutils
|
|
||||||
else
|
|
||||||
#add here more sdk versions
|
|
||||||
LOCAL_SHARED_LIBRARIES := libsurfaceflinger_client libui libbinder libutils libcutils #libcrypto libssl libhardware
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
|
@ -1 +0,0 @@
|
|||||||
This
|
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "droidVncGrab.h"
|
|
||||||
#include "screenFormat.h"
|
|
||||||
|
|
||||||
#include <binder/IPCThreadState.h>
|
|
||||||
#include <binder/ProcessState.h>
|
|
||||||
#include <binder/IServiceManager.h>
|
|
||||||
|
|
||||||
#include <binder/IMemory.h>
|
|
||||||
#include <surfaceflinger/ISurfaceComposer.h>
|
|
||||||
#include <surfaceflinger/SurfaceComposerClient.h>
|
|
||||||
|
|
||||||
using namespace android;
|
|
||||||
|
|
||||||
ScreenshotClient *screenshotClient=NULL;
|
|
||||||
|
|
||||||
extern "C" screenFormat getScreenFormat()
|
|
||||||
{
|
|
||||||
//get format on PixelFormat struct
|
|
||||||
PixelFormat f=screenshotClient->getFormat();
|
|
||||||
|
|
||||||
PixelFormatInfo pf;
|
|
||||||
getPixelFormatInfo(f,&pf);
|
|
||||||
|
|
||||||
screenFormat format;
|
|
||||||
|
|
||||||
format.bitsPerPixel = pf.bitsPerPixel;
|
|
||||||
format.width = screenshotClient->getWidth();
|
|
||||||
format.height = screenshotClient->getHeight();
|
|
||||||
format.size = pf.bitsPerPixel*format.width*format.height/CHAR_BIT;
|
|
||||||
format.redShift = pf.l_red;
|
|
||||||
format.redMax = pf.h_red;
|
|
||||||
format.greenShift = pf.l_green;
|
|
||||||
format.greenMax = pf.h_green-pf.h_red;
|
|
||||||
format.blueShift = pf.l_blue;
|
|
||||||
format.blueMax = pf.h_blue-pf.h_green;
|
|
||||||
format.alphaShift = pf.l_alpha;
|
|
||||||
format.alphaMax = pf.h_alpha-pf.h_blue;
|
|
||||||
|
|
||||||
return format;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" int initScreenGrab()
|
|
||||||
{
|
|
||||||
int errno;
|
|
||||||
|
|
||||||
L("--Initializing gingerbread access method--\n");
|
|
||||||
|
|
||||||
screenshotClient=new ScreenshotClient();
|
|
||||||
errno=screenshotClient->update();
|
|
||||||
if (errno != NO_ERROR) {
|
|
||||||
L("screen capture failed: %s\n", strerror(-errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" unsigned int * getScreenBuffer()
|
|
||||||
{
|
|
||||||
screenshotClient->update();
|
|
||||||
return (unsigned int*)screenshotClient->getPixels();
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DISPLAY_BINDER
|
|
||||||
#define DISPLAY_BINDER
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define L(...) __android_log_print(ANDROID_LOG_INFO,"VNCserver",__VA_ARGS__);printf(__VA_ARGS__);
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
unsigned int * updateScreen();
|
|
||||||
int initScreenGrab();
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,26 +0,0 @@
|
|||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _screenFormat
|
|
||||||
{
|
|
||||||
|
|
||||||
uint16_t width;
|
|
||||||
uint16_t height;
|
|
||||||
|
|
||||||
uint8_t bitsPerPixel;
|
|
||||||
|
|
||||||
uint16_t redMax;
|
|
||||||
uint16_t greenMax;
|
|
||||||
uint16_t blueMax;
|
|
||||||
uint16_t alphaMax;
|
|
||||||
|
|
||||||
uint8_t redShift;
|
|
||||||
uint8_t greenShift;
|
|
||||||
uint8_t blueShift;
|
|
||||||
uint8_t alphaShift;
|
|
||||||
|
|
||||||
uint32_t size;
|
|
||||||
|
|
||||||
uint32_t pad;
|
|
||||||
|
|
||||||
} screenFormat;
|
|
@ -3,7 +3,6 @@ LOCAL_PATH := $(call my-dir)
|
|||||||
subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \
|
subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \
|
||||||
crypto \
|
crypto \
|
||||||
ssl \
|
ssl \
|
||||||
# apps \
|
|
||||||
))
|
))
|
||||||
|
|
||||||
include $(subdirs)
|
include $(subdirs)
|
||||||
|
@ -470,12 +470,11 @@ local_src_files := \
|
|||||||
x509v3/v3err.c
|
x509v3/v3err.c
|
||||||
|
|
||||||
local_c_includes := \
|
local_c_includes := \
|
||||||
external/openssl \
|
$(LOCAL_PATH)/../ \
|
||||||
external/openssl/crypto/asn1 \
|
$(LOCAL_PATH)/../crypto/asn1 \
|
||||||
external/openssl/crypto/evp \
|
$(LOCAL_PATH)/../crypto/evp \
|
||||||
external/openssl/include \
|
$(LOCAL_PATH)/../include \
|
||||||
external/openssl/include/openssl \
|
$(LOCAL_PATH)/../include/openssl
|
||||||
external/zlib
|
|
||||||
|
|
||||||
local_c_flags := -DNO_WINDOWS_BRAINDEATH
|
local_c_flags := -DNO_WINDOWS_BRAINDEATH
|
||||||
|
|
||||||
@ -504,56 +503,56 @@ include $(BUILD_STATIC_LIBRARY)
|
|||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# target shared library
|
# target shared library
|
||||||
include $(CLEAR_VARS)
|
#include $(CLEAR_VARS)
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
|
#
|
||||||
ifneq ($(TARGET_ARCH),x86)
|
#ifneq ($(TARGET_ARCH),x86)
|
||||||
LOCAL_NDK_VERSION := 5
|
#LOCAL_NDK_VERSION := 5
|
||||||
LOCAL_SDK_VERSION := 9
|
#LOCAL_SDK_VERSION := 9
|
||||||
# Use the NDK prebuilt libz and libdl.
|
## Use the NDK prebuilt libz and libdl.
|
||||||
LOCAL_LDFLAGS += -lz -ldl
|
#LOCAL_LDFLAGS += -lz -ldl
|
||||||
else
|
#else
|
||||||
LOCAL_SHARED_LIBRARIES += libz libdl
|
#LOCAL_SHARED_LIBRARIES += libz libdl
|
||||||
endif
|
#endif
|
||||||
|
#
|
||||||
LOCAL_SRC_FILES += $(local_src_files)
|
#LOCAL_SRC_FILES += $(local_src_files)
|
||||||
LOCAL_CFLAGS += $(local_c_flags)
|
#LOCAL_CFLAGS += $(local_c_flags)
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
ifeq ($(TARGET_ARCH),arm)
|
#ifeq ($(TARGET_ARCH),arm)
|
||||||
LOCAL_SRC_FILES += $(arm_src_files)
|
# LOCAL_SRC_FILES += $(arm_src_files)
|
||||||
LOCAL_CFLAGS += $(arm_cflags)
|
# LOCAL_CFLAGS += $(arm_cflags)
|
||||||
else
|
#else
|
||||||
LOCAL_SRC_FILES += $(non_arm_src_files)
|
# LOCAL_SRC_FILES += $(non_arm_src_files)
|
||||||
endif
|
#endif
|
||||||
LOCAL_MODULE_TAGS := optional
|
#LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE:= libcrypto
|
#LOCAL_MODULE:= libcrypto
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
#include $(BUILD_SHARED_LIBRARY)
|
||||||
|
#
|
||||||
#######################################
|
|
||||||
# host shared library
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
|
||||||
LOCAL_SRC_FILES += $(local_src_files)
|
|
||||||
LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
|
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
|
||||||
LOCAL_SRC_FILES += $(non_arm_src_files)
|
|
||||||
LOCAL_STATIC_LIBRARIES += libz
|
|
||||||
LOCAL_LDLIBS += -ldl
|
|
||||||
LOCAL_MODULE_TAGS := optional
|
|
||||||
LOCAL_MODULE:= libcrypto
|
|
||||||
include $(BUILD_HOST_SHARED_LIBRARY)
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# host static library, which is used by some SDK tools.
|
## host shared library
|
||||||
|
#include $(CLEAR_VARS)
|
||||||
include $(CLEAR_VARS)
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
#LOCAL_SRC_FILES += $(local_src_files)
|
||||||
LOCAL_SRC_FILES += $(local_src_files)
|
#LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
|
||||||
LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
#LOCAL_SRC_FILES += $(non_arm_src_files)
|
||||||
LOCAL_SRC_FILES += $(non_arm_src_files)
|
#LOCAL_STATIC_LIBRARIES += libz
|
||||||
LOCAL_STATIC_LIBRARIES += libz
|
#LOCAL_LDLIBS += -ldl
|
||||||
LOCAL_LDLIBS += -ldl
|
#LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE_TAGS := optional
|
#LOCAL_MODULE:= libcrypto
|
||||||
LOCAL_MODULE:= libcrypto_static
|
#include $(BUILD_HOST_SHARED_LIBRARY)
|
||||||
include $(BUILD_HOST_STATIC_LIBRARY)
|
#
|
||||||
|
#########################################
|
||||||
|
## host static library, which is used by some SDK tools.
|
||||||
|
#
|
||||||
|
#include $(CLEAR_VARS)
|
||||||
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
|
#LOCAL_SRC_FILES += $(local_src_files)
|
||||||
|
#LOCAL_CFLAGS += $(local_c_flags) -DPURIFY
|
||||||
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
|
#LOCAL_SRC_FILES += $(non_arm_src_files)
|
||||||
|
#LOCAL_STATIC_LIBRARIES += libz
|
||||||
|
#LOCAL_LDLIBS += -ldl
|
||||||
|
#LOCAL_MODULE_TAGS := optional
|
||||||
|
#LOCAL_MODULE:= libcrypto_static
|
||||||
|
#include $(BUILD_HOST_STATIC_LIBRARY)
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
LOCAL_PATH:= $(call my-dir)
|
LOCAL_PATH:= $(call my-dir)
|
||||||
|
|
||||||
local_c_includes := \
|
local_c_includes := \
|
||||||
external/openssl \
|
$(LOCAL_PATH)/../ \
|
||||||
external/openssl/include \
|
$(LOCAL_PATH)/../ssl\
|
||||||
external/openssl/crypto
|
$(LOCAL_PATH)/../include \
|
||||||
|
$(LOCAL_PATH)/../crypto
|
||||||
|
|
||||||
local_src_files:= \
|
local_src_files:= \
|
||||||
s2_meth.c \
|
s2_meth.c \
|
||||||
@ -61,38 +62,38 @@ include $(BUILD_STATIC_LIBRARY)
|
|||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# target shared library
|
# target shared library
|
||||||
include $(CLEAR_VARS)
|
#include $(CLEAR_VARS)
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
|
#
|
||||||
ifneq ($(TARGET_ARCH),x86)
|
#ifneq ($(TARGET_ARCH),x86)
|
||||||
LOCAL_NDK_VERSION := 5
|
#LOCAL_NDK_VERSION := 5
|
||||||
LOCAL_SDK_VERSION := 9
|
#LOCAL_SDK_VERSION := 9
|
||||||
endif
|
#endif
|
||||||
LOCAL_SRC_FILES += $(local_src_files)
|
#LOCAL_SRC_FILES += $(local_src_files)
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
LOCAL_SHARED_LIBRARIES += libcrypto
|
#LOCAL_SHARED_LIBRARIES += libcrypto
|
||||||
LOCAL_MODULE_TAGS := optional
|
#LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE:= libssl
|
#LOCAL_MODULE:= libssl
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
#include $(BUILD_SHARED_LIBRARY)
|
||||||
|
#
|
||||||
#######################################
|
########################################
|
||||||
# host shared library
|
## host shared library
|
||||||
include $(CLEAR_VARS)
|
#include $(CLEAR_VARS)
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
LOCAL_SRC_FILES += $(local_src_files)
|
#LOCAL_SRC_FILES += $(local_src_files)
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
LOCAL_SHARED_LIBRARIES += libcrypto
|
#LOCAL_SHARED_LIBRARIES += libcrypto
|
||||||
LOCAL_MODULE_TAGS := optional
|
#LOCAL_MODULE_TAGS := optional
|
||||||
LOCAL_MODULE:= libssl
|
#LOCAL_MODULE:= libssl
|
||||||
include $(BUILD_HOST_SHARED_LIBRARY)
|
#include $(BUILD_HOST_SHARED_LIBRARY)
|
||||||
|
#
|
||||||
#######################################
|
########################################
|
||||||
# ssltest
|
## ssltest
|
||||||
include $(CLEAR_VARS)
|
#include $(CLEAR_VARS)
|
||||||
include $(LOCAL_PATH)/../android-config.mk
|
#include $(LOCAL_PATH)/../android-config.mk
|
||||||
LOCAL_SRC_FILES:= ssltest.c
|
#LOCAL_SRC_FILES:= ssltest.c
|
||||||
LOCAL_C_INCLUDES += $(local_c_includes)
|
#LOCAL_C_INCLUDES += $(local_c_includes)
|
||||||
LOCAL_SHARED_LIBRARIES := libssl libcrypto
|
#LOCAL_SHARED_LIBRARIES := libssl libcrypto
|
||||||
LOCAL_MODULE:= ssltest
|
#LOCAL_MODULE:= ssltest
|
||||||
LOCAL_MODULE_TAGS := optional
|
#LOCAL_MODULE_TAGS := optional
|
||||||
include $(BUILD_EXECUTABLE)
|
#include $(BUILD_EXECUTABLE)
|
||||||
|
@ -1,284 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "adb_method.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
#include <cutils/properties.h>
|
|
||||||
|
|
||||||
//#include "common.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define A_CNXN 0x4e584e43
|
|
||||||
#define A_OKAY 0x59414b4f
|
|
||||||
#define A_CLSE 0x45534c43
|
|
||||||
#define A_WRTE 0x45545257
|
|
||||||
|
|
||||||
|
|
||||||
#define DDMS_RAWIMAGE_VERSION 1
|
|
||||||
|
|
||||||
char connect_string[] = {
|
|
||||||
0x43, 0x4e, 0x58, 0x4e, 0x00, 0x00, 0x00, 0x01,
|
|
||||||
0x00, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
|
||||||
0x32, 0x02, 0x00, 0x00, 0xbc, 0xb1, 0xa7, 0xb1,
|
|
||||||
0x68, 0x6f, 0x73, 0x74, 0x3a, 0x3a, 0x00 };
|
|
||||||
|
|
||||||
char framebuffer_string[] = {
|
|
||||||
0x4f, 0x50, 0x45, 0x4e, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
|
|
||||||
0xbf, 0x04, 0x00, 0x00, 0xb0, 0xaf, 0xba, 0xb1,
|
|
||||||
0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66,
|
|
||||||
0x66, 0x65, 0x72, 0x3a, 0x00 };
|
|
||||||
|
|
||||||
char okay_string[24];
|
|
||||||
|
|
||||||
struct fbinfo *fb_info;
|
|
||||||
struct _message *message,*okay_message;
|
|
||||||
int sockfd;
|
|
||||||
|
|
||||||
ssize_t write_socket(int fd, const void *buf, size_t count)
|
|
||||||
{
|
|
||||||
// L("--Writing %d \n",count);
|
|
||||||
|
|
||||||
int n = write(fd,buf,count);
|
|
||||||
|
|
||||||
if (n < 0)
|
|
||||||
perror("ERROR writing to socket");
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void read_socket(int fd, void *buf, size_t count)
|
|
||||||
{
|
|
||||||
int n=0;
|
|
||||||
|
|
||||||
while (count>0)
|
|
||||||
{
|
|
||||||
n=read(fd,buf,count);
|
|
||||||
|
|
||||||
if (n < 0)
|
|
||||||
L("ERROR reading from socket\n");
|
|
||||||
|
|
||||||
|
|
||||||
count-=n;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void send_connect_string()
|
|
||||||
{
|
|
||||||
write_socket(sockfd,connect_string,sizeof(connect_string));
|
|
||||||
|
|
||||||
read_socket(sockfd,message,sizeof(struct _message));
|
|
||||||
|
|
||||||
if (message->command!=A_CNXN)
|
|
||||||
L("bad A_CNXN response\n");
|
|
||||||
|
|
||||||
//lets read, i don't want this
|
|
||||||
read_socket(sockfd,message,message->data_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
void send_framebuffer_string();
|
|
||||||
|
|
||||||
int initADB()
|
|
||||||
{
|
|
||||||
L("--Initializing adb access method--\n");
|
|
||||||
int portno;
|
|
||||||
struct sockaddr_in serv_addr;
|
|
||||||
struct hostent *server;
|
|
||||||
adbbuf=NULL;
|
|
||||||
|
|
||||||
property_set("service.adb.tcp.port", "5555");
|
|
||||||
system("setprop service.adb.tcp.port 5555");
|
|
||||||
system("adbd");
|
|
||||||
|
|
||||||
message=malloc(sizeof(struct _message));
|
|
||||||
okay_message=malloc(sizeof(struct _message));
|
|
||||||
|
|
||||||
|
|
||||||
// L("1\n");
|
|
||||||
|
|
||||||
portno = 5555;
|
|
||||||
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
|
||||||
if (sockfd < 0)
|
|
||||||
{
|
|
||||||
L("adb ERROR opening socket\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#ifdef ANDROID
|
|
||||||
server = gethostbyname("127.0.0.1");
|
|
||||||
#else
|
|
||||||
server = gethostbyname("192.168.10.6");
|
|
||||||
#endif
|
|
||||||
if (server == NULL) {
|
|
||||||
L("adb ERROR, no such host\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// L("2\n");
|
|
||||||
|
|
||||||
bzero((char *) &serv_addr, sizeof(serv_addr));
|
|
||||||
serv_addr.sin_family = AF_INET;
|
|
||||||
bcopy((char *)server->h_addr,
|
|
||||||
(char *)&serv_addr.sin_addr.s_addr,
|
|
||||||
server->h_length);
|
|
||||||
serv_addr.sin_port = htons(portno);
|
|
||||||
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
|
|
||||||
{
|
|
||||||
L("adb ERROR connecting\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// L("3\n");
|
|
||||||
send_connect_string();
|
|
||||||
// L("4\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void send_framebuffer_string()//returns the fb struct size from adb
|
|
||||||
{
|
|
||||||
int n;
|
|
||||||
char *buffer=NULL;
|
|
||||||
write_socket(sockfd,framebuffer_string,sizeof(framebuffer_string));
|
|
||||||
read_socket(sockfd,okay_message,sizeof(struct _message));
|
|
||||||
|
|
||||||
if (okay_message->command!=A_OKAY)
|
|
||||||
{
|
|
||||||
L("---\ncommand=%32X\narg0=%32X\narg1=%32X\ndata_len=%d\n---\n",message->command,message->arg0,message->arg1,message->data_length);
|
|
||||||
L("bad OKAY response on send_framebuffer_string\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
n=okay_message->arg0;
|
|
||||||
okay_message->arg0=okay_message->arg1;
|
|
||||||
okay_message->arg1=n;
|
|
||||||
|
|
||||||
|
|
||||||
// L("arg0=%08X\narg1=%08X\n",okay_message->arg0,okay_message->arg1);
|
|
||||||
//we now have our okay message
|
|
||||||
|
|
||||||
//lets receive fb info...
|
|
||||||
read_socket(sockfd,message,sizeof(struct _message));
|
|
||||||
|
|
||||||
|
|
||||||
if (message->command!=A_WRTE)
|
|
||||||
L("bad WRTE response\n");
|
|
||||||
|
|
||||||
// L("---\ncommand=%32X\narg0=%32X\narg1=%32X\ndata_len=%d\n---\n",message->command,message->arg0,message->arg1,message->data_length);
|
|
||||||
|
|
||||||
// if (message->data_length!=sizeof(struct _message))
|
|
||||||
// error("Size should match...");
|
|
||||||
|
|
||||||
buffer=(char*)malloc(sizeof(char)*message->data_length);
|
|
||||||
|
|
||||||
read_socket(sockfd,&displayInfo,sizeof(struct fbinfo));
|
|
||||||
|
|
||||||
// L("sizeof(struct fbinfo)=%d\n",sizeof(struct fbinfo));
|
|
||||||
|
|
||||||
// L("ADB framebuffer method:\nversion=%d\nbpp=%d\nsize=%d bytes\nwidth=%dpx\nheight=%dpx\nsize=%d\n",
|
|
||||||
// displayInfo.version,displayInfo.bpp,displayInfo.size,displayInfo.width,displayInfo.height,displayInfo.size);
|
|
||||||
|
|
||||||
// L("sizeof(struct _message)=%d\n",sizeof(struct _message));
|
|
||||||
write_socket(sockfd,okay_message,sizeof(struct _message));
|
|
||||||
if (adbbuf==NULL)
|
|
||||||
adbbuf=(unsigned int*)malloc(displayInfo.size);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateADBFrame()
|
|
||||||
{
|
|
||||||
int n=0;
|
|
||||||
int count=0;
|
|
||||||
|
|
||||||
send_framebuffer_string();
|
|
||||||
|
|
||||||
// L("1\n");
|
|
||||||
|
|
||||||
while (message->command!=A_CLSE)
|
|
||||||
{
|
|
||||||
read_socket(sockfd,message,sizeof(struct _message));
|
|
||||||
|
|
||||||
// L("---\ncommand=%32X\narg0=%32X\narg1=%32X\ndata_len=%d\n---\n",message->command,message->arg0,message->arg1,message->data_length);
|
|
||||||
|
|
||||||
if (message->command==A_CLSE)
|
|
||||||
break;
|
|
||||||
else if (message->command!=A_WRTE)
|
|
||||||
{
|
|
||||||
L("Weird command received... %08X\n",message->command);
|
|
||||||
L("---\ncommand=%32X\narg0=%32X\narg1=%32X\ndata_len=%d\n---\n",message->command,message->arg0,message->arg1,message->data_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char * s=(char*)adbbuf+count;
|
|
||||||
read_socket(sockfd,s,message->data_length);
|
|
||||||
count+=message->data_length;
|
|
||||||
|
|
||||||
// L("ahah %d %d\n",message->data_length,n);
|
|
||||||
|
|
||||||
n=write_socket(sockfd,okay_message,sizeof(struct _message));
|
|
||||||
if (n<0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// L("Exit updating...\n");
|
|
||||||
// L("Received %d bytes\n",count);
|
|
||||||
|
|
||||||
// if (resp!=A_OKAY)
|
|
||||||
// error("bad OKAY response");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ANDROID
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
connect_to_adb();
|
|
||||||
L("up\n");
|
|
||||||
update_frame();
|
|
||||||
L("up\n");
|
|
||||||
update_frame();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// int main(int argc, char *argv[])
|
|
||||||
// {
|
|
||||||
// message=(struct _message*)malloc(sizeof(struct _message));
|
|
||||||
// okay_message=(struct _message*)malloc(sizeof(struct _message));
|
|
||||||
//
|
|
||||||
// connect_to_adb();
|
|
||||||
//
|
|
||||||
// // adbbuf=calloc(fb_info->size,1);
|
|
||||||
//
|
|
||||||
// update_frame();
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// close(sockfd);
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ADB_CONNECT_METHOD
|
|
||||||
#define ADB_CONNECT_METHOD
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
// #include <cutils/properties.h>
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define A_CNXN 0x4e584e43
|
|
||||||
#define A_OKAY 0x59414b4f
|
|
||||||
#define A_CLSE 0x45534c43
|
|
||||||
#define A_WRTE 0x45545257
|
|
||||||
|
|
||||||
|
|
||||||
#define DDMS_RAWIMAGE_VERSION 1
|
|
||||||
|
|
||||||
struct _message {
|
|
||||||
unsigned int command; /* command identifier constant */
|
|
||||||
unsigned int arg0; /* first argument */
|
|
||||||
unsigned int arg1; /* second argument */
|
|
||||||
unsigned int data_length; /* length of payload (0 is allowed) */
|
|
||||||
unsigned int data_crc32; /* crc32 of data payload */
|
|
||||||
unsigned int magic; /* command ^ 0xffffffff */
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// void error(const char *msg);
|
|
||||||
// ssize_t write_socket(int fd, const void *buf, size_t count);
|
|
||||||
// ssize_t read_socket(int fd, void *buf, size_t count);
|
|
||||||
// void send_connect_string();
|
|
||||||
|
|
||||||
int initADB();
|
|
||||||
void updateADBFrame();
|
|
||||||
|
|
||||||
unsigned int *adbbuf;
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,97 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef COMMON_H
|
|
||||||
#define COMMON_H
|
|
||||||
|
|
||||||
//android log
|
|
||||||
#include <android/log.h>
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
/* libvncserver */
|
|
||||||
#include "rfb/rfb.h"
|
|
||||||
#include "libvncserver/scale.h"
|
|
||||||
#include "rfb/keysym.h"
|
|
||||||
#include "suinput.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/sysmacros.h> /* For makedev() */
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
#include <linux/input.h>
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#define SOCK_PATH "org.onaips.vnc.gui"
|
|
||||||
|
|
||||||
|
|
||||||
#include <cutils/log.h>
|
|
||||||
|
|
||||||
|
|
||||||
// #define L(...) do { __android_log_print(ANDROID_LOG_INFO,"VNCserver",__VA_ARGS__); } while (0)
|
|
||||||
|
|
||||||
// #define L(...) __android_log_print(ANDROID_LOG_INFO,"VNCserver",__VA_ARGS__);printf(__VA_ARGS__);
|
|
||||||
#define L(...) do{ __android_log_print(ANDROID_LOG_INFO,"VNCserver",__VA_ARGS__);printf(__VA_ARGS__); } while (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct fbinfo {
|
|
||||||
unsigned int version;
|
|
||||||
unsigned int bpp;
|
|
||||||
unsigned int size;
|
|
||||||
unsigned int width;
|
|
||||||
unsigned int height;
|
|
||||||
unsigned int red_offset;
|
|
||||||
unsigned int red_length;
|
|
||||||
unsigned int blue_offset;
|
|
||||||
unsigned int blue_length;
|
|
||||||
unsigned int green_offset;
|
|
||||||
unsigned int green_length;
|
|
||||||
unsigned int alpha_offset;
|
|
||||||
unsigned int alpha_length;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void rotate(int);
|
|
||||||
int getCurrentRotation();
|
|
||||||
int isIdle();
|
|
||||||
void setIdle(int i);
|
|
||||||
void close_app();
|
|
||||||
struct fbinfo displayInfo;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "displaybinder.h"
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#include <binder/IPCThreadState.h>
|
|
||||||
#include <binder/ProcessState.h>
|
|
||||||
#include <binder/IServiceManager.h>
|
|
||||||
|
|
||||||
#include <binder/IMemory.h>
|
|
||||||
#include <surfaceflinger/ISurfaceComposer.h>
|
|
||||||
#include <surfaceflinger/SurfaceComposerClient.h>
|
|
||||||
|
|
||||||
using namespace android;
|
|
||||||
|
|
||||||
ScreenshotClient *screenshotclient;
|
|
||||||
|
|
||||||
extern "C" int initGingerbreadMethod()
|
|
||||||
{
|
|
||||||
|
|
||||||
L("--Initializing gingerbread access method--\n");
|
|
||||||
|
|
||||||
screenshotclient=new ScreenshotClient();
|
|
||||||
int err=screenshotclient->update();
|
|
||||||
if (err != NO_ERROR) {
|
|
||||||
L("screen capture failed: %s\n", strerror(-err));
|
|
||||||
//mandar msg incompatible
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
PixelFormat f=screenshotclient->getFormat();
|
|
||||||
|
|
||||||
PixelFormatInfo pf;
|
|
||||||
getPixelFormatInfo(f,&pf);
|
|
||||||
|
|
||||||
|
|
||||||
displayInfo.bpp = pf.bitsPerPixel;
|
|
||||||
displayInfo.width = screenshotclient->getWidth();
|
|
||||||
displayInfo.height = screenshotclient->getHeight();;
|
|
||||||
displayInfo.size = pf.bitsPerPixel*displayInfo.width*displayInfo.height/CHAR_BIT;
|
|
||||||
displayInfo.red_offset = pf.l_red;
|
|
||||||
displayInfo.red_length = pf.h_red;
|
|
||||||
displayInfo.green_offset = pf.l_green;
|
|
||||||
displayInfo.green_length = pf.h_green-pf.h_red;
|
|
||||||
displayInfo.blue_offset = pf.l_blue;
|
|
||||||
displayInfo.blue_length = pf.h_blue-pf.h_green;
|
|
||||||
displayInfo.alpha_offset = pf.l_alpha;
|
|
||||||
displayInfo.alpha_length = pf.h_alpha-pf.h_blue;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void updateScreen()
|
|
||||||
{
|
|
||||||
screenshotclient->update();
|
|
||||||
gingerbuf=(unsigned int*)screenshotclient->getPixels();
|
|
||||||
}
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DISPLAY_BINDER
|
|
||||||
#define DISPLAY_BINDER
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int *gingerbuf;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define L(...) __android_log_print(ANDROID_LOG_INFO,"VNCserver",__VA_ARGS__);printf(__VA_ARGS__);
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
void updateScreen();
|
|
||||||
int initGingerbreadMethod();
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,136 +0,0 @@
|
|||||||
/*
|
|
||||||
droid VNC server - a vnc server for android
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
Other contributors:
|
|
||||||
Oleksandr Andrushchenko <andr2000@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "framebuffer_method.h"
|
|
||||||
#include "common.h"
|
|
||||||
#include "gui.h"
|
|
||||||
|
|
||||||
int fbfd = -1;
|
|
||||||
|
|
||||||
|
|
||||||
char framebuffer_device[256] = "/dev/graphics/fb0";
|
|
||||||
|
|
||||||
|
|
||||||
void setFramebufferDevice(char *s)
|
|
||||||
{
|
|
||||||
strcpy(framebuffer_device,s);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int initFramebuffer(void)
|
|
||||||
{
|
|
||||||
L("--Initializing framebuffer access method--\n");
|
|
||||||
|
|
||||||
fbmmap = MAP_FAILED;
|
|
||||||
|
|
||||||
if ((fbfd = open(framebuffer_device, O_RDWR)) == -1)
|
|
||||||
{
|
|
||||||
L("Cannot open fb device %s\n", framebuffer_device);
|
|
||||||
sendMsgToGui("~SHOW|Cannot open fb device, please try out other display grab method\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
update_fb_info();
|
|
||||||
|
|
||||||
|
|
||||||
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &fscrinfo) != 0)
|
|
||||||
{
|
|
||||||
L("ioctl error\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
L("line_lenght=%d xres=%d, yres=%d, xresv=%d, yresv=%d, xoffs=%d, yoffs=%d, bpp=%d\n",
|
|
||||||
(int)fscrinfo.line_length,(int)scrinfo.xres, (int)scrinfo.yres,
|
|
||||||
(int)scrinfo.xres_virtual, (int)scrinfo.yres_virtual,
|
|
||||||
(int)scrinfo.xoffset, (int)scrinfo.yoffset,
|
|
||||||
(int)scrinfo.bits_per_pixel);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
size_t size=scrinfo.yres_virtual;
|
|
||||||
if (size<scrinfo.yres*2)
|
|
||||||
{
|
|
||||||
L("Using Droid workaround\n");
|
|
||||||
size=scrinfo.yres*2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((scrinfo.bits_per_pixel==24))// && (fscrinfo.line_length/scrinfo.xres_virtual==CHAR_BIT*4))
|
|
||||||
{
|
|
||||||
scrinfo.bits_per_pixel=32;
|
|
||||||
|
|
||||||
L("24-bit XRGB display detected\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t fbSize = roundUpToPageSize(fscrinfo.line_length * size);
|
|
||||||
|
|
||||||
fbmmap = mmap(NULL, fbSize , PROT_READ|PROT_WRITE , MAP_SHARED , fbfd, 0);
|
|
||||||
|
|
||||||
if (fbmmap == MAP_FAILED)
|
|
||||||
{
|
|
||||||
L("mmap failed\n");
|
|
||||||
sendMsgToGui("~SHOW|Framebuffer mmap failed, please try out other display grab method\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
displayInfo.bpp = scrinfo.bits_per_pixel;
|
|
||||||
displayInfo.size = scrinfo.xres * scrinfo.yres * scrinfo.bits_per_pixel / CHAR_BIT;
|
|
||||||
displayInfo.width = scrinfo.xres;
|
|
||||||
displayInfo.height = scrinfo.yres;
|
|
||||||
displayInfo.red_offset = scrinfo.red.offset;
|
|
||||||
displayInfo.red_length = scrinfo.red.length;
|
|
||||||
displayInfo.green_offset = scrinfo.green.offset;
|
|
||||||
displayInfo.green_length = scrinfo.green.length;
|
|
||||||
displayInfo.blue_offset = scrinfo.blue.offset;
|
|
||||||
displayInfo.blue_length = scrinfo.blue.length;
|
|
||||||
displayInfo.alpha_offset = scrinfo.transp.offset;
|
|
||||||
displayInfo.alpha_length = scrinfo.transp.length;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cleanupFramebuffer(void)
|
|
||||||
{
|
|
||||||
if(fbfd != -1)
|
|
||||||
{
|
|
||||||
close(fbfd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void update_fb_info()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &scrinfo) != 0)
|
|
||||||
{
|
|
||||||
L("ioctl error\n");
|
|
||||||
sendMsgToGui("~SHOW|Framebuffer ioctl error, please try out other display grab method\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline int roundUpToPageSize(int x) {
|
|
||||||
return (x + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1);
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
droid VNC server - a vnc server for android
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ADB_FRAMEBUFFER_METHOD
|
|
||||||
#define ADB_FRAMEBUFFER_METHOD
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
unsigned int *fbmmap;
|
|
||||||
|
|
||||||
struct fb_var_screeninfo scrinfo;
|
|
||||||
struct fb_fix_screeninfo fscrinfo;
|
|
||||||
|
|
||||||
int initFramebuffer(void);
|
|
||||||
void cleanupFramebuffer(void);
|
|
||||||
void update_fb_info();
|
|
||||||
int roundUpToPageSize(int x);
|
|
||||||
void setFramebufferDevice(char *);
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,245 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "gralloc_method.h"
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <linux/fb.h>
|
|
||||||
#include <hardware/hardware.h>
|
|
||||||
#include <hardware/gralloc.h>
|
|
||||||
#include <cutils/log.h>
|
|
||||||
|
|
||||||
#define r(fd, ptr, size) (read((fd), (ptr), (size)) != (int)(size))
|
|
||||||
#define w(fd, ptr, size) (write((fd), (ptr), (size)) != (int)(size))
|
|
||||||
|
|
||||||
|
|
||||||
static int fill_format(struct fbinfo* info, int format)
|
|
||||||
{
|
|
||||||
// bpp, red, green, blue, alpha
|
|
||||||
|
|
||||||
static const int format_map[][9] = {
|
|
||||||
{0, 0, 0, 0, 0, 0, 0, 0, 0}, // INVALID
|
|
||||||
{32, 0, 8, 8, 8, 16, 8, 24, 8}, // HAL_PIXEL_FORMAT_RGBA_8888
|
|
||||||
{32, 0, 8, 8, 8, 16, 8, 0, 0}, // HAL_PIXEL_FORMAT_RGBX_8888
|
|
||||||
{24, 16, 8, 8, 8, 0, 8, 0, 0}, // HAL_PIXEL_FORMAT_RGB_888
|
|
||||||
{16, 11, 5, 5, 6, 0, 5, 0, 0}, // HAL_PIXEL_FORMAT_RGB_565
|
|
||||||
{32, 16, 8, 8, 8, 0, 8, 24, 8}, // HAL_PIXEL_FORMAT_BGRA_8888
|
|
||||||
{16, 11, 5, 6, 5, 1, 5, 0, 1}, // HAL_PIXEL_FORMAT_RGBA_5551
|
|
||||||
{16, 12, 4, 8, 4, 4, 4, 0, 4} // HAL_PIXEL_FORMAT_RGBA_4444
|
|
||||||
};
|
|
||||||
const int *p;
|
|
||||||
|
|
||||||
if (format == 0 || format > HAL_PIXEL_FORMAT_RGBA_4444)
|
|
||||||
return -ENOTSUP;
|
|
||||||
|
|
||||||
p = format_map[format];
|
|
||||||
|
|
||||||
info->bpp = *(p++);
|
|
||||||
info->red_offset = *(p++);
|
|
||||||
info->red_length = *(p++);
|
|
||||||
info->green_offset = *(p++);
|
|
||||||
info->green_length = *(p++);
|
|
||||||
info->blue_offset = *(p++);
|
|
||||||
info->blue_length = *(p++);
|
|
||||||
info->alpha_offset = *(p++);
|
|
||||||
info->alpha_length = *(p++);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
static int readfb_devfb (int fd)
|
|
||||||
{
|
|
||||||
struct fb_var_screeninfo vinfo;
|
|
||||||
int fb, offset;
|
|
||||||
char x[256];
|
|
||||||
int rv = -ENOTSUP;
|
|
||||||
|
|
||||||
struct fbinfo fbinfo;
|
|
||||||
unsigned i, bytespp;
|
|
||||||
|
|
||||||
fb = open("/dev/graphics/fb0", O_RDONLY);
|
|
||||||
if (fb < 0) goto done;
|
|
||||||
|
|
||||||
if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) < 0) goto done;
|
|
||||||
fcntl(fb, F_SETFD, FD_CLOEXEC);
|
|
||||||
|
|
||||||
bytespp = vinfo.bits_per_pixel / 8;
|
|
||||||
|
|
||||||
fbinfo.bpp = vinfo.bits_per_pixel;
|
|
||||||
fbinfo.size = vinfo.xres * vinfo.yres * bytespp;
|
|
||||||
fbinfo.width = vinfo.xres;
|
|
||||||
fbinfo.height = vinfo.yres;
|
|
||||||
fbinfo.red_offset = vinfo.red.offset;
|
|
||||||
fbinfo.red_length = vinfo.red.length;
|
|
||||||
fbinfo.green_offset = vinfo.green.offset;
|
|
||||||
fbinfo.green_length = vinfo.green.length;
|
|
||||||
fbinfo.blue_offset = vinfo.blue.offset;
|
|
||||||
fbinfo.blue_length = vinfo.blue.length;
|
|
||||||
fbinfo.alpha_offset = vinfo.transp.offset;
|
|
||||||
fbinfo.alpha_length = vinfo.transp.length;
|
|
||||||
|
|
||||||
/* HACK: for several of our 3d cores a specific alignment
|
|
||||||
* is required so the start of the fb may not be an integer number of lines
|
|
||||||
* from the base. As a result we are storing the additional offset in
|
|
||||||
* xoffset. This is not the correct usage for xoffset, it should be added
|
|
||||||
* to each line, not just once at the beginning */
|
|
||||||
offset = vinfo.xoffset * bytespp;
|
|
||||||
|
|
||||||
offset += vinfo.xres * vinfo.yoffset * bytespp;
|
|
||||||
|
|
||||||
rv = 0;
|
|
||||||
|
|
||||||
if (w(fd, &fbinfo, sizeof(fbinfo))) goto done;
|
|
||||||
|
|
||||||
lseek(fb, offset, SEEK_SET);
|
|
||||||
for (i = 0; i < fbinfo.size; i += 256) {
|
|
||||||
if (r(fb, &x, 256)) goto done;
|
|
||||||
if (w(fd, &x, 256)) goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r(fb, &x, fbinfo.size % 256)) goto done;
|
|
||||||
if (w(fd, &x, fbinfo.size % 256)) goto done;
|
|
||||||
|
|
||||||
done:
|
|
||||||
if (fb >= 0) close(fb);
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct gralloc_module_t *gralloc;
|
|
||||||
struct framebuffer_device_t *fbdev = 0;
|
|
||||||
struct alloc_device_t *allocdev = 0;
|
|
||||||
buffer_handle_t buf = 0;
|
|
||||||
unsigned char* data = 0;
|
|
||||||
int stride;
|
|
||||||
|
|
||||||
#define CHECK_RV if (rv != 0){close_gralloc();return -1;}
|
|
||||||
|
|
||||||
int init_gralloc()
|
|
||||||
{
|
|
||||||
L("--Initializing gralloc access method--\n");
|
|
||||||
grallocfb=0;
|
|
||||||
|
|
||||||
int linebytes;
|
|
||||||
int rv;
|
|
||||||
|
|
||||||
rv = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t**)&gralloc);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
rv = framebuffer_open(&gralloc->common, &fbdev);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
if (!fbdev->read) {
|
|
||||||
rv = -ENOTSUP;
|
|
||||||
close_gralloc();
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = gralloc_open(&gralloc->common, &allocdev);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
rv = allocdev->alloc(allocdev, fbdev->width, fbdev->height,
|
|
||||||
fbdev->format, GRALLOC_USAGE_SW_READ_OFTEN,
|
|
||||||
&buf, &stride);
|
|
||||||
|
|
||||||
|
|
||||||
rv = fbdev->read(fbdev, buf);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
rv = gralloc->lock(gralloc, buf, GRALLOC_USAGE_SW_READ_OFTEN, 0, 0,
|
|
||||||
fbdev->width, fbdev->height, (void**)&data);
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
rv = fill_format(&displayInfo, fbdev->format);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
stride *= (displayInfo.bpp >> 3);
|
|
||||||
linebytes = fbdev->width * (displayInfo.bpp >> 3);
|
|
||||||
displayInfo.size = linebytes * fbdev->height;
|
|
||||||
displayInfo.width = fbdev->width;
|
|
||||||
displayInfo.height = fbdev->height;
|
|
||||||
|
|
||||||
// point of no return: don't attempt alternative means of reading
|
|
||||||
// after this
|
|
||||||
rv = 0;
|
|
||||||
|
|
||||||
grallocfb=malloc(displayInfo.size);
|
|
||||||
|
|
||||||
L("Stride=%d Linebytes=%d %p\n",stride,linebytes,fbdev->setUpdateRect);
|
|
||||||
|
|
||||||
memcpy(grallocfb,data,displayInfo.size);
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
gralloc->unlock(gralloc, buf);
|
|
||||||
|
|
||||||
L("Copy %d bytes\n",displayInfo.size);
|
|
||||||
|
|
||||||
L("Returning rv=%d\n",rv);
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void close_gralloc()
|
|
||||||
{
|
|
||||||
if (buf)
|
|
||||||
allocdev->free(allocdev, buf);
|
|
||||||
if (allocdev)
|
|
||||||
gralloc_close(allocdev);
|
|
||||||
if (fbdev)
|
|
||||||
framebuffer_close(fbdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int readfb_gralloc ()
|
|
||||||
{
|
|
||||||
int rv;
|
|
||||||
|
|
||||||
|
|
||||||
rv = fbdev->read(fbdev, buf);
|
|
||||||
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
rv = gralloc->lock(gralloc, buf, GRALLOC_USAGE_SW_READ_OFTEN, 0, 0,
|
|
||||||
fbdev->width, fbdev->height, (void**)&data);
|
|
||||||
CHECK_RV;
|
|
||||||
|
|
||||||
memcpy(grallocfb,data,displayInfo.size);
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
gralloc->unlock(gralloc, buf);
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GRALLOC_H
|
|
||||||
#define GRALLOC_H
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int *grallocfb;
|
|
||||||
|
|
||||||
int init_gralloc();
|
|
||||||
int readfb_gralloc();
|
|
||||||
void close_gralloc();
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
325
jni/vnc/input.c
325
jni/vnc/input.c
@ -1,325 +0,0 @@
|
|||||||
/*
|
|
||||||
droid VNC server - a vnc server for android
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "input.h"
|
|
||||||
|
|
||||||
int inputfd = -1;
|
|
||||||
// keyboard code modified from remote input by http://www.math.bme.hu/~morap/RemoteInput/
|
|
||||||
|
|
||||||
// q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m
|
|
||||||
int qwerty[] = {30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44};
|
|
||||||
// ,!,",#,$,%,&,',(,),*,+,,,-,.,/
|
|
||||||
int spec1[] = {57,2,40,4,5,6,8,40,10,11,9,13,51,12,52,52};
|
|
||||||
int spec1sh[] = {0,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1};
|
|
||||||
// :,;,<,=,>,?,@
|
|
||||||
int spec2[] = {39,39,227,13,228,53,215};
|
|
||||||
int spec2sh[] = {1,0,1,1,1,1,0};
|
|
||||||
// [,\,],^,_,`
|
|
||||||
int spec3[] = {26,43,27,7,12,399};
|
|
||||||
int spec3sh[] = {0,0,0,1,1,0};
|
|
||||||
// {,|,},~
|
|
||||||
int spec4[] = {26,43,27,215,14};
|
|
||||||
int spec4sh[] = {1,1,1,1,0};
|
|
||||||
|
|
||||||
|
|
||||||
void initInput()
|
|
||||||
{
|
|
||||||
L("---Initializing uinput...---\n");
|
|
||||||
struct input_id id = {
|
|
||||||
BUS_VIRTUAL, /* Bus type. */
|
|
||||||
1, /* Vendor id. */
|
|
||||||
1, /* Product id. */
|
|
||||||
1 /* Version id. */
|
|
||||||
};
|
|
||||||
|
|
||||||
if((inputfd = suinput_open("qwerty", &id)) == -1)
|
|
||||||
{
|
|
||||||
L("cannot create virtual kbd device.\n");
|
|
||||||
sendMsgToGui("~SHOW|Cannot create virtual input device!\n");
|
|
||||||
// exit(EXIT_FAILURE); do not exit, so we still can see the framebuffer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int keysym2scancode(rfbBool down, rfbKeySym c, rfbClientPtr cl, int *sh, int *alt)
|
|
||||||
{
|
|
||||||
int real=1;
|
|
||||||
if ('a' <= c && c <= 'z')
|
|
||||||
return qwerty[c-'a'];
|
|
||||||
if ('A' <= c && c <= 'Z')
|
|
||||||
{
|
|
||||||
(*sh)=1;
|
|
||||||
return qwerty[c-'A'];
|
|
||||||
}
|
|
||||||
if ('1' <= c && c <= '9')
|
|
||||||
return c-'1'+2;
|
|
||||||
if (c == '0')
|
|
||||||
return 11;
|
|
||||||
if (32 <= c && c <= 47)
|
|
||||||
{
|
|
||||||
(*sh) = spec1sh[c-32];
|
|
||||||
return spec1[c-32];
|
|
||||||
}
|
|
||||||
if (58 <= c && c <= 64)
|
|
||||||
{
|
|
||||||
(*sh) = spec2sh[c-58];
|
|
||||||
return spec2[c-58];
|
|
||||||
}
|
|
||||||
if (91 <= c && c <= 96)
|
|
||||||
{
|
|
||||||
(*sh) = spec3sh[c-91];
|
|
||||||
return spec3[c-91];
|
|
||||||
}
|
|
||||||
if (123 <= c && c <= 127)
|
|
||||||
{
|
|
||||||
(*sh) = spec4sh[c-123];
|
|
||||||
return spec4[c-123];
|
|
||||||
}
|
|
||||||
switch(c)
|
|
||||||
{
|
|
||||||
case 0xff08: return 14;// backspace
|
|
||||||
case 0xff09: return 15;// tab
|
|
||||||
case 1: (*alt)=1; return 34;// ctrl+a
|
|
||||||
case 3: (*alt)=1; return 46;// ctrl+c
|
|
||||||
case 4: (*alt)=1; return 32;// ctrl+d
|
|
||||||
case 18: (*alt)=1; return 31;// ctrl+r
|
|
||||||
case 0xff0D: return 28;// enter
|
|
||||||
case 0xff1B: return 158;// esc -> back
|
|
||||||
case 0xFF51: return 105;// left -> DPAD_LEFT
|
|
||||||
case 0xFF53: return 106;// right -> DPAD_RIGHT
|
|
||||||
case 0xFF54: return 108;// down -> DPAD_DOWN
|
|
||||||
case 0xFF52: return 103;// up -> DPAD_UP
|
|
||||||
// case 360: return 232;// end -> DPAD_CENTER (ball click)
|
|
||||||
case 0xff50: return KEY_HOME;// home
|
|
||||||
case 0xFFC8: rfbShutdownServer(cl->screen,TRUE); return 0; //F11 disconnect
|
|
||||||
case 0xFFC9:
|
|
||||||
L("F12 closing...");
|
|
||||||
exit(0); //F10 closes daemon
|
|
||||||
break;
|
|
||||||
case 0xffc1: down?rotate(-1):0; return 0; // F4 rotate
|
|
||||||
case 0xffff: return 158;// del -> back
|
|
||||||
case 0xff55: return 229;// PgUp -> menu
|
|
||||||
case 0xffcf: return 127;// F2 -> search
|
|
||||||
case 0xffe3: return 127;// left ctrl -> search
|
|
||||||
case 0xff56: return 61;// PgUp -> call
|
|
||||||
case 0xff57: return 107;// End -> endcall
|
|
||||||
case 0xffc2: return 211;// F5 -> focus
|
|
||||||
case 0xffc3: return 212;// F6 -> camera
|
|
||||||
case 0xffc4: return 150;// F7 -> explorer
|
|
||||||
case 0xffc5: return 155;// F8 -> envelope
|
|
||||||
|
|
||||||
case 50081:
|
|
||||||
case 225: (*alt)=1;
|
|
||||||
if (real) return 48; //a with acute
|
|
||||||
return 30; //a with acute -> a with ring above
|
|
||||||
case 50049:
|
|
||||||
case 193:(*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 48; //A with acute
|
|
||||||
return 30; //A with acute -> a with ring above
|
|
||||||
case 50089:
|
|
||||||
case 233: (*alt)=1; return 18; //e with acute
|
|
||||||
case 50057:
|
|
||||||
case 201:(*sh)=1; (*alt)=1; return 18; //E with acute
|
|
||||||
case 50093:
|
|
||||||
case 0xffbf: (*alt)=1;
|
|
||||||
if (real) return 36; //i with acute
|
|
||||||
return 23; //i with acute -> i with grave
|
|
||||||
case 50061:
|
|
||||||
case 205: (*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 36; //I with acute
|
|
||||||
return 23; //I with acute -> i with grave
|
|
||||||
case 50099:
|
|
||||||
case 243:(*alt)=1;
|
|
||||||
if (real) return 16; //o with acute
|
|
||||||
return 24; //o with acute -> o with grave
|
|
||||||
case 50067:
|
|
||||||
case 211:(*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 16; //O with acute
|
|
||||||
return 24; //O with acute -> o with grave
|
|
||||||
case 50102:
|
|
||||||
case 246: (*alt)=1; return 25; //o with diaeresis
|
|
||||||
case 50070:
|
|
||||||
case 214: (*sh)=1; (*alt)=1; return 25; //O with diaeresis
|
|
||||||
case 50577:
|
|
||||||
case 245:(*alt)=1;
|
|
||||||
if (real) return 19; //Hungarian o
|
|
||||||
return 25; //Hungarian o -> o with diaeresis
|
|
||||||
case 50576:
|
|
||||||
case 213: (*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 19; //Hungarian O
|
|
||||||
return 25; //Hungarian O -> O with diaeresis
|
|
||||||
case 50106:
|
|
||||||
// case 0xffbe: (*alt)=1;
|
|
||||||
// if (real) return 17; //u with acute
|
|
||||||
// return 22; //u with acute -> u with grave
|
|
||||||
case 50074:
|
|
||||||
case 218: (*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 17; //U with acute
|
|
||||||
return 22; //U with acute -> u with grave
|
|
||||||
case 50108:
|
|
||||||
case 252: (*alt)=1; return 47; //u with diaeresis
|
|
||||||
case 50076:
|
|
||||||
case 220:(*sh)=1; (*alt)=1; return 47; //U with diaeresis
|
|
||||||
case 50609:
|
|
||||||
case 251: (*alt)=1;
|
|
||||||
if (real) return 45; //Hungarian u
|
|
||||||
return 47; //Hungarian u -> u with diaeresis
|
|
||||||
case 50608:
|
|
||||||
case 219: (*sh)=1; (*alt)=1;
|
|
||||||
if (real) return 45; //Hungarian U
|
|
||||||
return 47; //Hungarian U -> U with diaeresis
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void keyEvent(rfbBool down, rfbKeySym key, rfbClientPtr cl)
|
|
||||||
{
|
|
||||||
int code;
|
|
||||||
// L("Got keysym: %04x (down=%d)\n", (unsigned int)key, (int)down);
|
|
||||||
|
|
||||||
setIdle(0);
|
|
||||||
int sh = 0;
|
|
||||||
int alt = 0;
|
|
||||||
|
|
||||||
if ((code = keysym2scancode(down, key, cl,&sh,&alt)))
|
|
||||||
{
|
|
||||||
|
|
||||||
int ret=0;
|
|
||||||
|
|
||||||
if (key && down)
|
|
||||||
{
|
|
||||||
if (sh) suinput_press(inputfd, 42); //left shift
|
|
||||||
if (alt) suinput_press(inputfd, 56); //left alt
|
|
||||||
|
|
||||||
ret=suinput_press(inputfd,code);
|
|
||||||
ret=suinput_release(inputfd,code);
|
|
||||||
|
|
||||||
if (alt) suinput_release(inputfd, 56); //left alt
|
|
||||||
if (sh) suinput_release(inputfd, 42); //left shift
|
|
||||||
}
|
|
||||||
else
|
|
||||||
;//ret=suinput_release(inputfd,code);
|
|
||||||
|
|
||||||
// L("injectKey (%d, %d) ret=%d\n", code , down,ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ptrEvent(int buttonMask, int x, int y, rfbClientPtr cl)
|
|
||||||
{
|
|
||||||
|
|
||||||
static int leftClicked=0,rightClicked=0,middleClicked=0;
|
|
||||||
setIdle(0);
|
|
||||||
transformTouchCoordinates(&x,&y,cl->screen->width,cl->screen->height);
|
|
||||||
|
|
||||||
if((buttonMask & 1)&& leftClicked) {//left btn clicked and moving
|
|
||||||
static int i=0;
|
|
||||||
i=i+1;
|
|
||||||
|
|
||||||
if (i%10==1)//some tweak to not report every move event
|
|
||||||
{
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_X, x);
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_Y, y);
|
|
||||||
suinput_write(inputfd, EV_SYN, SYN_REPORT, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (buttonMask & 1)//left btn clicked
|
|
||||||
{
|
|
||||||
leftClicked=1;
|
|
||||||
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_X, x);
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_Y, y);
|
|
||||||
suinput_write(inputfd,EV_KEY,BTN_TOUCH,1);
|
|
||||||
suinput_write(inputfd, EV_SYN, SYN_REPORT, 0);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (leftClicked)//left btn released
|
|
||||||
{
|
|
||||||
leftClicked=0;
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_X, x);
|
|
||||||
suinput_write(inputfd, EV_ABS, ABS_Y, y);
|
|
||||||
suinput_write(inputfd,EV_KEY,BTN_TOUCH,0);
|
|
||||||
suinput_write(inputfd, EV_SYN, SYN_REPORT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buttonMask & 4)//right btn clicked
|
|
||||||
{
|
|
||||||
rightClicked=1;
|
|
||||||
suinput_press(inputfd,158); //back key
|
|
||||||
}
|
|
||||||
else if (rightClicked)//right button released
|
|
||||||
{
|
|
||||||
rightClicked=0;
|
|
||||||
suinput_release(inputfd,158);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buttonMask & 2)//mid btn clicked
|
|
||||||
{
|
|
||||||
middleClicked=1;
|
|
||||||
suinput_press( inputfd,KEY_END);
|
|
||||||
}
|
|
||||||
else if (middleClicked)// mid btn released
|
|
||||||
{
|
|
||||||
middleClicked=0;
|
|
||||||
suinput_release( inputfd,KEY_END);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline void transformTouchCoordinates(int *x, int *y,int width,int height)
|
|
||||||
{
|
|
||||||
int scale=4096.0;
|
|
||||||
int old_x=*x,old_y=*y;
|
|
||||||
int rotation=getCurrentRotation();
|
|
||||||
|
|
||||||
if (rotation==0)
|
|
||||||
{
|
|
||||||
*x = old_x*scale/width-scale/2.0;
|
|
||||||
*y = old_y*scale/height-scale/2.0;
|
|
||||||
}
|
|
||||||
else if (rotation==90)
|
|
||||||
{
|
|
||||||
*x =old_y*scale/height-scale/2.0;
|
|
||||||
*y = (width - old_x)*scale/width-scale/2.0;
|
|
||||||
}
|
|
||||||
else if (rotation==180)
|
|
||||||
{
|
|
||||||
*x =(width - old_x)*scale/width-scale/2.0;
|
|
||||||
*y =(height - old_y)*scale/height-scale/2.0;
|
|
||||||
}
|
|
||||||
else if (rotation==270)
|
|
||||||
{
|
|
||||||
*y =old_x*scale/width-scale/2.0;
|
|
||||||
*x =(height - old_y)*scale/height-scale/2.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void cleanupInput()
|
|
||||||
{
|
|
||||||
if(inputfd != -1)
|
|
||||||
{
|
|
||||||
suinput_close(inputfd);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
droid VNC server - a vnc server for android
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef KEYMANIP_H
|
|
||||||
#define KEYMANIP_H
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "gui.h"
|
|
||||||
#define BUS_VIRTUAL 0x06
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void initInput();
|
|
||||||
int keysym2scancode(rfbBool down, rfbKeySym c, rfbClientPtr cl, int *sh, int *alt);
|
|
||||||
void transformTouchCoordinates(int *x, int *y,int,int);
|
|
||||||
void ptrEvent(int buttonMask, int x, int y, rfbClientPtr cl);
|
|
||||||
void keyEvent(rfbBool down, rfbKeySym key, rfbClientPtr cl);
|
|
||||||
void cleanupInput();
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
#include "displaybinder.h"
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#include <binder/IPCThreadState.h>
|
|
||||||
#include <binder/ProcessState.h>
|
|
||||||
#include <binder/IServiceManager.h>
|
|
||||||
|
|
||||||
#include <binder/IMemory.h>
|
|
||||||
#include <surfaceflinger/ISurfaceComposer.h>
|
|
||||||
#include <surfaceflinger/SurfaceComposerClient.h>
|
|
||||||
|
|
||||||
using namespace android;
|
|
||||||
|
|
||||||
ScreenshotClient *screenshotclient;
|
|
||||||
|
|
||||||
extern "C" int initGingerbreadMethod()
|
|
||||||
{
|
|
||||||
|
|
||||||
L("--Initializing gingerbread access method--\n");
|
|
||||||
|
|
||||||
screenshotclient=new ScreenshotClient();
|
|
||||||
int err=screenshotclient->update();
|
|
||||||
if (err != NO_ERROR) {
|
|
||||||
L("screen capture failed: %s\n", strerror(-err));
|
|
||||||
//mandar msg incompatible
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
PixelFormat f=screenshotclient->getFormat();
|
|
||||||
|
|
||||||
PixelFormatInfo pf;
|
|
||||||
getPixelFormatInfo(f,&pf);
|
|
||||||
|
|
||||||
|
|
||||||
displayInfo.bpp = pf.bitsPerPixel;
|
|
||||||
displayInfo.width = screenshotclient->getWidth();
|
|
||||||
displayInfo.height = screenshotclient->getHeight();;
|
|
||||||
displayInfo.size = pf.bitsPerPixel*displayInfo.width*displayInfo.height/CHAR_BIT;
|
|
||||||
displayInfo.red_offset = pf.l_red;
|
|
||||||
displayInfo.red_length = pf.h_red;
|
|
||||||
displayInfo.green_offset = pf.l_green;
|
|
||||||
displayInfo.green_length = pf.h_green-pf.h_red;
|
|
||||||
displayInfo.blue_offset = pf.l_blue;
|
|
||||||
displayInfo.blue_length = pf.h_blue-pf.h_green;
|
|
||||||
displayInfo.alpha_offset = pf.l_alpha;
|
|
||||||
displayInfo.alpha_length = pf.h_alpha-pf.h_blue;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void updateScreen()
|
|
||||||
{
|
|
||||||
screenshotclient->update();
|
|
||||||
gingerbuf=(unsigned int*)screenshotclient->getPixels();
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
droid vnc server - Android VNC server
|
|
||||||
Copyright (C) 2009 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int *flingerbuf;
|
|
@ -1,225 +0,0 @@
|
|||||||
/*
|
|
||||||
suinput - Simple C-API to the Linux uinput-system.
|
|
||||||
Copyright (C) 2009 Tuomas Räsänen <tuos@codegrove.org>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <linux/uinput.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "suinput.h"
|
|
||||||
|
|
||||||
char* UINPUT_FILEPATHS[] = {
|
|
||||||
"/android/dev/uinput",
|
|
||||||
"/dev/uinput",
|
|
||||||
"/dev/input/uinput",
|
|
||||||
"/dev/misc/uinput",
|
|
||||||
};
|
|
||||||
#define UINPUT_FILEPATHS_COUNT (sizeof(UINPUT_FILEPATHS) / sizeof(char*))
|
|
||||||
|
|
||||||
int suinput_write(int uinput_fd,
|
|
||||||
uint16_t type, uint16_t code, int32_t value)
|
|
||||||
{
|
|
||||||
struct input_event event;
|
|
||||||
memset(&event, 0, sizeof(event));
|
|
||||||
gettimeofday(&event.time, 0); /* This should not be able to fail ever.. */
|
|
||||||
event.type = type;
|
|
||||||
event.code = code;
|
|
||||||
event.value = value;
|
|
||||||
if (write(uinput_fd, &event, sizeof(event)) != sizeof(event))
|
|
||||||
return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_write_syn(int uinput_fd,
|
|
||||||
uint16_t type, uint16_t code, int32_t value)
|
|
||||||
{
|
|
||||||
if (suinput_write(uinput_fd, type, code, value))
|
|
||||||
return -1;
|
|
||||||
return suinput_write(uinput_fd, EV_SYN, SYN_REPORT, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_open(const char* device_name, const struct input_id* id)
|
|
||||||
{
|
|
||||||
int original_errno = 0;
|
|
||||||
int uinput_fd = -1;
|
|
||||||
struct uinput_user_dev user_dev;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < UINPUT_FILEPATHS_COUNT; ++i) {
|
|
||||||
uinput_fd = open(UINPUT_FILEPATHS[i], O_WRONLY | O_NONBLOCK);
|
|
||||||
if (uinput_fd != -1)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uinput_fd == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Set device to handle following types of events: */
|
|
||||||
|
|
||||||
/* Key and button events */
|
|
||||||
if (ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY) == -1)
|
|
||||||
goto err;
|
|
||||||
//
|
|
||||||
// /* Key and button repetition events */
|
|
||||||
if (ioctl(uinput_fd, UI_SET_EVBIT, EV_REP) == -1)
|
|
||||||
goto err;
|
|
||||||
//
|
|
||||||
// /* Relative pointer motions */
|
|
||||||
// if (ioctl(uinput_fd, UI_SET_EVBIT, EV_REL) == -1)
|
|
||||||
// goto err;
|
|
||||||
|
|
||||||
/* Absolute pointer motions */
|
|
||||||
|
|
||||||
if (ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS) == -1)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/* Synchronization events, this is probably set implicitely too. */
|
|
||||||
if (ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN) == -1)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Configure device to handle relative x and y axis. */
|
|
||||||
// if (ioctl(uinput_fd, UI_SET_RELBIT, REL_X) == -1)
|
|
||||||
// goto err;
|
|
||||||
// if (ioctl(uinput_fd, UI_SET_RELBIT, REL_Y) == -1)
|
|
||||||
// goto err;
|
|
||||||
|
|
||||||
/* Configure device to handle absolute x and y axis. */
|
|
||||||
if (ioctl(uinput_fd, UI_SET_ABSBIT, ABS_X) == -1)
|
|
||||||
goto err;
|
|
||||||
if (ioctl(uinput_fd, UI_SET_ABSBIT, ABS_Y) == -1)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Configure device to handle all keys, see linux/input.h. */
|
|
||||||
for (i = 0; i < KEY_MAX; i++) {
|
|
||||||
if (ioctl(uinput_fd, UI_SET_KEYBIT, i) == -1)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set device-specific information. */
|
|
||||||
memset(&user_dev, 0, sizeof(user_dev));
|
|
||||||
strncpy(user_dev.name, device_name, UINPUT_MAX_NAME_SIZE);
|
|
||||||
user_dev.id.bustype = id->bustype;
|
|
||||||
user_dev.id.vendor = id->vendor;
|
|
||||||
user_dev.id.product = id->product;
|
|
||||||
user_dev.id.version = id->version;
|
|
||||||
|
|
||||||
//minor tweak to support ABSolute events
|
|
||||||
user_dev.absmin[ABS_X] = -2047;
|
|
||||||
user_dev.absmax[ABS_X] = 2048;
|
|
||||||
user_dev.absfuzz[ABS_X] = 0;
|
|
||||||
user_dev.absflat[ABS_X] = 0;
|
|
||||||
|
|
||||||
user_dev.absmin[ABS_Y] = -2047;
|
|
||||||
user_dev.absmax[ABS_Y] = 2048;
|
|
||||||
user_dev.absfuzz[ABS_Y] = 0;
|
|
||||||
user_dev.absflat[ABS_Y] = 0;
|
|
||||||
|
|
||||||
if (write(uinput_fd, &user_dev, sizeof(user_dev)) != sizeof(user_dev))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
|
|
||||||
if (ioctl(uinput_fd, UI_DEV_CREATE) == -1)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/*
|
|
||||||
The reason for generating a small delay is that creating succesfully
|
|
||||||
an uinput device does not guarantee that the device is ready to process
|
|
||||||
input events. It's probably due the asynchronous nature of the udev.
|
|
||||||
However, my experiments show that the device is not ready to process input
|
|
||||||
events even after a device creation event is received from udev.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//sleep(2);
|
|
||||||
|
|
||||||
return uinput_fd;
|
|
||||||
|
|
||||||
err:
|
|
||||||
|
|
||||||
/*
|
|
||||||
At this point, errno is set for some reason. However, cleanup-actions
|
|
||||||
can also fail and reset errno, therefore we store the original one
|
|
||||||
and reset it before returning.
|
|
||||||
*/
|
|
||||||
original_errno = errno;
|
|
||||||
|
|
||||||
/* Cleanup. */
|
|
||||||
close(uinput_fd); /* Might fail, but we don't care anymore at this point. */
|
|
||||||
|
|
||||||
errno = original_errno;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_close(int uinput_fd)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Sleep before destroying the device because there still can be some
|
|
||||||
unprocessed events. This is not the right way, but I am still
|
|
||||||
looking for better ways. The question is: how to know whether there
|
|
||||||
are any unprocessed uinput events?
|
|
||||||
*/
|
|
||||||
sleep(2);
|
|
||||||
|
|
||||||
if (ioctl(uinput_fd, UI_DEV_DESTROY) == -1) {
|
|
||||||
close(uinput_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (close(uinput_fd) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_move_pointer(int uinput_fd, int32_t x, int32_t y)
|
|
||||||
{
|
|
||||||
if (suinput_write(uinput_fd, EV_REL, REL_X, x))
|
|
||||||
return -1;
|
|
||||||
return suinput_write_syn(uinput_fd, EV_REL, REL_Y, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_set_pointer(int uinput_fd, int32_t x, int32_t y)
|
|
||||||
{
|
|
||||||
if (suinput_write(uinput_fd, EV_ABS, ABS_X, x))
|
|
||||||
return -1;
|
|
||||||
return suinput_write_syn(uinput_fd, EV_ABS, ABS_Y, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_press(int uinput_fd, uint16_t code)
|
|
||||||
{
|
|
||||||
return suinput_write(uinput_fd, EV_KEY, code, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_release(int uinput_fd, uint16_t code)
|
|
||||||
{
|
|
||||||
return suinput_write(uinput_fd, EV_KEY, code, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int suinput_click(int uinput_fd, uint16_t code)
|
|
||||||
{
|
|
||||||
if (suinput_press(uinput_fd, code))
|
|
||||||
return -1;
|
|
||||||
return suinput_release(uinput_fd, code);
|
|
||||||
}
|
|
@ -1,96 +0,0 @@
|
|||||||
/*
|
|
||||||
suinput - Simple C-API to the Linux uinput-system.
|
|
||||||
Copyright (C) 2009 Tuomas Räsänen <tuos@codegrove.org>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SUINPUT_H
|
|
||||||
#define SUINPUT_H
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include <linux/input.h>
|
|
||||||
#include <linux/uinput.h>
|
|
||||||
|
|
||||||
int suinput_write(int uinput_fd,
|
|
||||||
uint16_t type, uint16_t code, int32_t value);
|
|
||||||
/*
|
|
||||||
Creates and opens a connection to the event device. Returns an uinput file
|
|
||||||
descriptor on success. On error, -1 is returned, and errno is set
|
|
||||||
appropriately.
|
|
||||||
*/
|
|
||||||
int suinput_open(const char* device_name, const struct input_id* id);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Destroys and closes a connection to the event device. Returns 0 on success.
|
|
||||||
On error, -1 is returned, and errno is set appropriately.
|
|
||||||
|
|
||||||
Behaviour is undefined when passed a file descriptor not returned by
|
|
||||||
suinput_open().
|
|
||||||
*/
|
|
||||||
int suinput_close(int uinput_fd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Sends a relative pointer motion event to the event device. Values increase
|
|
||||||
towards right-bottom. Returns 0 on success. On error, -1 is returned, and
|
|
||||||
errno is set appropriately.
|
|
||||||
|
|
||||||
Behaviour is undefined when passed a file descriptor not returned by
|
|
||||||
suinput_open().
|
|
||||||
*/
|
|
||||||
int suinput_move_pointer(int uinput_fd, int32_t x, int32_t y);
|
|
||||||
int suinput_set_pointer(int uinput_fd, int32_t x, int32_t y);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Sends a press event to the event device. Event is repeated after
|
|
||||||
a short delay until a release event is sent. Returns 0 on success.
|
|
||||||
On error, -1 is returned, and errno is set appropriately.
|
|
||||||
|
|
||||||
Behaviour is undefined when passed a file descriptor not returned by
|
|
||||||
suinput_open().
|
|
||||||
|
|
||||||
All possible values of `code` are defined in linux/input.h prefixed
|
|
||||||
by KEY_ or BTN_.
|
|
||||||
*/
|
|
||||||
int suinput_press(int uinput_fd, uint16_t code);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Sends a release event to the event device. Returns 0 on success.
|
|
||||||
On error, -1 is returned, and errno is set appropriately.
|
|
||||||
|
|
||||||
Behaviour is undefined when passed a file descriptor not returned by
|
|
||||||
suinput_open().
|
|
||||||
|
|
||||||
All possible values of `code` are defined in linux/input.h prefixed
|
|
||||||
by KEY_ or BTN_.
|
|
||||||
*/
|
|
||||||
int suinput_release(int uinput_fd, uint16_t code);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Sends a press and release events to the event device. Returns 0 on
|
|
||||||
success. On error, -1 is returned, and errno is set appropriately.
|
|
||||||
|
|
||||||
Behaviour is undefined when passed a file descriptor not returned by
|
|
||||||
suinput_open().
|
|
||||||
|
|
||||||
All possible values of `code` are defined in linux/input.h prefixed
|
|
||||||
by KEY_ or BTN_.
|
|
||||||
|
|
||||||
This function is provided as a convenience and has effectively the
|
|
||||||
same result as calling suinput_press() and suinput_release() sequentially.
|
|
||||||
*/
|
|
||||||
int suinput_click(int uinput_fd, uint16_t code);
|
|
||||||
|
|
||||||
#endif /* SUINPUT_H */
|
|
@ -1,211 +0,0 @@
|
|||||||
/*
|
|
||||||
droid VNC server - a vnc server for android
|
|
||||||
Copyright (C) 2011 Jose Pereira <onaips@gmail.com>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 3 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define OUT_T CONCAT3E(uint,OUT,_t)
|
|
||||||
#define FUNCTION CONCAT2E(update_screen_,OUT)
|
|
||||||
|
|
||||||
void FUNCTION(void)
|
|
||||||
{
|
|
||||||
int i,j;
|
|
||||||
int offset=0,pixelToVirtual;
|
|
||||||
OUT_T* a;
|
|
||||||
OUT_T* b=0;
|
|
||||||
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
update_fb_info();//important for doubleframebuffing_*
|
|
||||||
else if (method==ADB)
|
|
||||||
updateADBFrame();
|
|
||||||
else if (method==GRALLOC)
|
|
||||||
readfb_gralloc();
|
|
||||||
#ifndef ANDROID_FROYO
|
|
||||||
else if (method==GINGERBREAD)
|
|
||||||
updateScreen();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
a = (OUT_T*)cmpbuf;
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
b = (OUT_T*)fbmmap;
|
|
||||||
else if (method==ADB)
|
|
||||||
b = (OUT_T*)adbbuf;
|
|
||||||
else if (method==GRALLOC)
|
|
||||||
b = (OUT_T*)grallocfb;
|
|
||||||
#ifndef ANDROID_FROYO
|
|
||||||
else if (method==GINGERBREAD)
|
|
||||||
b = (OUT_T*)gingerbuf;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int max_x=-1,max_y=-1, min_x=99999, min_y=99999;
|
|
||||||
idle=1;
|
|
||||||
|
|
||||||
if (rotation==0)
|
|
||||||
{
|
|
||||||
for (j = 0; j < vncscr->height; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < vncscr->width; i++)
|
|
||||||
{
|
|
||||||
offset = j * vncscr->width;
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL_FB(i,j);
|
|
||||||
else
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL(i,j);
|
|
||||||
|
|
||||||
if (a[i + offset]!=b[pixelToVirtual])
|
|
||||||
{
|
|
||||||
a[i + offset]=b[pixelToVirtual];
|
|
||||||
if (i>max_x)
|
|
||||||
max_x=i;
|
|
||||||
if (i<min_x)
|
|
||||||
min_x=i;
|
|
||||||
|
|
||||||
if (j>max_y)
|
|
||||||
max_y=j;
|
|
||||||
if (j<min_y)
|
|
||||||
min_y=j;
|
|
||||||
|
|
||||||
idle=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// memcpy(a,b,vncscr->width*vncscr->height*scrinfo.bits_per_pixel/CHAR_BIT);
|
|
||||||
}
|
|
||||||
else if (rotation==90)
|
|
||||||
{
|
|
||||||
for (j = 0; j < vncscr->width; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < vncscr->height; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
offset = i * vncscr->width;
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL_FB(i,j);
|
|
||||||
else
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL(i,j);
|
|
||||||
|
|
||||||
if (a[(vncscr->width - 1 - j + offset)] != b[pixelToVirtual])
|
|
||||||
{
|
|
||||||
a[(vncscr->width - 1 - j + offset)] = b[pixelToVirtual];
|
|
||||||
|
|
||||||
if (i>max_y)
|
|
||||||
max_y=i;
|
|
||||||
if (i<min_y)
|
|
||||||
min_y=i;
|
|
||||||
|
|
||||||
int h=vncscr->width-j;
|
|
||||||
|
|
||||||
if (h < min_x)
|
|
||||||
min_x=vncscr->width-j;
|
|
||||||
if (h > max_x)
|
|
||||||
max_x=vncscr->width-j;
|
|
||||||
|
|
||||||
idle=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (rotation==180)
|
|
||||||
{
|
|
||||||
for (j = 0; j < vncscr->height; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < vncscr->width; i++)
|
|
||||||
{
|
|
||||||
offset = (vncscr->height - 1 - j) * vncscr->width;
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL_FB(i,j);
|
|
||||||
else
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL(i,j);
|
|
||||||
|
|
||||||
if (a[((vncscr->width - 1 - i) + offset )]!=b[pixelToVirtual])
|
|
||||||
{
|
|
||||||
a[((vncscr->width - 1 - i) + offset )]=b[pixelToVirtual];
|
|
||||||
|
|
||||||
|
|
||||||
if (i>max_x)
|
|
||||||
max_x=i;
|
|
||||||
if (i<min_x)
|
|
||||||
min_x=i;
|
|
||||||
|
|
||||||
int h=vncscr->height-j;
|
|
||||||
|
|
||||||
if (h < min_y)
|
|
||||||
min_y=vncscr->height-j;
|
|
||||||
if (h > max_y)
|
|
||||||
max_y=vncscr->height-j;
|
|
||||||
|
|
||||||
idle=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (rotation==270)
|
|
||||||
{
|
|
||||||
for (j = 0; j < vncscr->width; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < vncscr->height; i++)
|
|
||||||
{
|
|
||||||
offset = (vncscr->height - 1 - i) * vncscr->width;
|
|
||||||
|
|
||||||
if (method==FRAMEBUFFER)
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL_FB(i,j);
|
|
||||||
else
|
|
||||||
pixelToVirtual = PIXEL_TO_VIRTUALPIXEL(i,j);
|
|
||||||
|
|
||||||
if(a[j + offset] != b[pixelToVirtual])
|
|
||||||
{
|
|
||||||
a[j + offset] = b[pixelToVirtual];
|
|
||||||
|
|
||||||
if (i>max_y)
|
|
||||||
max_y=i;
|
|
||||||
if (i<min_y)
|
|
||||||
min_y=i;
|
|
||||||
|
|
||||||
if (j < min_x)
|
|
||||||
min_x=j;
|
|
||||||
if (j > max_x)
|
|
||||||
max_x=j;
|
|
||||||
|
|
||||||
idle=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!idle)
|
|
||||||
{
|
|
||||||
memcpy(vncbuf,a,displayInfo.width*displayInfo.height*displayInfo.bpp/CHAR_BIT);
|
|
||||||
|
|
||||||
min_x--;
|
|
||||||
min_x--;
|
|
||||||
max_x++;
|
|
||||||
max_y++;
|
|
||||||
|
|
||||||
// L("Changed x(%d-%d) y(%d-%d)\n",min_x,max_x,min_y,max_y);
|
|
||||||
|
|
||||||
rfbMarkRectAsModified(vncscr, min_x, min_y, max_x, max_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,41 +1,83 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
|
||||||
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent" android:orientation="vertical"
|
android:layout_height="fill_parent"
|
||||||
android:background="@drawable/bg" android:layout_width="match_parent" android:gravity="top">
|
android:background="@drawable/bg"
|
||||||
|
android:gravity="top"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:id="@+id/mainLayout">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:orientation="vertical"
|
android:gravity="center_horizontal"
|
||||||
android:gravity="center_horizontal"
|
android:orientation="vertical" >
|
||||||
>
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_marginTop="24dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginTop="24dp"
|
||||||
android:src="@drawable/droidvnclogo" android:scaleType="fitStart"/>
|
android:scaleType="fitStart"
|
||||||
<RelativeLayout android:layout_width="match_parent" android:layout_marginTop="10dp"
|
android:src="@drawable/droidvnclogo" />
|
||||||
android:id="@+id/relativeLayout1" android:layout_height="200dp">
|
|
||||||
<Button android:background="@drawable/btnstart" android:id="@+id/Button01"
|
|
||||||
android:layout_width="200dp" android:layout_height="200dp"
|
|
||||||
android:layout_centerHorizontal="true"></Button>
|
|
||||||
<Button android:layout_alignParentBottom="true" android:background="@drawable/restart_normal"
|
|
||||||
android:id="@+id/Button02" android:layout_toRightOf="@id/Button01"
|
|
||||||
android:layout_width="30dp" android:layout_height="30dp"></Button>
|
|
||||||
</RelativeLayout>
|
|
||||||
<TextView android:shadowRadius="0.5" android:id="@+id/stateLabel" android:layout_width="wrap_content" android:text="@+id/TextView01" android:shadowDy="1.0" android:shadowColor="#111" android:textSize="30sp" android:layout_height="wrap_content" android:paddingTop="10dp"></TextView>
|
|
||||||
<TextView android:gravity="center" android:shadowRadius="0.5" android:id="@+id/TextView01" android:layout_width="wrap_content" android:text="@+id/TextView02" android:shadowDy="1.0" android:shadowColor="#111" android:textSize="15sp" android:layout_height="wrap_content" android:paddingTop="10dp"></TextView>
|
|
||||||
|
|
||||||
</LinearLayout>
|
<RelativeLayout
|
||||||
<com.google.ads.AdView android:id="@+id/adView"
|
android:id="@+id/relativeLayout1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="200dp"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_marginTop="10dp" >
|
||||||
ads:adUnitId="a14c45a1d8a1817"
|
|
||||||
ads:adSize="BANNER"/>
|
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/Button01"
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:background="@drawable/btnstart" >
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/Button02"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_toRightOf="@id/Button01"
|
||||||
|
android:background="@drawable/restart_normal" >
|
||||||
|
</Button>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/stateLabel"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="10dp"
|
||||||
|
android:shadowColor="#111"
|
||||||
|
android:shadowDy="1.0"
|
||||||
|
android:shadowRadius="0.5"
|
||||||
|
android:text="@+id/TextView01"
|
||||||
|
android:textSize="30sp" >
|
||||||
|
</TextView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/TextView01"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingTop="10dp"
|
||||||
|
android:shadowColor="#111"
|
||||||
|
android:shadowDy="1.0"
|
||||||
|
android:shadowRadius="0.5"
|
||||||
|
android:text="@+id/TextView02"
|
||||||
|
android:textSize="15sp" >
|
||||||
|
</TextView>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.google.ads.AdView
|
||||||
|
android:id="@+id/adView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
ads:adSize="BANNER"
|
||||||
|
ads:adUnitId="a14c45a1d8a1817"
|
||||||
|
android:gravity="center_horizontal" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
@ -16,12 +16,8 @@ import java.util.TimerTask;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import com.google.ads.AdRequest;
|
|
||||||
import com.google.ads.AdView;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -33,8 +29,8 @@ import android.content.SharedPreferences;
|
|||||||
import android.content.SharedPreferences.Editor;
|
import android.content.SharedPreferences.Editor;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
@ -49,16 +45,21 @@ import android.view.Menu;
|
|||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Window;
|
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
import android.view.Window;
|
||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.view.animation.AnimationUtils;
|
|
||||||
import android.view.animation.Animation.AnimationListener;
|
import android.view.animation.Animation.AnimationListener;
|
||||||
|
import android.view.animation.AnimationUtils;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.google.ads.AdRequest;
|
||||||
|
import com.google.ads.AdSize;
|
||||||
|
import com.google.ads.AdView;
|
||||||
|
|
||||||
public class MainActivity extends Activity
|
public class MainActivity extends Activity
|
||||||
{
|
{
|
||||||
private static final int MENU_QUIT = 0;
|
private static final int MENU_QUIT = 0;
|
||||||
@ -70,12 +71,11 @@ public class MainActivity extends Activity
|
|||||||
static final int APP_ID = 123;
|
static final int APP_ID = 123;
|
||||||
static final String VNC_LOG ="VNCserver";
|
static final String VNC_LOG ="VNCserver";
|
||||||
|
|
||||||
private ServerManager s;
|
private AdView adView = null;
|
||||||
|
private ServerManager s = null;
|
||||||
Animation buttonAnimation=null;
|
private Animation buttonAnimation=null;
|
||||||
SharedPreferences preferences;
|
private SharedPreferences preferences;
|
||||||
ProgressDialog dialog=null;
|
private AlertDialog startDialog;
|
||||||
AlertDialog startDialog;
|
|
||||||
|
|
||||||
void doBindService() {
|
void doBindService() {
|
||||||
bindService(new Intent(this, ServerManager.class), mConnection,
|
bindService(new Intent(this, ServerManager.class), mConnection,
|
||||||
@ -124,6 +124,8 @@ public class MainActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
protected void onDestroy()
|
protected void onDestroy()
|
||||||
{
|
{
|
||||||
|
if (adView != null)
|
||||||
|
adView.destroy();
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
unregisterReceiver(mReceiver);
|
unregisterReceiver(mReceiver);
|
||||||
}
|
}
|
||||||
@ -186,7 +188,7 @@ public class MainActivity extends Activity
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Look up the AdView as a resource and load a request.
|
// Look up the AdView as a resource and load a request.
|
||||||
AdView adView = (AdView)this.findViewById(R.id.adView);
|
adView = (AdView)this.findViewById(R.id.adView);
|
||||||
adView.loadAd(new AdRequest());
|
adView.loadAd(new AdRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +229,7 @@ public class MainActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void log(String s)
|
public void log(String s)
|
||||||
{
|
{
|
||||||
Log.v(VNC_LOG,s);
|
Log.v(VNC_LOG,s);
|
||||||
|
Loading…
Reference in New Issue
Block a user