execute all tests just once
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 19 Jul 2020 11:01:03 +0000 (13:01 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 19 Jul 2020 11:01:03 +0000 (13:01 +0200)
15 files changed:
c2_ulx3s_test/adc.cpp
c2_ulx3s_test/adc.h
c2_ulx3s_test/btn.cpp
c2_ulx3s_test/btn.h
c2_ulx3s_test/c2_ulx3s_test.ino
c2_ulx3s_test/dac.cpp
c2_ulx3s_test/dac.h
c2_ulx3s_test/edid.cpp
c2_ulx3s_test/edid.h
c2_ulx3s_test/flash.cpp
c2_ulx3s_test/flash.h
c2_ulx3s_test/rtc.cpp
c2_ulx3s_test/rtc.h
c2_ulx3s_test/sd.cpp
c2_ulx3s_test/sd.h

index 47f89b0..17ad139 100644 (file)
@@ -137,8 +137,9 @@ void adc_init()
   configureMax1112x();
 }
 
-void adc_read(char *a)
+int adc_read(char *a)
 {
+  int ret = 0;
   static uint8_t skip_eval = 5; // skip evaluation for first few readings
   static uint16_t reading[10], prev_reading[10];
   // alternating LED state will also alternate
@@ -175,16 +176,18 @@ void adc_read(char *a)
       {
         if(i & 1)
         {
-          if(reading[i] < ((i << 12) + 0x080) && prev_reading[i] > ((i << 12) + 0xF80) )
+          if(reading[i] < ((i << 12) + 0x080) && prev_reading[i] > ((i << 12) + 0xF80) ) {
             channel_eval[i] = " OK ";
-          else
+            ret++;
+          } else
             channel_eval[i] = "FAIL";
         }
         else
         {
-          if(prev_reading[i] < ((i << 12) + 0x080) && reading[i] > ((i << 12) + 0xF80) )
+          if(prev_reading[i] < ((i << 12) + 0x080) && reading[i] > ((i << 12) + 0xF80) ) {
             channel_eval[i] = " OK ";
-          else
+            ret++;
+          } else
             channel_eval[i] = "FAIL";
         }
       }
@@ -229,4 +232,5 @@ void adc_read(char *a)
     else
       *gpio1_out |= gpio1_bits;
   }
+  return ret;
 }
index ccecebe..dab61a8 100644 (file)
@@ -1,2 +1,2 @@
 void adc_init();
-void adc_read(char *a);
+int adc_read(char *a);
index 61ea201..76ece4b 100644 (file)
@@ -14,10 +14,38 @@ void btn_init()
     pinMode(i, OUTPUT);
 }
 
-void btn_read(char *line)
+uint8_t btn[6];
+uint8_t btn_toggle[6] = { 0,0,0,0,0,0 };
+
+int btn_read(char *line)
 {
+  int ret = 0;
   static uint8_t shiftdata = 0;
   uint8_t led = B10001 << (shiftdata++ & 3);
+
+  Serial.print("btn_toggle=");
+  for(int i=0; i<=6; i++) {
+    btn[i] = digitalRead(i);
+    if ( i == 0 ) btn[i] = !btn[i];
+    if ( btn[i] ) {
+      digitalWrite(8+i, 1);
+      if ( btn_toggle[i] == 0 ) {
+        btn_toggle[i]++; // press
+      }
+    } else {
+      digitalWrite(8+i, 0);
+      if ( btn_toggle[i] == 1 ) {
+        btn_toggle[i]++; // release
+      }
+    }
+    if (btn_toggle[i] == 2) {
+      ret++;
+      //digitalWrite(8+i, 1);
+    }
+    Serial.print(btn_toggle[i]);
+  }
+  Serial.println();
+  
   sprintf(line, "BTN:%c%c%c%c%c%c%c SW:%c%c%c%c LED:%c%c%c%c%c%c%c%c\n",
     digitalRead(0) ? '_' : '0',
     digitalRead(1) ? '1' : '_',
@@ -39,6 +67,7 @@ void btn_read(char *line)
     led & B00000010 ? '1' : '_',
     led & B00000001 ? '0' : '_'
   );
-  for(int i = 0; i < 8; i++)
-    digitalWrite(8+i, led & (1<<i) ? 1 : 0);
+  //for(int i = 0; i < 8; i++)
+  //  digitalWrite(8+i, led & (1<<i) ? 1 : 0);
+  return ret;
 }
index f0f3231..8f9a428 100644 (file)
@@ -1,2 +1,2 @@
 void btn_init();
-void btn_read(char *line);
+int btn_read(char *line);
index ff0493c..475319c 100644 (file)
@@ -96,6 +96,7 @@ void video_init()
 
 void setup()
 {
+  Serial.println("setup start");
   video_init();
   rtc_init();
   adc_init();
@@ -104,22 +105,74 @@ void setup()
   oled_init();
   rds_init();
   pcm_init();
+  rtc_set_clock();
+  rtc_set_alarm();
+  Serial.println("setup end");
 }
 
+int rtc_ok = 0;
+int edid_ok = 0;
+int adc_ok = 0;
+int dac_ok = 0;
+int btn_ok = 0;
+int flash_ok = 0;
+int sd_ok = 0;
+
+int all_ok = 0;
+int last_all_ok = -1;
+
+int led_beat = 0;
+
+
 void loop()
 {
   static uint8_t counter = 0;
   const int nlines = 6;
   char line[nlines][256];
+
+  digitalWrite(8+7, led_beat);
+  led_beat = !led_beat;
+
+#if 0
   if(1 & ++counter)
     pcm_tone();
   else
     pcm_mute();
-  rtc_read(line[0]);
-  edid_read(line[1]);
-  adc_read(line[2]);
-  dac_read(line[3]);
-  btn_read(line[4]); // buttons. DIP switches and blink LEDs
+#endif
+
+  if ( rtc_ok == 0 ) rtc_ok = rtc_read(line[0]);
+  if ( rtc_ok == 1 ) {
+    Serial.println("RTC OK");
+    rtc_ok++;
+    all_ok++;
+  }
+  if ( edid_ok == 0 ) edid_ok = edid_read(line[1]);
+  if ( edid_ok == 1 ) {
+    Serial.println("EDID OK");
+    edid_ok++;
+    all_ok++;
+  }
+  if ( adc_ok < 8 ) adc_ok = adc_read(line[2]);
+  if ( adc_ok == 8 ) {
+    Serial.println("ADC OK");
+    adc_ok++;
+    all_ok++;
+  }
+  if ( dac_ok == 0 ) dac_ok = dac_read(line[3]);
+  if ( dac_ok == 1 ) {
+    Serial.println("DAC OK");
+    dac_ok++;
+    all_ok++;
+  }
+  
+  int btn = btn_read(line[4]); // buttons. DIP switches and blink LEDs
+  if ( btn_ok == 0 && btn == 7 ) {
+    Serial.println("BTN OK");
+    btn_ok++;
+    all_ok++;
+  }
+
+#if 0
   if(line[4][5] == '1') // BTN1 pressed
   {
     rtc_set_clock();
@@ -131,19 +184,40 @@ void loop()
     volatile uint32_t *simple_out = (uint32_t *)0xFFFFFF10;
     simple_out[0] |= (1<<13); // bit 13 of simple_out is shutdown
   }
+#endif
   char flash_str[64], sd_str[64], oled_str[64];
-  flash_read(flash_str);
-  sd_read(sd_str); // esp32 must be flashed not to access SD card
+  if ( flash_ok == 0 ) flash_ok = flash_read(flash_str);
+  if ( flash_ok == 1 ) {
+    Serial.println("FLASH OK");
+    flash_ok++;
+    all_ok++;
+  }
+  
+  if ( sd_ok == 0 ) sd_ok = sd_read(sd_str); // esp32 must be flashed not to access SD card
+  if ( sd_ok == 1 ) {
+    Serial.println("SD OK");
+    sd_ok++;
+    all_ok++;
+  }
+
+#if 0
   oled_read(oled_str);
+#endif
+
+  Serial.print("all_ok=");
+  Serial.println(all_ok);
+
   sprintf(line[5], "%s %s   %s\n", flash_str, oled_str, sd_str);
   line[6][0]='\0';
   //ram_test(line[5]); // works but too slow, need speedup
   Serial.println("");
   for(int i = 0; i < nlines; i++)
     Serial.print(line[i]);
+
   cls();
   for(int i = 0; i < nlines; i++)
     prints(line[i]);
+  
   while((*c2.vblank_reg & 0x80) == 0);
   c2.sprite_refresh();
   // delay(1000);
index 9734a84..7b6272b 100644 (file)
@@ -41,8 +41,9 @@ void dac_decode(char *a, uint8_t v)
 }
 
 
-void dac_read(char *a)
+int dac_read(char *a)
 {
+  int ret = 0;
   uint32_t probeword, checkword, difference;
   // static uint8_t counter = 0; // moving bit for detection state
   uint32_t i;
@@ -75,4 +76,6 @@ void dac_read(char *a)
       dac_v,
       (fail & 0xF00) == 0 ? " OK " : "FAIL"
   );
+  if ((fail & 0xFFF) == 0) ret++;
+  return ret;
 }
index d13b765..b5c171f 100644 (file)
@@ -1,2 +1,2 @@
 void dac_init();
-void dac_read(char *a);
+int dac_read(char *a);
index ab0c1d5..739bdbb 100644 (file)
@@ -35,7 +35,7 @@ int inByte = 0;         // incoming serial byte
 int count = 0; 
 char edidarray[128];
 
-void edid_setup()
+int edid_setup()
 {
   Wire.setClock(100000L); // 100000-400000
   Wire.begin();        // join i2c bus (address optional for master)
@@ -265,8 +265,10 @@ void edid_loop()
   }
 }
 
-void edid_read(char *a)
+int edid_read(char *a)
 {
+  int ret = 0;
+
   for(byte i = 0; i < 128; i++)
     edidarray[i] = i;
   int edid_count = edidreadbytes(edidarray);
@@ -276,4 +278,6 @@ void edid_read(char *a)
     edid_checksum,
     edid_checksum == 0 ? "OK" : "FAIL"
   );
+  if ( edid_checksum == 0 ) ret++;
+  return ret;
 }
index ffd7262..2b05066 100644 (file)
@@ -1,3 +1,3 @@
 int edidreadbytes(char *array);
 byte edidchecksum(char *array);
-void edid_read(char *a);
+int edid_read(char *a);
index 56c65ef..f9c6f6e 100644 (file)
@@ -14,11 +14,14 @@ uint8_t flash_id(void)
 }
 
 // set up variables using the SD utility library functions:
-void flash_read(char *a)
+int flash_read(char *a)
 {
+  int ret = 0;
   uint8_t id = flash_id();
-  if(id >= 0x15 && id <= 0x17)
+  if(id >= 0x15 && id <= 0x17) {
     sprintf(a, "FLASH: %02x OK  ", id);
-  else
+    ret = 1;
+  } else
     sprintf(a, "FLASH: %02x FAIL", id);
+  return ret;
 }
index 9300137..2dd43d6 100644 (file)
@@ -1 +1 @@
-void flash_read(char *a);
+int flash_read(char *a);
index e9c6493..6bc97f5 100644 (file)
@@ -48,7 +48,7 @@ void rtc_set_clock()
   regwrite(0x03, 0x07 | 8); // weekday | battery_backup
   regwrite(0x02, 0x23); // hour
   regwrite(0x01, 0x59); // minute
-  regwrite(0x00, 0x00 | 0x80); // second | start_oscillator
+  regwrite(0x00, 0x58 | 0x80); // second | start_oscillator
 }
 
 void rtc_set_alarm()
@@ -74,13 +74,20 @@ void rtc_init() {
   regwrite(0x08, 0x45);
 }
 
-void rtc_read(char *a)
+int rtc_read(char *a)
 {
+  int ret = 0;
   char *eval;
   uint8_t yr = regread(0x06,1) & 0x3F;
-  if(yr >= 0x17 && yr <= 0x18)
-    eval = regread(0x0D,1) & 8 ? " OK " : "WAIT";
-  else
+  if(yr >= 0x17 && yr <= 0x18) {
+    //eval = regread(0x0D,1) & 8 ? " OK " : "WAIT";
+    if ( regread(0x0D,1) & 8 ) {
+      eval = " OK ";
+      ret = 1;
+    } else {
+      eval = "WAIT";
+    }
+  } else
     eval = "FAIL";
   sprintf(a, "20%02x-%02x-%02x %02x:%02x:%02x %s *-%02x %02x:%02x:%02x\n",
     regread(0x06,1) & 0x3F, // year
@@ -95,4 +102,5 @@ void rtc_read(char *a)
     regread(0x0B,1) & 0x7F, // alarm minute
     regread(0x0A,1) & 0x7F  // alarm second
   );
+  return ret;
 }
index b5975a5..29fa131 100644 (file)
@@ -1,5 +1,5 @@
 void rtc_init();
-void rtc_read(char *a);
+int rtc_read(char *a);
 void rtc_set_alarm();
 void rtc_set_clock();
 void rtc_clear_interrupts();
index 6a10f51..76f1ac1 100644 (file)
@@ -41,8 +41,9 @@ Sd2Card card;
 SdVolume volume;
 SdFile root;
 // reading sd card type is slow
-void sd_read(char *a)
+int sd_read(char *a)
 {
+  int ret = 0;
   char *cardtype;
   if (card.init(SPI_HALF_SPEED, 2))
   {
@@ -61,10 +62,12 @@ void sd_read(char *a)
       cardtype = "? ";
     }
     sprintf(a, "SD: %s OK", cardtype);
+    ret = 1;
   }
   else
   {
     sprintf(a, "SD: FAIL ");
   }
+  return ret;
 }
 #endif
index 08f8748..0b7e8f1 100644 (file)
@@ -1 +1 @@
-void sd_read(char *a);
+int sd_read(char *a);