Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once 'com.php';
- require_once 'trait.functions.php';
- require_once 'class.q_api.php';
- class mv {
- use functions;
- private $q_api;
- public function __construct() {
- $this->serial = new phpSerial();
- if (!$this->serial->deviceSet("/dev/ttyS5")) {
- die('Не удалось подключиться');
- } else {
- $this->serial->confBaudRate(19200);
- $this->serial->confParity("none");
- $this->serial->confCharacterLength(8);
- $this->serial->confStopBits(1);
- $this->serial->confFlowControl("none");
- $this->serial->deviceOpen();
- }
- $this->q_api = new q_api();
- }
- public function cmREBOOT() {
- $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x30]);
- $this->printhex($command);
- $d = '';
- foreach ($command as $val) {
- $d.=pack('c', $val);
- }
- $this->serial->sendMessage($d);
- $this->read_fp();
- }
- public function cmBILL_TYPE() {
- $command = $this->sign_crc16([0x02, 0x03, 0x0C, 0x34, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00]);
- $this->printhex($command);
- $d = '';
- foreach ($command as $val) {
- $d.=pack('c', $val);
- }
- $this->serial->sendMessage($d);
- $this->read_fp();
- }
- public function cmEOT() {
- $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x00]);
- $this->printhex($command);
- $d = '';
- foreach ($command as $val) {
- $d.=pack('c', $val);
- }
- $this->serial->sendMessage($d);
- $this->read_fp();
- }
- public function cmPOOL() {
- $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x33]);
- $pool_command = '';
- foreach ($command as $val) {
- $pool_command.=pack('c', $val);
- }
- while (true) {
- $bill = 0;
- $ret = false;
- $this->serial->sendMessage($pool_command);
- $this->printhex($command);
- $ret = $this->read_fp();
- $rs = count($ret);
- if ($rs == 0) {
- die('Ошибка чтения.');
- } else {
- if ($rs == 6) {
- switch ($ret[4]) {
- case 0x19://DISABLED
- $this->cmBILL_TYPE();
- break;
- }
- } elseif ($rs > 6 && $ret[4] == 0x81) {
- switch ($ret[5]) {
- case 1:
- $bill = 200;
- break;
- case 2:
- $bill = 500;
- break;
- case 3:
- $bill = 1000;
- break;
- case 4:
- $bill = 2000;
- break;
- case 5:
- $bill = 5000;
- break;
- case 6:
- $bill = 10000;
- break;
- default:
- $bill = 0;
- }
- $repeat = false;
- $send = false;
- for ($k = 0; $k <= 3; $k++) {
- if (!$repeat) {
- $bill_res = $this->q_api->send_bill($bill);
- }
- if ($bill_res > 0) {
- usleep(2000*1000);//Две секунды крепкого, здорового сна
- $bill_res = $this->q_api->send_bill($bill, $bill_res);
- $repeat = true;
- } else {
- $this->cmEOT();
- $send = true;
- }
- }
- if(!$send){
- //Ложим демон, нет связи с сервером.
- die();
- }
- }
- }
- usleep(1000 * 1000); //Дрыхнем секунду.(1000мс)
- }
- }
- /**
- * Чтение с порта.
- * @return array Массив байт ответа.
- */
- function read_fp() {
- $start = $this->microtime_float();
- $read = $this->serial->readPort();
- while (($read == '') && ($this->microtime_float() <= $start + 10.5)) {
- $nread = $this->serial->readPort();
- if ($nread != '') {
- $read .= $nread;
- $nread = '';
- }
- }
- $ret = unpack("c*", $read);
- foreach ($ret as &$v) {
- $v = abs($v);
- }
- $this->printhex($ret, '<<:');
- return $ret;
- }
- function __destruct() {
- $this->serial->deviceClose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement