mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
187:0387e8f68319
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /* mbed Microcontroller Library
AnnaBridge 184:08ed48f1de7f 2 * Copyright (c) 2006-2018 ARM Limited
AnnaBridge 167:e84263d55307 3 *
AnnaBridge 167:e84263d55307 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 167:e84263d55307 5 * you may not use this file except in compliance with the License.
AnnaBridge 167:e84263d55307 6 * You may obtain a copy of the License at
AnnaBridge 167:e84263d55307 7 *
AnnaBridge 167:e84263d55307 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 167:e84263d55307 9 *
AnnaBridge 167:e84263d55307 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 167:e84263d55307 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 167:e84263d55307 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 167:e84263d55307 13 * See the License for the specific language governing permissions and
AnnaBridge 167:e84263d55307 14 * limitations under the License.
AnnaBridge 167:e84263d55307 15 */
AnnaBridge 167:e84263d55307 16
AnnaBridge 167:e84263d55307 17 #include <stddef.h>
AnnaBridge 167:e84263d55307 18 #include "gpio_api.h"
AnnaBridge 167:e84263d55307 19 #include "pinmap.h"
AnnaBridge 184:08ed48f1de7f 20 #include "objects.h"
AnnaBridge 184:08ed48f1de7f 21 #include "mbed_error.h"
AnnaBridge 167:e84263d55307 22
Anna Bridge 186:707f6e361f3e 23 #define RESERVED_MISC_PIN 7u
Anna Bridge 186:707f6e361f3e 24
AnnaBridge 184:08ed48f1de7f 25 enum io_type {
AnnaBridge 184:08ed48f1de7f 26 GPIO_DEVICE,
AnnaBridge 184:08ed48f1de7f 27 MPS2_IO_DEVICE,
AnnaBridge 184:08ed48f1de7f 28 DEVICE_UNKNOWN
AnnaBridge 184:08ed48f1de7f 29 };
AnnaBridge 167:e84263d55307 30
AnnaBridge 184:08ed48f1de7f 31 /* Tell if the gpio is from GPIO device or MPS2 IO */
AnnaBridge 184:08ed48f1de7f 32 static enum io_type io_type(gpio_t *obj)
AnnaBridge 167:e84263d55307 33 {
AnnaBridge 184:08ed48f1de7f 34 if (obj->gpio_dev != NULL && obj->mps2_io_dev == NULL) {
AnnaBridge 184:08ed48f1de7f 35 return GPIO_DEVICE;
AnnaBridge 167:e84263d55307 36 }
AnnaBridge 184:08ed48f1de7f 37 if (obj->gpio_dev == NULL && obj->mps2_io_dev != NULL) {
AnnaBridge 184:08ed48f1de7f 38 return MPS2_IO_DEVICE;
AnnaBridge 184:08ed48f1de7f 39 }
AnnaBridge 184:08ed48f1de7f 40 return DEVICE_UNKNOWN;
AnnaBridge 167:e84263d55307 41 }
AnnaBridge 167:e84263d55307 42
AnnaBridge 184:08ed48f1de7f 43 /* Return the correct mask of the given PIN */
AnnaBridge 167:e84263d55307 44 uint32_t gpio_set(PinName pin)
AnnaBridge 167:e84263d55307 45 {
AnnaBridge 184:08ed48f1de7f 46 pin_function(pin, (int)GPIO_FUNC);
AnnaBridge 168:9672193075cf 47
AnnaBridge 184:08ed48f1de7f 48 if (pin >= EXP0 && pin <= EXP51) {
AnnaBridge 184:08ed48f1de7f 49 /* GPIO pins */
AnnaBridge 184:08ed48f1de7f 50 return (1 << GPIO_PIN_NUMBER(pin));
AnnaBridge 184:08ed48f1de7f 51 } else if (pin == USERLED1 || pin == USERLED2) {
AnnaBridge 184:08ed48f1de7f 52 /* User LEDs */
AnnaBridge 184:08ed48f1de7f 53 return (1 << (pin - USERLED1));
AnnaBridge 184:08ed48f1de7f 54 } else if (pin == USERSW1 || pin == USERSW2) {
AnnaBridge 184:08ed48f1de7f 55 /* User Push buttons */
AnnaBridge 184:08ed48f1de7f 56 return (1 << (pin - USERSW1));
AnnaBridge 184:08ed48f1de7f 57 } else if (pin >= LED1 && pin <= LED8) {
AnnaBridge 184:08ed48f1de7f 58 /* MCC LEDs */
AnnaBridge 184:08ed48f1de7f 59 return (1 << (pin - LED1));
AnnaBridge 184:08ed48f1de7f 60 } else if (pin >= SW1 && pin <= SW8) {
AnnaBridge 184:08ed48f1de7f 61 /* MCC Switches */
AnnaBridge 184:08ed48f1de7f 62 return (1 << (pin - SW1));
AnnaBridge 168:9672193075cf 63 } else {
AnnaBridge 184:08ed48f1de7f 64 return 0;
AnnaBridge 168:9672193075cf 65 }
AnnaBridge 167:e84263d55307 66 }
AnnaBridge 167:e84263d55307 67
Anna Bridge 186:707f6e361f3e 68 /*
Anna Bridge 186:707f6e361f3e 69 * FPGA MISC bit mapping:
Anna Bridge 186:707f6e361f3e 70 * [31:7] Reserved
Anna Bridge 186:707f6e361f3e 71 * [6] CLCD_BL_CTRL
Anna Bridge 186:707f6e361f3e 72 * [5] CLCD_RD
Anna Bridge 186:707f6e361f3e 73 * [4] CLCD_RS
Anna Bridge 186:707f6e361f3e 74 * [3] CLCD_RESET
Anna Bridge 186:707f6e361f3e 75 * [2] Reserved
Anna Bridge 186:707f6e361f3e 76 * [1] SPI_nSS
Anna Bridge 186:707f6e361f3e 77 * [0] CLCD_CS
Anna Bridge 186:707f6e361f3e 78 */
Anna Bridge 186:707f6e361f3e 79 static uint32_t gpio_fpga_misc_pin(PinName pin)
Anna Bridge 186:707f6e361f3e 80 {
Anna Bridge 186:707f6e361f3e 81 uint32_t pin_number = RESERVED_MISC_PIN;
Anna Bridge 186:707f6e361f3e 82
Anna Bridge 186:707f6e361f3e 83 if (pin == CLCD_SSEL) {
Anna Bridge 186:707f6e361f3e 84 pin_number = 0u;
Anna Bridge 186:707f6e361f3e 85 } else if (pin == SPI_SSEL) {
Anna Bridge 186:707f6e361f3e 86 pin_number = 1u;
Anna Bridge 186:707f6e361f3e 87 } else if (pin == CLCD_RESET) {
Anna Bridge 186:707f6e361f3e 88 pin_number = 3u;
Anna Bridge 186:707f6e361f3e 89 } else if (pin == CLCD_RS) {
Anna Bridge 186:707f6e361f3e 90 pin_number = 4u;
Anna Bridge 186:707f6e361f3e 91 } else if (pin == CLCD_RD) {
Anna Bridge 186:707f6e361f3e 92 pin_number = 5u;
Anna Bridge 186:707f6e361f3e 93 } else if (pin == CLCD_BL_CTRL){
Anna Bridge 186:707f6e361f3e 94 pin_number = 6u;
Anna Bridge 186:707f6e361f3e 95 }
Anna Bridge 186:707f6e361f3e 96
Anna Bridge 186:707f6e361f3e 97 return pin_number;
Anna Bridge 186:707f6e361f3e 98 }
Anna Bridge 186:707f6e361f3e 99
AnnaBridge 167:e84263d55307 100 void gpio_init(gpio_t *obj, PinName pin)
AnnaBridge 167:e84263d55307 101 {
AnnaBridge 184:08ed48f1de7f 102 struct arm_gpio_dev_t *gpio_dev;
AnnaBridge 167:e84263d55307 103
AnnaBridge 184:08ed48f1de7f 104 if (pin >= EXP0 && pin <= EXP51) {
AnnaBridge 184:08ed48f1de7f 105 /* GPIO pins */
AnnaBridge 184:08ed48f1de7f 106 switch (GPIO_DEV_NUMBER(pin)) {
AnnaBridge 184:08ed48f1de7f 107 #ifdef ARM_GPIO0
AnnaBridge 184:08ed48f1de7f 108 case GPIO0_NUMBER:
AnnaBridge 184:08ed48f1de7f 109 gpio_dev = &ARM_GPIO0_DEV;
AnnaBridge 184:08ed48f1de7f 110 break;
AnnaBridge 184:08ed48f1de7f 111 #endif /* ARM_GPIO0 */
AnnaBridge 184:08ed48f1de7f 112 #ifdef ARM_GPIO1
AnnaBridge 184:08ed48f1de7f 113 case GPIO1_NUMBER:
AnnaBridge 184:08ed48f1de7f 114 gpio_dev = &ARM_GPIO1_DEV;
AnnaBridge 184:08ed48f1de7f 115 break;
AnnaBridge 184:08ed48f1de7f 116 #endif /* ARM_GPIO1 */
AnnaBridge 184:08ed48f1de7f 117 #ifdef ARM_GPIO2
AnnaBridge 184:08ed48f1de7f 118 case GPIO2_NUMBER:
AnnaBridge 184:08ed48f1de7f 119 gpio_dev = &ARM_GPIO2_DEV;
AnnaBridge 184:08ed48f1de7f 120 break;
AnnaBridge 184:08ed48f1de7f 121 #endif /* ARM_GPIO2 */
AnnaBridge 184:08ed48f1de7f 122 #ifdef ARM_GPIO3
AnnaBridge 184:08ed48f1de7f 123 case GPIO3_NUMBER:
AnnaBridge 184:08ed48f1de7f 124 gpio_dev = &ARM_GPIO3_DEV;
AnnaBridge 184:08ed48f1de7f 125 break;
AnnaBridge 184:08ed48f1de7f 126 #endif /* ARM_GPIO3 */
AnnaBridge 184:08ed48f1de7f 127 default:
AnnaBridge 184:08ed48f1de7f 128 error("GPIO %d, associated with expansion pin %d, is disabled",
AnnaBridge 184:08ed48f1de7f 129 GPIO_DEV_NUMBER(pin), pin);
AnnaBridge 184:08ed48f1de7f 130 return;
AnnaBridge 184:08ed48f1de7f 131 }
AnnaBridge 184:08ed48f1de7f 132
AnnaBridge 184:08ed48f1de7f 133 arm_gpio_init(gpio_dev);
AnnaBridge 184:08ed48f1de7f 134
AnnaBridge 184:08ed48f1de7f 135 obj->gpio_dev = gpio_dev;
AnnaBridge 184:08ed48f1de7f 136 obj->mps2_io_dev = NULL;
Anna Bridge 186:707f6e361f3e 137 obj->arm_mps2_io_write = NULL;
AnnaBridge 184:08ed48f1de7f 138 obj->pin_number = GPIO_PIN_NUMBER(pin);
AnnaBridge 184:08ed48f1de7f 139 /* GPIO is input by default */
AnnaBridge 184:08ed48f1de7f 140 obj->direction = PIN_INPUT;
AnnaBridge 184:08ed48f1de7f 141 return;
AnnaBridge 167:e84263d55307 142 }
AnnaBridge 167:e84263d55307 143
AnnaBridge 184:08ed48f1de7f 144 #ifdef ARM_MPS2_IO_FPGAIO
AnnaBridge 184:08ed48f1de7f 145 if (pin == USERLED1 || pin == USERLED2) {
AnnaBridge 167:e84263d55307 146 /* User LEDs */
AnnaBridge 184:08ed48f1de7f 147 obj->gpio_dev = NULL;
AnnaBridge 184:08ed48f1de7f 148 obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV;
AnnaBridge 184:08ed48f1de7f 149 obj->pin_number = pin - USERLED1;
Anna Bridge 186:707f6e361f3e 150 obj->arm_mps2_io_write = arm_mps2_io_write_leds;
AnnaBridge 184:08ed48f1de7f 151 obj->direction = PIN_OUTPUT;
AnnaBridge 184:08ed48f1de7f 152 return;
AnnaBridge 184:08ed48f1de7f 153 } else if (pin == USERSW1 || pin == USERSW2) {
AnnaBridge 184:08ed48f1de7f 154 /* User Push buttons */
AnnaBridge 184:08ed48f1de7f 155 obj->gpio_dev = NULL;
AnnaBridge 184:08ed48f1de7f 156 obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV;
Anna Bridge 186:707f6e361f3e 157 obj->arm_mps2_io_write = NULL;
AnnaBridge 184:08ed48f1de7f 158 obj->pin_number = pin - USERSW1;
AnnaBridge 184:08ed48f1de7f 159 obj->direction = PIN_INPUT;
AnnaBridge 184:08ed48f1de7f 160 return;
AnnaBridge 184:08ed48f1de7f 161 }
Anna Bridge 186:707f6e361f3e 162 /* Check if pin is a MISC pin */
Anna Bridge 186:707f6e361f3e 163 obj->pin_number = gpio_fpga_misc_pin(pin);
Anna Bridge 186:707f6e361f3e 164 if (obj->pin_number != RESERVED_MISC_PIN) {
Anna Bridge 186:707f6e361f3e 165 obj->gpio_dev = NULL;
Anna Bridge 186:707f6e361f3e 166 obj->mps2_io_dev = &ARM_MPS2_IO_FPGAIO_DEV;
Anna Bridge 186:707f6e361f3e 167 obj->arm_mps2_io_write = arm_mps2_io_write_misc;
Anna Bridge 186:707f6e361f3e 168 obj->direction = PIN_OUTPUT;
Anna Bridge 186:707f6e361f3e 169 return;
Anna Bridge 186:707f6e361f3e 170 }
AnnaBridge 184:08ed48f1de7f 171 #endif /* ARM_MPS2_IO_FPGAIO */
AnnaBridge 184:08ed48f1de7f 172
AnnaBridge 184:08ed48f1de7f 173 #ifdef ARM_MPS2_IO_SCC
AnnaBridge 184:08ed48f1de7f 174 if (pin >= LED1 && pin <= LED8) {
AnnaBridge 167:e84263d55307 175 /* MCC LEDs */
AnnaBridge 184:08ed48f1de7f 176 obj->gpio_dev = NULL;
AnnaBridge 184:08ed48f1de7f 177 obj->mps2_io_dev = &ARM_MPS2_IO_SCC_DEV;
AnnaBridge 187:0387e8f68319 178 obj->arm_mps2_io_write = arm_mps2_io_write_leds;
AnnaBridge 184:08ed48f1de7f 179 obj->pin_number = pin - LED1;
AnnaBridge 184:08ed48f1de7f 180 obj->direction = PIN_OUTPUT;
AnnaBridge 184:08ed48f1de7f 181 return;
AnnaBridge 184:08ed48f1de7f 182 } else if (pin >= SW1 && pin <= SW8) {
AnnaBridge 184:08ed48f1de7f 183 /* MCC Switches */
AnnaBridge 184:08ed48f1de7f 184 obj->gpio_dev = NULL;
AnnaBridge 184:08ed48f1de7f 185 obj->mps2_io_dev = &ARM_MPS2_IO_SCC_DEV;
Anna Bridge 186:707f6e361f3e 186 obj->arm_mps2_io_write = NULL;
AnnaBridge 184:08ed48f1de7f 187 obj->pin_number = pin - SW1;
AnnaBridge 184:08ed48f1de7f 188 obj->direction = PIN_INPUT;
AnnaBridge 184:08ed48f1de7f 189 return;
AnnaBridge 167:e84263d55307 190 }
AnnaBridge 184:08ed48f1de7f 191 #endif /* ARM_MPS2_IO_SCC */
AnnaBridge 167:e84263d55307 192
AnnaBridge 184:08ed48f1de7f 193 error("pin %d is not a GPIO", pin);
AnnaBridge 167:e84263d55307 194 }
AnnaBridge 167:e84263d55307 195
AnnaBridge 167:e84263d55307 196 void gpio_mode(gpio_t *obj, PinMode mode)
AnnaBridge 167:e84263d55307 197 {
AnnaBridge 184:08ed48f1de7f 198 /* PinMode is not supported */
AnnaBridge 167:e84263d55307 199 }
AnnaBridge 167:e84263d55307 200
AnnaBridge 167:e84263d55307 201 void gpio_dir(gpio_t *obj, PinDirection direction)
AnnaBridge 167:e84263d55307 202 {
AnnaBridge 184:08ed48f1de7f 203 uint32_t flags = ARM_GPIO_PIN_ENABLE;
AnnaBridge 184:08ed48f1de7f 204
AnnaBridge 184:08ed48f1de7f 205 obj->direction = direction;
AnnaBridge 184:08ed48f1de7f 206
AnnaBridge 184:08ed48f1de7f 207 switch (io_type(obj)) {
AnnaBridge 184:08ed48f1de7f 208 case GPIO_DEVICE:
AnnaBridge 167:e84263d55307 209 switch (direction) {
AnnaBridge 184:08ed48f1de7f 210 case PIN_INPUT:
AnnaBridge 184:08ed48f1de7f 211 flags |= ARM_GPIO_INPUT;
AnnaBridge 184:08ed48f1de7f 212 break;
AnnaBridge 184:08ed48f1de7f 213 case PIN_OUTPUT:
AnnaBridge 184:08ed48f1de7f 214 flags |= ARM_GPIO_OUTPUT;
AnnaBridge 184:08ed48f1de7f 215 break;
AnnaBridge 184:08ed48f1de7f 216 /* default: not added to force to cover all enumeration cases */
AnnaBridge 167:e84263d55307 217 }
AnnaBridge 184:08ed48f1de7f 218
AnnaBridge 184:08ed48f1de7f 219 (void)arm_gpio_config(obj->gpio_dev, ARM_GPIO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 220 obj->pin_number, flags);
AnnaBridge 184:08ed48f1de7f 221 return;
AnnaBridge 184:08ed48f1de7f 222 case MPS2_IO_DEVICE:
AnnaBridge 184:08ed48f1de7f 223 /* Do nothing as MPS2 IO direction can not be changed */
AnnaBridge 184:08ed48f1de7f 224 return;
AnnaBridge 184:08ed48f1de7f 225 case DEVICE_UNKNOWN:
AnnaBridge 184:08ed48f1de7f 226 break;
AnnaBridge 184:08ed48f1de7f 227 /* default: The default is not defined intentionally to force the
AnnaBridge 184:08ed48f1de7f 228 * compiler to check that all the enumeration values are
AnnaBridge 184:08ed48f1de7f 229 * covered in the switch.*/
AnnaBridge 167:e84263d55307 230 }
AnnaBridge 184:08ed48f1de7f 231
AnnaBridge 184:08ed48f1de7f 232 error("can not change the direction of pin");
AnnaBridge 167:e84263d55307 233 }
AnnaBridge 167:e84263d55307 234
AnnaBridge 167:e84263d55307 235 int gpio_is_connected(const gpio_t *obj)
AnnaBridge 167:e84263d55307 236 {
AnnaBridge 184:08ed48f1de7f 237 if (obj->pin_number == (uint32_t)NC) {
AnnaBridge 184:08ed48f1de7f 238 return 0;
AnnaBridge 184:08ed48f1de7f 239 } else {
AnnaBridge 167:e84263d55307 240 return 1;
AnnaBridge 167:e84263d55307 241 }
AnnaBridge 184:08ed48f1de7f 242 }
AnnaBridge 184:08ed48f1de7f 243
AnnaBridge 184:08ed48f1de7f 244 void gpio_write(gpio_t *obj, int value)
AnnaBridge 184:08ed48f1de7f 245 {
AnnaBridge 184:08ed48f1de7f 246 switch (io_type(obj)) {
AnnaBridge 184:08ed48f1de7f 247 case GPIO_DEVICE:
AnnaBridge 184:08ed48f1de7f 248 (void)arm_gpio_write(obj->gpio_dev, ARM_GPIO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 249 obj->pin_number, (uint32_t)value);
AnnaBridge 184:08ed48f1de7f 250 return;
AnnaBridge 184:08ed48f1de7f 251 case MPS2_IO_DEVICE:
AnnaBridge 184:08ed48f1de7f 252 if (obj->direction == PIN_INPUT) {
AnnaBridge 184:08ed48f1de7f 253 /*
AnnaBridge 184:08ed48f1de7f 254 * If the given gpio is in fact a button, ignore the call to not
AnnaBridge 184:08ed48f1de7f 255 * write to the corresponding LED instead.
AnnaBridge 184:08ed48f1de7f 256 */
AnnaBridge 184:08ed48f1de7f 257 return;
AnnaBridge 184:08ed48f1de7f 258 }
Anna Bridge 186:707f6e361f3e 259 if (obj->arm_mps2_io_write != NULL) {
Anna Bridge 186:707f6e361f3e 260 obj->arm_mps2_io_write(obj->mps2_io_dev, ARM_MPS2_IO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 261 obj->pin_number, (uint32_t)value);
Anna Bridge 186:707f6e361f3e 262 }
AnnaBridge 184:08ed48f1de7f 263 return;
AnnaBridge 184:08ed48f1de7f 264 case DEVICE_UNKNOWN:
AnnaBridge 184:08ed48f1de7f 265 break;
AnnaBridge 184:08ed48f1de7f 266 /* default: The default is not defined intentionally to force the
AnnaBridge 184:08ed48f1de7f 267 * compiler to check that all the enumeration values are
AnnaBridge 184:08ed48f1de7f 268 * covered in the switch.*/
AnnaBridge 184:08ed48f1de7f 269 }
AnnaBridge 167:e84263d55307 270
AnnaBridge 184:08ed48f1de7f 271 error("can not write pin");
AnnaBridge 184:08ed48f1de7f 272 }
AnnaBridge 184:08ed48f1de7f 273
AnnaBridge 184:08ed48f1de7f 274 int gpio_read(gpio_t *obj)
AnnaBridge 184:08ed48f1de7f 275 {
AnnaBridge 184:08ed48f1de7f 276 switch (io_type(obj)) {
AnnaBridge 184:08ed48f1de7f 277 case GPIO_DEVICE:
AnnaBridge 184:08ed48f1de7f 278 return (int)arm_gpio_read(obj->gpio_dev, ARM_GPIO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 279 obj->pin_number);
AnnaBridge 184:08ed48f1de7f 280 case MPS2_IO_DEVICE:
AnnaBridge 184:08ed48f1de7f 281 switch (obj->direction) {
AnnaBridge 184:08ed48f1de7f 282 case PIN_INPUT:
AnnaBridge 184:08ed48f1de7f 283
AnnaBridge 184:08ed48f1de7f 284 return (int)arm_mps2_io_read_buttons(obj->mps2_io_dev,
AnnaBridge 184:08ed48f1de7f 285 ARM_MPS2_IO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 286 obj->pin_number);
AnnaBridge 184:08ed48f1de7f 287 case PIN_OUTPUT:
AnnaBridge 184:08ed48f1de7f 288 return (int)arm_mps2_io_read_leds(obj->mps2_io_dev,
AnnaBridge 184:08ed48f1de7f 289 ARM_MPS2_IO_ACCESS_PIN,
AnnaBridge 184:08ed48f1de7f 290 obj->pin_number);
AnnaBridge 184:08ed48f1de7f 291 }
AnnaBridge 184:08ed48f1de7f 292
AnnaBridge 184:08ed48f1de7f 293 case DEVICE_UNKNOWN:
AnnaBridge 184:08ed48f1de7f 294 break;
AnnaBridge 184:08ed48f1de7f 295 /* default: The default is not defined intentionally to force the
AnnaBridge 184:08ed48f1de7f 296 * compiler to check that all the enumeration values are
AnnaBridge 184:08ed48f1de7f 297 * covered in the switch.*/
AnnaBridge 184:08ed48f1de7f 298 }
AnnaBridge 184:08ed48f1de7f 299
AnnaBridge 184:08ed48f1de7f 300 error("can not read pin");
AnnaBridge 167:e84263d55307 301 return 0;
AnnaBridge 167:e84263d55307 302 }