From 8c283727a9026cef141cd8b49a9365b0dbe5ca14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Veres-Szentkir=C3=A1lyi?= Date: Wed, 19 Jun 2013 16:45:47 +0200 Subject: [PATCH] added FSKID --- run.py | 4 ++++ sstv.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/run.py b/run.py index e844d76..17b0c2e 100644 --- a/run.py +++ b/run.py @@ -27,6 +27,8 @@ def main(): help='bits per sample (default: 16)') parser.add_argument('--vox', dest='vox', action='store_true', help='add VOX tones at the beginning') + parser.add_argument('--fskid', dest='fskid', + help='add FSKID at the end') args = parser.parse_args() image = Image.open(args.img_file) mode = module_map[args.mode] @@ -36,6 +38,8 @@ def main(): raise SystemExit(1) s = mode(image, args.rate, args.bits) s.vox_enabled = args.vox + if args.fskid: + s.add_fskid_text(args.fskid) s.write_wav(args.wav_file) diff --git a/sstv.py b/sstv.py index b855d68..c17e733 100644 --- a/sstv.py +++ b/sstv.py @@ -4,6 +4,7 @@ from __future__ import division, with_statement from math import sin, pi, floor from random import random from contextlib import closing +from itertools import imap import struct import wave @@ -14,10 +15,13 @@ FREQ_BLACK = 1500 FREQ_VIS_START = 1900 FREQ_WHITE = 2300 FREQ_RANGE = FREQ_WHITE - FREQ_BLACK +FREQ_FSKID_BIT1 = 1900 +FREQ_FSKID_BIT0 = 2100 MSEC_VIS_START = 300 MSEC_VIS_SYNC = 10 MSEC_VIS_BIT = 30 +MSEC_FSKID_BIT = 22 class SSTV(object): @@ -27,6 +31,7 @@ class SSTV(object): self.samples_per_sec = samples_per_sec self.bits = bits self.vox_enabled = False + self.fskid_payload = '' BITS_TO_STRUCT = {8: 'b', 16: 'h'} @@ -99,10 +104,20 @@ class SSTV(object): yield FREQ_SYNC, MSEC_VIS_BIT # stop bit for freq_tuple in self.gen_image_tuples(): yield freq_tuple + for fskid_byte in imap(ord, self.fskid_payload): + for _ in xrange(6): + bit = fskid_byte & 1 + fskid_byte >>= 1 + bit_freq = FREQ_FSKID_BIT1 if bit == 1 else FREQ_FSKID_BIT0 + yield bit_freq, MSEC_FSKID_BIT def gen_image_tuples(self): return [] + def add_fskid_text(self, text): + self.fskid_payload += '\x20\x2a{0}\x01'.format( + ''.join(chr(ord(c) - 0x20) for c in text)) + def horizontal_sync(self): yield FREQ_SYNC, self.SYNC