49 lines
914 B
C
49 lines
914 B
C
/*
|
|
* slave.c
|
|
*
|
|
* this is a default implementation for a slave
|
|
* it will continously encode its state on request
|
|
*/
|
|
|
|
#include "slave.h"
|
|
#include "../communication.h"
|
|
|
|
|
|
// implementation for slave_encode
|
|
void slave_encode(iface_t *iface, int16_t s) {
|
|
iface->write(iface, (s>>0)&0x7F);
|
|
iface->write(iface, (s>>7)&0x7F);
|
|
}
|
|
|
|
void slave_on_receive(iface_t * me, byte_t buffer, void *ptr)
|
|
{
|
|
slave_t * slave = (slave_t*)ptr;
|
|
|
|
if (!IS_EOM(buffer)) {
|
|
me->write(me, buffer);
|
|
return;
|
|
}
|
|
|
|
me->write(me, buffer & 0x7F);
|
|
|
|
// write state
|
|
// write potis
|
|
for (int i = 0; i < 4; i++)
|
|
slave_encode(me, slave->state.poti[i]);
|
|
|
|
// write slider
|
|
slave_encode(me, slave->state.slider);
|
|
|
|
me->write(me, 0x80 | (slave->state.button & 0x01));
|
|
}
|
|
|
|
void slave_init(slave_t *slave, iface_t *iface)
|
|
{
|
|
iface->on_read = slave_on_receive;
|
|
iface->callback_data = slave;
|
|
|
|
slave->iface = iface;
|
|
slave->state = (message_t){};
|
|
}
|
|
|