mixer-slider/protocol/slave/slave.c

49 lines
914 B
C
Raw Normal View History

/*
* 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){};
}