Files
@ a6d6bff160f8
Branch filter:
Location: HydroBot/hydrobot-sharedlibs/src/protocol.c
a6d6bff160f8
2.8 KiB
text/plain
Minor changes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include "protocol.h"
bool protocol_receive_message(CanRxMsgTypeDef* can_message)
{
bool result = true;
protocol_message_t message;
message.command = can_message->Data[0] & 0x80;
message.id = can_message->Data[0] & 0x7F;
message.key = (can_message->Data[1] << 8) & can_message->Data[2];
message.sensor = can_message->Data[3];
message.data.byte_data[0] = can_message->Data[4];
message.data.byte_data[1] = can_message->Data[5];
message.data.byte_data[2] = can_message->Data[6];
message.data.byte_data[3] = can_message->Data[7];
protocol_process_message(&message);
return result;
}
bool protocol_send_message(protocol_message_t* message)
{
bool result = true;
uint8_t data[8];
data[0] = (message->command & 0x80) & (message->id & 0x7F);
data[1] = (message->key >> 8) & 0xFF;
data[2] = (message->key >> 0) & 0xFF;
data[3] = message->sensor;
data[4] = (message->data.byte_data[0] >> 24) & 0xFF;
data[5] = (message->data.byte_data[1] >> 16) & 0xFF;
data[6] = (message->data.byte_data[2] >> 8) & 0xFF;
data[7] = (message->data.byte_data[3] >> 0) & 0xFF;
can_send(CAN_SEND_ID, CAN_ID_STD, 8, data);
return result;
}
bool protocol_process_message(protocol_message_t* message)
{
bool result = true;
if (message->command)
{
switch(message->id)
{
case ESTOP:
{
//call estop weak function
result = protocol_estop(message->data.float_data!=0.0f);
}
break;
case SILENCE_BUS:
{
//silence can bus
result = can_silence_bus(message->data.float_data!=0.0f);
}
break;
case SET_OUTPUT:
{
//call set output weak function
result = protocol_set_output(message);
}
break;
case GET_DATA:
{
//call get data weak function
result = protocol_get_data(message);
}
break;
case CONFIG:
{
//call config weak function
result = protocol_config(message);
}
break;
}
}
return result;
}
__weak bool protocol_estop(bool value)
{
return false;
}
__weak bool protocol_set_output(protocol_message_t* message)
{
return false;
}
__weak bool protocol_get_data(protocol_message_t* message)
{
return false;
}
__weak bool protocol_config(protocol_message_t* message)
{
return false;
}
|