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 USBENDPOINT_H
okini3939 1:0dac72ab5910 18 #define USBENDPOINT_H
okini3939 1:0dac72ab5910 19
okini3939 1:0dac72ab5910 20 #include "Callback.h"
okini3939 1:0dac72ab5910 21 #include "USBHostTypes.h"
okini3939 1:0dac72ab5910 22 #include "rtos.h"
okini3939 1:0dac72ab5910 23
okini3939 1:0dac72ab5910 24 class USBDeviceConnected;
okini3939 1:0dac72ab5910 25
okini3939 1:0dac72ab5910 26 /**
okini3939 1:0dac72ab5910 27 * USBEndpoint class
okini3939 1:0dac72ab5910 28 */
okini3939 1:0dac72ab5910 29 class USBEndpoint
okini3939 1:0dac72ab5910 30 {
okini3939 1:0dac72ab5910 31 public:
okini3939 1:0dac72ab5910 32 /**
okini3939 1:0dac72ab5910 33 * Constructor
okini3939 1:0dac72ab5910 34 */
okini3939 1:0dac72ab5910 35 USBEndpoint() {
okini3939 1:0dac72ab5910 36 #ifdef USBHOST_OTHER
okini3939 1:0dac72ab5910 37 speed = false;
okini3939 1:0dac72ab5910 38 #endif
okini3939 1:0dac72ab5910 39 state = USB_TYPE_FREE;
okini3939 1:0dac72ab5910 40 nextEp = NULL;
okini3939 1:0dac72ab5910 41 };
okini3939 1:0dac72ab5910 42
okini3939 1:0dac72ab5910 43 /**
okini3939 1:0dac72ab5910 44 * Initialize an endpoint
okini3939 1:0dac72ab5910 45 *
okini3939 1:0dac72ab5910 46 * @param hced hced associated to the endpoint
okini3939 1:0dac72ab5910 47 * @param type endpoint type
okini3939 1:0dac72ab5910 48 * @param dir endpoint direction
okini3939 1:0dac72ab5910 49 * @param size endpoint size
okini3939 1:0dac72ab5910 50 * @param ep_number endpoint number
okini3939 1:0dac72ab5910 51 * @param td_list array of two allocated transfer descriptors
okini3939 1:0dac72ab5910 52 */
okini3939 1:0dac72ab5910 53
okini3939 1:0dac72ab5910 54 void init(HCED * hced, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir, uint32_t size, uint8_t ep_number, HCTD* td_list[2]);
okini3939 1:0dac72ab5910 55
okini3939 1:0dac72ab5910 56 /**
okini3939 1:0dac72ab5910 57 * Set next token. Warning: only useful for the control endpoint
okini3939 1:0dac72ab5910 58 *
okini3939 1:0dac72ab5910 59 * @param token IN, OUT or SETUP token
okini3939 1:0dac72ab5910 60 */
okini3939 1:0dac72ab5910 61 void setNextToken(uint32_t token);
okini3939 1:0dac72ab5910 62
okini3939 1:0dac72ab5910 63 /**
okini3939 1:0dac72ab5910 64 * Queue an endpoint
okini3939 1:0dac72ab5910 65 *
okini3939 1:0dac72ab5910 66 * @param endpoint endpoint which will be queued in the linked list
okini3939 1:0dac72ab5910 67 */
okini3939 1:0dac72ab5910 68 void queueEndpoint(USBEndpoint * endpoint);
okini3939 1:0dac72ab5910 69
okini3939 1:0dac72ab5910 70
okini3939 1:0dac72ab5910 71 /**
okini3939 1:0dac72ab5910 72 * Queue a transfer on the endpoint
okini3939 1:0dac72ab5910 73 */
okini3939 1:0dac72ab5910 74 USB_TYPE queueTransfer();
okini3939 1:0dac72ab5910 75
okini3939 1:0dac72ab5910 76 /**
okini3939 1:0dac72ab5910 77 * Unqueue a transfer from the endpoint
okini3939 1:0dac72ab5910 78 *
okini3939 1:0dac72ab5910 79 * @param td hctd which will be unqueued
okini3939 1:0dac72ab5910 80 */
okini3939 1:0dac72ab5910 81 void unqueueTransfer(volatile HCTD * td);
okini3939 1:0dac72ab5910 82
okini3939 1:0dac72ab5910 83 /**
okini3939 1:0dac72ab5910 84 * Attach a member function to call when a transfer is finished
okini3939 1:0dac72ab5910 85 *
okini3939 1:0dac72ab5910 86 * @param tptr pointer to the object to call the member function on
okini3939 1:0dac72ab5910 87 * @param mptr pointer to the member function to be called
okini3939 1:0dac72ab5910 88 */
okini3939 1:0dac72ab5910 89 template<typename T>
okini3939 1:0dac72ab5910 90 inline void attach(T* tptr, void (T::*mptr)(void)) {
okini3939 1:0dac72ab5910 91 if((mptr != NULL) && (tptr != NULL)) {
okini3939 1:0dac72ab5910 92 rx.attach(tptr, mptr);
okini3939 1:0dac72ab5910 93 }
okini3939 1:0dac72ab5910 94 }
okini3939 1:0dac72ab5910 95
okini3939 1:0dac72ab5910 96 /**
okini3939 1:0dac72ab5910 97 * Attach a callback called when a transfer is finished
okini3939 1:0dac72ab5910 98 *
okini3939 1:0dac72ab5910 99 * @param fptr function pointer
okini3939 1:0dac72ab5910 100 */
okini3939 1:0dac72ab5910 101 inline void attach(void (*fptr)(void)) {
okini3939 1:0dac72ab5910 102 if(fptr != NULL) {
okini3939 1:0dac72ab5910 103 rx.attach(fptr);
okini3939 1:0dac72ab5910 104 }
okini3939 1:0dac72ab5910 105 }
okini3939 1:0dac72ab5910 106
okini3939 1:0dac72ab5910 107 /**
okini3939 1:0dac72ab5910 108 * Call the handler associted to the end of a transfer
okini3939 1:0dac72ab5910 109 */
okini3939 1:0dac72ab5910 110 inline void call() {
okini3939 1:0dac72ab5910 111 if (rx)
okini3939 1:0dac72ab5910 112 rx.call();
okini3939 1:0dac72ab5910 113 };
okini3939 1:0dac72ab5910 114
okini3939 1:0dac72ab5910 115
okini3939 1:0dac72ab5910 116 // setters
okini3939 1:0dac72ab5910 117 #ifdef USBHOST_OTHER
okini3939 1:0dac72ab5910 118 void setState(USB_TYPE st);
okini3939 1:0dac72ab5910 119 #else
okini3939 1:0dac72ab5910 120 inline void setState(USB_TYPE st) { state = st; }
okini3939 1:0dac72ab5910 121 #endif
okini3939 1:0dac72ab5910 122 void setState(uint8_t st);
okini3939 1:0dac72ab5910 123 void setDeviceAddress(uint8_t addr);
okini3939 1:0dac72ab5910 124 inline void setLengthTransferred(int len) { transferred = len; };
okini3939 1:0dac72ab5910 125 void setSpeed(uint8_t speed);
okini3939 1:0dac72ab5910 126 void setSize(uint32_t size);
okini3939 1:0dac72ab5910 127 inline void setDir(ENDPOINT_DIRECTION d) { dir = d; }
okini3939 1:0dac72ab5910 128 inline void setIntfNb(uint8_t intf_nb_) { intf_nb = intf_nb_; };
okini3939 1:0dac72ab5910 129
okini3939 1:0dac72ab5910 130 // getters
okini3939 1:0dac72ab5910 131 const char * getStateString();
okini3939 1:0dac72ab5910 132 inline USB_TYPE getState() { return state; }
okini3939 1:0dac72ab5910 133 inline ENDPOINT_TYPE getType() { return type; };
okini3939 1:0dac72ab5910 134 #ifdef USBHOST_OTHER
okini3939 1:0dac72ab5910 135 inline uint8_t getDeviceAddress() { return device_address; };
okini3939 1:0dac72ab5910 136 inline uint32_t getSize() { return size; };
okini3939 1:0dac72ab5910 137 #else
okini3939 1:0dac72ab5910 138 inline uint8_t getDeviceAddress() { return hced->control & 0x7f; };
okini3939 1:0dac72ab5910 139 inline uint32_t getSize() { return (hced->control >> 16) & 0x3ff; };
okini3939 1:0dac72ab5910 140 inline volatile HCTD * getHeadTD() { return (volatile HCTD*) ((uint32_t)hced->headTD & ~0xF); };
okini3939 1:0dac72ab5910 141 #endif
okini3939 1:0dac72ab5910 142 inline int getLengthTransferred() { return transferred; }
okini3939 1:0dac72ab5910 143 inline uint8_t * getBufStart() { return buf_start; }
okini3939 1:0dac72ab5910 144 inline uint8_t getAddress(){ return address; };
okini3939 1:0dac72ab5910 145 inline volatile HCTD** getTDList() { return td_list; };
okini3939 1:0dac72ab5910 146 inline volatile HCED * getHCED() { return hced; };
okini3939 1:0dac72ab5910 147 inline ENDPOINT_DIRECTION getDir() { return dir; }
okini3939 1:0dac72ab5910 148 inline volatile HCTD * getProcessedTD() { return td_current; };
okini3939 1:0dac72ab5910 149 inline volatile HCTD* getNextTD() { return td_current; };
okini3939 1:0dac72ab5910 150 inline bool isSetup() { return setup; }
okini3939 1:0dac72ab5910 151 inline USBEndpoint * nextEndpoint() { return (USBEndpoint*)nextEp; };
okini3939 1:0dac72ab5910 152 inline uint8_t getIntfNb() { return intf_nb; };
okini3939 1:0dac72ab5910 153
okini3939 1:0dac72ab5910 154 USBDeviceConnected * dev;
okini3939 1:0dac72ab5910 155
okini3939 1:0dac72ab5910 156 Queue<uint8_t, 1> ep_queue;
okini3939 1:0dac72ab5910 157
okini3939 1:0dac72ab5910 158 private:
okini3939 1:0dac72ab5910 159 ENDPOINT_TYPE type;
okini3939 1:0dac72ab5910 160 volatile USB_TYPE state;
okini3939 1:0dac72ab5910 161 ENDPOINT_DIRECTION dir;
okini3939 1:0dac72ab5910 162 #ifdef USBHOST_OTHER
okini3939 1:0dac72ab5910 163 uint32_t size;
okini3939 1:0dac72ab5910 164 uint32_t ep_number;
okini3939 1:0dac72ab5910 165 uint32_t speed;
okini3939 1:0dac72ab5910 166 uint8_t device_address;
okini3939 1:0dac72ab5910 167 #endif
okini3939 1:0dac72ab5910 168 bool setup;
okini3939 1:0dac72ab5910 169
okini3939 1:0dac72ab5910 170 uint8_t address;
okini3939 1:0dac72ab5910 171
okini3939 1:0dac72ab5910 172 int transfer_len;
okini3939 1:0dac72ab5910 173 int transferred;
okini3939 1:0dac72ab5910 174 uint8_t * buf_start;
okini3939 1:0dac72ab5910 175
okini3939 1:0dac72ab5910 176 Callback<void()> rx;
okini3939 1:0dac72ab5910 177
okini3939 1:0dac72ab5910 178 USBEndpoint* nextEp;
okini3939 1:0dac72ab5910 179
okini3939 1:0dac72ab5910 180 // USBEndpoint descriptor
okini3939 1:0dac72ab5910 181 volatile HCED * hced;
okini3939 1:0dac72ab5910 182
okini3939 1:0dac72ab5910 183 volatile HCTD * td_list[2];
okini3939 1:0dac72ab5910 184 volatile HCTD * td_current;
okini3939 1:0dac72ab5910 185 volatile HCTD * td_next;
okini3939 1:0dac72ab5910 186
okini3939 1:0dac72ab5910 187 uint8_t intf_nb;
okini3939 1:0dac72ab5910 188
okini3939 1:0dac72ab5910 189 };
okini3939 1:0dac72ab5910 190
okini3939 1:0dac72ab5910 191 #endif