[kismac] [binaervarianz] r223 - in branches/usb-drivers/Sources: Driver/USBJack WaveDrivers

  • From: svn@xxxxxxxxxxxxxxxx
  • To: kismac@xxxxxxxxxxxxx
  • Date: Sat, 17 Feb 2007 06:00:35 +0100

Author: gkruse
Date: 2007-02-17 06:00:29 +0100 (Sat, 17 Feb 2007)
New Revision: 223

Modified:
   branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.h
   branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm
   branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h
   branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm
   branches/usb-drivers/Sources/Driver/USBJack/USBJack.h
   branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm
   branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm
Log:
No comment ;)  I like the word introspection though :D

Modified: branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.h
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.h  2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.h  2007-02-17 
05:00:29 UTC (rev 223)
@@ -24,6 +24,7 @@
     bool    getChannel(UInt16* channel);
     bool    getAllowedChannels(UInt16* channel);
     bool    setChannel(UInt16 channel);
+    int     WriteTxDescriptor(WLFrame * theFrame);
     
     
 private:

Modified: branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm 2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm 2007-02-17 
05:00:29 UTC (rev 223)
@@ -189,6 +189,13 @@
     return kIOReturnSuccess;
 }
 
+int IntersilJack::WriteTxDescriptor(WLFrame * theFrame){
+    theFrame->rate = 0x6e;     //11 MBit/s
+    theFrame->tx_rate = 0x6e;  //11 MBit/s 
+    //where does this come from?  sizeof(WLFrame)?
+    return 0x3C;
+}
+
 IntersilJack::IntersilJack() {
 }
 

Modified: branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h    2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h    2007-02-17 
05:00:29 UTC (rev 223)
@@ -85,6 +85,8 @@
     bool stopCapture();
     
     bool _massagePacket(int len);
+    int WriteTxDescriptor(WLFrame * theFrame);
+
     
 private:
     int temp;

Modified: branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm   2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm   2007-02-17 
05:00:29 UTC (rev 223)
@@ -1041,6 +1041,119 @@
     return true;
 }
 
