/************************************************************
**
**     Object name : 
**
**     Public      : 
**
**     Private     : 
**
**     Description
**     -- -- -- -- -- -- -- --
**     RASP-MXのGPIO（スイッチ）制御
**     
**     事前に /sys/class/gpio で以下の処理をしておく
**     echo 6 > export
**     cd  gpio6
**     echo in > direction
**
**     History
**     -- -- -- -- -- -- -- --
**     2015.08.13 K.Takagi 新規作成
**
**
**     Copyright (c) 2015
**     System In Frontier Inc.
**
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int OpenSW()
{
    int fd;

    /* input */
    fd = open("/sys/class/gpio/gpio6/value", O_RDONLY);
    if(fd < 0)
    {
        printf("Open Error.\n");
        return -1;
    }
    
    return fd;
}

int GetSW(int fd)
{
    int ret;
    char buf[8];
    int val;
    
    val = -1;
    
    lseek(fd, 0, SEEK_SET);
    ret = read(fd, buf, sizeof(buf) - 1);
    if (ret < 0) 
    {
        return -1;
    }
    
    if(buf[0] == '0')
    {
        val = 0;
    }
    else if(buf[0] = '1')
    {
        val = 1;
    }
    
    return val;
}

int CheckSW(int fd, int flag)
{
    int sw;
    
    flag = flag & 0x1;
    
    sw = GetSW(fd);

    /* 指定されたフラグと一致したら1を返す */
    if(sw == flag)
    {
        /* 再確認 */
        usleep(100 * 1000);
        sw = GetSW(fd);
        if(sw == flag)
        {
            return 1;
        }
    }
    
    if(sw < 0)
    {
        return sw;
    }
    
    return 0;
}


void CloseSW(int fd)
{
    close(fd);
}

/* EOF */

