Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Renaming DeRs232or and Rs232or to Rs232Synthesizer and Rs232Interpreter.
Browse files Browse the repository at this point in the history
  • Loading branch information
jfly committed May 23, 2014
1 parent f5ca82b commit 55ae1c6
Show file tree
Hide file tree
Showing 8 changed files with 611 additions and 624 deletions.
39 changes: 22 additions & 17 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,15 @@
<script src="scripts/bower_components/underscore/underscore.js"></script>
<script src="scripts/bower_components/angular/angular.js"></script>

<script>
var Module = {
preRun: function() {
ENV.FSKUBE_LOGGING = "fskube/0";
}
};
</script>
<script src="release/fskube.js"></script>
<script src="scripts/main.js"></script>
<script>
Module.setLogLevels('fsk/0');
</script>

<style>
textarea {
width: 300px;
width: 250px;
height: 200px;
}
.inbox {
Expand All @@ -37,9 +33,15 @@
<body ng-controller="MainCtrl">
<h1>zero counting@{{sampleRate}}hZ</h1>

<textarea ng-model="message"></textarea>
<textarea ng-model="encodedMessage"></textarea>
<button ng-click="play()">Play</button>
<div class="outbox">
<stackmat state="stackmatState"></stackmat>

<textarea ng-model="rs232bytes"></textarea>

<textarea ng-model="eightN1bits"></textarea>

<button ng-click="play()">Play</button>
</div>

<hr>

Expand All @@ -50,15 +52,18 @@ <h1>zero counting@{{sampleRate}}hZ</h1>

<div class="inbox">
<div ng-show="!hasMicrophone && source == 'Microphone'" class="inboxBlocker">Need microphone permission to receive!</div>

<textarea ng-model="receivedBits"></textarea>

<textarea readonly>{{receivedMessage()}}</textarea>
<ul>
<li ng-repeat="sampleFile in sampleFiles">
<a href="{{ sampleFile }}">{{ sampleFile }}</a>
</li>
</ul>
</div>

<stackmat readonly="true" state="receivedStackmatState"></stackmat>
</div>
<ul>
<li ng-repeat="sampleFile in sampleFiles">
<a href="{{ sampleFile }}">{{ sampleFile }}</a>
</li>
</ul>

</body>
</html>
1,030 changes: 515 additions & 515 deletions release/fskube.js

Large diffs are not rendered by default.

81 changes: 56 additions & 25 deletions scripts/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ function MainCtrl($scope, $timeout) {
var onFrequency = 1200; // MARK
var offFrequency = 2200; // SPACE

// TODO <<< need to pick a buffer size. This is a tradeoff
// between latency and dropping information. Maybe webworkers
// would let us turn this size down.
// The buffer size is a tradeoff between latency and dropping information.
// I'm not sure how to pick a good value here. Maybe webworkers would let
// us turn this size down.
var bufferSize = 8192;

// At something like 1200 baud (bits per second), we don't want to fire
Expand All @@ -20,66 +20,82 @@ function MainCtrl($scope, $timeout) {
// only periodically flushing them to the angular-ed $scope.receivedBits.
var MAX_SCREEN_UPDATE_RATE = 10; // updates per second

var rs232or = new Module.Rs232or();
var rs232synthesizer = new Module.Rs232Synthesizer();
var rs232Listener = {
bits: [],
receive: function(bit) {
this.bits.push(bit);
}
};
rs232or.connect(Module.boolReceiver.implement(rs232Listener));
rs232synthesizer.connect(Module.boolReceiver.implement(rs232Listener));

var deRs232or = new Module.DeRs232or();
var rs232interpreter = new Module.Rs232Interpreter();
var deRs232Listener = {
chars: [],
receive: function(ch) {
this.chars.push(String.fromCharCode(ch));
}
};
deRs232or.connect(Module.intReceiver.implement(deRs232Listener));
rs232interpreter.connect(Module.intReceiver.implement(deRs232Listener));

function encode(message) {
function encode(rs232bytes) {
var bits = "";
for(var i = 0; i < message.length; i++) {
for(var i = 0; i < rs232bytes.length; i++) {
rs232Listener.bits.length = 0;
rs232or.receive(message.charCodeAt(i));
rs232synthesizer.receive(rs232bytes.charCodeAt(i));
bits += rs232Listener.bits.map(function(bit) { return bit ? "1" : "0"; }).join("");
bits += " ";
}
return bits.trim();
}
function decode(encodedMessage) {
deRs232or.reset();
function decode(eightN1bits) {
rs232interpreter.reset();
deRs232Listener.chars.length = 0;
var paddedBits = encodedMessage.replace(/[^01]/g, "");
var paddedBits = eightN1bits.replace(/[^01]/g, "");
for(var i = 0; i < paddedBits.length; i++) {
var bit = paddedBits[i] == "0" ? 0 : 1;
deRs232or.receive(bit);
rs232interpreter.receive(bit);
}
return deRs232Listener.chars.join("");
}

var message = "Hello, world!";
var encodedMessage = null;
Object.defineProperty($scope, "message", {
var stackmatState = {
commandByte: "!",
generation: "2",
millis: "0"
};
var rs232bytes = "Hello, world!";
var eightN1bits = null;
Object.defineProperty($scope, "stackmatState", {
get: function() {
return message === null ? decode(encodedMessage) : message;
}
});
Object.defineProperty($scope, "rs232bytes", {
get: function() {
return rs232bytes === null ? decode(eightN1bits) : rs232bytes;
},
set: function(newMessage) {
encodedMessage = null;
message = newMessage;
eightN1bits = null;
rs232bytes = newMessage;
}
});
Object.defineProperty($scope, "encodedMessage", {
Object.defineProperty($scope, "eightN1bits", {
get: function() {
return encodedMessage === null ? encode(message) : encodedMessage;
return eightN1bits === null ? encode(rs232bytes) : eightN1bits;
},
set: function(newEncodedMessage) {
encodedMessage = newEncodedMessage;
message = null;
eightN1bits = newEncodedMessage;
rs232bytes = null;
stackmatState = null;
}
});

$scope.receivedStackmatState = {
commandByte: "!",
generation: "3",
millis: "0"
};

var audioContext = new AudioContext();
audioContext.createScriptProcessor = audioContext.createScriptProcessor ||audioContext.createJavaScriptNode;
$scope.sampleRate = audioContext.sampleRate;
Expand Down Expand Up @@ -127,7 +143,7 @@ function MainCtrl($scope, $timeout) {
modulator.connect(modulatorListener);

$scope.play = function() {
var bits = $scope.encodedMessage.replace(/ /g, "").split("").map(function(b) { return parseInt(b); });
var bits = $scope.eightN1bits.replace(/ /g, "").split("").map(function(b) { return parseInt(b); });
modulatedSignal.length = 0;
modulator.reset();
bits.forEach(function(bit) {
Expand Down Expand Up @@ -255,3 +271,18 @@ var app = angular.module('modemTestModule', []).config([
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|blob):/);
}
]);


app.directive('stackmat', function() {
return {
restrict: 'E',
scope: {
state: "=",
readonly: "="
},
template: '<span style="display: inline-block"><label><input type="text" ng-readonly="readonly" size="7" maxlength="7" ng-model="state.millis"></input>millis</label>' +
'<input type="text" ng-readonly="readonly" size="1" maxlength="1" ng-model="state.commandByte"></input><br>' +
'<label><input type="radio" ng-disabled="readonly" ng-model="state.generation" value="2">gen2</label>' +
'<label><input type="radio" ng-disabled="readonly" ng-model="state.generation" value="3">gen3</label></span>'
};
});
49 changes: 0 additions & 49 deletions scripts/readpcm.js

This file was deleted.

6 changes: 3 additions & 3 deletions src/embind.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,13 @@ EMSCRIPTEN_BINDINGS(my_module) {
.function("flush", &Demodulator::flush)
;

class_<Rs232or, base<Sender<int, bool>>>("Rs232or")
class_<Rs232Synthesizer, base<Sender<int, bool>>>("Rs232Synthesizer")
.constructor()
;

class_<DeRs232or, base<Sender<bool, int>>>("DeRs232or")
class_<Rs232Interpreter, base<Sender<bool, int>>>("Rs232Interpreter")
.constructor()
.function("reset", &DeRs232or::reset)
.function("reset", &Rs232Interpreter::reset)
;
}

Expand Down
10 changes: 5 additions & 5 deletions src/rs232.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ namespace fskube {

LOG_HANDLE("rs232")

Rs232or::Rs232or() {}
Rs232Synthesizer::Rs232Synthesizer() {}

void Rs232or::receive(int data) {
void Rs232Synthesizer::receive(int data) {
if(data < 0) {
// Send our "idle" signal (low) for a good little while.
for(int j = 0; j < 8*3; j++) {
Expand All @@ -29,17 +29,17 @@ void Rs232or::receive(int data) {
}
}

DeRs232or::DeRs232or() {
Rs232Interpreter::Rs232Interpreter() {
reset();
}

void DeRs232or::reset() {
void Rs232Interpreter::reset() {
waitingForStart = true;
idleCount = 0;
inProgressChar = 0;
}

void DeRs232or::receive(bool b) {
void Rs232Interpreter::receive(bool b) {
if(waitingForStart) {
if(b == 1) {
waitingForStart = false;
Expand Down
8 changes: 4 additions & 4 deletions src/rs232.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ namespace fskube {
// Convert bytes <-> bits via 8-N-1
// See http://en.wikipedia.org/wiki/8-N-1

class Rs232or : public Sender<int, bool> {
class Rs232Synthesizer : public Sender<int, bool> {
public:
Rs232or();
Rs232Synthesizer();
virtual void receive(int data);
};

class DeRs232or : public Sender<bool, int> {
class Rs232Interpreter : public Sender<bool, int> {
private:
bool waitingForStart;
unsigned int idleCount;

unsigned char inProgressChar;
unsigned int nthBit;
public:
DeRs232or();
Rs232Interpreter();
virtual void receive(bool b);
void reset();
};
Expand Down
12 changes: 6 additions & 6 deletions test/Rs232Test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@
class Rs232Test(FskTest.FskTest):
def test(self):
capturer = self.createCapturer(fskube.intReceiver)
rs232or = fskube.Rs232or()
deRs232or = fskube.DeRs232or()
rs232or.connect(deRs232or)
deRs232or.connect(capturer)
rs232synthesizer = fskube.Rs232Synthesizer()
rs232interpreter = fskube.Rs232Interpreter()
rs232synthesizer.connect(rs232interpreter)
rs232interpreter.connect(capturer)

secretMessage = "this is a message!"
for ch in secretMessage:
rs232or.receive(ord(ch))
rs232synthesizer.receive(ord(ch))

receivedMessage = "".join(map(chr, capturer.data))
self.assertEqual(receivedMessage, secretMessage)

capturer.reset()
# Send an idle, we expect to receive >= 1 idles.
rs232or.receive(-1)
rs232synthesizer.receive(-1)
self.assertGreaterEqual(len(capturer.data), 1)
for ch in capturer.data:
self.assertEqual(ch, -1)
Expand Down

0 comments on commit 55ae1c6

Please sign in to comment.