b15f/firmware/requests.cpp
2019-04-03 15:20:49 +02:00

219 lines
3.4 KiB
C++

#include "requests.h"
void handleRequest()
{
const uint8_t req = usart.readByte();
wdt_reset();
switch(req)
{
case RQ_DISC:
break;
case RQ_TEST:
rqTestConnection();
break;
case RQ_INFO:
rqBoardInfo();
break;
case RQ_INT:
rqTestIntConv();
break;
case RQ_ST:
rqSelfTest();
break;
case RQ_BA0:
rqDigitalWrite0();
break;
case RQ_BA1:
rqDigitalWrite1();
break;
case RQ_BE0:
rqDigitalRead0();
break;
case RQ_BE1:
rqDigitalRead1();
break;
case RQ_DSW:
rqReadDipSwitch();
break;
case RQ_AA0:
rqAnalogWrite0();
break;
case RQ_AA1:
rqAnalogWrite1();
break;
case RQ_ADC:
rqAnalogRead();
break;
case RQ_ADC_DAC_STROKE:
rqAdcDacStroke();
break;
default:
break;
}
usart.initRX();
wdt_disable();
}
void rqTestConnection()
{
usart.initTX();
uint8_t dummy = usart.readByte();
usart.writeByte(USART::MSG_OK);
usart.writeByte(dummy);
usart.flush();
}
void rqBoardInfo()
{
usart.initTX();
usart.writeByte(3); // Anzahl an Strings
usart.writeStr(DATE, sizeof(DATE));
usart.writeStr(TIME, sizeof(TIME));
usart.writeStr(FSRC, sizeof(FSRC));
usart.writeByte(USART::MSG_OK);
usart.flush();
}
void rqTestIntConv()
{
usart.initTX();
uint16_t d = usart.readInt();
usart.writeInt(d * 3);
usart.flush();
}
void rqSelfTest()
{
usart.initTX();
usart.writeByte(USART::MSG_OK);
usart.flush();
wdt_disable();
while(1)
{
testAll();
}
}
void rqDigitalWrite0()
{
usart.initTX();
uint8_t port = usart.readByte();
dio0.writePortA(port);
usart.writeByte(USART::MSG_OK);
usart.flush();
}
void rqDigitalWrite1()
{
usart.initTX();
uint8_t port = usart.readByte();
dio1.writePortA(port);
usart.writeByte(USART::MSG_OK);
usart.flush();
}
void rqDigitalRead0()
{
usart.initTX();
uint8_t port = dio0.readPortB();
usart.writeByte(port);
usart.flush();
}
void rqDigitalRead1()
{
usart.initTX();
uint8_t port = dio1.readPortB();
usart.writeByte(port);
usart.flush();
}
void rqReadDipSwitch()
{
usart.initTX();
uint8_t port = dsw.readPortB();
usart.writeByte(port);
usart.flush();
}
void rqAnalogWrite0()
{
usart.initTX();
uint16_t value = usart.readInt();
dac0.setValue(value);
usart.writeByte(USART::MSG_OK);
usart.flush();
}
void rqAnalogWrite1()
{
usart.initTX();
uint16_t value = usart.readInt();
dac1.setValue(value);
usart.writeByte(USART::MSG_OK);
usart.flush();
}
void rqAnalogRead()
{
usart.initTX();
uint8_t channel = usart.readByte();
uint16_t value = adu.getValue(channel);
usart.writeInt(value);
usart.flush();
}
void rqAdcDacStroke()
{
uint8_t channel_a = usart.readByte();
uint8_t channel_b = usart.readByte();
int16_t start = static_cast<int16_t>(usart.readInt());
int16_t delta = static_cast<int16_t>(usart.readInt());
int16_t count = static_cast<int16_t>(usart.readInt());
count *= delta;
for(int16_t i = start; i < count; i += delta)
{
dac0.setValue(i);
wdt_reset();
uint16_t val_a = adu.getValue(channel_a);
uint16_t val_b = adu.getValue(channel_b);
usart.initTX();
usart.writeInt(val_a);
usart.writeInt(val_b);
usart.flush();
}
usart.initTX();
usart.writeByte(USART::MSG_OK);
usart.flush();
}