Mbed FW update

Committer:
Vkadaba
Date:
Thu Sep 26 06:15:39 2019 +0000
Revision:
23:bb685f35b08b
Parent:
5:0728bde67bdb
Child:
32:52445bef314d
Fixing code alignment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ADIJake 0:85855ecd3257 1 /******************************************************************************
ADIJake 0:85855ecd3257 2 Copyright 2017 (c) Analog Devices, Inc.
ADIJake 0:85855ecd3257 3
ADIJake 0:85855ecd3257 4 All rights reserved.
ADIJake 0:85855ecd3257 5
ADIJake 0:85855ecd3257 6 Redistribution and use in source and binary forms, with or without
ADIJake 0:85855ecd3257 7 modification, are permitted provided that the following conditions are met:
ADIJake 0:85855ecd3257 8 - Redistributions of source code must retain the above copyright
ADIJake 0:85855ecd3257 9 notice, this list of conditions and the following disclaimer.
ADIJake 0:85855ecd3257 10 - Redistributions in binary form must reproduce the above copyright
ADIJake 0:85855ecd3257 11 notice, this list of conditions and the following disclaimer in
ADIJake 0:85855ecd3257 12 the documentation and/or other materials provided with the
ADIJake 0:85855ecd3257 13 distribution.
ADIJake 0:85855ecd3257 14 - Neither the name of Analog Devices, Inc. nor the names of its
ADIJake 0:85855ecd3257 15 contributors may be used to endorse or promote products derived
ADIJake 0:85855ecd3257 16 from this software without specific prior written permission.
ADIJake 0:85855ecd3257 17 - The use of this software may or may not infringe the patent rights
ADIJake 0:85855ecd3257 18 of one or more patent holders. This license does not release you
ADIJake 0:85855ecd3257 19 from the requirement that you obtain separate licenses from these
ADIJake 0:85855ecd3257 20 patent holders to use this software.
ADIJake 0:85855ecd3257 21 - Use of the software either in source or binary form, must be run
ADIJake 0:85855ecd3257 22 on or directly connected to an Analog Devices Inc. component.
ADIJake 0:85855ecd3257 23
ADIJake 0:85855ecd3257 24 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
ADIJake 0:85855ecd3257 25 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
ADIJake 0:85855ecd3257 26 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
ADIJake 0:85855ecd3257 27 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
ADIJake 0:85855ecd3257 28 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
ADIJake 0:85855ecd3257 29 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
ADIJake 0:85855ecd3257 30 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
ADIJake 0:85855ecd3257 31 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
ADIJake 0:85855ecd3257 32 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
ADIJake 0:85855ecd3257 33 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ADIJake 0:85855ecd3257 34 *
ADIJake 0:85855ecd3257 35 *****************************************************************************/
ADIJake 0:85855ecd3257 36
ADIJake 0:85855ecd3257 37 /*!
ADIJake 0:85855ecd3257 38 ******************************************************************************
ADIJake 0:85855ecd3257 39 * @file:
Vkadaba 5:0728bde67bdb 40 * @brief: ADMW OS-dependent wrapper layer for GPIO interface
ADIJake 0:85855ecd3257 41 *-----------------------------------------------------------------------------
ADIJake 0:85855ecd3257 42 */
ADIJake 0:85855ecd3257 43
ADIJake 0:85855ecd3257 44 #include <mbed.h>
ADIJake 0:85855ecd3257 45
Vkadaba 5:0728bde67bdb 46 #include "inc/admw_gpio.h"
Vkadaba 5:0728bde67bdb 47 #include "inc/admw_log.h"
ADIJake 0:85855ecd3257 48
ADIJake 0:85855ecd3257 49 class GpioContext
ADIJake 0:85855ecd3257 50 {
ADIJake 0:85855ecd3257 51 public:
ADIJake 0:85855ecd3257 52 GpioContext(
ADIJake 0:85855ecd3257 53 PinName resetPin,
Vkadaba 5:0728bde67bdb 54 PinName alertErrorPin,
ADIJake 0:85855ecd3257 55 PinName datareadyPin)
ADIJake 0:85855ecd3257 56 : _reset(resetPin),
Vkadaba 5:0728bde67bdb 57 _alertError(alertErrorPin),
ADIJake 0:85855ecd3257 58 _dataready(datareadyPin),
Vkadaba 5:0728bde67bdb 59 _alertErrorIrq(alertErrorPin),
ADIJake 0:85855ecd3257 60 _datareadyIrq(datareadyPin) {}
ADIJake 0:85855ecd3257 61
Vkadaba 5:0728bde67bdb 62 ADMW_RESULT get(
Vkadaba 5:0728bde67bdb 63 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 64 bool *pState);
ADIJake 0:85855ecd3257 65
Vkadaba 5:0728bde67bdb 66 ADMW_RESULT set(
Vkadaba 5:0728bde67bdb 67 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 68 bool state);
ADIJake 0:85855ecd3257 69
Vkadaba 5:0728bde67bdb 70 ADMW_RESULT enableIrq(
Vkadaba 5:0728bde67bdb 71 ADMW_GPIO_PIN ePinId,
Vkadaba 5:0728bde67bdb 72 ADMW_GPIO_CALLBACK callbackFn,
ADIJake 0:85855ecd3257 73 void *pArg);
ADIJake 0:85855ecd3257 74
Vkadaba 5:0728bde67bdb 75 ADMW_RESULT disableIrq(
Vkadaba 5:0728bde67bdb 76 ADMW_GPIO_PIN ePinId);
ADIJake 0:85855ecd3257 77
ADIJake 0:85855ecd3257 78 private:
ADIJake 0:85855ecd3257 79 DigitalOut _reset;
ADIJake 0:85855ecd3257 80
Vkadaba 5:0728bde67bdb 81 DigitalIn _alertError;
ADIJake 0:85855ecd3257 82 DigitalIn _dataready;
ADIJake 0:85855ecd3257 83
Vkadaba 5:0728bde67bdb 84 InterruptIn _alertErrorIrq;
ADIJake 0:85855ecd3257 85 InterruptIn _datareadyIrq;
ADIJake 0:85855ecd3257 86
Vkadaba 5:0728bde67bdb 87 ADMW_GPIO_CALLBACK _alertErrorIrqCallback;
Vkadaba 5:0728bde67bdb 88 ADMW_GPIO_CALLBACK _datareadyIrqCallback;
ADIJake 0:85855ecd3257 89
Vkadaba 5:0728bde67bdb 90 void *_alertErrorIrqArg;
ADIJake 0:85855ecd3257 91 void *_datareadyIrqArg;
ADIJake 0:85855ecd3257 92
Vkadaba 5:0728bde67bdb 93 void _alertErrorIrqHandler()
ADIJake 0:85855ecd3257 94 {
Vkadaba 5:0728bde67bdb 95 _alertErrorIrqCallback(ADMW_GPIO_PIN_ALERT_ERROR, _alertErrorIrqArg);
ADIJake 0:85855ecd3257 96 }
ADIJake 0:85855ecd3257 97 void _datareadyIrqHandler()
ADIJake 0:85855ecd3257 98 {
Vkadaba 5:0728bde67bdb 99 _datareadyIrqCallback(ADMW_GPIO_PIN_DATAREADY, _datareadyIrqArg);
ADIJake 0:85855ecd3257 100 }
ADIJake 0:85855ecd3257 101 };
ADIJake 0:85855ecd3257 102
Vkadaba 5:0728bde67bdb 103 ADMW_RESULT GpioContext::get(
Vkadaba 5:0728bde67bdb 104 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 105 bool *pState)
ADIJake 0:85855ecd3257 106 {
Vkadaba 23:bb685f35b08b 107 switch(ePinId) {
Vkadaba 23:bb685f35b08b 108 case ADMW_GPIO_PIN_ALERT_ERROR:
Vkadaba 23:bb685f35b08b 109 *pState = _alertError;
Vkadaba 23:bb685f35b08b 110 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 111 case ADMW_GPIO_PIN_DATAREADY:
Vkadaba 23:bb685f35b08b 112 *pState = _dataready;
Vkadaba 23:bb685f35b08b 113 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 114 case ADMW_GPIO_PIN_RESET:
Vkadaba 23:bb685f35b08b 115 *pState = _reset;
Vkadaba 23:bb685f35b08b 116 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 117 default:
Vkadaba 23:bb685f35b08b 118 return ADMW_INVALID_DEVICE_NUM;
ADIJake 0:85855ecd3257 119 }
ADIJake 0:85855ecd3257 120 }
ADIJake 0:85855ecd3257 121
Vkadaba 5:0728bde67bdb 122 ADMW_RESULT GpioContext::set(
Vkadaba 5:0728bde67bdb 123 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 124 bool state)
ADIJake 0:85855ecd3257 125 {
Vkadaba 23:bb685f35b08b 126 switch(ePinId) {
Vkadaba 23:bb685f35b08b 127 case ADMW_GPIO_PIN_RESET:
Vkadaba 23:bb685f35b08b 128 _reset = state;
Vkadaba 23:bb685f35b08b 129 break;
Vkadaba 23:bb685f35b08b 130 default:
Vkadaba 23:bb685f35b08b 131 return ADMW_INVALID_DEVICE_NUM;
ADIJake 0:85855ecd3257 132 }
ADIJake 0:85855ecd3257 133
Vkadaba 5:0728bde67bdb 134 return ADMW_SUCCESS;
ADIJake 0:85855ecd3257 135 }
ADIJake 0:85855ecd3257 136
Vkadaba 5:0728bde67bdb 137 ADMW_RESULT GpioContext::enableIrq(
Vkadaba 5:0728bde67bdb 138 ADMW_GPIO_PIN ePinId,
Vkadaba 5:0728bde67bdb 139 ADMW_GPIO_CALLBACK callbackFn,
ADIJake 0:85855ecd3257 140 void *pArg)
ADIJake 0:85855ecd3257 141 {
Vkadaba 23:bb685f35b08b 142 switch(ePinId) {
Vkadaba 23:bb685f35b08b 143 case ADMW_GPIO_PIN_ALERT_ERROR:
Vkadaba 23:bb685f35b08b 144 _alertErrorIrqCallback = callbackFn;
Vkadaba 23:bb685f35b08b 145 _alertErrorIrqArg = pArg;
Vkadaba 23:bb685f35b08b 146 _alertErrorIrq.rise(callback(this, &GpioContext::_alertErrorIrqHandler));
Vkadaba 23:bb685f35b08b 147 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 148 case ADMW_GPIO_PIN_DATAREADY:
Vkadaba 23:bb685f35b08b 149 _datareadyIrqCallback = callbackFn;
Vkadaba 23:bb685f35b08b 150 _datareadyIrqArg = pArg;
Vkadaba 23:bb685f35b08b 151 _datareadyIrq.rise(callback(this, &GpioContext::_datareadyIrqHandler));
Vkadaba 23:bb685f35b08b 152 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 153 default:
Vkadaba 23:bb685f35b08b 154 return ADMW_INVALID_DEVICE_NUM;
ADIJake 0:85855ecd3257 155 }
ADIJake 0:85855ecd3257 156 }
ADIJake 0:85855ecd3257 157
Vkadaba 5:0728bde67bdb 158 ADMW_RESULT GpioContext::disableIrq(
Vkadaba 5:0728bde67bdb 159 ADMW_GPIO_PIN ePinId)
ADIJake 0:85855ecd3257 160 {
Vkadaba 23:bb685f35b08b 161 switch(ePinId) {
Vkadaba 23:bb685f35b08b 162 case ADMW_GPIO_PIN_ALERT_ERROR:
Vkadaba 23:bb685f35b08b 163 _alertErrorIrq.rise(NULL);
Vkadaba 23:bb685f35b08b 164 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 165 case ADMW_GPIO_PIN_DATAREADY:
Vkadaba 23:bb685f35b08b 166 _datareadyIrq.rise(NULL);
Vkadaba 23:bb685f35b08b 167 return ADMW_SUCCESS;
Vkadaba 23:bb685f35b08b 168 default:
Vkadaba 23:bb685f35b08b 169 return ADMW_INVALID_DEVICE_NUM;
ADIJake 0:85855ecd3257 170 }
ADIJake 0:85855ecd3257 171 }
ADIJake 0:85855ecd3257 172
ADIJake 0:85855ecd3257 173 #ifdef __cplusplus
ADIJake 0:85855ecd3257 174 extern "C" {
ADIJake 0:85855ecd3257 175 #endif
ADIJake 0:85855ecd3257 176
ADIJake 0:85855ecd3257 177 /*
ADIJake 0:85855ecd3257 178 * Open the GPIO interface and allocate resources
ADIJake 0:85855ecd3257 179 */
Vkadaba 5:0728bde67bdb 180 ADMW_RESULT admw_GpioOpen(
Vkadaba 5:0728bde67bdb 181 ADMW_PLATFORM_GPIO_CONFIG *pConfig,
Vkadaba 5:0728bde67bdb 182 ADMW_GPIO_HANDLE *phDevice)
ADIJake 0:85855ecd3257 183 {
ADIJake 0:85855ecd3257 184 GpioContext *pCtx = new GpioContext((PinName)pConfig->resetPin,
Vkadaba 5:0728bde67bdb 185 (PinName)pConfig->alertErrorPin,
ADIJake 0:85855ecd3257 186 (PinName)pConfig->datareadyPin);
Vkadaba 23:bb685f35b08b 187 if (!pCtx) {
Vkadaba 5:0728bde67bdb 188 ADMW_LOG_ERROR("Failed to allocate memory for GPIO context");
Vkadaba 5:0728bde67bdb 189 return ADMW_NO_MEM;
ADIJake 0:85855ecd3257 190 }
ADIJake 0:85855ecd3257 191
Vkadaba 5:0728bde67bdb 192 *phDevice = reinterpret_cast<ADMW_GPIO_HANDLE>(pCtx);
Vkadaba 5:0728bde67bdb 193 return ADMW_SUCCESS;
ADIJake 0:85855ecd3257 194 }
ADIJake 0:85855ecd3257 195
ADIJake 0:85855ecd3257 196 /*
ADIJake 0:85855ecd3257 197 * Get the state of the specified GPIO pin
ADIJake 0:85855ecd3257 198 */
Vkadaba 5:0728bde67bdb 199 ADMW_RESULT admw_GpioGet(
Vkadaba 5:0728bde67bdb 200 ADMW_GPIO_HANDLE hDevice,
Vkadaba 5:0728bde67bdb 201 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 202 bool *pbState)
ADIJake 0:85855ecd3257 203 {
ADIJake 0:85855ecd3257 204 GpioContext *pCtx = reinterpret_cast<GpioContext *>(hDevice);
ADIJake 0:85855ecd3257 205
ADIJake 0:85855ecd3257 206 return pCtx->get(ePinId, pbState);
ADIJake 0:85855ecd3257 207 }
ADIJake 0:85855ecd3257 208
ADIJake 0:85855ecd3257 209 /*
ADIJake 0:85855ecd3257 210 * Set the state of the specified GPIO pin
ADIJake 0:85855ecd3257 211 */
Vkadaba 5:0728bde67bdb 212 ADMW_RESULT admw_GpioSet(
Vkadaba 5:0728bde67bdb 213 ADMW_GPIO_HANDLE hDevice,
Vkadaba 5:0728bde67bdb 214 ADMW_GPIO_PIN ePinId,
ADIJake 0:85855ecd3257 215 bool bState)
ADIJake 0:85855ecd3257 216 {
ADIJake 0:85855ecd3257 217 GpioContext *pCtx = reinterpret_cast<GpioContext *>(hDevice);
ADIJake 0:85855ecd3257 218
ADIJake 0:85855ecd3257 219 return pCtx->set(ePinId, bState);
ADIJake 0:85855ecd3257 220 }
ADIJake 0:85855ecd3257 221
ADIJake 0:85855ecd3257 222 /*
ADIJake 0:85855ecd3257 223 * Enable interrupt notifications on the specified GPIO pin
ADIJake 0:85855ecd3257 224 */
Vkadaba 5:0728bde67bdb 225 ADMW_RESULT admw_GpioIrqEnable(
Vkadaba 5:0728bde67bdb 226 ADMW_GPIO_HANDLE hDevice,
Vkadaba 5:0728bde67bdb 227 ADMW_GPIO_PIN ePinId,
Vkadaba 5:0728bde67bdb 228 ADMW_GPIO_CALLBACK callback,
ADIJake 0:85855ecd3257 229 void *arg)
ADIJake 0:85855ecd3257 230 {
ADIJake 0:85855ecd3257 231 GpioContext *pCtx = reinterpret_cast<GpioContext *>(hDevice);
ADIJake 0:85855ecd3257 232
ADIJake 0:85855ecd3257 233 return pCtx->enableIrq(ePinId, callback, arg);
ADIJake 0:85855ecd3257 234 }
ADIJake 0:85855ecd3257 235
ADIJake 0:85855ecd3257 236 /*
ADIJake 0:85855ecd3257 237 * Disable interrupt notifications on the specified GPIO pin
ADIJake 0:85855ecd3257 238 */
Vkadaba 5:0728bde67bdb 239 ADMW_RESULT admw_GpioIrqDisable(
Vkadaba 5:0728bde67bdb 240 ADMW_GPIO_HANDLE hDevice,
Vkadaba 5:0728bde67bdb 241 ADMW_GPIO_PIN ePinId)
ADIJake 0:85855ecd3257 242 {
ADIJake 0:85855ecd3257 243 GpioContext *pCtx = reinterpret_cast<GpioContext *>(hDevice);
ADIJake 0:85855ecd3257 244
ADIJake 0:85855ecd3257 245 return pCtx->disableIrq(ePinId);
ADIJake 0:85855ecd3257 246 }
ADIJake 0:85855ecd3257 247
ADIJake 0:85855ecd3257 248 /*
ADIJake 0:85855ecd3257 249 * Close the GPIO interface and free resources
ADIJake 0:85855ecd3257 250 */
Vkadaba 5:0728bde67bdb 251 void admw_GpioClose(
Vkadaba 5:0728bde67bdb 252 ADMW_GPIO_HANDLE hDevice)
ADIJake 0:85855ecd3257 253 {
ADIJake 0:85855ecd3257 254 GpioContext *pCtx = reinterpret_cast<GpioContext *>(hDevice);
ADIJake 0:85855ecd3257 255
ADIJake 0:85855ecd3257 256 delete pCtx;
ADIJake 0:85855ecd3257 257 }
ADIJake 0:85855ecd3257 258
ADIJake 0:85855ecd3257 259 #ifdef __cplusplus
ADIJake 0:85855ecd3257 260 }
ADIJake 0:85855ecd3257 261 #endif