Re: [eside-ghost] Código C multiplataforma trabajando con JNI
Arkaitz
arkaitzj en gmail.com
Dom Jul 2 23:36:31 CEST 2006
Excelente!!
Al final me ha costado un poco mas, la solucion pasaba por pasar las
variables por tipos básicos(no se en que tipo venian de inquiry_info,
pero los he pasado a unsigned char los bytes y a short e int los
otros) y despues pasarles el ntohs y como la seda.
Es extraño pero hasta que no los he pasado por los tipos básicos no me
ha funcionado, no me servia el ntohs-ear directamente las salidas
desde el inquiry_info, me imagino que no vendrian exactamente int y
short tal cual.
Pues nada, gracias!!
On 7/2/06, Alejandro López Monge <kodemonk en telefonica.net> wrote:
> Yo suelo programar en C++ para x86 y ppc, principalmente la mayor diferencia de
> cara a portabilidad de código son los Endian issues. Mientras que PPC está en Big
> endian x86 está en little. No tengo ni idea de lo que hace la función que has
> mandado, pero lo que me ha llamado la atención son, este tipo de casts:
>
> iid_args[4].s=(jshort) inq_info->clock_offset;
>
> Java se precia de ser portable, por lo que no me extrañaría que almacenase los
> datos de un modo independiente al de la arquitectura donde se compila,
> suponiendo que esto fuese cierto y suponiendo también que el
> formato estándar fuese Little endian este cast funcionaría en máquinas x86 pero no
> en máqinas PPC. Para más información "man ntohs" y este PDF
> www.emasterminds.net/endian-1.pdf
>
>
> A ver si hay suerte y es eso ;D
>
>
>
>
>
> On Sun, 2 Jul 2006 20:12:21 +0200
> Arkaitz <arkaitzj en gmail.com> wrote:
>
> > for (i=0; i<num_rsp; i++)
> > {
> > baswap(&bdaddr_cpy, &inq_info->bdaddr);
> > ba_str = batostr(&bdaddr_cpy); // Convert from bdaddr_t to char*
> > jba_str = env->NewStringUTF(ba_str);
> > iid_args[0].l = jba_str;
> > iid_args[1].b = (jbyte) inq_info->pscan_rep_mode;
> > iid_args[2].b = (jbyte) inq_info->pscan_period_mode;
> > iid_args[3].b = (jbyte) inq_info->pscan_mode;
> > /* iid_args[4].s = (jshort)
> > inq_info->dev_class[0];
> > iid_args[5].s = (jshort)
> > inq_info->dev_class[1];
> > iid_args[6].s = (jshort)
> > inq_info->dev_class[2];*/
> > iid_args[4].s = (jshort) inq_info->clock_offset;
> > // iid_args[5].i =
> > (jint)((inq_info->dev_class[0] & 0xfc) | ((inq_info->dev_class[1] &
> > 0x1f) << 8) | ((inq_info->dev_class[2] & 0x3ff) << 13));
> > iid_args[5].i = (jint)((inq_info->dev_class[0] & 0xff)
> > | ((inq_info->dev_class[1] & 0xff) << 8) | ((inq_info->dev_class[2] &
> > 0xff) << 16));
> > printf("Apunto de crear un nuevo objeto\n");
> >
> > ///AQUI ES DONDE PETA VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
> > info_dev = env->NewObjectA(iid_cls, iid_con_id, iid_args);
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > env->CallVoidMethod(agent, ii_add_id, info_dev);
> >
> > inq_info++;
> > }
> > printf("Objetos creados!!!!\n");
> > free(inq_info_bak);
> > return true;
>
> --
> Alejandro López Monge
> Universidad de Deusto
> Aptdo. 1
> 48080 - Bilbao (SPAIN)
> Ext: 2933
> e-mail: kodemonk en emasterminds.net
>
>
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
>
--
Arkaitz
Más información sobre la lista de distribución eside-ghost