SGGPIO.h 2.09 KB
Newer Older
1
/*
Mike Hibler's avatar
Mike Hibler committed
2
 * $Id: SGGPIO.h,v 1.2 2006-12-01 22:59:37 mike Exp $
3 4 5 6 7
 *
 ****************************************************************************
 *
 * uisp - The Micro In-System Programmer for Atmel AVR microcontrollers.
 *
Mike Hibler's avatar
Mike Hibler committed
8
 * Copyright (c) 2003 University of Utah and the Flux Group.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 * 
 * {{{EMULAB-LICENSE
 * 
 * This file is part of the Emulab network testbed software.
 * 
 * This file is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version.
 * 
 * This file is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
 * License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this file.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * }}}
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
 *
 ****************************************************************************
 */

/*
  SGGPIO.h
  
  Direct Stargate/PXA GPIO Access
  
*/

#ifndef __SGGPIO_H
#define __SGGPIO_H

#include <stdlib.h>
#include <sys/types.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>

#define GPIO_bit(x)	(1 << ((x) & 0x1f))
#define GPIO_nr(x)      ((x) >> 5)

enum PXA_REG {
  PXA_GPLR = 0,
  PXA_GPDR = 1,
  PXA_GPSR = 2,
  PXA_GPCR = 3
};
#define NUM_REGS 4
#define NUM_REGNUMS 3

extern char *pxa_reg_names[];

#define PXA_REG_NAME(reg) pxa_reg_names[(reg)]

#define PROC_REG_PREFIX "/proc/cpu/registers"

class SGGPIO_PORT {

public:

  int setDir(int pin, unsigned int indir);
  int setPin(int pin, unsigned int inval);
  int readPin(int pin);
  unsigned int readGPIO(PXA_REG reg,  int regnum);
  int writeGPIO(PXA_REG reg, int regnum, unsigned int value);
  SGGPIO_PORT();
  ~SGGPIO_PORT();

private:

  int getGPIO(PXA_REG reg, int regnum);
  int GPIO_fds[NUM_REGS][NUM_REGNUMS];
};

#endif /* __SGGPIO_H */