본문 바로가기
Embedded/Kernel Porting

[Kernel Porting-4] H-Smart4412 LED 점멸하기

by tunanut 2016. 12. 14.
반응형

작업 환경

-메인 OS : Windows 8.1K(Intel Core i5-4590)

-작업 OS : Ubuntu 14.04 64bit(VirtualBox)

-장 비 명 : H-Smart4412

 

1. led.c - LED 점멸하기

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <fcntl.h>

#include <sys/types.h>

#include <sys/ioctl.h>

#include <sys/stat.h>

 

#define led "/dev/led"

 

int main()

{

    int dev, i;

    unsigned char data;

 

    if((dev = open(led, O_RDWR)) < 0)

    {

        printf("Can't Open\n");

        exit(0);

    }

 

    for(i=0;i<8;i++)

    {

        if(i%2)

        {

            data = 0xff;

        }

        else

        {

            data = 0x00;

        }

        write(dev,&data,sizeof(unsigned char));

    }

    close(dev);

   

    return 0;

}

 

2. led2.c - LED 순차점등, 순차점멸 등

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>


#define led "/dev/led"

 

void led_up(int dev);
void led_down(int dev);
void led_all(int dev);
void led_oe(int dev);
void led_inside(int dev);
void led_outside(int dev);

 

int main()
{
    int dev, sw = 0;

    if((dev = open(led, O_RDWR)) < 0)
    {
        printf("Can't Open\n");
        exit(0);
    }

 

    while(sw != 9)
    {
        printf("1. LED UP\n");
        printf("2. LED DOWN\n");
        printf("3. All\n");
        printf("4. OddEven\n");
        printf("5. Inside\n");
        printf("6. Outside\n");
        printf("9. exit\n");
        scanf("%d",&sw);

       

        switch(sw)
        {
            case 1: led_up(dev);
                     break;
            case 2: led_down(dev);
                     break;
            case 3: led_all(dev);
                     break;
            case 4: led_oe(dev);
                     break;
            case 5: led_inside(dev);
                     break;
            case 6: led_outside(dev);
                     break;
        }
    }
    close(dev);

    return 0;
}

 

void led_up(int dev)
{
    int i;
    unsigned char data=0x00;

 

    write(dev,&data,sizeof(unsigned char));
    data = 1;

 

    for(i=0;i<8;i++)
    {
        data = data>>1;
        data |= 0x80;
        write(dev,&data,sizeof(unsigned char));
        usleep(50000);
    }

 

    for(i=0;i<8;i++)
    {
        data = data>>1;
        write(dev,&data,sizeof(unsigned char));
        usleep(50000);
    }
}

 

void led_down(int dev)
{
    int i;
    unsigned char data=0x00;

 

    write(dev,&data,sizeof(unsigned char));
    data = 1;

 

    for(i=0;i<8;i++)
    {
        write(dev,&data,sizeof(unsigned char));
        data = data<<1;
        data |= 1;
        usleep(50000);
    }

 

    for(i=0;i<8;i++)
    {
        write(dev,&data,sizeof(unsigned char));
        data = data<<1;
        usleep(50000);
    }
    write(dev,&data,sizeof(unsigned char));
}

 

void led_all(int dev)
{
    int i;
    unsigned char data=0x00;

 

    for(i=0;i<16;i++)
    {
        data = ~data;
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }
}

 

void led_oe(int dev)
{
    int i;
    unsigned char data=0xAA;

 

    for(i=0;i<16;i++)
    {
        data = ~data;
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }
}

 

void led_inside(int dev)
{
    int i;
    unsigned char data=0x00;

   

    for(i=0;i<4;i++)
    {
        data |= 1<<i;
        data |= 0x80>>i;
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }

 

    for(i=0;i<4;i++)
    {
        data &= ~(1<<i);
        data &= ~(0x80>>i);
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }
}

 

void led_outside(int dev)
{
    int i;
    unsigned char data=0x00;

   

    for(i=0;i<4;i++)
    {
        data |= 1<<i+4;
        data |= 0x80>>i+4;
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }

 

    for(i=0;i<4;i++)
    {
        data &= ~(1<<i+4);
        data &= ~(0x80>>i+4);
        write(dev,&data,sizeof(unsigned char));
        usleep(100000);
    }
}


 

 

 

반응형