mirror of
https://github.com/halleysfifthinc/AVCLAN-Mockingboard.git
synced 2026-08-07 01:13:18 +00:00
Rename field broadcast => is_unicast
Improves readability and logical flow clarity
This commit is contained in:
+19
-18
@@ -619,7 +619,8 @@ uint8_t AVCLAN_readframe(AVCLAN_frame_t *frame, log_t print) {
|
|||||||
}
|
}
|
||||||
// Otherwise that was a start bit
|
// Otherwise that was a start bit
|
||||||
|
|
||||||
AVCLAN_readbits(&frame->broadcast, 1);
|
AVCLAN_readbits(&tmp, 1);
|
||||||
|
frame->is_unicast = tmp;
|
||||||
|
|
||||||
uint8_t parity = AVCLAN_readbits(&frame->controller_addr, 12);
|
uint8_t parity = AVCLAN_readbits(&frame->controller_addr, 12);
|
||||||
AVCLAN_readbits(&tmp, 1);
|
AVCLAN_readbits(&tmp, 1);
|
||||||
@@ -802,7 +803,7 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame, log_t print) {
|
|||||||
} else {
|
} else {
|
||||||
AVCLAN_sendbit(bit_start);
|
AVCLAN_sendbit(bit_start);
|
||||||
}
|
}
|
||||||
AVCLAN_sendbits((uint8_t *)&frame->broadcast, 1);
|
AVCLAN_sendbits(&(uint8_t){frame->is_unicast}, 1);
|
||||||
|
|
||||||
avclan_bit_t parity = AVCLAN_sendbits(&frame->controller_addr, 12);
|
avclan_bit_t parity = AVCLAN_sendbits(&frame->controller_addr, 12);
|
||||||
AVCLAN_sendbit(parity);
|
AVCLAN_sendbit(parity);
|
||||||
@@ -810,7 +811,7 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame, log_t print) {
|
|||||||
parity = AVCLAN_sendbits(&frame->peripheral_addr, 12);
|
parity = AVCLAN_sendbits(&frame->peripheral_addr, 12);
|
||||||
AVCLAN_sendbit(parity);
|
AVCLAN_sendbit(parity);
|
||||||
|
|
||||||
if (frame->broadcast && !AVCLAN_readbit_ACK()) {
|
if (frame->is_unicast && !AVCLAN_readbit_ACK()) {
|
||||||
err.errno = NAK_ADDRESS;
|
err.errno = NAK_ADDRESS;
|
||||||
goto handle_err;
|
goto handle_err;
|
||||||
}
|
}
|
||||||
@@ -818,7 +819,7 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame, log_t print) {
|
|||||||
parity = AVCLAN_sendbits(&frame->control, 4);
|
parity = AVCLAN_sendbits(&frame->control, 4);
|
||||||
AVCLAN_sendbit(parity);
|
AVCLAN_sendbit(parity);
|
||||||
|
|
||||||
if (frame->broadcast && !AVCLAN_readbit_ACK()) {
|
if (frame->is_unicast && !AVCLAN_readbit_ACK()) {
|
||||||
err.errno = NAK_CONTROL;
|
err.errno = NAK_CONTROL;
|
||||||
goto handle_err;
|
goto handle_err;
|
||||||
}
|
}
|
||||||
@@ -826,7 +827,7 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame, log_t print) {
|
|||||||
parity = AVCLAN_sendbyte(&frame->length); // data length
|
parity = AVCLAN_sendbyte(&frame->length); // data length
|
||||||
AVCLAN_sendbit(parity);
|
AVCLAN_sendbit(parity);
|
||||||
|
|
||||||
if (frame->broadcast && !AVCLAN_readbit_ACK()) {
|
if (frame->is_unicast && !AVCLAN_readbit_ACK()) {
|
||||||
err.errno = NAK_MESSAGE_LENGTH;
|
err.errno = NAK_MESSAGE_LENGTH;
|
||||||
goto handle_err;
|
goto handle_err;
|
||||||
}
|
}
|
||||||
@@ -837,7 +838,7 @@ uint8_t AVCLAN_sendframe(const AVCLAN_frame_t *frame, log_t print) {
|
|||||||
// Based on the µPD6708 datasheet, ACK bit for broadcast doesn't seem
|
// Based on the µPD6708 datasheet, ACK bit for broadcast doesn't seem
|
||||||
// necessary (i.e. This deviates from the previous broadcast specific
|
// necessary (i.e. This deviates from the previous broadcast specific
|
||||||
// function that sent an extra `1` bit after each byte/parity)
|
// function that sent an extra `1` bit after each byte/parity)
|
||||||
if (frame->broadcast && !AVCLAN_readbit_ACK()) {
|
if (frame->is_unicast && !AVCLAN_readbit_ACK()) {
|
||||||
err.errno = NAK_DATA;
|
err.errno = NAK_DATA;
|
||||||
err.val = i;
|
err.val = i;
|
||||||
goto handle_err;
|
goto handle_err;
|
||||||
@@ -906,7 +907,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
uint8_t from;
|
uint8_t from;
|
||||||
|
|
||||||
// BROADCAST
|
// BROADCAST
|
||||||
if (in->broadcast == BROADCAST) {
|
if (!in->is_unicast) {
|
||||||
// skip confirming peripheral_addr, because it will be 0xFFF or 0x1FF based
|
// skip confirming peripheral_addr, because it will be 0xFFF or 0x1FF based
|
||||||
// on all currently known examples
|
// on all currently known examples
|
||||||
switch (b0 /* "from" device */) {
|
switch (b0 /* "from" device */) {
|
||||||
@@ -931,7 +932,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
LAN_RESPONSE:
|
LAN_RESPONSE:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
memcpy(out->data, lancheck_resp, sizeof(lancheck_resp));
|
memcpy(out->data, lancheck_resp, sizeof(lancheck_resp));
|
||||||
respond = r_Handled;
|
respond = r_Handled;
|
||||||
@@ -954,7 +955,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Ping_Req:
|
case Ping_Req:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
out->length = sizeof(ping_resp);
|
out->length = sizeof(ping_resp);
|
||||||
ping_resp[4] = b3;
|
ping_resp[4] = b3;
|
||||||
@@ -962,7 +963,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
respond = r_Handled;
|
respond = r_Handled;
|
||||||
break;
|
break;
|
||||||
case List_Functions_Req:
|
case List_Functions_Req:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
out->length = sizeof(list_functions_resp);
|
out->length = sizeof(list_functions_resp);
|
||||||
memcpy(out->data, list_functions_resp,
|
memcpy(out->data, list_functions_resp,
|
||||||
@@ -1007,7 +1008,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
FUNCTION_CHANGE_RESPONSE:
|
FUNCTION_CHANGE_RESPONSE:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
out->length = sizeof(function_change_resp);
|
out->length = sizeof(function_change_resp);
|
||||||
memcpy(out->data, function_change_resp,
|
memcpy(out->data, function_change_resp,
|
||||||
@@ -1062,7 +1063,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
CMD_SW_RESPONSE:
|
CMD_SW_RESPONSE:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1094,7 +1095,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
STATUS_RESPONSE:
|
STATUS_RESPONSE:
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1124,7 +1125,7 @@ void AVCLAN_printframe(const AVCLAN_frame_t *frame, uint8_t binary) {
|
|||||||
if (binary) {
|
if (binary) {
|
||||||
uint8_t buffer[8];
|
uint8_t buffer[8];
|
||||||
buffer[0] = 0x10; // Data Link Escape, signaling binary data forthcoming
|
buffer[0] = 0x10; // Data Link Escape, signaling binary data forthcoming
|
||||||
buffer[1] = frame->broadcast;
|
buffer[1] = frame->is_unicast;
|
||||||
|
|
||||||
// Send addresses in big-endian order
|
// Send addresses in big-endian order
|
||||||
buffer[2] = (uint8_t)(frame->controller_addr >> 8);
|
buffer[2] = (uint8_t)(frame->controller_addr >> 8);
|
||||||
@@ -1142,7 +1143,7 @@ void AVCLAN_printframe(const AVCLAN_frame_t *frame, uint8_t binary) {
|
|||||||
buffer[2] = 0x0A; // \n
|
buffer[2] = 0x0A; // \n
|
||||||
RS232_sendbytes((uint8_t *)&buffer, 3);
|
RS232_sendbytes((uint8_t *)&buffer, 3);
|
||||||
} else {
|
} else {
|
||||||
RS232_PrintHex4(frame->broadcast);
|
RS232_PrintHex4(frame->is_unicast);
|
||||||
|
|
||||||
RS232_Print(" 0x");
|
RS232_Print(" 0x");
|
||||||
RS232_PrintHex12(frame->controller_addr);
|
RS232_PrintHex12(frame->controller_addr);
|
||||||
@@ -1180,7 +1181,7 @@ uint8_t AVCLAN_parseframe(const uint8_t *bytes, uint8_t len,
|
|||||||
}
|
}
|
||||||
const uint8_t *last = bytes + len;
|
const uint8_t *last = bytes + len;
|
||||||
|
|
||||||
frame->broadcast = *bytes++;
|
frame->is_unicast = *bytes++;
|
||||||
frame->controller_addr = bytes[0] | ((uint16_t)bytes[1] << 8);
|
frame->controller_addr = bytes[0] | ((uint16_t)bytes[1] << 8);
|
||||||
bytes += 2;
|
bytes += 2;
|
||||||
frame->peripheral_addr = bytes[0] | ((uint16_t)bytes[1] << 8);
|
frame->peripheral_addr = bytes[0] | ((uint16_t)bytes[1] << 8);
|
||||||
@@ -1226,7 +1227,7 @@ uint8_t AVCLAN_parseframe(const uint8_t *bytes, uint8_t len,
|
|||||||
// Only used for regularly scheduled periodic updates
|
// Only used for regularly scheduled periodic updates
|
||||||
AVCLAN_frame_t *AVCLAN_getStatusFrame() {
|
AVCLAN_frame_t *AVCLAN_getStatusFrame() {
|
||||||
static uint8_t status_data[] = STATUS_REPORT_DATA;
|
static uint8_t status_data[] = STATUS_REPORT_DATA;
|
||||||
static AVCLAN_frame_t status = {.broadcast = BROADCAST,
|
static AVCLAN_frame_t status = {.is_unicast = false,
|
||||||
.controller_addr = DEVICE_ADDR,
|
.controller_addr = DEVICE_ADDR,
|
||||||
.peripheral_addr = 0x1FF,
|
.peripheral_addr = 0x1FF,
|
||||||
.control = 0xF,
|
.control = 0xF,
|
||||||
@@ -1239,7 +1240,7 @@ AVCLAN_frame_t *AVCLAN_getStatusFrame() {
|
|||||||
// Used for changed status messages
|
// Used for changed status messages
|
||||||
void AVCLAN_generateStatus(AVCLAN_frame_t *status) {
|
void AVCLAN_generateStatus(AVCLAN_frame_t *status) {
|
||||||
*status = (AVCLAN_frame_t){
|
*status = (AVCLAN_frame_t){
|
||||||
.broadcast = BROADCAST,
|
.is_unicast = false,
|
||||||
.controller_addr = DEVICE_ADDR,
|
.controller_addr = DEVICE_ADDR,
|
||||||
.peripheral_addr = 0x1FF,
|
.peripheral_addr = 0x1FF,
|
||||||
.control = 0xF,
|
.control = 0xF,
|
||||||
|
|||||||
+1
-3
@@ -174,8 +174,6 @@ typedef enum : uint8_t {
|
|||||||
r_TrackChange, // Time needs reset
|
r_TrackChange, // Time needs reset
|
||||||
} response_t;
|
} response_t;
|
||||||
|
|
||||||
typedef enum MSG_TYPE : uint8_t { BROADCAST = 0, UNICAST = 1 } MSG_TYPE_t;
|
|
||||||
|
|
||||||
typedef struct print_struct {
|
typedef struct print_struct {
|
||||||
_Bool print : 1; // print at all
|
_Bool print : 1; // print at all
|
||||||
_Bool binary : 1; // when also printing, format as binary instead of text
|
_Bool binary : 1; // when also printing, format as binary instead of text
|
||||||
@@ -183,7 +181,7 @@ typedef struct print_struct {
|
|||||||
} log_t;
|
} log_t;
|
||||||
|
|
||||||
typedef struct AVCLAN_frame_struct {
|
typedef struct AVCLAN_frame_struct {
|
||||||
MSG_TYPE_t broadcast; // 0 for broadcast messages
|
bool is_unicast;
|
||||||
uint16_t controller_addr; // formerly "master"
|
uint16_t controller_addr; // formerly "master"
|
||||||
uint16_t peripheral_addr; // formerly "slave"
|
uint16_t peripheral_addr; // formerly "slave"
|
||||||
uint8_t control;
|
uint8_t control;
|
||||||
|
|||||||
+7
-10
@@ -94,7 +94,7 @@ int main() {
|
|||||||
uint8_t hexChars[2];
|
uint8_t hexChars[2];
|
||||||
uint8_t hexDigit = 0; // current digit being written to hexChars
|
uint8_t hexDigit = 0; // current digit being written to hexChars
|
||||||
|
|
||||||
MSG_TYPE_t seqBroadcast = BROADCAST;
|
bool seqIsUnicast = false;
|
||||||
uint8_t lastPrintAllFrames = 1;
|
uint8_t lastPrintAllFrames = 1;
|
||||||
|
|
||||||
uint8_t verbose = 1;
|
uint8_t verbose = 1;
|
||||||
@@ -231,7 +231,7 @@ int main() {
|
|||||||
case 'E': // Beep
|
case 'E': // Beep
|
||||||
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
||||||
if (RFrame_t *resp = popQueue(&rcache)) {
|
if (RFrame_t *resp = popQueue(&rcache)) {
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->controller_addr = DEVICE_ADDR;
|
out->controller_addr = DEVICE_ADDR;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
{
|
{
|
||||||
@@ -249,7 +249,7 @@ int main() {
|
|||||||
case 'P':
|
case 'P':
|
||||||
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
||||||
if (RFrame_t *resp = popQueue(&rcache)) {
|
if (RFrame_t *resp = popQueue(&rcache)) {
|
||||||
out->broadcast = UNICAST;
|
out->is_unicast = true;
|
||||||
out->controller_addr = DEVICE_ADDR;
|
out->controller_addr = DEVICE_ADDR;
|
||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
{
|
{
|
||||||
@@ -284,7 +284,7 @@ int main() {
|
|||||||
readSeq = 1;
|
readSeq = 1;
|
||||||
seqLen = hexDigit = 0;
|
seqLen = hexDigit = 0;
|
||||||
hexChars[0] = hexChars[1] = 0;
|
hexChars[0] = hexChars[1] = 0;
|
||||||
seqBroadcast = UNICAST;
|
seqIsUnicast = true;
|
||||||
break;
|
break;
|
||||||
case 'B': // Send broadcast
|
case 'B': // Send broadcast
|
||||||
RS232_Print("READ SEQUENCE (B)> \n");
|
RS232_Print("READ SEQUENCE (B)> \n");
|
||||||
@@ -293,7 +293,7 @@ int main() {
|
|||||||
readSeq = 1;
|
readSeq = 1;
|
||||||
seqLen = hexDigit = 0;
|
seqLen = hexDigit = 0;
|
||||||
hexChars[0] = hexChars[1] = 0;
|
hexChars[0] = hexChars[1] = 0;
|
||||||
seqBroadcast = BROADCAST;
|
seqIsUnicast = false;
|
||||||
break;
|
break;
|
||||||
case '\n':
|
case '\n':
|
||||||
if (readSeq) {
|
if (readSeq) {
|
||||||
@@ -316,12 +316,9 @@ int main() {
|
|||||||
} else {
|
} else {
|
||||||
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
if (AVCLAN_frame_t *out = (AVCLAN_frame_t *)popQueue(&cache)) {
|
||||||
if (RFrame_t *resp = popQueue(&rcache)) {
|
if (RFrame_t *resp = popQueue(&rcache)) {
|
||||||
out->broadcast = seqBroadcast;
|
out->is_unicast = seqIsUnicast;
|
||||||
out->controller_addr = DEVICE_ADDR;
|
out->controller_addr = DEVICE_ADDR;
|
||||||
switch (seqBroadcast) {
|
out->peripheral_addr = seqIsUnicast ? HU_ADDR : 0x1FF;
|
||||||
case UNICAST: out->peripheral_addr = HU_ADDR; break;
|
|
||||||
case BROADCAST: out->peripheral_addr = 0x1FF; break;
|
|
||||||
}
|
|
||||||
out->length = seqLen;
|
out->length = seqLen;
|
||||||
memcpy(out->data, data_tmp, seqLen);
|
memcpy(out->data, data_tmp, seqLen);
|
||||||
*resp = (RFrame_t){.r = r_Handled, .frame = out};
|
*resp = (RFrame_t){.r = r_Handled, .frame = out};
|
||||||
|
|||||||
Reference in New Issue
Block a user