Input interface library for S88 decoders

Dependents:   DSGatewayMBED_Nucleo DSGatewayMBED_Nucleo_Step128

Committer:
yaasan
Date:
Sat Jan 31 22:14:57 2015 +0000
Revision:
0:b32bb4602f54
Support S88 decoders;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yaasan 0:b32bb4602f54 1 /*********************************************************************
yaasan 0:b32bb4602f54 2 * Railuino - Hacking your Märklin
yaasan 0:b32bb4602f54 3 *
yaasan 0:b32bb4602f54 4 * Copyright (C) 2012 Joerg Pleumann
yaasan 0:b32bb4602f54 5 *
yaasan 0:b32bb4602f54 6 * This library is free software; you can redistribute it and/or
yaasan 0:b32bb4602f54 7 * modify it under the terms of the GNU Lesser General Public
yaasan 0:b32bb4602f54 8 * License as published by the Free Software Foundation; either
yaasan 0:b32bb4602f54 9 * version 2.1 of the License, or (at your option) any later version.
yaasan 0:b32bb4602f54 10 *
yaasan 0:b32bb4602f54 11 * This library is distributed in the hope that it will be useful,
yaasan 0:b32bb4602f54 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yaasan 0:b32bb4602f54 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
yaasan 0:b32bb4602f54 14 * LICENSE file for more details.
yaasan 0:b32bb4602f54 15 */
yaasan 0:b32bb4602f54 16
yaasan 0:b32bb4602f54 17 #include "TrackReporterS88_DS.h"
yaasan 0:b32bb4602f54 18
yaasan 0:b32bb4602f54 19 // ===================================================================
yaasan 0:b32bb4602f54 20 // === TrackReporterS88_DS ==============================================
yaasan 0:b32bb4602f54 21 // ===================================================================
yaasan 0:b32bb4602f54 22
yaasan 0:b32bb4602f54 23 const int TIME = 50;
yaasan 0:b32bb4602f54 24
yaasan 0:b32bb4602f54 25 DigitalOut do_load(PB_5);
yaasan 0:b32bb4602f54 26 DigitalOut do_reset(PB_4);
yaasan 0:b32bb4602f54 27 DigitalOut do_clock(PB_3);
yaasan 0:b32bb4602f54 28 DigitalIn di_data(PA_0);
yaasan 0:b32bb4602f54 29
yaasan 0:b32bb4602f54 30 TrackReporterS88_DS::TrackReporterS88_DS(int modules) {
yaasan 0:b32bb4602f54 31 mSize = modules;
yaasan 0:b32bb4602f54 32
yaasan 0:b32bb4602f54 33 }
yaasan 0:b32bb4602f54 34
yaasan 0:b32bb4602f54 35 void TrackReporterS88_DS::refresh()
yaasan 0:b32bb4602f54 36 {
yaasan 0:b32bb4602f54 37 refresh(mSize);
yaasan 0:b32bb4602f54 38 }
yaasan 0:b32bb4602f54 39
yaasan 0:b32bb4602f54 40 void TrackReporterS88_DS::refresh(int inMaxSize)
yaasan 0:b32bb4602f54 41 {
yaasan 0:b32bb4602f54 42 int myByte = 0;
yaasan 0:b32bb4602f54 43 int myBit = 0;
yaasan 0:b32bb4602f54 44
yaasan 0:b32bb4602f54 45
yaasan 0:b32bb4602f54 46 for (int i = 0; i < sizeof(mSwitches); i++) {
yaasan 0:b32bb4602f54 47 mSwitches[i] = 0;
yaasan 0:b32bb4602f54 48 }
yaasan 0:b32bb4602f54 49
yaasan 0:b32bb4602f54 50 //digitalWrite(LOAD, HIGH);
yaasan 0:b32bb4602f54 51 do_load = 1;
yaasan 0:b32bb4602f54 52 wait_us( TIME);
yaasan 0:b32bb4602f54 53 do_clock = 1;
yaasan 0:b32bb4602f54 54 //digitalWrite(CLOCK, HIGH);
yaasan 0:b32bb4602f54 55 wait_us(TIME);
yaasan 0:b32bb4602f54 56 do_clock = 0;
yaasan 0:b32bb4602f54 57 //digitalWrite(CLOCK, LOW);
yaasan 0:b32bb4602f54 58 wait_us(TIME);
yaasan 0:b32bb4602f54 59 do_reset = 1;
yaasan 0:b32bb4602f54 60 //digitalWrite(RESET, HIGH);
yaasan 0:b32bb4602f54 61 wait_us(TIME);
yaasan 0:b32bb4602f54 62 do_reset = 0;
yaasan 0:b32bb4602f54 63 //digitalWrite(RESET, LOW);
yaasan 0:b32bb4602f54 64 wait_us(TIME);
yaasan 0:b32bb4602f54 65 //digitalWrite(LOAD, LOW);
yaasan 0:b32bb4602f54 66 do_load = 0;
yaasan 0:b32bb4602f54 67
yaasan 0:b32bb4602f54 68 wait_us(TIME / 2);
yaasan 0:b32bb4602f54 69 bitWrite(mSwitches[myByte], myBit++, di_data);
yaasan 0:b32bb4602f54 70 wait_us(TIME / 2);
yaasan 0:b32bb4602f54 71
yaasan 0:b32bb4602f54 72 for (int i = 1; i < 16 * inMaxSize; i++) {
yaasan 0:b32bb4602f54 73 //digitalWrite(CLOCK, HIGH);
yaasan 0:b32bb4602f54 74 do_clock = 1;
yaasan 0:b32bb4602f54 75 wait_us(TIME);
yaasan 0:b32bb4602f54 76 do_clock = 0;
yaasan 0:b32bb4602f54 77 //digitalWrite(CLOCK, LOW);
yaasan 0:b32bb4602f54 78
yaasan 0:b32bb4602f54 79 wait_us(TIME / 2);
yaasan 0:b32bb4602f54 80 bitWrite(mSwitches[myByte], myBit++, di_data);
yaasan 0:b32bb4602f54 81
yaasan 0:b32bb4602f54 82 if (myBit == 8) {
yaasan 0:b32bb4602f54 83 myByte++;
yaasan 0:b32bb4602f54 84 myBit = 0;
yaasan 0:b32bb4602f54 85 }
yaasan 0:b32bb4602f54 86
yaasan 0:b32bb4602f54 87 wait_us(TIME / 2);
yaasan 0:b32bb4602f54 88 }
yaasan 0:b32bb4602f54 89
yaasan 0:b32bb4602f54 90 }
yaasan 0:b32bb4602f54 91
yaasan 0:b32bb4602f54 92 boolean TrackReporterS88_DS::getValue(int index) {
yaasan 0:b32bb4602f54 93 index--;
yaasan 0:b32bb4602f54 94 return bitRead(mSwitches[index / 8], index % 8);
yaasan 0:b32bb4602f54 95 }
yaasan 0:b32bb4602f54 96
yaasan 0:b32bb4602f54 97 byte TrackReporterS88_DS::getByte(int index) {
yaasan 0:b32bb4602f54 98 return mSwitches[index];
yaasan 0:b32bb4602f54 99 }