X-TOUCH to djay bridge

Dependencies:   mbed mbed-rtos FATFileSystem

Committer:
okini3939
Date:
Wed Jun 05 04:54:37 2019 +0000
Revision:
1:0dac72ab5910
sample

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 1:0dac72ab5910 1 /* mbed USBHost Library
okini3939 1:0dac72ab5910 2 * Copyright (c) 2006-2013 ARM Limited
okini3939 1:0dac72ab5910 3 *
okini3939 1:0dac72ab5910 4 * Licensed under the Apache License, Version 2.0 (the "License");
okini3939 1:0dac72ab5910 5 * you may not use this file except in compliance with the License.
okini3939 1:0dac72ab5910 6 * You may obtain a copy of the License at
okini3939 1:0dac72ab5910 7 *
okini3939 1:0dac72ab5910 8 * http://www.apache.org/licenses/LICENSE-2.0
okini3939 1:0dac72ab5910 9 *
okini3939 1:0dac72ab5910 10 * Unless required by applicable law or agreed to in writing, software
okini3939 1:0dac72ab5910 11 * distributed under the License is distributed on an "AS IS" BASIS,
okini3939 1:0dac72ab5910 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
okini3939 1:0dac72ab5910 13 * See the License for the specific language governing permissions and
okini3939 1:0dac72ab5910 14 * limitations under the License.
okini3939 1:0dac72ab5910 15 */
okini3939 1:0dac72ab5910 16
okini3939 1:0dac72ab5910 17 #ifndef USBHALHOST_H
okini3939 1:0dac72ab5910 18 #define USBHALHOST_H
okini3939 1:0dac72ab5910 19
okini3939 1:0dac72ab5910 20 #include "USBHostTypes.h"
okini3939 1:0dac72ab5910 21 #include "USBHostConf.h"
okini3939 1:0dac72ab5910 22
okini3939 1:0dac72ab5910 23 class USBHostHub;
okini3939 1:0dac72ab5910 24
okini3939 1:0dac72ab5910 25 /**
okini3939 1:0dac72ab5910 26 * USBHALHost class
okini3939 1:0dac72ab5910 27 */
okini3939 1:0dac72ab5910 28 class USBHALHost {
okini3939 1:0dac72ab5910 29 protected:
okini3939 1:0dac72ab5910 30
okini3939 1:0dac72ab5910 31 /**
okini3939 1:0dac72ab5910 32 * Constructor
okini3939 1:0dac72ab5910 33 * init variables and memory where will be stored HCCA, ED and TD
okini3939 1:0dac72ab5910 34 */
okini3939 1:0dac72ab5910 35 USBHALHost();
okini3939 1:0dac72ab5910 36
okini3939 1:0dac72ab5910 37 /**
okini3939 1:0dac72ab5910 38 * Initialize host controller. Enable USB interrupts. This part is not in the constructor because,
okini3939 1:0dac72ab5910 39 * this function calls a virtual method if a device is already connected
okini3939 1:0dac72ab5910 40 */
okini3939 1:0dac72ab5910 41 void init();
okini3939 1:0dac72ab5910 42
okini3939 1:0dac72ab5910 43 /**
okini3939 1:0dac72ab5910 44 * reset the root hub
okini3939 1:0dac72ab5910 45 */
okini3939 1:0dac72ab5910 46 void resetRootHub();
okini3939 1:0dac72ab5910 47
okini3939 1:0dac72ab5910 48 /**
okini3939 1:0dac72ab5910 49 * return the value contained in the control HEAD ED register
okini3939 1:0dac72ab5910 50 *
okini3939 1:0dac72ab5910 51 * @returns address of the control Head ED
okini3939 1:0dac72ab5910 52 */
okini3939 1:0dac72ab5910 53 uint32_t controlHeadED();
okini3939 1:0dac72ab5910 54
okini3939 1:0dac72ab5910 55 /**
okini3939 1:0dac72ab5910 56 * return the value contained in the bulk HEAD ED register
okini3939 1:0dac72ab5910 57 *
okini3939 1:0dac72ab5910 58 * @returns address of the bulk head ED
okini3939 1:0dac72ab5910 59 */
okini3939 1:0dac72ab5910 60 uint32_t bulkHeadED();
okini3939 1:0dac72ab5910 61
okini3939 1:0dac72ab5910 62 /**
okini3939 1:0dac72ab5910 63 * return the value of the head interrupt ED contained in the HCCA
okini3939 1:0dac72ab5910 64 *
okini3939 1:0dac72ab5910 65 * @returns address of the head interrupt ED contained in the HCCA
okini3939 1:0dac72ab5910 66 */
okini3939 1:0dac72ab5910 67 uint32_t interruptHeadED();
okini3939 1:0dac72ab5910 68
okini3939 1:0dac72ab5910 69 /**
okini3939 1:0dac72ab5910 70 * Update the head ED for control transfers
okini3939 1:0dac72ab5910 71 */
okini3939 1:0dac72ab5910 72 void updateControlHeadED(uint32_t addr);
okini3939 1:0dac72ab5910 73
okini3939 1:0dac72ab5910 74 /**
okini3939 1:0dac72ab5910 75 * Update the head ED for bulk transfers
okini3939 1:0dac72ab5910 76 */
okini3939 1:0dac72ab5910 77 void updateBulkHeadED(uint32_t addr);
okini3939 1:0dac72ab5910 78
okini3939 1:0dac72ab5910 79 /**
okini3939 1:0dac72ab5910 80 * Update the head ED for interrupt transfers
okini3939 1:0dac72ab5910 81 */
okini3939 1:0dac72ab5910 82 void updateInterruptHeadED(uint32_t addr);
okini3939 1:0dac72ab5910 83
okini3939 1:0dac72ab5910 84 /**
okini3939 1:0dac72ab5910 85 * Enable List for the specified endpoint type
okini3939 1:0dac72ab5910 86 *
okini3939 1:0dac72ab5910 87 * @param type enable the list of ENDPOINT_TYPE type
okini3939 1:0dac72ab5910 88 */
okini3939 1:0dac72ab5910 89 void enableList(ENDPOINT_TYPE type);
okini3939 1:0dac72ab5910 90
okini3939 1:0dac72ab5910 91 /**
okini3939 1:0dac72ab5910 92 * Disable List for the specified endpoint type
okini3939 1:0dac72ab5910 93 *
okini3939 1:0dac72ab5910 94 * @param type disable the list of ENDPOINT_TYPE type
okini3939 1:0dac72ab5910 95 */
okini3939 1:0dac72ab5910 96 bool disableList(ENDPOINT_TYPE type);
okini3939 1:0dac72ab5910 97
okini3939 1:0dac72ab5910 98 /**
okini3939 1:0dac72ab5910 99 * Virtual method called when a device has been connected
okini3939 1:0dac72ab5910 100 *
okini3939 1:0dac72ab5910 101 * @param hub hub number of the device
okini3939 1:0dac72ab5910 102 * @param port port number of the device
okini3939 1:0dac72ab5910 103 * @param lowSpeed 1 if low speed, 0 otherwise
okini3939 1:0dac72ab5910 104 * @param hub_parent reference to the hub where the device is connected (NULL if the hub parent is the root hub)
okini3939 1:0dac72ab5910 105 */
okini3939 1:0dac72ab5910 106 virtual void deviceConnected(int hub, int port, bool lowSpeed, USBHostHub * hub_parent = NULL) = 0;
okini3939 1:0dac72ab5910 107
okini3939 1:0dac72ab5910 108 /**
okini3939 1:0dac72ab5910 109 * Virtual method called when a device has been disconnected
okini3939 1:0dac72ab5910 110 *
okini3939 1:0dac72ab5910 111 * @param hub hub number of the device
okini3939 1:0dac72ab5910 112 * @param port port number of the device
okini3939 1:0dac72ab5910 113 * @param hub_parent reference to the hub where the device is connected (NULL if the hub parent is the root hub)
okini3939 1:0dac72ab5910 114 * @param addr list of the TDs which have been completed to dequeue freed TDs
okini3939 1:0dac72ab5910 115 */
okini3939 1:0dac72ab5910 116 virtual void deviceDisconnected(int hub, int port, USBHostHub * hub_parent, volatile uint32_t addr) = 0;
okini3939 1:0dac72ab5910 117
okini3939 1:0dac72ab5910 118 /**
okini3939 1:0dac72ab5910 119 * Virtual method called when a transfer has been completed
okini3939 1:0dac72ab5910 120 *
okini3939 1:0dac72ab5910 121 * @param addr list of the TDs which have been completed
okini3939 1:0dac72ab5910 122 */
okini3939 1:0dac72ab5910 123 virtual void transferCompleted(volatile uint32_t addr) = 0;
okini3939 1:0dac72ab5910 124
okini3939 1:0dac72ab5910 125 /**
okini3939 1:0dac72ab5910 126 * Find a memory section for a new ED
okini3939 1:0dac72ab5910 127 *
okini3939 1:0dac72ab5910 128 * @returns the address of the new ED
okini3939 1:0dac72ab5910 129 */
okini3939 1:0dac72ab5910 130 volatile uint8_t * getED();
okini3939 1:0dac72ab5910 131
okini3939 1:0dac72ab5910 132 /**
okini3939 1:0dac72ab5910 133 * Find a memory section for a new TD
okini3939 1:0dac72ab5910 134 *
okini3939 1:0dac72ab5910 135 * @returns the address of the new TD
okini3939 1:0dac72ab5910 136 */
okini3939 1:0dac72ab5910 137 volatile uint8_t * getTD();
okini3939 1:0dac72ab5910 138
okini3939 1:0dac72ab5910 139 /**
okini3939 1:0dac72ab5910 140 * Release a previous memory section reserved for an ED
okini3939 1:0dac72ab5910 141 *
okini3939 1:0dac72ab5910 142 * @param ed address of the ED
okini3939 1:0dac72ab5910 143 */
okini3939 1:0dac72ab5910 144 void freeED(volatile uint8_t * ed);
okini3939 1:0dac72ab5910 145
okini3939 1:0dac72ab5910 146 /**
okini3939 1:0dac72ab5910 147 * Release a previous memory section reserved for an TD
okini3939 1:0dac72ab5910 148 *
okini3939 1:0dac72ab5910 149 * @param td address of the TD
okini3939 1:0dac72ab5910 150 */
okini3939 1:0dac72ab5910 151 void freeTD(volatile uint8_t * td);
okini3939 1:0dac72ab5910 152
okini3939 1:0dac72ab5910 153 private:
okini3939 1:0dac72ab5910 154 static void _usbisr(void);
okini3939 1:0dac72ab5910 155 void UsbIrqhandler();
okini3939 1:0dac72ab5910 156
okini3939 1:0dac72ab5910 157 void memInit();
okini3939 1:0dac72ab5910 158
okini3939 1:0dac72ab5910 159 HCCA volatile * usb_hcca; //256 bytes aligned
okini3939 1:0dac72ab5910 160 uint8_t volatile * usb_edBuf; //4 bytes aligned
okini3939 1:0dac72ab5910 161 uint8_t volatile * usb_tdBuf; //4 bytes aligned
okini3939 1:0dac72ab5910 162
okini3939 1:0dac72ab5910 163 static USBHALHost * instHost;
okini3939 1:0dac72ab5910 164
okini3939 1:0dac72ab5910 165 bool volatile edBufAlloc[MAX_ENDPOINT];
okini3939 1:0dac72ab5910 166 bool volatile tdBufAlloc[MAX_TD];
okini3939 1:0dac72ab5910 167 #ifdef USBHOST_OTHER
okini3939 1:0dac72ab5910 168 int control_disable;
okini3939 1:0dac72ab5910 169 #endif
okini3939 1:0dac72ab5910 170
okini3939 1:0dac72ab5910 171 };
okini3939 1:0dac72ab5910 172
okini3939 1:0dac72ab5910 173 #endif