Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1 /* mbed Microcontroller Library
kadonotakashi 0:8fdf9a60065b 2 * Copyright (c) 2017 ARM Limited
kadonotakashi 0:8fdf9a60065b 3 *
kadonotakashi 0:8fdf9a60065b 4 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 5 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 6 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 7 *
kadonotakashi 0:8fdf9a60065b 8 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 9 *
kadonotakashi 0:8fdf9a60065b 10 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 11 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 13 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 14 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 15 */
kadonotakashi 0:8fdf9a60065b 16 #include "mbed_poll.h"
kadonotakashi 0:8fdf9a60065b 17 #include "FileHandle.h"
kadonotakashi 0:8fdf9a60065b 18 #if MBED_CONF_RTOS_PRESENT
kadonotakashi 0:8fdf9a60065b 19 #include "rtos/Kernel.h"
kadonotakashi 0:8fdf9a60065b 20 #include "rtos/Thread.h"
kadonotakashi 0:8fdf9a60065b 21 using namespace rtos;
kadonotakashi 0:8fdf9a60065b 22 #else
kadonotakashi 0:8fdf9a60065b 23 #include "drivers/Timer.h"
kadonotakashi 0:8fdf9a60065b 24 #include "drivers/LowPowerTimer.h"
kadonotakashi 0:8fdf9a60065b 25 #endif
kadonotakashi 0:8fdf9a60065b 26
kadonotakashi 0:8fdf9a60065b 27 namespace mbed {
kadonotakashi 0:8fdf9a60065b 28
kadonotakashi 0:8fdf9a60065b 29 // timeout -1 forever, or milliseconds
kadonotakashi 0:8fdf9a60065b 30 int poll(pollfh fhs[], unsigned nfhs, int timeout)
kadonotakashi 0:8fdf9a60065b 31 {
kadonotakashi 0:8fdf9a60065b 32 /**
kadonotakashi 0:8fdf9a60065b 33 * TODO Proper wake-up mechanism.
kadonotakashi 0:8fdf9a60065b 34 * In order to correctly detect availability of read/write a FileHandle, we needed
kadonotakashi 0:8fdf9a60065b 35 * a select or poll mechanisms. We opted for poll as POSIX defines in
kadonotakashi 0:8fdf9a60065b 36 * http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html Currently,
kadonotakashi 0:8fdf9a60065b 37 * mbed::poll() just spins and scans filehandles looking for any events we are
kadonotakashi 0:8fdf9a60065b 38 * interested in. In future, his spinning behaviour will be replaced with
kadonotakashi 0:8fdf9a60065b 39 * condition variables.
kadonotakashi 0:8fdf9a60065b 40 */
kadonotakashi 0:8fdf9a60065b 41 #if MBED_CONF_RTOS_PRESENT
kadonotakashi 0:8fdf9a60065b 42 uint64_t start_time = 0;
kadonotakashi 0:8fdf9a60065b 43 if (timeout > 0) {
kadonotakashi 0:8fdf9a60065b 44 start_time = Kernel::get_ms_count();
kadonotakashi 0:8fdf9a60065b 45 }
kadonotakashi 0:8fdf9a60065b 46 #define TIME_ELAPSED() int64_t(Kernel::get_ms_count() - start_time)
kadonotakashi 0:8fdf9a60065b 47 #else
kadonotakashi 0:8fdf9a60065b 48 #if MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER
kadonotakashi 0:8fdf9a60065b 49 LowPowerTimer timer;
kadonotakashi 0:8fdf9a60065b 50 #else
kadonotakashi 0:8fdf9a60065b 51 Timer timer;
kadonotakashi 0:8fdf9a60065b 52 #endif
kadonotakashi 0:8fdf9a60065b 53 if (timeout > 0) {
kadonotakashi 0:8fdf9a60065b 54 timer.start();
kadonotakashi 0:8fdf9a60065b 55 }
kadonotakashi 0:8fdf9a60065b 56 #define TIME_ELAPSED() timer.read_ms()
kadonotakashi 0:8fdf9a60065b 57 #endif // MBED_CONF_RTOS_PRESENT
kadonotakashi 0:8fdf9a60065b 58
kadonotakashi 0:8fdf9a60065b 59 int count = 0;
kadonotakashi 0:8fdf9a60065b 60 for (;;) {
kadonotakashi 0:8fdf9a60065b 61 /* Scan the file handles */
kadonotakashi 0:8fdf9a60065b 62 for (unsigned n = 0; n < nfhs; n++) {
kadonotakashi 0:8fdf9a60065b 63 FileHandle *fh = fhs[n].fh;
kadonotakashi 0:8fdf9a60065b 64 short mask = fhs[n].events | POLLERR | POLLHUP | POLLNVAL;
kadonotakashi 0:8fdf9a60065b 65 if (fh) {
kadonotakashi 0:8fdf9a60065b 66 fhs[n].revents = fh->poll(mask) & mask;
kadonotakashi 0:8fdf9a60065b 67 } else {
kadonotakashi 0:8fdf9a60065b 68 fhs[n].revents = POLLNVAL;
kadonotakashi 0:8fdf9a60065b 69 }
kadonotakashi 0:8fdf9a60065b 70 if (fhs[n].revents) {
kadonotakashi 0:8fdf9a60065b 71 count++;
kadonotakashi 0:8fdf9a60065b 72 }
kadonotakashi 0:8fdf9a60065b 73 }
kadonotakashi 0:8fdf9a60065b 74
kadonotakashi 0:8fdf9a60065b 75 if (count) {
kadonotakashi 0:8fdf9a60065b 76 break;
kadonotakashi 0:8fdf9a60065b 77 }
kadonotakashi 0:8fdf9a60065b 78
kadonotakashi 0:8fdf9a60065b 79 /* Nothing selected - this is where timeout handling would be needed */
kadonotakashi 0:8fdf9a60065b 80 if (timeout == 0 || (timeout > 0 && TIME_ELAPSED() > timeout)) {
kadonotakashi 0:8fdf9a60065b 81 break;
kadonotakashi 0:8fdf9a60065b 82 }
kadonotakashi 0:8fdf9a60065b 83 #ifdef MBED_CONF_RTOS_PRESENT
kadonotakashi 0:8fdf9a60065b 84 // TODO - proper blocking
kadonotakashi 0:8fdf9a60065b 85 // wait for condition variable, wait queue whatever here
kadonotakashi 0:8fdf9a60065b 86 rtos::Thread::wait(1);
kadonotakashi 0:8fdf9a60065b 87 #endif
kadonotakashi 0:8fdf9a60065b 88 }
kadonotakashi 0:8fdf9a60065b 89 return count;
kadonotakashi 0:8fdf9a60065b 90 }
kadonotakashi 0:8fdf9a60065b 91
kadonotakashi 0:8fdf9a60065b 92 } // namespace mbed