Ethernet for the NUCLEO STM32F746 Board Testprogram uses DHCP and NTP to set the clock. At the moment there are dependencies to the used compiler. It works with the online compiler

Dependencies:   F7_Ethernet mbed

Committer:
DieterGraef
Date:
Thu Jun 23 09:07:47 2016 +0000
Revision:
2:bcf5290d42bf
Parent:
0:f9b6112278fe
Corrected MAC issue

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 0:f9b6112278fe 1 /* mbed Microcontroller Library
DieterGraef 0:f9b6112278fe 2 * Copyright (c) 2006-2012 ARM Limited
DieterGraef 0:f9b6112278fe 3 *
DieterGraef 0:f9b6112278fe 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
DieterGraef 0:f9b6112278fe 5 * of this software and associated documentation files (the "Software"), to deal
DieterGraef 0:f9b6112278fe 6 * in the Software without restriction, including without limitation the rights
DieterGraef 0:f9b6112278fe 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
DieterGraef 0:f9b6112278fe 8 * copies of the Software, and to permit persons to whom the Software is
DieterGraef 0:f9b6112278fe 9 * furnished to do so, subject to the following conditions:
DieterGraef 0:f9b6112278fe 10 *
DieterGraef 0:f9b6112278fe 11 * The above copyright notice and this permission notice shall be included in
DieterGraef 0:f9b6112278fe 12 * all copies or substantial portions of the Software.
DieterGraef 0:f9b6112278fe 13 *
DieterGraef 0:f9b6112278fe 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
DieterGraef 0:f9b6112278fe 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
DieterGraef 0:f9b6112278fe 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
DieterGraef 0:f9b6112278fe 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
DieterGraef 0:f9b6112278fe 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
DieterGraef 0:f9b6112278fe 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
DieterGraef 0:f9b6112278fe 20 * SOFTWARE.
DieterGraef 0:f9b6112278fe 21 */
DieterGraef 0:f9b6112278fe 22 #ifndef MAIL_H
DieterGraef 0:f9b6112278fe 23 #define MAIL_H
DieterGraef 0:f9b6112278fe 24
DieterGraef 0:f9b6112278fe 25 #include <stdint.h>
DieterGraef 0:f9b6112278fe 26 #include <string.h>
DieterGraef 0:f9b6112278fe 27
DieterGraef 0:f9b6112278fe 28 #include "cmsis_os.h"
DieterGraef 0:f9b6112278fe 29
DieterGraef 0:f9b6112278fe 30 namespace rtos {
DieterGraef 0:f9b6112278fe 31
DieterGraef 0:f9b6112278fe 32 /** The Mail class allow to control, send, receive, or wait for mail.
DieterGraef 0:f9b6112278fe 33 A mail is a memory block that is send to a thread or interrupt service routine.
DieterGraef 0:f9b6112278fe 34 @tparam T data type of a single message element.
DieterGraef 0:f9b6112278fe 35 @tparam queue_sz maximum number of messages in queue.
DieterGraef 0:f9b6112278fe 36 */
DieterGraef 0:f9b6112278fe 37 template<typename T, uint32_t queue_sz>
DieterGraef 0:f9b6112278fe 38 class Mail {
DieterGraef 0:f9b6112278fe 39 public:
DieterGraef 0:f9b6112278fe 40 /** Create and Initialise Mail queue. */
DieterGraef 0:f9b6112278fe 41 Mail() {
DieterGraef 0:f9b6112278fe 42 #ifdef CMSIS_OS_RTX
DieterGraef 0:f9b6112278fe 43 memset(_mail_q, 0, sizeof(_mail_q));
DieterGraef 0:f9b6112278fe 44 _mail_p[0] = _mail_q;
DieterGraef 0:f9b6112278fe 45
DieterGraef 0:f9b6112278fe 46 memset(_mail_m, 0, sizeof(_mail_m));
DieterGraef 0:f9b6112278fe 47 _mail_p[1] = _mail_m;
DieterGraef 0:f9b6112278fe 48
DieterGraef 0:f9b6112278fe 49 _mail_def.pool = _mail_p;
DieterGraef 0:f9b6112278fe 50 _mail_def.queue_sz = queue_sz;
DieterGraef 0:f9b6112278fe 51 _mail_def.item_sz = sizeof(T);
DieterGraef 0:f9b6112278fe 52 #endif
DieterGraef 0:f9b6112278fe 53 _mail_id = osMailCreate(&_mail_def, NULL);
DieterGraef 0:f9b6112278fe 54 }
DieterGraef 0:f9b6112278fe 55
DieterGraef 0:f9b6112278fe 56 /** Allocate a memory block of type T
DieterGraef 0:f9b6112278fe 57 @param millisec timeout value or 0 in case of no time-out. (default: 0).
DieterGraef 0:f9b6112278fe 58 @return pointer to memory block that can be filled with mail or NULL in case error.
DieterGraef 0:f9b6112278fe 59 */
DieterGraef 0:f9b6112278fe 60 T* alloc(uint32_t millisec=0) {
DieterGraef 0:f9b6112278fe 61 return (T*)osMailAlloc(_mail_id, millisec);
DieterGraef 0:f9b6112278fe 62 }
DieterGraef 0:f9b6112278fe 63
DieterGraef 0:f9b6112278fe 64 /** Allocate a memory block of type T and set memory block to zero.
DieterGraef 0:f9b6112278fe 65 @param millisec timeout value or 0 in case of no time-out. (default: 0).
DieterGraef 0:f9b6112278fe 66 @return pointer to memory block that can be filled with mail or NULL in case error.
DieterGraef 0:f9b6112278fe 67 */
DieterGraef 0:f9b6112278fe 68 T* calloc(uint32_t millisec=0) {
DieterGraef 0:f9b6112278fe 69 return (T*)osMailCAlloc(_mail_id, millisec);
DieterGraef 0:f9b6112278fe 70 }
DieterGraef 0:f9b6112278fe 71
DieterGraef 0:f9b6112278fe 72 /** Put a mail in the queue.
DieterGraef 0:f9b6112278fe 73 @param mptr memory block previously allocated with Mail::alloc or Mail::calloc.
DieterGraef 0:f9b6112278fe 74 @return status code that indicates the execution status of the function.
DieterGraef 0:f9b6112278fe 75 */
DieterGraef 0:f9b6112278fe 76 osStatus put(T *mptr) {
DieterGraef 0:f9b6112278fe 77 return osMailPut(_mail_id, (void*)mptr);
DieterGraef 0:f9b6112278fe 78 }
DieterGraef 0:f9b6112278fe 79
DieterGraef 0:f9b6112278fe 80 /** Get a mail from a queue.
DieterGraef 0:f9b6112278fe 81 @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever).
DieterGraef 0:f9b6112278fe 82 @return event that contains mail information or error code.
DieterGraef 0:f9b6112278fe 83 */
DieterGraef 0:f9b6112278fe 84 osEvent get(uint32_t millisec=osWaitForever) {
DieterGraef 0:f9b6112278fe 85 return osMailGet(_mail_id, millisec);
DieterGraef 0:f9b6112278fe 86 }
DieterGraef 0:f9b6112278fe 87
DieterGraef 0:f9b6112278fe 88 /** Free a memory block from a mail.
DieterGraef 0:f9b6112278fe 89 @param mptr pointer to the memory block that was obtained with Mail::get.
DieterGraef 0:f9b6112278fe 90 @return status code that indicates the execution status of the function.
DieterGraef 0:f9b6112278fe 91 */
DieterGraef 0:f9b6112278fe 92 osStatus free(T *mptr) {
DieterGraef 0:f9b6112278fe 93 return osMailFree(_mail_id, (void*)mptr);
DieterGraef 0:f9b6112278fe 94 }
DieterGraef 0:f9b6112278fe 95
DieterGraef 0:f9b6112278fe 96 private:
DieterGraef 0:f9b6112278fe 97 osMailQId _mail_id;
DieterGraef 0:f9b6112278fe 98 osMailQDef_t _mail_def;
DieterGraef 0:f9b6112278fe 99 #ifdef CMSIS_OS_RTX
DieterGraef 0:f9b6112278fe 100 uint32_t _mail_q[4+(queue_sz)];
DieterGraef 0:f9b6112278fe 101 uint32_t _mail_m[3+((sizeof(T)+3)/4)*(queue_sz)];
DieterGraef 0:f9b6112278fe 102 void *_mail_p[2];
DieterGraef 0:f9b6112278fe 103 #endif
DieterGraef 0:f9b6112278fe 104 };
DieterGraef 0:f9b6112278fe 105
DieterGraef 0:f9b6112278fe 106 }
DieterGraef 0:f9b6112278fe 107
DieterGraef 0:f9b6112278fe 108 #endif
DieterGraef 0:f9b6112278fe 109