ok, can you reload development version and try again?

ps: this is easier on slack ;)

> On 01 Jul 2016, at 14:00, Esteban Lorenzano <esteba...@gmail.com> wrote:
> 
> yes, I made a mistake… the problem of not being capable of test here :(
> 
> 1 minute.
> 
> Esteban
> 
>> On 01 Jul 2016, at 13:56, Julien Delplanque <jul...@tamere.eu> wrote:
>> 
>> Ok, now I get a different exception! :-)
>> 
>> "MessageNotUnderstood: LUDevice class>>fromHandle:"
>> 
>> when executing: "array first."
>> 
>> Where LUDevice is defined like this:
>> 
>> FFIOpaqueObject subclass: #LUDevice
>>   instanceVariableNames: ''
>>   classVariableNames: ''
>>   package: 'LibUsb-Kernel'
>> 
>> Julien
>> 
>> 
>> On 01/07/16 13:51, Esteban Lorenzano wrote:
>>> I need  you to test :)
>>> 
>>> can you execute this:
>>> 
>>> (ConfigurationOfUnifiedFFI project version: #development) load.
>>> 
>>> and then retry your example?
>>> 
>>> thanks,
>>> Esteban
>>> 
>>> ps: this became pharo-dev, but well… still here :)
>>> 
>>>> On 01 Jul 2016, at 13:48, Julien Delplanque <jul...@tamere.eu> wrote:
>>>> 
>>>> Oh, ok :p
>>>> 
>>>> Can you notify me know when the bug will be resolved?
>>>> 
>>>> Thanks,
>>>> 
>>>> Julien
>>>> 
>>>> 
>>>> On 01/07/16 13:36, Esteban Lorenzano wrote:
>>>>> … and now you hit a bug.
>>>>> bah, an “non implemented feature” :P
>>>>> 
>>>>> I never tested arrays with complex types.
>>>>> it should not be hard… I will provide a fix.
>>>>> 
>>>>> Esteban
>>>>> 
>>>>> 
>>>>>> On 01 Jul 2016, at 13:30, Julien Delplanque <jul...@tamere.eu> wrote:
>>>>>> 
>>>>>> Ok, the ffi call is done without problem with your method thanks. :)
>>>>>> 
>>>>>> But now that I have the array, when I try to access the first element 
>>>>>> using:
>>>>>> 
>>>>>> array first.
>>>>>> 
>>>>>> I get a exception saying I need to override a method:
>>>>>> 
>>>>>> "SubclassResponsibility: FFIOpaqueObjectType had the subclass 
>>>>>> responsibility to implement #basicHandle:at:"
>>>>>> 
>>>>>> I looked at others implementors but I am not sure of how I should 
>>>>>> override it, nor if I should.
>>>>>> 
>>>>>> Thanks for the time your taking to answer me. :-)
>>>>>> 
>>>>>> Julien
>>>>>> 
>>>>>> On 01/07/16 12:29, Esteban Lorenzano wrote:
>>>>>>>> On 01 Jul 2016, at 12:27, Esteban Lorenzano <esteba...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> hi,
>>>>>>>> 
>>>>>>>> this is because you want to get an array with opaque objects. Do not 
>>>>>>>> let the *** confuses you… cwhat you actually want, conceptually is 
>>>>>>>> something like this:
>>>>>>>> 
>>>>>>>> *((FFIOpaqueObject*)[])
>>>>>>>> 
>>>>>>>> means: you pass the address of an array of opaque types (who are 
>>>>>>>> always pointers).
>>>>>>>> 
>>>>>>>> So, what you need to pass is the address of an array… you will need to 
>>>>>>>> work a bit here, since translation is not automatic.
>>>>>>>> 
>>>>>>>> 1) you need to declare your type. Let’ say it will be:
>>>>>>>> 
>>>>>>>> FFIOpaqueObject subclass: USBDevice.
>>>>>>>> 
>>>>>>>> 2) then you need to get the pointer to this array. You need to rewrite 
>>>>>>>> you code as this:
>>>>>>>> 
>>>>>>>> arrayPtr := ExternalAddress new.
>>>>>>>> size := self getDevice: ctx list: arrayPtr.
>>>>>>>> 
>>>>>>>> getDevice: ctx list: list
>>>>>>>>        ^ self ffiCall: #(size_t libusb_get_device_list (libusb_context 
>>>>>>>> *ctx, void **list))
>>>>>>>> 
>>>>>>>> NOTE that we change the type to "void **”. This is because this is 
>>>>>>>> what you actually want: the array of devices
>>>>>>>> 
>>>>>>>> 3) now you will have size and arrayPtr. Then you declare the array:
>>>>>>>> 
>>>>>>>> array := FFIExternalArray fromPointer: arrayPtr type: USBDevice
>>>>>>> sorry, this expression (while possible) does not stops in “size”… it 
>>>>>>> has to be like this, instead:
>>>>>>> 
>>>>>>> array := FFIExternalArray fromPointer: arrayPtr type: USBDevice size: 
>>>>>>> size. “you already has the size for the result"
>>>>>>> 
>>>>>>>> … and you should be able to iterate this array normally :)
>>>>>>>> 
>>>>>>>> let me know if this works for you… I’m “coding in mail client”, so it 
>>>>>>>> can fail :P
>>>>>>>> 
>>>>>>>> cheers,
>>>>>>>> Esteban
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On 01 Jul 2016, at 12:02, Julien Delplanque <jul...@tamere.eu> wrote:
>>>>>>>>> 
>>>>>>>>> Thanks, it works I get an instance of FFIOpaqueObject.
>>>>>>>>> 
>>>>>>>>> But how do I get a specific  libusb_device object from the list?
>>>>>>>>> 
>>>>>>>>> Thanks again for you quick answer :-).
>>>>>>>>> 
>>>>>>>>> Julien
>>>>>>>>> 
>>>>>>>>> On 01/07/16 11:44, Esteban Lorenzano wrote:
>>>>>>>>>> Hi,
>>>>>>>>>> 
>>>>>>>>>> an opaque structure is not an FFIExternalObject but an 
>>>>>>>>>> FFIOpaqueObject.
>>>>>>>>>> in that case, something like (simplified):
>>>>>>>>>> 
>>>>>>>>>> ctx := (your context).
>>>>>>>>>> list := FFIOpaqueObject new.
>>>>>>>>>> size := self getDevice: ctx list: list.
>>>>>>>>>> 
>>>>>>>>>> getDevice: ctx list: list
>>>>>>>>>>      ^ self ffiCall: #(size_t libusb_get_device_list (libusb_context 
>>>>>>>>>> *ctx, FFIOpaqueObject ***list))
>>>>>>>>>> 
>>>>>>>>>> should work (note that of course you can make libusb_device an alias 
>>>>>>>>>> for your type… that does not matters much, this is just a 
>>>>>>>>>> simplification).
>>>>>>>>>> 
>>>>>>>>>> if this does not works, if you can provide me code to reproduce it, 
>>>>>>>>>> I can give it a shot and see what happens :)
>>>>>>>>>> 
>>>>>>>>>> Esteban
>>>>>>>>>> 
>>>>>>>>>>> On 01 Jul 2016, at 11:19, Julien Delplanque <jul...@tamere.eu> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hello everyone,
>>>>>>>>>>> 
>>>>>>>>>>> I have a question about the UFFI API. I have the following function:
>>>>>>>>>>> 
>>>>>>>>>>> ssize_t libusb_get_device_list (libusb_context *ctx, libusb_device 
>>>>>>>>>>> ***list)
>>>>>>>>>>> 
>>>>>>>>>>> where libusb_device is an opaque structure.
>>>>>>>>>>> 
>>>>>>>>>>> I made a type mapping "ssize_t" -> "int" and an object inheriting
>>>>>>>>>>> from FFIExternalObject for the "libusb_context" (others methods
>>>>>>>>>>> using it are working).
>>>>>>>>>>> 
>>>>>>>>>>> I can not find how to get an array filled with libusb_device using 
>>>>>>>>>>> UFFI from Pharo. :-(
>>>>>>>>>>> 
>>>>>>>>>>> Thanks in advance,
>>>>>>>>>>> 
>>>>>>>>>>> Julien
>>>>>>>>>>> 
>>>> 
>>> 
>> 
>> 
> 


Reply via email to