Skip to content
Snippets Groups Projects
Commit 8a8b2544 authored by hyunjun_cho's avatar hyunjun_cho
Browse files

personel seat management Pi

parents ccd41f96 a5187150
No related branches found
No related tags found
No related merge requests found
# system_programming
\ No newline at end of file
File deleted
app3 0 → 100755
File added
......@@ -5,6 +5,14 @@
#include <fcntl.h>
#include <math.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/types.h>
......@@ -20,13 +28,11 @@
#define IOCTL_MAGIC_NUMBER2 'J'
#define IOCTL_CMD_SET_DIRECTION _IOWR(IOCTL_MAGIC_NUMBER,0,int)
#define IOCTL_CMD_SET_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
#define IOCTL_CMD_SET_TEMP_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_TEMP_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
#define IOCTL_CMD_SET_DIRECTION2 _IOWR(IOCTL_MAGIC_NUMBER2, 0, int)
#define IOCTL_CMD_SET_BLINK2 _IOWR(IOCTL_MAGIC_NUMBER2, 1, int)
#define IOCTL_CMD_SET_OFF2 _IOWR(IOCTL_MAGIC_NUMBER2, 2, int)
#define IOCTL_CMD_SET_SOUND_BLINK _IOWR(IOCTL_MAGIC_NUMBER2, 1, int)
#define IOCTL_CMD_SET_SOUND_OFF _IOWR(IOCTL_MAGIC_NUMBER2, 2, int)
int main() {
int temp_fd = open(TEMP_DEV_PATH, O_RDWR);
......@@ -36,11 +42,11 @@ int main() {
int led_fd, led2_fd;
int led_data = 1, led2_data = 1;
__pid_t pid;
led_fd = open(LED_DEV_PATH, O_RDONLY);
led2_fd = open(LED2_DEV_PATH, O_RDONLY);
ioctl(led2_fd, IOCTL_CMD_SET_DIRECTION2, &led2_data);
ioctl(led_fd, IOCTL_CMD_SET_DIRECTION, &led_data);
char config[3] = {0, };
int data[2] = {0, };
......@@ -63,6 +69,22 @@ int main() {
int temp = 0, j = 0;
float cTemp = 0, fTemp = 0;
write(temp_fd, &reg, 1);
pid = fork();
if(pid == 0) {
while(1) {
read(sound_fd, &sound_data, sizeof(int));
if(sound_data > 660) {
ioctl(led2_fd, IOCTL_CMD_SET_SOUND_BLINK, &led2_data);
}
printf("data : %d\n", sound_data);
sleep(3);
ioctl(led2_fd, IOCTL_CMD_SET_SOUND_OFF, &led2_data);
}
}
else {
while(1) {
for(int i = 0; i < 2; i++) {
read(temp_fd, &(data[i]), 1);
......@@ -76,6 +98,7 @@ int main() {
temp -= 16384;
}
cTemp = temp * 0.03125;
/*
if(j == 0) {
result[0] = cTemp;
j++;
......@@ -89,23 +112,16 @@ int main() {
j++;
}
}
*/
printf("Temperature in Celsius is : %.2f C \n", cTemp);
if(cTemp > 50)
ioctl(led_fd, IOCTL_CMD_SET_BLINK2, &led_data);
else
ioctl(led_fd, IOCTL_CMD_SET_OFF2, &led_data);
sleep(1);
read(sound_fd, &sound_data, sizeof(int));
if(sound_data > 650)
ioctl(led2_fd, IOCTL_CMD_SET_BLINK2, &led2_data);
else
ioctl(led2_fd, IOCTL_CMD_SET_OFF2, &led2_data);
printf("data : %d\n", sound_data);
if(cTemp > 50) {
ioctl(led_fd, IOCTL_CMD_SET_TEMP_BLINK, &led_data);
}
sleep(1);
sleep(3);
ioctl(led_fd, IOCTL_CMD_SET_TEMP_OFF, &led_data);
}
}
close(temp_fd);
......@@ -113,5 +129,4 @@ int main() {
close(led_fd);
close(led2_fd);
return 0;
}
......@@ -16,16 +16,15 @@
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL1 0x04
#define GPFSEL2 0x08
#define GPFSEL2 0x00
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
#define IOCTL_MAGIC_NUMBER 'K'
#define IOCTL_CMD_SET_DIRECTION _IOWR(IOCTL_MAGIC_NUMBER,0,int)
#define IOCTL_CMD_SET_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
#define IOCTL_CMD_SET_TEMP_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_TEMP_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
static char *buffer = NULL;
static int buf2;
......@@ -63,33 +62,14 @@ int led_release(struct inode *inode, struct file *flip) {
long led_ioctl(struct file *flip, unsigned int cmd, unsigned long arg) {
int kbuf = -1;
int i = 0;
*gpsel2 |= (1 << 3);
*gpsel2 |= (1 << 12);
switch (cmd) {
case IOCTL_CMD_SET_DIRECTION:
case IOCTL_CMD_SET_TEMP_BLINK:
copy_from_user(&kbuf, (const void*)arg, 4);
if (kbuf == 0) {
printk(KERN_ALERT "LED fffset direction in !!\n");
*gpsel2 |= (0 << 3);
}
else if (kbuf == 1) {
printk(KERN_ALERT "LED fffset direction out!!\n");
*gpsel2 |= (1 << 3);
//*gpsel2 |= (1 << 3);
}
else {
printk(KERN_ALERT "ERROR direction parameter error\n");
return -1;
}
break;
case IOCTL_CMD_SET_BLINK:
copy_from_user(&kbuf, (const void*)arg, 4);
*gpset1 |= (1 << 21);
*gpset1 |= (1 << 4);
break;
case IOCTL_CMD_SET_OFF:
*gpclr1 |= (1<<21);
case IOCTL_CMD_SET_TEMP_OFF:
*gpclr1 = (1<<4);
break;
}
return 0;
......
No preview for this file type
......@@ -45,4 +45,4 @@ __attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "17A8925BC7B5F5A84F0A4C2");
MODULE_INFO(srcversion, "8134FFB9FE3223B3D683362");
No preview for this file type
No preview for this file type
......@@ -16,36 +16,30 @@
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL1 0x04
#define GPFSEL2 0x08
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
#define IOCTL_MAGIC_NUMBER 'J'
#define IOCTL_CMD_SET_DIRECTION _IOWR(IOCTL_MAGIC_NUMBER,0,int)
#define IOCTL_CMD_SET_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
#define IOCTL_CMD_SET_SOUND_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_SOUND_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
static char *buffer = NULL;
static int buf2;
static void __iomem *gpio_base;
volatile unsigned int *gpsel1;
volatile unsigned int *gpsel2;
volatile unsigned int *gpset1;
volatile unsigned int *gpclr1;
volatile unsigned int *gplev0;
int led_open(struct inode *inode, struct file *flip) {
printk(KERN_ALERT "LED driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel1 = (volatile unsigned int *)(gpio_base + GPFSEL1);
gpsel2 = (volatile unsigned int *)(gpio_base + GPFSEL2);
gpset1 = (volatile unsigned int *)(gpio_base + GPSET0);
gpclr1 = (volatile unsigned int *)(gpio_base + GPCLR0);
gplev0 = (volatile unsigned int *)(gpio_base + GPLEV0);
return 0;
......@@ -65,37 +59,19 @@ long led_ioctl(struct file *flip, unsigned int cmd, unsigned long arg) {
int i = 0;
*gpsel1 |= (1 << 24);
switch (cmd) {
case IOCTL_CMD_SET_DIRECTION:
copy_from_user(&kbuf, (const void*)arg, 4);
if (kbuf == 0) {
printk(KERN_ALERT "LED set direction in !!\n");
*gpsel1 |= (0 << 24);
}
else if (kbuf == 1) {
printk(KERN_ALERT "LED set direction out!!\n");
*gpsel1 |= (1 << 24);
//*gpsel2 |= (1 << 3);
}
else {
printk(KERN_ALERT "ERROR direction parameter error\n");
return -1;
}
break;
case IOCTL_CMD_SET_BLINK:
case IOCTL_CMD_SET_SOUND_BLINK:
copy_from_user(&kbuf, (const void*)arg, 4);
*gpset1 |= (1 << 18);
break;
case IOCTL_CMD_SET_OFF:
*gpclr1 |= (1<<18);
case IOCTL_CMD_SET_SOUND_OFF:
*gpclr1 = (1 << 18);
break;
}
return 0;
}
static struct file_operations led_fops = {
static struct file_operations led2_fops = {
.owner = THIS_MODULE,
.open = led_open,
.release = led_release,
......@@ -103,7 +79,7 @@ static struct file_operations led_fops = {
};
int __init led_init(void) {
if (register_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME, &led_fops) < 0)
if (register_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME, &led2_fops) < 0)
printk(KERN_ALERT "LED driver initialization fail\n");
else {
printk(KERN_ALERT "LED driver intialization success\n");
......
No preview for this file type
......@@ -45,4 +45,4 @@ __attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "8EA22616AAFFE91DFC17AFE");
MODULE_INFO(srcversion, "84DF592FA4389C4C9F938B1");
No preview for this file type
No preview for this file type
......@@ -17,14 +17,14 @@
#define GPFSEL0 0x00
#define GPFSEL1 0x04
#define SPI_CS 0x00
#define SPI_FIFO 0x04
#define CS 0x00
#define FIFO 0x04
static void __iomem *gpio_base;
static void __iomem *spi_base;
volatile unsigned int *gpfsel0, *gpfsel1;
volatile unsigned int *spi_cs, *spi_fifo;
volatile unsigned int *cs, *fifo;
int sound_open(struct inode *inode, struct file *filp){
printk(KERN_ALERT "sound detection sensor driver open!!\n");
......@@ -34,19 +34,19 @@ int sound_open(struct inode *inode, struct file *filp){
gpfsel0 = (volatile unsigned int*)(gpio_base + GPFSEL0);
gpfsel1 = (volatile unsigned int*)(gpio_base + GPFSEL1);
spi_cs = (volatile unsigned int*)(spi_base + SPI_CS);
spi_fifo = (volatile unsigned int*)(spi_base + SPI_FIFO);
cs = (volatile unsigned int*)(spi_base + CS);
fifo = (volatile unsigned int*)(spi_base + FIFO);
*gpfsel0 &= ~(0x1FF << 21);
*gpfsel0 |= (0x24 << 24);
*gpfsel1 &= ~(0x3F); // 111111 = 0x3F
*gpfsel1 |= (0x24); // 100100 = 0x24
*gpfsel1 &= ~(0x3F);
*gpfsel1 |= (0x24);
*spi_cs &= ~(0xFFFF); // cs clear
*cs &= ~(0xFFFF);
*spi_cs &= ~(0x01<<2);
*spi_cs &= ~(0x01<<3); // spi(0,0)
*spi_cs |= (0x03<<4); // clear FIFO
*cs &= ~(0x01<<2);
*cs &= ~(0x01<<3);
*cs |= (0x03<<4);
return 0;
}
......@@ -55,8 +55,8 @@ int sound_release(struct inode *inode, struct file *filp){
printk(KERN_ALERT "sound detection sensor driver closed!!\n");
*gpfsel0 &= ~(0x1FF << 21);
*gpfsel1 &= ~(0x3F); // 111111 = 0x3F
*spi_cs &= ~(0xFFFF); // cs clear
*gpfsel1 &= ~(0x3F);
*cs &= ~(0xFFFF);
iounmap((void*)gpio_base);
iounmap((void*)spi_base);
......@@ -65,38 +65,37 @@ int sound_release(struct inode *inode, struct file *filp){
ssize_t sound_read(struct file* flip, char* buf, size_t count, loff_t* f_pos){
printk(KERN_ALERT "read function called!!\n");
unsigned char spi_tData[3];
unsigned char spi_rData[3];
int tCount = 0;
int rCount = 0;
unsigned char transmit_Data[3];
unsigned char receive_Data[3];
int transmit_Count = 0;
int receive_Count = 0;
int data = 0;
spi_tData[0] = 1;
spi_tData[1] = (0x08) << 4;
spi_tData[2] = 0; // start single d2 d1 d0
transmit_Data[0] = 1;
transmit_Data[1] = (0x08) << 4;
transmit_Data[2] = 0;
*spi_cs |= (0x03<<4); // clear FIFO
*cs |= (0x03<<4);
*spi_cs |= (0x01<<7); // TA = 1
*cs |= (0x01<<7);
while((tCount < 3) || (rCount < 3)){
while((*spi_cs & (1<<18)) && (tCount < 3)){
*spi_fifo = spi_tData[tCount];
tCount++;
while((transmit_Count < 3) || (receive_Count < 3)){
while((*cs & (1<<18)) && (transmit_Count < 3)){
*fifo = transmit_Data[transmit_Count];
transmit_Count++;
}
while((*spi_cs & (1<<17)) && (rCount < 3)){
spi_rData[rCount] = *spi_fifo;
rCount++;
while((*cs & (1<<17)) && (receive_Count < 3)){
receive_Data[receive_Count] = *fifo;
receive_Count++;
}
}
while((!(*spi_cs)) & (1<<16));
while((!(*cs)) & (1<<16));
*spi_cs |= (0x03<<4); // clear FIFO
*spi_cs &= ~(1<<7); // TA = 0
*cs |= (0x03<<4);
*cs &= ~(1<<7);
int data = ((spi_rData[1]&0x03)<<8) + spi_rData[2];
printk(KERN_ALERT "reading input : %d \n", data);
data = ((receive_Data[1]&0x03)<<8) + receive_Data[2];
copy_to_user(buf, &data, sizeof(int));
......
No preview for this file type
......@@ -44,4 +44,4 @@ __attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "21C82AECD598A6C01C61DF2");
MODULE_INFO(srcversion, "52BC8781B97C9DBB22F9BCA");
No preview for this file type
No preview for this file type
cmd_/home/pi/Desktop/project/smoke/smoke_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/smoke/smoke_dev.ko /home/pi/Desktop/project/smoke/smoke_dev.o /home/pi/Desktop/project/smoke/smoke_dev.mod.o ; true
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment