--- /dev/null
+/**
+ * cpio.c
+ *
+ * Set cp2103 GPIO_0 and GPIO_1 for LED connection to get RX/TX activity.
+ * Watch out, the tty is hardcoded.
+ */
+
+#include <netinet/in.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define IOCTL_DEVICERESET 0x8004 /* Get port configuration */
+#define IOCTL_PORTCONFGET 0x8005 /* Get port configuration */
+#define IOCTL_PORTCONFSET 0x8006 /* Set port configuration */
+
+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;
+
+int cpConnect()
+{
+ int ret, ioval;
+ int fd = open("/dev/usb/tts/0", O_RDWR);
+ if (fd < 0) {
+ fprintf(stderr, "cannot open tty\n");
+ return -1;
+ }
+ printf("tty opened\n");
+ return fd;
+}
+
+void cpDisconnect(int fd)
+{
+ if (fd >= 0)
+ close(fd);
+}
+
+int main()
+{
+ int fd;
+ cp2103_port_config_t config;
+ int ret;
+
+ /* open */
+ if ((fd = cpConnect()) < 0)
+ return 1;
+
+ /* Read the current port configuration */
+ if ((ret = ioctl(fd, IOCTL_PORTCONFGET, &config))) {
+ fprintf(stderr, "portconfget ioctl failed %d\n", ret);
+ return 1;
+ }
+
+ /* Set the current port configuration; turn on GPIO_0 and GPIO_1 to get
+ * activity LEDs.
+ */
+ config.reset.mode &= ~0x0300;
+ config.suspend.mode &= ~0x0300;
+ config.reset.latch |= 0x0300;
+ config.enhancedFxn &= ~0x03;
+ if ((ret = ioctl(fd, IOCTL_PORTCONFSET, &config))) {
+ fprintf(stderr, "portconfset ioctl failed %d\n", ret);
+ return 1;
+ }
+
+ /* Reset the part so the changes take effect. */
+ if ((ret = ioctl(fd, IOCTL_DEVICERESET, 0))) {
+ fprintf(stderr, "device reset ioctl %d\n", ret);
+ return 1;
+ }
+
+ cpDisconnect(fd);
+ return 0;
+}