Changes to support Vodafone K4606

Dependents:   VodafoneUSBModem

Fork of USBHostWANDongle by mbed official

Committer:
dmitryp
Date:
Wed Jan 28 11:38:44 2015 +0000
Revision:
28:34cdecfff9f4
Parent:
10:08bce4cd973a
Added support for Vodafone K4606, for more details refer to ; http://atmega.magictale.com/2215/hacking-vodafone-k4606-3g-hsdpa-usb-modem/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 10:08bce4cd973a 1 /* Copyright (c) 2010-2012 mbed.org, MIT License
donatien 0:ae46a0638b2c 2 *
donatien 0:ae46a0638b2c 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
donatien 0:ae46a0638b2c 4 * and associated documentation files (the "Software"), to deal in the Software without
donatien 0:ae46a0638b2c 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
donatien 0:ae46a0638b2c 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
donatien 0:ae46a0638b2c 7 * Software is furnished to do so, subject to the following conditions:
donatien 0:ae46a0638b2c 8 *
donatien 0:ae46a0638b2c 9 * The above copyright notice and this permission notice shall be included in all copies or
donatien 0:ae46a0638b2c 10 * substantial portions of the Software.
donatien 0:ae46a0638b2c 11 *
donatien 0:ae46a0638b2c 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
donatien 0:ae46a0638b2c 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
donatien 0:ae46a0638b2c 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
donatien 0:ae46a0638b2c 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 0:ae46a0638b2c 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
donatien 0:ae46a0638b2c 17 */
donatien 0:ae46a0638b2c 18
donatien 0:ae46a0638b2c 19 #ifndef USB_INC_H
donatien 0:ae46a0638b2c 20 #define USB_INC_H
donatien 0:ae46a0638b2c 21
donatien 0:ae46a0638b2c 22 #include "mbed.h"
donatien 0:ae46a0638b2c 23
donatien 0:ae46a0638b2c 24 enum USB_TYPE {
donatien 0:ae46a0638b2c 25 USB_TYPE_DISCONNECTED = -10,
donatien 0:ae46a0638b2c 26 USB_TYPE_NOTFOUND = -9,
donatien 0:ae46a0638b2c 27 USB_TYPE_BADCONFIG = -8,
donatien 0:ae46a0638b2c 28 USB_TYPE_FREE = -7,
donatien 0:ae46a0638b2c 29 USB_TYPE_IDLE = -6,
donatien 0:ae46a0638b2c 30 USB_TYPE_PROCESSING = -5,
donatien 0:ae46a0638b2c 31 USB_TYPE_HALTED = -4, //Transfer on an ep is stalled
donatien 0:ae46a0638b2c 32 USB_TYPE_BUSY = -3,
donatien 0:ae46a0638b2c 33 USB_TYPE_TDFAIL = -2,
donatien 0:ae46a0638b2c 34 USB_TYPE_ERROR = -1,
donatien 0:ae46a0638b2c 35 USB_TYPE_OK = 0
donatien 0:ae46a0638b2c 36 };
donatien 0:ae46a0638b2c 37
donatien 0:ae46a0638b2c 38 #define AUDIO_CLASS 0x01
donatien 0:ae46a0638b2c 39 #define CDC_CLASS 0x02
donatien 0:ae46a0638b2c 40 #define MSD_CLASS 0x08
donatien 0:ae46a0638b2c 41 #define HID_CLASS 0x03
donatien 0:ae46a0638b2c 42
donatien 0:ae46a0638b2c 43
donatien 0:ae46a0638b2c 44 // From NXP's USBHostLite stack's usbhost_lpc17xx.h
donatien 0:ae46a0638b2c 45 // Only the types names have been changed to avoid unecessary typedefs
donatien 0:ae46a0638b2c 46
donatien 0:ae46a0638b2c 47
donatien 0:ae46a0638b2c 48 /*
donatien 0:ae46a0638b2c 49 **************************************************************************************************************
donatien 0:ae46a0638b2c 50 * NXP USB Host Stack
donatien 0:ae46a0638b2c 51 *
donatien 0:ae46a0638b2c 52 * (c) Copyright 2008, NXP SemiConductors
donatien 0:ae46a0638b2c 53 * (c) Copyright 2008, OnChip Technologies LLC
donatien 0:ae46a0638b2c 54 * All Rights Reserved
donatien 0:ae46a0638b2c 55 *
donatien 0:ae46a0638b2c 56 * www.nxp.com
donatien 0:ae46a0638b2c 57 * www.onchiptech.com
donatien 0:ae46a0638b2c 58 *
donatien 0:ae46a0638b2c 59 * File : usbhost_lpc17xx.h
donatien 0:ae46a0638b2c 60 * Programmer(s) : Ravikanth.P
donatien 0:ae46a0638b2c 61 * Version :
donatien 0:ae46a0638b2c 62 *
donatien 0:ae46a0638b2c 63 **************************************************************************************************************
donatien 0:ae46a0638b2c 64 */
donatien 0:ae46a0638b2c 65
donatien 0:ae46a0638b2c 66
donatien 0:ae46a0638b2c 67 // ------------------ HcControl Register ---------------------
donatien 0:ae46a0638b2c 68 #define OR_CONTROL_PLE 0x00000004
donatien 0:ae46a0638b2c 69 #define OR_CONTROL_CLE 0x00000010
donatien 0:ae46a0638b2c 70 #define OR_CONTROL_BLE 0x00000020
donatien 0:ae46a0638b2c 71 #define OR_CONTROL_HCFS 0x000000C0
donatien 0:ae46a0638b2c 72 #define OR_CONTROL_HC_OPER 0x00000080
donatien 0:ae46a0638b2c 73 // ----------------- HcCommandStatus Register -----------------
donatien 0:ae46a0638b2c 74 #define OR_CMD_STATUS_HCR 0x00000001
donatien 0:ae46a0638b2c 75 #define OR_CMD_STATUS_CLF 0x00000002
donatien 0:ae46a0638b2c 76 #define OR_CMD_STATUS_BLF 0x00000004
donatien 0:ae46a0638b2c 77 // --------------- HcInterruptStatus Register -----------------
donatien 0:ae46a0638b2c 78 #define OR_INTR_STATUS_WDH 0x00000002
donatien 0:ae46a0638b2c 79 #define OR_INTR_STATUS_RHSC 0x00000040
donatien 0:ae46a0638b2c 80 #define OR_INTR_STATUS_UE 0x00000010
donatien 0:ae46a0638b2c 81 // --------------- HcInterruptEnable Register -----------------
donatien 0:ae46a0638b2c 82 #define OR_INTR_ENABLE_WDH 0x00000002
donatien 0:ae46a0638b2c 83 #define OR_INTR_ENABLE_RHSC 0x00000040
donatien 0:ae46a0638b2c 84 #define OR_INTR_ENABLE_MIE 0x80000000
donatien 0:ae46a0638b2c 85 // ---------------- HcRhDescriptorA Register ------------------
donatien 0:ae46a0638b2c 86 #define OR_RH_STATUS_LPSC 0x00010000
donatien 0:ae46a0638b2c 87 #define OR_RH_STATUS_DRWE 0x00008000
donatien 0:ae46a0638b2c 88 // -------------- HcRhPortStatus[1:NDP] Register --------------
donatien 0:ae46a0638b2c 89 #define OR_RH_PORT_CCS 0x00000001
donatien 0:ae46a0638b2c 90 #define OR_RH_PORT_PRS 0x00000010
donatien 0:ae46a0638b2c 91 #define OR_RH_PORT_CSC 0x00010000
donatien 0:ae46a0638b2c 92 #define OR_RH_PORT_PRSC 0x00100000
donatien 0:ae46a0638b2c 93 #define OR_RH_PORT_LSDA 0x00000200
donatien 0:ae46a0638b2c 94
donatien 0:ae46a0638b2c 95
donatien 0:ae46a0638b2c 96 //
donatien 0:ae46a0638b2c 97 //**************************************************************************************************************
donatien 0:ae46a0638b2c 98 //* FRAME INTERVAL
donatien 0:ae46a0638b2c 99 //**************************************************************************************************************
donatien 0:ae46a0638b2c 100 //
donatien 0:ae46a0638b2c 101
donatien 0:ae46a0638b2c 102 #define FI 0x2EDF // 12000 bits per frame (-1)
donatien 0:ae46a0638b2c 103 #define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI)
donatien 0:ae46a0638b2c 104
donatien 0:ae46a0638b2c 105 //
donatien 0:ae46a0638b2c 106 //**************************************************************************************************************
donatien 0:ae46a0638b2c 107 //* ENDPOINT DESCRIPTOR CONTROL FIELDS
donatien 0:ae46a0638b2c 108 //**************************************************************************************************************
donatien 0:ae46a0638b2c 109 //
donatien 0:ae46a0638b2c 110
donatien 0:ae46a0638b2c 111 #define ED_SKIP (uint32_t) (0x00001000) // Skip this ep in queue
donatien 0:ae46a0638b2c 112
donatien 0:ae46a0638b2c 113 //
donatien 0:ae46a0638b2c 114 //**************************************************************************************************************
donatien 0:ae46a0638b2c 115 //* TRANSFER DESCRIPTOR CONTROL FIELDS
donatien 0:ae46a0638b2c 116 //**************************************************************************************************************
donatien 0:ae46a0638b2c 117 //
donatien 0:ae46a0638b2c 118
donatien 0:ae46a0638b2c 119 #define TD_ROUNDING (uint32_t) (0x00040000) // Buffer Rounding
donatien 0:ae46a0638b2c 120 #define TD_SETUP (uint32_t)(0) // Direction of Setup Packet
donatien 0:ae46a0638b2c 121 #define TD_IN (uint32_t)(0x00100000) // Direction In
donatien 0:ae46a0638b2c 122 #define TD_OUT (uint32_t)(0x00080000) // Direction Out
donatien 0:ae46a0638b2c 123 #define TD_DELAY_INT(x) (uint32_t)((x) << 21) // Delay Interrupt
donatien 0:ae46a0638b2c 124 #define TD_TOGGLE_0 (uint32_t)(0x02000000) // Toggle 0
donatien 0:ae46a0638b2c 125 #define TD_TOGGLE_1 (uint32_t)(0x03000000) // Toggle 1
donatien 0:ae46a0638b2c 126 #define TD_CC (uint32_t)(0xF0000000) // Completion Code
donatien 0:ae46a0638b2c 127
donatien 0:ae46a0638b2c 128 //
donatien 0:ae46a0638b2c 129 //**************************************************************************************************************
donatien 0:ae46a0638b2c 130 //* USB STANDARD REQUEST DEFINITIONS
donatien 0:ae46a0638b2c 131 //**************************************************************************************************************
donatien 0:ae46a0638b2c 132 //
donatien 0:ae46a0638b2c 133
donatien 0:ae46a0638b2c 134 #define DEVICE_DESCRIPTOR (1)
donatien 0:ae46a0638b2c 135 #define CONFIGURATION_DESCRIPTOR (2)
donatien 0:ae46a0638b2c 136 #define INTERFACE_DESCRIPTOR (4)
donatien 0:ae46a0638b2c 137 #define ENDPOINT_DESCRIPTOR (5)
donatien 0:ae46a0638b2c 138 #define HID_DESCRIPTOR (33)
donatien 0:ae46a0638b2c 139
donatien 0:ae46a0638b2c 140 // ----------- Control RequestType Fields -----------
donatien 0:ae46a0638b2c 141 #define USB_DEVICE_TO_HOST 0x80
donatien 0:ae46a0638b2c 142 #define USB_HOST_TO_DEVICE 0x00
donatien 0:ae46a0638b2c 143 #define USB_REQUEST_TYPE_CLASS 0x20
donatien 0:ae46a0638b2c 144 #define USB_RECIPIENT_DEVICE 0x00
donatien 0:ae46a0638b2c 145 #define USB_RECIPIENT_INTERFACE 0x01
donatien 0:ae46a0638b2c 146
donatien 0:ae46a0638b2c 147 // -------------- USB Standard Requests --------------
donatien 0:ae46a0638b2c 148 #define SET_ADDRESS 5
donatien 0:ae46a0638b2c 149 #define GET_DESCRIPTOR 6
donatien 0:ae46a0638b2c 150 #define SET_CONFIGURATION 9
donatien 0:ae46a0638b2c 151 #define SET_INTERFACE 11
donatien 0:ae46a0638b2c 152
donatien 0:ae46a0638b2c 153 // -------------- USB Descriptor Length --------------
donatien 0:ae46a0638b2c 154 #define DEVICE_DESCRIPTOR_LENGTH 0x12
donatien 0:ae46a0638b2c 155 #define CONFIGURATION_DESCRIPTOR_LENGTH 0x09
donatien 0:ae46a0638b2c 156
donatien 0:ae46a0638b2c 157
donatien 0:ae46a0638b2c 158 //
donatien 0:ae46a0638b2c 159 //**************************************************************************************************************
donatien 0:ae46a0638b2c 160 //* TYPE DEFINITIONS
donatien 0:ae46a0638b2c 161 //**************************************************************************************************************
donatien 0:ae46a0638b2c 162 //
donatien 0:ae46a0638b2c 163
donatien 0:ae46a0638b2c 164 // ----------- HostController EndPoint Descriptor -------------
donatien 0:ae46a0638b2c 165 typedef struct hcEd {
donatien 0:ae46a0638b2c 166 volatile uint32_t control; // Endpoint descriptor control
donatien 0:ae46a0638b2c 167 volatile uint32_t tailTD; // Physical address of tail in Transfer descriptor list
donatien 0:ae46a0638b2c 168 volatile uint32_t headTD; // Physcial address of head in Transfer descriptor list
donatien 0:ae46a0638b2c 169 volatile uint32_t nextED; // Physical address of next Endpoint descriptor
donatien 0:ae46a0638b2c 170 } HCED;
donatien 0:ae46a0638b2c 171
donatien 0:ae46a0638b2c 172 // ------------ HostController Transfer Descriptor ------------
donatien 0:ae46a0638b2c 173 typedef struct hcTd {
donatien 0:ae46a0638b2c 174 volatile uint32_t control; // Transfer descriptor control
donatien 0:ae46a0638b2c 175 volatile uint32_t currBufPtr; // Physical address of current buffer pointer
donatien 0:ae46a0638b2c 176 volatile uint32_t nextTD; // Physical pointer to next Transfer Descriptor
donatien 0:ae46a0638b2c 177 volatile uint32_t bufEnd; // Physical address of end of buffer
donatien 0:ae46a0638b2c 178 } HCTD;
donatien 0:ae46a0638b2c 179
donatien 0:ae46a0638b2c 180 // ----------- Host Controller Communication Area ------------
donatien 0:ae46a0638b2c 181 typedef struct hcca {
donatien 0:ae46a0638b2c 182 volatile uint32_t IntTable[32]; // Interrupt Table
donatien 0:ae46a0638b2c 183 volatile uint32_t FrameNumber; // Frame Number
donatien 0:ae46a0638b2c 184 volatile uint32_t DoneHead; // Done Head
donatien 0:ae46a0638b2c 185 volatile uint8_t Reserved[116]; // Reserved for future use
donatien 0:ae46a0638b2c 186 volatile uint8_t Unknown[4]; // Unused
donatien 0:ae46a0638b2c 187 } HCCA;
donatien 0:ae46a0638b2c 188
donatien 0:ae46a0638b2c 189
donatien 0:ae46a0638b2c 190
donatien 0:ae46a0638b2c 191 #endif