5.2.1 - Updated I2C files

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /* Socket
group-onsemi 0:098463de4c5d 2 * Copyright (c) 2015 ARM Limited
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 5 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 6 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 7 *
group-onsemi 0:098463de4c5d 8 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 11 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 13 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 14 * limitations under the License.
group-onsemi 0:098463de4c5d 15 */
group-onsemi 0:098463de4c5d 16
group-onsemi 0:098463de4c5d 17 #include "UDPSocket.h"
group-onsemi 0:098463de4c5d 18 #include "Timer.h"
group-onsemi 0:098463de4c5d 19 #include "mbed_assert.h"
group-onsemi 0:098463de4c5d 20
group-onsemi 0:098463de4c5d 21 UDPSocket::UDPSocket()
group-onsemi 0:098463de4c5d 22 : _pending(1), _read_sem(0), _write_sem(0)
group-onsemi 0:098463de4c5d 23 {
group-onsemi 0:098463de4c5d 24 }
group-onsemi 0:098463de4c5d 25
group-onsemi 0:098463de4c5d 26 UDPSocket::~UDPSocket()
group-onsemi 0:098463de4c5d 27 {
group-onsemi 0:098463de4c5d 28 close();
group-onsemi 0:098463de4c5d 29 }
group-onsemi 0:098463de4c5d 30
group-onsemi 0:098463de4c5d 31 nsapi_protocol_t UDPSocket::get_proto()
group-onsemi 0:098463de4c5d 32 {
group-onsemi 0:098463de4c5d 33 return NSAPI_UDP;
group-onsemi 0:098463de4c5d 34 }
group-onsemi 0:098463de4c5d 35
group-onsemi 0:098463de4c5d 36 nsapi_size_or_error_t UDPSocket::sendto(const char *host, uint16_t port, const void *data, nsapi_size_t size)
group-onsemi 0:098463de4c5d 37 {
group-onsemi 0:098463de4c5d 38 SocketAddress address;
group-onsemi 0:098463de4c5d 39 nsapi_size_or_error_t err = _stack->gethostbyname(host, &address);
group-onsemi 0:098463de4c5d 40 if (err) {
group-onsemi 0:098463de4c5d 41 return NSAPI_ERROR_DNS_FAILURE;
group-onsemi 0:098463de4c5d 42 }
group-onsemi 0:098463de4c5d 43
group-onsemi 0:098463de4c5d 44 address.set_port(port);
group-onsemi 0:098463de4c5d 45
group-onsemi 0:098463de4c5d 46 // sendto is thread safe
group-onsemi 0:098463de4c5d 47 return sendto(address, data, size);
group-onsemi 0:098463de4c5d 48 }
group-onsemi 0:098463de4c5d 49
group-onsemi 0:098463de4c5d 50 nsapi_size_or_error_t UDPSocket::sendto(const SocketAddress &address, const void *data, nsapi_size_t size)
group-onsemi 0:098463de4c5d 51 {
group-onsemi 0:098463de4c5d 52 _lock.lock();
group-onsemi 0:098463de4c5d 53 nsapi_size_or_error_t ret;
group-onsemi 0:098463de4c5d 54
group-onsemi 0:098463de4c5d 55 while (true) {
group-onsemi 0:098463de4c5d 56 if (!_socket) {
group-onsemi 0:098463de4c5d 57 ret = NSAPI_ERROR_NO_SOCKET;
group-onsemi 0:098463de4c5d 58 break;
group-onsemi 0:098463de4c5d 59 }
group-onsemi 0:098463de4c5d 60
group-onsemi 0:098463de4c5d 61 _pending = 0;
group-onsemi 0:098463de4c5d 62 nsapi_size_or_error_t sent = _stack->socket_sendto(_socket, address, data, size);
group-onsemi 0:098463de4c5d 63 if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != sent)) {
group-onsemi 0:098463de4c5d 64 ret = sent;
group-onsemi 0:098463de4c5d 65 break;
group-onsemi 0:098463de4c5d 66 } else {
group-onsemi 0:098463de4c5d 67 int32_t count;
group-onsemi 0:098463de4c5d 68
group-onsemi 0:098463de4c5d 69 // Release lock before blocking so other threads
group-onsemi 0:098463de4c5d 70 // accessing this object aren't blocked
group-onsemi 0:098463de4c5d 71 _lock.unlock();
group-onsemi 0:098463de4c5d 72 count = _write_sem.wait(_timeout);
group-onsemi 0:098463de4c5d 73 _lock.lock();
group-onsemi 0:098463de4c5d 74
group-onsemi 0:098463de4c5d 75 if (count < 1) {
group-onsemi 0:098463de4c5d 76 // Semaphore wait timed out so break out and return
group-onsemi 0:098463de4c5d 77 ret = NSAPI_ERROR_WOULD_BLOCK;
group-onsemi 0:098463de4c5d 78 break;
group-onsemi 0:098463de4c5d 79 }
group-onsemi 0:098463de4c5d 80 }
group-onsemi 0:098463de4c5d 81 }
group-onsemi 0:098463de4c5d 82
group-onsemi 0:098463de4c5d 83 _lock.unlock();
group-onsemi 0:098463de4c5d 84 return ret;
group-onsemi 0:098463de4c5d 85 }
group-onsemi 0:098463de4c5d 86
group-onsemi 0:098463de4c5d 87 nsapi_size_or_error_t UDPSocket::recvfrom(SocketAddress *address, void *buffer, nsapi_size_t size)
group-onsemi 0:098463de4c5d 88 {
group-onsemi 0:098463de4c5d 89 _lock.lock();
group-onsemi 0:098463de4c5d 90 nsapi_size_or_error_t ret;
group-onsemi 0:098463de4c5d 91
group-onsemi 0:098463de4c5d 92 while (true) {
group-onsemi 0:098463de4c5d 93 if (!_socket) {
group-onsemi 0:098463de4c5d 94 ret = NSAPI_ERROR_NO_SOCKET;
group-onsemi 0:098463de4c5d 95 break;
group-onsemi 0:098463de4c5d 96 }
group-onsemi 0:098463de4c5d 97
group-onsemi 0:098463de4c5d 98 _pending = 0;
group-onsemi 0:098463de4c5d 99 nsapi_size_or_error_t recv = _stack->socket_recvfrom(_socket, address, buffer, size);
group-onsemi 0:098463de4c5d 100 if ((0 == _timeout) || (NSAPI_ERROR_WOULD_BLOCK != recv)) {
group-onsemi 0:098463de4c5d 101 ret = recv;
group-onsemi 0:098463de4c5d 102 break;
group-onsemi 0:098463de4c5d 103 } else {
group-onsemi 0:098463de4c5d 104 int32_t count;
group-onsemi 0:098463de4c5d 105
group-onsemi 0:098463de4c5d 106 // Release lock before blocking so other threads
group-onsemi 0:098463de4c5d 107 // accessing this object aren't blocked
group-onsemi 0:098463de4c5d 108 _lock.unlock();
group-onsemi 0:098463de4c5d 109 count = _read_sem.wait(_timeout);
group-onsemi 0:098463de4c5d 110 _lock.lock();
group-onsemi 0:098463de4c5d 111
group-onsemi 0:098463de4c5d 112 if (count < 1) {
group-onsemi 0:098463de4c5d 113 // Semaphore wait timed out so break out and return
group-onsemi 0:098463de4c5d 114 ret = NSAPI_ERROR_WOULD_BLOCK;
group-onsemi 0:098463de4c5d 115 break;
group-onsemi 0:098463de4c5d 116 }
group-onsemi 0:098463de4c5d 117 }
group-onsemi 0:098463de4c5d 118 }
group-onsemi 0:098463de4c5d 119
group-onsemi 0:098463de4c5d 120 _lock.unlock();
group-onsemi 0:098463de4c5d 121 return ret;
group-onsemi 0:098463de4c5d 122 }
group-onsemi 0:098463de4c5d 123
group-onsemi 0:098463de4c5d 124 void UDPSocket::event()
group-onsemi 0:098463de4c5d 125 {
group-onsemi 0:098463de4c5d 126 int32_t wcount = _write_sem.wait(0);
group-onsemi 0:098463de4c5d 127 if (wcount <= 1) {
group-onsemi 0:098463de4c5d 128 _write_sem.release();
group-onsemi 0:098463de4c5d 129 }
group-onsemi 0:098463de4c5d 130 int32_t rcount = _read_sem.wait(0);
group-onsemi 0:098463de4c5d 131 if (rcount <= 1) {
group-onsemi 0:098463de4c5d 132 _read_sem.release();
group-onsemi 0:098463de4c5d 133 }
group-onsemi 0:098463de4c5d 134
group-onsemi 0:098463de4c5d 135 _pending += 1;
group-onsemi 0:098463de4c5d 136 if (_callback && _pending == 1) {
group-onsemi 0:098463de4c5d 137 _callback();
group-onsemi 0:098463de4c5d 138 }
group-onsemi 0:098463de4c5d 139 }