⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 uccos2的的源码文件
💻 C
📖 第 1 页 / 共 2 页
字号:
//
// 滚动显示窗口
// by liaonh 2008/1
//

#include "config.h"
#include "test.h"
#include "S3C2410.h"
#include "control.h"

const char* gstr_exit = "ESC键或者点击屏幕右下角退出";
const char* gstr_welcome = "Welcome To GEC uC/OS-II";
int isMultiTask = 0;

int FetchChar(void)
{
    int ch = -1;
    int x,y,mouse;

    ch = kbhit();
    mouse = GetMousePos(&x,&y);
    if( ch == 0 )
    {// 检测鼠标动作
        mouse = MouseDown();
        if( mouse == MS_PRESSING )
            ch = MOUSE_DOWN;
        else if( mouse == MS_RELEASING )
            ch = MOUSE_RELEASE;
        else if( mouse == MS_PRESSED)
            ch = MOUSE_MOVE;
    }

    if( ch == 0 )
    {
        if( isMultiTask )
            OSTimeDly(OS_TICKS_PER_SEC/10);
    }

    return ch;
}



int PrintfFlag = 1;
char buffer[1024*2];
int myprintf(char* format,...)
{
	int n;
	va_list ap;

	va_start(ap, format);
	n = vsprintf(buffer,format,ap);
	va_end(ap);

    if( PrintfFlag & 0x01 )
    	UART_SendStr(buffer);
    if( PrintfFlag & 0x02 )
        AppendText(buffer);
	return n;
}

void printbuf(const void* pdata,int len)
{
    int i;
    const unsigned char* ptr = (unsigned char*)pdata;

    for( i = 0; i < len ; i++,ptr++)
    {
        printf("%02x ",*ptr);
        if( (i%8) == 7 )
             printf("\r\n");
        else if( (i%8) == 7 )
            printf(" ");
    }
    printf("\r\n");
}

unsigned int _5ms = 0;
unsigned int _10ms = 0;
unsigned int _100ms = 0;

void Pollint(void)
{
    if ( 0 == PollintFlag )
        return;
    PollintFlag = 0;
    if( ++_5ms >= 2 )
    {
        _5ms = 0;
        if( ++_10ms >= 10 )
        {
            _10ms = 0;
            if( ++_100ms == 100 )
            {
                _100ms = 0;
            }
        }
    }
}


char kbhit(void)
{
   static unsigned int lastkeytime = 0;
   unsigned short ch = 0;
   if( rUTRSTAT0 & 0x1 )
   {
        ch = RdURXH0();
        UART_SendByte(ch);
   }
   else if( lastkeytime < RunTimeMs )
   {
       ch = Keyboard_GetKey();
       ch &= 0xff;
       lastkeytime = RunTimeMs;
       if( ch != 0 )
          lastkeytime +=  250;

       switch(ch)
       {
           case 0x01: ch = '0'; break;
           case 0x05: ch = '1'; break;
           case 0x09: ch = '2'; break;
           case 0x0d: ch = '3'; break;
           case 0x02: ch = '4'; break;
           case 0x06: ch = '5'; break;
           case 0x0a: ch = '6'; break;
           case 0x0e: ch = '7'; break;
           case 0x03: ch = '8'; break;
           case 0x10: ch = '9'; break;
           case 0x0b: ch = KEY_PAGEUP; break;
           case 0x0f: ch = KEY_PAGEDOWN; break;
           case 0x04: ch = KEY_ENTER; break;
           case 0x08: ch = KEY_DOWN; break;
           case 0x0c: ch = KEY_UP; break;
           case 0x07: ch = KEY_ESC; break;
           default: ch = 0; break;
       }
   }

    if( ch == 0x18 || ch == 0x19 )
    {
        SendImage(ch==0x18);
    }


   return ch;
}

char getch(void)
{
     char ch;
     while(!(rUTRSTAT0 & 0x1)); //Receive data ready
     ch = RdURXH0();
     UART_SendByte(ch);
     return ch;
}


char gstr_Input[200];
int gi_InputLen;

void ShowInput(void)
{
    gstr_Input[gi_InputLen] = 0;
    if( gi_InputLen < 32 )
       StatusMessage("");
    StatusMessage(gstr_Input);
}

void ClearInput(void)
{
    gi_InputLen = 0;
    memset(gstr_Input,0,sizeof(gstr_Input));
    ShowInput();
}
int InputStr(const char* msg,const char* initstr)
{
    int toExit = 0;
    char ch;

    ResetTextOut();
    TextOut(2,SH-50,msg);
    if( initstr && initstr[0] )
    {
        gi_InputLen = sprintf(gstr_Input,initstr);
        ShowInput();
    }

    while( !toExit )
    {
        PollintNet();
        ch = kbhit();
        switch( ch )
        {
            case KEY_ESC:
                if( gi_InputLen <= 0 )
                {
                    return 0;
                }
                else
                {
                    ClearInput();
                    ShowInput();
                }
                break;
            case KEY_ENTER: return 1;
            case 0x08:
                if( gi_InputLen > 0 )
                {
                      gstr_Input[--gi_InputLen] = 0;
                      ShowInput();
                }
                break;
            default:
                if(  ch >= 0x20 && ch <= 0x80 )
                {
                    if( gi_InputLen < (sizeof(gstr_Input)-1) )
                    {
                        gstr_Input[gi_InputLen++] = ch;
                        gstr_Input[gi_InputLen] = 0;
                        ShowInput();
                    }
                }
                break;
        }
       toExit = IsToMouseExit();
    }
}


#define MENU_BEEP       1
#define MENU_GPRS       2
#define MENU_MOTOR      3
#define MENU_AUDIO      4
#define MENU_MORE       5
#define MENU_NET        6
#define MENU_REBOOT     7
#define MENU_ucGUI      8
#define MENU_CANBUS     9
#define MENU_IO         10
#define MENU_RF         11




#define MENU_MULTITASK  0xf0


void SystemReboot(void)
{
    //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset enable
    rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<0);
    rWTDAT = 0x0;                              //for first update
    rWTCNT = 0x0;                              //resolution=64us @any PCLK
    rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5)|(1<<0); //Watch-dog timer start
    OS_ENTER_CRITICAL();
    while(1);
    OS_EXIT_CRITICAL();
}

void QuickReboot(void)
{
  typedef void (*PFF)(void);
  PFF pf = (PFF)0x30200000;

  (*pf)();
}

int test_default(int v)
{
    switch(v)
    {
        case 201: SystemReboot(); break;
        case 202: QuickReboot();  break;
    }
}

Menu gstr_MainMenu[] =
{
{"触摸屏,A/D",0,test_touchpad},
{"直流/步进电机",MENU_MOTOR,0},
{"GPS/GPRS",MENU_GPRS,0},
{"音频输入输出",MENU_AUDIO,0},
{"蜂鸣器/数码管",MENU_BEEP,0},
{"2x2Keys/键盘",0,test_keys},
{"系统重启",201,test_default},
{"快速重启",202,test_default},
{"更多...",MENU_MORE,0},
{0,0,0}
};

unsigned short HZ2UC(const char* src);
unsigned short UC2HZ(unsigned short uc);

MenuSetting set;
MenuSetting bakset;
Menu* CurrentMenu;
int CurrentMenuIdx = 0;

void InitMenuSet(MenuSetting* pset)
{
    memset(pset,0,sizeof(*pset));
    pset->maincaption = gstr_welcome;
    pset->linespace = 6;
    pset->ex = 2;
    pset->ey = 2;
    pset->x = 260;
    pset->y = 70;
    pset->captionx = 180;
    pset->captiony = 30;
}

void InitIP(void);

typedef void (*PFF)(void);
void testit(void)
{
    int bakItem;

    InitIP();
    SetHoriEnlarge(2);
    SetVertEnlarge(2);
    SetTextColor(COLOR_WHITE);
    SetTextMode(TM_HALFTRANSPARENT2);
    Beep(4000,500);
    for( bakItem = 5; bakItem > 0; bakItem-- )
    {
        sprintf((char*)buf,"uc/OS-II正在启动...%-2d",bakItem);
        TextOut(SW/4,SH*4/5,(char*)buf);
        if( kbhit() )
            Delay(300);
        Delay(300);
    }
    ResetTextOut();
    RestoreDesktop();
    while(1)
    {
        InitMenuSet(&set);
        switch( CurrentMenuIdx )
        {
         case MENU_BEEP:
             CurrentMenu = gstr_BeepMenu;
             break;
         case  MENU_GPRS:
             ClearText();
             set.pIdleAction = test_gprs_idle;
             CurrentMenu = gstr_GprsMenu;
#ifdef INCLUDE_UART1_INTTERUPT
             Uart1Set(1);
#endif
            break;
         case MENU_MOTOR:
             CurrentMenu = gstr_MotorMenu;
            break;
         case MENU_MORE:
             CurrentMenu = gstr_MoreMenu;
            break;
        case MENU_CANBUS:
            set.pIdleAction = test_canbus_idle;
            set.linespace = 1;
            CurrentMenu = gstr_CANMenu;
           break;
       case MENU_IO:
           CurrentMenu = gstr_IOMenu;
          break;
      case MENU_RF:
          CurrentMenu = gstr_RFMenu;
         break;
        case MENU_NET:
            set.pIdleAction = test_net_idle;
            CurrentMenu = gstr_NetMenu;
           break;
         case MENU_AUDIO:
             set.pIdleAction = test_Audito_idle;
             CurrentMenu = gstr_AudioMenu;
            break;
        case MENU_ucGUI:
           {
           extern Menu gstr_TestucGUIMenu[];
           set.maincaption = "Welcome To ucGUI";
           CurrentMenu = gstr_TestucGUIMenu;
           set.linespace = 1;
           }
           break;
         case MENU_MULTITASK:
            isMultiTask = !isMultiTask;
            break;
         default:
            CurrentMenu = gstr_MainMenu;
            set.CurrentItem = bakItem;
            break;
        }
        CurrentMenuIdx = ExecMenu(CurrentMenu,&set);
        if( CurrentMenu == gstr_MainMenu )
            bakItem = set.CurrentItem;
        ClearText();
        RestoreDesktop();
    }
}

int test_touchpad(int para)
{
    int adflag = 0;
    int toExit = 0;
    char buffer[32];
    unsigned char lastch = 0;
    int x,y,sx,sy;
    unsigned char ch;

    RestoreDesktop();
    TextOut(2,SH-FONT_HEIGHT-2,gstr_exit);
    SetTextMode(TM_NOTTRANSPARENT);
    SetHoriEnlarge(2);
    SetVertEnlarge(2);

    TouchFlag = 1;

    while(!toExit)
    {
        ch = GetMousePos(&x, &y);
        sx = TX2SX(x);
        sy = TY2SY(y);
        if ( ch )
        {
            sprintf(buffer,"鼠标位置:%3d,%3d >> %3d,%3d",x,y,sx,sy);
            TextOut(0,0,buffer);
        }

        switch( MouseDown())
        {
           case MS_RELEASING:
                sprintf(buffer,"鼠标释放:%3d,%3d >> %3d,%3d",x,y,sx,sy);
                TextOut(0,40,buffer);
                if( IsPtInRect(sx,sy,SW-50,SH-50,50,50) )
                {
                    toExit = 1;
                }
                break;
            case MS_PRESSING:
                 sprintf(buffer,"鼠标按下:%3d,%3d >> %3d,%3d",x,y,sx,sy);
                 TextOut(0,40,buffer);
                 break;
        }


        ch = kbhit();
        switch(ch)
        {
            case 0: break;
            case KEY_ESC: toExit = 1;
                Touch_Screen_Off();
            default:
                if( ch >= 0xa1  )
                {
                    if ( lastch == 0 )
                    {
                        lastch = ch;
                        break;
                    }
                    else
                    {
                           sprintf(buffer,"Key '%c%c' = 0x%04x",lastch,ch,lastch*0x100+ch);
                    }
                }
                else
                {
                    sprintf(buffer,"Key '%c' = 0x%02x   ",ch,ch);
                }
                lastch = 0;
                TextOut(0,400,buffer);
                break;
        }

        Pollint();
        if( _10ms == 1 && adflag == 0 )
        {
            adflag = 1;
            ShowADSample(0);
        }
        else if( _10ms == 6 && adflag == 0 )
        {
            adflag = 1;
            ShowADSample(1);
        }
        else
        {
            adflag = 0;
        }

    }
    ResetTextOut();
    TouchFlag = 0;
    return MENU_RETAIN;
}


void ShowADSample(int ch)
{
    char buffer[32];
    unsigned long ad;
    AD_init();
    start_adc(ch);
    ad = read_value();
    sprintf(buffer,"A/D通道%d:0x%06x >> %d",ch,ad,ad);
    ch += 3;
    TextOut(2,2+FONT_HEIGHT*ch*GetVertEnlarge(),buffer);
}

int IsToMouseExit(void)
{
    int x,y,sx,sy;
    GetMousePos(&x, &y);
    sx = TX2SX(x);
    sy = TY2SY(y);
    switch( MouseDown())
    {
       case MS_RELEASING:
            if( IsPtInRect(sx,sy,SW-50,SH-50,50,50) )
            {
                return 1;
            }
            break;
        case MS_PRESSING:
             break;
    }
    return 0;
}

int IsToExit(void)
{
    char ch;

    ch = IsToMouseExit();
    if( ch )
        return 1;

    ch = kbhit();
    switch(ch)
    {
        case 0: break;
        case KEY_ESC: return 1;
        default: break;
    }

    return 0;
}

int test_AD(int v)
{
    return MENU_RETAIN;
}

void Delay(unsigned int time)
{
    unsigned int timeout = RunTimeMs + time;

    while(RunTimeMs < timeout)
    {
        OS_EXIT_CRITICAL();
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -