Skip to content

Commit bb71d57

Browse files
taylorcentersTaylorTaylorTaylor
authored
Sewio updates (#233)
* adding hardware option to killerbee * debugging goodfet read * fixed up mypy * add deprecation notice * added changes from PR 148 * fixed indents * changed built-in list types to typing.List * fixed zbstumbler byte type mismatches * rely on capabilities to throw errors, changed other exceptions to TypeError * added back accidentally removed tests for jamming method not supported Co-authored-by: Taylor <taylor@Taylors-MacBook-Pro.local> Co-authored-by: Taylor <taylor@Taylors-MBP.fios-router.home> Co-authored-by: Taylor <taylor@vde-monitoring-influxdb-dev-as-b02.dna.comcast.net>
1 parent 3bbf7eb commit bb71d57

11 files changed

Lines changed: 265 additions & 154 deletions

killerbee/__init__.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def show_dev(vendor: str=None, product: str=None, gps: str=None, include: str=No
3131
@param include: Provide device names in this argument if you would like only
3232
these to be enumerated. Aka, include only these items.
3333
'''
34-
fmt: str = "{: >14} {: <20} {: >10}"
34+
fmt: str = "{: >14} {: <30} {: >10}"
3535
print((fmt.format("Dev", "Product String", "Serial Number")))
3636
for dev in devlist(vendor=vendor, product=product, gps=gps, include=include):
3737
# Using None as a format value is an TypeError in python3
@@ -76,42 +76,39 @@ def __init__(self, device: Optional[str]=None, hardware: Optional[str]=None, dat
7676
else: del isSewio
7777

7878

79-
if device is not None:
80-
self.dev = device
81-
8279
if hardware is None:
8380
print("Auto-detection is being deprecated - Please specify hardware")
84-
elif self.dev is not None:
81+
elif device is not None:
8582
if hardware == "apimote":
8683
from .dev_apimote import APIMOTE
87-
self.driver = APIMOTE(self.dev)
84+
self.driver = APIMOTE(device)
8885
elif hardware == "rzusbstick":
8986
from .dev_rzusbstick import RZUSBSTICK
90-
self.driver = RZUSBSTICK(self.dev, self.__bus)
87+
self.driver = RZUSBSTICK(device, self.__bus)
9188
elif hardware == "cc2530":
9289
from .dev_cc253x import CC253x
93-
self.driver = CC253x(self.dev, self.__bus, CC253x.VARIANT_CC2530)
90+
self.driver = CC253x(device, self.__bus, CC253x.VARIANT_CC2530)
9491
elif hardware == "cc2531":
9592
from .dev_cc253x import CC253x
96-
self.driver = CC253x(self.dev, self.__bus, CC253x.VARIANT_CC2531)
93+
self.driver = CC253x(device, self.__bus, CC253x.VARIANT_CC2531)
9794
elif hardware == "bumblebee":
9895
from .dev_bumblebee import Bumblebee
99-
self.driver = Bumblebee(self.dev, self.__bus)
96+
self.driver = Bumblebee(device, self.__bus)
10097
elif hardware == "sl_nodetest":
10198
from .dev_sl_nodetest import SL_NODETEST
102-
self.driver = SL_NODETEST(self.dev)
99+
self.driver = SL_NODETEST(device)
103100
elif hardware == "sl_beehive":
104101
from .dev_sl_beehive import SL_BEEHIVE
105-
self.driver = SL_BEEHIVE(self.dev)
102+
self.driver = SL_BEEHIVE(device)
106103
elif hardware == "zigduino":
107104
from .dev_zigduino import ZIGDUINO
108-
self.driver = ZIGDUINO(self.dev)
105+
self.driver = ZIGDUINO(device)
109106
elif hardware == "freakdruino":
110107
from .dev_freakduino import FREAKDUINO
111-
self.driver = FREAKDUINO(self.dev)
108+
self.driver = FREAKDUINO(device)
112109
elif hardware == "telosb":
113110
from .dev_telosb import TELOSB
114-
self.driver = TELOSB(self.dev)
111+
self.driver = TELOSB(device)
115112

116113
# Figure out a device is one is not set, trying USB devices next
117114
if self.driver is None:
@@ -208,8 +205,10 @@ def __device_is(self, vendorId, productId):
208205
@rtype: Boolean
209206
@return: True if KillerBee class has device matching the vendor and product IDs provided.
210207
'''
211-
if self.dev.idVendor == vendorId and self.dev.idProduct == productId: return True
212-
else: return False
208+
if self.dev.idVendor == vendorId and self.dev.idProduct == productId:
209+
return True
210+
else:
211+
return False
213212

214213
def get_dev_info(self) -> List[str]:
215214
'''
@@ -442,7 +441,7 @@ def pnext(self, timeout: int=100) -> Optional[Dict[Union[int, str], Any]]:
442441

443442
return self.driver.pnext(timeout)
444443

445-
def jammer_on(self, channel: Optional[int]=None):
444+
def jammer_on(self, channel: Optional[int]=None, method: Optional[str]=None):
446445
'''
447446
Attempts reflexive jamming on all 802.15.4 frames.
448447
Targeted frames must be >12 bytes for reliable jamming in current firmware.
@@ -454,9 +453,10 @@ def jammer_on(self, channel: Optional[int]=None):
454453
if self.driver is None:
455454
raise KBInterfaceError("Driver not configured")
456455

457-
return self.driver.jammer_on(channel=channel)
456+
return self.driver.jammer_on(channel=channel, method=method)
457+
458458

459-
def jammer_off(self, channel: Optional[int]=None):
459+
def jammer_off(self):
460460
'''
461461
End reflexive jamming on all 802.15.4 frames.
462462
Targeted frames must be >12 bytes for reliable jamming in current firmware.
@@ -468,5 +468,5 @@ def jammer_off(self, channel: Optional[int]=None):
468468
if self.driver is None:
469469
raise KBInterfaceError("Driver not configured")
470470

471-
return self.driver.jammer_off(channel=channel)
471+
return self.driver.jammer_off()
472472

killerbee/dev_apimote.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def __set_capabilities(self) -> None:
7979
self.capabilities.setcapab(KBCapabilities.INJECT, True)
8080
self.capabilities.setcapab(KBCapabilities.PHYJAM_REFLEX, True)
8181
self.capabilities.setcapab(KBCapabilities.SET_SYNC, True)
82+
self.capabilities.setcapab(KBCapabilities.PHYJAM, True)
8283
return
8384

8485
# KillerBee expects the driver to implement this function
@@ -259,19 +260,28 @@ def ping(self, da: Any, panid: Any, sa: Any, channel: Optional[int]=None, page:
259260
'''
260261
raise Exception('Not yet implemented')
261262

262-
def jammer_on(self, channel: Optional[int]=None, page: int=0) -> None:
263+
def jammer_on(self, channel: Optional[int]=None, page: int=0, method: Optional[str]=None) -> None:
263264
'''
264-
Not yet implemented.
265+
Implements reflexive jamming or constant carrier wave jamming.
265266
@type channel: Integer
266267
@param channel: Sets the channel, optional
267268
@type page: Integer
268269
@param page: Sets the subghz page, not supported on this device
269270
@rtype: None
270271
'''
272+
271273
if self.handle is None:
272274
raise Exception("Handle does not exist")
273275

274-
self.capabilities.require(KBCapabilities.PHYJAM_REFLEX)
276+
if method is None:
277+
method = "constant"
278+
279+
if method == "reflexive":
280+
self.capabilities.require(KBCapabilities.PHYJAM_REFLEX)
281+
elif method == "constant":
282+
self.capabilities.require(KBCapabilities.PHYJAM)
283+
else:
284+
raise ValueError('Parameter "method" must be either \'reflexive\' or \'constant\'.')
275285

276286
self.handle.RF_promiscuity(1)
277287
self.handle.RF_autocrc(0)
@@ -280,8 +290,11 @@ def jammer_on(self, channel: Optional[int]=None, page: int=0) -> None:
280290
self.set_channel(channel, page)
281291

282292
self.handle.CC_RFST_RX()
283-
self.handle.RF_carrier() #constant carrier wave jamming
284-
#self.handle.RF_reflexjam() #reflexive jamming (advanced)
293+
294+
if method == "reflexive":
295+
self.handle.RF_reflexjam()
296+
elif method == 'constant':
297+
self.handle.RF_carrier()
285298

286299
#TODO maybe move sync to byte string rather than int
287300
def set_sync(self, sync: int=0xA70F) -> Any:
@@ -294,7 +307,7 @@ def set_sync(self, sync: int=0xA70F) -> Any:
294307
raise Exception("Sync word (%x) must be 2-bytes or less." % sync)
295308
return self.handle.poke(CC2420_REG_SYNC, sync)
296309

297-
def jammer_off(self, channel: Optional[int]=None, page: int=0) -> None:
310+
def jammer_off(self) -> None:
298311
'''
299312
Not yet implemented.
300313
@return: None

killerbee/dev_cc253x.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def pnext(self, timeout=100):
272272
return ret
273273

274274

275-
def jammer_on(self, channel=None, page=0):
275+
def jammer_on(self, channel=None, page=0, method=None):
276276
"""
277277
Not yet implemented.
278278
@type channel: Integer
@@ -289,7 +289,7 @@ def set_sync(self, sync=0xA7):
289289
"""
290290
raise Exception('Not yet implemented')
291291

292-
def jammer_off(self, channel=None, page=0):
292+
def jammer_off(self):
293293
"""
294294
Not yet implemented.
295295
@return: None

killerbee/dev_freakduino.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ def ping(self, da, panid, sa, channel=None, page=0):
313313
'''
314314
raise Exception('Not yet implemented')
315315

316-
def jammer_on(self, channel=None, page=0):
316+
def jammer_on(self, channel=None, page=0, method=None):
317317
'''
318318
Not yet implemented.
319319
@type channel: Integer
@@ -333,7 +333,7 @@ def jammer_on(self, channel=None, page=0):
333333
#TODO implement
334334
raise Exception('Not yet implemented')
335335

336-
def jammer_off(self, channel=None, page=0):
336+
def jammer_off(self):
337337
'''
338338
Not yet implemented.
339339
@return: None

0 commit comments

Comments
 (0)