Input interface library for S88 decoders
Dependents: DSGatewayMBED_Nucleo DSGatewayMBED_Nucleo_Step128
TrackReporterS88_DS.cpp@0:b32bb4602f54, 2015-01-31 (annotated)
- Committer:
- yaasan
- Date:
- Sat Jan 31 22:14:57 2015 +0000
- Revision:
- 0:b32bb4602f54
Support S88 decoders;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |