Color sensor reset at the end of calibration added. sensor id auto assignment was changed to be a fixed value assignment to avoid sensor id shift when some sensor is absent.

Dependencies:   UniGraphic mbed vt100

Committer:
Rhyme
Date:
Fri Feb 23 07:51:55 2018 +0000
Revision:
1:8818b793d147
Parent:
0:ce97f6d34336
Wrong behavior when one of color sensor is missing has been fixed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:ce97f6d34336 1 #include "mbed.h"
Rhyme 0:ce97f6d34336 2 #include "vt100.h"
Rhyme 0:ce97f6d34336 3 #include "afLib.h"
Rhyme 0:ce97f6d34336 4 #include "af_mgr.h"
Rhyme 0:ce97f6d34336 5 #include "edge_mgr.h"
Rhyme 0:ce97f6d34336 6 #include "edge_time.h"
Rhyme 0:ce97f6d34336 7 #include "edge_reset_mgr.h"
Rhyme 0:ce97f6d34336 8 /**
Rhyme 0:ce97f6d34336 9 * afero poc1.5 25-Dec-2017 version
Rhyme 0:ce97f6d34336 10 * from this version, watch dog timer joined again.
Rhyme 0:ce97f6d34336 11 */
Rhyme 0:ce97f6d34336 12
Rhyme 0:ce97f6d34336 13 vt100 *tty = 0 ;
Rhyme 0:ce97f6d34336 14 uint32_t wait_tolerance = 500 ; /* 5sec */
Rhyme 0:ce97f6d34336 15 uint32_t connect_tolerance = 60 ; /* after 60 trials, reboot */
Rhyme 0:ce97f6d34336 16 uint32_t wait_count = 0 ;
Rhyme 0:ce97f6d34336 17 uint32_t connect_trial_count = 0 ;
Rhyme 0:ce97f6d34336 18
Rhyme 0:ce97f6d34336 19 /**
Rhyme 0:ce97f6d34336 20 * wait_connection
Rhyme 0:ce97f6d34336 21 * When gConnected == false, which is connection is lost.
Rhyme 0:ce97f6d34336 22 * Each 5sec check attribute ATTR_WIFI_STDY_STATE to see
Rhyme 0:ce97f6d34336 23 * if the connection has recovered.
Rhyme 0:ce97f6d34336 24 * Meantime even if connection is established communicated
Rhyme 0:ce97f6d34336 25 * data is invalid, so AF_SYSTEM_ASR_STATE is also
Rhyme 0:ce97f6d34336 26 * checked for gLinked ;
Rhyme 0:ce97f6d34336 27 * And in case connect_tolerance trials failed
Rhyme 0:ce97f6d34336 28 * try to reboot the system if it can improve the situation.
Rhyme 0:ce97f6d34336 29 */
Rhyme 0:ce97f6d34336 30 void wait_connection(void)
Rhyme 0:ce97f6d34336 31 {
Rhyme 0:ce97f6d34336 32 int result ;
Rhyme 0:ce97f6d34336 33 wait_count++ ;
Rhyme 0:ce97f6d34336 34 if (wait_count > wait_tolerance) {
Rhyme 0:ce97f6d34336 35 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 36 if (gConnected == false) {
Rhyme 0:ce97f6d34336 37 result = afero->getAttribute(ATTR_WIFI_STDY_STATE) ;
Rhyme 0:ce97f6d34336 38 if (result != afSUCCESS) {
Rhyme 0:ce97f6d34336 39 print_af_error(result) ;
Rhyme 0:ce97f6d34336 40 }
Rhyme 0:ce97f6d34336 41 }
Rhyme 0:ce97f6d34336 42 if (gLinked == false) {
Rhyme 0:ce97f6d34336 43 result = afero->getAttribute(AF_SYSTEM_ASR_STATE) ;
Rhyme 0:ce97f6d34336 44 if (result != afSUCCESS) {
Rhyme 0:ce97f6d34336 45 print_af_error(result) ;
Rhyme 0:ce97f6d34336 46 }
Rhyme 0:ce97f6d34336 47 }
Rhyme 0:ce97f6d34336 48 connect_trial_count++ ;
Rhyme 0:ce97f6d34336 49 if (connect_trial_count > connect_tolerance) {
Rhyme 0:ce97f6d34336 50 reboot_edge() ;
Rhyme 0:ce97f6d34336 51 }
Rhyme 0:ce97f6d34336 52 wait_count = 0 ;
Rhyme 0:ce97f6d34336 53 }
Rhyme 0:ce97f6d34336 54 }
Rhyme 0:ce97f6d34336 55
Rhyme 0:ce97f6d34336 56 void init_hardware(void)
Rhyme 0:ce97f6d34336 57 {
Rhyme 0:ce97f6d34336 58 int i ;
Rhyme 0:ce97f6d34336 59 int result ;
Rhyme 0:ce97f6d34336 60
Rhyme 0:ce97f6d34336 61 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 62 init_display() ;
Rhyme 0:ce97f6d34336 63 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 64 init_aflib() ;
Rhyme 0:ce97f6d34336 65 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 66 init_sensors() ;
Rhyme 0:ce97f6d34336 67 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 68 init_timer() ;
Rhyme 0:ce97f6d34336 69
Rhyme 0:ce97f6d34336 70 while(true) {
Rhyme 0:ce97f6d34336 71 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 72 for (i = 0 ; i < 10 ; i++ ) {
Rhyme 0:ce97f6d34336 73 afero->loop() ;
Rhyme 0:ce97f6d34336 74 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 75 }
Rhyme 0:ce97f6d34336 76 if ((gLinked == true)&&(gConnected == true)) {
Rhyme 0:ce97f6d34336 77 wait_count = 0 ;
Rhyme 0:ce97f6d34336 78 connect_trial_count = 0 ;
Rhyme 0:ce97f6d34336 79 if (afero->isIdle()) {
Rhyme 0:ce97f6d34336 80 result = init_edge_attribute() ;
Rhyme 0:ce97f6d34336 81 if (result == 0) {
Rhyme 0:ce97f6d34336 82 break ;
Rhyme 0:ce97f6d34336 83 }
Rhyme 0:ce97f6d34336 84 }
Rhyme 0:ce97f6d34336 85 } else { /* gLinked == false */
Rhyme 0:ce97f6d34336 86 wait_connection() ;
Rhyme 0:ce97f6d34336 87 }
Rhyme 0:ce97f6d34336 88 wait_ms(10) ;
Rhyme 0:ce97f6d34336 89 }
Rhyme 0:ce97f6d34336 90 do {
Rhyme 0:ce97f6d34336 91 // while(!afero->isIdle()) {
Rhyme 0:ce97f6d34336 92 reset_watch_dog() ;
Rhyme 0:ce97f6d34336 93 for (i = 0 ; i < 10 ; i++ ) {
Rhyme 0:ce97f6d34336 94 afero->loop() ;
Rhyme 0:ce97f6d34336 95 wait_ms(100) ;
Rhyme 0:ce97f6d34336 96 }
Rhyme 0:ce97f6d34336 97 } while(!afero->isIdle()) ;
Rhyme 0:ce97f6d34336 98 edge_mgr_status = EDGE_MGR_RUNNING ;
Rhyme 0:ce97f6d34336 99 }
Rhyme 0:ce97f6d34336 100
Rhyme 0:ce97f6d34336 101 // main() runs in its own thread in the OS
Rhyme 0:ce97f6d34336 102 int main() {
Rhyme 0:ce97f6d34336 103 static uint32_t count_robin = 0 ;
Rhyme 0:ce97f6d34336 104
Rhyme 0:ce97f6d34336 105 tty = new vt100() ;
Rhyme 0:ce97f6d34336 106 // tty->cls() ;
Rhyme 0:ce97f6d34336 107 printf("Afero test program (ver. %s) started\n", __DATE__) ;
Rhyme 0:ce97f6d34336 108 printf("=== Reset Reason ===\n") ;
Rhyme 0:ce97f6d34336 109 print_reset_reason() ;
Rhyme 0:ce97f6d34336 110 printf("====================\n") ;
Rhyme 0:ce97f6d34336 111
Rhyme 0:ce97f6d34336 112 init_hardware() ;
Rhyme 0:ce97f6d34336 113
Rhyme 0:ce97f6d34336 114 edge_splash() ;
Rhyme 0:ce97f6d34336 115
Rhyme 0:ce97f6d34336 116 while (true) {
Rhyme 0:ce97f6d34336 117 count_robin++ ;
Rhyme 0:ce97f6d34336 118 afero->loop() ;
Rhyme 0:ce97f6d34336 119 if ((gLinked == true)&&(gConnected == true)) {
Rhyme 0:ce97f6d34336 120 wait_count = 0 ;
Rhyme 0:ce97f6d34336 121 connect_trial_count = 0 ;
Rhyme 0:ce97f6d34336 122 if (afero->isIdle()) {
Rhyme 0:ce97f6d34336 123 edge_loop(count_robin) ;
Rhyme 0:ce97f6d34336 124 }
Rhyme 0:ce97f6d34336 125 } else { /* gLinked == false */
Rhyme 0:ce97f6d34336 126 wait_connection() ;
Rhyme 0:ce97f6d34336 127 }
Rhyme 0:ce97f6d34336 128 wait_ms(10) ;
Rhyme 0:ce97f6d34336 129 }
Rhyme 0:ce97f6d34336 130 }