add free memory command
add read and write nfc commands fix function sending
This commit is contained in:
parent
58fe96f8b7
commit
dca4421674
2
item.h
2
item.h
@ -18,7 +18,7 @@ private:
|
||||
static constexpr unsigned char _pinLowA = PD4;
|
||||
static constexpr unsigned char _pinHighB = PD2;
|
||||
static constexpr unsigned char _pinLowB = PD3;
|
||||
static constexpr uint8_t SEND_COUNT = 1;
|
||||
static constexpr uint8_t SEND_COUNT = 2;
|
||||
|
||||
uint8_t _address;
|
||||
|
||||
|
15
main.cpp
15
main.cpp
@ -127,6 +127,13 @@ void restore_state()
|
||||
}
|
||||
}
|
||||
|
||||
int freeRAM()
|
||||
{
|
||||
extern int __heap_start, *__brkval;
|
||||
int v;
|
||||
return (int) &v - (__brkval == 0 ? (int) &__heap_start: (int) __brkval);
|
||||
}
|
||||
|
||||
inline static void printHelp(Serial* serial)
|
||||
{
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
@ -157,6 +164,7 @@ inline static void printHelp(Serial* serial)
|
||||
power on : power on the rail\n\
|
||||
power auto : power off the rail when no trains are moveing\n\
|
||||
dump : prints epprom contence\n\
|
||||
free : show amount of free ram\n\
|
||||
erase : Erase epprom.\n"));
|
||||
}
|
||||
|
||||
@ -299,6 +307,13 @@ void serialDispatch(Serial* serial)
|
||||
printHelp(serial);
|
||||
ret = 0;
|
||||
}
|
||||
else if(strcmp(token, "free") == 0)
|
||||
{
|
||||
serial->write_p(PSTR("Free Ram: "));
|
||||
serial->write(freeRAM());
|
||||
serial->write_p(PSTR(" Bytes.\n"));
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->putChar('\"');
|
||||
|
@ -79,7 +79,7 @@ void Mfrc522::reset()
|
||||
write(TReloadRegL, POLL_TIMER & 0x0F);
|
||||
write(ModWidthReg, 0x26);
|
||||
|
||||
write(RFCfgReg, 0b111 << 4); //set gain to 48dB
|
||||
write(RFCfgReg, 0b01110100); //set gain to 48dB
|
||||
|
||||
write(TxAutoReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting
|
||||
updateBit(RxModeReg, 3, true);
|
||||
|
@ -192,9 +192,11 @@ public:
|
||||
uint8_t wakeupTag(uint8_t* bufferATQA, uint8_t *bufferLen);
|
||||
|
||||
uint8_t selectTag(Uid *uid);
|
||||
|
||||
|
||||
uint8_t getUid(Uid *uid);
|
||||
|
||||
|
||||
uint8_t getCs(){return _csPin;}
|
||||
|
||||
void reset();
|
||||
|
||||
void irq();
|
||||
|
@ -25,11 +25,12 @@ private:
|
||||
|
||||
uint8_t _csPin;
|
||||
|
||||
uint8_t read(uint8_t addr);
|
||||
|
||||
public:
|
||||
MfrcProxy(SpiMaster* spi, ShiftReg<NFC_PORTS>* csReg, uint8_t csPin, void (detectCb)(MfrcProxy* proxy, Uid uid, void* data), void* userData = nullptr);
|
||||
uint8_t read(uint8_t addr);
|
||||
void irq();
|
||||
static bool probe(SpiMaster* spi, ShiftReg<NFC_PORTS>* csReg, uint8_t csPin);
|
||||
uint8_t getId();
|
||||
uint8_t getCs(){return _csPin;}
|
||||
};
|
||||
|
110
nfcbord.cpp
110
nfcbord.cpp
@ -111,13 +111,13 @@ uint8_t NfcBoard::csToIrq(uint8_t cs)
|
||||
switch(cs)
|
||||
{
|
||||
case 0:
|
||||
return 3;
|
||||
return 4;
|
||||
case 1:
|
||||
return 2;
|
||||
case 2:
|
||||
return 1;
|
||||
case 3:
|
||||
return 7;
|
||||
return 0;
|
||||
case 4:
|
||||
return 7;
|
||||
case 5:
|
||||
@ -160,9 +160,11 @@ void NfcBoard::printNfcDevices()
|
||||
serial->write_p(PSTR("NFC DEVICES:\n"));
|
||||
for(uint8_t i = 0; i < readers.count(); ++i)
|
||||
{
|
||||
snprintf_P(buffer, SNPRINTF_BUFFER_SIZE, PSTR("NFC NUMBER: %u IRQ: %x TYPE: %d\n"),
|
||||
readers[i].type == TYPE_MFRC522 ? i+0x80 : readers[i].device.proxy.getId(),
|
||||
irqPins[i], readers[i].type);
|
||||
uint8_t id = readers[i].type == TYPE_MFRC522 ? i+0x80 : readers[i].device.proxy.getId();
|
||||
uint8_t cs = readers[i].type == TYPE_MFRC522 ?
|
||||
readers[i].device.mfrc522.getCs() : readers[i].device.proxy.getCs();
|
||||
snprintf_P(buffer, SNPRINTF_BUFFER_SIZE, PSTR("NFC NUMBER: %u CS: %x IRQ: %x TYPE: %d\n"),
|
||||
id, cs, irqPins[i], readers[i].type);
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
}
|
||||
@ -189,8 +191,6 @@ int NfcBoard::dispatch(char* inBuffer)
|
||||
}
|
||||
else if(strcmp(inBuffer, "irqs") == 0 )
|
||||
{
|
||||
PCMSK1 &= ~(1 << PCINT11);
|
||||
PCICR &= ~(1 << PCIE1);
|
||||
serial->write_p(PSTR("Irq pin detection test\n"));
|
||||
while(!serial->dataIsWaiting())
|
||||
{
|
||||
@ -206,8 +206,6 @@ int NfcBoard::dispatch(char* inBuffer)
|
||||
}
|
||||
}
|
||||
serial->write_p(PSTR("Finished\n"));
|
||||
PCMSK1 |= 1 << PCINT11;
|
||||
PCICR |= 1 << PCIE1;
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(inBuffer, "select") == 0 )
|
||||
@ -317,9 +315,66 @@ int NfcBoard::dispatch(char* inBuffer)
|
||||
}
|
||||
else if(strcmp(inBuffer, "read") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " ");
|
||||
int16_t addr = -1;
|
||||
int16_t csPin = -1;
|
||||
|
||||
char* token = strtok(NULL, " ");
|
||||
if(token)
|
||||
csPin = strtol(token, nullptr, 16);
|
||||
if(csPin < 0 || csPin > 7)
|
||||
{
|
||||
serial->write_p(PSTR("A valid cs pin must be specified\n"));
|
||||
return -1;
|
||||
}
|
||||
token = strtok(NULL, " ");
|
||||
if(token)
|
||||
addr = strtol(token, nullptr, 16);
|
||||
if(addr < 0 || addr > 0xFF)
|
||||
{
|
||||
serial->write_p(PSTR("A address must be specified\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint8_t result = 0;
|
||||
for(uint8_t i = 0; i < readers.count(); ++i)
|
||||
{
|
||||
if(readers[i].type == TYPE_MFRC522)
|
||||
{
|
||||
if(readers[i].device.mfrc522.getCs() == csPin)
|
||||
{
|
||||
result = readers[i].device.mfrc522.read(addr);
|
||||
serial->write_p(PSTR("read sucessfull\n"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(readers[i].device.proxy.getCs() == csPin)
|
||||
{
|
||||
result = readers[i].device.proxy.read(addr);
|
||||
serial->write_p(PSTR("read sucessfull\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
snprintf_P(buffer, SNPRINTF_BUFFER_SIZE, PSTR("Got: 0x%02x in return\n"), result);
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
return 0;
|
||||
}
|
||||
else if(strcmp(inBuffer, "write") == 0 )
|
||||
{
|
||||
int16_t addr = -1;
|
||||
int16_t csPin = -1;
|
||||
int16_t data = -1;
|
||||
|
||||
char* token = strtok(NULL, " ");
|
||||
if(token)
|
||||
csPin = strtol(token, nullptr, 16);
|
||||
if(csPin < 0 || csPin > 7)
|
||||
{
|
||||
serial->write_p(PSTR("A valid cs pin must be specified\n"));
|
||||
return -1;
|
||||
}
|
||||
token = strtok(NULL, " ");
|
||||
if(token)
|
||||
addr = strtol(token, nullptr, 16);
|
||||
if(addr < 0 || addr > 0xFF)
|
||||
@ -329,21 +384,32 @@ int NfcBoard::dispatch(char* inBuffer)
|
||||
}
|
||||
token = strtok(NULL, " ");
|
||||
if(token)
|
||||
csPin = strtol(token, nullptr, 16);
|
||||
if(csPin < 0 || csPin > 7)
|
||||
data = strtol(token, nullptr, 16);
|
||||
if(data < 0 || data > 0xFF)
|
||||
{
|
||||
serial->write_p(PSTR("A valid cs pin must be specified\n"));
|
||||
serial->write_p(PSTR("Data must be specified\n"));
|
||||
return -1;
|
||||
}
|
||||
csReg.setBit(csPin, false);
|
||||
_delay_us(5);
|
||||
spim.readWrite(addr);
|
||||
_delay_us(5);
|
||||
uint8_t result = spim.readWrite();
|
||||
csReg.setBit(csPin, true);
|
||||
serial->write_p(PSTR("Got: "));
|
||||
serial->write((int)result);
|
||||
serial->write_p(PSTR(" in return\n"));
|
||||
|
||||
for(uint8_t i = 0; i < readers.count(); ++i)
|
||||
{
|
||||
if(readers[i].type == TYPE_MFRC522)
|
||||
{
|
||||
if(readers[i].device.mfrc522.getCs() == csPin)
|
||||
{
|
||||
readers[i].device.mfrc522.write(addr, data);
|
||||
serial->write_p(PSTR("Write sucessfull\n"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(readers[i].device.proxy.getCs() == csPin)
|
||||
{
|
||||
serial->write_p(PSTR("Mfrc522 proxies are not writable\n"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return -3;
|
||||
|
@ -144,7 +144,7 @@ void Train::sendData(bool single)
|
||||
if(_functionmask & (1 << functionToResend))
|
||||
{
|
||||
_delay_ms(2);
|
||||
sendRaw(packetAddSpeed() | packetAddFunction(functionToResend) | packetAddFunction(0), single);
|
||||
sendRaw(packetAddSpeed() | packetAddFunction(functionToResend) | packetAddFunction(0), false);
|
||||
}
|
||||
_function &= ~0xF0;
|
||||
_function |= functionToResend << 4;
|
||||
@ -174,7 +174,7 @@ uint8_t Train::getFunctionMask()
|
||||
return _functionmask;
|
||||
}
|
||||
|
||||
void Train::sendFunction(const uint8_t function, bool enable)
|
||||
void Train::setFunction(const uint8_t function, bool enable)
|
||||
{
|
||||
if(function > 3)
|
||||
return;
|
||||
|
2
train.h
2
train.h
@ -34,7 +34,7 @@ public:
|
||||
void setFunctionMask(uint8_t functionmask) {_functionmask = functionmask;}
|
||||
uint8_t getFunctions();
|
||||
uint8_t getFunctionMask();
|
||||
void sendFunction(const uint8_t function, bool enable = true);
|
||||
void setFunction(const uint8_t function, bool enable = true);
|
||||
|
||||
uint8_t getQuirks();
|
||||
void setQuirks(uint8_t quirks);
|
||||
|
@ -103,7 +103,7 @@ int trainDispatch(char* inBuffer, Serial* serial)
|
||||
{
|
||||
uint8_t functionId = atoi(token);
|
||||
bool on = (strcmp(boolToken, "on") == 0);
|
||||
trains[id].sendFunction(functionId, on );
|
||||
trains[id].setFunction(functionId, on );
|
||||
serial->write_p(PSTR("Set Train function "));
|
||||
serial->write(functionId);
|
||||
serial->write(on ? " on\n" : " off\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user