refactor aprs stuff
This commit is contained in:
		| @@ -30,7 +30,8 @@ from functools import partial | |||||||
|  |  | ||||||
| from csdr.output import Output | from csdr.output import Output | ||||||
|  |  | ||||||
| from owrx.kiss import KissClient, DirewolfConfig, DirewolfConfigSubscriber | from owrx.aprs.kiss import KissClient | ||||||
|  | from owrx.aprs.direwolf import DirewolfConfig, DirewolfConfigSubscriber | ||||||
| from owrx.audio.chopper import AudioChopper | from owrx.audio.chopper import AudioChopper | ||||||
|  |  | ||||||
| from csdr.pipe import Pipe | from csdr.pipe import Pipe | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| from owrx.kiss import KissDeframer | from owrx.aprs.kiss import KissDeframer | ||||||
| from owrx.map import Map, LatLngLocation | from owrx.map import Map, LatLngLocation | ||||||
| from owrx.bands import Bandplan |  | ||||||
| from owrx.metrics import Metrics, CounterMetric | from owrx.metrics import Metrics, CounterMetric | ||||||
| from owrx.parser import Parser | from owrx.parser import Parser | ||||||
| from datetime import datetime, timezone | from datetime import datetime, timezone | ||||||
| @@ -1,17 +1,12 @@ | |||||||
| import socket |  | ||||||
| import time |  | ||||||
| import logging |  | ||||||
| import random | import random | ||||||
| from owrx.config import Config | from owrx.config import Config | ||||||
| from abc import ABC, abstractmethod | from abc import ABC, abstractmethod | ||||||
|  | import socket | ||||||
|  | 
 | ||||||
|  | import logging | ||||||
| 
 | 
 | ||||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||||
| 
 | 
 | ||||||
| FEND = 0xC0 |  | ||||||
| FESC = 0xDB |  | ||||||
| TFEND = 0xDC |  | ||||||
| TFESC = 0xDD |  | ||||||
| 
 |  | ||||||
| FEET_PER_METER = 3.28084 | FEET_PER_METER = 3.28084 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -141,51 +136,3 @@ IGLOGIN {callsign} {password} | |||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
|         return config |         return config | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class KissClient(object): |  | ||||||
|     def __init__(self, port): |  | ||||||
|         delay = 0.5 |  | ||||||
|         retries = 0 |  | ||||||
|         while True: |  | ||||||
|             try: |  | ||||||
|                 self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |  | ||||||
|                 self.socket.connect(("localhost", port)) |  | ||||||
|                 break |  | ||||||
|             except ConnectionError: |  | ||||||
|                 if retries > 20: |  | ||||||
|                     logger.error("maximum number of connection attempts reached. did direwolf start up correctly?") |  | ||||||
|                     raise |  | ||||||
|                 retries += 1 |  | ||||||
|             time.sleep(delay) |  | ||||||
| 
 |  | ||||||
|     def read(self): |  | ||||||
|         return self.socket.recv(1) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class KissDeframer(object): |  | ||||||
|     def __init__(self): |  | ||||||
|         self.escaped = False |  | ||||||
|         self.buf = bytearray() |  | ||||||
| 
 |  | ||||||
|     def parse(self, input): |  | ||||||
|         frames = [] |  | ||||||
|         for b in input: |  | ||||||
|             if b == FESC: |  | ||||||
|                 self.escaped = True |  | ||||||
|             elif self.escaped: |  | ||||||
|                 if b == TFEND: |  | ||||||
|                     self.buf.append(FEND) |  | ||||||
|                 elif b == TFESC: |  | ||||||
|                     self.buf.append(FESC) |  | ||||||
|                 else: |  | ||||||
|                     logger.warning("invalid escape char: %s", str(input[0])) |  | ||||||
|                 self.escaped = False |  | ||||||
|             elif input[0] == FEND: |  | ||||||
|                 # data frames start with 0x00 |  | ||||||
|                 if len(self.buf) > 1 and self.buf[0] == 0x00: |  | ||||||
|                     frames += [self.buf[1:]] |  | ||||||
|                 self.buf = bytearray() |  | ||||||
|             else: |  | ||||||
|                 self.buf.append(b) |  | ||||||
|         return frames |  | ||||||
							
								
								
									
										59
									
								
								owrx/aprs/kiss.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								owrx/aprs/kiss.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | import socket | ||||||
|  | import time | ||||||
|  |  | ||||||
|  | import logging | ||||||
|  |  | ||||||
|  | logger = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  | FEND = 0xC0 | ||||||
|  | FESC = 0xDB | ||||||
|  | TFEND = 0xDC | ||||||
|  | TFESC = 0xDD | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class KissClient(object): | ||||||
|  |     def __init__(self, port): | ||||||
|  |         delay = 0.5 | ||||||
|  |         retries = 0 | ||||||
|  |         while True: | ||||||
|  |             try: | ||||||
|  |                 self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||||
|  |                 self.socket.connect(("localhost", port)) | ||||||
|  |                 break | ||||||
|  |             except ConnectionError: | ||||||
|  |                 if retries > 20: | ||||||
|  |                     logger.error("maximum number of connection attempts reached. did direwolf start up correctly?") | ||||||
|  |                     raise | ||||||
|  |                 retries += 1 | ||||||
|  |             time.sleep(delay) | ||||||
|  |  | ||||||
|  |     def read(self): | ||||||
|  |         return self.socket.recv(1) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class KissDeframer(object): | ||||||
|  |     def __init__(self): | ||||||
|  |         self.escaped = False | ||||||
|  |         self.buf = bytearray() | ||||||
|  |  | ||||||
|  |     def parse(self, input): | ||||||
|  |         frames = [] | ||||||
|  |         for b in input: | ||||||
|  |             if b == FESC: | ||||||
|  |                 self.escaped = True | ||||||
|  |             elif self.escaped: | ||||||
|  |                 if b == TFEND: | ||||||
|  |                     self.buf.append(FEND) | ||||||
|  |                 elif b == TFESC: | ||||||
|  |                     self.buf.append(FESC) | ||||||
|  |                 else: | ||||||
|  |                     logger.warning("invalid escape char: %s", str(input[0])) | ||||||
|  |                 self.escaped = False | ||||||
|  |             elif input[0] == FEND: | ||||||
|  |                 # data frames start with 0x00 | ||||||
|  |                 if len(self.buf) > 1 and self.buf[0] == 0x00: | ||||||
|  |                     frames += [self.buf[1:]] | ||||||
|  |                 self.buf = bytearray() | ||||||
|  |             else: | ||||||
|  |                 self.buf.append(b) | ||||||
|  |         return frames | ||||||
		Reference in New Issue
	
	Block a user
	 Jakob Ketterl
					Jakob Ketterl