For YRL Robot Arm

Dependents:   PR_RobotArm_Show_Positions

Fork of PR-RobotArmController by James Hilder

Committer:
jah128
Date:
Fri Mar 03 13:37:44 2017 +0000
Revision:
1:aa92ba95a4bb
fixed wrist bug;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 1:aa92ba95a4bb 1 /* NB This is part of an older MBED library, included so the older code runs on the
jah128 1:aa92ba95a4bb 2 * newer MBED library. There is probably a better implementation.... - jah */
jah128 1:aa92ba95a4bb 3
jah128 1:aa92ba95a4bb 4 /* mbed Microcontroller Library
jah128 1:aa92ba95a4bb 5 * Copyright (c) 2006-2012 ARM Limited
jah128 1:aa92ba95a4bb 6 *
jah128 1:aa92ba95a4bb 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
jah128 1:aa92ba95a4bb 8 * of this software and associated documentation files (the "Software"), to deal
jah128 1:aa92ba95a4bb 9 * in the Software without restriction, including without limitation the rights
jah128 1:aa92ba95a4bb 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
jah128 1:aa92ba95a4bb 11 * copies of the Software, and to permit persons to whom the Software is
jah128 1:aa92ba95a4bb 12 * furnished to do so, subject to the following conditions:
jah128 1:aa92ba95a4bb 13 *
jah128 1:aa92ba95a4bb 14 * The above copyright notice and this permission notice shall be included in
jah128 1:aa92ba95a4bb 15 * all copies or substantial portions of the Software.
jah128 1:aa92ba95a4bb 16 *
jah128 1:aa92ba95a4bb 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jah128 1:aa92ba95a4bb 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jah128 1:aa92ba95a4bb 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
jah128 1:aa92ba95a4bb 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jah128 1:aa92ba95a4bb 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jah128 1:aa92ba95a4bb 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
jah128 1:aa92ba95a4bb 23 * SOFTWARE.
jah128 1:aa92ba95a4bb 24 *
jah128 1:aa92ba95a4bb 25 * NOTE: This is an unsupported legacy untested library.
jah128 1:aa92ba95a4bb 26 */
jah128 1:aa92ba95a4bb 27 #include "SerialHalfDuplex.h"
jah128 1:aa92ba95a4bb 28
jah128 1:aa92ba95a4bb 29 #if DEVICE_SERIAL
jah128 1:aa92ba95a4bb 30
jah128 1:aa92ba95a4bb 31 #include "pinmap.h"
jah128 1:aa92ba95a4bb 32 #include "serial_api.h"
jah128 1:aa92ba95a4bb 33 #include "gpio_api.h"
jah128 1:aa92ba95a4bb 34
jah128 1:aa92ba95a4bb 35 namespace mbed {
jah128 1:aa92ba95a4bb 36
jah128 1:aa92ba95a4bb 37 SerialHalfDuplex::SerialHalfDuplex(PinName tx, PinName rx, const char *name)
jah128 1:aa92ba95a4bb 38 : Serial(tx, rx, name) {
jah128 1:aa92ba95a4bb 39 _txpin = tx;
jah128 1:aa92ba95a4bb 40
jah128 1:aa92ba95a4bb 41 // set as input
jah128 1:aa92ba95a4bb 42 gpio_set(_txpin);
jah128 1:aa92ba95a4bb 43 pin_mode(_txpin, PullNone); // no pull
jah128 1:aa92ba95a4bb 44 pin_function(_txpin, 0); // set as gpio
jah128 1:aa92ba95a4bb 45 }
jah128 1:aa92ba95a4bb 46
jah128 1:aa92ba95a4bb 47 // To transmit a byte in half duplex mode:
jah128 1:aa92ba95a4bb 48 // 1. Disable interrupts, so we don't trigger on loopback byte
jah128 1:aa92ba95a4bb 49 // 2. Set tx pin to UART out
jah128 1:aa92ba95a4bb 50 // 3. Transmit byte as normal
jah128 1:aa92ba95a4bb 51 // 4. Read back byte from looped back tx pin - this both confirms that the
jah128 1:aa92ba95a4bb 52 // transmit has occurred, and also clears the byte from the buffer.
jah128 1:aa92ba95a4bb 53 // 5. Return pin to input mode
jah128 1:aa92ba95a4bb 54 // 6. Re-enable interrupts
jah128 1:aa92ba95a4bb 55
jah128 1:aa92ba95a4bb 56 int SerialHalfDuplex::_putc(int c) {
jah128 1:aa92ba95a4bb 57 int retc;
jah128 1:aa92ba95a4bb 58
jah128 1:aa92ba95a4bb 59 // TODO: We should not disable all interrupts
jah128 1:aa92ba95a4bb 60 __disable_irq();
jah128 1:aa92ba95a4bb 61
jah128 1:aa92ba95a4bb 62 serial_pinout_tx(_txpin);
jah128 1:aa92ba95a4bb 63
jah128 1:aa92ba95a4bb 64 Serial::_putc(c);
jah128 1:aa92ba95a4bb 65 retc = Serial::getc(); // reading also clears any interrupt
jah128 1:aa92ba95a4bb 66
jah128 1:aa92ba95a4bb 67 pin_function(_txpin, 0);
jah128 1:aa92ba95a4bb 68
jah128 1:aa92ba95a4bb 69 __enable_irq();
jah128 1:aa92ba95a4bb 70
jah128 1:aa92ba95a4bb 71 return retc;
jah128 1:aa92ba95a4bb 72 }
jah128 1:aa92ba95a4bb 73
jah128 1:aa92ba95a4bb 74 int SerialHalfDuplex::_getc(void) {
jah128 1:aa92ba95a4bb 75 return Serial::_getc();
jah128 1:aa92ba95a4bb 76 }
jah128 1:aa92ba95a4bb 77
jah128 1:aa92ba95a4bb 78 } // End namespace
jah128 1:aa92ba95a4bb 79
jah128 1:aa92ba95a4bb 80 #endif