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

📄 main.c.svn-base

📁 一款蓝牙芯片的驱动和应用代码
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
            case ACL_LINK:
                DPrintf(" $$$: LINK NUMBER CHANGE");
                break;
            case ACCESSIBLE_MODE:
                ////DPrintf(" $$$: accesible mode change to %2x", mpx_BtGetAccessibleMode());
                break;
            case REMOTE_DEVS_INQUIRY:
                if(type == INFORM_START)
                {
                    DPrintf(" $$$: inquiry start");
                }
                else if(type == INFORM_COMPLETE)
                    DPrintf(" $$$: inquriry stop");
                break;
            case REMOTE_DEVS_LIST:
                if(type == INFORM_NUMBER_CHANGE)
                    DPrintf(" $$$: device list number change");
                else if(type == INFORM_CONTENT_CHANGE)
                    DPrintf(" $$$: device list content change");
                break;
			case SYS_CSR_BCCMD_COMPLETE:
					BtBCcmdReBoot();
				break;
            default: //not handled inform action
            
                break;
        }
    }
    else
    {
        switch(action)
        {
            case REMOTE_DEVS:
                DPrintf(" $$$: select REMOTE devs");
                break;
            case PIN_CODE:
            {
                DPrintf("pin code request from %S",&BTINT_U08DATA(buffer, 0));

                U08 pin[16];
                InputPin(pin);
                mpx_BtSetPin(pin);
                
            }
                break;
        }
    }
}

void MainMenuHandler(U32 type,...)
{
    U08 cmd;
    U08 *buffer;
    
    cmd = *(U32*)(((U08*)&type)+4);
    buffer = *(U32*)(((U08*)&type)+4);
    
    if(type == BTCMD)
    {
        
        switch(cmd)
        {
            case BT_START:
                mpx_BtSetLocalAddr(0x1111, 0x23, 0x00456677);               
                if(mpx_BtEnable(BTCHIP_DELTA_322, BT_UART, 921600) == BT_RETURN_PENDING)
                {
                    MenuItemDisable(BT_START);
                    DPrintf("Bluetooth initializing........wait!!");
                }
                else    //immediately fail, wrong state
                {
                    DPrintf("can't start bluetooth");
                    pagemenu->refresh = TRUE;
                }
                    
                break;
            case BT_EXIT:
                btexit = TRUE;
                break;
            case BT_STOP:
                if(mpx_BtDisable() == 0)
                {
                    MenuItemDisable(BT_STOP);
                    MenuItemEnable(BT_START);
                    MenuItemEnable(BT_EXIT);
                    MenuItemDisable(BT_DEVLST);
                    MenuItemDisable(BT_OPP);
                    MenuItemDisable(BT_FTP);
    				MenuItemDisable(BT_A2DP_SRC);
    				MenuItemDisable(BT_HANDSET_GW);
					MenuItemDisable(BT_SPP);
					MenuItemDisable(BT_HANDSET);
                    MenuItemDisable(BT_SETTING);
                }
                else    //wrong state
                {
                    DPrintf("can't stop bluetooth");
                    pagemenu->refresh = TRUE;
                }
                break;
            case BT_SETTING:
                pagemenu = &SettingMenu;
                pagemenu->refresh = TRUE;
                break;
            case BT_OPP:
                pagemenu = &OppMenu;
                pagemenu->refresh = TRUE;
                break;
            case BT_DEVLST:
                pagemenu = &DVsMenu;
                pagemenu->refresh = TRUE;
                ShowTrustedDeviceList();
                break;
            case BT_FTP:
                pagemenu = &FtpMenu;
                pagemenu->refresh = TRUE;
                break;
            case BT_A2DP_SRC:
                pagemenu = &A2DPsrcMenu;
                pagemenu->refresh = TRUE;
                break;
			case BT_HANDSET_GW:
                pagemenu = &HSGWMenu;
                pagemenu->refresh = TRUE;
                break;
			case BT_SPP:
                pagemenu = &SPPMenu;
                pagemenu->refresh = TRUE;
                break;
			case BT_HANDSET:
                pagemenu = &HandsetMenu;
                pagemenu->refresh = TRUE;
                break;
        }
    }
    else //BTINT
    {
        U08 category;
        U08 type;
        U08 action;
        U08 who;
        U16 datalen;
    	static aaa=0;
    	
        category = BTINT_CATEGORY(buffer);
        type = BTINT_TYPE(buffer);
        action = BTINT_ACTION(buffer);
        who = BTINT_WHO(buffer);
        datalen = BTINT_DATALEN(buffer);

        if(!(type & 0x80))     //inform type
        {
            switch(action)
            {            
                case BLUETOOTH_ENABLE:
                {
                    if(type == INFORM_COMPLETE)
                    {
                        DPrintf("enbale ok");
                        U32 profiles;
                        mpx_BtProfileSupported(&profiles);

                        MenuItemDisable(BT_START);
                        MenuItemEnable(BT_STOP);
                        MenuItemEnable(BT_DEVLST);

                        if(profiles & SUPPORT_OPP)
                            MenuItemEnable(BT_OPP);
                        
                        if(profiles & SUPPORT_FTP_CLIENT)
                            MenuItemEnable(BT_FTP);
                        
                        if(profiles & SUPPORT_A2DP_SOURCE)
        				    MenuItemEnable(BT_A2DP_SRC);

                        if(profiles & SUPPORT_HEADSET_GW)
    				        MenuItemEnable(BT_HANDSET_GW);
                        
                        if(profiles & SUPPORT_SPP)
    						MenuItemEnable(BT_SPP);

                        if(profiles & SUPPORT_HEADSET_HEADSET)
						    MenuItemEnable(BT_HANDSET);
                        
                        MenuItemEnable(BT_SETTING);
                    }
                    else if(type == INFORM_FAIL)
                    {
                        DPrintf("enbale fail");
                        MenuItemEnable(BT_START);
                        MenuItemDisable(BT_DEVLST);
                        MenuItemDisable(BT_OPP);
                        MenuItemDisable(BT_FTP);
        				MenuItemDisable(BT_A2DP_SRC);
        				MenuItemDisable(BT_HANDSET_GW);
						MenuItemDisable(BT_SPP);
						MenuItemDisable(BT_HANDSET);
                        MenuItemDisable(BT_SETTING);
                    }
                    //BOOL radio;
                    //mpx_BtRadioStatusGet(&radio);
                    //DPrintf(" $$$: radio is %s", radio ? "ON" : "OFF");                        
                }
                default:
                BtDefaultIntHandler(buffer);
                break;
            }
        }
        else
            BtDefaultIntHandler(buffer);
    }
}


void SettingMenuHandler(U32 type, ...)
{
    U08 cmd;
    U08 *buffer;
    
    cmd = *(U32*)(((U08*)&type)+4);
    buffer = *(U32*)(((U08*)&type)+4);

    if(type == BTCMD)
    {
        cmd = *(U32*)(((U08*)&type)+4);
        switch(cmd)
        {
            case SETTING_EXIT:
                mpx_BtSetLocalName("Ghost of Brain!");
                pagemenu = &MainMenu;
                pagemenu->refresh = TRUE;
                break;
            case SETTING_SHOW:
                ShowSetting();
                pagemenu->refresh = TRUE;                
                break;
            case SETTING_ACCESSIBLE:
            {
                U08 key;
                DPrintf("*****************************************/");
                DPrintf("1. Not discovered, not connected");
                DPrintf("2. discovered only");
                DPrintf("3. connected only");
                DPrintf("4. allow discovered and connected");
                DPrintf("5. limited discovered and connected");
                DPrintf("select key: \\-");
                DPrintf("*****************************************/");
                key = SelectKey();
                if(key < 5)
                    mpx_BtSetAccesibleModeNC(key - 1);
                else if(key == 5)
                    mpx_BtSetAccesibleModeNC(0x13);
                pagemenu->refresh = TRUE;
            }
            break;
        }
    }
    else
    {
        BtDefaultIntHandler(buffer);        
    }
}
void OppMenuHandler(U32 type, ...)
{
    U08 cmd;
    U08 *buffer;
    
    cmd = *(U32*)(((U08*)&type)+4);
    buffer = *(U32*)(((U08*)&type)+4);

    if(type == BTCMD)
    {
        cmd = *(U32*)(((U08*)&type)+4);
        switch(cmd)
        {
            case OPP_EXIT:
                    pagemenu = &MainMenu;
                    pagemenu->refresh = TRUE;
                break;
            case OPP_PUTFILE:
                mpx_BtObexOppPushObject("\0/\0t\0a\0l\0l\0p\0l\0a\0y\0.\0j\0p\0g\0");
                break;

        }
    }
    else
    {
        U08 inttype;
        U08 intaction;

        inttype = BTINT_TYPE(buffer);
        intaction = BTINT_ACTION(buffer);

        switch(intaction)
        {
            case REMOTE_DEVS:
                if(mpx_BtRemoteDevListNumGet(0))
                {
                    mpx_BtSelectDevsFromDevList(BRD_LIST_TRUSTED, SelectTrustedDevice());
                }
                else //no device in list
                    mpx_BtSelectDevsFromDevList(BRD_LIST_TRUSTED, 0xff);
            
                break;
            default:
                BtDefaultIntHandler(buffer);        
                break;
                
        }
 
    }
}


U08 ShowFtpDir()
{
    U08 i;
    U16 *name;

    void pr(U08 i)
    {
        U08 type;
        U32 size;
        mpx_BtObexFtpCurrNodeNameGet(&name);
        mpx_BtObexFtpCurrNodeTypeGet(&type);
        mpx_BtObexFtpCurrNodeSizeGet(&size);        
        
        if(type == 0x00) //file
            DPrintf("%2d: %s%7d %S", i, "     ", size ,name);
        else if(type == 0x01) //dir
            DPrintf("%2d: %s      0 %S", i, "<DIR>", name);
        else        
            DPrintf("%2d: %s      0 ..", i, "<DIR>");
    }

    i = 1;
    if(!mpx_BtObexFtpCurrNodeMoveFirst())
    {
        pr(i++);
        while(!mpx_BtObexFtpCurrNodeMoveNext())
        {
            pr(i++);
        }
    }
    else
    {
        DPrintf("No file in server");
        return 0;
    }

    return 1;
    
}


U08 SelectFile()
{
    if(ShowFtpDir()){
    DPrintf("select a target :");
    mpx_MessageReceive(mainTaskMsgId, (U08*)u32Argument);
    return (u32Argument[0] & 0xffff)-1;
    }
}

void FtpMenuHandler(U32 type, ...)
{
    U08 cmd;
    U08 *buffer;
    static U08 currcmd = 0;

    void MenuOpDisable()
    {
        MenuItemDisable(FTP_CHANGEDIR);
        MenuItemDisable(FTP_CHANGEPARENT);
        MenuItemDisable(FTP_GETFILE);
        MenuItemDisable(FTP_PUTFILE);
    }

    void MenuOpEnable()
    {
        MenuItemEnable(FTP_CHANGEDIR);
        MenuItemEnable(FTP_CHANGEPARENT);
        MenuItemEnable(FTP_GETFILE);
        MenuItemEnable(FTP_PUTFILE);
        MenuItemEnable(FTP_EXIT);
    }
    
    cmd = *(U32*)(((U08*)&type)+4);
    buffer = *(U32*)(((U08*)&type)+4);

    if(type == BTCMD)
    {
        cmd = *(U32*)(((U08*)&type)+4);
        switch(cmd)
        {
            case FTP_EXIT:
                if(currcmd == FTP_SHOWDIR) //leave show dir menu
                {
                    MenuOpDisable();
                    MenuItemEnable(FTP_SHOWDIR);
                    MenuItemEnable(FTP_DISCONNECT);
                }
                else
                {
                    pagemenu = &MainMenu;
                    pagemenu->refresh = TRUE;
                }
                break;
            case FTP_CONNECT:
            {                
                if(mpx_BtObexFtpConnect() == BT_RETURN_PENDING)
                    MenuItemDisable(FTP_CONNECT);
            }
            break;
            case FTP_DISCONNECT:
            {    
                if(mpx_BtObexFtpDisconnect() == BT_RETURN_PENDING)
                {
                    MenuItemDisable(FTP_DISCONNECT);
                    MenuItemDisable(FTP_SHOWDIR);
                }
            }
            break;
            case FTP_SHOWDIR:
            {
                ShowFtpDir();
                MenuItemDisable(FTP_SHOWDIR);
                MenuItemDisable(FTP_DISCONNECT);
                MenuOpEnable();
            }
                break;
            case FTP_CHANGEDIR:
            {
                U08 idx;
                U16 *name;
                U08 type;
                idx = SelectFile();
                
                mpx_BtObexFtpCurrNodeMove(idx);
                mpx_BtObexFtpCurrNodeTypeGet(&type);
                if(type == 0x01) //sub
                {
                    mpx_BtObexFtpCurrNodeNameGet(&name);
                    mpx_BtObexFtpChangeWorkingFolder(name);
                    MenuOpDisable();
                }
                else if(type == 0x02) //parent
                {
                    mpx_BtObexFtpChangeWorkingFolder(0);//parent
                    MenuOpDisable();
                }
            }
            break;
            case FTP_CHANGEPARENT:
                mpx_BtObexFtpChangeWorkingFolder(0);
                MenuOpDisable();
                break;
            case FTP_GETFILE:

⌨️ 快捷键说明

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