Lines Matching +full:i2c +full:- +full:slave +full:- +full:addr
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
55 static int cflag = -1; /* SMBus cmd */
56 static int iflag = -1; /* input data */
57 static int oflag = -1; /* output data */
59 static int slave = -1; /* slave address */ variable
67 * The I2C specs say that all addresses below 16 and above or equal
83 "usage: smbmsg [-f dev] -p\n" in usage()
84 " smbmsg [-f dev] -s slave [-F fmt] [-c cmd] [-w] " in usage()
85 "[-i incnt] [-o outcnt] [outdata ...]\n"); in usage()
98 return (-1); in getnum()
104 unsigned char addr; in probe_i2c() local
112 for (addr = MIN_I2C_ADDR; addr < MAX_I2C_ADDR; addr += 2) { in probe_i2c()
113 c.slave = addr; in probe_i2c()
115 if (ioctl(fd, SMB_RECVB, &c) != -1) in probe_i2c()
117 if (ioctl(fd, SMB_QUICK_WRITE, &c) != -1) in probe_i2c()
120 printf("Device @0x%02x: ", addr); in probe_i2c()
136 c.slave = slave; in do_io()
144 if (cflag == -1) { in do_io()
146 if (iflag == -1 && oflag == 0) in do_io()
149 else if (iflag == 0 && oflag == -1) in do_io()
152 else if (iflag == 1 && oflag == -1) { in do_io()
154 if (ioctl(fd, SMB_RECVB, &c) == -1) in do_io()
155 return (-1); in do_io()
159 } else if (iflag == -1 && oflag == 1) { in do_io()
164 return (-2); in do_io()
166 if (iflag == 1 && oflag == -1) { in do_io()
168 if (ioctl(fd, SMB_READB, &c) == -1) in do_io()
169 return (-1); in do_io()
173 } else if (iflag == -1 && oflag == 1) { in do_io()
177 } else if (wflag && iflag == 2 && oflag == -1) { in do_io()
179 if (ioctl(fd, SMB_READW, &c) == -1) in do_io()
180 return (-1); in do_io()
184 } else if (wflag && iflag == -1 && oflag == 2) { in do_io()
194 if (ioctl(fd, SMB_PCALL, &c) == -1) in do_io()
195 return (-1); in do_io()
199 } else if (iflag > 1 && oflag == -1) { in do_io()
203 if (ioctl(fd, SMB_BREAD, &c) == -1) in do_io()
204 return (-1); in do_io()
212 } else if (iflag == -1 && oflag > 1) { in do_io()
219 return (-2); in do_io()
229 while ((i = getopt(argc, argv, "F:c:f:i:o:ps:w")) != -1) in main()
236 if ((cflag = getnum(optarg)) == -1) in main()
249 if ((iflag = getnum(optarg)) == -1) in main()
258 if ((oflag = getnum(optarg)) == -1) in main()
271 if ((slave = getnum(optarg)) == -1) in main()
274 if (slave < MIN_I2C_ADDR || slave >= MAX_I2C_ADDR) in main()
276 "Slave address out of range: %d", in main()
277 slave); in main()
287 argc -= optind; in main()
289 if (errs || (slave != -1 && pflag) || (slave == -1 && !pflag)) in main()
292 !((iflag == 2 && oflag == -1) || in main()
293 (iflag == -1 && oflag == 2) || in main()
296 if (!pflag && iflag == -1 && oflag == -1) in main()
298 if (pflag && (cflag != -1 || iflag != -1 || oflag != -1 || wflag != 0)) in main()
303 errx(EX_USAGE, "Too few arguments for -o count"); in main()
304 if ((n = getnum(*argv)) == -1) in main()
309 argc--; in main()
311 } else for (i = 0; i < oflag; i++, argv++, argc--) { in main()
313 errx(EX_USAGE, "Too few arguments for -o count"); in main()
314 if ((n = getnum(*argv)) == -1) in main()
324 if ((fd = open(dev, O_RDWR)) == -1) in main()
337 if (i == -1) in main()
339 else if (i == -2) in main()