+int RalinkJack::WriteTxDescriptor(WLFrame * theFrame){
+    //here we will constrict a TXD_STRUC from the contents of theFrame
+    //and some defaults taken from the linux driver
+    //then, WLFrame will be overwritten with the TXD_STRUC and
+    //sizeof(TXD_STRUC) will be returned
+    TXD_STRUC *        pTxD;
+    UInt8 tempFrame[sizeof(TXD_STRUC)];
+    pTxD = (TXD_STRUC *)&tempFrame;
+    //todo fixme!!
+    
+    //stuff it
+    pTxD->RetryLimit = 0;
+    pTxD->MoreFrag = false;
+    pTxD->ACK         = false;
+       pTxD->Timestamp   = false;
+       pTxD->newseq      = new_seq;
+       //pTxD->IFS         = Ifs;
+       pTxD->DataByteCnt = theFrame->length;
+       pTxD->Cipher      = false;
+       pTxD->KeyID               = 0;
+       pTxD->CWmin       = 2^5-1;// = 31
+       pTxD->CWmax       = 2^10 -1;// = 1023
+       pTxD->Aifs        = 2;   // TC0: SIFS + 2*Slot + 
Random(CWmin,CWmax)*Slot
+    //maybe?
+    pTxD->Ofdm = 1;
+    
+    
+/*
+                                       Fragment, //false
+                               IN      UCHAR           RetryLimit, 0
+                               IN      BOOLEAN         Ack, //false
+                               IN  BOOLEAN     InsTimestamp, //false
+                               IN  BOOLEAN     new_seq, //true
+                               IN      UCHAR           Ifs, //IFS_BACKOFF
+                               IN      UINT            Length, //length of 
packet
+                               IN      BOOLEAN         Cipher, //false
+                               IN      UCHAR           KeyID,  //0
+                               IN      UCHAR           CWMin, // CW_MIN_IN_BITS
+                               IN      UCHAR           CWMax, //CW_MAX_IN_BITS
+                               IN      UINT            PLCPLength, //len + 4
+                               IN      UINT            Rate,   //tx rate
+                               IN      UCHAR           Service,    //4
+                               IN  USHORT      TxPreamble) //preamble
+       UINT    Residual;
+    
+       pTxD->RetryLimit  = RetryLimit;
+       pTxD->MoreFrag    = Fragment;
+       pTxD->ACK         = Ack;
+       pTxD->Timestamp   = InsTimestamp;
+       pTxD->newseq      = new_seq;
+       pTxD->IFS         = Ifs;
+       pTxD->DataByteCnt = Length;
+       pTxD->Cipher      = Cipher;
+       pTxD->KeyID               = KeyID;
+       pTxD->CWmin       = CWMin;   // 2^5-1 = 31
+       pTxD->CWmax       = CWMax;  // 2^10 -1 = 1023
+       pTxD->Aifs        = 2;   // TC0: SIFS + 2*Slot + 
Random(CWmin,CWmax)*Slot
+    
+       if (Rate < RATE_FIRST_OFDM_RATE)
+               pTxD->Ofdm = 0;
+       else
+               pTxD->Ofdm = 1;
+    
+       // fill up PLCP SIGNAL field
+       pTxD->PlcpSignal = PlcpSignal[Rate];
+       if (((Rate == RATE_2) || (Rate == RATE_5_5) || (Rate == RATE_11)) && 
(TxPreamble == Rt802_11PreambleShort)) // no short preamble for RATE_1
+       {
+               pTxD->PlcpSignal |= 0x0008;
+       }
+    
+       // fill up PLCP SERVICE field, not used for OFDM rates
+       pTxD->PlcpService = Service;
+    
+       // file up PLCP LENGTH_LOW and LENGTH_HIGH fields
+       if (Rate < RATE_FIRST_OFDM_RATE)    // 11b - RATE_1, RATE_2, RATE_5_5, 
RATE_11
+       {
+               if ((Rate == RATE_1) || ( Rate == RATE_2))
+               {
+                       PLCPLength = PLCPLength * 8 / (Rate + 1);
+               }
+               else
+               {
+                       Residual = ((PLCPLength * 16) % (11 * (1 + Rate - 
RATE_5_5)));
+                       PLCPLength = PLCPLength * 16 / (11 * (1 + Rate - 
RATE_5_5));
+                       if (Residual != 0)
+                       {
+                               PLCPLength++;
+                       }
+                       if (Rate == RATE_11)
+                       {
+                if ((Residual <= (3 * (1 + Rate - RATE_5_5))) && (Residual != 
0))
+                {
+                    pTxD->PlcpService |= 0x80; // 11b's PLCP Length extension 
bit
+                }
+                       }
+               }
+        
+               pTxD->PlcpLengthHigh = PLCPLength / 256;
+               pTxD->PlcpLengthLow = PLCPLength % 256;
+       }
+       else    // OFDM - RATE_6, RATE_9, RATE_12, RATE_18, RATE_24, RATE_36, 
RATE_48, RATE_54
+       {
+               pTxD->PlcpLengthHigh = PLCPLength / 64;  // high 6-bit of total 
byte count
+               pTxD->PlcpLengthLow = PLCPLength % 64;   // low 6-bit of total 
byte count
+       }
+}
+*/
+    //now copy the txd_struc over the old wlframe
+     memcpy(theFrame, tempFrame, sizeof(TXD_STRUC));
+     
+    return sizeof(TXD_STRUC);
+}
+
 bool RalinkJack::_massagePacket(int len){
     unsigned char* pData;
     UInt8 frame[sizeof(_recieveBuffer)];

Modified: branches/usb-drivers/Sources/Driver/USBJack/USBJack.h
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/USBJack.h       2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/USBJack.h       2007-02-17 
05:00:29 UTC (rev 223)
@@ -98,6 +98,7 @@
     static void         _handleDeviceRemoval(void *refCon, io_iterator_t 
iterator);
     static void         _interruptRecieved(void *refCon, IOReturn result, int 
len);
     virtual bool        _massagePacket(int len);
+    virtual int         WriteTxDescriptor(WLFrame * theFrame);
     static void         _runCFRunLoop(USBJack* me);
   
   // static IOUSBDeviceInterface **_foundDevices[10];

Modified: branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm
===================================================================
--- branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm      2007-02-08 
07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm      2007-02-17 
05:00:29 UTC (rev 223)
@@ -177,8 +177,11 @@
     WLFrame *frameDescriptor;
     UInt8 aData[2364];
     IOByteCount pktsize;
+    int descriptorLength;
     
+    //copy the wl frame to the tx buff
     memcpy(aData, data, sizeof(WLFrame));
+    //modify the frame descriptor in the txbuff
     frameDescriptor = (WLFrame*)aData;
     switch(frameDescriptor->frameControl & 0x0c) {
         case 0x08:
@@ -194,15 +197,19 @@
         default:
             return kIOReturnBadArgument;
     }
-
+    
     frameDescriptor->txControl=NSSwapHostShortToLittle(0x08 | 
_TX_RETRYSTRAT_SET(3)| _TX_CFPOLL_SET(1) | _TX_TXEX_SET(0) | _TX_TXOK_SET(0) | 
_TX_MACPORT_SET(0));
     
-    frameDescriptor->rate = 0x6e;      //11 MBit/s
-    frameDescriptor->tx_rate = 0x6e;   //11 MBit/s
-
-    memcpy(aData + 0x3C, data + sizeof(WLFrame), pktsize);
-
-    if (_sendFrame(aData, pktsize + 0x3C) != kIOReturnSuccess)
+    //write the device dependant descriptor and return the length to copy
+    //note frame descriptor = txbuff
+    descriptorLength = WriteTxDescriptor(frameDescriptor);
+    //copy the packet data to the end of the descriptor
+    //this is 0x3c on prismII
+    //todo fixme!! we need to make sure the buffer is long enough!
+    memcpy(aData + descriptorLength, data + sizeof(WLFrame), pktsize);
+ 
+    //send the frame
+    if (_sendFrame(aData, pktsize + descriptorLength) != kIOReturnSuccess)
         return NO;
     
     return YES;
@@ -466,6 +473,7 @@
     _lockDevice();
 
     memcpy(&_outputBuffer, data, size);
+    //not sure about this
     _outputBuffer.type =   NSSwapHostShortToLittle(_USB_TXFRM);
     
     numBytes =  align64(size);
@@ -636,6 +644,7 @@
     IOUSBConfigurationDescriptorPtr    confDesc;
     
     kr = (*dev)->GetNumberOfConfigurations(dev, &numConf);
+    NSLog(@"Number of configs found: %d\n", numConf);
     if (!numConf)
         return kIOReturnError;
     
@@ -1060,4 +1069,11 @@
     pthread_mutex_destroy(&_recv_mutex);
     pthread_cond_destroy(&_recv_cond);
     
-}
\ No newline at end of file
+}
+
+int USBJack::WriteTxDescriptor(WLFrame * theFrame){
+    theFrame->rate = 0x6e;     //11 MBit/s
+    theFrame->tx_rate = 0x6e;  //11 MBit/s 
+                                //where does this come from?  sizeof(WLFrame)?
+    return 0x3C;
+}

Modified: branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm
===================================================================
--- branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm   
2007-02-08 07:45:23 UTC (rev 222)
+++ branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm   
2007-02-17 05:00:29 UTC (rev 223)
@@ -41,6 +41,7 @@
     _driver = new USBJack;
     //this will only occur once!
     _driver->startMatching();
+    NSLog(@"Matching finished\n");
     
     while(!_driver->getDeviceType() && timeoutCount++ < 10)        //wait 
until the device is found
         usleep(100);
@@ -65,6 +66,7 @@
             break;
         default:
             NSLog(@"No supported USB Device found!");
+            delete(_driver);
             _errors++;
             return Nil;
     }


Other related posts:

  • » [kismac] [binaervarianz] r223 - in branches/usb-drivers/Sources: Driver/USBJack WaveDrivers