Aller au contenu

Wiimote, Bluetooth et trame


Droiide

Recommended Posts

C'est pas le problème des .o ;)

Tu dois compiler toute la lib wiiuse http://sourceforge.net/projects/wiiuse/files/wiiuse/v0.12/ en même temps que wiiusej_WiiUseApi.c , fais un makefile qui compile tout. Dans le projet WiiuseJ, la lib wiiuse est déjà compilée libwiiuse.so et wiiusej_WiiUseApi.c dans libWiiuseJ.so mais toi tu peux tout compiler en une seule lib.

Lien vers le commentaire
Partager sur d’autres sites

Ayé j'ai réussi :) Maintenant passons à unresolved symbol...

ça aussi apparement c'est fait. Donc là tout est compilé.

Ce soir je ferais la partie Java et je vous tiendrais donc au courant de l'évolution (ou des problémes) ^^

Merci beaucoup :)

Modifié par Droiide
Lien vers le commentaire
Partager sur d’autres sites

Est-ce que tu as respecté la règle de nommage des fonctions de ton interface JNI? Elle doivent contenir le chemin du package de ton application

The name of the function, though, is important. It follows the specific pattern of “Java,” followed by the package name, followed by the class name, followed by the method name, as defined from Java. Every piece is separated by an underscore instead of a dot.

step 3 du tuto : http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

Sinon c'est peut-être que ta lib n'est pas chargée par ton appli Android, tu as bien ceci dans ta classe Java?

static {

System.loadLibrary("libndkmain"); ?

}

Modifié par kaloskagatos
Lien vers le commentaire
Partager sur d’autres sites

Je crois que j'ai trouvé (j'éspere mais c'est une erreur tout bête) J'ai pas mis le nom de l'activité dans les noms des fonctions ..

J'esseyerai cette aprem parce que là j'ai pas de telephone sur moi ..

ça ne marche toujours pas. Est ce qu'il faut modifier le manifest?

Modifié par Droiide
Lien vers le commentaire
Partager sur d’autres sites

* Ta lib .so est bien dans un répertoire de ton projet \libs\armeabi ?

* Ton appli android, si elle est déclarée dans un package com.droiide.monprojet et si la classe qui utilise la lib s'appelle MaClasse (celle qui fait le static { System.loadLibrary(... ) , dans ton code C ta fonction init s'appelle Java_com_droiide_monprojet_MaClasse_init ou pas?

* A chaque fois que tu recompiles ta lib .so tu dois faire un clean du projet Java si tu veux que les modifications soient prises en compte quand tu testes sur ton téléphone.

* Tu peux essayer de rajouter cette fonction dans ta lib, elle est appelée au chargement de la lib :

jint JNI_OnLoad(JavaVM* vm, void* reserved)

{

JNIEnv* env;

if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)

{

return -1;

}

__android_log_write(ANDROID_LOG_ERROR,"Droiid","Lib native chargée") ;

/* get class with (*env)->FindClass */

/* register methods with (*env)->RegisterNatives */

return JNI_VERSION_1_6;

}

tu mets bien ta lib dans ton projet\libs\armeabi tu clean ton projet Java, tu lances sur ton téléphone connecté en USB ou dans l'émulateur et dans le LogCat d'Eclipse tu devrait voir le message "Droiid","Lib native chargée" ce qui prouve que la lib est bien chargée

Lien vers le commentaire
Partager sur d’autres sites

* Ta lib .so est bien dans un répertoire de ton projet \libs\armeabi ?

Oui

* Ton appli android, si elle est déclarée dans un package com.droiide.monprojet et si la classe qui utilise la lib s'appelle MaClasse (celle qui fait le static { System.loadLibrary(... ) , dans ton code C ta fonction init s'appelle Java_com_droiide_monprojet_MaClasse_init ou pas?

Mon package s'appelle android.Bluetooth. Est ce qu'il faut absolument qu'il s'apelle com.quelquechose?

* Tu peux essayer de rajouter cette fonction dans ta lib, elle est appelée au chargement de la lib :

jint JNI_OnLoad(JavaVM* vm, void* reserved)

{

JNIEnv* env;

if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)

{

return -1;

}

__android_log_write(ANDROID_LOG_ERROR,"Droiid","Lib native chargée") ;

/* get class with (*env)->FindClass */

/* register methods with (*env)->RegisterNatives */

return JNI_VERSION_1_6;

}

tu mets bien ta lib dans ton projet\libs\armeabi tu clean ton projet Java, tu lances sur ton téléphone connecté en USB ou dans l'émulateur et dans le LogCat d'Eclipse tu devrait voir le message "Droiid","Lib native chargée" ce qui prouve que la lib est bien chargée

Je vais essayer.

Merci. Je te dis tout ça tout de suite ;)

Par clean tu entends enlever le dossier obj?

Modifié par Droiide
Lien vers le commentaire
Partager sur d’autres sites

Mon fichier Android.mk c'est ça:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog -L$(SYSROOT)/usr/lib -lbluetooth

LOCAL_MODULE := libwii

LOCAL_SRC_FILES:= \

classic.c \

dynamics.c \

events.c \

guitar_hero_3.c \

io.c \

io_nix.c \

ir.c \

nunchuk.c \

wiiuse.c \

wiiusej_WiiUseApi.c

include $(BUILD_SHARED_LIBRARY)

Je me suis pas trompé?

Lien vers le commentaire
Partager sur d’autres sites

Mon package s'appelle android.Bluetooth. Est ce qu'il faut absolument qu'il s'apelle com.quelquechose?

Non pas nécessairement, il faut qu'il soit unique dans le monde si tu comptes publier ton application, c'est pour ça qu'un nom de domaine permet de trouver un nom unique assez facilement, si tu possèdes ce nom de domaine... Enfin c'est un détail.

Dans ton cas ta fonction init en C devrait s'appeler

void Java_android_Bluetooth_PeripheriqueDetail_init( int param )

ou

void Java_android_Bluetooth_PeripheriqueDetail_init

(

JNIEnv* env,

jobject thiz,

int param

)

Enfin je t'avouerai que je ne suis pas un expert là dedans donc je peux me tromper...

Par clean tu entends enlever le dossier obj?

Non, faire un clean du projet Java, dans Eclipse : menu Project / clean.. / ton projet.

En effet le .apk de ton appli n'est regénéré que si tu fais une infime modification dans ton code java, donc si tu ne fais que recompiler ta lib .so Eclipse ne va pas le détecter et ne va pas recréer un nouveau .apk avec ton dernier .so. Le clean du projet permet de s'assurer que ton .so est bien utilisé sur ton tel.

Au sujet de ton makefile je vois que tu crées un libwii.so, est-ce que dans ta classe PeripheriqueDetail tu fais un static { System.loadLibrary( "libwii" ) } comme dans un tutorial du NDK ?

Lien vers le commentaire
Partager sur d’autres sites

Dans PeripheriqueDetail je doit mettre { System.loadLibrary( "wii" ) } au lieu de { System.loadLibrary( "libwii" ) } parce que sinon java n'arrive pas à charger la bibliotheque.

Au niveau des appelles des fonctions dans wiiusej_WiiUseApi.c elles sont nommées comme cela:

JNIEXPORT jint JNICALL Java_android_Bluetooth_PeripheriqueDetail_connect

(JNIEnv *env, jobject obj, jint nbWiimotes)

Dans wiiusej_WiiUseApi.h:

int Java_android_Bluetooth_PeripheriqueDetail_connect

(JNIEnv *, jobject, jint);

Dans wiiusej_WiiUseApi.def:

EXPORTS

Java_android_Bluetooth_PeripheriqueDetail_connect

Je pense que je me trompe par là...

PS: J'ai fait le clean mais toujours rien ... Je me demande si je vais y arriver un jour..

Lien vers le commentaire
Partager sur d’autres sites

Tu as raison pour le loadlibray "wii"

Pour le reste je ne sais pas trop. Essaye de faire fonctionner les exemples du NDK (hello_jni) et voir ce qui diffère de toi. Je ne connais pas les .def et comme je t'ai dit je ne suis pas un expert en JNI... Ne baisse pas les bras !

Modifié par kaloskagatos
Lien vers le commentaire
Partager sur d’autres sites

Je suis en train d'attaquer un projet assez similaire. Je vais établir une connexion bluetooth avec une raquette électronique. Par contre je commence tout juste mon projet! Je ne te serai peut être d'aucun recours au début! Je dois faire des recherches sur le protocole bluetooth suite a votre conversation, je verrai si je dois un NDK!

Mais peut être que ma connexion arrivera a s'établir plus facilement et que je te serai utile pour quelques problèmes! (j'arrive déjà a relie le téléphone et mon antenne mais pas a me connecter!)

Modifié par bigstorm
Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Bonjour,

je suis étudiant débutant en développement Android, je suis en train de développer une application bluetooth sur android qui permette à un téléphone portable de se connecter à un appareil équipe de bluetooth et récupéré un message qu'est déjà stocké de dans.

je suis arriver à implémenter un code permettant de scanner l'environnement de téléphone et afficher tous les adresses Mac et les noms des appareils bluetooth détectés.

quelqu'un peux m'indiquer comment je peux faire pour me connecter à un appareil que je connais déja son adresse Mac ?

merci

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...