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

2009-07-05 Пенетрантность Ivan Petrov

Наконец-то догадался проверить :-
Оказалось мой билайн-модем проверяет баланс посылая команду не на 
/dev/ttyUSB0,

а на /dev/ttyUSB2 

Заслав #echo -e 'AT+CUSD=1,*102#,15\r\n' /dev/ttyUSB2
я получил от #cat /dev/ttyUSB2
строчку в юникоде.
Между тем, как я понял программа balans.c (прилагаю)
посылает запрос на /dev/ttyUSB0

Как ее поправить, чтобы она посылала и прослушивала /dev/ttyUSB2 ?

И.П.
#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;   
//coutendlrc:strerror(errno)endl;
//} else coutin :bi len: rcendl; //coutrcendl;
//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(t0)len=0;   
else len=t; 
if (t0) coutendlt:strerror(errno)endl;else coutin :bi 
len: tendl; //couttendl;
}   
 


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==6610)   ( 
dev-descriptor.idProduct==49) )
{   
   
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++; 

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

2009-07-05 Пенетрантность Dmitriy Sirant

05.07.2009 15:03, Ivan Petrov пишет:

Наконец-то догадался проверить :-
Оказалось мой билайн-модем проверяет баланс посылая команду не на
/dev/ttyUSB0,
а на /dev/ttyUSB2 



Ну если ты такой догадливый, то почему вместо того тобы прочитать текст 
программы хотябы 1 раз ты его постишь сюда уже в 3 раз ?




port.open(/dev/ttyUSB0, fstream::in | fstream::app); 






Заслав #echo -e 'AT+CUSD=1,*102#,15\r\n' /dev/ttyUSB2
я получил от #cat /dev/ttyUSB2
строчку в юникоде.
Между тем, как я понял программа balans.c (прилагаю)
посылает запрос на /dev/ttyUSB0

Как ее поправить, чтобы она посылала и прослушивала /dev/ttyUSB2 ?



Догадаешься сам как ее поправить ?


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Ivan Petrov

Dmitriy Sirant пишет:

05.07.2009 15:03, Ivan Petrov пишет:

Наконец-то догадался проверить :-
Оказалось мой билайн-модем проверяет баланс посылая команду не на
/dev/ttyUSB0,
а на /dev/ttyUSB2 



Ну если ты такой догадливый, то почему вместо того тобы прочитать текст 
программы хотябы 1 раз ты его постишь сюда уже в 3 раз ?




port.open(/dev/ttyUSB0, fstream::in | fstream::app);




Заслав #echo -e 'AT+CUSD=1,*102#,15\r\n' /dev/ttyUSB2
я получил от #cat /dev/ttyUSB2
строчку в юникоде.
Между тем, как я понял программа balans.c (прилагаю)
посылает запрос на /dev/ttyUSB0

Как ее поправить, чтобы она посылала и прослушивала /dev/ttyUSB2 ?



Догадаешься сам как ее поправить ?




Дело в том, что так я ее правил еще вчера. Перекомпилировал - толку - 0

И.П.

З.Ы. Может мне просто подкажете тогда как набор юникодных символов можно 
переконвертировать - не худой конец - сойдет



--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Yuri Kozlov
On Sun, 05 Jul 2009 19:03:30 +0700
Ivan Petrov pr...@hnet.ru wrote:

 Наконец-то догадался проверить :-
 Оказалось мой билайн-модем проверяет баланс посылая команду не на 
 /dev/ttyUSB0,
 а на /dev/ttyUSB2 
 
 Заслав #echo -e 'AT+CUSD=1,*102#,15\r\n' /dev/ttyUSB2
 я получил от #cat /dev/ttyUSB2
 строчку в юникоде.
 Между тем, как я понял программа balans.c (прилагаю)
 посылает запрос на /dev/ttyUSB0
 
 Как ее поправить, чтобы она посылала и прослушивала /dev/ttyUSB2 ?
 
Найти 
port.open(/dev/ttyUSB0
заменить 0 - 2 
пересобрать?

-- 
Best Regards,
Yuri Kozlov


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность sms
On Sun, 05 Jul 2009 19:15:38 +0700
Ivan Petrov pr...@hnet.ru wrote:

 Dmitriy Sirant пишет:
  05.07.2009 15:03, Ivan Petrov пишет:
  Наконец-то догадался проверить :-
  Оказалось мой билайн-модем проверяет баланс посылая команду не на
  /dev/ttyUSB0,
  а на /dev/ttyUSB2 
 
  
  Ну если ты такой догадливый, то почему вместо того тобы прочитать
  текст программы хотябы 1 раз ты его постишь сюда уже в 3 раз ?
  
  
  
  port.open(/dev/ttyUSB0, fstream::in | fstream::app);
  
  
  
  Заслав #echo -e 'AT+CUSD=1,*102#,15\r\n' /dev/ttyUSB2
  я получил от #cat /dev/ttyUSB2
  строчку в юникоде.
  Между тем, как я понял программа balans.c (прилагаю)
  посылает запрос на /dev/ttyUSB0
 
  Как ее поправить, чтобы она посылала и прослушивала /dev/ttyUSB2 ?
 
  
  Догадаешься сам как ее поправить ?
  
  
 
 Дело в том, что так я ее правил еще вчера. Перекомпилировал - толку -
 0
 
 И.П.
 
 З.Ы. Может мне просто подкажете тогда как набор юникодных символов
 можно переконвертировать - не худой конец - сойдет
 
 
Для переконвертирования символов юникод используй программу tcs
(character set translator).

tcs translates character sets from one encoding to another.

Supported encodings include utf (ISO utf-8), ascii, ISO
8859-[123456789], koi8, jis-kanji, ujis, ms-kanji, jis, gb, big5,
unicode, tis, msdos, and atari.


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Ivan Petrov

Yuri Kozlov пишет:

Найти 
port.open(/dev/ttyUSB0
заменить 0 - 2 
пересобрать?


не помогло




--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Yuri Kozlov
On Sun, 05 Jul 2009 19:34:09 +0700
Ivan Petrov pr...@hnet.ru wrote:

 Yuri Kozlov пишет:
 
  Найти 
  port.open(/dev/ttyUSB0
  заменить 0 - 2 
  пересобрать?
 
 не помогло

if( (dev-descriptor.idVendor==6610)   ( dev-descriptor.idProduct==49) )

У устройства такие производитель и продукт?

-- 
Best Regards,
Yuri Kozlov


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Ivan Petrov

Yuri Kozlov пишет:

On Sun, 05 Jul 2009 19:34:09 +0700
Ivan Petrov pr...@hnet.ru wrote:


Yuri Kozlov пишет:

Найти 
port.open(/dev/ttyUSB0
заменить 0 - 2 
пересобрать?

не помогло


if( (dev-descriptor.idVendor==6610)   ( dev-descriptor.idProduct==49) )


Это в исходник подставить?


У устройства такие производитель и продукт?


USB\VID_19D2PID_0016

И.П.


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность Ivan Petrov

sms пишет:


tcs translates character sets from one encoding to another.

Supported encodings include utf (ISO utf-8), ascii, ISO
8859-[123456789], koi8, jis-kanji, ujis, ms-kanji, jis, gb, big5,
unicode, tis, msdos, and atari.


вроде тут нет нужного:
нашел в интернете:
-
А вообще, данная кодировка, оказывается, поддерживается iconv, 
так что всё должно быть просто.
Короче говоря, я добился результата. В ответ на команду 
AT+CUSD=1,*102#,15 модем ответил:
+CUSD: 
0,04110430043B0430043D0441002000340033002E003900310440002E002004220440043004440438043A0020003

0002E00300020041A0431002E0414043504420430043B0438003A002000680074007400700073003A002F002F00750073006C
007500670069002E006200650065006C0069006E0065002E00720075,72
Затем я прочитал данную строку в кавычках sscanf-ом по формату 
04X, и записал в двоичном виде в файл tmp.txt. После этого 
команда:

 cat tmp.txt | iconv -f UCS-2 -t utf-8
выдала следующее:
Баланс 43.91р. Трафик 0.0 кБ. Детали: https://uslugi.beeline.ru
-

sscanf в репозитории не нашел и вообще запутался...

И.П.



--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



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

2009-07-05 Пенетрантность 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_19D2PID_0016
 
 

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

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

-- 
WBR, Dmitry

http://dion.org.ua/2009/06/10/new-pgp-key/


signature.asc
Description: Digital signature


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

2009-07-05 Пенетрантность Ivan Petrov

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_19D2PID_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; 
//coutendlrc:strerror(errno)endl;
//} else coutin :bi len: rcendl; //coutrcendl;
//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(t0)len=0; 
else len=t;   
if (t0) coutendlt:strerror(errno)endl;else coutin :bi len: tendl; //couttendl;
}


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); 
portans;   
coutans: ansendl;
while( ans[0]!='0' || ans[1]!=',' || ans[2]!='\') 
{  
  

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

2009-07-05 Пенетрантность Dmitry Nezhevenko
On Mon, Jul 06, 2009 at 12:06:49AM +0700, Ivan Petrov wrote:
 Соответственно:
 
 if( (dev-descriptor.idVendor==0x19d2)   ( 
 dev-descriptor.idProduct==0x0016) )
 
 
 Спасибо! прога чуть задвигалась.
 пишет -16 Device or resource is busy (модем не в интернете). Что-то
 еще поправить?
 

Код проги особо не смотрел и конкретно про девайс не в курсе, но
USB-девайс, к которому загружен ядерный драйвер (в случае мопеда --
cdc-acm или usbserial) через libusb работать не будет. 

Так как баланс можно узнать из /dev/ttyUSBX, IMHO весь libusb-ный код
нужно оттуда выкинуть и писать сразу в /dev/ttyUSBX. 

-- 
WBR, Dmitry

http://dion.org.ua/2009/06/10/new-pgp-key/


signature.asc
Description: Digital signature