+ sl->id_to_send = false;
+ if (sl->data_to_send) {
+ sllin_send_tx_buff(sl);
+ sl->lin_state = SLSTATE_RESPONSE_SENT;
+ sl->rx_expect = sl->tx_lim;
+ goto slstate_response_sent;
+ } else {
+ sl->rx_expect = SLLIN_BUFF_DATA + 2;
+ sl->lin_state = SLSTATE_RESPONSE_WAIT;
+ goto slstate_response_wait;
+ }
+ break;
+
+ case SLSTATE_RESPONSE_WAIT:
+ slstate_response_wait:
+ if (sl->rx_cnt < sl->rx_expect)
+ continue;
+
+ printk(KERN_INFO "sllin: response received ID %d len %d\n",
+ sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
+ // check checksum in sl->rx_buff
+ // send CAN non-RTR frame with data
+ sl->id_to_send = false;
+ sl->lin_state = SLSTATE_IDLE;
+ break;
+
+ case SLSTATE_RESPONSE_SENT:
+ slstate_response_sent:
+ if (sl->rx_cnt < sl->tx_lim)
+ continue;
+
+ printk(KERN_INFO "sllin: response sent ID %d len %d\n",
+ sl->rx_buff[SLLIN_BUFF_ID], sl->rx_cnt - SLLIN_BUFF_DATA - 1);
+