Lancaster University's (short term!) clone of mbed-src for micro:bit. This is a copy of the github branch https://github.com/lancaster-university/mbed-classic
Fork of mbed-src by
Diff: capi/mbed_interface.c
- Revision:
- 2:143cac498751
- Parent:
- 0:fd0d7bdfcdc2
--- a/capi/mbed_interface.c Thu Nov 29 15:41:14 2012 +0000 +++ b/capi/mbed_interface.c Mon Feb 18 11:44:18 2013 +0000 @@ -1,23 +1,17 @@ /* mbed Microcontroller Library - * Copyright (c) 2006-2012 ARM Limited + * Copyright (c) 2006-2013 ARM Limited * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: + * 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 * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * 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. */ #include <stdio.h> #include "mbed_interface.h" @@ -26,6 +20,9 @@ #include "wait_api.h" #include "semihost_api.h" #include "error.h" +#include "toolchain.h" + +#if DEVICE_SEMIHOST // return true if a debugger is attached, indicating mbed interface is connected int mbed_interface_connected(void) { @@ -34,15 +31,15 @@ int mbed_interface_reset(void) { if (mbed_interface_connected()) { - semihost_reset(); + semihost_reset(); return 0; } else { return -1; } } -int mbed_interface_uid(char *uid) __attribute__((weak)); -int mbed_interface_uid(char *uid) { +WEAK int mbed_interface_uid(char *uid); +WEAK int mbed_interface_uid(char *uid) { if (mbed_interface_connected()) { return semihost_uid(uid); // Returns 0 if successful, -1 on failure } else { @@ -60,7 +57,6 @@ } int mbed_interface_powerdown(void) { - mbed_interface_disconnect(); if (mbed_interface_connected()) { return semihost_powerdown(); } else { @@ -68,36 +64,44 @@ } } -void mbed_mac_address(char *mac) __attribute__((weak)); -void mbed_mac_address(char *mac) { - char uid[33]; - int i; - - // if we have a UID, extract the MAC - if (mbed_interface_uid(uid) == 0) { - char *p = uid + 20; - for (i=0; i<6; i++) { - int byte; - sscanf(p, "%2x", &byte); - mac[i] = byte; - p += 2; - } - } else { // else return a default MAC - mac[0] = 0x00; - mac[1] = 0x02; - mac[2] = 0xF7; - mac[3] = 0xF0; - mac[4] = 0x00; - mac[5] = 0x00; - } -} - // for backward compatibility void mbed_reset(void) { mbed_interface_reset(); } -int mbed_uid(char *uid) __attribute__((weak)); -int mbed_uid(char *uid) { +WEAK int mbed_uid(char *uid); +WEAK int mbed_uid(char *uid) { return mbed_interface_uid(uid); } +#endif + +WEAK void mbed_mac_address(char *mac); +WEAK void mbed_mac_address(char *mac) { +#if DEVICE_SEMIHOST + char uid[DEVICE_ID_LENGTH + 1]; + int i; + + // if we have a UID, extract the MAC + if (mbed_interface_uid(uid) == 0) { + char *p = uid; +#if defined(DEVICE_MAC_OFFSET) + p += DEVICE_MAC_OFFSET; +#endif + for (i=0; i<6; i++) { + int byte; + sscanf(p, "%2x", &byte); + mac[i] = byte; + p += 2; + } + } else { // else return a default MAC +#endif + mac[0] = 0x00; + mac[1] = 0x02; + mac[2] = 0xF7; + mac[3] = 0xF0; + mac[4] = 0x00; + mac[5] = 0x00; +#if DEVICE_SEMIHOST + } +#endif +}