gpio.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 Fraunhofer Institute for Manufacturing Engineering and Automation (IPA)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
18 #ifndef HAND_BRIDGE_GPIO_H_
19 #define HAND_BRIDGE_GPIO_H_
20 
21 #include "pigpio.h"
22 
23 class GPIO {
25  uint32_t out_mask0;
26  bool call(int (*func)(uint32_t), uint32_t mask, uint32_t pins){
27  return initialized && (pins & mask) == pins && (pins == 0 || func(pins) == 0);
28  }
29 public:
30  GPIO() : initialized(false), out_mask0(0) {}
31  bool isInitialized() const { return initialized; }
32  bool setInput(uint32_t pin) {
33  return initialized && gpioSetMode(pin, PI_INPUT) == 0;
34  }
35  bool setOutput(uint32_t pin) {
36  if(initialized && gpioSetMode(pin, PI_OUTPUT) == 0){
37  if(pin < 32) out_mask0 |= (1<<pin);
38  return true;
39  }
40  return false;
41  }
42  bool init(){
43  return initialized = gpioInitialise() >= 0;
44  }
45  bool clearPins(uint32_t pins){
47  }
48  bool setPins(uint32_t pins){
49  return call(gpioWrite_Bits_0_31_Set, out_mask0, pins);
50  }
51  bool writePin(uint32_t pin, uint32_t level) {
52  if(!initialized) return false;
53  if(pin < 32 && ((1<<pin) & out_mask0) != (1<<pin)) return false;
54 
55  return gpioWrite(pin, level ? 1 : 0) == 0;
56  }
57  bool pwmPin(uint32_t pin, float level) {
58  if(!initialized) return false;
59  if(pin >= 32 || ((1<<pin) & out_mask0) != (1<<pin)) return false;
60 
61  int range;
62  if ((range = gpioGetPWMrange(pin)) < 0) return false;
63 
64  if(level < 0 || level > 1.0) return false;
65 
66  return gpioPWM(pin, level* range) == 0;
67  }
68  uint32_t getState() {
69  return initialized ? gpioRead_Bits_0_31(): 0;
70  }
71 };
72 #endif // HAND_BRIDGE_GPIO_H_
PI_INPUT
#define PI_INPUT
Definition: pigpio.h:581
GPIO::isInitialized
bool isInitialized() const
Definition: gpio.h:31
gpioWrite
int gpioWrite(unsigned gpio, unsigned level)
Definition: pigpio.c:8707
GPIO::clearPins
bool clearPins(uint32_t pins)
Definition: gpio.h:45
gpioPWM
int gpioPWM(unsigned gpio, unsigned val)
Definition: pigpio.c:8744
gpioWrite_Bits_0_31_Clear
int gpioWrite_Bits_0_31_Clear(uint32_t bits)
Definition: pigpio.c:12467
gpioGetPWMrange
int gpioGetPWMrange(unsigned gpio)
Definition: pigpio.c:8846
gpioInitialise
int gpioInitialise(void)
Definition: pigpio.c:8459
GPIO
Definition: gpio.h:23
GPIO::setPins
bool setPins(uint32_t pins)
Definition: gpio.h:48
gpioRead_Bits_0_31
uint32_t gpioRead_Bits_0_31(void)
Definition: pigpio.c:12443
PI_OUTPUT
#define PI_OUTPUT
Definition: pigpio.h:582
GPIO::GPIO
GPIO()
Definition: gpio.h:30
gpioWrite_Bits_0_31_Set
int gpioWrite_Bits_0_31_Set(uint32_t bits)
Definition: pigpio.c:12495
gpioSetMode
int gpioSetMode(unsigned gpio, unsigned mode)
Definition: pigpio.c:8607
GPIO::initialized
bool initialized
Definition: gpio.h:24
GPIO::writePin
bool writePin(uint32_t pin, uint32_t level)
Definition: gpio.h:51
pigpio.h
GPIO::call
bool call(int(*func)(uint32_t), uint32_t mask, uint32_t pins)
Definition: gpio.h:26
GPIO::setOutput
bool setOutput(uint32_t pin)
Definition: gpio.h:35
GPIO::init
bool init()
Definition: gpio.h:42
GPIO::setInput
bool setInput(uint32_t pin)
Definition: gpio.h:32
GPIO::out_mask0
uint32_t out_mask0
Definition: gpio.h:25
GPIO::getState
uint32_t getState()
Definition: gpio.h:68
GPIO::pwmPin
bool pwmPin(uint32_t pin, float level)
Definition: gpio.h:57


cob_hand_bridge
Author(s): Mathias Lüdtke
autogenerated on Fri Aug 2 2024 09:40:56