5.2.1 - Updated I2C files

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

Committer:
group-onsemi
Date:
Wed Jan 25 20:34:15 2017 +0000
Revision:
0:098463de4c5d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /*
group-onsemi 0:098463de4c5d 2 * Implementation for the mbed library
group-onsemi 0:098463de4c5d 3 * https://github.com/mbedmicro/mbed
group-onsemi 0:098463de4c5d 4 *
group-onsemi 0:098463de4c5d 5 * Copyright (c) 2016 Christopher Haster
group-onsemi 0:098463de4c5d 6 *
group-onsemi 0:098463de4c5d 7 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 8 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 9 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 10 *
group-onsemi 0:098463de4c5d 11 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 12 *
group-onsemi 0:098463de4c5d 13 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 14 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 16 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 17 * limitations under the License.
group-onsemi 0:098463de4c5d 18 */
group-onsemi 0:098463de4c5d 19 #include "equeue/equeue_platform.h"
group-onsemi 0:098463de4c5d 20
group-onsemi 0:098463de4c5d 21 #if defined(EQUEUE_PLATFORM_MBED)
group-onsemi 0:098463de4c5d 22
group-onsemi 0:098463de4c5d 23 #include <stdbool.h>
group-onsemi 0:098463de4c5d 24 #include "mbed.h"
group-onsemi 0:098463de4c5d 25
group-onsemi 0:098463de4c5d 26
group-onsemi 0:098463de4c5d 27 // Ticker operations
group-onsemi 0:098463de4c5d 28 static bool equeue_tick_inited = false;
group-onsemi 0:098463de4c5d 29 static unsigned equeue_minutes = 0;
group-onsemi 0:098463de4c5d 30 static unsigned equeue_timer[
group-onsemi 0:098463de4c5d 31 (sizeof(Timer)+sizeof(unsigned)-1)/sizeof(unsigned)];
group-onsemi 0:098463de4c5d 32 static unsigned equeue_ticker[
group-onsemi 0:098463de4c5d 33 (sizeof(Ticker)+sizeof(unsigned)-1)/sizeof(unsigned)];
group-onsemi 0:098463de4c5d 34
group-onsemi 0:098463de4c5d 35 static void equeue_tick_update() {
group-onsemi 0:098463de4c5d 36 reinterpret_cast<Timer*>(equeue_timer)->reset();
group-onsemi 0:098463de4c5d 37 equeue_minutes += 1;
group-onsemi 0:098463de4c5d 38 }
group-onsemi 0:098463de4c5d 39
group-onsemi 0:098463de4c5d 40 static void equeue_tick_init() {
group-onsemi 0:098463de4c5d 41 MBED_STATIC_ASSERT(sizeof(equeue_timer) >= sizeof(Timer),
group-onsemi 0:098463de4c5d 42 "The equeue_timer buffer must fit the class Timer");
group-onsemi 0:098463de4c5d 43 MBED_STATIC_ASSERT(sizeof(equeue_ticker) >= sizeof(Ticker),
group-onsemi 0:098463de4c5d 44 "The equeue_ticker buffer must fit the class Ticker");
group-onsemi 0:098463de4c5d 45 new (equeue_timer) Timer;
group-onsemi 0:098463de4c5d 46 new (equeue_ticker) Ticker;
group-onsemi 0:098463de4c5d 47
group-onsemi 0:098463de4c5d 48 equeue_minutes = 0;
group-onsemi 0:098463de4c5d 49 reinterpret_cast<Timer*>(equeue_timer)->start();
group-onsemi 0:098463de4c5d 50 reinterpret_cast<Ticker*>(equeue_ticker)
group-onsemi 0:098463de4c5d 51 ->attach_us(equeue_tick_update, (1 << 16)*1000);
group-onsemi 0:098463de4c5d 52
group-onsemi 0:098463de4c5d 53 equeue_tick_inited = true;
group-onsemi 0:098463de4c5d 54 }
group-onsemi 0:098463de4c5d 55
group-onsemi 0:098463de4c5d 56 unsigned equeue_tick() {
group-onsemi 0:098463de4c5d 57 if (!equeue_tick_inited) {
group-onsemi 0:098463de4c5d 58 equeue_tick_init();
group-onsemi 0:098463de4c5d 59 }
group-onsemi 0:098463de4c5d 60
group-onsemi 0:098463de4c5d 61 unsigned equeue_ms = reinterpret_cast<Timer*>(equeue_timer)->read_ms();
group-onsemi 0:098463de4c5d 62 return (equeue_minutes << 16) + equeue_ms;
group-onsemi 0:098463de4c5d 63 }
group-onsemi 0:098463de4c5d 64
group-onsemi 0:098463de4c5d 65
group-onsemi 0:098463de4c5d 66 // Mutex operations
group-onsemi 0:098463de4c5d 67 int equeue_mutex_create(equeue_mutex_t *m) { return 0; }
group-onsemi 0:098463de4c5d 68 void equeue_mutex_destroy(equeue_mutex_t *m) { }
group-onsemi 0:098463de4c5d 69
group-onsemi 0:098463de4c5d 70 void equeue_mutex_lock(equeue_mutex_t *m) {
group-onsemi 0:098463de4c5d 71 core_util_critical_section_enter();
group-onsemi 0:098463de4c5d 72 }
group-onsemi 0:098463de4c5d 73
group-onsemi 0:098463de4c5d 74 void equeue_mutex_unlock(equeue_mutex_t *m) {
group-onsemi 0:098463de4c5d 75 core_util_critical_section_exit();
group-onsemi 0:098463de4c5d 76 }
group-onsemi 0:098463de4c5d 77
group-onsemi 0:098463de4c5d 78
group-onsemi 0:098463de4c5d 79 // Semaphore operations
group-onsemi 0:098463de4c5d 80 #ifdef MBED_CONF_RTOS_PRESENT
group-onsemi 0:098463de4c5d 81
group-onsemi 0:098463de4c5d 82 int equeue_sema_create(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 83 MBED_STATIC_ASSERT(sizeof(equeue_sema_t) >= sizeof(Semaphore),
group-onsemi 0:098463de4c5d 84 "The equeue_sema_t must fit the class Semaphore");
group-onsemi 0:098463de4c5d 85 new (s) Semaphore(0);
group-onsemi 0:098463de4c5d 86 return 0;
group-onsemi 0:098463de4c5d 87 }
group-onsemi 0:098463de4c5d 88
group-onsemi 0:098463de4c5d 89 void equeue_sema_destroy(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 90 reinterpret_cast<Semaphore*>(s)->~Semaphore();
group-onsemi 0:098463de4c5d 91 }
group-onsemi 0:098463de4c5d 92
group-onsemi 0:098463de4c5d 93 void equeue_sema_signal(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 94 reinterpret_cast<Semaphore*>(s)->release();
group-onsemi 0:098463de4c5d 95 }
group-onsemi 0:098463de4c5d 96
group-onsemi 0:098463de4c5d 97 bool equeue_sema_wait(equeue_sema_t *s, int ms) {
group-onsemi 0:098463de4c5d 98 if (ms < 0) {
group-onsemi 0:098463de4c5d 99 ms = osWaitForever;
group-onsemi 0:098463de4c5d 100 }
group-onsemi 0:098463de4c5d 101
group-onsemi 0:098463de4c5d 102 return (reinterpret_cast<Semaphore*>(s)->wait(ms) > 0);
group-onsemi 0:098463de4c5d 103 }
group-onsemi 0:098463de4c5d 104
group-onsemi 0:098463de4c5d 105 #else
group-onsemi 0:098463de4c5d 106
group-onsemi 0:098463de4c5d 107 // Semaphore operations
group-onsemi 0:098463de4c5d 108 int equeue_sema_create(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 109 *s = false;
group-onsemi 0:098463de4c5d 110 return 0;
group-onsemi 0:098463de4c5d 111 }
group-onsemi 0:098463de4c5d 112
group-onsemi 0:098463de4c5d 113 void equeue_sema_destroy(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 114 }
group-onsemi 0:098463de4c5d 115
group-onsemi 0:098463de4c5d 116 void equeue_sema_signal(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 117 *s = 1;
group-onsemi 0:098463de4c5d 118 }
group-onsemi 0:098463de4c5d 119
group-onsemi 0:098463de4c5d 120 static void equeue_sema_timeout(equeue_sema_t *s) {
group-onsemi 0:098463de4c5d 121 *s = -1;
group-onsemi 0:098463de4c5d 122 }
group-onsemi 0:098463de4c5d 123
group-onsemi 0:098463de4c5d 124 bool equeue_sema_wait(equeue_sema_t *s, int ms) {
group-onsemi 0:098463de4c5d 125 int signal = 0;
group-onsemi 0:098463de4c5d 126 Timeout timeout;
group-onsemi 0:098463de4c5d 127 if (ms > 0) {
group-onsemi 0:098463de4c5d 128 timeout.attach_us(callback(equeue_sema_timeout, s), ms*1000);
group-onsemi 0:098463de4c5d 129 }
group-onsemi 0:098463de4c5d 130
group-onsemi 0:098463de4c5d 131 core_util_critical_section_enter();
group-onsemi 0:098463de4c5d 132 while (!*s) {
group-onsemi 0:098463de4c5d 133 sleep();
group-onsemi 0:098463de4c5d 134 core_util_critical_section_exit();
group-onsemi 0:098463de4c5d 135 core_util_critical_section_enter();
group-onsemi 0:098463de4c5d 136 }
group-onsemi 0:098463de4c5d 137
group-onsemi 0:098463de4c5d 138 signal = *s;
group-onsemi 0:098463de4c5d 139 *s = false;
group-onsemi 0:098463de4c5d 140 core_util_critical_section_exit();
group-onsemi 0:098463de4c5d 141
group-onsemi 0:098463de4c5d 142 return (signal > 0);
group-onsemi 0:098463de4c5d 143 }
group-onsemi 0:098463de4c5d 144
group-onsemi 0:098463de4c5d 145 #endif
group-onsemi 0:098463de4c5d 146
group-onsemi 0:098463de4c5d 147 #endif