mirror of
				https://github.com/KevinMidboe/xserve-io.git
				synced 2025-10-29 18:00:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // #include "Wire.h" // enable I2C bus
 | |
| 
 | |
| byte saa1064 = 0x3B; // define the I2C bus address for our SAA1064
 | |
| 
 | |
| byte bank1;
 | |
| byte bank2;
 | |
| byte bank3;
 | |
| byte bank4;
 | |
| 
 | |
| int TOTAL_LEDS = 23;
 | |
| byte activityLED = 0b00000001;
 | |
| byte leds[23][4] = {
 | |
|   {0b00000010, 0b00000000, 0b00000000, 0b00000000}, //  1
 | |
|   {0b00000000, 0b00000010, 0b00000000, 0b00000000}, //  2
 | |
|   {0b00000100, 0b00000000, 0b00000000, 0b00000000}, //  3
 | |
|   {0b00000000, 0b00000100, 0b00000000, 0b00000000}, //  4
 | |
|   {0b00001000, 0b00000000, 0b00000000, 0b00000000}, //  5
 | |
|   {0b00000000, 0b00001000, 0b00000000, 0b00000000}, //  6
 | |
|   {0b00010000, 0b00000000, 0b00000000, 0b00000000}, //  7
 | |
|   {0b00000000, 0b00010000, 0b00000000, 0b00000000}, //  8
 | |
|   {0b00100000, 0b00000000, 0b00000000, 0b00000000}, //  9
 | |
|   {0b00000000, 0b00100000, 0b00000000, 0b00000000}, // 10
 | |
|   {0b01000000, 0b00000000, 0b00000000, 0b00000000}, // 11
 | |
|   {0b00000000, 0b01000000, 0b00000000, 0b00000000}, // 12
 | |
|   {0b00000000, 0b00000000, 0b00000001, 0b00000000}, // 13
 | |
|   {0b00000000, 0b00000000, 0b00000000, 0b00000001}, // 14
 | |
|   {0b00000000, 0b00000000, 0b00000010, 0b00000000}, // 15
 | |
|   {0b00000000, 0b00000000, 0b00000000, 0b00000010}, // 16
 | |
|   {0b00000000, 0b00000000, 0b00000100, 0b00000000}, // 17
 | |
|   {0b00000000, 0b00000000, 0b00000000, 0b00000100}, // 18
 | |
|   {0b00000000, 0b00000000, 0b00001000, 0b00000000}, // 19
 | |
|   {0b00000000, 0b00000000, 0b00000000, 0b00001000}, // 20
 | |
|   {0b00000000, 0b00000000, 0b00010000, 0b00000000}, // 21
 | |
|   {0b00000000, 0b00000000, 0b00100000, 0b00000000}, // 22
 | |
|   {0b00000000, 0b00000000, 0b01000000, 0b00000000}  // 23
 | |
| };
 | |
| 
 | |
| // void setup()
 | |
| // {
 | |
| //   Wire.begin(); // start up I2C bus
 | |
| 
 | |
| //   Serial.println("setting up ports");
 | |
| 
 | |
| //   resetBanks();
 | |
| // }
 | |
| 
 | |
| // resetBanks();
 | |
| 
 | |
| 
 | |
| void writeCenterColumn(byte* banks) {
 | |
|   Wire.beginTransmission(saa1064);
 | |
|   Wire.write(1);
 | |
| 
 | |
|   Wire.write(banks[0]);
 | |
|   Wire.write(banks[1]);
 | |
|   Wire.write(banks[2]);
 | |
|   Wire.write(banks[3]);
 | |
| 
 | |
|   Wire.endTransmission();
 | |
| }
 | |
| 
 | |
| void writeCenterColumnFirstBank(byte* banks) {
 | |
|   Wire.beginTransmission(saa1064);
 | |
|   Wire.write(1);
 | |
| 
 | |
|   Wire.write(banks[0]);
 | |
| 
 | |
|   Wire.endTransmission();
 | |
| }
 | |
| 
 | |
| // TODO prevent this from overwriting ethernet bit
 | |
| void resetBanks(byte* banks) {
 | |
|   banks[0] = 0;
 | |
|   banks[1] = 0;
 | |
|   banks[2] = 0;
 | |
|   banks[3] = 0;
 | |
| }
 | |
| 
 | |
| void resetEthernetBit(byte* banks) {
 | |
|   bitWrite(banks[0], 0, 0);
 | |
| }
 | |
| 
 | |
| void displayNumber(byte* banks, int number) { 
 | |
|   banks[0] = leds[number - 1][0];
 | |
|   banks[1] = leds[number - 1][1];
 | |
|   banks[2] = leds[number - 1][2];
 | |
|   banks[3] = leds[number - 1][3];
 | |
| 
 | |
|   writeCenterColumn(banks);
 | |
| }
 | |
| 
 | |
| void displayUpToNumber(byte* banks, int number) { 
 | |
|   for (int i = 0; i < number; i++) {
 | |
|     banks[0] |= leds[i][0];
 | |
|     banks[1] |= leds[i][1];
 | |
|     banks[2] |= leds[i][2];
 | |
|     banks[3] |= leds[i][3];
 | |
|   }
 | |
| 
 | |
|   writeCenterColumn(banks);
 | |
| }
 | |
| 
 | |
| void displayNumbers(byte* banks, int* numbersList, size_t length) {
 | |
|   for (int i = 0; i < length; i++) {
 | |
|     int num = numbersList[i] - 1;
 | |
|     banks[0] |= leds[num][0];
 | |
|     banks[1] |= leds[num][1];
 | |
|     banks[2] |= leds[num][2];
 | |
|     banks[3] |= leds[num][3];
 | |
|   }
 | |
| 
 | |
|   writeCenterColumn(banks);
 | |
| }
 | |
| 
 | |
| void displayPercentage(byte* banks, double percentDecimal) {
 | |
|   int numberOfTotal = round(percentDecimal * TOTAL_LEDS);
 | |
|   displayUpToNumber(banks, numberOfTotal);
 | |
| }
 | |
| 
 | |
| void computeEthernetActivity(byte* banks, bool val) {
 | |
|   // bitWrite(bank1, 0, val);
 | |
|   banks[0] |= val; // 0 or 1
 | |
| }
 |