亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? Open DMT Client C Source code
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// ----------------------------------------------------------------------------// Copyright 2006-2007, Martin D. Flynn// All rights reserved// ----------------------------------------------------------------------------//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at// // http://www.apache.org/licenses/LICENSE-2.0// // Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.//// ----------------------------------------------------------------------------// Description://  Main entry point for sample serial port DMTP server.// ---// Change History://  2006/01/04  Martin D. Flynn//     -Initial release//  2006/04/11  Martin D. Flynn//     -Force POSIX locale on startup.//  2007/01/28  Martin D. Flynn//     -Added support for sending commands to the client via keyboard entry.// ----------------------------------------------------------------------------#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <locale.h>#include <time.h>#include <sys/time.h>#include <pthread.h>#include "tools/stdtypes.h"#include "tools/strtools.h"#include "tools/utctools.h"#include "tools/io.h"#include "tools/threads.h"#include "base/props.h"     // included for property definitions#include "base/statcode.h"  // included for status code definitions#include "base/cmderrs.h"   // included for command error code definitions#include "server/defaults.h"#include "server/server.h"#include "server/packet.h"#include "server/events.h"#include "server/protocol.h"#include "server/log.h"#include "server/upload.h"#include "server/cerrors.h"#include "server/geozone.h"// ----------------------------------------------------------------------------#define VERSION                     "1.1.3"// ----------------------------------------------------------------------------// keyboard definitions (copied from 'comport.h')#define KEY_CONTROL_H               '\b'    // ASCII backspace#define KEY_DELETE                  0x7F    // character delete (keyboard "Backspace")#define KEY_IsBackspace(K)          (((K) == KEY_CONTROL_H) || ((K) == KEY_DELETE))// ----------------------------------------------------------------------------// Place custom event packet definitions here// ----------------------------------------------------------------------------static char comPortID[32];static utBool comPortLog = utFalse;/* thread function */static void _protocolThreadRunnable(void *arg){    protocolLoop(        comPortID, comPortLog,        utTrue/*KEEP_ALIVE*/,         utFalse/*CLIENT_SPEAKS_FIRST*/);}// ----------------------------------------------------------------------------/* display property value received from client */static void mainHandleProperty(UInt16 propKey, const UInt8 *propData, UInt16 propDataLen){    logINFO(LOGSRC,"Received client property %04X [payload len=%u]", propKey, propDataLen);    Buffer_t bb, *bf = binBuffer(&bb, (UInt8*)propData, propDataLen, BUFFER_SOURCE);    switch (propKey) {                case PROP_GEOF_VERSION: {            // 'propDatalen' may include the terminating '0'            logINFO(LOGSRC,"Geozone version: %s", propData);            break;        }                case PROP_GEOF_COUNT: {            // geozone size            UInt32 size = 0L;            binBufScanf(bf, "%2u", &size);            logINFO(LOGSRC,"Geozone size: %lu", size);            break;        }                case PROP_STATE_GPS_DIAGNOSTIC: {            // print GPS diagnostics            // Example packet: 0xE0B0 16 F124 00000000 00000000 00000000 00000000 00000001            GPSDiagnostics_t gpsDiag = { 0L, 0L, 0L, 0L, 0L };            binBufScanf(bf, "%4u", &(gpsDiag.lastSampleTime));            binBufScanf(bf, "%4u", &(gpsDiag.lastValidTime));            binBufScanf(bf, "%4u", &(gpsDiag.sampleCount_A));            binBufScanf(bf, "%4u", &(gpsDiag.sampleCount_V));            binBufScanf(bf, "%4u", &(gpsDiag.restartCount));            logINFO(LOGSRC,"GPS Diagnostics:");            logINFO(LOGSRC,"  Last Sample Time :  %lu", gpsDiag.lastSampleTime);            logINFO(LOGSRC,"  Last Valid Time  :  %lu", gpsDiag.lastValidTime);            logINFO(LOGSRC,"  'A' Sample Count :  %lu", gpsDiag.sampleCount_A);            logINFO(LOGSRC,"  'V' Sample Count :  %lu", gpsDiag.sampleCount_V);            logINFO(LOGSRC,"  Restart Count    :  %lu", gpsDiag.restartCount);            break;        }        case PROP_STATE_QUEUED_EVENTS: {            UInt32 count = 0L, total = 0L;            binBufScanf(bf, "%4u%4u", &count, &total);            logINFO(LOGSRC,"Pending event count: %lu/%lu", count, total);            break;        }                default: {            UInt8 hex[600];            strEncodeHex(hex, sizeof(hex), propData, propDataLen);            logINFO(LOGSRC,"Property 0x%04X: %s", propKey, hex);            break;        }            }}// ----------------------------------------------------------------------------/* handle diagnostic received from client */static void mainHandleDiag(UInt16 diagKey, const UInt8 *diagData, UInt16 diagDataLen){    UInt8 hex[800];    strEncodeHex(hex, sizeof(hex), diagData, diagDataLen);    logINFO(LOGSRC,"Diagnostic 0x%04X: %s", diagKey, hex);}// ----------------------------------------------------------------------------/* handle error received from client */static void mainHandleError(UInt16 errKey, const UInt8 *errData, UInt16 errDataLen){    Buffer_t bb, *bf = binBuffer(&bb, (UInt8*)errData, errDataLen, BUFFER_SOURCE);    switch (errKey) {        case ERROR_GPS_EXPIRED:        case ERROR_GPS_FAILURE: {            // request GPS diagnostics            protGetPropValue(PROP_STATE_GPS_DIAGNOSTIC);            protSetNeedsMoreInfo();        } break;        case ERROR_PROPERTY_WRITE_ONLY: {            // attempt to read from a write-only property            UInt32 propId = 0L;            binBufScanf(bf, "%2x", &propId);            logINFO(LOGSRC,"Client write-only property error: prop=0x%04lX", propId);        } break;        case ERROR_PROPERTY_READ_ONLY: {            // attempt to write to a read-only property            UInt32 propId = 0L;            binBufScanf(bf, "%2x", &propId);            logINFO(LOGSRC,"Client read-only property error: prop=0x%04lX", propId);        } break;        case ERROR_COMMAND_INVALID: {            // command was invalid            UInt32 cmdId  = 0L;            binBufScanf(bf, "%2x", &cmdId);            logINFO(LOGSRC,"Client invalid-command error: cmd=0x%04lX", cmdId);        } break;        case ERROR_COMMAND_ERROR: {            // command had an error            UInt32 cmdId = 0L, cmdErr = 0L;            binBufScanf(bf, "%2x%2x", &cmdId, &cmdErr);            if ((cmdErr == COMMAND_OK) || (cmdErr == COMMAND_OK_ACK)) {                logINFO(LOGSRC,"Client command ACK: cmd=0x%04lX", cmdId);            } else {                logINFO(LOGSRC,"Client command error: cmd=0x%04lX err=0x%04lX", cmdId, cmdErr);            }        } break;        default: {            logINFO(LOGSRC,"Client error %04X", errKey);        } break;    }}// ----------------------------------------------------------------------------/* client initialization on connection */static void mainHandleClientInit(){    // send client initialization packets here}// ----------------------------------------------------------------------------static char savePacketFile[80] = "./scomserv.dmt";static utBool saveAsCSV = utFalse;static char scName[32];static const char *statusCodeName(UInt16 code){    // This currently includes only the most common status code names.    // Status code names should be added as they become needed.    switch (code) {        case STATUS_INITIALIZED:            return "Initialized";        case STATUS_LOCATION:               return "Location";        case STATUS_WAYMARK:                return "Waymark";        case STATUS_QUERY:                  return "Query";         // "Ping"        case STATUS_MOTION_START:           return "StartMotion";        case STATUS_MOTION_IN_MOTION:       return "InMotion";        case STATUS_MOTION_STOP:            return "StopMotion";        case STATUS_MOTION_DORMANT:         return "Dormant";        case STATUS_MOTION_EXCESS_SPEED:    return "Speeding";        case STATUS_MOTION_MOVING:          return "Moving";        case STATUS_GEOFENCE_ARRIVE:        return "Arrival";        case STATUS_GEOFENCE_DEPART:        return "Departure";        case STATUS_GEOFENCE_VIOLATION:     return "GFViolation";        case STATUS_GEOFENCE_ACTIVE:        return "GFActive";        case STATUS_GEOFENCE_INACTIVE:      return "GFInactive";        case STATUS_LOGIN:                  return "Login";        case STATUS_LOGOUT:                 return "Logout";        case STATUS_ELAPSED_LIMIT_00:       return "Timer0";        case STATUS_ELAPSED_LIMIT_01:       return "Timer1";        case STATUS_CONNECT:                return "Connect";        case STATUS_DISCONNECT:             return "Disconnect";    }    sprintf(scName, "0x%04X", code);    return scName;}static void mainHandleEvent(Packet_t *pkt, Event_t *ev){        /* create CSV formatted record */    UInt8 csv[256], *c = csv;    struct tm *tmp = localtime(&(ev->timestamp[0]));    int hr  = tmp->tm_hour, mn = tmp->tm_min, sc = tmp->tm_sec;    int dy  = tmp->tm_mday, mo = tmp->tm_mon + 1, yr = 1900 + tmp->tm_year;    const char *codeName = statusCodeName(ev->statusCode);    sprintf(c,  "%02d/%02d/%02d", yr, mo, dy);                c += strlen(c);    sprintf(c, ",%02d:%02d:%02d", hr, mn, sc);                c += strlen(c);    sprintf(c, ",%s"            , codeName);                  c += strlen(c);    sprintf(c, ",%.5lf"         , ev->gpsPoint[0].latitude);  c += strlen(c);    sprintf(c, ",%.5lf"         , ev->gpsPoint[0].longitude); c += strlen(c);    sprintf(c, ",%.1lf"         , ev->speedKPH);              c += strlen(c);    sprintf(c, ",%.1lf"         , ev->heading);               c += strlen(c);    sprintf(c, ",%.0lf"         , ev->altitude);              c += strlen(c);    sprintf(c, ",%.1lf"         , ev->topSpeedKPH);           c += strlen(c);    sprintf(c, ",%s"            , ev->entity[1]);             c += strlen(c);    sprintf(c, ",%s"            , ev->entity[0]);             c += strlen(c);    /* print event */    logINFO(LOGSRC,"Event [%02X]: %s", ev->sequence, csv);    /* save packet */    if (pkt && *savePacketFile) {        if (saveAsCSV) {            sprintf(c, "\n"); c += strlen(c); // record terminator            ioAppendFile(savePacketFile, csv, c - csv);        } else {            UInt8 buf[PACKET_MAX_ENCODED_LENGTH];            Buffer_t bb, *dest = binBuffer(&bb, buf, sizeof(buf), BUFFER_DESTINATION);            int len = pktEncodePacket(dest, pkt, ENCODING_HEX);            if (len > 0) {                //logINFO(LOGSRC,"Appending packet to file [%s]", savePacketFile);                ioAppendFile(savePacketFile, buf, len);            } else {                logWARNING(LOGSRC,"Invalid event packet, unable to encode!");            }        }    }}// ----------------------------------------------------------------------------/* submit packet based on command arguments */static Packet_t  cmdPacket;static void execCommand(const char *cmd, char *cmdFld[]){    // add new commands as necessary        /* enpty command specification */    if (!cmd || !*cmd) {        // ignore        return;    }        /* help */    if (strEquals(cmd, "help")) {        logINFO(LOGSRC,"Commands:");        logINFO(LOGSRC,"  device <id>              - set device id");        logINFO(LOGSRC,"  loc                      - request STATUS_LOCATION");        logINFO(LOGSRC,"  ping                     - request STATUS_QUERY");        logINFO(LOGSRC,"  set8 <prop> <value>      - set 8-bit property value");        logINFO(LOGSRC,"  set16 <prop> <value>     - set 16-bit property value");        logINFO(LOGSRC,"  set32 <prop> <value>     - set 32-bit property value");        logINFO(LOGSRC,"  get <prop>               - get property value");        logINFO(LOGSRC,"  sf {0|1}                 - Set client 'speakFreely' mode");        logINFO(LOGSRC,"  rq [<count>]             - Send client a request to speak");        logINFO(LOGSRC,"  save                     - save properties");        logINFO(LOGSRC,"  gps                      - request gps diagnostics");        logINFO(LOGSRC,"  reboot                   - reboot client");#if defined(INCLUDE_UPLOAD)        logINFO(LOGSRC,"  upload <file> [<id>]     - upload file to client");#endif        return;    }        /* ping status location */    if (strEquals(cmd, "loc")) {        // ping        logINFO(LOGSRC,"Location ...");        pktInit(&cmdPacket,PKT_SERVER_SET_PROPERTY,"%2x%2x",(UInt32)PROP_CMD_STATUS_EVENT,(UInt32)STATUS_LOCATION);        protAddPendingPacket(&cmdPacket);        return;    }        /* ping status location */    if (strEquals(cmd, "ping") || strEquals(cmd, "query")) {        // ping        logINFO(LOGSRC,"Ping ...");        pktInit(&cmdPacket,PKT_SERVER_SET_PROPERTY,"%2x%2x",(UInt32)PROP_CMD_STATUS_EVENT,(UInt32)STATUS_QUERY);        protAddPendingPacket(&cmdPacket);        return;    }    /* set device id */    if (strEquals(cmd, "device") || strEquals(cmd, "dev")) {        // device <id>        logINFO(LOGSRC,"Set DeviceID (if writable) ...");        char *dev = cmdFld[1]? cmdFld[1] : "";        if (!*dev) {            logERROR(LOGSRC,"Device ID must be specified");        } else {            pktInit(&cmdPacket,PKT_SERVER_SET_PROPERTY,"%2x%*s",(UInt32)PROP_STATE_DEVICE_ID,(int)MAX_ID_SIZE,dev);            protAddPendingPacket(&cmdPacket);        }        return;    }    /* get/set/save property values */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
1024亚洲合集| 精品亚洲成a人在线观看| 中文子幕无线码一区tr| 精品国产免费一区二区三区香蕉| 欧美日韩国产区一| 欧美在线一区二区三区| 91在线视频观看| 91色在线porny| 91视频xxxx| 欧美日韩亚洲另类| 8v天堂国产在线一区二区| 51精品视频一区二区三区| 4438x亚洲最大成人网| 欧美一区二区黄| 精品毛片乱码1区2区3区| 精品国产乱码久久| 国产女主播一区| 国产精品国产三级国产有无不卡| 日韩一区在线免费观看| 一区二区三区四区中文字幕| 一区二区三区免费| 五月婷婷综合在线| 91精品国模一区二区三区| 正在播放亚洲一区| 26uuu久久天堂性欧美| 国产日韩v精品一区二区| 国产精品免费丝袜| 亚洲最快最全在线视频| 日韩激情在线观看| 国产成人精品影院| 色香蕉久久蜜桃| 欧美一区二区视频在线观看| 久久亚洲一区二区三区明星换脸 | 久久久噜噜噜久噜久久综合| 国产午夜精品一区二区三区嫩草| 亚洲国产精品av| 一区二区三区日韩在线观看| 日韩精品欧美精品| 国产成人在线看| 91麻豆国产自产在线观看| 欧美日韩国产电影| 久久女同精品一区二区| 亚洲少妇屁股交4| 日韩精品午夜视频| 国产99久久久国产精品| 91国产福利在线| 日韩你懂的在线播放| 中文天堂在线一区| 亚洲一二三四在线观看| 国内精品伊人久久久久av一坑| www.亚洲色图| 欧美一区二区免费观在线| 国产欧美精品一区二区色综合| 亚洲精品久久久蜜桃| 奇米影视一区二区三区| 99热在这里有精品免费| 91精品国产日韩91久久久久久| 欧美这里有精品| 麻豆精品一区二区综合av| 国产suv精品一区二区6| 欧美午夜精品电影| 欧美激情在线一区二区三区| 亚洲国产日韩av| 国产成人av福利| 欧美日韩1区2区| 欧美国产综合色视频| 日韩电影一区二区三区| 91片在线免费观看| 精品久久99ma| 亚洲香肠在线观看| 91视视频在线直接观看在线看网页在线看| 欧美一区二区国产| 亚洲国产精品综合小说图片区| 国产成人a级片| 日韩欧美国产高清| 五月综合激情日本mⅴ| 91在线视频网址| 国产精品网曝门| 国产米奇在线777精品观看| 欧美精品粉嫩高潮一区二区| 亚洲欧美日本在线| 成人开心网精品视频| 欧美精品一区男女天堂| 奇米综合一区二区三区精品视频| 欧美午夜片在线看| 亚洲精品成人a在线观看| 成人avav影音| 国产免费久久精品| 国产一区二区按摩在线观看| 日韩精品一区二区三区中文精品| 亚洲高清在线精品| 欧美午夜精品一区二区三区| 亚洲乱码一区二区三区在线观看| 国产成人鲁色资源国产91色综| 欧美变态tickling挠脚心| 男人操女人的视频在线观看欧美| 欧美午夜精品久久久久久超碰| 一区二区三区影院| 在线欧美日韩国产| 一区二区三区中文字幕电影 | 一本到不卡免费一区二区| 国产精品毛片久久久久久久| 国产精品中文字幕一区二区三区| 精品欧美一区二区久久| 久久99久久99小草精品免视看| 91精品国产综合久久久久| 五月婷婷综合网| 91精品蜜臀在线一区尤物| 人人超碰91尤物精品国产| 欧美一区二区日韩一区二区| 蜜桃av噜噜一区| 精品久久久久香蕉网| 国内成人免费视频| 国产亚洲精久久久久久| 国产精品538一区二区在线| 中文字幕第一区二区| av在线综合网| 一个色妞综合视频在线观看| 欧美性生活大片视频| 日本不卡不码高清免费观看| 日韩欧美国产精品一区| 国产成人免费在线观看不卡| 国产精品看片你懂得| 欧美亚洲国产bt| 麻豆精品在线看| 欧美国产1区2区| 在线影院国内精品| 日韩中文欧美在线| 精品国产乱码久久久久久牛牛| 国产一区999| 日韩码欧中文字| 欧美性一级生活| 狠狠久久亚洲欧美| 亚洲欧洲精品一区二区三区不卡| 91麻豆swag| 日本不卡1234视频| 亚洲国产高清在线| 在线亚洲精品福利网址导航| 日韩国产欧美视频| 国产清纯白嫩初高生在线观看91| 99久久久久久| 日韩在线一区二区三区| 国产亚洲精品bt天堂精选| 色成年激情久久综合| 麻豆精品国产91久久久久久| 成人欧美一区二区三区| 欧美一区二区私人影院日本| 国产91精品露脸国语对白| 亚洲第一成人在线| 久久人人97超碰com| 91福利视频在线| 国产高清不卡二三区| 一区二区在线免费观看| 精品欧美一区二区久久 | 久久久综合九色合综国产精品| 91啦中文在线观看| 玖玖九九国产精品| 亚洲精品一二三四区| 日韩精品一区二区三区视频 | 亚洲女人****多毛耸耸8| 欧美一区二区三区在线看| 成人白浆超碰人人人人| 日韩经典中文字幕一区| 国产精品久久久久久久第一福利 | 91精品欧美综合在线观看最新| 成人的网站免费观看| 久久精品国产999大香线蕉| 亚洲男人的天堂在线aⅴ视频| 欧美v日韩v国产v| 在线中文字幕不卡| 丁香婷婷深情五月亚洲| 日本中文字幕一区二区视频| 国产精品成人在线观看| 欧美精品一区二区三区蜜臀| 欧美日韩国产bt| 不卡视频一二三四| 国内精品久久久久影院色| 日本在线不卡视频一二三区| 亚洲精品高清在线| ...xxx性欧美| 国产喷白浆一区二区三区| 日韩欧美亚洲一区二区| 欧美日韩一区二区不卡| 99久久99精品久久久久久| 国产精品一区一区三区| 麻豆国产精品一区二区三区| 亚洲国产综合人成综合网站| 亚洲欧美激情一区二区| 国产精品美日韩| 国产情人综合久久777777| www久久精品| 精品久久久久久无| 日韩一级片在线播放| 欧美日韩国产高清一区二区三区| 日本高清视频一区二区| 色乱码一区二区三区88| av亚洲精华国产精华精华| 成人教育av在线| 成人av影视在线观看| 国产91高潮流白浆在线麻豆|