логин: 
<< предыдущая заметкаследующая заметка >>
21 декабря 2010
напишите мне пожалуйста pleasehelp.c под FreeBSD для /dev/pps0

UPD: Всем спасибо, все заработало! Спасибо fenster, vnaum и всем остальным!

В итоге заработало на PHP примерно в такой причудливой комбинации:


<?php
$device='/dev/cuad0'; // FreeBSD 6.4
exec('sudo stty -f '.$device.' 115200 cs8 -cstopb -parenb -echo -tostop -hupcl -brkint ixon ixoff');
exec('sudo stty -f '.$device.'.init 115200 cs8 -cstopb -parenb -echo -tostop -hupcl -brkint ixon ixoff');

if(($g=fopen($device,'rw+'))===false) die('error open\n');

function getl() { global $g; if(!feof($g)) return rtrim($s,"\r\n"); }
function putl($s) { global $g; fputs($g,$s."\r\n"); }

putl('ATZ');
putl('AT+CMGF=1');
//putl('ATD89166801685;');
putl('AT+CMGL="REC READ"');
putl('AT+CMGL="REC UNREAD"');

echo "read: \n"; while(1) { $s=getl(); echo $s; }
?>

И пока я принудительно в /dev/cuad0.init при старте не начал забивать нужные мне параметры (божественное наитие снизошло), ничего не работало.

Было:

Для тех, кто понимает, что значат эти слова, просьба.

Ситуация: есть GSM-модем, с которым я хочу делать всякие интересные вещи, SMS-постинг и т.п. Для этого мне нужна программка pleasehelp.c, которая бы просто запихивала в /dev/pps0 заданную ей строку (самостоятельно добавляя в конце 0D0A), а возвращала строку-ответ, полученный из /dev/pps0, а если ответа нет - ждала бы секунду и возвращала "timeout-error".

Обращаться я к ней буду с php примерно так:
if(exec("pleasehelp 'ATZ'")=='OK') print "Ура! Модем работает!";

Я понимаю, что это пустяк и пять минут. Я понимаю, что есть документация, она прекрасна, и даже иногда на русском. Я понимаю, что есть Гугль. Но я заебался, и у меня нет сейчас свободных двух дней на это. Может есть человек, у которого есть это уже готовое или для него написать эти несчастные 10 строчек - пустяк на полторы минуты? Давайте я начну:

#include <stdio.h>
#include <stdlib.h>

int main(int ac, char *av[]) {
char *port = "/dev/pps0";
int timeout = 1000;

fd = open(port, O_RDWR); if (fd < 0) printf("Cannot open port %s, errno=%d", port, errno);


PPS: Слушайте, а может просто есть консольная утилита, которая это сама делает?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий