mixer-slider/protocol/master/master.c

63 lines
1.1 KiB
C

/*
* master.c
*
* Created on: 06.12.2018
* Author: julian
*/
#include "master.h"
#include "../communication.h"
void on_receive(iface_t * me, byte_t b, void*ptr)
{
master_t * this = (master_t*)(ptr);
if (this->msg_byte_counter >= 0) {
if (this->msg_byte_counter <=8) {
static uint16_t temp = 0;
if (this->msg_byte_counter%2) {
temp |= (b<<7);
switch(this->msg_byte_counter) {
case 1:
case 3:
case 5:
this->buffer[this->chain_len].poti[this->msg_byte_counter/2] = temp;
break;
case 7:
this->buffer[this->chain_len].slider = temp;
break;
}
}else {
temp = b&0x7F;
}
} else {
this->buffer[this->chain_len].button = b&0x01;
}
}
this->msg_byte_counter++;
if (!(this->msg_byte_counter = (this->msg_byte_counter+1)%SLAVE_MESSAGE_LEN)) {
this->chain_len++;
}
// decode package
if (IS_EOM(b)) {
return;
}
// keep communication running
me->write(me, 0x00);
}
void master_init(master_t *master, iface_t * dev)
{
dev->on_read = on_receive;
dev->callback_data = master;
// initialize master values
*master = struct {
.iface = dev,
};
}