Embedded C project:18/12/2014

Dependencies:   DS1307 TextLCD mbed

Committer:
ninoderkinderen
Date:
Thu Dec 18 09:35:49 2014 +0000
Revision:
0:8d87bc453349
Programma embedded C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ninoderkinderen 0:8d87bc453349 1
ninoderkinderen 0:8d87bc453349 2 /*
ninoderkinderen 0:8d87bc453349 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
ninoderkinderen 0:8d87bc453349 4
ninoderkinderen 0:8d87bc453349 5 Permission is hereby granted, free of charge, to any person obtaining a copy
ninoderkinderen 0:8d87bc453349 6 of this software and associated documentation files (the "Software"), to deal
ninoderkinderen 0:8d87bc453349 7 in the Software without restriction, including without limitation the rights
ninoderkinderen 0:8d87bc453349 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ninoderkinderen 0:8d87bc453349 9 copies of the Software, and to permit persons to whom the Software is
ninoderkinderen 0:8d87bc453349 10 furnished to do so, subject to the following conditions:
ninoderkinderen 0:8d87bc453349 11
ninoderkinderen 0:8d87bc453349 12 The above copyright notice and this permission notice shall be included in
ninoderkinderen 0:8d87bc453349 13 all copies or substantial portions of the Software.
ninoderkinderen 0:8d87bc453349 14
ninoderkinderen 0:8d87bc453349 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ninoderkinderen 0:8d87bc453349 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ninoderkinderen 0:8d87bc453349 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ninoderkinderen 0:8d87bc453349 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ninoderkinderen 0:8d87bc453349 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ninoderkinderen 0:8d87bc453349 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ninoderkinderen 0:8d87bc453349 21 THE SOFTWARE.
ninoderkinderen 0:8d87bc453349 22 */
ninoderkinderen 0:8d87bc453349 23
ninoderkinderen 0:8d87bc453349 24 #include "UsbDevice.h"
ninoderkinderen 0:8d87bc453349 25
ninoderkinderen 0:8d87bc453349 26 #include "netCfg.h"
ninoderkinderen 0:8d87bc453349 27 #if NET_USB
ninoderkinderen 0:8d87bc453349 28
ninoderkinderen 0:8d87bc453349 29 //#define __DEBUG
ninoderkinderen 0:8d87bc453349 30 #include "dbg/dbg.h"
ninoderkinderen 0:8d87bc453349 31
ninoderkinderen 0:8d87bc453349 32 UsbDevice::UsbDevice( UsbHostMgr* pMgr, int hub, int port, int addr ) : m_pControlEp(NULL), /*m_controlEp( this, 0x00, false, USB_CONTROL, 8 ),*/
ninoderkinderen 0:8d87bc453349 33 m_pMgr(pMgr), m_connected(false), m_enumerated(false), m_hub(hub), m_port(port), m_addr(addr), m_refs(0),
ninoderkinderen 0:8d87bc453349 34 m_vid(0), m_pid(0)
ninoderkinderen 0:8d87bc453349 35 {
ninoderkinderen 0:8d87bc453349 36
ninoderkinderen 0:8d87bc453349 37 }
ninoderkinderen 0:8d87bc453349 38
ninoderkinderen 0:8d87bc453349 39 UsbDevice::~UsbDevice()
ninoderkinderen 0:8d87bc453349 40 {
ninoderkinderen 0:8d87bc453349 41 if(m_pControlEp)
ninoderkinderen 0:8d87bc453349 42 delete m_pControlEp;
ninoderkinderen 0:8d87bc453349 43 }
ninoderkinderen 0:8d87bc453349 44
ninoderkinderen 0:8d87bc453349 45 UsbErr UsbDevice::enumerate()
ninoderkinderen 0:8d87bc453349 46 {
ninoderkinderen 0:8d87bc453349 47 // USB_INT32S rc;
ninoderkinderen 0:8d87bc453349 48
ninoderkinderen 0:8d87bc453349 49 UsbErr rc;
ninoderkinderen 0:8d87bc453349 50
ninoderkinderen 0:8d87bc453349 51 DBG("Starting enumeration (m_pMgr = %p)\n", m_pMgr);
ninoderkinderen 0:8d87bc453349 52
ninoderkinderen 0:8d87bc453349 53 #if 1
ninoderkinderen 0:8d87bc453349 54 m_pMgr->resetPort(m_hub, m_port);
ninoderkinderen 0:8d87bc453349 55 #else
ninoderkinderen 0:8d87bc453349 56 wait_ms(100); /* USB 2.0 spec says atleast 50ms delay beore port reset */
ninoderkinderen 0:8d87bc453349 57 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRS; // Initiate port reset
ninoderkinderen 0:8d87bc453349 58 while (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_PRS)
ninoderkinderen 0:8d87bc453349 59 __WFI(); // Wait for port reset to complete...
ninoderkinderen 0:8d87bc453349 60 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRSC; // ...and clear port reset signal
ninoderkinderen 0:8d87bc453349 61 wait_ms(200); /* Wait for 100 MS after port reset */
ninoderkinderen 0:8d87bc453349 62 #endif
ninoderkinderen 0:8d87bc453349 63
ninoderkinderen 0:8d87bc453349 64 DBG("Port reset\n");
ninoderkinderen 0:8d87bc453349 65
ninoderkinderen 0:8d87bc453349 66 wait_ms(200);
ninoderkinderen 0:8d87bc453349 67
ninoderkinderen 0:8d87bc453349 68 m_pControlEp = new UsbEndpoint( this, 0x00, false, USB_CONTROL, 8, 0 );
ninoderkinderen 0:8d87bc453349 69
ninoderkinderen 0:8d87bc453349 70 //EDCtrl->Control = 8 << 16;/* Put max pkt size = 8 */
ninoderkinderen 0:8d87bc453349 71 /* Read first 8 bytes of device desc */
ninoderkinderen 0:8d87bc453349 72 rc = controlReceive(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, (USB_DESCRIPTOR_TYPE_DEVICE << 8)|(0), 0, m_controlDataBuf, 8);
ninoderkinderen 0:8d87bc453349 73 if (rc)
ninoderkinderen 0:8d87bc453349 74 {
ninoderkinderen 0:8d87bc453349 75 DBG("RC=%d",rc);
ninoderkinderen 0:8d87bc453349 76 return (rc);
ninoderkinderen 0:8d87bc453349 77 }
ninoderkinderen 0:8d87bc453349 78
ninoderkinderen 0:8d87bc453349 79 DBG("Got descriptor, max ep size is %d\n", m_controlDataBuf[7]);
ninoderkinderen 0:8d87bc453349 80
ninoderkinderen 0:8d87bc453349 81 m_pControlEp->updateSize(m_controlDataBuf[7]); /* Get max pkt size of endpoint 0 */
ninoderkinderen 0:8d87bc453349 82 rc = controlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_ADDRESS, m_addr, 0, NULL, 0); /* Set the device address to m_addr */
ninoderkinderen 0:8d87bc453349 83 if (rc)
ninoderkinderen 0:8d87bc453349 84 {
ninoderkinderen 0:8d87bc453349 85 // PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 86 return (rc);
ninoderkinderen 0:8d87bc453349 87 }
ninoderkinderen 0:8d87bc453349 88 wait_ms(2);
ninoderkinderen 0:8d87bc453349 89 //EDCtrl->Control = (EDCtrl->Control) | 1; /* Modify control pipe with address 1 */
ninoderkinderen 0:8d87bc453349 90
ninoderkinderen 0:8d87bc453349 91 //Update address
ninoderkinderen 0:8d87bc453349 92 m_pControlEp->updateAddr(m_addr);
ninoderkinderen 0:8d87bc453349 93 DBG("Ep addr is now %d", m_addr);
ninoderkinderen 0:8d87bc453349 94 /**/
ninoderkinderen 0:8d87bc453349 95
ninoderkinderen 0:8d87bc453349 96 //rc = HOST_GET_DESCRIPTOR(USB_DESCRIPTOR_TYPE_DEVICE, 0, TDBuffer, 17); //Read full device descriptor
ninoderkinderen 0:8d87bc453349 97 rc = controlReceive(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, (USB_DESCRIPTOR_TYPE_DEVICE << 8)|(0), 0, m_controlDataBuf, 17);
ninoderkinderen 0:8d87bc453349 98 if (rc)
ninoderkinderen 0:8d87bc453349 99 {
ninoderkinderen 0:8d87bc453349 100 //PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 101 return (rc);
ninoderkinderen 0:8d87bc453349 102 }
ninoderkinderen 0:8d87bc453349 103 /*
ninoderkinderen 0:8d87bc453349 104 rc = SerialCheckVidPid();
ninoderkinderen 0:8d87bc453349 105 if (rc != OK) {
ninoderkinderen 0:8d87bc453349 106 PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 107 return (rc);
ninoderkinderen 0:8d87bc453349 108 }
ninoderkinderen 0:8d87bc453349 109 */
ninoderkinderen 0:8d87bc453349 110 /**/
ninoderkinderen 0:8d87bc453349 111
ninoderkinderen 0:8d87bc453349 112 m_vid = *((uint16_t*)&m_controlDataBuf[8]);
ninoderkinderen 0:8d87bc453349 113 m_pid = *((uint16_t*)&m_controlDataBuf[10]);
ninoderkinderen 0:8d87bc453349 114
ninoderkinderen 0:8d87bc453349 115 DBG("VID: %02x, PID: %02x\n", m_vid, m_pid);
ninoderkinderen 0:8d87bc453349 116 /* Get the configuration descriptor */
ninoderkinderen 0:8d87bc453349 117 //rc = HOST_GET_DESCRIPTOR(USB_DESCRIPTOR_TYPE_CONFIGURATION, 0, TDBuffer, 9);
ninoderkinderen 0:8d87bc453349 118 rc = controlReceive(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, (USB_DESCRIPTOR_TYPE_CONFIGURATION << 8)|(0), 0, m_controlDataBuf, 9);
ninoderkinderen 0:8d87bc453349 119 if (rc)
ninoderkinderen 0:8d87bc453349 120 {
ninoderkinderen 0:8d87bc453349 121 //PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 122 return (rc);
ninoderkinderen 0:8d87bc453349 123 }
ninoderkinderen 0:8d87bc453349 124 /* Get the first configuration data */
ninoderkinderen 0:8d87bc453349 125 //rc = HOST_GET_DESCRIPTOR(USB_DESCRIPTOR_TYPE_CONFIGURATION, 0, TDBuffer, *((uint16_t*)&TDBuffer[2]));
ninoderkinderen 0:8d87bc453349 126 rc = controlReceive(USB_DEVICE_TO_HOST | USB_RECIPIENT_DEVICE, GET_DESCRIPTOR, (USB_DESCRIPTOR_TYPE_CONFIGURATION << 8)|(0), 0, m_controlDataBuf, *((uint16_t*)&m_controlDataBuf[2]));
ninoderkinderen 0:8d87bc453349 127 if (rc)
ninoderkinderen 0:8d87bc453349 128 {
ninoderkinderen 0:8d87bc453349 129 //PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 130 return (rc);
ninoderkinderen 0:8d87bc453349 131 }
ninoderkinderen 0:8d87bc453349 132
ninoderkinderen 0:8d87bc453349 133 DBG("Desc len is %d\n", *((uint16_t*)&m_controlDataBuf[2]));
ninoderkinderen 0:8d87bc453349 134
ninoderkinderen 0:8d87bc453349 135 DBG("Set configuration\n");
ninoderkinderen 0:8d87bc453349 136
ninoderkinderen 0:8d87bc453349 137 //rc = USBH_SET_CONFIGURATION(1);/* Select device configuration 1 */
ninoderkinderen 0:8d87bc453349 138 rc = controlSend(USB_HOST_TO_DEVICE | USB_RECIPIENT_DEVICE, SET_CONFIGURATION, 1, 0, NULL, 0);
ninoderkinderen 0:8d87bc453349 139 if (rc)
ninoderkinderen 0:8d87bc453349 140 {
ninoderkinderen 0:8d87bc453349 141 // PRINT_Err(rc);
ninoderkinderen 0:8d87bc453349 142 return rc;
ninoderkinderen 0:8d87bc453349 143 }
ninoderkinderen 0:8d87bc453349 144 wait_ms(100);/* Some devices may require this delay */
ninoderkinderen 0:8d87bc453349 145
ninoderkinderen 0:8d87bc453349 146 m_enumerated = true;
ninoderkinderen 0:8d87bc453349 147 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 148 }
ninoderkinderen 0:8d87bc453349 149
ninoderkinderen 0:8d87bc453349 150 bool UsbDevice::connected()
ninoderkinderen 0:8d87bc453349 151 {
ninoderkinderen 0:8d87bc453349 152 return m_connected;
ninoderkinderen 0:8d87bc453349 153 }
ninoderkinderen 0:8d87bc453349 154
ninoderkinderen 0:8d87bc453349 155 bool UsbDevice::enumerated()
ninoderkinderen 0:8d87bc453349 156 {
ninoderkinderen 0:8d87bc453349 157 return m_enumerated;
ninoderkinderen 0:8d87bc453349 158 }
ninoderkinderen 0:8d87bc453349 159
ninoderkinderen 0:8d87bc453349 160 int UsbDevice::getPid()
ninoderkinderen 0:8d87bc453349 161 {
ninoderkinderen 0:8d87bc453349 162 return m_pid;
ninoderkinderen 0:8d87bc453349 163 }
ninoderkinderen 0:8d87bc453349 164
ninoderkinderen 0:8d87bc453349 165 int UsbDevice::getVid()
ninoderkinderen 0:8d87bc453349 166 {
ninoderkinderen 0:8d87bc453349 167 return m_vid;
ninoderkinderen 0:8d87bc453349 168 }
ninoderkinderen 0:8d87bc453349 169
ninoderkinderen 0:8d87bc453349 170 UsbErr UsbDevice::getConfigurationDescriptor(int config, uint8_t** pBuf)
ninoderkinderen 0:8d87bc453349 171 {
ninoderkinderen 0:8d87bc453349 172 //For now olny one config
ninoderkinderen 0:8d87bc453349 173 *pBuf = m_controlDataBuf;
ninoderkinderen 0:8d87bc453349 174 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 175 }
ninoderkinderen 0:8d87bc453349 176
ninoderkinderen 0:8d87bc453349 177 UsbErr UsbDevice::getInterfaceDescriptor(int config, int item, uint8_t** pBuf)
ninoderkinderen 0:8d87bc453349 178 {
ninoderkinderen 0:8d87bc453349 179 byte* desc_ptr = m_controlDataBuf;
ninoderkinderen 0:8d87bc453349 180
ninoderkinderen 0:8d87bc453349 181 /* if (desc_ptr[1] != USB_DESCRIPTOR_TYPE_CONFIGURATION)
ninoderkinderen 0:8d87bc453349 182 {
ninoderkinderen 0:8d87bc453349 183 return USBERR_BADCONFIG;
ninoderkinderen 0:8d87bc453349 184 }*/
ninoderkinderen 0:8d87bc453349 185
ninoderkinderen 0:8d87bc453349 186 if(item>=m_controlDataBuf[4])//Interfaces count
ninoderkinderen 0:8d87bc453349 187 return USBERR_NOTFOUND;
ninoderkinderen 0:8d87bc453349 188
ninoderkinderen 0:8d87bc453349 189 desc_ptr += desc_ptr[0];
ninoderkinderen 0:8d87bc453349 190
ninoderkinderen 0:8d87bc453349 191 *pBuf = NULL;
ninoderkinderen 0:8d87bc453349 192
ninoderkinderen 0:8d87bc453349 193 while (desc_ptr < m_controlDataBuf + *((uint16_t*)&m_controlDataBuf[2]))
ninoderkinderen 0:8d87bc453349 194 {
ninoderkinderen 0:8d87bc453349 195
ninoderkinderen 0:8d87bc453349 196 switch (desc_ptr[1]) {
ninoderkinderen 0:8d87bc453349 197 case USB_DESCRIPTOR_TYPE_INTERFACE:
ninoderkinderen 0:8d87bc453349 198 if(desc_ptr[2] == item)
ninoderkinderen 0:8d87bc453349 199 {
ninoderkinderen 0:8d87bc453349 200 *pBuf = desc_ptr;
ninoderkinderen 0:8d87bc453349 201 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 202 }
ninoderkinderen 0:8d87bc453349 203 desc_ptr += desc_ptr[0]; // Move to next descriptor start
ninoderkinderen 0:8d87bc453349 204 break;
ninoderkinderen 0:8d87bc453349 205 }
ninoderkinderen 0:8d87bc453349 206
ninoderkinderen 0:8d87bc453349 207 }
ninoderkinderen 0:8d87bc453349 208
ninoderkinderen 0:8d87bc453349 209 if(*pBuf == NULL)
ninoderkinderen 0:8d87bc453349 210 return USBERR_NOTFOUND;
ninoderkinderen 0:8d87bc453349 211
ninoderkinderen 0:8d87bc453349 212 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 213 }
ninoderkinderen 0:8d87bc453349 214
ninoderkinderen 0:8d87bc453349 215
ninoderkinderen 0:8d87bc453349 216 UsbErr UsbDevice::setConfiguration(int config)
ninoderkinderen 0:8d87bc453349 217 {
ninoderkinderen 0:8d87bc453349 218 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 219 }
ninoderkinderen 0:8d87bc453349 220
ninoderkinderen 0:8d87bc453349 221 UsbErr UsbDevice::controlSend(byte requestType, byte request, word value, word index, const byte* buf, int len)
ninoderkinderen 0:8d87bc453349 222 {
ninoderkinderen 0:8d87bc453349 223 UsbErr rc;
ninoderkinderen 0:8d87bc453349 224 fillControlBuf(requestType, request, value, index, len);
ninoderkinderen 0:8d87bc453349 225 m_pControlEp->setNextToken(TD_SETUP);
ninoderkinderen 0:8d87bc453349 226 rc = m_pControlEp->transfer(m_controlBuf, 8);
ninoderkinderen 0:8d87bc453349 227 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 228 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 229 if(rc)
ninoderkinderen 0:8d87bc453349 230 return rc;
ninoderkinderen 0:8d87bc453349 231 if(len)
ninoderkinderen 0:8d87bc453349 232 {
ninoderkinderen 0:8d87bc453349 233 m_pControlEp->setNextToken(TD_OUT);
ninoderkinderen 0:8d87bc453349 234 rc = m_pControlEp->transfer((byte*)buf, len);
ninoderkinderen 0:8d87bc453349 235 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 236 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 237 if(rc)
ninoderkinderen 0:8d87bc453349 238 return rc;
ninoderkinderen 0:8d87bc453349 239 }
ninoderkinderen 0:8d87bc453349 240 m_pControlEp->setNextToken(TD_IN);
ninoderkinderen 0:8d87bc453349 241 rc = m_pControlEp->transfer(NULL, 0);
ninoderkinderen 0:8d87bc453349 242 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 243 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 244 if(rc)
ninoderkinderen 0:8d87bc453349 245 return rc;
ninoderkinderen 0:8d87bc453349 246 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 247 }
ninoderkinderen 0:8d87bc453349 248
ninoderkinderen 0:8d87bc453349 249 UsbErr UsbDevice::controlReceive(byte requestType, byte request, word value, word index, const byte* buf, int len)
ninoderkinderen 0:8d87bc453349 250 {
ninoderkinderen 0:8d87bc453349 251 UsbErr rc;
ninoderkinderen 0:8d87bc453349 252 fillControlBuf(requestType, request, value, index, len);
ninoderkinderen 0:8d87bc453349 253 m_pControlEp->setNextToken(TD_SETUP);
ninoderkinderen 0:8d87bc453349 254 rc = m_pControlEp->transfer(m_controlBuf, 8);
ninoderkinderen 0:8d87bc453349 255 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 256 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 257 if(rc)
ninoderkinderen 0:8d87bc453349 258 return rc;
ninoderkinderen 0:8d87bc453349 259 if(len)
ninoderkinderen 0:8d87bc453349 260 {
ninoderkinderen 0:8d87bc453349 261 m_pControlEp->setNextToken(TD_IN);
ninoderkinderen 0:8d87bc453349 262 rc = m_pControlEp->transfer( (byte*) buf, len);
ninoderkinderen 0:8d87bc453349 263 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 264 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 265 if(rc)
ninoderkinderen 0:8d87bc453349 266 return rc;
ninoderkinderen 0:8d87bc453349 267 }
ninoderkinderen 0:8d87bc453349 268 m_pControlEp->setNextToken(TD_OUT);
ninoderkinderen 0:8d87bc453349 269 rc = m_pControlEp->transfer(NULL, 0);
ninoderkinderen 0:8d87bc453349 270 while(m_pControlEp->status() == USBERR_PROCESSING);
ninoderkinderen 0:8d87bc453349 271 rc = (UsbErr) MIN(0, m_pControlEp->status());
ninoderkinderen 0:8d87bc453349 272 if(rc)
ninoderkinderen 0:8d87bc453349 273 return rc;
ninoderkinderen 0:8d87bc453349 274 return USBERR_OK;
ninoderkinderen 0:8d87bc453349 275 }
ninoderkinderen 0:8d87bc453349 276
ninoderkinderen 0:8d87bc453349 277 void UsbDevice::fillControlBuf(byte requestType, byte request, word value, word index, int len)
ninoderkinderen 0:8d87bc453349 278 {
ninoderkinderen 0:8d87bc453349 279 #ifdef __BIG_ENDIAN
ninoderkinderen 0:8d87bc453349 280 #error "Must implement BE to LE conv here"
ninoderkinderen 0:8d87bc453349 281 #endif
ninoderkinderen 0:8d87bc453349 282 m_controlBuf[0] = requestType;
ninoderkinderen 0:8d87bc453349 283 m_controlBuf[1] = request;
ninoderkinderen 0:8d87bc453349 284 //We are in LE so it's fine
ninoderkinderen 0:8d87bc453349 285 *((word*)&m_controlBuf[2]) = value;
ninoderkinderen 0:8d87bc453349 286 *((word*)&m_controlBuf[4]) = index;
ninoderkinderen 0:8d87bc453349 287 *((word*)&m_controlBuf[6]) = (word) len;
ninoderkinderen 0:8d87bc453349 288 }
ninoderkinderen 0:8d87bc453349 289
ninoderkinderen 0:8d87bc453349 290
ninoderkinderen 0:8d87bc453349 291 #endif