]> cvs.zerfleddert.de Git - rsbs2/blobdiff - firmware.c
more bits of the lz algorithm (still only arm assembler)
[rsbs2] / firmware.c
index ac83b96e4c2911f5984c0de09a646a6786ac0954..55556fc15a2a1c8ba3c1ef2197e8b5f120c8ad40 100644 (file)
@@ -152,6 +152,33 @@ void change_properties(unsigned char *fw, int len, struct propaction *paction)
        }
 }
 
+#define BD_SERIAL1     0x14,0x02
+#define BD_ICMB                0x14,0x04
+#define BD_LAN         0x14,0x08
+#define BD_SERIAL2     0x14,0x10
+#define BD_SERIAL3     0x14,0x20
+#define BD_USB         0x14,0x40
+#define BD_PCI         0x15,0x03
+#define BD_LPC         0x15,0x04
+#define BD_VGA         0x15,0x08
+#define BD_BATTERY     0x15,0x10
+#define BD_ACDC                0x15,0x20
+#define BD_STANDBY     0x15,0x40
+#define BD_POWERCONN   0x15,0x70
+#define BD_DVI         0x15,0x80
+#define BD_PWRATX      0x16,0x01
+#define BD_PWRRELAY    0x16,0x02
+#define BD_PS2A                0x19,0xff
+
+#define MAGIC(fn, args...) fn(args)
+
+#define _BD_IS_SET(bd, byte, bits) (bd[byte] & bits)
+#define BD_IS_SET(bd, ident) MAGIC(_BD_IS_SET, bd, BD_##ident)
+#define BD_TEXT(bd, ident) (BD_IS_SET(bd, ident) ? "TRUE" : "FALSE")
+
+#define _BD_SET(bd, byte, bits) (bd[byte] |= bits)
+#define BD_SET(bd, ident) MAGIC(_BD_SET, bd, BD_##ident)
+
 void print_boarddescription(unsigned char *bd)
 {
        int j;
@@ -160,6 +187,32 @@ void print_boarddescription(unsigned char *bd)
                printf("%02x ", *(bd+j));
        }
        printf("\n");
+
+       /* com/agilent/rmc/amr/AmrMaster.class
+        * com/agilent/rmc/mgui/RmcPanel.class
+        * com/agilent/rmc/mgui/panels/AvrManualConfig.class
+        * com/agilent/rmc/mgui/panels/CardConf.jad
+        * com/agilent/rmc/mgui/panels/PowerMgmtConf.jad
+        * com/agilent/rmc/mgui/panels/RemoteDiskConf.jad
+        */
+       printf("\tserial1Present\t\t: %s\n", BD_TEXT(bd, SERIAL1));
+       printf("\ticmbPresent\t\t: %s\n", BD_TEXT(bd, ICMB));
+       printf("\tlanPresent\t\t: %s\n", BD_TEXT(bd, LAN));
+       printf("\tserial2Present\t\t: %s\n", BD_TEXT(bd, SERIAL2));
+       printf("\tserial3Present\t\t: %s\n", BD_TEXT(bd, SERIAL3));
+       printf("\tusbPresent\t\t: %s\n", BD_TEXT(bd, USB));
+       printf("\tpciPresent\t\t: %s\n", BD_TEXT(bd, PCI));
+       printf("\tlpcPresent\t\t: %s\n", BD_TEXT(bd, LPC));
+       printf("\tvgaPresent\t\t: %s\n", BD_TEXT(bd, VGA));
+       printf("\tbatteryPresent\t\t: %s\n", BD_TEXT(bd, BATTERY));
+       printf("\tacdcPresent\t\t: %s\n", BD_TEXT(bd, ACDC));
+       printf("\tstandbyPresent\t\t: %s\n", BD_TEXT(bd, STANDBY));
+       printf("\thasPowerConnectors\t: %s\n", BD_TEXT(bd, POWERCONN));
+       printf("\tdviPresent\t\t: %s\n", BD_TEXT(bd, DVI));
+       printf("\tpowerSwitchATX\t\t: %s\n", BD_TEXT(bd, PWRATX));
+       printf("\tpowerSwitchRelay\t: %s\n", BD_TEXT(bd, PWRRELAY));
+       /* 22 & 4 */
+       printf("\tps2aPresent\t\t: %s\n", BD_TEXT(bd, PS2A));
 }
 
 void handle_boarddescription(unsigned char *fw, int len, int patch)
@@ -182,15 +235,12 @@ void handle_boarddescription(unsigned char *fw, int len, int patch)
                                continue;
                        }
 
-                       printf("0x%08x: BOARD_DESCRIPTION: ", pos-fw);
-                       print_boarddescription(pos);
-
                        if (patch) {
-                               /* Enable ATX and relay power switching */
-                               pos[22] |= 0x03;
-                               printf("0x%08x: BOARD_DESCRIPTION: ", pos-fw);
-                               print_boarddescription(pos);
+                               /* Enable relay power switching */
+                               BD_SET(pos, PWRRELAY);
                        }
+                       printf("0x%08x: BOARD_DESCRIPTION: ", pos-fw);
+                       print_boarddescription(pos);
 
                        break;
                }
Impressum, Datenschutz