Advertisement
Guest User

ArtSh

a guest
Oct 21st, 2008
1,025
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.70 KB | None | 0 0
  1. #include <usb.h>                                  
  2. #include <unistd.h>                                
  3. #include <iostream>                                
  4. #include <string.h>                                
  5. #include <errno.h>                                
  6. #include <iconv.h>                                
  7. #include <langinfo.h>                              
  8. #include <locale>                                  
  9. #include <string>                                  
  10. #include <fstream>                                
  11.  
  12. using namespace std;
  13.  
  14. void SendToDevice( char* bi, int &len, usb_dev_handle *udev)
  15. {                                                          
  16.     int t;                                                  
  17.     t=usb_bulk_write(udev, 2, bi, len, 200);                
  18.                                                            
  19.     if(t<0)len=0;                                          
  20.     else len=t;                                            
  21.     if (t<0) cout<<endl<<t<<":"<<strerror(errno)<<endl;else cout<<"in :"<<bi<<" len: "<<t<<endl; //cout<<t<<endl;
  22. }                                                                                                                
  23.  
  24.  
  25. int main(void)
  26. {            
  27.     struct usb_bus *bus=NULL;
  28.     struct usb_device *dev=NULL;
  29.     usb_dev_handle *udev=NULL;  
  30.                                
  31.     char com[]="AT+CUSD=1,*102#,15\r\n";
  32.     char initcom0[]="AT+ZOPERTE=\"beeline\"\r\n";
  33.     char initcom1[]="AT+ZOPRT=5\r\n";            
  34.     char initcom2[]="AT+ZSTART\r\n";            
  35.     char initcom3[]="AT+CPBS=\"SM\"\r\n";        
  36.     char initcom4[]="AT+CPMS=\"SM\",\"SM\",\"\"\r\n";
  37.     //char ans[512]={0};                            
  38.     char buf[512]={0};                              
  39.     int lenc,lenc1,len,i,j=0,t;                      
  40.     fstream port;                                    
  41.     string ans;                                      
  42.                                                      
  43.                                                      
  44.     usb_init();                                      
  45.     usb_find_busses();                              
  46.     usb_find_devices();                              
  47.                                                      
  48.     //find device and open handle                    
  49.     for (bus = usb_busses; bus; bus = bus->next)    
  50.         for (dev = bus->devices; dev; dev = dev->next)
  51.             if( (dev->descriptor.idVendor==6610) &&  ( dev->descriptor.idProduct==49) )
  52.             {                                                                          
  53.                 udev = usb_open(dev);                                                  
  54.             }                                                                          
  55.                                                                                        
  56.     if(udev==0)return -1;                                                              
  57.                                                                                        
  58.     usb_claim_interface(udev, 1);                                                      
  59.     usb_set_altinterface(udev, 1);                                                    
  60.     usb_resetep(udev, 2);                                                              
  61.                                                                                        
  62.     lenc=0;while(com[lenc]!=0)lenc++;                                                  
  63.                                                                                        
  64.     lenc1=0;while(initcom0[lenc1]!=0)lenc1++;len=lenc1;                                
  65.     SendToDevice(initcom0, len, udev);                                                
  66.     lenc1=0;while(initcom1[lenc1]!=0)lenc1++;len=lenc1;                                
  67.     SendToDevice(initcom1, len, udev);                                                
  68.     sleep(5);                                                                          
  69.     lenc1=0;while(initcom0[lenc1]!=0)lenc1++;len=lenc1;                                
  70.     SendToDevice(initcom0, len, udev);                                                
  71.     lenc1=0;while(initcom2[lenc1]!=0)lenc1++;len=lenc1;                                
  72.     SendToDevice(initcom2, len, udev);                                                
  73.     lenc1=0;while(initcom3[lenc1]!=0)lenc1++;len=lenc1;                                
  74.     SendToDevice(initcom3, len, udev);                                                
  75.     lenc1=0;while(initcom4[lenc1]!=0)lenc1++;len=lenc1;                                
  76.     SendToDevice(initcom4, len, udev);                                                
  77.     sleep(10);                                                                        
  78.                                                                                        
  79.                                                                                        
  80.     len=lenc;                                                                          
  81.     SendToDevice(com, len, udev);                                                      
  82.     if (len!=lenc)                                                                    
  83.     {                                                                                  
  84.         if(udev)usb_close(udev);                                                      
  85.         return -1;                                                                    
  86.     }                                                                                  
  87.                                                                                        
  88.     sleep(5);                                                                          
  89.                                                                                        
  90.     port.open("/dev/ttyUSB0", fstream::in | fstream::app);                            
  91.                                                                                        
  92.     port>>ans;                                                                        
  93.     cout<<"ans: "<<ans<<endl;                                                          
  94.                                                                                        
  95.     while( ans[0]!='0' || ans[1]!=',' || ans[2]!='\"')                                
  96.     {                                                                                  
  97.         port>>ans;                                                                    
  98.         cout<<"ans: "<<ans<<endl;                                                      
  99.     }                                                                                  
  100.                                                                                        
  101.     port.close();                                                                      
  102.                                                                                        
  103.     for(i=3,j=0;ans[i]!='\"' && i<512;i+=2,j++)                                        
  104.     {                                                                                  
  105.         switch(ans[i+1])                                                              
  106.         {                                                                              
  107.             case 'A':                                                                  
  108.             case 'a': buf[j]=10;break;                                                
  109.                                                                                        
  110.             case 'B':                                                                  
  111.             case 'b': buf[j]=11;break;                                                
  112.                                                                                        
  113.             case 'C':                                                                  
  114.             case 'c': buf[j]=12;break;                                                
  115.                                                                                        
  116.             case 'D':                                                                  
  117.             case 'd': buf[j]=13;break;                                                
  118.                                                                                        
  119.             case 'E':                                                                  
  120.             case 'e': buf[j]=14;break;                                                
  121.                                                                                        
  122.             case 'F':                                                                  
  123.             case 'f': buf[j]=15;break;                                                
  124.                                                                                        
  125.             default : buf[j]=((int)ans[i+1]-48);                                      
  126.         };                                                                            
  127.         switch(ans[i])                                                                
  128.         {                                                                              
  129.             case 'A':                                                                  
  130.             case 'a': buf[j]+=10<<4;break;                                            
  131.                                                                                        
  132.             case 'B':                                                                  
  133.             case 'b': buf[j]+=11<<4;break;                                            
  134.  
  135.             case 'C':
  136.             case 'c': buf[j]+=12<<4;break;
  137.  
  138.             case 'D':
  139.             case 'd': buf[j]+=13<<4;break;
  140.  
  141.             case 'E':
  142.             case 'e': buf[j]+=14<<4;break;
  143.  
  144.             case 'F':
  145.             case 'f': buf[j]+=15<<4;break;
  146.  
  147.             default : buf[j]+=((int)ans[i]-48)<<4;
  148.         };
  149.     }
  150.  
  151.     std::locale::global(std::locale(""));
  152.  
  153.  
  154.     cout<<" i: "<<i<<" j: "<<j<<endl;
  155.  
  156.  
  157.     char *lang;
  158.     iconv_t cd;
  159.     char fromcode[]="UCS-2BE";
  160.     char *instr = buf;
  161.     char outs[512]={0};
  162.     char *outstr = (char *) outs;
  163.     size_t in=0,out=512,res;
  164.  
  165.  
  166.     lang=nl_langinfo(CODESET);
  167.     cout<<endl<<" local: "<<lang<<endl;
  168.  
  169.     cd = iconv_open(lang,fromcode);
  170.  
  171.     in=j;
  172.     res=iconv(cd, &instr, &in, &outstr, &out );
  173.  
  174.     if (res = ((size_t) -1) ) cout<<endl<<"&#1056;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090;: "<<strerror(errno)<<endl;
  175.     cout<<endl<<" in: "<<in<<" out: "<<512-out<<" answer : "<<outs<<endl;
  176.  
  177.     cout<<endl;
  178.  
  179.  
  180.     iconv_close(cd);
  181.     if(udev)usb_close(udev);
  182.  
  183.     return 0;
  184. }
  185.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement