Thanks Ytai, that worked !!

I paste the working code below, in case someone need such an example in the 
future:

byte[] write_reg_data = {(byte)0x03, (byte)0x20};// write 0x20 into register 
0x03
byte[] empty_read ={}; //empty buffer passed to first writeRead below (to 
enable write only)
byte[] read_reg ={(byte)0x01};//start address for reading data, used in second 
writeRead call
byte[] read_buffer = 
{(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00}; // buffer 
to keep read elements

if(i2c.writeRead(0x63, false, write_reg_data, write_reg_data.length, 
empty_read,0))
if(i2c.writeRead(0x63, false, read_reg, read_reg.length, read_buffer, 
read_buffer.length))
{
      for (int i = 0; i < 3; i++) {
         pw.print(String.format("%02X", read_buffer[i])); //print out first 
three elements of read_buffer
      }
}


On Thursday, February 11, 2016 at 4:29:12 PM UTC+1, Ytai wrote:
>
> If you want to write a byte, you typically perform a write read operation 
> that has 2 bytes (register, value) on the write buffer and an empty read 
> buffer. Then you can read back using another transaction, like the one you 
> have.
> On Feb 11, 2016 03:31, "Lumi" <[email protected] <javascript:>> wrote:
>
>> I would like to give some more information:
>>
>> I modified IOIOSimpleApp and kept the configuration the same in 
>> AndroidManifest.xml and I am running app on the android phone in 
>> OpenAccessory mode connected to ioio-otg with usb cable.
>>
>> Do I need to change anything to AndroidManifest.xml (such as adding 
>> permission for usb) ?
>>
>>
>> On Thursday, February 11, 2016 at 10:25:54 AM UTC+1, Lumi wrote:
>>>
>>> Hi Ytai,
>>>
>>> You are right, I can do it in one writeRead() call. As I did below:
>>>
>>> byte[] request=new byte[]{0x01}; //data that I want to write
>>> byte[] response = new byte[1];
>>>
>>>
>>> In setup()( function:
>>>
>>>
>>> i2c=ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_100KHz, false);
>>>
>>>
>>> In loop() function:
>>>
>>>
>>> if(i2c.writeRead(0x63, false, request, request.length, response, 
>>> response.length)) //This call returns true 
>>> {
>>>    pw.print(String.format("%02X", response[0]));
>>>    pw.print(" ");
>>> }
>>>
>>>
>>> However, my problem still remains. The data (0x01) in request 
>>> interpreted as starting address of read. Therefore, I read the default data 
>>> in the register which has the address 0x01. However, I would like to write 
>>> 0x01 as (data) into the first register of device and read it back.
>>>
>>> What might am I doing wrong ? Is there a way to log/dump writeRead() 
>>> call ?
>>>
>>> Thank you in advance.
>>> Regards,
>>>
>>>
>>> On Wednesday, February 10, 2016 at 4:23:30 PM UTC+1, Ytai wrote:
>>>>
>>>> Why are you separating this into two transactions? It is very uncommon.
>>>> On Feb 10, 2016 5:09 AM, "Lumi" <[email protected]> wrote:
>>>>
>>>>> Hello
>>>>>
>>>>> I found a figure (attached) explaining how the communication should 
>>>>> take place, I believe this helps to clarify the issue.
>>>>>
>>>>> Thanks.
>>>>>
>>>>> On Wednesday, February 10, 2016 at 12:33:25 PM UTC+1, Lumi wrote:
>>>>>>
>>>>>> Dear all,
>>>>>>
>>>>>> I am trying to talk with an external device via ioio-otg twi ports. I 
>>>>>> would like to write and read data to/from the registers of my external 
>>>>>> device.
>>>>>>
>>>>>> Here are samples from my code:
>>>>>>
>>>>>> byte[] request=new byte[]{0x01}; //data that I want to write
>>>>>> byte[] response = new byte[13];
>>>>>>
>>>>>>
>>>>>> In setup()( function:
>>>>>>
>>>>>>
>>>>>> i2c=ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_100KHz, false);
>>>>>>
>>>>>>
>>>>>> In loop() function:
>>>>>>
>>>>>>
>>>>>> if(i2c.writeRead(0x63, false, request, request.length, null, 0)) { 
>>>>>> //Here, I only want to write 
>>>>>>
>>>>>> if (i2c.writeRead(0x63, false, null, 0, response, response.length))// 
>>>>>> Here, I only want to read
>>>>>> {
>>>>>>    for (int i = 0; i < 13; i++) {
>>>>>>       pw.print(String.format("%02X", response[i]));
>>>>>>       pw.print(" ");
>>>>>>    }
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Both writeRead() functions return true.
>>>>>>
>>>>>> However, the data 0x01 in request array is interpreted as an internal 
>>>>>> address of a register in the device. I could not get 0x01 interpreted as 
>>>>>> data and written into external device register.
>>>>>>
>>>>>>
>>>>>> This may not be very clear, but maybe there are some people who can 
>>>>>> already spot the problem.
>>>>>>
>>>>>>
>>>>>> Thank you in advance,
>>>>>>
>>>>>> Regards.
>>>>>>
>>>>>>
>>>>>>
>>>>> On Wednesday, February 10, 2016 at 12:33:25 PM UTC+1, Lumi wrote:
>>>>>>
>>>>>> Dear all,
>>>>>>
>>>>>> I am trying to talk with an external device via ioio-otg twi ports. I 
>>>>>> would like to write and read data to/from the registers of my external 
>>>>>> device.
>>>>>>
>>>>>> Here are samples from my code:
>>>>>>
>>>>>> byte[] request=new byte[]{0x01}; //data that I want to write
>>>>>> byte[] response = new byte[13];
>>>>>>
>>>>>>
>>>>>> In setup()( function:
>>>>>>
>>>>>>
>>>>>> i2c=ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_100KHz, false);
>>>>>>
>>>>>>
>>>>>> In loop() function:
>>>>>>
>>>>>>
>>>>>> if(i2c.writeRead(0x63, false, request, request.length, null, 0)) { 
>>>>>> //Here, I only want to write 
>>>>>>
>>>>>> if (i2c.writeRead(0x63, false, null, 0, response, response.length))// 
>>>>>> Here, I only want to read
>>>>>> {
>>>>>>    for (int i = 0; i < 13; i++) {
>>>>>>       pw.print(String.format("%02X", response[i]));
>>>>>>       pw.print(" ");
>>>>>>    }
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Both writeRead() functions return true.
>>>>>>
>>>>>> However, the data 0x01 in request array is interpreted as an internal 
>>>>>> address of a register in the device. I could not get 0x01 interpreted as 
>>>>>> data and written into external device register.
>>>>>>
>>>>>>
>>>>>> This may not be very clear, but maybe there are some people who can 
>>>>>> already spot the problem.
>>>>>>
>>>>>>
>>>>>> Thank you in advance,
>>>>>>
>>>>>> Regards.
>>>>>>
>>>>>>
>>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "ioio-users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/ioio-users.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ioio-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/ioio-users.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ioio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to