Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:12:37 2018 -0700
Revision:
9:d58e77ebd769
add mbed-os library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 9:d58e77ebd769 1 /* mbed Microcontroller Library
Nathan Yonkee 9:d58e77ebd769 2 * Copyright (c) 2006-2012 ARM Limited
Nathan Yonkee 9:d58e77ebd769 3 *
Nathan Yonkee 9:d58e77ebd769 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
Nathan Yonkee 9:d58e77ebd769 5 * of this software and associated documentation files (the "Software"), to deal
Nathan Yonkee 9:d58e77ebd769 6 * in the Software without restriction, including without limitation the rights
Nathan Yonkee 9:d58e77ebd769 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Nathan Yonkee 9:d58e77ebd769 8 * copies of the Software, and to permit persons to whom the Software is
Nathan Yonkee 9:d58e77ebd769 9 * furnished to do so, subject to the following conditions:
Nathan Yonkee 9:d58e77ebd769 10 *
Nathan Yonkee 9:d58e77ebd769 11 * The above copyright notice and this permission notice shall be included in
Nathan Yonkee 9:d58e77ebd769 12 * all copies or substantial portions of the Software.
Nathan Yonkee 9:d58e77ebd769 13 *
Nathan Yonkee 9:d58e77ebd769 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Nathan Yonkee 9:d58e77ebd769 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Nathan Yonkee 9:d58e77ebd769 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Nathan Yonkee 9:d58e77ebd769 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Nathan Yonkee 9:d58e77ebd769 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Nathan Yonkee 9:d58e77ebd769 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Nathan Yonkee 9:d58e77ebd769 20 * SOFTWARE.
Nathan Yonkee 9:d58e77ebd769 21 */
Nathan Yonkee 9:d58e77ebd769 22 #include "rtos/Semaphore.h"
Nathan Yonkee 9:d58e77ebd769 23 #include "rtos/Kernel.h"
Nathan Yonkee 9:d58e77ebd769 24 #include "platform/mbed_assert.h"
Nathan Yonkee 9:d58e77ebd769 25
Nathan Yonkee 9:d58e77ebd769 26 #include <string.h>
Nathan Yonkee 9:d58e77ebd769 27
Nathan Yonkee 9:d58e77ebd769 28 namespace rtos {
Nathan Yonkee 9:d58e77ebd769 29
Nathan Yonkee 9:d58e77ebd769 30 Semaphore::Semaphore(int32_t count) {
Nathan Yonkee 9:d58e77ebd769 31 constructor(count, 0xffff);
Nathan Yonkee 9:d58e77ebd769 32 }
Nathan Yonkee 9:d58e77ebd769 33
Nathan Yonkee 9:d58e77ebd769 34 Semaphore::Semaphore(int32_t count, uint16_t max_count) {
Nathan Yonkee 9:d58e77ebd769 35 constructor(count, max_count);
Nathan Yonkee 9:d58e77ebd769 36 }
Nathan Yonkee 9:d58e77ebd769 37
Nathan Yonkee 9:d58e77ebd769 38 void Semaphore::constructor(int32_t count, uint16_t max_count) {
Nathan Yonkee 9:d58e77ebd769 39 memset(&_obj_mem, 0, sizeof(_obj_mem));
Nathan Yonkee 9:d58e77ebd769 40 osSemaphoreAttr_t attr = { 0 };
Nathan Yonkee 9:d58e77ebd769 41 attr.cb_mem = &_obj_mem;
Nathan Yonkee 9:d58e77ebd769 42 attr.cb_size = sizeof(_obj_mem);
Nathan Yonkee 9:d58e77ebd769 43 _id = osSemaphoreNew(max_count, count, &attr);
Nathan Yonkee 9:d58e77ebd769 44 MBED_ASSERT(_id != NULL);
Nathan Yonkee 9:d58e77ebd769 45 }
Nathan Yonkee 9:d58e77ebd769 46
Nathan Yonkee 9:d58e77ebd769 47 int32_t Semaphore::wait(uint32_t millisec) {
Nathan Yonkee 9:d58e77ebd769 48 osStatus_t stat = osSemaphoreAcquire(_id, millisec);
Nathan Yonkee 9:d58e77ebd769 49 switch (stat) {
Nathan Yonkee 9:d58e77ebd769 50 case osOK:
Nathan Yonkee 9:d58e77ebd769 51 return osSemaphoreGetCount(_id) + 1;
Nathan Yonkee 9:d58e77ebd769 52 case osErrorTimeout:
Nathan Yonkee 9:d58e77ebd769 53 case osErrorResource:
Nathan Yonkee 9:d58e77ebd769 54 return 0;
Nathan Yonkee 9:d58e77ebd769 55 case osErrorParameter:
Nathan Yonkee 9:d58e77ebd769 56 default:
Nathan Yonkee 9:d58e77ebd769 57 return -1;
Nathan Yonkee 9:d58e77ebd769 58 }
Nathan Yonkee 9:d58e77ebd769 59 }
Nathan Yonkee 9:d58e77ebd769 60
Nathan Yonkee 9:d58e77ebd769 61 int32_t Semaphore::wait_until(uint64_t millisec) {
Nathan Yonkee 9:d58e77ebd769 62 uint64_t now = Kernel::get_ms_count();
Nathan Yonkee 9:d58e77ebd769 63
Nathan Yonkee 9:d58e77ebd769 64 if (now >= millisec) {
Nathan Yonkee 9:d58e77ebd769 65 return wait(0);
Nathan Yonkee 9:d58e77ebd769 66 } else if (millisec - now >= osWaitForever) {
Nathan Yonkee 9:d58e77ebd769 67 // API permits early return
Nathan Yonkee 9:d58e77ebd769 68 return wait(osWaitForever - 1);
Nathan Yonkee 9:d58e77ebd769 69 } else {
Nathan Yonkee 9:d58e77ebd769 70 return wait(millisec - now);
Nathan Yonkee 9:d58e77ebd769 71 }
Nathan Yonkee 9:d58e77ebd769 72 }
Nathan Yonkee 9:d58e77ebd769 73
Nathan Yonkee 9:d58e77ebd769 74 osStatus Semaphore::release(void) {
Nathan Yonkee 9:d58e77ebd769 75 return osSemaphoreRelease(_id);
Nathan Yonkee 9:d58e77ebd769 76 }
Nathan Yonkee 9:d58e77ebd769 77
Nathan Yonkee 9:d58e77ebd769 78 Semaphore::~Semaphore() {
Nathan Yonkee 9:d58e77ebd769 79 osSemaphoreDelete(_id);
Nathan Yonkee 9:d58e77ebd769 80 }
Nathan Yonkee 9:d58e77ebd769 81
Nathan Yonkee 9:d58e77ebd769 82 }