Author: gkruse Date: 2006-03-17 05:48:18 +0100 (Fri, 17 Mar 2006) New Revision: 108 Modified: KisMACng/CHANGES KisMACng/Sources/WaveDrivers/WaveDriver.m Log: Fixed #35, #36 and #54. When not hopping, still set channel in hopping method. This avoids a nasty race condition. M Sources/WaveDrivers/WaveDriver.m M CHANGES Modified: KisMACng/CHANGES =================================================================== --- KisMACng/CHANGES 2006-03-16 20:57:10 UTC (rev 107) +++ KisMACng/CHANGES 2006-03-17 04:48:18 UTC (rev 108) @@ -1,3 +1,5 @@ +R108: - Fixed #35, #36 and #54. When not hopping, still set channel in hopping method. This avoids a nasty race condition. + R107: - Fixed #51 - deleting a net causes kismac to crash - Fixed #9 - used Geoffs patch to fix GPS update... Modified: KisMACng/Sources/WaveDrivers/WaveDriver.m =================================================================== --- KisMACng/Sources/WaveDrivers/WaveDriver.m 2006-03-16 20:57:10 UTC (rev 107) +++ KisMACng/Sources/WaveDrivers/WaveDriver.m 2006-03-17 04:48:18 UTC (rev 108) @@ -158,24 +158,7 @@ } [sets setObject:a forKey:@"ActiveDrivers"]; [a release]; - - if (!_hop) { - if (ch == 0) ch = 1; - _firstChannel = ch; - if ([self allowsChannelHopping]) { - for (i = 0; i < 20; i++) { //try again if the card does not want to react - [self setChannel:ch]; - ch = [self getChannelUnCached]; - if (ch==_firstChannel) break; - } - if (i == 20) { - [self stopCapture]; - [self startCapture: _firstChannel]; - } - } - _currentChannel = _firstChannel; - } - + return YES; } @@ -220,9 +203,29 @@ } - (void)hopToNextChannel { - int channel, i; - - if (!_hop) return; + int channel = _currentChannel+1, i; + + if (!_hop) { + while (_useChannel[channel - 1] == NO) { + channel = (channel % 14) + 1; + if (channel == _currentChannel) break; //just make sure it ends + } + _currentChannel = [self getChannelUnCached]; + if (_currentChannel == channel) { + return; + } else { + for(i=0; i < 20; i++) { + [self setChannel: channel]; + _currentChannel = [self getChannelUnCached]; + if (_currentChannel == channel) break; + } + if (i == 20) { + [self stopCapture]; + [self startCapture: channel]; + } + } + return; + } if (_autoAdjustTimer && (_packets!=0)) { if (_autoRepeat<1) {