Add ACK address to protocol, implement in obus_can
This commit is contained in:
parent
2c994f2c60
commit
b7fd5b404a
3 changed files with 22 additions and 2 deletions
|
@ -38,8 +38,10 @@ Types for controller:
|
||||||
|
|
||||||
- 0 acknowledge valid message
|
- 0 acknowledge valid message
|
||||||
[ X B B B B B B B ]
|
[ X B B B B B B B ]
|
||||||
--------------
|
- - ----------
|
||||||
reserved
|
| ↓ reserved
|
||||||
|
↓ module ID
|
||||||
|
type
|
||||||
|
|
||||||
- 1 hello
|
- 1 hello
|
||||||
[ X B B B B B B B ]
|
[ X B B B B B B B ]
|
||||||
|
|
|
@ -36,6 +36,7 @@ uint8_t payload_type(uint8_t module_type, uint8_t module_id, uint8_t msg_type) {
|
||||||
if (module_type == OBUS_TYPE_CONTROLLER && module_id == OBUS_CONTROLLER_ID) {
|
if (module_type == OBUS_TYPE_CONTROLLER && module_id == OBUS_CONTROLLER_ID) {
|
||||||
switch (msg_type) {
|
switch (msg_type) {
|
||||||
case OBUS_MSGTYPE_C_ACK:
|
case OBUS_MSGTYPE_C_ACK:
|
||||||
|
return OBUS_PAYLDTYPE_MODULEADDR;
|
||||||
case OBUS_MSGTYPE_C_HELLO:
|
case OBUS_MSGTYPE_C_HELLO:
|
||||||
return OBUS_PAYLDTYPE_EMPTY;
|
return OBUS_PAYLDTYPE_EMPTY;
|
||||||
|
|
||||||
|
@ -140,6 +141,16 @@ bool receive(struct message *msg) {
|
||||||
msg->infomessage.len = data_len;
|
msg->infomessage.len = data_len;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OBUS_PAYLDTYPE_MODULEADDR:
|
||||||
|
{
|
||||||
|
if (receive_frame.can_dlc < 3) {
|
||||||
|
Serial.println(F("W Received illegal count msg: payload <3"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
msg->payload_address.type = receive_frame.data[1];
|
||||||
|
msg->payload_address.id = receive_frame.data[2];
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Serial.println(F("W Couldn't determine payload type"));
|
Serial.println(F("W Couldn't determine payload type"));
|
||||||
return false;
|
return false;
|
||||||
|
@ -194,6 +205,11 @@ void send(struct message *msg) {
|
||||||
length = msg->infomessage.len + 1;
|
length = msg->infomessage.len + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OBUS_PAYLDTYPE_MODULEADDR:
|
||||||
|
send_frame.data[1] = msg->payload_address.type;
|
||||||
|
send_frame.data[2] = msg->payload_address.id;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Serial.print(F("E Unknown payload type "));
|
Serial.print(F("E Unknown payload type "));
|
||||||
Serial.println(pyld_type);
|
Serial.println(pyld_type);
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#define OBUS_PAYLDTYPE_GAMESTATUS 1
|
#define OBUS_PAYLDTYPE_GAMESTATUS 1
|
||||||
#define OBUS_PAYLDTYPE_COUNT 2
|
#define OBUS_PAYLDTYPE_COUNT 2
|
||||||
#define OBUS_PAYLDTYPE_INFO 3
|
#define OBUS_PAYLDTYPE_INFO 3
|
||||||
|
#define OBUS_PAYLDTYPE_MODULEADDR 4
|
||||||
|
|
||||||
#define OBUS_PAYLD_INFO_MAXLEN (OBUS_MSG_LENGTH - 1)
|
#define OBUS_PAYLD_INFO_MAXLEN (OBUS_MSG_LENGTH - 1)
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ struct message {
|
||||||
struct payld_gamestatus gamestatus;
|
struct payld_gamestatus gamestatus;
|
||||||
uint8_t count;
|
uint8_t count;
|
||||||
struct payld_infomessage infomessage;
|
struct payld_infomessage infomessage;
|
||||||
|
struct module payload_address;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue