Listing 5. Read/Write Relays unsigned char readRelay8(int iRelay8Address) { /* Read Relay8 register and return the value */ return(readb(iRelay8Address)); } void writeRelay8(int iRelay8Address, unsigned char ucValues) { /* Write Relay8 register with the values */ writeb(ucValues, iRelay8Address); } // Excerpt from ioctl function: switch(cmd) { case RELAY8_IOC_READ_RELAYS: /* Read Relay8 relay values */ ucRelayValues = readRelay8(relay8_base + RELAY8_CONTROL); if (copy_to_user((typeof(relay8_relayValues)) arg, &ucRelayValues, sizeof(relay8_relayValues))) { ret = -EFAULT; } break; case RELAY8_IOC_WRITE_RELAYS: /* Write Relay8 relay values */ writeRelay8(relay8_base + RELAY8_CONTROL, *(typeof(relay8_relayValues)) arg); break; default: ret = -ENOTTY; }