Sample program for the USB Host lib with HID

Dependencies:   USBHost_DISCO-F746NG mbed

Committer:
DieterGraef
Date:
Mon Jun 13 17:22:08 2016 +0000
Revision:
0:af2040964256
USB Host for STM32F746 Discovery. At the moment only either the fast or the high speed port can be used

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 0:af2040964256 1 /* mbed Microcontroller Library
DieterGraef 0:af2040964256 2 * Copyright (c) 2006-2012 ARM Limited
DieterGraef 0:af2040964256 3 *
DieterGraef 0:af2040964256 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
DieterGraef 0:af2040964256 5 * of this software and associated documentation files (the "Software"), to deal
DieterGraef 0:af2040964256 6 * in the Software without restriction, including without limitation the rights
DieterGraef 0:af2040964256 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
DieterGraef 0:af2040964256 8 * copies of the Software, and to permit persons to whom the Software is
DieterGraef 0:af2040964256 9 * furnished to do so, subject to the following conditions:
DieterGraef 0:af2040964256 10 *
DieterGraef 0:af2040964256 11 * The above copyright notice and this permission notice shall be included in
DieterGraef 0:af2040964256 12 * all copies or substantial portions of the Software.
DieterGraef 0:af2040964256 13 *
DieterGraef 0:af2040964256 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
DieterGraef 0:af2040964256 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
DieterGraef 0:af2040964256 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
DieterGraef 0:af2040964256 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
DieterGraef 0:af2040964256 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
DieterGraef 0:af2040964256 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
DieterGraef 0:af2040964256 20 * SOFTWARE.
DieterGraef 0:af2040964256 21 */
DieterGraef 0:af2040964256 22 #ifndef MEMORYPOOL_H
DieterGraef 0:af2040964256 23 #define MEMORYPOOL_H
DieterGraef 0:af2040964256 24
DieterGraef 0:af2040964256 25 #include <stdint.h>
DieterGraef 0:af2040964256 26 #include <string.h>
DieterGraef 0:af2040964256 27
DieterGraef 0:af2040964256 28 #include "cmsis_os.h"
DieterGraef 0:af2040964256 29
DieterGraef 0:af2040964256 30 namespace rtos {
DieterGraef 0:af2040964256 31
DieterGraef 0:af2040964256 32 /** Define and manage fixed-size memory pools of objects of a given type.
DieterGraef 0:af2040964256 33 @tparam T data type of a single object (element).
DieterGraef 0:af2040964256 34 @tparam queue_sz maximum number of objects (elements) in the memory pool.
DieterGraef 0:af2040964256 35 */
DieterGraef 0:af2040964256 36 template<typename T, uint32_t pool_sz>
DieterGraef 0:af2040964256 37 class MemoryPool {
DieterGraef 0:af2040964256 38 public:
DieterGraef 0:af2040964256 39 /** Create and Initialize a memory pool. */
DieterGraef 0:af2040964256 40 MemoryPool() {
DieterGraef 0:af2040964256 41 #ifdef CMSIS_OS_RTX
DieterGraef 0:af2040964256 42 memset(_pool_m, 0, sizeof(_pool_m));
DieterGraef 0:af2040964256 43 _pool_def.pool = _pool_m;
DieterGraef 0:af2040964256 44
DieterGraef 0:af2040964256 45 _pool_def.pool_sz = pool_sz;
DieterGraef 0:af2040964256 46 _pool_def.item_sz = sizeof(T);
DieterGraef 0:af2040964256 47 #endif
DieterGraef 0:af2040964256 48 _pool_id = osPoolCreate(&_pool_def);
DieterGraef 0:af2040964256 49 }
DieterGraef 0:af2040964256 50
DieterGraef 0:af2040964256 51 /** Allocate a memory block of type T from a memory pool.
DieterGraef 0:af2040964256 52 @return address of the allocated memory block or NULL in case of no memory available.
DieterGraef 0:af2040964256 53 */
DieterGraef 0:af2040964256 54 T* alloc(void) {
DieterGraef 0:af2040964256 55 return (T*)osPoolAlloc(_pool_id);
DieterGraef 0:af2040964256 56 }
DieterGraef 0:af2040964256 57
DieterGraef 0:af2040964256 58 /** Allocate a memory block of type T from a memory pool and set memory block to zero.
DieterGraef 0:af2040964256 59 @return address of the allocated memory block or NULL in case of no memory available.
DieterGraef 0:af2040964256 60 */
DieterGraef 0:af2040964256 61 T* calloc(void) {
DieterGraef 0:af2040964256 62 return (T*)osPoolCAlloc(_pool_id);
DieterGraef 0:af2040964256 63 }
DieterGraef 0:af2040964256 64
DieterGraef 0:af2040964256 65 /** Return an allocated memory block back to a specific memory pool.
DieterGraef 0:af2040964256 66 @param address of the allocated memory block that is returned to the memory pool.
DieterGraef 0:af2040964256 67 @return status code that indicates the execution status of the function.
DieterGraef 0:af2040964256 68 */
DieterGraef 0:af2040964256 69 osStatus free(T *block) {
DieterGraef 0:af2040964256 70 return osPoolFree(_pool_id, (void*)block);
DieterGraef 0:af2040964256 71 }
DieterGraef 0:af2040964256 72
DieterGraef 0:af2040964256 73 private:
DieterGraef 0:af2040964256 74 osPoolId _pool_id;
DieterGraef 0:af2040964256 75 osPoolDef_t _pool_def;
DieterGraef 0:af2040964256 76 #ifdef CMSIS_OS_RTX
DieterGraef 0:af2040964256 77 uint32_t _pool_m[3+((sizeof(T)+3)/4)*(pool_sz)];
DieterGraef 0:af2040964256 78 #endif
DieterGraef 0:af2040964256 79 };
DieterGraef 0:af2040964256 80
DieterGraef 0:af2040964256 81 }
DieterGraef 0:af2040964256 82 #endif