Hi, Jack Yes, I am a Chinese. You are right, you should move the code " s->callbacks = *callbacks;" ahead to gps_state_init, otherwise you can not invoke the callback function create_thread_cb.
On 5月23日, 下午5时09分, jack <luquanh...@gmail.com> wrote: > Hi, Lionel Xu > In my xxx_gps_init , i define like blow: > > nfs_gps_init(GpsCallbacks* callbacks) > { > GpsState* s = _gps_state; > > if (!s->init) > gps_state_init(s); > > if (s->fd < 0) > return -1; > > MYD("Start init callbacks"); > s->callbacks = *callbacks; > > return 0;} > > and gps_state_init like : > > static void > gps_state_init( GpsState* state ) > { > ....... > if ( pthread_create( &state->thread, NULL, gps_state_thread, > state ) != 0 ) { > LOGE("could not create gps thread: %s", strerror(errno)); > goto Fail; > } > ....... > > } > > What you mean, should I install callbacks before gps_state_init(), > and then use "s->callbacks->create_thread_call"" to instead of > "pthread_create" ? > > By the way,are you chinese? I am chinese. > > On 5月18日, 下午8时39分, Lionel Xu <xlron...@gmail.com> wrote: > > > > > > > > > Hi, All > > > Thanks for your attention, i have found the route cause of this issue, > > that is > > > Before using the callback function like nmea_callback or > > location_callback > > on gingerbread, you should use the new-added callback function > > create_thread_callback > > instead of pthread_create or something like that to create maingps > > thread in your xxx_gps_init > > function, otherwise you will get NULL as return value of below > > invoking > > AndroidRuntime::getJNIEnv() > > in your subsequent callback function, which actually will incur the VM > > restart problem. > > > Lionel > > > On 5月17日, 下午1时46分, Lionel Xu <xlron...@gmail.com> wrote: > > > > Thanks, > > > What i used is agpsmodule which connected with our soc via serial > > > port, > > > i think it is a little different from usb-based. MyGPShardware > > > abstraction layer code > > > was also referenced from sdk/emulator/gps/gps_qemu.c, and the > > > associated android.mk > > > is as follow: > > > > LOCAL_PATH := $(call my-dir) > > > > ifneq ($(TARGET_PRODUCT),sim) > > > # HAL module implemenation, not prelinked and stored in > > > # hw/<GPS_HARDWARE_MODULE_ID>.<ro.hardware>.so > > > include $(CLEAR_VARS) > > > LOCAL_PRELINK_MODULE := false > > > LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw > > > LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware > > > > ifeq ($(USE_ATHR_GPS_HARDWARE),true) > > > LOCAL_SRC_FILES := athr_gps.c > > > endif > > > > LOCAL_SRC_FILES +=gps.c > > > LOCAL_MODULE :=gps.default > > > LOCAL_MODULE_TAGS := eng > > > include $(BUILD_SHARED_LIBRARY) > > > endif > > > > The problem is just like topic starter says, when callback to function > > > nmea_callback > > > in com_android_server_location_GpsLocationProvider.cpp, android VM > > > restart again > > > and again, i was totally no idea about it, thanks a lot for your > > > reply! > > > > BR > > > Lionel > > > > On 5月16日, 下午9时05分, WuPublic <wu.publicm...@gmail.com> wrote: > > > > > Does the usb_basedgps emulate as a serial (usb to serial)? > > > > And what 's the difference between usb_based gpsor uart basedgps? > > > > and could you show your Android.mk file to us? > > > > > 在 2011年5月16日 下午5:38,Lionel Xu <xlron...@gmail.com>写道: > > > > > > I just got the same problem as you said, which blocked mygpsproject > > > > > nearly one week!!!! > > > > > > On 5月9日, 下午12时55分, white <felon.wh...@gmail.com> wrote: > > > > > > I was under the impression thatgps.default.so(or libgps.so) should > > > > > > go > > > > > > to the directory (/system/lib/) instead of (/system/lib/hw/). > > > > > > > Also, is it important to name it as "gps.default.so" or it depends > > > > > > on > > > > > > what we specify while editing ./build/target/board/beagleboard/ > > > > > > BoardConfig.mk e.g. > > > > > > BOARD_GPS_LIBRARIES :=libgps > > > > > > > White > > > > > > > On May 6, 1:21 pm, jack <luquanh...@gmail.com> wrote: > > > > > > > > Hi > > > > > > > > I am going to porting a USB-basedGPSmodule to Android2.3on arm > > > > > > > device. > > > > > > > In the Android2.3 source,I find the file (sdk/emulator/gps/ > > > > > > > gps_qemu.c). So i change the file and Android.mk, making them been > > > > > > > builded togps.default.so and been copied to the directory > > > > > > > (/system/ > > > > > > > lib/hw/). > > > > > > > By doing these, i can grab the NMEA data and callback them to > > > > > > > JNI. > > > > > > > However , When callback to GpsLocationProvider, > > > > > > > > env->CallVoidMethod(mCallbacksObj, method_reportLocation, > > > > > location->flags, > > > > > > > > (jdouble)location->latitude, > > > > > > > (jdouble)location->longitude, > > > > > > > (jdouble)location->altitude, > > > > > > > (jfloat)location->speed, (jfloat)location->bearing, > > > > > > > (jfloat)location->accuracy, > > > > > > > (jlong)location->timestamp); > > > > > > > > make the VM restart. What happen? > > > > > > > > D/GpsLocationProvider( 1429): startNavigating > > > > > > > D/GpsLocationProvider( 1429): start GPS...................... > > > > > > > D/gps_nfs ( 1429): Start send CMD_START command: > > > > > > > D/gps_nfs ( 1429):gpsthread received 1 events > > > > > > > D/gps_nfs ( 1429):gpscontrol fd event > > > > > > > D/gps_nfs ( 1429):gpsthread starting location_cb=0x8380a67d > > > > > > > D/gps_nfs ( 1429): entery nmea_reader_set_callback > > > > > > > D/gps_nfs ( 1429): nmea_reader_set_callback: sending latest fix > > > > > > > to new > > > > > > > callback > > > > > > > D/gps_nfs ( 1429): location callback 0X39.978600 > > > > > > > > I/ActivityManager( 1429): Displayed org.gps.GPSTest/.GPSTest: > > > > > > > +1s688ms > > > > > > > E/gralloc.mini6410( 1429): [unregister] handle 0x1aaf30 still > > > > > > > locked > > > > > > > (state=40000001) > > > > > > > D/gps_nfs ( 1429):gpsthread received 1 events > > > > > > > D/gps_nfs ( 1429):gpsfd event > > > > > > > D/gps_nfs ( 1429): received 32 bytes: > > > > > > > $GPGGA,062150.026,3958.7160,N,11 > > > > > > > D/gps_nfs ( 1429): received 32 bytes: > > > > > > > 619.8405,E,0,0,,35.0,M,-6.5,M,,* > > > > > > > D/gps_nfs ( 1429): received 32 bytes: 6F > > > > > > > D/gps_nfs ( 1429): > > > > > > > D/gps_nfs ( 1429): $GPRMC,062150.026,V,3958.716 > > > > > > > D/gps_nfs ( 1429): Received: '$GPGGA,062150.026,3958.7160,N, > > > > > > > 11619.8405,E,0,0,,35.0,M,-6.5,M,,*6F > > > > > > > D/gps_nfs ( 1429): ' > > > > > > > D/gps_nfs ( 1429): Found 12 tokens > > > > > > > D/gps_nfs ( 1429): 0: 'GPGGA' > > > > > > > D/gps_nfs ( 1429): 1: '062150.026' > > > > > > > D/gps_nfs ( 1429): 2: '3958.7160' > > > > > > > D/gps_nfs ( 1429): 3: 'N' > > > > > > > D/gps_nfs ( 1429): 4: '11619.8405' > > > > > > > D/gps_nfs ( 1429): 5: 'E' > > > > > > > D/gps_nfs ( 1429): 6: '0' > > > > > > > D/gps_nfs ( 1429): 7: '0' > > > > > > > D/gps_nfs ( 1429): 8: '35.0' > > > > > > > D/gps_nfs ( 1429): 9: 'M' > > > > > > > D/gps_nfs ( 1429): 10: '-6.5' > > > > > > > D/gps_nfs ( 1429): 11: 'M' > > > > > > > D/gps_nfs ( 1429): callback, keeping data needed ! > > > > > > > D/GpsLocationProvider( 1429): entry the JNI and the location is > > > > > > > 39.978600 > > > > > > > > I/DEBUG ( 1015): *** *** *** *** *** *** *** *** *** *** *** > > > > > > > *** *** > > > > > > > *** *** *** > > > > > > > I/DEBUG ( 1015): Build fingerprint: 'FriendlyARM/mini6410/ > > > > > > > mini6410:2.3.2/GRH78C/eng.root.20110503.151546:eng/test-keys' > > > > > > > I/DEBUG ( 1015): pid: 1429, tid: 1550 >>> system_server <<< > > > > > > > I/DEBUG ( 1015): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), > > > > > > > fault > > > > > > > addr 00000000 > > > > > > > I/DEBUG ( 1015): r0 00000000 r1 407d1b60 r2 41645ab4 r3 > > > > > > > 47defc54 > > > > > > > I/DEBUG ( 1015): r4 00000000 r5 8380c7cf r6 00000000 r7 > > > > > > > 407d1b60 > > > > > > > I/DEBUG ( 1015): r8 849015f1 r9 84903250 10 00100000 fp > > > > > > > 00000001 > > > > > > > I/DEBUG ( 1015): ip 8380e7d4 sp 47defc40 lr 8380a6f9 pc > > > > > > > 83807d0e cpsr 00000030 > > > > > > > I/DEBUG ( 1015): #00 pc 00007d0e /system/lib/ > > > > > > > libandroid_servers.so > > > > > > > I/DEBUG ( 1015): #01 pc 0000a6f4 /system/lib/ > > > > > > > libandroid_servers.so > > > > > > > I/DEBUG ( 1015): #02 pc 000015be /system/lib/hw/ > > > > > > >gps.default.so > > > > > > > I/DEBUG ( 1015): #03 pc 00001822 /system/lib/hw/ > > > > > > >gps.default.so > > > > > > > I/DEBUG ( 1015): #04 pc 00011a7c /system/lib/libc.so > > > > > > > I/DEBUG ( 1015): #05 pc 00011640 /system/lib/libc.so > > > > > > > I/DEBUG ( 1015): > > > > > > > I/DEBUG ( 1015): code around pc: > > > > > > > I/DEBUG ( 1015): 83807cec ab04b082 9301cb04 6f646804 b00247a0 > > > > > > > I/DEBUG ( 1015): 83807cfc bc08bc10 4718b002 b510b40c ab04b082 > > > > > > > I/DEBUG ( 1015): 83807d0c 6804cb04 34f89301 47a06824 bc10b002 > > > > > > > I/DEBUG ( 1015): 83807d1c b002bc08 46c04718 b510b40c ab04b082 > > > > > > > I/DEBUG ( 1015): 83807d2c 9301cb04 34986804 47a06824 bc10b002 > > > > > > > I/DEBUG ( 1015): > > > > > > -- > > > > > unsubscribe: android-porting+unsubscr...@googlegroups.com > > > > > website:http://groups.google.com/group/android-porting -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting