diff --git a/kernel/kmod.c b/kernel/kmod.c index 875c2dc1d8f393acaeea192ec5aef3bc166ea5f8..d36d71b35f67fbc0905942e3c69fbcf1d41d2432 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -76,13 +76,20 @@ static enum hrtimer_restart timer_callback(struct hrtimer *timer) { return HRTIMER_RESTART; } +static void send_bit(uint8_t bit) { + gpio_set_value(GPIO_PIN, bit); + udelay(1); +} + static void send_byte(uint8_t byte) { + send_bit(0); + for (int i = 0; i < 8; i++) { int bit = (byte >> (7 - i)) & 1; - - gpio_set_value(GPIO_PIN, bit); - udelay(1); + send_bit(bit); } + + send_bit(1); } static void send_data(const void *data, size_t length) { @@ -170,7 +177,7 @@ static int __init lkm_init(void) printk(KERN_ALERT "Failed to request GPIO pin\n"); return -1; } - gpio_direction_output(GPIO_PIN, 0); + gpio_direction_output(GPIO_PIN, 1); timed_thread = kthread_run(timed_thread_fn, NULL, "timed_thread"); if (IS_ERR(timed_thread)) {