libeasymcp2221 2.0.3
mcp2221.h
Go to the documentation of this file.
1
6#ifndef MCP2221_H
7#define MCP2221_H
8
9#include <stddef.h>
10#include <stdint.h>
11#include "mcp2221_export.h"
12#include "mcp2221_error_codes.h"
13#include "mcp2221_errors.h"
14
16
28typedef struct mcp2221_device mcp2221_t;
29
38
42typedef struct {
43 uint16_t rlen;
44 uint16_t txlen;
45 uint8_t div;
46 uint8_t ack;
47 uint8_t st;
48 uint8_t scl;
49 uint8_t sda;
50 uint8_t confused;
52 uint8_t initialized;
55
59typedef struct {
65
69typedef enum {
74
115 uint16_t vid, uint16_t pid, int devnum, const char *usbserial,
116 int usb_read_timeout_ms, int cmd_retries, int debug_messages,
117 int trace_packets, mcp2221_t **out_dev);
118
150 uint16_t vid, uint16_t pid, int devnum, const char *usbserial,
151 int usb_read_timeout_ms, int cmd_retries, int debug_messages,
152 int trace_packets, int scan_serial, mcp2221_t **out_dev);
153
174 uint16_t vid, uint16_t pid, int devnum, const char *usbserial,
175 int i2c_speed_hz, mcp2221_t **out_dev);
176
199 uint16_t vid, uint16_t pid, int devnum, const char *usbserial,
200 int i2c_speed_hz, int scan_serial, mcp2221_t **out_dev);
201
214
231
250MCP2221_API mcp2221_error_code_t mcp2221_send_cmd(mcp2221_t *dev, const uint8_t *buf, size_t len, uint8_t *response /* 64-Byte Buffer */);
251
265
287MCP2221_API mcp2221_error_code_t mcp2221_i2c_write_ex(mcp2221_t *dev, uint8_t addr, const uint8_t *data, size_t len,
288 mcp2221_i2c_kind_t kind, int i2c_timeout_ms);
289
308MCP2221_API mcp2221_error_code_t mcp2221_i2c_write_simple(mcp2221_t *dev, uint8_t addr, const uint8_t *data, size_t len, mcp2221_i2c_kind_t kind);
309
333MCP2221_API mcp2221_error_code_t mcp2221_i2c_read_ex(mcp2221_t *dev, uint8_t addr, uint8_t *data, size_t len,
334 mcp2221_i2c_kind_t kind, int i2c_timeout_ms);
335
354MCP2221_API mcp2221_error_code_t mcp2221_i2c_read_simple(mcp2221_t *dev, uint8_t addr, uint8_t *data, size_t len, mcp2221_i2c_kind_t kind);
355
366
382 mcp2221_t *dev,
383 mcp2221_revision_t *revision);
384
394
396#endif // MCP2221_H
mcp2221_error_code_t mcp2221_reset(mcp2221_t *dev)
Reset the MCP2221.
mcp2221_error_code_t mcp2221_open(uint16_t vid, uint16_t pid, int devnum, const char *usbserial, int usb_read_timeout_ms, int cmd_retries, int debug_messages, int trace_packets, mcp2221_t **out_dev)
Open an MCP2221 device.
mcp2221_error_code_t mcp2221_i2c_set_speed(mcp2221_t *dev, uint32_t i2c_speed_hz)
Set the I2C bus clock frequency.
mcp2221_error_code_t mcp2221_send_cmd(mcp2221_t *dev, const uint8_t *buf, size_t len, uint8_t *response)
Send a raw MCP2221 command.
mcp2221_error_code_t mcp2221_i2c_write_ex(mcp2221_t *dev, uint8_t addr, const uint8_t *data, size_t len, mcp2221_i2c_kind_t kind, int i2c_timeout_ms)
Write data to an I2C device with an explicit transfer timeout.
mcp2221_error_code_t mcp2221_i2c_read_simple(mcp2221_t *dev, uint8_t addr, uint8_t *data, size_t len, mcp2221_i2c_kind_t kind)
Read data from an I2C device using the default transfer timeout.
mcp2221_error_code_t mcp2221_i2c_read_ex(mcp2221_t *dev, uint8_t addr, uint8_t *data, size_t len, mcp2221_i2c_kind_t kind, int i2c_timeout_ms)
Read data from an I2C device with an explicit transfer timeout.
mcp2221_error_code_t mcp2221_i2c_status(mcp2221_t *dev, mcp2221_i2c_status_t *st)
Read the current MCP2221 I2C engine status.
mcp2221_error_code_t mcp2221_open_simple(uint16_t vid, uint16_t pid, int devnum, const char *usbserial, int i2c_speed_hz, mcp2221_t **out_dev)
Open and initialize an MCP2221 using an EasyMCP2221-style setup.
mcp2221_error_code_t mcp2221_i2c_release(mcp2221_t *dev)
Release the MCP2221 I2C engine.
mcp2221_error_code_t mcp2221_i2c_write_simple(mcp2221_t *dev, uint8_t addr, const uint8_t *data, size_t len, mcp2221_i2c_kind_t kind)
Write data to an I2C device using the default transfer timeout.
struct mcp2221_device mcp2221_t
Opaque MCP2221 device handle.
Definition: mcp2221.h:28
mcp2221_error_code_t mcp2221_open_scan(uint16_t vid, uint16_t pid, int devnum, const char *usbserial, int usb_read_timeout_ms, int cmd_retries, int debug_messages, int trace_packets, int scan_serial, mcp2221_t **out_dev)
Open an MCP2221 device, optionally scanning the flash serial number.
mcp2221_error_code_t mcp2221_revision(mcp2221_t *dev, mcp2221_revision_t *revision)
Read the MCP2221 hardware and firmware revision.
void mcp2221_close(mcp2221_t *dev)
Close an MCP2221 device handle.
mcp2221_error_code_t mcp2221_open_simple_scan(uint16_t vid, uint16_t pid, int devnum, const char *usbserial, int i2c_speed_hz, int scan_serial, mcp2221_t **out_dev)
Open and initialize an MCP2221 with optional flash-serial scanning.
mcp2221_i2c_kind_t
I2C transfer kind.
Definition: mcp2221.h:69
@ MCP2221_I2C_KIND_NORMAL
Definition: mcp2221.h:70
@ MCP2221_I2C_KIND_REPEATED_START
Definition: mcp2221.h:71
@ MCP2221_I2C_KIND_NO_STOP
Definition: mcp2221.h:72
Error codes returned by the libeasymcp2221 v2 API.
mcp2221_error_code_t
Error codes used by libeasymcp2221.
Error-code formatting helpers.
Public symbol-visibility and C/C++ linkage helpers.
#define MCP2221_API
Export or import a public libeasymcp2221 API symbol.
#define MCP2221_END_DECLS
End a block started by MCP2221_BEGIN_DECLS.
#define MCP2221_BEGIN_DECLS
Begin a block of declarations using C linkage.
Caller-owned I2C target context.
Snapshot of the MCP2221 I2C engine status.
Definition: mcp2221.h:42
uint16_t txlen
Definition: mcp2221.h:44
uint8_t initialized
Definition: mcp2221.h:52
uint8_t confused
Definition: mcp2221.h:50
MCP2221 hardware and firmware revision.
Definition: mcp2221.h:59
uint8_t hardware_major
Definition: mcp2221.h:60
uint8_t hardware_minor
Definition: mcp2221.h:61
uint8_t firmware_minor
Definition: mcp2221.h:63
uint8_t firmware_major
Definition: mcp2221.h:62