1 // Martin Thomas 3/2008
\r
7 #include "../../BaseTinyFirmware/GCC/enums.h"
\r
8 #include "../../BaseTinyFirmware/GCC/structs.h"
\r
11 #include "bc100_slave.h"
\r
13 #ifdef BC100_SLAVE_TEST
\r
14 #include "mystdio.h"
\r
19 void bc100_slave_init( void )
\r
23 uint8_t bc100_slave_read( uint8_t cmd, size_t size, void *buf )
\r
30 #ifdef BC100_SLAVE_TEST
\r
32 uint8_t bc100_slave_test(void)
\r
36 uint32_t timevals[TIMERS];
\r
41 myprintf_P("Timers:\n");
\r
42 out = BC100_SLAVE_READ | BC100_SLAVE_SRAM | sizeof(timevals);
\r
46 myprintf_P("In1 : 0x%02x (expected 0xcc)\n", in );
\r
47 in = SPI_rw( dummy );
\r
48 myprintf_P("In2 : 0x%02x (expected 0xbb)\n", in );
\r
51 for ( i = TIMERS; i > 0; i-- ) {
\r
52 tmp = (uint32_t)(SPI_rw(dummy)) << 24;
\r
53 tmp |= (uint32_t)(SPI_rw(dummy)) << 16;
\r
54 tmp |= (uint32_t)(SPI_rw(dummy)) << 8;
\r
55 tmp |= (uint32_t)(SPI_rw(dummy)) << 0;
\r
56 timevals[i-1] = tmp;
\r
59 i = sizeof(timevals);
\r
61 *( (unsigned char*)&timevals + i ) = SPI_rw(dummy);
\r
64 for ( i=0; i<TIMERS; i++ ) {
\r
65 myprintf_P("Timer #%d = %lu (0x%08lx)\n", i, timevals[i], timevals[i] );
\r
70 myprintf_P("ADC-Status:\n");
\r
71 out = BC100_SLAVE_READ | BC100_SLAVE_SRAM | sizeof(ADCS);
\r
75 myprintf_P("In1 : 0x%02x (expected 0xcc)\n", in );
\r
76 in = SPI_rw( dummy );
\r
77 myprintf_P("In2 : 0x%02x (expected 0xbb)\n", in );
\r
80 *( (unsigned char*)&ADCS + i ) = SPI_rw(dummy);
\r
82 myprintf_P("ADC-MUX %d\n", ADCS.MUX );
\r
83 myprintf_P("Cycle complete %d\n", ADCS.Flag);
\r
84 myprintf_P("Mains OK %d\n", ADCS.Mains);
\r
85 myprintf_P("A/D halt %d\n", ADCS.Halt);
\r
86 myprintf_P("Offs ADC3 g20 %d\n", ADCS.ADC3_G20_OS);
\r
87 myprintf_P("Offs ADC5 g20 %d\n", ADCS.ADC5_G20_OS);
\r
88 myprintf_P("rawRID %d\n", ADCS.rawRID);
\r
89 myprintf_P("rawNTC %d\n", ADCS.rawNTC);
\r
90 myprintf_P("rawVBAT %d\n", ADCS.rawVBAT);
\r
91 myprintf_P("Supply %d [mV]\n", ADCS.VIN);
\r
92 myprintf_P("Batt. Voltage %d [mV]\n", ADCS.VBAT);
\r
93 myprintf_P("Batt. Current %d [mA]\n", ADCS.IBAT);
\r
94 for ( i=0; i<4; i++ ) {
\r
95 myprintf_P("DiscIBAT[%d] %d [mA]\n", i, ADCS.discIBAT[i] );
\r
97 myprintf_P("average IBAT %d [mA]\n", ADCS.avgIBAT);
\r
99 Batteries_t BattData;
\r
100 myprintf_P("Current Battery:\n");
\r
101 out = BC100_SLAVE_READ | BC100_SLAVE_SRAM | sizeof(BattData);
\r
103 out = ADR_BATTDATA;
\r
104 in = SPI_rw( out );
\r
105 myprintf_P("In1 : 0x%02x (expected 0xcc)\n", in );
\r
106 in = SPI_rw( dummy );
\r
107 myprintf_P("In2 : 0x%02x (expected 0xbb)\n", in );
\r
108 i = sizeof(BattData);
\r
109 while ( i-- > 0 ) {
\r
110 *( (unsigned char*)&BattData + i ) = SPI_rw(dummy);
\r
112 if ( BattData.Present ) {
\r
113 myprintf_P("Battery found\n");
\r
114 if ( BattData.Charged ) {
\r
115 myprintf_P("- fully charged\n");
\r
117 if ( BattData.Low ) {
\r
118 myprintf_P("- low voltage\n");
\r
120 if ( BattData.Exhausted) {
\r
121 myprintf_P("- exhausted\n");
\r
123 if ( BattData.HasRID) {
\r
124 myprintf_P("- has a ID-Resistor\n");
\r
126 myprintf_P("Safety circuit ID %d\n", BattData.Circuit );
\r
127 myprintf_P("Tempearture %d centi-degree C\n", BattData.Temperature );
\r
128 myprintf_P("ADCSteps/half degree %d\n", BattData.ADCSteps);
\r
129 myprintf_P("Capacity %d mAh\n", BattData.Capacity);
\r
130 myprintf_P("max. Current %d mA\n", BattData.MaxCurrent);
\r
131 myprintf_P("max. cut-off Time %d min\n", BattData.MaxTime);
\r
132 myprintf_P("min. cut-off Current %d mA\n", BattData.MinCurrent);
\r
135 myprintf_P("Battery not found\n");
\r
143 #endif /* BC100_SLAVE_TEST */
\r