Rename field broadcast => is_unicast

Improves readability and logical flow clarity
This commit is contained in:
Allen Hill
2026-05-15 22:49:21 +00:00
parent f68fa5ab60
commit 87f0ddc2d4
3 changed files with 27 additions and 31 deletions
+19 -18
View File
@@ -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
View File
@@ -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
View File
@@ -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};