X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=src%2Fexamples%2Fcpfactory.c;fp=src%2Fexamples%2Fcpfactory.c;h=ea16ac6c53ec5f8229fa0eb9d14704dcf7bcfb22;hb=6000a45218d62d5e28a5b6c5150bdd2b84b84a01;hp=a3fc0b4637208ac18d7a564da1e1780ae07414e5;hpb=3c0ea1205a69103a17f39f9b0a96d99207fe0451;p=cp210x.git diff --git a/src/examples/cpfactory.c b/src/examples/cpfactory.c index a3fc0b4..ea16ac6 100644 --- a/src/examples/cpfactory.c +++ b/src/examples/cpfactory.c @@ -4,48 +4,19 @@ * Reset the cp2103 IO registers back to factory defaults. */ +#include +#include #include #include #include #include #include #include -#include - -/* CP2103 ioctls */ -#define IOCTL_GPIOGET 0x8000 /* Get gpio bits */ -#define IOCTL_GPIOSET 0x8001 /* Set gpio bits */ -#define IOCTL_GPIOBIC 0x8002 /* Clear specific gpio bit(s) */ -#define IOCTL_GPIOBIS 0x8003 /* Set specific gpio bit(s) */ - -/* CP210x ioctls principally used during initial device configuration */ -#define IOCTL_DEVICERESET 0x8004 /* Reset the cp210x */ -#define IOCTL_PORTCONFGET 0x8005 /* Get port configuration */ -#define IOCTL_PORTCONFSET 0x8006 /* Set port configuration */ -#define IOCTL_SETVID 0x8007 /* Set vendor id */ -#define IOCTL_SETPID 0x8008 /* Set product id */ -#define IOCTL_SETMFG 0x8009 /* Set manufacturer string */ -#define IOCTL_SETPRODUCT 0x800a /* Set product string */ -#define IOCTL_SETSERIAL 0x800b /* Set serial number string */ -#define IOCTL_SETDEVVER 0x800c /* set device version id */ -/* FIXME: where is IOCTL_SETMFG? */ - - -typedef struct { - uint16_t mode; - uint16_t lowPower; - uint16_t latch; -} cp2103_port_state_t; - -typedef struct { - cp2103_port_state_t reset; - cp2103_port_state_t suspend; - uint8_t enhancedFxn; -} cp2103_port_config_t; +#include +#include int cpConnect(char* device) { - int ret, ioval; int fd = open(device, O_RDWR); if (fd < 0) { fprintf(stderr, "cannot open tty\n"); @@ -64,11 +35,8 @@ void cpDisconnect(int fd) int main(int argc, char* argv[]) { int fd; - cp2103_port_config_t config; - cp2103_port_config_t saveConfig; - uint8_t saveGpio; + struct cp210x_port_config config; int ret; - int i; if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); @@ -80,71 +48,26 @@ int main(int argc, char* argv[]) return 1; /* Read the current port configuration */ - if ((ret = ioctl(fd, IOCTL_PORTCONFGET, &config))) { + if ((ret = ioctl(fd, CP210x_IOCTL_PORTCONFGET, &config))) { fprintf(stderr, "portconfget ioctl failed %d\n", ret); return 1; } printf("port config received\n"); - /* Mode and latch bit to pin assignments. See AN223 from SiLabs: - * https://www.silabs.com/Support Documents/TechnicalDocs/an223.pdf - * - * 15 - /SUSPEND Can't configure latch - * 14 - SUSPEND Can't configure latch - * 13 - unused - * 12 - unused - * 11 - GPIO_3 - * 10 - GPIO_2 - * 9 - GPIO_1 - * 8 - GPIO_0 - * 7 - /CTS - * 6 - /RTS - * 5 - RXD Note: set latch value to '1' for proper operation. - * 4 - TXD - * 3 - /DSR - * 2 - /DTR - * 1 - /DCD - * 0 - /RI - * - * Mode bit values: - * 1 - A value of one in a bit places the corresponding IO pin in push- - * pull output mode. - * 0 - A value of zero in a bit places the corresponding IO pin in open- - * drain output mode. - * - * Latch bit values: - * 1 - A value of one in a bit sets the corresponding IO pin's value to - * output high. If the mode is push-pull, the pin sources current - * from VIO. If the mode is open-drain, the pin driver is in high - * impedance. - * 0 - A value of zero in a bit sets the corresponding IO pin's value to - * output low. In either mode, push-pull or open-drain, the pin - * driver sinks current to ground. - * - * Enhanced function bits: - * 7 - GPIO dynamic suspend, for 4 GPIO signals - * 6 - Serial dynamic suspend, for 8 UART/Modem signals - * 5 - unused, leave zero - * 4 - Enable weak pull-ups - * 3 - unused, leave zero - * 2 - /RS485_TX on GPIO_2 - * 1 - /RXLED on GPIO_1 - * 0 - /TXLED on GPIO_0 - */ config.reset.mode = 0xf054; config.suspend.mode = 0xf054; config.reset.latch = 0x0fff; /* RXD must be 1 for some reason */ config.suspend.latch = 0x0fff; /* RXD must be 1 for some reason */ config.enhancedFxn = 0x00; - if ((ret = ioctl(fd, IOCTL_PORTCONFSET, &config))) { + if ((ret = ioctl(fd, CP210x_IOCTL_PORTCONFSET, &config))) { fprintf(stderr, "portconfset ioctl failed %d\n", ret); return 1; } printf("port config altered\n"); /* Reset the part */ - if ((ret = ioctl(fd, IOCTL_DEVICERESET, 0))) { + if ((ret = ioctl(fd, CP210x_IOCTL_DEVICERESET, 0))) { fprintf(stderr, "device reset ioctl failed %d\n", ret); return 1; }