Commit 63bd0e35 authored by Christian Eckl's avatar Christian Eckl
Browse files

Update sevenseg.c

parent 6e582b3b
......@@ -4,8 +4,8 @@
* Loadable Kernel Module (LKM) fuer eine 7-Segment-Anzeige *
* Christian Eckl AI-3 630213 *
* *
* *
* *
* Eine ausführliche Dokumentation finden Sie unter: *
* https://mygit.th-deg.de/ce12213/Kernelmodul_Sevenseg.git *
* *
* *
* *
......@@ -30,21 +30,21 @@
#include <linux/kernel.h> //Library fuer KERN_INFO
#define A1 17 // Pin 17 wird durch A1 ersetzt (7SEG a)
#define A2 27 // Pin 27 wird durch A2 ersetzt (7SEG b)
#define A3 22 // Pin 12 wird durch A3 ersetzt (7SEG c)
#define A4 5 // Pin 5 wird durch A4 ersetzt (7SEG d)
#define A5 6 // Pin 6 wird durch A5 ersetzt (7SEG e)
#define A6 13 // Pin 13 wird durch A6 ersetzt (7SEG f)
#define A7 19 // Pin 19 wird durch A7 ersetzt (7SEG g)
#define A8 26 // Pin 26 wird durch A8 ersetzt (7SEG dot)
#define Sa 17 // Pin 17 wird durch A1 ersetzt (7SEG a)
#define Sb 27 // Pin 27 wird durch A2 ersetzt (7SEG b)
#define Sc 22 // Pin 12 wird durch A3 ersetzt (7SEG c)
#define Sd 5 // Pin 5 wird durch A4 ersetzt (7SEG d)
#define Se 6 // Pin 6 wird durch A5 ersetzt (7SEG e)
#define Sf 13 // Pin 13 wird durch A6 ersetzt (7SEG f)
#define Sg 19 // Pin 19 wird durch A7 ersetzt (7SEG g)
#define Sp 26 // Pin 26 wird durch A8 ersetzt (7SEG dot)
#define SUCCESS 0
#define DEVICE_NAME "sevenseg" // Device-Name
#define BUF_LEN 1 //Maximale länger der Nachricht
#define BUF_LEN 1 // Maximale Länge einer Nachricht
MODULE_LICENSE("GPL"); //Lizenzbestimmung
MODULE_LICENSE("GPL"); //Lizenzbestimmung
/* Modul-Dokumentation */
MODULE_AUTHOR("Christian Eckl <christian.eckl@stud.th-deg.de>");
......@@ -71,135 +71,177 @@ void seven_status(int display) { //Switch-case fuer die Anzeigemoeg
switch (display) {
case 0 :
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 0 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt 0 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 1);
gpio_set_value(Sp, 1);
break;
case 1:
gpio_set_value(A1, 1);
gpio_set_value(A2, 1);
gpio_set_value(A3, 1);
gpio_set_value(A4, 1);
gpio_set_value(A5, 1); // 7-Segment zeigt 1 an
gpio_set_value(A6, 1);
gpio_set_value(A7, 1);
gpio_set_value(A8, 1);
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 1);
gpio_set_value(Se, 1); // 7-Segment zeigt 1 an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 1);
gpio_set_value(Sp, 1);
break;
case 2:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 2 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 1);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt 2 an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 3:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 3 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 1); // 7-Segment zeigt 3 an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 4:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 4 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 1);
gpio_set_value(Se, 1); // 7-Segment zeigt 4 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 5:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 5 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 1); // 7-Segment zeigt 5 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 6:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 6 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt 6 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 0);
break;
case 7:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 7 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 1);
gpio_set_value(Se, 1); // 7-Segment zeigt 7 an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 1);
gpio_set_value(Sp, 1);
break;
case 8:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 8 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt 8 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 9:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 9 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 1); // 7-Segment zeigt 9 an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
/*case 9:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 9 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
case 'a':
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt a an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 9:
gpio_set_value(A1, 0);
gpio_set_value(A2, 0);
gpio_set_value(A3, 0);
gpio_set_value(A4, 0);
gpio_set_value(A5, 0); // 7-Segment zeigt 9 an
gpio_set_value(A6, 0);
gpio_set_value(A7, 0);
gpio_set_value(A8, 0);
case 'b':
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt b an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 'c':
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 1);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt c an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
*/
case 'd':
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 0);
gpio_set_value(Sc, 0);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt d an
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 'e':
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 1);
gpio_set_value(Sd, 0);
gpio_set_value(Se, 0); // 7-Segment zeigt e an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
case 'f':
gpio_set_value(Sa, 0);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 1);
gpio_set_value(Sd, 1);
gpio_set_value(Se, 0); // 7-Segment zeigt f an
gpio_set_value(Sf, 0);
gpio_set_value(Sg, 0);
gpio_set_value(Sp, 1);
break;
default:
gpio_set_value(A1, 1);
gpio_set_value(A2, 1);
gpio_set_value(A3, 1);
gpio_set_value(A4, 1);
gpio_set_value(A5, 1); //default alle Pins auf LOW gesetzt
gpio_set_value(A6, 1);
gpio_set_value(A7, 1);
gpio_set_value(A8, 1);
gpio_set_value(Sa, 1);
gpio_set_value(Sb, 1);
gpio_set_value(Sc, 1);
gpio_set_value(Sd, 1);
gpio_set_value(Se, 1); //default alle Pins auf LOW gesetzt
gpio_set_value(Sf, 1);
gpio_set_value(Sg, 1);
gpio_set_value(Sp, 1);
break;
}
......@@ -245,7 +287,7 @@ static ssize_t seven_write(struct file *filep, const char *buffer, size_t len, l
memset(msg, 0, 32);
count = copy_from_user(msg, buffer, len); // Kopieren des Strings aus dem User-Space which open and write this device
count = copy_from_user(msg, buffer, len); // Kopieren des Strings aus dem User-Space
if (msg[0] == '1') {
seven_status(1);
......@@ -271,9 +313,30 @@ static ssize_t seven_write(struct file *filep, const char *buffer, size_t len, l
else if (msg[0] == '8') {
seven_status(8);
}
else if (msg[0] == '9') {
seven_status(9);
}
else if (msg[0] == 'a') {
seven_status('a');
}
else if (msg[0] == 'b') {
seven_status('b');
}
else if (msg[0] == 'c') {
seven_status('c');
}
else if (msg[0] == 'd') {
seven_status('d');
}
else if (msg[0] == 'e') {
seven_status('e');
}
else if (msg[0] == 'f') {
seven_status('f');
}
else
{
seven_status(0);
seven_status('default');
}
return len;
......@@ -283,36 +346,36 @@ static ssize_t seven_write(struct file *filep, const char *buffer, size_t len, l
void seven_gpio_init(void) { //Initialisiert die GPIO-Pins (gpio_request)
printk(KERN_INFO "SEVENSEG: starting gpio...");
gpio_request(A1, "A1");
gpio_request(A2, "A2");
gpio_request(A3, "A3");
gpio_request(A4, "A4");
gpio_request(A5, "A5");
gpio_request(A6, "A6");
gpio_request(A7, "A7");
gpio_request(A8, "A8");
gpio_direction_output(A1, 0); //Legt fest das der Pin als Output-Pin ansprechbar ist (gpio_direction_output)
gpio_direction_output(A2, 0);
gpio_direction_output(A3, 0);
gpio_direction_output(A4, 0);
gpio_direction_output(A5, 0);
gpio_direction_output(A6, 0);
gpio_direction_output(A7, 0);
gpio_direction_output(A8, 0);
gpio_request(Sa, "Sa");
gpio_request(Sb, "Sb");
gpio_request(Sc, "Sc");
gpio_request(Sd, "Sd");
gpio_request(Se, "Se");
gpio_request(Sf, "Sf");
gpio_request(Sg, "Sg");
gpio_request(Sp, "Sp");
gpio_direction_output(Sa, 0); //Legt fest das der Pin als Output-Pin ansprechbar ist (gpio_direction_output)
gpio_direction_output(Sb, 0);
gpio_direction_output(Sc, 0);
gpio_direction_output(Sd, 0);
gpio_direction_output(Se, 0);
gpio_direction_output(Sf, 0);
gpio_direction_output(Sg, 0);
gpio_direction_output(Sp, 0);
printk(KERN_INFO "SEVENSEG: starting gpio done.");
}
void seven_gpio_exit(void) { //Beim Rausladen des LKM werden die Pins wieder freigegeben (gpio_free)
printk(KERN_INFO "SEVENSEG: stopping gpio...");
gpio_free(A1);
gpio_free(A2);
gpio_free(A3);
gpio_free(A4);
gpio_free(A5);
gpio_free(A6);
gpio_free(A7);
gpio_free(A8);
gpio_free(Sa);
gpio_free(Sb);
gpio_free(Sc);
gpio_free(Sd);
gpio_free(Se);
gpio_free(Sf);
gpio_free(Sg);
gpio_free(Sp);
printk(KERN_INFO "SEVENSEG: stopping gpio done.");
}
......@@ -335,4 +398,4 @@ static void __exit seven_exit(void) {
}
module_init(seven_init); //Alle Funktionen in led_init werden im Modul geladen
module_exit(seven_exit); //Alle Funktionen in led_init werden entladen
module_exit(seven_exit); //Alle Funktionen in led_init werden entladen
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment