<a name="readme-top"></a>

<!-- PROJECT LOGO -->
<br />
<div align="center">
  <a href="https://github.com/orcasemi/i2c-ftdi-d2xx">
    <img src="images/logo.svg" alt="Logo" width="400" height="100">
  </a>

  <h3 align="center">i2c-ftdi-d2xx</h3>

  <p align="center">
    Interface library for I2C protocol over FTDI-D2XX 
  </p>
</div>

## Installation
```
  npm install --save i2c-ftdi-d2xx
```

## Basic Usage
```
  const ftdi = require("i2c-ftdi-d2xx");

  const devices = await ftdi.list();
  await ftdi.open({serial_number: devices[0]});

  const SLAVE = ANY_NUMBER;
  const TARGET = ANY_NUMBER;
  const DATA = ANY_NUMBER;

  
  let res;
  res = await read({slave: SLAVE, target: TARGET});
  res = await write({slave: SLAVE, target: TARGET, data: DATA}); 

  ftdi.close()
```

## Burst usage
```
  const ftdi = require("i2c-ftdi-d2xx");

  const devices = await ftdi.list();
  await ftdi.open({serial_number: devices[0]});

  const SLAVE = ANY_NUMBER;
  const TARGET = ANY_NUMBER;
  const N = ANY_NUMBER;
  const DATA = [ANY_NUMBER, ANY_NUMBER];

  
  let res;
  res = await read({slave: SLAVE, target: TARGET, n:N});
  res = await write({slave: SLAVE, target: TARGET, data: DATA});


  ftdi.close()
```


## Field/Register Based Usage
```
  const ftdi = require("i2c-ftdi-d2xx");

  const devices = await ftdi.list();
  await ftdi.open({serial_number: devices[0]});

  await ftdi.setRegisterMap({registerMap: VALID_REGISTER_MAP})

  const SLAVE = ANY_NUMBER;
  const TARGET_REGISTER = VALID_REGISTER_NAME;
  const TARGET_FIELD = VALID_FIELD_NAME;
  const DATA = ANY_NUMBER;
  
  let res;
  res = await read({slave: SLAVE, target: TARGET_REGISTER});
  res = await write({slave: SLAVE, target: TARGET_REGISTER, data: DATA});
  res = await read({slave: SLAVE, target: TARGET_FIELD});
  res = await write({slave: SLAVE, target: TARGET_FIELD, data: DATA}); 


  ftdi.close()
```

## Advanced Usage
```
  const ftdi = require("i2c-ftdi-d2xx");

  const devices = await ftdi.list();
  await ftdi.open({serial_number: devices[0]});

  const SLAVE = ANY_NUMBER;
  const READ_TARGET = [ANY_NUMBER, VALID_REGISTER_NAME, VALID_FIELD_NAME];
  const WRITE_TARGET = {ANY_NUMBER: ANY_NUMBER, VALID_REGISTER_NAME: ANY_NUMBER, VALID_FIELD_NAME: ANY_NUMBER};

  await ftdi.setRegisterMap({registerMap: VALID_REGISTER_MAP})
  
  let res;
  res = await read({slave: SLAVE, target: READ_TARGET});
  res = await write({slave: SLAVE, target: WRITE_TARGET}); 

  ftdi.close()
```

<!-- LICENSE -->
## License

Distributed under the TheUnlicense License. See `LICENSE.txt` for more information.

## Development
TODO

## Publish
npm version patch|minor|major
npm login
npm publish
