Skip to content

Commit e519261

Browse files
committed
printing!
1 parent a388b6d commit e519261

File tree

6 files changed

+82
-29
lines changed

6 files changed

+82
-29
lines changed

src/components/i2c/controller.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -826,15 +826,20 @@ bool I2cController::Handle_I2cDeviceOutputWrite(pb_istream_t *stream) {
826826
}
827827

828828
// Determine which driver cb function to use
829-
if (_i2c_model->GetI2cDeviceOutputWriteMsg()->has_led_backpack_write) {
830-
if (!driver->LedBackpackWrite(
831-
&_i2c_model->GetI2cDeviceOutputWriteMsg()->led_backpack_write)) {
829+
if (_i2c_model->GetI2cDeviceOutputWriteMsg()->which_output_msg ==
830+
wippersnapper_i2c_I2cDeviceOutputWrite_write_led_backpack_tag) {
831+
if (!driver->LedBackpackWrite(&_i2c_model->GetI2cDeviceOutputWriteMsg()
832+
->output_msg.write_led_backpack)) {
832833
WS_DEBUG_PRINTLN("[i2c] ERROR: Unable to write to LED backpack!");
833834
return false;
834835
}
835-
} else if (_i2c_model->GetI2cDeviceOutputWriteMsg()->has_char_lcd_write) {
836-
WS_DEBUG_PRINTLN("[i2c] Char LCD write not implemented yet!");
837-
// TODO!
836+
} else if (_i2c_model->GetI2cDeviceOutputWriteMsg()->which_output_msg ==
837+
wippersnapper_i2c_I2cDeviceOutputWrite_write_char_lcd_tag) {
838+
if (!driver->WriteMessageCharLCD(&_i2c_model->GetI2cDeviceOutputWriteMsg()
839+
->output_msg.write_char_lcd)) {
840+
WS_DEBUG_PRINTLN("[i2c] ERROR: Unable to write to char LCD!");
841+
return false;
842+
}
838843
} else {
839844
WS_DEBUG_PRINTLN("[i2c] ERROR: Unable to determine I2C Output Write type!");
840845
return false;

src/components/i2c/drivers/drvOutCharLcd.h

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,27 @@ class drvOutCharLcd : public drvOutputBase {
8383
@param message
8484
The message to be displayed.
8585
*/
86-
void WriteMessageCharLCD(const char *message) override {
86+
void WriteMessage(const char *message) {
8787
if (_lcd == nullptr)
8888
return;
8989

9090
// Before writing, let's clear the display
9191
_lcd->clear();
9292

93+
// TODO: Remove all the prints!
94+
95+
// Print the message to the serial
96+
Serial.print("Writing message to LCD: ");
97+
Serial.println(message);
98+
99+
// Debug: Print each character's ASCII value
100+
Serial.print("Character values: ");
101+
for (size_t i = 0; i < strlen(message); i++) {
102+
Serial.print((int)message[i]);
103+
Serial.print(" ");
104+
}
105+
Serial.println();
106+
93107
size_t message_length = strlen(message);
94108
size_t cur_idx = 0; // Current index in the message
95109

@@ -102,12 +116,31 @@ class drvOutCharLcd : public drvOutputBase {
102116
for (int cur_col = 0; cur_col < _cols && cur_idx < message_length;
103117
cur_col++) {
104118
char c = message[cur_idx];
119+
120+
// Debug: Print the character we're processing
121+
Serial.print("Processing char at position ");
122+
Serial.print(cur_idx);
123+
Serial.print(": '");
105124
if (c == '\n') {
125+
Serial.print("\\n");
126+
} else {
127+
Serial.print(c);
128+
}
129+
Serial.print("' (");
130+
Serial.print((int)c);
131+
Serial.println(")");
132+
133+
if (c == '\\' && message[cur_idx + 1] == 'n') {
134+
Serial.println("Found newline, moving to next row");
135+
cur_idx += 2; // Skip the '\n' character in the buffer
136+
break; // and move to the next row
137+
} else if (c == 194 && message[cur_idx + 1] == 176) {
138+
cur_idx += 2; // Skip the degree symbol sequence in the buffer
139+
_lcd->write(0xDF); // and write the degree symbol
140+
} else {
141+
_lcd->write(c);
106142
cur_idx++;
107-
break;
108143
}
109-
_lcd->write(c);
110-
cur_idx++;
111144
}
112145
}
113146
}

src/components/i2c/drivers/drvOutputBase.h

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,25 @@ class drvOutputBase : public drvBase {
103103

104104
/*!
105105
@brief Writes a message to the LCD.
106-
@param message
107-
The message to be displayed.
106+
@param write_char_lcd
107+
Pointer to a wippersnapper_i2c_output_CharLCDWrite message.
108108
*/
109-
virtual void WriteMessageCharLCD(const char *message) override {
110-
// noop
109+
bool
110+
WriteMessageCharLCD(wippersnapper_i2c_output_CharLCDWrite *write_char_lcd) {
111+
switch (write_char_lcd->which_message) {
112+
case wippersnapper_i2c_output_CharLCDWrite_text_tag:
113+
WriteMessage(write_char_lcd->message.text);
114+
break;
115+
case wippersnapper_i2c_output_CharLCDWrite_number_int_tag:
116+
// WriteValue(write_char_lcd->message.number_int);
117+
break;
118+
case wippersnapper_i2c_output_CharLCDWrite_number_float_tag:
119+
// WriteValue(write_char_lcd->message.number_float);
120+
break;
121+
default:
122+
return false;
123+
}
124+
return true;
111125
}
112126

113127
/*!

src/protos/i2c.pb.h

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,11 @@ typedef struct _wippersnapper_i2c_I2cDeviceEvent {
129129
typedef struct _wippersnapper_i2c_I2cDeviceOutputWrite {
130130
bool has_i2c_device_description;
131131
wippersnapper_i2c_I2cDeviceDescriptor i2c_device_description; /* * Required - The I2c device's address and metadata. */
132-
bool has_led_backpack_write;
133-
wippersnapper_i2c_output_LedBackpackWrite led_backpack_write; /* * Optional - If the I2C device is a LED backpack, fill this field. * */
134-
bool has_char_lcd_write;
135-
wippersnapper_i2c_output_CharLCDWrite char_lcd_write; /* * Optional - If the I2C device is a character LCD, fill this field. * */
132+
pb_size_t which_output_msg;
133+
union {
134+
wippersnapper_i2c_output_LedBackpackWrite write_led_backpack; /* * Optional - If the I2C device is a LED backpack, fill this field. * */
135+
wippersnapper_i2c_output_CharLCDWrite write_char_lcd; /* * Optional - If the I2C device is a character LCD, fill this field. * */
136+
} output_msg;
136137
} wippersnapper_i2c_I2cDeviceOutputWrite;
137138

138139

@@ -174,7 +175,7 @@ extern "C" {
174175
#define wippersnapper_i2c_I2cDeviceRemove_init_default {false, wippersnapper_i2c_I2cDeviceDescriptor_init_default, 0}
175176
#define wippersnapper_i2c_I2cDeviceRemoved_init_default {false, wippersnapper_i2c_I2cDeviceDescriptor_init_default, 0}
176177
#define wippersnapper_i2c_I2cDeviceEvent_init_default {false, wippersnapper_i2c_I2cDeviceDescriptor_init_default, 0, {wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default, wippersnapper_sensor_SensorEvent_init_default}}
177-
#define wippersnapper_i2c_I2cDeviceOutputWrite_init_default {false, wippersnapper_i2c_I2cDeviceDescriptor_init_default, false, wippersnapper_i2c_output_LedBackpackWrite_init_default, false, wippersnapper_i2c_output_CharLCDWrite_init_default}
178+
#define wippersnapper_i2c_I2cDeviceOutputWrite_init_default {false, wippersnapper_i2c_I2cDeviceDescriptor_init_default, 0, {wippersnapper_i2c_output_LedBackpackWrite_init_default}}
178179
#define wippersnapper_i2c_I2cDeviceDescriptor_init_zero {"", "", 0, 0, 0}
179180
#define wippersnapper_i2c_I2cBusDescriptor_init_zero {"", ""}
180181
#define wippersnapper_i2c_I2cBusScan_init_zero {0, 0, false, wippersnapper_i2c_I2cBusDescriptor_init_zero, 0, 0}
@@ -184,7 +185,7 @@ extern "C" {
184185
#define wippersnapper_i2c_I2cDeviceRemove_init_zero {false, wippersnapper_i2c_I2cDeviceDescriptor_init_zero, 0}
185186
#define wippersnapper_i2c_I2cDeviceRemoved_init_zero {false, wippersnapper_i2c_I2cDeviceDescriptor_init_zero, 0}
186187
#define wippersnapper_i2c_I2cDeviceEvent_init_zero {false, wippersnapper_i2c_I2cDeviceDescriptor_init_zero, 0, {wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero, wippersnapper_sensor_SensorEvent_init_zero}}
187-
#define wippersnapper_i2c_I2cDeviceOutputWrite_init_zero {false, wippersnapper_i2c_I2cDeviceDescriptor_init_zero, false, wippersnapper_i2c_output_LedBackpackWrite_init_zero, false, wippersnapper_i2c_output_CharLCDWrite_init_zero}
188+
#define wippersnapper_i2c_I2cDeviceOutputWrite_init_zero {false, wippersnapper_i2c_I2cDeviceDescriptor_init_zero, 0, {wippersnapper_i2c_output_LedBackpackWrite_init_zero}}
188189

189190
/* Field tags (for use in manual encoding/decoding) */
190191
#define wippersnapper_i2c_I2cDeviceDescriptor_i2c_bus_sda_tag 1
@@ -218,8 +219,8 @@ extern "C" {
218219
#define wippersnapper_i2c_I2cDeviceEvent_i2c_device_description_tag 1
219220
#define wippersnapper_i2c_I2cDeviceEvent_i2c_device_events_tag 2
220221
#define wippersnapper_i2c_I2cDeviceOutputWrite_i2c_device_description_tag 1
221-
#define wippersnapper_i2c_I2cDeviceOutputWrite_led_backpack_write_tag 2
222-
#define wippersnapper_i2c_I2cDeviceOutputWrite_char_lcd_write_tag 3
222+
#define wippersnapper_i2c_I2cDeviceOutputWrite_write_led_backpack_tag 2
223+
#define wippersnapper_i2c_I2cDeviceOutputWrite_write_char_lcd_tag 3
223224

224225
/* Struct field encoding specification for nanopb */
225226
#define wippersnapper_i2c_I2cDeviceDescriptor_FIELDLIST(X, a) \
@@ -299,13 +300,13 @@ X(a, STATIC, REPEATED, MESSAGE, i2c_device_events, 2)
299300

300301
#define wippersnapper_i2c_I2cDeviceOutputWrite_FIELDLIST(X, a) \
301302
X(a, STATIC, OPTIONAL, MESSAGE, i2c_device_description, 1) \
302-
X(a, STATIC, OPTIONAL, MESSAGE, led_backpack_write, 2) \
303-
X(a, STATIC, OPTIONAL, MESSAGE, char_lcd_write, 3)
303+
X(a, STATIC, ONEOF, MESSAGE, (output_msg,write_led_backpack,output_msg.write_led_backpack), 2) \
304+
X(a, STATIC, ONEOF, MESSAGE, (output_msg,write_char_lcd,output_msg.write_char_lcd), 3)
304305
#define wippersnapper_i2c_I2cDeviceOutputWrite_CALLBACK NULL
305306
#define wippersnapper_i2c_I2cDeviceOutputWrite_DEFAULT NULL
306307
#define wippersnapper_i2c_I2cDeviceOutputWrite_i2c_device_description_MSGTYPE wippersnapper_i2c_I2cDeviceDescriptor
307-
#define wippersnapper_i2c_I2cDeviceOutputWrite_led_backpack_write_MSGTYPE wippersnapper_i2c_output_LedBackpackWrite
308-
#define wippersnapper_i2c_I2cDeviceOutputWrite_char_lcd_write_MSGTYPE wippersnapper_i2c_output_CharLCDWrite
308+
#define wippersnapper_i2c_I2cDeviceOutputWrite_output_msg_write_led_backpack_MSGTYPE wippersnapper_i2c_output_LedBackpackWrite
309+
#define wippersnapper_i2c_I2cDeviceOutputWrite_output_msg_write_char_lcd_MSGTYPE wippersnapper_i2c_output_CharLCDWrite
309310

310311
extern const pb_msgdesc_t wippersnapper_i2c_I2cDeviceDescriptor_msg;
311312
extern const pb_msgdesc_t wippersnapper_i2c_I2cBusDescriptor_msg;
@@ -338,7 +339,7 @@ extern const pb_msgdesc_t wippersnapper_i2c_I2cDeviceOutputWrite_msg;
338339
#define wippersnapper_i2c_I2cDeviceAddOrReplace_size 141
339340
#define wippersnapper_i2c_I2cDeviceAddedOrReplaced_size 56
340341
#define wippersnapper_i2c_I2cDeviceDescriptor_size 50
341-
#define wippersnapper_i2c_I2cDeviceOutputWrite_size 147
342+
#define wippersnapper_i2c_I2cDeviceOutputWrite_size 100
342343
#define wippersnapper_i2c_I2cDeviceRemove_size 54
343344
#define wippersnapper_i2c_I2cDeviceRemoved_size 54
344345
#if defined(wippersnapper_sensor_SensorEvent_size)

src/protos/i2c_output.pb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ typedef struct _wippersnapper_i2c_output_LedBackpackWrite {
7777
typedef struct _wippersnapper_i2c_output_CharLCDWrite {
7878
pb_size_t which_message;
7979
union {
80-
char text[20]; /* * Text to write to the character LCD. * */
80+
char text[100]; /* * Text to write to the character LCD. * */
8181
int32_t number_int; /* * Number to write to the character LCD. * */
8282
float number_float; /* * Float to write to the character LCD. * */
8383
} message;

src/protos/signal.pb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ extern const pb_msgdesc_t wippersnapper_signal_DeviceToBroker_msg;
257257

258258
/* Maximum encoded size of messages (where known) */
259259
#if defined(wippersnapper_digitalio_DigitalIOEvent_size) && defined(wippersnapper_digitalio_DigitalIOWrite_size) && defined(wippersnapper_uart_UARTAdd_size) && defined(wippersnapper_uart_UARTRemove_size)
260-
union wippersnapper_signal_BrokerToDevice_payload_size_union {char f12[(6 + wippersnapper_digitalio_DigitalIOEvent_size)]; char f13[(6 + wippersnapper_digitalio_DigitalIOWrite_size)]; char f80[(7 + wippersnapper_uart_UARTAdd_size)]; char f81[(7 + wippersnapper_uart_UARTRemove_size)]; char f0[151];};
260+
union wippersnapper_signal_BrokerToDevice_payload_size_union {char f12[(6 + wippersnapper_digitalio_DigitalIOEvent_size)]; char f13[(6 + wippersnapper_digitalio_DigitalIOWrite_size)]; char f80[(7 + wippersnapper_uart_UARTAdd_size)]; char f81[(7 + wippersnapper_uart_UARTRemove_size)]; char f0[145];};
261261
#endif
262262
#if defined(wippersnapper_digitalio_DigitalIOEvent_size) && defined(wippersnapper_analogio_AnalogIOEvent_size) && defined(wippersnapper_ds18x20_Ds18x20Event_size) && defined(wippersnapper_uart_UARTAdded_size) && defined(wippersnapper_uart_UARTEvent_size) && defined(wippersnapper_i2c_I2cDeviceEvent_size)
263263
union wippersnapper_signal_DeviceToBroker_payload_size_union {char f10[(6 + wippersnapper_digitalio_DigitalIOEvent_size)]; char f20[(7 + wippersnapper_analogio_AnalogIOEvent_size)]; char f80[(7 + wippersnapper_ds18x20_Ds18x20Event_size)]; char f90[(7 + wippersnapper_uart_UARTAdded_size)]; char f100[(7 + wippersnapper_uart_UARTEvent_size)]; char f113[(7 + wippersnapper_i2c_I2cDeviceEvent_size)]; char f0[6246];};

0 commit comments

Comments
 (0)