#include #include "fopdrv.h" #include "config.h" bool printed = false; // driver/char/mem.c read_null (/dev/null) ssize_t fop_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { if (count < 2) return 0; if (printed) return 0; ti_am335x_word_t* gpio1 = ioremap(TI_AM335X_GPIO1_ADDR, GPIO_REG_SIZE); barrier(); ti_am335x_word_t gpio = ioread32(gpio1 + GPIO_DATAIN); rmb(); bool on = (gpio & (1< 0; char output[10]; snprintf(output, 10, "%d\n", on); if (copy_to_user(buf, output + *ppos, 2)) return -EFAULT; *ppos += 2; printed = true; return 2; } ssize_t fop_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { // only allow single character as input if (count < 1) return count; if (count > 2) return count; // copy buffer for reading (see [kernel-labs-chrdev] in ../readme.md) char input_buf[10]; if (copy_from_user(input_buf + *ppos, buf, count)) return -EFAULT; ti_am335x_word_t* gpio1 = ioremap(TI_AM335X_GPIO1_ADDR, GPIO_REG_SIZE); barrier(); if (input_buf[0] == '0') { printk(DRV_NAME": OUTPUT OFF\n"); iowrite32((1<