Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

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-2018 Nuvoton
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
kadonotakashi 0:8fdf9a60065b 17 #if DEVICE_TRNG
kadonotakashi 0:8fdf9a60065b 18
kadonotakashi 0:8fdf9a60065b 19 #include <stdlib.h>
kadonotakashi 0:8fdf9a60065b 20 #include <string.h>
kadonotakashi 0:8fdf9a60065b 21 #include "cmsis.h"
kadonotakashi 0:8fdf9a60065b 22 #include "us_ticker_api.h"
kadonotakashi 0:8fdf9a60065b 23 #include "trng_api.h"
kadonotakashi 0:8fdf9a60065b 24 #include "crypto-misc.h"
kadonotakashi 0:8fdf9a60065b 25
kadonotakashi 0:8fdf9a60065b 26
kadonotakashi 0:8fdf9a60065b 27 /*
kadonotakashi 0:8fdf9a60065b 28 * Get Random number generator.
kadonotakashi 0:8fdf9a60065b 29 */
kadonotakashi 0:8fdf9a60065b 30
kadonotakashi 0:8fdf9a60065b 31 #define PRNG_KEY_SIZE (0x20UL)
kadonotakashi 0:8fdf9a60065b 32
kadonotakashi 0:8fdf9a60065b 33 static void trng_get(unsigned char *pConversionData)
kadonotakashi 0:8fdf9a60065b 34 {
kadonotakashi 0:8fdf9a60065b 35 uint32_t *p32ConversionData;
kadonotakashi 0:8fdf9a60065b 36
kadonotakashi 0:8fdf9a60065b 37 p32ConversionData = (uint32_t *)pConversionData;
kadonotakashi 0:8fdf9a60065b 38
kadonotakashi 0:8fdf9a60065b 39 PRNG_Open(CRYPTO_MODBASE(), PRNG_KEY_SIZE_256, 1, us_ticker_read());
kadonotakashi 0:8fdf9a60065b 40 crypto_prng_prestart();
kadonotakashi 0:8fdf9a60065b 41 PRNG_Start(CRYPTO_MODBASE());
kadonotakashi 0:8fdf9a60065b 42 crypto_prng_wait();
kadonotakashi 0:8fdf9a60065b 43
kadonotakashi 0:8fdf9a60065b 44 PRNG_Read(CRYPTO_MODBASE(), p32ConversionData);
kadonotakashi 0:8fdf9a60065b 45 }
kadonotakashi 0:8fdf9a60065b 46
kadonotakashi 0:8fdf9a60065b 47 void trng_init(trng_t *obj)
kadonotakashi 0:8fdf9a60065b 48 {
kadonotakashi 0:8fdf9a60065b 49 (void)obj;
kadonotakashi 0:8fdf9a60065b 50
kadonotakashi 0:8fdf9a60065b 51 /* Init crypto module */
kadonotakashi 0:8fdf9a60065b 52 crypto_init();
kadonotakashi 0:8fdf9a60065b 53
kadonotakashi 0:8fdf9a60065b 54 PRNG_ENABLE_INT(CRYPTO_MODBASE());
kadonotakashi 0:8fdf9a60065b 55 }
kadonotakashi 0:8fdf9a60065b 56
kadonotakashi 0:8fdf9a60065b 57 void trng_free(trng_t *obj)
kadonotakashi 0:8fdf9a60065b 58 {
kadonotakashi 0:8fdf9a60065b 59 (void)obj;
kadonotakashi 0:8fdf9a60065b 60
kadonotakashi 0:8fdf9a60065b 61 PRNG_DISABLE_INT(CRYPTO_MODBASE());
kadonotakashi 0:8fdf9a60065b 62
kadonotakashi 0:8fdf9a60065b 63 /* Uninit crypto module */
kadonotakashi 0:8fdf9a60065b 64 crypto_uninit();
kadonotakashi 0:8fdf9a60065b 65 }
kadonotakashi 0:8fdf9a60065b 66
kadonotakashi 0:8fdf9a60065b 67 int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
kadonotakashi 0:8fdf9a60065b 68 {
kadonotakashi 0:8fdf9a60065b 69 (void)obj;
kadonotakashi 0:8fdf9a60065b 70 unsigned char tmpBuff[PRNG_KEY_SIZE];
kadonotakashi 0:8fdf9a60065b 71 size_t cur_length = 0;
kadonotakashi 0:8fdf9a60065b 72
kadonotakashi 0:8fdf9a60065b 73 while (length >= sizeof(tmpBuff)) {
kadonotakashi 0:8fdf9a60065b 74 trng_get(output);
kadonotakashi 0:8fdf9a60065b 75 output += sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 76 cur_length += sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 77 length -= sizeof(tmpBuff);
kadonotakashi 0:8fdf9a60065b 78 }
kadonotakashi 0:8fdf9a60065b 79 if (length > 0) {
kadonotakashi 0:8fdf9a60065b 80 trng_get(tmpBuff);
kadonotakashi 0:8fdf9a60065b 81 memcpy(output, tmpBuff, length);
kadonotakashi 0:8fdf9a60065b 82 cur_length += length;
kadonotakashi 0:8fdf9a60065b 83 crypto_zeroize(tmpBuff, sizeof(tmpBuff));
kadonotakashi 0:8fdf9a60065b 84 }
kadonotakashi 0:8fdf9a60065b 85 *output_length = cur_length;
kadonotakashi 0:8fdf9a60065b 86 return 0;
kadonotakashi 0:8fdf9a60065b 87 }
kadonotakashi 0:8fdf9a60065b 88
kadonotakashi 0:8fdf9a60065b 89 #endif