+/**
+ * handels messages recieved by the CAN controller
+ *
+ */
+void can_rx(can_msg_t *msg) {
+ can_msg_t rx_msg;
+ unsigned int newPos;
+
+ memcpy(&rx_msg, msg, sizeof(can_msg_t));
+
+ switch (rx_msg.id)
+ {
+ case CAN_SERVO:
+ //set_servo(0, rx_msg.data[0]);
+ //set_servo(2, rx_msg.data[2]);
+ break;
+
+ case CAN_DRIVES:
+
+ newPos= rx_msg.data[3];
+ // check for valid position
+ if ( (newPos>=0) && (newPos<=4) )
+ {
+ // when carousel is already moving
+ if(moveCarousel==1)
+ {
+ if (newPos== requestedPosition)
+ {
+ // BOA is repatly sending the position
+ }
+ else
+ {
+ // while carousel was moving new position was requested
+ current_state= &state_stop;
+ requestedPosition= newPos;
+ }
+ }
+ // carousel is in stop position
+ else
+ {
+ moveCarousel= 1;
+ requestedPosition= newPos;
+ }
+
+ }
+ break;
+
+ default:
+ break;
+ }
+}