Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Revision:
18:6a4db94011d3
diff -r f713758f6238 -r 6a4db94011d3 mbed-dev/targets/TARGET_ublox/TARGET_HI2110/port_api.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-dev/targets/TARGET_ublox/TARGET_HI2110/port_api.c	Sun May 14 23:18:57 2017 +0000
@@ -0,0 +1,103 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2016 u-blox
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* TODO: this needs testing */
+
+#include "port_api.h"
+#include "pinmap.h"
+#include "gpio_api.h"
+
+PinName port_pin(PortName port, int pin_n)
+{
+    MBED_ASSERT (port < PortMaxNumber);
+
+    (void) port;
+    return (PinName)(pin_n);
+}
+
+void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
+{
+    MBED_ASSERT (port < PortMaxNumber);
+
+    obj->port = port;
+    obj->mask = mask;
+
+    obj->reg_dir = &GPIO_DIR;
+    obj->reg_out = &GPIO_OUT;
+    obj->reg_val = &GPIO_VALUE;
+    obj->reg_drv = &GPIO_DRIVE;
+
+    /* Claim the pins */
+    for (uint8_t x = 0; x < NUM_PINS; x++) {
+        if (mask & (1ul << x)) {
+            pin_function((PinName) x, PIN_FUNCTION_GPIO);
+        }
+    }
+    
+    /* Set up the pins */
+    port_dir(obj, dir);
+}
+
+void port_mode(port_t *obj, PinMode mode)
+{
+    switch (mode) {
+        case PullUp:
+        {
+            MBED_ASSERT(false);  /* Not currently supported on HI2110 */
+        }
+        break;
+        case PullDown:
+        {
+            GPIO_PULLEN_BITSET |= obj->mask;
+        }
+        break;
+        case PullNone:
+        {
+            GPIO_PULLEN_BITCLR &= ~(obj->mask);
+        }
+        break;
+        default:
+        break;
+    }
+}
+
+void port_dir(port_t *obj, PinDirection dir)
+{
+    switch (dir) {
+        case PIN_INPUT:
+        {
+            *(obj->reg_dir) &= ~(obj->mask);
+        }
+        break;
+        case PIN_OUTPUT:
+        {
+            *(obj->reg_dir) |= obj->mask;
+            /* TODO: do we need to set the drive strength?  If so, how do we decide which way? */
+            /* obj->reg_drv |= obj->mask; */
+        }
+        break;
+    }
+}
+
+void port_write(port_t *obj, int value)
+{
+    *(obj->reg_out) = value;
+}
+
+int port_read(port_t *obj)
+{
+    return *(obj->reg_val);
+}