Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Christian Eckl
Kernelmodul_Sevenseg
Commits
63bd0e35
Commit
63bd0e35
authored
Dec 12, 2017
by
Christian Eckl
Browse files
Update sevenseg.c
parent
6e582b3b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Sevenseg/sevenseg.c
View file @
63bd0e35
...
...
@@ -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
änge
r d
er Nachricht
#define BUF_LEN 1
//
Maximale
L
änge
ein
er 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment