[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: еще раз баланс



Dmitry Nezhevenko пишет:
On Sun, Jul 05, 2009 at 08:45:05PM +0700, Ivan Petrov wrote:
if( (dev->descriptor.idVendor==6610) &&  ( dev->descriptor.idProduct==49) )
Это в исходник подставить?

У устройства такие производитель и продукт?
USB\VID_19D2&PID_0016



Соответственно:

if( (dev->descriptor.idVendor==0x19d2) &&  ( dev->descriptor.idProduct==0x0016) )


Спасибо! прога чуть задвигалась.
пишет -16 Device or resource is busy (модем не в интернете). Что-то еще поправить?

И.П.

#include <usb.h>                                
#include <unistd.h>                             
#include <iostream>                             
#include <string.h>                             
#include <errno.h>                              
#include <iconv.h>                              
#include <langinfo.h>                           
#include <locale>                               
#include <string>                               
#include <fstream>                              

using namespace std;

// Ð?оÑ?емÑ? не Ñ?делаÑ?Ñ? Ñ?ак:
//
//int SendToDevice( char* bi, int len, usb_dev_handle *udev)
//{                     
//    int rc;            
//    rc = usb_bulk_write(udev, 2, bi, len, 200);                
//                      
//    if (rc < 0) {
//        rc=0;     
//        cout<<endl<<rc<<":"<<strerror(errno)<<endl;
//    } else cout<<"in :"<<bi<<" len: "<<rc<<endl; //cout<<rc<<endl;
//    return rc;
//}                                    
// вÑ?зÑ?ваÑ?Ñ? Ñ?ак:
// len=SendToDevice(initcom1, sizeof(initcom1)-1, udev);
// Ð? вообÑ?е C++ здеÑ?Ñ? излиÑ?еÑ?Ñ?во, можно обойÑ?иÑ?Ñ? ANSI C и даже chat(8) script.

void SendToDevice( char* bi, int &len, usb_dev_handle *udev)
{                     
    int t;            
    t=usb_bulk_write(udev, 2, bi, len, 200);                
    if(t<0)len=0;     
    else len=t;       
    if (t<0) cout<<endl<<t<<":"<<strerror(errno)<<endl;else cout<<"in :"<<bi<<" len: "<<t<<endl; //cout<<t<<endl;
}                                    


int main(void)
{             
    struct usb_bus *bus=NULL;
    struct usb_device *dev=NULL;
    usb_dev_handle *udev=NULL;  
    char com[]="AT+CUSD=1,*102#,15\r\n";
    char initcom0[]="AT+ZOPERTE=\"beeline\"\r\n";
    char initcom1[]="AT+ZOPRT=5\r\n";            
    char initcom2[]="AT+ZSTART\r\n";             
    char initcom3[]="AT+CPBS=\"SM\"\r\n";        
    char initcom4[]="AT+CPMS=\"SM\",\"SM\",\"\"\r\n";
    //char ans[512]={0};                             
    char buf[512]={0};                               
    int lenc,lenc1,len,i,j=0,t;                      
    fstream port;                                    
    string ans;                                                     
    usb_init();                                      
    usb_find_busses();                               
    usb_find_devices();                              
    //find device and open handle                    
    for (bus = usb_busses; bus; bus = bus->next)     
        for (dev = bus->devices; dev; dev = dev->next)
            if( (dev->descriptor.idVendor==0x19d2) &&  ( dev->descriptor.idProduct==0x0016) )
            {                                    
                udev = usb_open(dev);            
            }                                    
    if(udev==0)return -1;                        
    usb_claim_interface(udev, 1);                
    usb_set_altinterface(udev, 1);               
    usb_resetep(udev, 2);                        
    lenc=0;while(com[lenc]!=0)lenc++;            
    lenc1=0;while(initcom0[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom0, len, udev);           
    lenc1=0;while(initcom1[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom1, len, udev);           
    sleep(5);                                    
    lenc1=0;while(initcom0[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom0, len, udev);           
    lenc1=0;while(initcom2[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom2, len, udev);           
    lenc1=0;while(initcom3[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom3, len, udev);           
    lenc1=0;while(initcom4[lenc1]!=0)lenc1++;len=lenc1;                                
    SendToDevice(initcom4, len, udev);           
    sleep(10);                                   


    len=lenc;                                    
    SendToDevice(com, len, udev);                
    if (len!=lenc)                               
    {      
        if(udev)usb_close(udev);                 
        return -1;                               
    }      
    
    sleep(5);                                    
    
    port.open("/dev/ttyUSB2", fstream::in | fstream::app);                             
    port>>ans;                                   
    cout<<"ans: "<<ans<<endl;                    
    while( ans[0]!='0' || ans[1]!=',' || ans[2]!='\"')                                 
    {      
        port>>ans;                               
        cout<<"ans: "<<ans<<endl;                
    }      
    port.close();                                
    for(i=3,j=0;ans[i]!='\"' && i<512;i+=2,j++)  
    {      
        switch(ans[i+1])                         
        {  
            case 'A':                            
            case 'a': buf[j]=10;break;           
            case 'B':                            
            case 'b': buf[j]=11;break;           
            case 'C':                            
            case 'c': buf[j]=12;break;           
            case 'D':                            
            case 'd': buf[j]=13;break;                      
            case 'E':                            
            case 'e': buf[j]=14;break;          
            case 'F':     
            case 'f': buf[j]=15;break;           
            default : buf[j]=((int)ans[i+1]-48); 
        };                
        switch(ans[i])    
        {  
            case 'A':     
            case 'a': buf[j]+=10<<4;break;       
            case 'B':     
            case 'b': buf[j]+=11<<4;break;       

            case 'C':
            case 'c': buf[j]+=12<<4;break;

            case 'D':
            case 'd': buf[j]+=13<<4;break;

            case 'E':
            case 'e': buf[j]+=14<<4;break;

            case 'F':
            case 'f': buf[j]+=15<<4;break;

            default : buf[j]+=((int)ans[i]-48)<<4;
        };
    }

    std::locale::global(std::locale(""));


    cout<<" i: "<<i<<" j: "<<j<<endl;


    char *lang;
    iconv_t cd;
    char fromcode[]="UCS-2BE";
    char *instr = buf;
    char outs[512]={0};
    char *outstr = (char *) outs;
    size_t in=0,out=512,res;


    lang=nl_langinfo(CODESET);
    cout<<endl<<" local: "<<lang<<endl;

    cd = iconv_open(lang,fromcode);

    in=j;
    res=iconv(cd, &instr, &in, &outstr, &out );

    if (res = ((size_t) -1) ) cout<<endl<<"РезÑ?лÑ?Ñ?аÑ?: "<<strerror(errno)<<endl;
    cout<<endl<<" in: "<<in<<" out: "<<512-out<<" answer : "<<outs<<endl;

    cout<<endl;


    iconv_close(cd);
    if(udev)usb_close(udev);

    return 0;
}


Reply to: