LEGO Mindstorms EV3


Sensors Application

//**********************************************************************
define appv 'Sensors V1.02'                                           //
//**********************************************************************
                                                                      //
/*
    128 x 112
    
    25    12
    
    1234567890123456789012345         Ycur    Xcur
        P1    P2    P3    P4
    O1 xxxx  xxxx  xxxx  xxxx         0         0     1     2     3
    I1 xxxx  xxxx  xxxx  xxxx         1
    O1 xxxx  xxxx  xxxx  xxxx         2
    I1 xxxx  xxxx  xxxx  xxxx         3
    O1 xxxx  xxxx  xxxx  xxxx         4
    I1 xxxx  xxxx  xxxx  xxxx         5
    O1 xxxx  xxxx  xxxx  xxxx         6
    I1 xxxx  xxxx  xxxx  xxxx         7


*/      
                                                                      //
define    TEST_STARTX         16                                      //
define    TEST_STARTY         11                                      //
define    SENS_STARTX         34                                      //
define    SENS_STARTY         31                                      //
define    SENS_SPACEX         32                                      //
define    SENS_SPACEY         11                                      //
                                                                      //
define    PTEXT_STARTX        SENS_STARTX                             //
define    PTEXT_STARTY        18                                      //
define    PTEXT_SPACEX        SENS_SPACEX                             //
                                                                      //
define    LTEXT_STARTX        20                                      //
define    LTEXT_STARTY        SENS_STARTY                             //
define    LTEXT_SPACEY        SENS_SPACEY                             //
                                                                      //
define    SENS_CURSOR_WIDTH   27                                      //
define    SENS_CURSOR_HEIGHT  9                                       //
                                                                      //
                                                                      //
vmthread  MAIN                                                        //  void    MAIN(void)
{                                                                     //  {
  DATA8   ShowVersion                                                 //
                                                                      //
  UI_BUTTON(PRESSED,RIGHT_BUTTON,ShowVersion)                         //    UI_BUTTON(PRESSED,RIGHT_BUTTON,ShowVersion)
  JR_FALSE(ShowVersion,DontShowVersion)                               //    if (ShowVersion)
                                                                      //    {
  UI_DRAW(FILLRECT,BG_COLOR,4,50,170,28)                              //      UI_DRAW(FILLRECT,BG_COLOR,4,50,170,28)
  UI_DRAW(RECT,FG_COLOR,6,52,166,24)                                  //      UI_DRAW(RECT,FG_COLOR,6,52,166,24)
  UI_DRAW(TEXT,FG_COLOR,13,60,appv)                                   //      UI_DRAW(TEXT,FG_COLOR,13,60,appv)
  UI_DRAW(UPDATE)                                                     //      UI_DRAW(UPDATE)
                                                                      //
ShowVersionWait:                                                      //      do
                                                                      //      {  
  UI_BUTTON(PRESSED,RIGHT_BUTTON,ShowVersion)                         //        UI_BUTTON(PRESSED,RIGHT_BUTTON,ShowVersion)
                                                                      //      }
  JR_TRUE(ShowVersion,ShowVersionWait)                                //      while (ShowVersion)
                                                                      //
  UI_BUTTON(FLUSH)                                                    //      UI_BUTTON(FLUSH)
DontShowVersion:                                                      //    }  
                                                                      //
  UI_DRAW(RESTORE,0)                                                  //    UI_DRAW(RESTORE,0)
  UI_DRAW(TOPLINE,0)                                                  //    UI_DRAW(TOPLINE,0)
  UI_BUTTON(SET_BACK_BLOCK,1)                                         //    UI_BUTTON(SET_BACK_BLOCK,1)
  UI_WRITE(LED,LED_GREEN)                                             //    UI_WRITE(LED,LED_GREEN)
                                                                      //
  CALL(TestSensors)                                                   //    TestSensors()
                                                                      //
  UI_DRAW(TOPLINE,1)                                                  //    UI_DRAW(TOPLINE,1)
  UI_BUTTON(SET_BACK_BLOCK,0)                                         //    UI_BUTTON(SET_BACK_BLOCK,0)
}                                                                     //  }
                                                                      //
                                                                      //
subcall   TestSensors                                                 //  void TestSensors(void)
{                                                                     //  {
  DATA32  Timer                                                       //
  DATA32  Time                                                        //
  DATA32  TimeOld                                                     //
  DATAF   DataF                                                       //
  DATA16  Xpoi                                                        //
  DATA16  Ypoi                                                        //
  DATA16  Xpos                                                        //
  DATA16  Ypos                                                        //
  DATA16  Ycur                                                        //
  DATA16  Xcur                                                        //
  DATA16  Inc                                                         //
  DATA8   Tmp                                                         //
  DATA8   Layer                                                       //
  DATA8   Port                                                        //
  DATA8   Figures                                                     //
  DATA8   Decimals                                                    //
  DATA8   Update                                                      //
                                                                      //
  MOVE16_16(0,Xcur)                                                   //    Xcur    =  0
  MOVE16_16(0,Ycur)                                                   //    Ycur    =  0
  MOVE8_8(1,Update)                                                   //    Update  =  1
                                                                      //
  TIMER_READ(TimeOld)                                                 //    TIMER_READ(TimeOld)
                                                                      //
                                                                      //    do
Loop:                                                                 //    {
                                                                      //
  // Control update                                                   //    
  TIMER_READ(Timer)                                                   //      TIMER_READ(Timer)
  SUB32(Timer,TimeOld,Time)                                           //      Time  =  Timer - TimeOld
  JR_LT32(Time,200,NoTimeout)                                         //      if (Time >= 200)
                                                                      //      {
  MOVE32_32(Timer,TimeOld)                                            //        TimeOld   =  Time
  MOVE8_8(1,Update)                                                   //        Update    =  1
                                                                      //
NoTimeout:                                                            //      }
                                                                      //
  // Control Xcur                                                     //
  UI_BUTTON(GET_HORZ,Inc)                                             //      UI_BUTTON(GET_HORZ,Inc)
  JR_EQ16(Inc,0,NoHorz)                                               //      if (Inc)
                                                                      //      {
  MOVE8_8(1,Update)                                                   //        Update  =  1
                                                                      //      
NoHorz:                                                               //      }
                                                                      //
  ADD16(Xcur,Inc,Xcur)                                                //      Xcur +=  Inc
  JR_GTEQ16(Xcur,0,NotTooLowX)                                        //      if (Xcur < 0)  
                                                                      //      {
  MOVE16_16(0,Xcur)                                                   //        Xcur  =  0
                                                                      //
NotTooLowX:                                                           //      }
                                                                      //
  JR_LT16(Xcur,4,NotTooHighX)                                         //      if (Xcur >= 4)
                                                                      //      {
  MOVE16_16(3,Xcur)                                                   //        Xcur  =  3
                                                                      //
NotTooHighX:                                                          //      }
                                                                      //
  // Control Ycur                                                     //
  UI_BUTTON(GET_VERT,Inc)                                             //      UI_BUTTON(GET_VERT,Inc)
                                                                      //
  JR_EQ16(Inc,0,NoVert)                                               //      if (Inc)
                                                                      //      {
  MOVE8_8(1,Update)                                                   //        Update  =  1
                                                                      //    
NoVert:                                                               //      }
                                                                      //
  ADD16(Ycur,Inc,Ycur)                                                //      Ycur +=  Inc
  JR_GTEQ16(Ycur,0,NotTooLowY)                                        //      if (Ycur < 0)
                                                                      //      {
  MOVE16_16(0,Ycur)                                                   //        Ycur  =  0
                                                                      //
NotTooLowY:                                                           //      }
                                                                      //
  JR_LT16(Ycur,8,NotTooHighY)                                         //      if (Ycur >= 8)
                                                                      //      {
  MOVE16_16(7,Ycur)                                                   //        Ycur  =  7
                                                                      //
NotTooHighY:                                                          //      }
                                                                      //
  JR_FALSE(Update,NoUpdate)                                           //      if (Update)
                                                                      //      {
  UI_DRAW(FILLWINDOW,0x00,0,0                                         //        UI_DRAW(FILLWINDOW,0x00,0,0
  UI_DRAW(SELECT_FONT,SMALL_FONT)                                     //        UI_DRAW(SELECT_FONT,SMALL_FONT)
  UI_DRAW(TEXT,FG_COLOR,0,1,'Sensors')                                //        UI_DRAW(TEXT,FG_COLOR,0,1,'Sensors')
  UI_DRAW(LINE,FG_COLOR,0,TOPLINE_HEIGHT,LCD_WIDTH,TOPLINE_HEIGHT)    //        UI_DRAW(LINE,FG_COLOR,0,TOPLINE_HEIGHT,LCD_WIDTH,TOPLINE_HEIGHT)
  UI_DRAW(SELECT_FONT,NORMAL_FONT)                                    //        UI_DRAW(SELECT_FONT,NORMAL_FONT)
                                                                      //
  UI_DRAW(SELECT_FONT,TINY_FONT)                                      //        UI_DRAW(SELECT_FONT,TINY_FONT)
                                                                      //
  // Show port number                                                 //
  MOVE16_16(PTEXT_STARTX,Xpos)                                        //        Xpos  =  PTEXT_STARTX
  UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P1')                       //        UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P1')
  ADD16(Xpos,PTEXT_SPACEX,Xpos)                                       //        Xpos +=  PTEXT_SPACEX
  UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P2')                       //        UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P2')
  ADD16(Xpos,PTEXT_SPACEX,Xpos)                                       //        Xpos +=  PTEXT_SPACEX
  UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P3')                       //        UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P3')
  ADD16(Xpos,PTEXT_SPACEX,Xpos)                                       //        Xpos +=  PTEXT_SPACEX
  UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P4')                       //        UI_DRAW(TEXT,FG_COLOR,Xpos,PTEXT_STARTY,'P4')
                                                                      //
  // Show layer number                                                //
  MOVE16_16(LTEXT_STARTY,Ypos)                                        //        Ypos  =  LTEXT_STARTY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o1')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o1')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i1')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i1')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o2')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o2')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i2')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i2')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o3')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o3')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i3')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i3')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o4')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'o4')
  ADD16(Ypos,LTEXT_SPACEY,Ypos)                                       //        Ypos +=  LTEXT_SPACEY
  UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i4')                       //        UI_DRAW(TEXT,FG_COLOR,LTEXT_STARTX,Ypos,'i4')
                                                                      //
  // Show values                                                      //
  MOVE16_16(0,Ypoi)                                                   //        Ypoi  =  0
                                                                      //        do                                                
UpdateY:                                                              //        {
  MOVE16_16(0,Xpoi)                                                   //          Xpoi  =  0
                                                                      //          do
UpdateX:                                                              //          {
  MUL16(Xpoi,SENS_SPACEX,Xpos)                                        //            Xpos  =  Xpoi * SENS_SPACEX
  ADD16(Xpos,SENS_STARTX,Xpos)                                        //            Xpos +=  SENS_STARTX
  MUL16(Ypoi,SENS_SPACEY,Ypos)                                        //            Ypos  =  Ypoi * SENS_SPACEY
  ADD16(Ypos,SENS_STARTY,Ypos)                                        //            Ypos +=  SENS_STARTY
  CALL(SensorMap,Xpoi,Ypoi,Layer,Port)                                //            SensorMap(Xpoi,Ypoi,Layer,Port)
  CALL(ReadPort,DataF,Layer,Port,Figures,Decimals)                    //            ReadPort(DataF,Layer,Port,Figures,Decimals)
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)            //            UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)
                                                                      //
  ADD16(Xpoi,1,Xpoi)                                                  //            Xpoi++
                                                                      //          }
  JR_LT16(Xpoi,4,UpdateX)                                             //          while (Xpoi < 4)
  ADD16(Ypoi,1,Ypoi)                                                  //          Ypoi++
                                                                      //        }
  JR_LT16(Ypoi,8,UpdateY)                                             //        while (Ypoi < 8)
                                                                      //
  // Show cursor                                                      //
  MUL16(Xcur,SENS_SPACEX,Xpos)                                        //        Xpos  =  Xcur * SENS_SPACEX,Xpos
  ADD16(Xpos,SENS_STARTX,Xpos)                                        //        Xpos +=  SENS_STARTX 
  SUB16(Xpos,1,Xpos)                                                  //        Xpos--
  MUL16(Ycur,SENS_SPACEY,Ypos)                                        //        Ypos  =  Ycur * SENS_SPACEY
  ADD16(Ypos,SENS_STARTY,Ypos)                                        //        Ypos +=  SENS_STARTY
  SUB16(Ypos,1,Ypos)                                                  //        Ypos--
  UI_DRAW(INVERSERECT,Xpos,Ypos,SENS_CURSOR_WIDTH,SENS_CURSOR_HEIGHT) //        UI_DRAW(INVERSERECT,Xpos,Ypos,SENS_CURSOR_WIDTH,SENS_CURSOR_HEIGHT)
                                                                      //
  // Update display                                                   //
  UI_DRAW(UPDATE)                                                     //        UI_DRAW(UPDATE)
                                                                      //
  MOVE8_8(0,Update)                                                   //        Update  =  0                                                                      
NoUpdate:                                                             //      }
                                                                      //
  UI_BUTTON(SHORTPRESS,ENTER_BUTTON,Tmp)                              //      UI_BUTTON(SHORTPRESS,ENTER_BUTTON,Tmp)
  JR_FALSE(Tmp,NotEnter)                                              //      if (Tmp)
                                                                      //      {
  CALL(SensorMap,Xcur,Ycur,Layer,Port)                                //        SensorMap(Xcur,Ycur,Layer,Port)
  CALL(SensorShow,Layer,Port)                                         //        SensorShow(Layer,Port)
  MOVE8_8(1,Update)                                                   //        Update  =  1
                                                                      //
NotEnter:                                                             //      }
                                                                      //
  // Loop until "BACK"                                                //
  UI_BUTTON(SHORTPRESS,BACK_BUTTON,Tmp)                               //      UI_BUTTON(SHORTPRESS,BACK_BUTTON,Tmp)
                                                                      //    }
  JR_FALSE(Tmp,Loop)                                                  //    while (!Tmp)
  UI_BUTTON(FLUSH)                                                    //    UI_BUTTON(FLUSH)
}                                                                     //  }
                                                                      //
                                                                      //
subcall   SensorMap                                                   //  void SensorMap(Xcur,Ycur,Layer,Port)
{                                                                     //  {
  IN_16   Xcur                                                        //
  IN_16   Ycur                                                        //
  OUT_8   Layer                                                       //
  OUT_8   Port                                                        //
                                                                      //
  MOVE16_8(Ycur,Layer)                                                //    Layer  =  Ycur
  DIV8(Layer,2,Layer)                                                 //    Layer /=  2
  MOVE16_8(Xcur,Port)                                                 //    Port   =  Xcur
  AND16(Ycur,1,Ycur)                                                  //    Ycur  &=  1
  JR_NEQ16(Ycur,0,NotOut)                                             //    if (Ycur == 0)
                                                                      //    {
  ADD8(Port,16,Port)                                                  //      Port +=  16
NotOut:                                                               //    }
}                                                                     //  }
                                                                      //
                                                                      //
subcall   ReadPort                                                    //  void ReadPort(Data,Layer,Port,Figures,Decimals)
{                                                                     //  {
  OUT_F   Data                                                        //
  IN_8    Layer                                                       //
  IN_8    Port                                                        //
  OUT_8   Figures                                                     //
  OUT_8   Decimals                                                    //
                                                                      //
  INPUT_DEVICE(GET_FIGURES,Layer,Port,Figures,Decimals)               //    INPUT_DEVICE(GET_FIGURES,Layer,Port,Figures,Decimals)
  INPUT_READSI(Layer,Port,0,-1,Data)                                  //    INPUT_READSI(Layer,Port,0,-1,Data)
                                                                      //
}                                                                     //  }
                                                                      //
                                                                      //
define    DATA_STARTX         20                                      //
define    DATA_STARTY         17                                      //
define    DATA_SPACEX         0                                       //
define    DATA_SPACEY         9                                       //
define    DATA_SPACEY2        4                                       //
                                                                      //
subcall   SensorShow                                                  //  void SensorShow(Layer,Port)
{                                                                     //  {
  IN_8    Layer                                                       //
  IN_8    Port                                                        //
                                                                      //
  DATA8   Tmp                                                         //
  DATA8   Mode                                                        //
  DATA32  Timer                                                       //
  DATA32  Raw                                                         //
  DATAF   Si                                                          //
  DATAF   SiMin                                                       //
  DATAF   SiMax                                                       //
  DATAF   DataF                                                       //
  DATA16  Xpos                                                        //
  DATA16  Ypos                                                        //
  DATA16  Inc                                                         //
  DATA8   Pct                                                         //
  DATA8   Type                                                        //
  DATA8   Connection                                                  //
  DATA8   Datasets                                                    //
  DATA8   Format                                                      //
  DATA8   SetMode                                                     //
  DATA8   Modes                                                       //
  DATA8   Views                                                       //
  DATA8   Figures                                                     //
  DATA8   Decimals                                                    //
                                                                      //
  DATAS   Name 12                                                     //
  DATAS   Symbol 5                                                    //
                                                                      //
  INPUT_DEVICE(GET_TYPEMODE,Layer,Port,Type,Mode)                     //    INPUT_DEVICE(GET_TYPEMODE,Layer,Port,Type,Mode)
  MOVE8_8(Mode,SetMode)                                               //    SetMode  =  Mode
                                                                      //    do
Loop:                                                                 //    {
                                                                      //
  UI_DRAW(FILLWINDOW,0x00,0,0                                         //      UI_DRAW(FILLWINDOW,0x00,0,0
  UI_DRAW(SELECT_FONT,SMALL_FONT)                                     //      UI_DRAW(SELECT_FONT,SMALL_FONT)
  UI_DRAW(TEXT,FG_COLOR,0,1,'Sensors')                                //      UI_DRAW(TEXT,FG_COLOR,0,1,'Sensors')
  UI_DRAW(LINE,FG_COLOR,0,TOPLINE_HEIGHT,LCD_WIDTH,TOPLINE_HEIGHT)    //      UI_DRAW(LINE,FG_COLOR,0,TOPLINE_HEIGHT,LCD_WIDTH,TOPLINE_HEIGHT)
  UI_DRAW(SELECT_FONT,NORMAL_FONT)                                    //      UI_DRAW(SELECT_FONT,NORMAL_FONT)
                                                                      //
  UI_DRAW(SELECT_FONT,TINY_FONT)                                      //      UI_DRAW(SELECT_FONT,TINY_FONT)
                                                                      //
  // Get sensor modes                                                 //
  INPUT_DEVICE(GET_FORMAT,Layer,Port,Datasets,Format,Modes,Views)     //      INPUT_DEVICE(GET_FORMAT,Layer,Port,Datasets,Format,Modes,Views)
                                                                      //
  JR_LT8(SetMode,Modes,ModeOk)                                        //      if (SetMode >= Mode)
                                                                      //      {
  MOVE8_8(Modes,SetMode)                                              //        SetMode  =  Modes
  SUB8(SetMode,1,SetMode)                                             //        SetMode--
                                                                      //
ModeOk:                                                               //      }
                                                                      //
  // Set sensor mode                                                  //
  INPUT_READ(Layer,Port,0,SetMode,Pct)                                //      INPUT_READ(Layer,Port,0,SetMode,Pct)
                                                                      //
  // Get sensor info                                                  //
  INPUT_DEVICE(GET_TYPEMODE,Layer,Port,Type,Mode)                     //      INPUT_DEVICE(GET_TYPEMODE,Layer,Port,Type,Mode)
  INPUT_DEVICE(GET_CONNECTION,Layer,Port,Connection)                  //      INPUT_DEVICE(GET_CONNECTION,Layer,Port,Connection)
  INPUT_DEVICE(GET_NAME,Layer,Port,12,Name)                           //      INPUT_DEVICE(GET_NAME,Layer,Port,12,Name)
  INPUT_DEVICE(GET_SYMBOL,Layer,Port,5,Symbol)                        //      INPUT_DEVICE(GET_SYMBOL,Layer,Port,5,Symbol)
  INPUT_DEVICE(GET_FORMAT,Layer,Port,Datasets,Format,Modes,Views)     //      INPUT_DEVICE(GET_FORMAT,Layer,Port,Datasets,Format,Modes,Views)
  INPUT_DEVICE(GET_RAW,Layer,Port,Raw)                                //      INPUT_DEVICE(GET_RAW,Layer,Port,Raw)
  INPUT_DEVICE(GET_FIGURES,Layer,Port,Figures,Decimals)               //      INPUT_DEVICE(GET_FIGURES,Layer,Port,Figures,Decimals)
  INPUT_DEVICE(GET_MINMAX,Layer,Port,SiMin,SiMax)                     //      INPUT_DEVICE(GET_MINMAX,Layer,Port,SiMin,SiMax)
  INPUT_READSI(Layer,Port,0,SetMode,Si)                               //      INPUT_READSI(Layer,Port,0,SetMode,Si)
                                                                      //
/*
    1234567890123456789012345

1   Name = nnnnnnnnnnn    sss
2   Type = ttt     Mode   = m
3   Conn = ccc
4   Modes    = m   Views  = v
5   Datasets = d   Format = f
6   Figures  = f   Dec.   = d
7
8   Raw      = rrrrrrrrrrrrr
9   Pct      = pppp
10  Si       = f.d
11
12  SiMin    = f.d
13  SiMax    = f.d
*/      
                                                                      //
  // Show sensor info                                                 //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  MOVE16_16(DATA_STARTY,Ypos)                                         //      Ypos    =  DATA_STARTY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Name = ')                          //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Name = ')
  ADD16(Xpos,35,Xpos)                                                 //      Xpos   +=  35
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,Name)                               //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,Name)
  ADD16(Xpos,75,Xpos)                                                 //      Xpos   +=  75
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,Symbol)                             //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,Symbol)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Type = ')                          //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Type = ')
  ADD16(Xpos,35,Xpos)                                                 //      Xpos   +=  35
  MOVE8_F(Type,DataF)                                                 //      DataF   =  Type
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,3,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,3,0)
  ADD16(Xpos,40,Xpos)                                                 //      Xpos   +=  16
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Mode   = ')                        //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Mode   = ')
  ADD16(Xpos,45,Xpos)                                                 //      Xpos   +=  45
  MOVE8_F(Mode,DataF)                                                 //      DataF   =  Mode
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Conn = ')                          //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Conn = ')
  ADD16(Xpos,35,Xpos)                                                 //      Xpos   +=  35
  MOVE8_F(Connection,DataF)                                           //      DataF   =  Connection
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,3,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,3,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Modes    = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Modes    = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVE8_F(Modes,DataF)                                                //      DataF   =  Modes
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
  ADD16(Xpos,20,Xpos)                                                 //      Xpos   +=  20
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Views  = ')                        //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Views  = ')
  ADD16(Xpos,45,Xpos)                                                 //      Xpos   +=  45
  MOVE8_F(Views,DataF)                                                //      DataF   =  Views
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Datasets = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Datasets = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVE8_F(Datasets,DataF)                                             //      DataF   =  Datasets
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
  ADD16(Xpos,20,Xpos)                                                 //      Xpos   +=  20
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Format = ')                        //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Format = ')
  ADD16(Xpos,45,Xpos)                                                 //      Xpos   +=  45
  MOVE8_F(Format,DataF)                                               //      DataF   =  Format
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Figures  = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Figures  = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVE8_F(Figures,DataF)                                              //      DataF   =  Figures
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
  ADD16(Xpos,20,Xpos)                                                 //      Xpos   +=  20
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Dec.   = ')                        //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Dec.   = ')
  ADD16(Xpos,45,Xpos)                                                 //      Xpos   +=  45
  MOVE8_F(Decimals,DataF)                                             //      DataF   =  Decimals
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,1,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
  ADD16(Ypos,DATA_SPACEY2,Ypos)                                       //      Ypos   +=  DATA_SPACEY2
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Raw      = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Raw      = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVE32_F(Raw,DataF)                                                 //      DataF   =  Raw
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,13,0)                        //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,13,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Pct      = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Pct      = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVE8_F(Pct,DataF)                                                  //      DataF   =  Pct
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,4,0)                         //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,4,0)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si       = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si       = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVEF_F(Si,DataF)                                                   //      DataF   =  Si
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)            //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
  ADD16(Ypos,DATA_SPACEY2,Ypos)                                       //      Ypos   +=  DATA_SPACEY2
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si min   = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si min   = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVEF_F(SiMin,DataF)                                                //      DataF   =  SiMin
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)            //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)
                                                                      //
  MOVE16_16(DATA_STARTX,Xpos)                                         //      Xpos    =  DATA_STARTX
  ADD16(Ypos,DATA_SPACEY,Ypos)                                        //      Ypos   +=  DATA_SPACEY
                                                                      //
  UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si max   = ')                      //      UI_DRAW(TEXT,FG_COLOR,Xpos,Ypos,'Si max   = ')
  ADD16(Xpos,55,Xpos)                                                 //      Xpos   +=  55
  MOVEF_F(SiMax,DataF)                                                //      DataF   =  SiMax
  UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)            //      UI_DRAW(VALUE,FG_COLOR,Xpos,Ypos,DataF,Figures,Decimals)
                                                                      //
  // Update display                                                   //
  UI_DRAW(UPDATE)                                                     //      UI_DRAW(UPDATE)
                                                                      //
  TIMER_WAIT(200,Timer)                                               //      TIMER_WAIT(200,Timer)
  TIMER_READY(Timer)                                                  //      TIMER_READY(Timer)
                                                                      //
  // Control SetMode                                                  //
  UI_BUTTON(GET_HORZ,Inc)                                             //      UI_BUTTON(GET_HORZ,Inc)
  MOVE16_8(Inc,Tmp)                                                   //      Tmp     =  Inc
                                                                      //
  ADD8(SetMode,Tmp,SetMode)                                           //      SetMode  +=  Tmp
  JR_GTEQ8(SetMode,0,NotTooLowMode)                                   //      if (SetMode < 0)
                                                                      //      {
  MOVE8_8(0,SetMode)                                                  //        SetMode  =  0
                                                                      //
NotTooLowMode:                                                        //      }
                                                                      //
  JR_LT8(SetMode,Views,NotTooHighMode)                                //      if (SetModes >= Views)
                                                                      //      {
  MOVE8_8(Views,SetMode)                                              //        SetMode  =  Views
  SUB8(SetMode,1,SetMode)                                             //        SetMode--
                                                                      //
NotTooHighMode:                                                       //      }
                                                                      //
  // Loop until "BACK"                                                //
  UI_BUTTON(SHORTPRESS,BACK_BUTTON,Tmp)                               //      UI_BUTTON(SHORTPRESS,BACK_BUTTON,Tmp)
                                                                      //    }
  JR_FALSE(Tmp,Loop)                                                  //    while (!Tmp)
                                                                      //
  UI_BUTTON(FLUSH)                                                    //    UI_BUTTON(FLUSH)
}                                                                     //  }
                                                                      //
                                                                      //
//! 

LEGO® Robotics Firmware Documentation
Confidential Information © 2013 The LEGO Group