--- /dev/null
+#
\ No newline at end of file
--- /dev/null
+obj-m := kgpio_irqsk.o
+
+all:
+ make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
+clean:
+ make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
\ No newline at end of file
--- /dev/null
+CTLOUT=GPIO17
+CTLIN=GPIO27
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+source ./ins.conf
+
+CTLOUT_LINE=$(cat /sys/kernel/debug/gpio | grep $CTLOUT)
+CTLIN_LINE=$(cat /sys/kernel/debug/gpio | grep $CTLIN)
+
+
+if [[ "$CTLOUT_LINE" == "" ]]
+then
+ echo "couldn't find $CTLOUT"
+ exit 1
+fi
+
+if [[ "$CTLIN_LINE" == "" ]]
+then
+ echo "couldn't find $CTLIN"
+ exit 1
+fi
+
+CTLOUT_LINE=$(echo $CTLOUT_LINE | cut -d "-" -f 2)
+CTLOUT_LINE=$(echo $CTLOUT_LINE | cut -d " " -f 1)
+
+CTLIN_LINE=$(echo $CTLIN_LINE | cut -d "-" -f 2)
+CTLIN_LINE=$(echo $CTLIN_LINE | cut -d " " -f 1)
+
+echo "CTL OUT: $CTLOUT = $CTLOUT_LINE"
+echo "CTL IN : $CTLIN = $CTLIN_LINE"
+
+insmod kgpio_irqsk.ko gpio_ctl_o=$CTLOUT_LINE gpio_ctl_i=$CTLIN_LINE
+
--- /dev/null
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/ip.h>
+#include <linux/tcp.h>
+#include <linux/udp.h>
+#include <linux/string.h>
+#include <linux/gpio.h>
+#include <linux/interrupt.h>
+#include <linux/workqueue.h>
+#include <linux/sched.h>
+#include <linux/time.h>
+#include <linux/delay.h>
+
+static DECLARE_WAIT_QUEUE_HEAD(this_wq);
+
+static int condition = 0;
+
+static struct work_struct job;
+
+static int gpio_ctl_o;
+static int gpio_ctl_i;
+
+module_param(gpio_ctl_o, int, 0664);
+module_param(gpio_ctl_i, int, 0664);
+
+static unsigned int gpio_ctl_i_irq;
+
+static void job_handler(struct work_struct* work){
+
+
+ printk(KERN_INFO "waitqueue handler: %s\n", __FUNCTION__);
+
+ msleep(5000);
+
+ gpio_set_value(gpio_ctl_o, IRQF_TRIGGER_RISING);
+
+ printk(KERN_INFO "up after 5000ms\n");
+
+ condition = 1;
+
+ wake_up_interruptible(&this_wq);
+
+
+}
+
+static irqreturn_t gpio_irq_handler(int irq, void *dev_id) {
+ printk("gpio irqsk: interrupt was triggered and ISR was called\n");
+ return IRQ_HANDLED;
+}
+
+static int __init ksock_gpio_init(void) {
+
+ if(gpio_request(gpio_ctl_o, "gpio-ctl-o")) {
+ printk("gpio irqsk: can't allocate gpio_ctl_o: %d\n", gpio_ctl_o);
+ return -1;
+ }
+
+
+ if(gpio_request(gpio_ctl_i, "gpio-ctl-i")) {
+ printk("gpio irqsk: can't allocate gpio_ctl_i: %d\n", gpio_ctl_i);
+ gpio_free(gpio_ctl_o);
+ return -1;
+ }
+
+ if(gpio_direction_output(gpio_ctl_o, IRQF_TRIGGER_NONE)) {
+ printk("gpio irqsk: can't set gpio_ctl_o to output\n");
+ gpio_free(gpio_ctl_o);
+ gpio_free(gpio_ctl_i);
+ return -1;
+ }
+
+ if(gpio_direction_input(gpio_ctl_i)) {
+ printk("gpio irqsk: can't set gpio_ctl_i to input\n");
+ gpio_free(gpio_ctl_o);
+ gpio_free(gpio_ctl_i);
+ return -1;
+ }
+
+ gpio_ctl_i_irq = gpio_to_irq(gpio_ctl_i);
+
+ if(request_irq(gpio_ctl_i_irq, gpio_irq_handler, IRQF_TRIGGER_RISING, "gpio_ctl_i_irq", NULL) != 0) {
+ printk("gpio irqsk: can't request interrupt\n");
+ gpio_free(gpio_ctl_o);
+ gpio_free(gpio_ctl_i);
+ return -1;
+ }
+
+
+ printk("gpio irqsk: gpio_ctl_i to IRQ %d\n", gpio_ctl_i_irq);
+
+ printk("gpio irqsk: module is initialized into the kernel\n");
+
+ INIT_WORK(&job, job_handler);
+
+ schedule_work(&job);
+
+ printk(KERN_INFO "putting to sleep: %s\n", __FUNCTION__);
+
+ wait_event_interruptible(this_wq, condition != 0);
+
+ printk(KERN_INFO "woken up\n");
+
+
+ return 0;
+
+}
+
+static void __exit ksock_gpio_exit(void) {
+
+ gpio_free(gpio_ctl_o);
+ gpio_free(gpio_ctl_i);
+ free_irq(gpio_ctl_i_irq, NULL);
+ printk("gpio irqsk: module is removed from the kernel\n");
+}
+
+module_init(ksock_gpio_init);
+module_exit(ksock_gpio_exit);
+
+MODULE_LICENSE("GPL");
\ No newline at end of file
+++ /dev/null
-#
\ No newline at end of file
+++ /dev/null
-obj-m := ksock_gpio.o
-
-all:
- make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
-clean:
- make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
\ No newline at end of file
+++ /dev/null
-CTLOUT=GPIO17
-CTLIN=GPIO27
\ No newline at end of file
+++ /dev/null
-#!/bin/bash
-
-source ./ins.conf
-
-CTLOUT_LINE=$(cat /sys/kernel/debug/gpio | grep $CTLOUT)
-CTLIN_LINE=$(cat /sys/kernel/debug/gpio | grep $CTLIN)
-
-
-if [[ "$CTLOUT_LINE" == "" ]]
-then
- echo "couldn't find $CTLOUT"
- exit 1
-fi
-
-if [[ "$CTLIN_LINE" == "" ]]
-then
- echo "couldn't find $CTLIN"
- exit 1
-fi
-
-CTLOUT_LINE=$(echo $CTLOUT_LINE | cut -d "-" -f 2)
-CTLOUT_LINE=$(echo $CTLOUT_LINE | cut -d " " -f 1)
-
-CTLIN_LINE=$(echo $CTLIN_LINE | cut -d "-" -f 2)
-CTLIN_LINE=$(echo $CTLIN_LINE | cut -d " " -f 1)
-
-echo "CTL OUT: $CTLOUT = $CTLOUT_LINE"
-echo "CTL IN : $CTLIN = $CTLIN_LINE"
-
-insmod ksock_gpio.ko gpio_ctl_o=$CTLOUT_LINE gpio_ctl_i=$CTLIN_LINE
-
+++ /dev/null
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/ip.h>
-#include <linux/tcp.h>
-#include <linux/udp.h>
-#include <linux/string.h>
-#include <linux/gpio.h>
-#include <linux/interrupt.h>
-#include <linux/workqueue.h>
-#include <linux/sched.h>
-#include <linux/time.h>
-#include <linux/delay.h>
-
-static DECLARE_WAIT_QUEUE_HEAD(this_wq);
-
-static int condition = 0;
-
-static struct work_struct job;
-
-static int gpio_ctl_o;
-static int gpio_ctl_i;
-
-module_param(gpio_ctl_o, int, 0664);
-module_param(gpio_ctl_i, int, 0664);
-
-static unsigned int gpio_ctl_i_irq;
-
-static void job_handler(struct work_struct* work){
-
-
- printk(KERN_INFO "waitqueue handler: %s\n", __FUNCTION__);
-
- msleep(5000);
-
- gpio_set_value(gpio_ctl_o, IRQF_TRIGGER_RISING);
-
- printk(KERN_INFO "up after 5000ms\n");
-
- condition = 1;
-
- wake_up_interruptible(&this_wq);
-
-
-}
-
-static irqreturn_t gpio_irq_handler(int irq, void *dev_id) {
- printk("sock gpio: interrupt was triggered and ISR was called\n");
- return IRQ_HANDLED;
-}
-
-static int __init ksock_gpio_init(void) {
-
- if(gpio_request(gpio_ctl_o, "gpio-ctl-o")) {
- printk("sock gpio: can't allocate gpio_ctl_o: %d\n", gpio_ctl_o);
- return -1;
- }
-
-
- if(gpio_request(gpio_ctl_i, "gpio-ctl-i")) {
- printk("sock gpio: can't allocate gpio_ctl_i: %d\n", gpio_ctl_i);
- gpio_free(gpio_ctl_o);
- return -1;
- }
-
- if(gpio_direction_output(gpio_ctl_o, IRQF_TRIGGER_NONE)) {
- printk("sock gpio: can't set gpio_ctl_o to output\n");
- gpio_free(gpio_ctl_o);
- gpio_free(gpio_ctl_i);
- return -1;
- }
-
- if(gpio_direction_input(gpio_ctl_i)) {
- printk("sock gpio: can't set gpio_ctl_i to input\n");
- gpio_free(gpio_ctl_o);
- gpio_free(gpio_ctl_i);
- return -1;
- }
-
- gpio_ctl_i_irq = gpio_to_irq(gpio_ctl_i);
-
- if(request_irq(gpio_ctl_i_irq, gpio_irq_handler, IRQF_TRIGGER_RISING, "gpio_ctl_i_irq", NULL) != 0) {
- printk("sock gpio: can't request interrupt\n");
- gpio_free(gpio_ctl_o);
- gpio_free(gpio_ctl_i);
- return -1;
- }
-
-
- printk("sock gpio: gpio_ctl_i to IRQ %d\n", gpio_ctl_i_irq);
-
- printk("sock gpio: module is initialized into the kernel\n");
-
- INIT_WORK(&job, job_handler);
-
- schedule_work(&job);
-
- printk(KERN_INFO "putting to sleep: %s\n", __FUNCTION__);
-
- wait_event_interruptible(this_wq, condition != 0);
-
- printk(KERN_INFO "woken up\n");
-
-
- return 0;
-
-}
-
-static void __exit ksock_gpio_exit(void) {
-
- gpio_free(gpio_ctl_o);
- gpio_free(gpio_ctl_i);
- free_irq(gpio_ctl_i_irq, NULL);
- printk("sock gpio: module is removed from the kernel\n");
-}
-
-module_init(ksock_gpio_init);
-module_exit(ksock_gpio_exit);
-
-MODULE_LICENSE("GPL");
\ No newline at end of file