Trackball switch lights?

I noted that the trackball button switch lights flash during the bootup process, but don’t seem controllable via the keyboard backlight system.
Are they exposed in any way to the controller or OS? Seems like it’d look cool having the lights show through the clear keycaps.

Yes, I asked about it before, and it is possible to turn them on, but it requires some work. I haven’t bother, because it is just an aesthetic thing to me. I don’t need the buttons illuminated as they are easy to use in the dark without that. The layout of the buttons and the position of your hand on the trackball just don’t make it necessary.

Still someone here has probably figured it out.

They arent controllable (yet), but they can be interacted with from the firmware. As a small proof of concept i had mine light up the button with each individual press, and while i will attach a diff as a pointer i do not believe nor pretend my additions and edits are done well or in the right place, though a clean solution wasnt the idea to begin with.

diff --git a/reform2-trackball-fw/Mouse.c b/reform2-trackball-fw/Mouse.c
index dc5c645..24d329a 100644
--- a/reform2-trackball-fw/Mouse.c
+++ b/reform2-trackball-fw/Mouse.c
@@ -128,11 +128,11 @@ void led_error(void) {
 }
 
 void led_ok(void) {
-  DDRC = 0;
+  DDRC = 0b11110100;
 }
 
 void led_set(uint8_t bits) {
-  DDRC = ((bits&0b11110)<<3)|((bits&1)<<2);
+  DDRC = 0b11110100;
 }
 
 // FIXME QUESTIONABLE
@@ -165,7 +166,7 @@ void SetupHardware(void)
 
   DDRD = 0b00000000;
   //DDRB = 0b11000110;
-  DDRC = 0b00000000;
+  DDRC = 0b11110100;
 
   output_high(PORTD, 0); // enable input pullup for LMB
   output_high(PORTD, 1); // enable input pullup for RMB
@@ -315,6 +319,13 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
     MouseReport->Y = 2*abs(ny)*ny;
   }
 
+  // High = LED not on, Low = LED on
+  if (!(PIND&1))      { output_low (PORTC,2); } else { output_high(PORTC,2); } // Down right
+  if (!(PIND&(1<<1))) { output_low (PORTC,4); } else { output_high(PORTC,4); } // MMB
+  if (!(PIND&(1<<2))) { output_low (PORTC,5); } else { output_high(PORTC,5); } // Down left
+  if (!(PIND&(1<<3))) { output_low (PORTC,6); } else { output_high(PORTC,6); } // RMB
+  if (!(PIND&(1<<4))) { output_low (PORTC,7); } else { output_high(PORTC,7); } // LMB
+
   *ReportSize = sizeof(USB_WheelMouseReport_Data_t);
 
   return true;

I wouldnt really recommend it as the buttons are going to be quite bright, though, in my case i colored them with something opaque so they shine a little quieter.
I also can’t help but feel puzzled at the pin arrangements chosen for PORTC. Was there any reason for not using PC3? It definitely would’ve made it easier as it’d require just a bitshift.

3 Likes