Desktop Station gateway software for mbed

Dependents:   DSGatewayMBED_Nucleo DSGatewayMBED_Nucleo_Step128

This library provides to control DCC and Marklin Motorola 2 locomtoives and turnouts via DCC/MM2 Shield. Please check our wiki site(http://desktopstation.net/wiki/).

Committer:
yaasan
Date:
Fri Jan 23 22:28:51 2015 +0000
Revision:
1:39249e22e9f5
Parent:
0:96eb8cc345dc
Worked first version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yaasan 0:96eb8cc345dc 1
yaasan 0:96eb8cc345dc 2
yaasan 0:96eb8cc345dc 3 #ifndef DSGATEWAYLIB_H
yaasan 0:96eb8cc345dc 4 #define DSGATEWAYLIB_H
yaasan 0:96eb8cc345dc 5
yaasan 0:96eb8cc345dc 6 #include "mbed.h"
yaasan 0:96eb8cc345dc 7
yaasan 0:96eb8cc345dc 8 #define DSGATEWAY_VERSION 0x01
yaasan 0:96eb8cc345dc 9 #define DEBUG false
yaasan 0:96eb8cc345dc 10 #define SIZE_PACKET 8
yaasan 0:96eb8cc345dc 11 #define TIME_REPLY 200
yaasan 0:96eb8cc345dc 12 #define SPI_SSPIN 10
yaasan 0:96eb8cc345dc 13
yaasan 0:96eb8cc345dc 14 #define ADDR_MM2 0x0000 // MM2 locomotive
yaasan 0:96eb8cc345dc 15 #define ADDR_SX1 0x0800 // Selectrix (old) locomotive
yaasan 0:96eb8cc345dc 16 #define ADDR_MFX 0x4000 // MFX locomotive
yaasan 0:96eb8cc345dc 17 #define ADDR_SX2 0x8000 // Selectrix (new) locomotive
yaasan 0:96eb8cc345dc 18 #define ADDR_DCC 0xC000 // DCC locomotive
yaasan 0:96eb8cc345dc 19 #define ADDR_ACC_SX1 0x2000 // Selectrix (old) magnetic accessory
yaasan 0:96eb8cc345dc 20 #define ADDR_ACC_MM2 0x2FFF // MM2 magnetic accessory
yaasan 0:96eb8cc345dc 21 #define ADDR_ACC_DCC 0x37FF // DCC magnetic accessory
yaasan 0:96eb8cc345dc 22
yaasan 0:96eb8cc345dc 23 #define SPEEDSTEP_DCC28 0
yaasan 0:96eb8cc345dc 24 #define SPEEDSTEP_DCC14 1
yaasan 0:96eb8cc345dc 25 #define SPEEDSTEP_DCC127 2
yaasan 0:96eb8cc345dc 26 #define SPEEDSTEP_MM14 0
yaasan 0:96eb8cc345dc 27 #define SPEEDSTEP_MM28 1
yaasan 0:96eb8cc345dc 28
yaasan 0:96eb8cc345dc 29 #define CMD_PWR_OFF 0x00
yaasan 0:96eb8cc345dc 30 #define CMD_PWR_ON 0xF0
yaasan 0:96eb8cc345dc 31
yaasan 0:96eb8cc345dc 32 #define CMD_WAIT 0xD0
yaasan 0:96eb8cc345dc 33 #define CMD_OK 0x80
yaasan 0:96eb8cc345dc 34 #define CMD_CRCERR 0x90
yaasan 0:96eb8cc345dc 35 #define CMD_CMDERR 0xA0
yaasan 0:96eb8cc345dc 36 #define CMD_UNKERR 0xC0
yaasan 0:96eb8cc345dc 37 #define CMD_DCC_IDLE 0xC0
yaasan 0:96eb8cc345dc 38 #define CMD_SPEED 0x10
yaasan 0:96eb8cc345dc 39 #define CMD_ACCESSORY 0x20
yaasan 0:96eb8cc345dc 40 #define CMD_FUNCTION 0x30
yaasan 0:96eb8cc345dc 41 #define CMD_CVWRITE 0x40
yaasan 0:96eb8cc345dc 42 #define CMD_DIRECTION 0x50
yaasan 0:96eb8cc345dc 43 #define CMD_CVREAD 0x60
yaasan 0:96eb8cc345dc 44 #define CMD_EXTENTION 0x70
yaasan 0:96eb8cc345dc 45
yaasan 0:96eb8cc345dc 46
yaasan 0:96eb8cc345dc 47 /* 特殊・拡張機能用 */
yaasan 0:96eb8cc345dc 48 #define EXCMD_NONE 0
yaasan 0:96eb8cc345dc 49
yaasan 0:96eb8cc345dc 50 // typedefs
yaasan 0:96eb8cc345dc 51
yaasan 0:96eb8cc345dc 52 typedef unsigned char prog_uchar;
yaasan 0:96eb8cc345dc 53 typedef unsigned char prog_uint8_t;
yaasan 0:96eb8cc345dc 54 typedef unsigned int prog_uint16_t;
yaasan 0:96eb8cc345dc 55 typedef unsigned int prog_uint32_t;
yaasan 0:96eb8cc345dc 56 typedef unsigned char byte;
yaasan 0:96eb8cc345dc 57 typedef bool boolean;
yaasan 0:96eb8cc345dc 58 typedef unsigned char prog_uchar;
yaasan 0:96eb8cc345dc 59 typedef signed char prog_char;
yaasan 0:96eb8cc345dc 60 typedef signed long int word;
yaasan 0:96eb8cc345dc 61
yaasan 0:96eb8cc345dc 62 byte lowByte(short int low);
yaasan 0:96eb8cc345dc 63 byte highByte(short int high);
yaasan 1:39249e22e9f5 64 unsigned char reverseByte(unsigned char inByte);
yaasan 0:96eb8cc345dc 65
yaasan 0:96eb8cc345dc 66 /* Defined functions */
yaasan 0:96eb8cc345dc 67 class DSGatewayLib
yaasan 0:96eb8cc345dc 68 {
yaasan 0:96eb8cc345dc 69 private:
yaasan 0:96eb8cc345dc 70 void sendPacket(unsigned char *inPackets);
yaasan 0:96eb8cc345dc 71 bool sendMessage(unsigned char *inPackets);
yaasan 0:96eb8cc345dc 72 bool exchangeMessage(unsigned char *inPackets, word timeout);
yaasan 0:96eb8cc345dc 73 void clearMessage(unsigned char *inPackets);
yaasan 0:96eb8cc345dc 74 unsigned char generateCRC(unsigned char *inPackets, unsigned char inLen);
yaasan 0:96eb8cc345dc 75 byte convertAcc_MMDCC(word address, byte inSwitch);
yaasan 0:96eb8cc345dc 76 bool poweron;
yaasan 0:96eb8cc345dc 77
yaasan 0:96eb8cc345dc 78 public:
yaasan 0:96eb8cc345dc 79 DSGatewayLib();
yaasan 0:96eb8cc345dc 80 ~DSGatewayLib();
yaasan 0:96eb8cc345dc 81 void begin();
yaasan 0:96eb8cc345dc 82
yaasan 0:96eb8cc345dc 83 bool IsPower();
yaasan 0:96eb8cc345dc 84
yaasan 1:39249e22e9f5 85 bool SetPower(byte power);
yaasan 1:39249e22e9f5 86 bool SetPowerEx(byte power);
yaasan 0:96eb8cc345dc 87 bool SetLocoSpeed(word address, int inSpeed);
yaasan 0:96eb8cc345dc 88 bool SetLocoSpeedEx(word address, int inSpeed, int inProtcol);
yaasan 0:96eb8cc345dc 89 bool SetLocoFunction(word address, unsigned char inFunction, unsigned char inPower);
yaasan 0:96eb8cc345dc 90 bool SetLocoDirection(word address, unsigned char inDirection);
yaasan 0:96eb8cc345dc 91 //boolean SetTurnout(word address, boolean straight);
yaasan 0:96eb8cc345dc 92 bool SetTurnout(word address, byte inSwitch);
yaasan 0:96eb8cc345dc 93 bool WriteConfig(word address, word number, byte value);
yaasan 0:96eb8cc345dc 94 bool ReadConfig(word address, word number, byte *value);
yaasan 0:96eb8cc345dc 95 word GetLocIDProtocol(byte address);
yaasan 0:96eb8cc345dc 96
yaasan 0:96eb8cc345dc 97 };
yaasan 0:96eb8cc345dc 98
yaasan 0:96eb8cc345dc 99 #endif