{"id":619,"date":"2014-02-25T16:22:59","date_gmt":"2014-02-25T07:22:59","guid":{"rendered":"http:\/\/www.gvc-on.net\/?page_id=619"},"modified":"2014-02-25T16:22:59","modified_gmt":"2014-02-25T07:22:59","slug":"%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0gvc_cmd-c","status":"publish","type":"page","link":"https:\/\/www.gvc-on.net\/?page_id=619","title":{"rendered":"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30d7\u30ed\u30b0\u30e9\u30e0(gvc_cmd.c)"},"content":{"rendered":"<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\/\/ --------------------------------------------------\r\n\/\/ Global Versatile Controler http:\/\/www.gvc-on.net\/\r\n\/\/ --------------------------------------------------\r\n\/\/ --------------------------------------------------\r\n\/\/ Revision Memo (Y.M.D Editor\/Memo)\r\n\/\/ --------------------------------------------------\r\n\/\/ \r\n\/\/ 2013.06.12 \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u90e8\u5206\u306e\u5b9f\u88c5(\u79fb\u690d)\u3092\u3059\u308b\r\n\/\/ \r\n\/\/ 2013.06.10 T.Kabu\r\n\/\/ \u6c4e\u7528\u5236\u5fa1\u88c5\u7f6e Grobal Versatile Controller CLI (gvc_cmd)\r\n\/\/ \r\n\/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u306e\u969b\u306b\u306f -lpcre \u3092\u3064\u3051\u308b\u3053\u3068\r\n\/\/ sync;gcc -O2 -Wall -lm -lpcre .\/gvc_cmd.c -o gvc_cmd\r\n\/\/ \r\n\/\/ \u53c2\u8003URL\u3044\u308d\u3044\u308d\r\n\/\/ http:\/\/pinka99.ddo.jp\/nanao\/work\/daemon.html\r\n\/\/ http:\/\/d.hatena.ne.jp\/rero\/20041002\/p1\r\n\/\/ http:\/\/linuxmag.sourceforge.jp\/Japanese\/March2003\/article287.shtml\r\n\/\/ http:\/\/www.geocities.co.jp\/Athlete-Samos\/7760\/study\/msgkyu1.html\r\n\/\/ http:\/\/www.geocities.jp\/taka_owl2005\/job\/UNIX\/kernel\/ipc.html\r\n\/\/ http:\/\/d.hatena.ne.jp\/ka2yan\/20090327\r\n\/\/\r\n\/\/ ------------------------------\r\n\/\/ BASE\r\n\/\/ ------------------------------\r\n\/\/ 2012.02.06 T.Kabu gvc_cmd    gvcd\u306b\u5bfe\u3057\u3066\u30b3\u30de\u30f3\u30c9\u9001\u4fe1\u3092\u3059\u308b\r\n\/\/ 2012.03.09 T.Kabu gvc_cmd2   \u66ab\u5b9a\u7684\u306b\u30b9\u30a4\u30c3\u30c1ON\u5bfe\u5fdc(GVC\u5074\u306f\u30bf\u30a4\u30de\u30fcON\u3092\u60f3\u5b9a)\r\n\/\/ 2013.06.13 T.Kabu gvcd_20130610\t\tRev.2\u7528\u306b\u8272\u3005\u4fee\u6b63\r\n\/\/ 2013.07.18 T.Kabu gvcd_20130717\t\t\u8d64\u5916\u7dda\u30c7\u30fc\u30bf(\u3064\u307e\u308a\u30ea\u30e2\u30b3\u30f3)\u306e\u9001\u53d7\u4fe1\u4fdd\u5b58\u518d\u9001\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3044\u3063\u305f\u3093Fix\r\n\/\/ 2013.12.20 T.Kabu \t\t\t\t\t\u6e05\u66f8\u3068\u3001\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u306e\u30b5\u30a4\u30ba\u306e\u95a2\u4fc2\u3067\u6271\u3048\u308b\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3092\u30d8\u30c3\u30c0\u8fbc\u307f\u3067\u6700\u59271600\u30d0\u30a4\u30c8\u306b\u7d71\u4e00\u3059\u308b\r\n\r\n\/\/---------------------------------------------------\r\n\/\/ include\r\n\/\/---------------------------------------------------\r\n#include &lt;stdio.h&gt;\r\n#include &lt;fcntl.h&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;unistd.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;signal.h&gt;\r\n#include &lt;syslog.h&gt;\r\n#include &lt;termios.h&gt;\r\n#include &lt;time.h&gt;\r\n#include &lt;sys\/types.h&gt;\r\n#include &lt;sys\/ipc.h&gt;\r\n#include &lt;sys\/msg.h&gt;\r\n#include &lt;sys\/stat.h&gt;\r\n#include &lt;sys\/time.h&gt;\r\n\/\/#include &lt;linux\/ipc.h&gt;\r\n\/\/#include &lt;linux\/msg.h&gt;\r\n#include &lt;errno.h&gt;\r\n\r\n\/\/ VineLinux\u3067\u306f&lt;pcre\/pcre.h&gt;\u3001Raspbian\u306a\u3069\u3001Debian\u7cfb\uff1f\u3067\u306f&lt;pcre.h&gt;\r\n#include &lt;pcre\/pcre.h&gt;\r\n\/\/#include &lt;pcre.h&gt;\r\n\r\n#include &quot;gvcd.h&quot;\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Const Define\r\n\/\/ --------------------------------------------------\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Structure \r\n\/\/ --------------------------------------------------\r\n\/\/ --------------------------------\r\n\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u5b9a\u7fa9\r\n\/\/ --------------------------------\r\nint gvc_cmd = 0;\t\t\t\t\t\t\t\t\t\t\/\/ 0:\u901a\u5e38\u30e2\u30fc\u30c9 -1:\u7d42\u4e86\u30e2\u30fc\u30c9\r\nint dev_num = 1;\t\t\t\t\t\t\t\t\t\t\/\/ \u5bfe\u8c61GVC\u30e2\u30b8\u30e5\u30fc\u30eb\u756a\u53f7(1=\u30de\u30b9\u30bf\u30fc\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Sub Routine\r\n\/\/ --------------------------------------------------\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Main Routine\r\n\/\/ --------------------------------------------------\r\nint main(int argc, char *argv&#x5B;])\r\n{\r\n\tint argnum;\t\t\t\t\t\t\t\t\t\t\t\/\/ \u5f15\u6570\u30ab\u30a6\u30f3\u30c8\u7528\r\n\t\r\n\tGVC_MESSAGE_QUEUE_t rcv_message_queue;\t\t\t\t\/\/ \u53d7\u4fe1\u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\r\n\tGVC_MESSAGE_QUEUE_t send_message_queue;\t\t\t\t\/\/ \u9001\u4fe1\u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\r\n\tint message_qid;\t\t\t\t\t\t\t\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fcID\r\n\tint msgq_length;\t\t\t\t\t\t\t\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9577\u3055\r\n\tkey_t msgq_key;\t\t\t\t\t\t\t\t\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u306e\u30ad\u30fc\r\n\tint msgq_result;\t\t\t\t\t\t\t\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u9001\u53d7\u4fe1\u7d50\u679c\r\n\t\r\n\tpcre *re&#x5B;16];\t\t\t\t\t\t\t\t\t\t\/\/ \u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u306e\u5185\u90e8\u51e6\u7406\u7528\u30c7\u30fc\u30bf\u3001\u30d1\u30bf\u30fc\u30f3\u304c\u5897\u3048\u305f\u3089\u914d\u5217\u6570\u3082\u5897\u3084\u3059\u3053\u3068\r\n\tconst char *errptr;\r\n\tint erroffset = 0;\r\n\tint capture_count;\r\n\tint *matches = NULL;\r\n\tint n_matches = 0;\r\n\tint offset = 0;\r\n\tint pcount = 0;\r\n\t\r\n\tFILE *datafp = NULL;\t\t\t\t\t\t\t\t\/\/ \u30c7\u30fc\u30bf\u683c\u7d0d\u7528\u30d5\u30a1\u30a4\u30eb\r\n\tstruct stat irdatastat;\t\t\t\t\t\t\t\t\/\/ \u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u60c5\u5831\r\n\t\r\n\t\/\/ \u5f15\u6570\u691c\u7d22\u30d1\u30bf\u30fc\u30f3\r\n\tconst char *pattern&#x5B;16] = { &quot;^end$&quot;,\t\t\t\t\/\/\t0\r\n\t\t\t\t\t\t\t\t&quot;^ver&quot;,\t \t\t\t\t\/\/\t1\r\n\t\t\t\t\t\t\t\t&quot;^list$&quot;,\t\t\t\t\/\/\t2\r\n\t\t\t\t\t\t\t\t&quot;^res&quot;,\t\t\t\t\t\/\/\t3\r\n\t\t\t\t\t\t\t\t&quot;^stop$&quot;,\t\t\t\t\/\/\t4\r\n\t\t\t\t\t\t\t\t&quot;^sw1on$&quot;,\t\t\t\t\/\/\t5\r\n\t\t\t\t\t\t\t\t&quot;^sw2on$&quot;,\t\t\t\t\/\/\t6\r\n\t\t\t\t\t\t\t\t&quot;^sw1off$&quot;,\t\t\t\t\/\/\t7\r\n\t\t\t\t\t\t\t\t&quot;^sw2off$&quot;,\t\t\t\t\/\/\t8\r\n\t\t\t\t\t\t\t\t&quot;^irrx$&quot;,\t\t\t\t\/\/\t9\r\n\t\t\t\t\t\t\t\t&quot;^irtx$&quot;,\t\t\t\t\/\/\t10\r\n\t\t\t\t\t\t\t\t&quot;^irget$&quot;,\t\t\t\t\/\/\t11\r\n\t\t\t\t\t\t\t\t&quot;^irset$&quot;,\t\t\t\t\/\/\t12\r\n\t\t\t\t\t\t\t\t&quot;^irdel$&quot;,\t\t\t\t\/\/\t13\r\n\t\t\t\t\t\t\t\t&quot;^irclear$&quot;,\t\t\t\t\/\/\t14\r\n\t\t\t\t\t\t\t\t&quot;&quot;};\r\n\t\r\n\t\/\/ \u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u304c\u5b58\u5728\u3059\u308b\u9650\u308a\u30eb\u30fc\u30d7\r\n\twhile(strlen(pattern&#x5B;pcount]))\r\n\t{\r\n\t\t\/\/ \u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u3092\u5185\u90e8\u5f62\u5f0f\u306b\u30b3\u30f3\u30d1\u30a4\u30eb(\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u5224\u5225\u305b\u305a\u3001UTF-8\u3067)\r\n\t\tre&#x5B;pcount] = pcre_compile(pattern&#x5B;pcount], PCRE_CASELESS | PCRE_UTF8, &amp;errptr, &amp;erroffset, NULL);\r\n\t\t\/\/ \u30a8\u30e9\u30fc\u306a\u3089\r\n\t\tif (re&#x5B;pcount] == NULL)\r\n\t\t{\r\n\t\t\t\/\/ errptr\u306b\u53ef\u8aad\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3001erroffset\u306b\u5834\u6240(\u5148\u982d\u304b\u3089n\u6587\u5b57\u76ee)\u304c\u5165\u308b\r\n\t\t\tfprintf(stderr, &quot;%s at %d\\n&quot;, errptr, erroffset);\r\n\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\texit(1);\r\n\t\t}\r\n\t\t\r\n\t\t\/\/ \u7d50\u679c\u3092\u53d7\u3051\u53d6\u308b\u914d\u5217(matches)\u306e\u30b5\u30a4\u30ba\u3092\u8a08\u7b97\u3059\u308b\r\n\t\tpcre_fullinfo(re&#x5B;pcount], NULL, PCRE_INFO_CAPTURECOUNT, &amp;capture_count);\r\n\t\t\/\/ \u4e00\u6642\u9818\u57df\u3082\u542b\u3081\u30663\u500d\u5fc5\u8981\u3089\u3057\u3044\r\n\t\tmatches = malloc(sizeof(int) * (capture_count + 1) * 3);\r\n\t\t\r\n\t\t\/\/ \u6b21\u306e\u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u306b\r\n\t\tpcount ++;\r\n\t}\r\n\t\r\n\t\/\/ ----------------\r\n\t\/\/ \u5f15\u6570\u78ba\u8a8d\r\n\t\/\/ ----------------\r\n\t\/\/ \u5f15\u6570\u3092\u691c\u67fb\r\n\tfor (argnum = 1; argnum &lt; argc; argnum++)\r\n\t{\r\n\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bhelp\u304c\u3042\u308b\u306a\u3089\r\n\t\tif (strcasecmp(&quot;help&quot;, argv&#x5B;argnum]) == 0 ||\r\n\t\t\tstrcasecmp(&quot;-h&quot;, argv&#x5B;argnum]) == 0 ||\r\n\t\t\tstrcasecmp(&quot;-?&quot;, argv&#x5B;argnum]) == 0)\r\n\t\t{\r\n\t\t\t\/\/ \u30bd\u30d5\u30c8\u540d\u3068\u4f7f\u3044\u65b9\u3092\u8868\u793a\r\n\t\t\tprintf(&quot;%s %s\\n\\n&quot;, SOFTNAME, VERSION);\r\n\t\t\tprintf(&quot;%s &#x5B;version|list|reset|stop|end|sw?on|sw?off|irrx|irtx|irget (filename)|irset filename|irdel]\\n\\n&quot;, argv&#x5B;0]);\r\n\t\t\tprintf(&quot;\t* MAX IR DATA LENGTH = %d\\n\\n&quot;, GVC_IR_DATALEN_MAX);\r\n\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\texit(1);\r\n\t\t}\r\n\t}\r\n\t\/\/ \u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u756a\u53f7\u521d\u671f\u5316\r\n\tpcount = 0;\r\n\t\/\/ \u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u304c\u5b58\u5728\u3059\u308b\u9650\u308a\u30eb\u30fc\u30d7\r\n\twhile(strlen(pattern&#x5B;pcount]))\r\n\t{\r\n\t\t\/\/ \u691c\u7d22\u5b9f\u884c\r\n\t\tn_matches = pcre_exec(re&#x5B;pcount], NULL, argv&#x5B;1], strlen(argv&#x5B;1]), offset, 0, matches, (capture_count + 1) * 3);\r\n\t\t\/\/ \u691c\u7d22\u7d50\u679c\u304c\u3042\u308b\u306a\u3089\r\n\t\tif (n_matches &gt; 0)\r\n\t\t{\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bend(0\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 0)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u547d\u4ee4\u30b3\u30de\u30f3\u30c9\u3092\u7d42\u4e86(0xff)\u306b\u3059\u308b\r\n\t\t\t\tgvc_cmd = 0xff;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bver(1\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 1)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u547d\u4ee4\u30b3\u30de\u30f3\u30c9\u3092\u30d0\u30fc\u30b8\u30e7\u30f3\u8981\u6c42(0x01)\u306b\u3059\u308b\r\n\t\t\t\tgvc_cmd = 0x01;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306blist(2\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 2)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u547d\u4ee4\u30b3\u30de\u30f3\u30c9\u3092\u7d42\u4e86(0x02)\u306b\u3059\u308b\r\n\t\t\t\tgvc_cmd = 0x02;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bres(3\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 3)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u547d\u4ee4\u30b3\u30de\u30f3\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\/\u30ea\u30b9\u30bf\u30fc\u30c8\u8981\u6c42(0x7e)\u306b\u3059\u308b\r\n\t\t\t\tgvc_cmd = 0x7e;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bstop(4\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 4)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u547d\u4ee4\u30b3\u30de\u30f3\u30c9\u3092GVC\u505c\u6b62(0x7f)\u306b\u3059\u308b\r\n\t\t\t\tgvc_cmd = 0x7f;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bsw1on(5\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 5)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b9\u30a4\u30c3\u30c1\u3092ON\u306b\u3059\u308b\r\n\t\t\t\tdev_num = 0x30;\r\n\t\t\t\tgvc_cmd = 0x21;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bsw2on(6\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 6)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b9\u30a4\u30c3\u30c1\u3092ON\u306b\u3059\u308b\r\n\t\t\t\tdev_num = 0x38;\r\n\t\t\t\tgvc_cmd = 0x21;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bsw1off(7\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 7)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b9\u30a4\u30c3\u30c1\u3092ON\u306b\u3059\u308b\r\n\t\t\t\tdev_num = 0x30;\r\n\t\t\t\tgvc_cmd = 0x20;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306bsw2off(8\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 8)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b9\u30a4\u30c3\u30c1\u3092ON\u306b\u3059\u308b\r\n\t\t\t\tdev_num = 0x38;\r\n\t\t\t\tgvc_cmd = 0x20;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306birrx(9\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 9)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3059\u308b\r\n\t\t\t\tdev_num = 0x10;\r\n\t\t\t\tgvc_cmd = 0x92;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306birtx(10\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 10)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\r\n\t\t\t\tdev_num = 0x10;\r\n\t\t\t\tgvc_cmd = 0x91;\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306birget(11\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 11)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\r\n\t\t\t\tdev_num = 0x10;\r\n\t\t\t\tgvc_cmd = 0x94;\r\n\t\t\t\t\/\/ \u4f55\u3089\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3082\u3046\u3072\u3068\u3064\u3064\u3044\u3066\u3044\u308b\u306a\u3089\r\n\t\t\t\tif (argc == 3)\r\n\t\t\t\t{\r\n\t\t\t\t\t\/\/ \u305d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u308b\u304b\u8a66\u3057\u3066\u307f\u308b\r\n\t\t\t\t\tdatafp = fopen(argv&#x5B;2], &quot;wb&quot;);\r\n\t\t\t\t\t\/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u306a\u304b\u3063\u305f\u3089\r\n\t\t\t\t\tif (datafp == NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u30a8\u30e9\u30fc\u5410\u3044\u3066\u7d42\u308f\u308a\r\n\t\t\t\t\t\tfprintf(stderr, &quot;%s : %s\\n&quot;, argv&#x5B;2], strerror(errno));\r\n\t\t\t\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\t\t\t\texit(EXIT_FAILURE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u666e\u901a\u306b\u958b\u3051\u305f\u306a\u3089\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b\r\n\t\t\t\t\t\tfclose(datafp);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306birset(12\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 12)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u4f55\u3089\u304b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3082\u3046\u3072\u3068\u3064\u3064\u3044\u3066\u3044\u308b\u306a\u3089\r\n\t\t\t\tif (argc == 3)\r\n\t\t\t\t{\r\n\t\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\u3059\u308b\r\n\t\t\t\t\tdev_num = 0x10;\r\n\t\t\t\t\tgvc_cmd = 0x93;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\/\/ \u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u304c\u306a\u3044\u306a\u3089\r\n\t\t\t\t\tif (stat(argv&#x5B;2], &amp;irdatastat) == -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u30a8\u30e9\u30fc\u5410\u3044\u3066\u7d42\u308f\u308a\r\n\t\t\t\t\t\tfprintf(stderr, &quot;%s : %s\\n&quot;, argv&#x5B;2], strerror(errno));\r\n\t\t\t\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\t\t\t\texit(EXIT_FAILURE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/ \u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u306e\u30b5\u30a4\u30ba\u304cGVC_IR_DATALEN_MAX\u3092\u8d85\u3048\u3066\u3044\u305f\u3089\r\n\t\t\t\t\tif (irdatastat.st_size &gt; GVC_IR_DATALEN_MAX)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u30a8\u30e9\u30fc\u5410\u3044\u3066\u7d42\u308f\u308a\r\n\t\t\t\t\t\tfprintf(stderr, &quot;%s : size over\\n&quot;, argv&#x5B;2]);\r\n\t\t\t\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\t\t\t\texit(EXIT_FAILURE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/ \u305d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u308b\u304b\u8a66\u3057\u3066\u307f\u308b\r\n\t\t\t\t\tdatafp = fopen(argv&#x5B;2], &quot;rb&quot;);\r\n\t\t\t\t\t\/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u306a\u304b\u3063\u305f\u3089\r\n\t\t\t\t\tif (datafp == NULL)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u30a8\u30e9\u30fc\u5410\u3044\u3066\u7d42\u308f\u308a\r\n\t\t\t\t\t\tfprintf(stderr, &quot;%s : %s\\n&quot;, argv&#x5B;2], strerror(errno));\r\n\t\t\t\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\t\t\t\texit(EXIT_FAILURE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u666e\u901a\u306b\u958b\u3051\u305f\u306a\u3089\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\/\/ \u5b9f\u969b\u306b\u306f\u3053\u306e\u5f8c\u2193\u3067\u51e6\u7406\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\/\/ \u5f15\u6570\u306e\u4e2d\u306birdel(13\u756a\u76ee)\u304birclear(14\u756a\u76ee)\u304c\u3042\u308b\u306a\u3089\r\n\t\t\tif (pcount == 13 || pcount == 14)\r\n\t\t\t{\r\n\t\t\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3059\u308b\r\n\t\t\t\tdev_num = 0x10;\r\n\t\t\t\tgvc_cmd = 0x95;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\/\/ \u6b21\u306e\u691c\u7d22\u30d1\u30bf\u30fc\u30f3\u306b\r\n\t\tpcount ++;\r\n\t}\r\n\t\/\/ \u3082\u3057gvc_cmd\u304c0\u306e\u307e\u307e\u306a\u3089\r\n\tif (gvc_cmd == 0)\r\n\t{\r\n\t\t\/\/ \u30bd\u30d5\u30c8\u540d\u3068\u4f7f\u3044\u65b9\u3092\u8868\u793a\r\n\t\tprintf(&quot;%s %s\\n\\n&quot;, SOFTNAME, VERSION);\r\n\t\tprintf(&quot;%s &#x5B;version|list|reset|stop|end|sw?on|sw?off|irrx|irtx|irget (filename)|irset filename|irdel]\\n\\n&quot;, argv&#x5B;0]);\r\n\t\tprintf(&quot;\t* MAX IR DATA LENGTH = %d\\n\\n&quot;, GVC_IR_DATALEN_MAX);\r\n\t\t\/\/ \u7d42\u308f\u308a\r\n\t\texit(1);\r\n\t}\r\n\t\r\n\t\/\/ \u4e71\u6570\u521d\u671f\u5316\r\n\tsrand(time(0));\r\n\t\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9577\u3055\u3092\u8a2d\u5b9a\r\n\tmsgq_length = sizeof(GVC_MESSAGE_QUEUE_t) - sizeof(long);\r\n\t\r\n\t\/\/ \u30d1\u30b9\u540d\u3068\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8b58\u5225\u5b50\u3092 System V IPC \u30ad\u30fc\u306b\u5909\u63db\u3059\u308b(\u547d\u4ee4\u30ad\u30e5\u30fc)\r\n\t\/\/ gvcd\u304c\u52d5\u3044\u3066\u3044\u308b\u3053\u3068\u304c\u524d\u63d0\u306a\u306e\u3067\u3001gvcd\u306ePID\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u751f\u6210\u3059\u308c\u3070OK\u3002\r\n\tmsgq_key = ftok(GVC_PID_FILENAME, 'w');\r\n\t\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fcID\u3092\u53d6\u5f97\r\n\/\/\/\tmessage_qid = msgget(msgq_key, 0660);\r\n\tmessage_qid = msgget(msgq_key, 0666);\r\n\t\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fcID\u304c\u53d6\u5f97\u3067\u304d\u305f\u306a\u3089(message_qid!=-1)\r\n\tif (message_qid != -1)\r\n\t{\r\n\t\t\/\/ \u4f5c\u6210\u3057\u305f\u30ad\u30e5\u30fcID\u3092\u51fa\u529b\r\n\t\tprintf(&quot;QID = %d\\n&quot;, message_qid);\r\n\t}\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fcID\u304c\u53d6\u5f97\u3067\u304d\u306a\u304b\u3063\u305f\u3089(message_qid=-1)\r\n\telse\r\n\t{\r\n\t\t\/\/ \u30a8\u30e9\u30fc\u3092\u51fa\u529b\r\n\t\tfprintf(stderr, &quot;Message Queue make error : %s\\n&quot;, strerror(errno));\r\n\t\t\/\/ \u7d42\u308f\u308a\r\n\t\texit(EXIT_FAILURE);\r\n\t}\r\n\t\r\n\t\/\/ \u306a\u3093\u3089\u304b\u306e\u547d\u4ee4\u304c\u3042\u308b\u306a\u3089\r\n\tif (gvc_cmd != 0)\r\n\t{\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u521d\u671f\u5316\r\n\t\tmemset((void *)&amp;send_message_queue.q, sizeof(GVC_QUEUE_MESSAGE_t), 0x00);\r\n\t\t\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u8a2d\u5b9a\u2026\u3053\u3053\u3067\u306f\u547d\u4ee4\u3092\u9001\u4fe1\u3059\u308b\r\n\t\tsend_message_queue.qtype = COMMAND_Q;\t\t\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u30bf\u30a4\u30d7\u8a2d\u5b9a(\u8981\u6c42)\r\n\t\tsend_message_queue.q.gvc_num = 0x01;\t\t\t\t\/\/ \u5bfe\u8c61GVC\u756a\u53f7\u8a2d\u5b9a(1=\u3068\u308a\u3042\u3048\u305a\u2026TBD)\r\n\t\tsend_message_queue.q.msg_type = GVC_MSG_ENQ;\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30bf\u30a4\u30d7\u8a2d\u5b9a(GVC\u3078\u306e\u5404\u7a2e\u554f\u3044\u5408\u308f\u305b)\r\n\t\tsend_message_queue.q.dev_num = dev_num;\t\t\t\t\/\/ \u63a5\u7d9aGVC\u756a\u53f7\u8a2d\u5b9a(1=\u30de\u30b9\u30bf\u30fc\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc)\r\n\t\tsend_message_queue.q.format = 0x01;\t\t\t\t\t\/\/ \u30b3\u30de\u30f3\u30c9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u8a2d\u5b9a\r\n\t\tsend_message_queue.q.cmd = gvc_cmd;\t\t\t\t\t\/\/ \u30b3\u30de\u30f3\u30c9\u8a2d\u5b9a\r\n\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u3089\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u3001\u3068\u3044\u3046\u547d\u4ee4\u3067\u3001\u304b\u3064\u4fdd\u5b58\u5148\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u6307\u5b9a\u304c\u3042\u308b\u306a\u3089\r\n\t\tif (gvc_cmd == 0x94 &amp;&amp; argc == 3)\r\n\t\t{\r\n\t\t\t\/\/ \u4fdd\u5b58\u5148\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u30b3\u30d4\u30fc(\u5f15\u6570\u78ba\u8a8d\u306e\u3068\u3053\u308d\u3067\u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u308b\u304b\u8abf\u3079\u3066\u3044\u308b\u306e\u3067\u30b3\u30d4\u30fc\u3059\u308b\u3060\u3051\u3067OK)\r\n\t\t\tstrcpy((char *)send_message_queue.q.data, argv&#x5B;2]);\r\n\t\t\t\/\/ \u30c7\u30fc\u30bf\u9577\u8a2d\u5b9a\r\n\t\t\tsend_message_queue.q.data_len = strlen((char *)send_message_queue.q.data);\r\n\t\t}\r\n\t\t\/\/ dev_num\u3067\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u3078\u8d64\u5916\u7dda\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\u3059\u308b\u3001\u3068\u3044\u3046\u547d\u4ee4\u3067\u3001\u304b\u3064\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u6307\u5b9a\u304c\u3042\u3063\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u3066\u3044\u308b\u306a\u3089\r\n\t\telse if (gvc_cmd == 0x93 &amp;&amp; argc == 3 &amp;&amp; datafp != NULL)\r\n\t\t{\r\n\t\t\t\/\/ \u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30c7\u30fc\u30bf\u3092\u8aad\u51fa\u3001\u304b\u3064\u30c7\u30fc\u30bf\u9577\u8a2d\u5b9a\r\n\t\t\tsend_message_queue.q.data_len = fread(send_message_queue.q.data, sizeof(char), BUFF_SIZE, datafp);\r\n\t\t\t\/\/ \u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u9589\u3058\u308b\r\n\t\t\tfclose(datafp);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\/\/ \u305d\u308c\u4ee5\u5916\u306f\u4eca\u306e\u3068\u3053\u308d\u7279\u306b\u30c7\u30fc\u30bf\u306f\u306a\u3044\u306e\u3067\r\n\t\t\tsend_message_queue.q.data_len = 0;\t\t\t\t\t\/\/ \u30c7\u30fc\u30bf\u9577\u8a2d\u5b9a\r\n\t\t}\r\n\t\t\r\n\t\t\/\/ CRC\u306e\u8a2d\u5b9a\u306f\u2026\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u3001\u3068\u3044\u3046\u304bLinux\u30ec\u30d9\u30eb\u306b\u306a\u308b\u3068\u30c6\u30fc\u30d6\u30eb\u69cb\u9020\u4f53\u306e\u30a2\u30e9\u30a4\u30f3\u30e1\u30f3\u30c8\u304c\u884c\u308f\u308c\u308b\u304b\u3089\u5b9f\u8cea\u3067\u304d\u306a\u3044\u3002\r\n\t\t\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\r\n\t\tmsgq_result = msgsnd(message_qid, &amp;send_message_queue, msgq_length, 0);\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3067\u304d\u305f\u306a\u3089(=0)\r\n\t\tif (msgq_result == 0)\r\n\t\t{\r\n\t\t\t\/\/ \u753b\u9762\u306b\u51fa\u529b\r\n\t\t\tprintf(&quot;COMMAND SEND ... \\n&quot;);\r\n\t\t\tprintf(&quot;\tqtype = 0x%02lx\\n&quot;, send_message_queue.qtype);\r\n\t\t\tprintf(&quot;\tq.gvc_num = 0x%02x\\n&quot;, send_message_queue.q.gvc_num);\r\n\t\t\tprintf(&quot;\tq.msg_type = 0x%02x\\n&quot;, send_message_queue.q.msg_type);\r\n\t\t\tprintf(&quot;\tq.dev_num = 0x%02x\\n&quot;, send_message_queue.q.dev_num);\r\n\t\t\tprintf(&quot;\tq.format = 0x%02x\\n&quot;, send_message_queue.q.format);\r\n\t\t\tprintf(&quot;\tq.cmd = 0x%02x\\n&quot;, send_message_queue.q.cmd);\r\n\t\t\tprintf(&quot;\tq.data_len = %0d\\n&quot;, send_message_queue.q.data_len);\r\n\t\t\tprintf(&quot;\tq.data = %s\\n&quot;, send_message_queue.q.data);\r\n\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\texit(EXIT_SUCCESS);\r\n\t\t}\r\n\t\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u9001\u4fe1\u3067\u304d\u306a\u304b\u3063\u305f\u3089(!=0)\r\n\t\telse\r\n\t\t{\r\n\t\t\t\/\/ \u30a8\u30e9\u30fc\u3092\u51fa\u529b\r\n\t\t\tfprintf(stderr, &quot;COMMAND SEND ERROR : %s(ERRNO=%d, message_qid=%d, msgq_length=%d)\\n&quot;, strerror(errno), errno, message_qid, msgq_length);\r\n\t\t\t\/\/ \u7d42\u308f\u308a\r\n\t\t\texit(EXIT_FAILURE);\r\n\t\t}\r\n\t\t\r\n\t\tsleep(1);\r\n\t}\r\n\t\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u53d7\u4fe1\r\n\t\/\/ \u300c\u6c42\u3081\u3066\u3044\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u306a\u3044\u300d\u3053\u3068\u3082\u3042\u308b\uff0emsgflg\u3068\u3057\u3066IPC_NOWAIT\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\r\n\t\/\/ \u308b\u5834\u5408\u306b\u306f\u3059\u3050\u306b\u30a8\u30e9\u30fc\u3092\u8fd4\u3059\u304c\uff0c\u305d\u3046\u3067\u306a\u3044\u5834\u5408\u306b\u306f\u6c42\u3081\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u5f97\u3089\u308c\u308b\u304b\uff0c\r\n\t\/\/ \u30ad\u30e5\u30fc\u304c\u6d88\u3048\u308b\u304b\uff0c\u30b7\u30b0\u30ca\u30eb\u3067\u6355\u7372\u3055\u308c\u308b\u307e\u3067\u5f85\u3064\uff0e\r\n\t\r\n\tmsgq_result = msgrcv(message_qid, &amp;rcv_message_queue, msgq_length, RESULT_Q, IPC_NOWAIT);\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u53d7\u4fe1\u3067\u304d\u305f\u306a\u3089(!=-1)\r\n\tif (msgq_result != -1)\r\n\t{\r\n\t\t\/\/ \u30c7\u30fc\u30bf\u3092\u51fa\u529b\r\n\t\tprintf(&quot;MESSAGE RECEIVED ... qtype = %ld\\n&quot;, rcv_message_queue.qtype);\r\n\t}\r\n\t\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u53d7\u4fe1\u3067\u304d\u306a\u304b\u3063\u305f\u3089(=-1)\r\n\telse\r\n\t{\r\n\t\t\/\/ \u3068\u308a\u3042\u3048\u305a\u30b3\u30de\u30f3\u30c9\u3092\u9001\u308b\u3060\u3051\u306a\u306e\u3067\u4f55\u3082\u3057\u306a\u3044\r\n\/\/\t\t\/\/ \u30a8\u30e9\u30fc\u3092\u51fa\u529b\r\n\/\/\t\tfprintf(stderr, &quot;Message Queue receieved error : %s\\n&quot;, strerror(errno));\r\n\/\/\t\t\/\/ \u7d42\u308f\u308a\r\n\/\/\t\texit(EXIT_FAILURE);\r\n\t}\r\n\t\/\/ \u7d42\u308f\u308a\r\n\texit(EXIT_SUCCESS);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \/\/ Global Versatile Controler http:\/\/www.gvc-on.net\/ \/\/  &hellip; <a href=\"https:\/\/www.gvc-on.net\/?page_id=619\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":609,"menu_order":30,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-619","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=619"}],"version-history":[{"count":1,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/619\/revisions"}],"predecessor-version":[{"id":620,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/619\/revisions\/620"}],"up":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/609"}],"wp:attachment":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}