Skip to content

Commit

Permalink
fixed the shift-out operation
Browse files Browse the repository at this point in the history
  • Loading branch information
peterschwarz committed Apr 16, 2014
1 parent f455890 commit 9db9034
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 16 deletions.
9 changes: 5 additions & 4 deletions src/firmata/shift.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
[board latch-pin data-pin clock-pin bit-order value]
{:pre [(or (= bit-order :lsb-first) (= bit-order :msb-first))]}

(set-digital board latch-pin :high)

(doseq [i (range 8)]
(let [shift-by (if (= :lsb-first bit-order) i (- 7 i))]
(set-digital board data-pin (if (= 0 (bit-and value (bit-shift-left 1 shift-by))) :low :high))))
(set-digital board data-pin (if (= 0 (bit-and value (bit-shift-left 1 shift-by))) :low :high)))

(set-digital board clock-pin :high)
(set-digital board clock-pin :low)
(set-digital board clock-pin :high)
(set-digital board clock-pin :low))

(set-digital board latch-pin :high)
(set-digital board latch-pin :low)

board)
78 changes: 66 additions & 12 deletions test/firmata/test/shift.clj
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,31 @@

(shift-out :mock-board latch-pin data-pin clock-pin :lsb-first 0x1)

(is (= @writes [{:pin data-pin :value :high}
(is (= @writes [{:pin latch-pin :value :high}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin latch-pin :value :high}
{:pin latch-pin :value :low}])))

(reset! writes [])
Expand All @@ -34,17 +48,31 @@

(shift-out :mock-board latch-pin data-pin clock-pin :lsb-first 0xFF)

(is (= @writes [{:pin data-pin :value :high}
(is (= @writes [{:pin latch-pin :value :high}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin latch-pin :value :high}
{:pin latch-pin :value :low}])))

(reset! writes [])
Expand All @@ -53,17 +81,31 @@

(shift-out :mock-board latch-pin data-pin clock-pin :msb-first 0x1)

(is (= @writes [{:pin data-pin :value :low}
(is (= @writes [{:pin latch-pin :value :high}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :low}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin latch-pin :value :high}
{:pin latch-pin :value :low}])))

(reset! writes [])
Expand All @@ -72,24 +114,36 @@

(shift-out :mock-board latch-pin data-pin clock-pin :msb-first 0xFF)

(is (= @writes [{:pin data-pin :value :high}
(is (= @writes [{:pin latch-pin :value :high}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin data-pin :value :high}
{:pin clock-pin :value :high}
{:pin clock-pin :value :low}
{:pin latch-pin :value :high}
{:pin latch-pin :value :low}])))

(testing "bad endian-ness"
(is (thrown? AssertionError (shift-out :mock-board latch-pin data-pin clock-pin :whatever 0xFF))))

))


)))

)
(run-tests)

0 comments on commit 9db9034

Please sign in to comment.