Advertisement
Rijen

Слушалка купюрника

Oct 3rd, 2014
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.58 KB | None | 0 0
  1. <?php
  2.  
  3. require_once 'com.php';
  4. require_once 'trait.functions.php';
  5. require_once 'class.q_api.php';
  6.  
  7. class mv {
  8.  
  9.     use functions;
  10.  
  11.     private $q_api;
  12.  
  13.     public function __construct() {
  14.  
  15.         $this->serial = new phpSerial();
  16.         if (!$this->serial->deviceSet("/dev/ttyS5")) {
  17.             die('Не удалось подключиться');
  18.         } else {
  19.             $this->serial->confBaudRate(19200);
  20.             $this->serial->confParity("none");
  21.             $this->serial->confCharacterLength(8);
  22.             $this->serial->confStopBits(1);
  23.             $this->serial->confFlowControl("none");
  24.             $this->serial->deviceOpen();
  25.         }
  26.         $this->q_api = new q_api();
  27.     }
  28.  
  29.     public function cmREBOOT() {
  30.         $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x30]);
  31.         $this->printhex($command);
  32.         $d = '';
  33.         foreach ($command as $val) {
  34.             $d.=pack('c', $val);
  35.         }
  36.         $this->serial->sendMessage($d);
  37.         $this->read_fp();
  38.     }
  39.  
  40.     public function cmBILL_TYPE() {
  41.         $command = $this->sign_crc16([0x02, 0x03, 0x0C, 0x34, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00]);
  42.         $this->printhex($command);
  43.         $d = '';
  44.         foreach ($command as $val) {
  45.             $d.=pack('c', $val);
  46.         }
  47.         $this->serial->sendMessage($d);
  48.         $this->read_fp();
  49.     }
  50.  
  51.     public function cmEOT() {
  52.         $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x00]);
  53.         $this->printhex($command);
  54.         $d = '';
  55.         foreach ($command as $val) {
  56.             $d.=pack('c', $val);
  57.         }
  58.         $this->serial->sendMessage($d);
  59.         $this->read_fp();
  60.     }
  61.  
  62.     public function cmPOOL() {
  63.         $command = $this->sign_crc16([0x02, 0x03, 0x06, 0x33]);
  64.  
  65.         $pool_command = '';
  66.         foreach ($command as $val) {
  67.             $pool_command.=pack('c', $val);
  68.         }
  69.  
  70.  
  71.         while (true) {
  72.             $bill = 0;
  73.             $ret = false;
  74.             $this->serial->sendMessage($pool_command);
  75.             $this->printhex($command);
  76.             $ret = $this->read_fp();
  77.             $rs = count($ret);
  78.             if ($rs == 0) {
  79.                 die('Ошибка чтения.');
  80.             } else {
  81.                 if ($rs == 6) {
  82.                     switch ($ret[4]) {
  83.                         case 0x19://DISABLED
  84.                             $this->cmBILL_TYPE();
  85.                             break;
  86.                     }
  87.                 } elseif ($rs > 6 && $ret[4] == 0x81) {
  88.                     switch ($ret[5]) {
  89.                         case 1:
  90.                             $bill = 200;
  91.                             break;
  92.                         case 2:
  93.                             $bill = 500;
  94.                             break;
  95.                         case 3:
  96.                             $bill = 1000;
  97.                             break;
  98.                         case 4:
  99.                             $bill = 2000;
  100.                             break;
  101.                         case 5:
  102.                             $bill = 5000;
  103.                             break;
  104.                         case 6:
  105.                             $bill = 10000;
  106.                             break;
  107.                         default:
  108.                             $bill = 0;
  109.                     }
  110.                     $repeat = false;
  111.                     $send = false;
  112.                     for ($k = 0; $k <= 3; $k++) {
  113.                         if (!$repeat) {
  114.                             $bill_res = $this->q_api->send_bill($bill);
  115.                         }
  116.                         if ($bill_res > 0) {
  117.                             usleep(2000*1000);//Две секунды крепкого, здорового сна
  118.                             $bill_res = $this->q_api->send_bill($bill, $bill_res);
  119.                             $repeat = true;
  120.                         } else {
  121.                             $this->cmEOT();
  122.                             $send = true;
  123.                         }
  124.                     }
  125.                     if(!$send){
  126.                         //Ложим демон, нет связи с сервером.
  127.                         die();
  128.                     }
  129.                 }
  130.             }
  131.             usleep(1000 * 1000); //Дрыхнем секунду.(1000мс)
  132.         }
  133.     }
  134.  
  135.     /**
  136.      * Чтение с порта.
  137.      * @return array Массив байт ответа.
  138.      */
  139.     function read_fp() {
  140.         $start = $this->microtime_float();
  141.         $read = $this->serial->readPort();
  142.         while (($read == '') && ($this->microtime_float() <= $start + 10.5)) {
  143.             $nread = $this->serial->readPort();
  144.             if ($nread != '') {
  145.                 $read .= $nread;
  146.                 $nread = '';
  147.             }
  148.         }
  149.         $ret = unpack("c*", $read);
  150.         foreach ($ret as &$v) {
  151.             $v = abs($v);
  152.         }
  153.         $this->printhex($ret, '<<:');
  154.         return $ret;
  155.     }
  156.  
  157.     function __destruct() {
  158.         $this->serial->deviceClose();
  159.     }
  160.  
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement