{"action":"created","comment":{"url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/comments/93118968","pull_request_review_id":13641034,"id":93118968,"diff_hunk":"@@ -0,0 +1,619 @@\n+/**\n+ * LCDd driver for the Futaba TOSD-5711BB LED display,\n+ * as found in Elonex Artisan/FIC Spectra media centre cases\n+ */\n+\n+/* Copyright (C) 2014 Blackeagle  email: gm(dot)blackeagle(at)gmail(dot)com\n+ * Additions by Alex Wood (2015)  email: thetewood(at)gmail(dot)com\n+ *\n+ * CREDITS to Steve Williams for the original driver code and the\n+ * inspiration to write this.\n+ *\n+ * V E R S I O N  - 1.2\n+ *\n+ * C H A N G E L O G\n+ * =================\n+ *\n+ * 29/08/15 - Added all remaining extra icon symbols (including colons for time display)\n+ *            Added explaination of all codes (4 are unknown)\n+ *            Cleaned up code formatting\n+ *            (by AJW)\n+ *\n+ * 24/03/14 - Attempt to add some custom icon support.\n+ *\n+ * Definitely working - Volume (the Word), play, pause, stop, mute\n+ * Music & photo Icons light but do not extinguish !!\n+ *\n+ * 25/03/14 -  Finished adding custom icon support with the XBMC\n+ * \t\t\t\tLCDproc addon and my custom futaba extension.\n+ *\n+ * 26/03/14 -  Added support to XBMC client for FWD/REW icons.\n+ * \t\t\t   Volume bar algorithm tweaked to display 0 bars\n+ * \t\t\t   when muted.\n+ *\n+ * 27/03/14 -  As the display doesnt support ':', added a routine\n+ * \t\t\t   to swap this to '-' for the clock display\n+ *\n+ * This program is free software; you can redistribute it and/or modify\n+ * it under the terms of the GNU General Public License as published by\n+ * the Free Software Foundation; either version 2 of the License, or\n+ * any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU General Public License\n+ * along with this program; if not, write to the Free Software\n+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301\n+ *\n+ */\n+\n+#ifdef HAVE_CONFIG_H\n+#include \"config.h\"\n+#endif\n+\n+#include <stdio.h>\n+#include <stdint.h>\n+#include <unistd.h>\n+#include <stdlib.h>\n+#include <libusb-1.0/libusb.h>\n+#include <string.h>\n+#include <ctype.h>\n+#include \"lcd.h\"\n+#include \"futaba.h\" \n+#include \"errno.h\"\n+#include \"report.h\"\n+\n+#define SET_REPORT 0x09\n+\n+#define VENDOR_ID 0x0547\n+#define PRODUCT_ID 0x7000\n+futabaDriver_t g_futabaDriver;\n+\n+//----------------------------------------------------------------------\n+\n+/** private data for the \\* futaba TOSD-5711BB LED driver */\n+typedef struct futaba_private_data {\n+\tint width;\t\t\t\t/**< display width in characters */\n+\tint height;\t\t\t\t/**< display height in characters */\n+\tchar *framebuf;\t\t\t\t/**< frame buffer */\n+\tchar *old_framebuf;\t\t\t/** < old framebuffer */\n+\tint is_busy;\t\t\t\t/** < busy flag for futaba_flush  */\n+\tint old_icon_map;\t\t\t/** < futaba icon map  */\n+\tlibusb_device_handle *my_handle;\t/** < usb device handle  */\n+\tlibusb_context *ctx;\t\t\t/** < usb context  */\n+} PrivateData;\n+\n+/* Vars for the server core */\n+MODULE_EXPORT char *api_version = API_VERSION;\n+MODULE_EXPORT int stay_in_foreground = 0;\n+MODULE_EXPORT int supports_multiple = 0;\n+MODULE_EXPORT char *symbol_prefix = \"futaba_\";\n+\n+/**\n+ * Send the report to the display.\n+ * \\param my_report  Pointer to the report holding the string.\n+ * \\param my_handle  Pointer to usb handle.\n+ * \\retval \t     0 on success, -1 on error.\n+ */\n+ int futabaSendReport(libusb_device_handle *my_handle, futabaReport_t *my_report)\n+{\n+\tint retVal = -1;\n+\tuint8_t *p_rep = (uint8_t *)my_report;\n+\n+\tretVal  = libusb_control_transfer(\n+\t\t\t\t\tmy_handle,\n+\t\t\t\t\tLIBUSB_DT_HID,\t\t// Request Type\n+\t\t\t\t\tSET_REPORT,\t\t// Request\n+\t\t\t\t\t0x0200,\t\t\t// Report Type OUTPUT | ID 0\n+\t\t\t\t\t0,\t\t\t// Endpoint\n+\t\t\t\t\tp_rep,\t\t\t// Data to go\n+\t\t\t\t\tsizeof(futabaReport_t),\t// Length\n+\t\t\t\t\t5000);\n+\n+\treturn(retVal != sizeof(futabaReport_t));\n+}\n+\n+ /**\n+ * Send the data to the display.\n+ * \\param drvthis  Pointer to driver structure.\n+ * \\param string   The string to send.\n+ * \\return         0 on success, -1 on error.\n+ */\n+ int futaba_send_string(Driver *drvthis)\n+{\n+\tint len;\n+\tint n, i;\n+\tfutabaReport_t my_report;\n+\tPrivateData *p = drvthis->private_data;\n+\tchar string[p->width * p->height];\n+\n+\tmemset(&my_report,0,sizeof(futabaReport_t));\n+\n+\tp->is_busy = 1;\n+\n+\t// get our string\n+\tfor (i = 0; i < p->height; i++) {\n+\t\tmemcpy(string, p->framebuf + (i * p->width), p->width);\n+\t\tstring[p->width] = '\\0';\n+\n+\t\t// swap the : chars for -\n+\t\tlen = strlen (string);\n+\n+\t\tfor(n=0; n < len; n++)\n+\t\t{\n+\t\t\tif (string[n] == ':')\n+\t\t\t\tstring[n] ='-';\n+\t\t}\n+\n+\t\tlen = strlen (string);\n+\n+\t\tmy_report.opcode = FUTABA_OPCODE_STRING;\n+\t\tmy_report.param1 = 0x04;\n+\t\tmy_report.type.str.startPos = 0x01;\n+\t\tmy_report.type.str.len = len;\n+\n+\t\t// Convert to UPPER case as that's all the display uses\n+\t\tfor(n=0; n < len; n++)\n+\t\t{\n+\t\t\tmy_report.type.str.string[n] = toupper(string[n]);\n+\t\t}\n+\n+\t\tif( len > 7)\n+\t\t{\n+\t\t\twhile( len >= 7)\n+\t\t\t{\n+\t\t\t\tif( futabaSendReport(p->my_handle, &my_report) )\n+\t\t\t\t{\n+\t\t\t\t\tfprintf(stderr,\"Failed in futabaSendString()\\n\");\n+\t\t\t\t\treturn -1;\n+\t\t\t\t\tusleep(500000);\n+\t\t\t\t}\n+\t\t\t\tmy_report.type.str.startPos--;\n+\t\t\t\tlen--;\n+\t\t\t}\n+\t\t}\n+\t\telse\n+\t\t{\n+\t\t\tmy_report.type.str.len = 7;\n+\t\t\tfutabaSendReport(p->my_handle,&my_report);\n+\t\t}\n+\t}\n+\n+\tp->is_busy = 0;\n+\treturn 0;\n+}\n+\n+/**\n+ * Initalize the usb data and internal handles.\n+ * \\param drvthis   Pointer to driver structure.\n+ * \\param my_driver Pointer to futaba driver structure.\n+ * \\return          0 on success, -1 on error.\n+ */\n+int futabaInitDriver( futabaDriver_t *my_driver, Driver *drvthis)\n+{\n+\tint retVal = -1;\n+\n+\tif( my_driver->ctx == NULL )\n+\t{\n+\t\tif( libusb_init(&my_driver->ctx) < 0 )\n+\t\t{\n+\t\t\treport(RPT_DEBUG, \"%s: USB init Failed\", drvthis->name);\n+\t\t\tretVal--;\n+\t\t}\n+\t}\n+\n+\t// Get a handle to our device\n+\tif( (my_driver->my_handle = libusb_open_device_with_vid_pid(\n+\t\t\t\tmy_driver->ctx,\n+\t\t\t\tVENDOR_ID,\n+\t\t\t\tPRODUCT_ID)) == NULL )\n+\t{\n+\t\treport(RPT_DEBUG, \"%s: LibUsb open failed\", drvthis->name);\n+\t}\n+\telse\n+\t{\n+\t        retVal++;\n+\t}\n+\n+\tif( libusb_kernel_driver_active(my_driver->my_handle,0) )\n+\t{\n+\t\treport(RPT_DEBUG, \"%s: Kernel driver found. Detatching it...\", drvthis->name);\n+\n+\t\tif( libusb_detach_kernel_driver(my_driver->my_handle,0) )\n+\t\t{\n+\t\t\treport(RPT_DEBUG, \"%s: Can't detach kernel driver\", drvthis->name);\n+\t\t\tretVal--;\n+\t\t}\n+\t}\n+\treturn retVal;\n+}\n+\n+/**\n+ * Internal routine to set up usb interface and reset display.\n+ * \\param drvthis  Pointer to driver structure.\n+ * \\return         0 on success.\n+ */\n+int futaba_start_driver(Driver *drvthis)\n+{\n+\tint n;\n+\tfutabaDriver_t *my_driver = &g_futabaDriver;\n+\tPrivateData *p = drvthis->private_data;\n+\n+\tif( futabaInitDriver(my_driver,drvthis) )\n+\t{\n+\t\treport(RPT_DEBUG, \"%s: Failed to init driver\", drvthis->name);\n+\t\tfutaba_shutdown(drvthis);\n+\t}\n+\telse\n+\t{\n+\t\treport(RPT_DEBUG, \"%s: RESET Device\", drvthis->name);\n+\t\tif( (n = libusb_reset_device(my_driver->my_handle)) )\n+\t\t{\n+\t\t\treport(RPT_DEBUG, \"%s: RESET Failed\", drvthis->name);\n+\t\t\tlibusb_close(my_driver->my_handle);\n+\t\t\tif( futabaInitDriver(my_driver, drvthis) )\n+\t\t\t{\n+\t\t\t\treport(RPT_DEBUG, \"%s: Failed to re-init driver\", drvthis->name);\n+\t\t\t\tfutaba_shutdown(drvthis);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t// Claim the interface for us\n+\tif( (n = libusb_claim_interface(my_driver->my_handle,0)) )\n+\t{\n+\t\treport(RPT_DEBUG, \"%s: Failed to claim interface\", drvthis->name);\n+\t\tlibusb_close(my_driver->my_handle);\n+\t\tlibusb_exit(my_driver->ctx);\n+\t\texit(-1);\n+\t}\n+\telse\n+\t{ // Write the usb handle and context to the private_data\n+\t\tp->my_handle = my_driver->my_handle;\n+\t\tp->ctx = my_driver->ctx;\n+\t}\n+\treturn 0;\n+}\n+\n+/**\n+ * Internal function to cleanly exit.\n+ * \\param drvthis  Pointer to driver structure.\n+ */\n+void futaba_shutdown(Driver *drvthis)\n+{\n+\tPrivateData *p = drvthis->private_data;\n+\n+\tlibusb_release_interface(p->my_handle,0);\n+\tlibusb_close(p->my_handle);\n+\n+\tlibusb_exit(p->ctx);\n+\t// printf(\"Futaba display driver shutdown complete\\n\");\n+}\n+\n+ /**\n+ * Initalize the private data and call futaba_start_driver.\n+ * \\param drvthis  Pointer to driver structure.\n+ * \\return         0 on success, -1 on error.\n+ */\n+\n+MODULE_EXPORT int\n+futaba_init (Driver *drvthis)\n+{\n+\tPrivateData *p;\n+\n+\t/* Allocate and store private data */\n+\tp = (PrivateData *) calloc(1, sizeof(PrivateData));\n+\tif (p == NULL)\n+\t\treturn -1;\n+\tif (drvthis->store_private_ptr(drvthis, p))\n+\t\treturn -1;\n+\n+\t/* initialize private data */\n+\n+\tp->width = 7;\n+\tp->height = 1;\n+        p->old_icon_map = 0;\n+\tp->framebuf = (char *)malloc(p->width * p->height);\n+\n+\tif (p->framebuf == NULL) {\n+\t\treport(RPT_ERR, \"%s: unable to create framebuffer\", drvthis->name);\n+\t\treturn -1;\n+\t}\n+\n+\tp->old_framebuf = (char *)malloc(p->width * p->height);\n+\tif (p->old_framebuf == NULL) {\n+\t\treport(RPT_ERR, \"%s: unable to create old_framebuffer\", drvthis->name);\n+\t\treturn -1;\n+\t}\n+\n+\t/* write to the file */\n+\tfutaba_start_driver(drvthis);\n+\tmemset(p->framebuf, ' ', p->width * p->height);\n+\tmemcpy(p->old_framebuf, p->framebuf,p->width * p->height);\n+\treport(RPT_DEBUG, \"%s: init() done\", drvthis->name);","path":"server/drivers/futaba.c","position":336,"original_position":336,"commit_id":"88eeb755d816bd112d5cf9359d49d985dbcb1cf9","original_commit_id":"88eeb755d816bd112d5cf9359d49d985dbcb1cf9","user":{"login":"haraldg","id":1666703,"avatar_url":"https://avatars.githubusercontent.com/u/1666703?v=3","gravatar_id":"","url":"https://api.github.com/users/haraldg","html_url":"https://github.com/haraldg","followers_url":"https://api.github.com/users/haraldg/followers","following_url":"https://api.github.com/users/haraldg/following{/other_user}","gists_url":"https://api.github.com/users/haraldg/gists{/gist_id}","starred_url":"https://api.github.com/users/haraldg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haraldg/subscriptions","organizations_url":"https://api.github.com/users/haraldg/orgs","repos_url":"https://api.github.com/users/haraldg/repos","events_url":"https://api.github.com/users/haraldg/events{/privacy}","received_events_url":"https://api.github.com/users/haraldg/received_events","type":"User","site_admin":false},"body":"Use debug() here, so this gets optimized away on non-debug builds ...\r\nThe same is true at more places.","created_at":"2016-12-19T21:03:34Z","updated_at":"2016-12-19T21:24:42Z","html_url":"https://github.com/lcdproc/lcdproc/pull/33#discussion_r93118968","pull_request_url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33","_links":{"self":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/comments/93118968"},"html":{"href":"https://github.com/lcdproc/lcdproc/pull/33#discussion_r93118968"},"pull_request":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33"}}},"pull_request":{"url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33","id":98544989,"html_url":"https://github.com/lcdproc/lcdproc/pull/33","diff_url":"https://github.com/lcdproc/lcdproc/pull/33.diff","patch_url":"https://github.com/lcdproc/lcdproc/pull/33.patch","issue_url":"https://api.github.com/repos/lcdproc/lcdproc/issues/33","number":33,"state":"open","locked":false,"title":"Add driver for the Futaba TOSD-5711BB VFDisplay on Elonex Artisan/Sca…","user":{"login":"ajw107","id":2067004,"avatar_url":"https://avatars.githubusercontent.com/u/2067004?v=3","gravatar_id":"","url":"https://api.github.com/users/ajw107","html_url":"https://github.com/ajw107","followers_url":"https://api.github.com/users/ajw107/followers","following_url":"https://api.github.com/users/ajw107/following{/other_user}","gists_url":"https://api.github.com/users/ajw107/gists{/gist_id}","starred_url":"https://api.github.com/users/ajw107/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajw107/subscriptions","organizations_url":"https://api.github.com/users/ajw107/orgs","repos_url":"https://api.github.com/users/ajw107/repos","events_url":"https://api.github.com/users/ajw107/events{/privacy}","received_events_url":"https://api.github.com/users/ajw107/received_events","type":"User","site_admin":false},"body":"…leo Media Centre PCs\r\nfutaba.so driver and LCDd.conf change for the Futaba TOSD-5711BB VFD","created_at":"2016-12-19T10:59:02Z","updated_at":"2016-12-19T21:24:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4a9304531fbb1850a48fa937980933b3dd10e63c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33/commits","review_comments_url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33/comments","review_comment_url":"https://api.github.com/repos/lcdproc/lcdproc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/lcdproc/lcdproc/issues/33/comments","statuses_url":"https://api.github.com/repos/lcdproc/lcdproc/statuses/88eeb755d816bd112d5cf9359d49d985dbcb1cf9","head":{"label":"ajw107:add_futaba_support","ref":"add_futaba_support","sha":"88eeb755d816bd112d5cf9359d49d985dbcb1cf9","user":{"login":"ajw107","id":2067004,"avatar_url":"https://avatars.githubusercontent.com/u/2067004?v=3","gravatar_id":"","url":"https://api.github.com/users/ajw107","html_url":"https://github.com/ajw107","followers_url":"https://api.github.com/users/ajw107/followers","following_url":"https://api.github.com/users/ajw107/following{/other_user}","gists_url":"https://api.github.com/users/ajw107/gists{/gist_id}","starred_url":"https://api.github.com/users/ajw107/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajw107/subscriptions","organizations_url":"https://api.github.com/users/ajw107/orgs","repos_url":"https://api.github.com/users/ajw107/repos","events_url":"https://api.github.com/users/ajw107/events{/privacy}","received_events_url":"https://api.github.com/users/ajw107/received_events","type":"User","site_admin":false},"repo":{"id":76851257,"name":"lcdproc","full_name":"ajw107/lcdproc","owner":{"login":"ajw107","id":2067004,"avatar_url":"https://avatars.githubusercontent.com/u/2067004?v=3","gravatar_id":"","url":"https://api.github.com/users/ajw107","html_url":"https://github.com/ajw107","followers_url":"https://api.github.com/users/ajw107/followers","following_url":"https://api.github.com/users/ajw107/following{/other_user}","gists_url":"https://api.github.com/users/ajw107/gists{/gist_id}","starred_url":"https://api.github.com/users/ajw107/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajw107/subscriptions","organizations_url":"https://api.github.com/users/ajw107/orgs","repos_url":"https://api.github.com/users/ajw107/repos","events_url":"https://api.github.com/users/ajw107/events{/privacy}","received_events_url":"https://api.github.com/users/ajw107/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ajw107/lcdproc","description":"Client/server suite for controlling a wide variety of LCD devices","fork":true,"url":"https://api.github.com/repos/ajw107/lcdproc","forks_url":"https://api.github.com/repos/ajw107/lcdproc/forks","keys_url":"https://api.github.com/repos/ajw107/lcdproc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ajw107/lcdproc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ajw107/lcdproc/teams","hooks_url":"https://api.github.com/repos/ajw107/lcdproc/hooks","issue_events_url":"https://api.github.com/repos/ajw107/lcdproc/issues/events{/number}","events_url":"https://api.github.com/repos/ajw107/lcdproc/events","assignees_url":"https://api.github.com/repos/ajw107/lcdproc/assignees{/user}","branches_url":"https://api.github.com/repos/ajw107/lcdproc/branches{/branch}","tags_url":"https://api.github.com/repos/ajw107/lcdproc/tags","blobs_url":"https://api.github.com/repos/ajw107/lcdproc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ajw107/lcdproc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ajw107/lcdproc/git/refs{/sha}","trees_url":"https://api.github.com/repos/ajw107/lcdproc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ajw107/lcdproc/statuses/{sha}","languages_url":"https://api.github.com/repos/ajw107/lcdproc/languages","stargazers_url":"https://api.github.com/repos/ajw107/lcdproc/stargazers","contributors_url":"https://api.github.com/repos/ajw107/lcdproc/contributors","subscribers_url":"https://api.github.com/repos/ajw107/lcdproc/subscribers","subscription_url":"https://api.github.com/repos/ajw107/lcdproc/subscription","commits_url":"https://api.github.com/repos/ajw107/lcdproc/commits{/sha}","git_commits_url":"https://api.github.com/repos/ajw107/lcdproc/git/commits{/sha}","comments_url":"https://api.github.com/repos/ajw107/lcdproc/comments{/number}","issue_comment_url":"https://api.github.com/repos/ajw107/lcdproc/issues/comments{/number}","contents_url":"https://api.github.com/repos/ajw107/lcdproc/contents/{+path}","compare_url":"https://api.github.com/repos/ajw107/lcdproc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ajw107/lcdproc/merges","archive_url":"https://api.github.com/repos/ajw107/lcdproc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ajw107/lcdproc/downloads","issues_url":"https://api.github.com/repos/ajw107/lcdproc/issues{/number}","pulls_url":"https://api.github.com/repos/ajw107/lcdproc/pulls{/number}","milestones_url":"https://api.github.com/repos/ajw107/lcdproc/milestones{/number}","notifications_url":"https://api.github.com/repos/ajw107/lcdproc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ajw107/lcdproc/labels{/name}","releases_url":"https://api.github.com/repos/ajw107/lcdproc/releases{/id}","deployments_url":"https://api.github.com/repos/ajw107/lcdproc/deployments","created_at":"2016-12-19T10:11:36Z","updated_at":"2016-12-19T10:11:39Z","pushed_at":"2016-12-19T10:44:49Z","git_url":"git://github.com/ajw107/lcdproc.git","ssh_url":"git@github.com:ajw107/lcdproc.git","clone_url":"https://github.com/ajw107/lcdproc.git","svn_url":"https://github.com/ajw107/lcdproc","homepage":"http://lcdproc.org/","size":3781,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"add_futaba_support"}},"base":{"label":"lcdproc:master","ref":"master","sha":"b5eced79b8f54db5afd7dea49bfdec6bdc7a2a76","user":{"login":"lcdproc","id":20595616,"avatar_url":"https://avatars.githubusercontent.com/u/20595616?v=3","gravatar_id":"","url":"https://api.github.com/users/lcdproc","html_url":"https://github.com/lcdproc","followers_url":"https://api.github.com/users/lcdproc/followers","following_url":"https://api.github.com/users/lcdproc/following{/other_user}","gists_url":"https://api.github.com/users/lcdproc/gists{/gist_id}","starred_url":"https://api.github.com/users/lcdproc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lcdproc/subscriptions","organizations_url":"https://api.github.com/users/lcdproc/orgs","repos_url":"https://api.github.com/users/lcdproc/repos","events_url":"https://api.github.com/users/lcdproc/events{/privacy}","received_events_url":"https://api.github.com/users/lcdproc/received_events","type":"Organization","site_admin":false},"repo":{"id":63944410,"name":"lcdproc","full_name":"lcdproc/lcdproc","owner":{"login":"lcdproc","id":20595616,"avatar_url":"https://avatars.githubusercontent.com/u/20595616?v=3","gravatar_id":"","url":"https://api.github.com/users/lcdproc","html_url":"https://github.com/lcdproc","followers_url":"https://api.github.com/users/lcdproc/followers","following_url":"https://api.github.com/users/lcdproc/following{/other_user}","gists_url":"https://api.github.com/users/lcdproc/gists{/gist_id}","starred_url":"https://api.github.com/users/lcdproc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lcdproc/subscriptions","organizations_url":"https://api.github.com/users/lcdproc/orgs","repos_url":"https://api.github.com/users/lcdproc/repos","events_url":"https://api.github.com/users/lcdproc/events{/privacy}","received_events_url":"https://api.github.com/users/lcdproc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/lcdproc/lcdproc","description":"Client/server suite for controlling a wide variety of LCD devices","fork":false,"url":"https://api.github.com/repos/lcdproc/lcdproc","forks_url":"https://api.github.com/repos/lcdproc/lcdproc/forks","keys_url":"https://api.github.com/repos/lcdproc/lcdproc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lcdproc/lcdproc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lcdproc/lcdproc/teams","hooks_url":"https://api.github.com/repos/lcdproc/lcdproc/hooks","issue_events_url":"https://api.github.com/repos/lcdproc/lcdproc/issues/events{/number}","events_url":"https://api.github.com/repos/lcdproc/lcdproc/events","assignees_url":"https://api.github.com/repos/lcdproc/lcdproc/assignees{/user}","branches_url":"https://api.github.com/repos/lcdproc/lcdproc/branches{/branch}","tags_url":"https://api.github.com/repos/lcdproc/lcdproc/tags","blobs_url":"https://api.github.com/repos/lcdproc/lcdproc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lcdproc/lcdproc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lcdproc/lcdproc/git/refs{/sha}","trees_url":"https://api.github.com/repos/lcdproc/lcdproc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lcdproc/lcdproc/statuses/{sha}","languages_url":"https://api.github.com/repos/lcdproc/lcdproc/languages","stargazers_url":"https://api.github.com/repos/lcdproc/lcdproc/stargazers","contributors_url":"https://api.github.com/repos/lcdproc/lcdproc/contributors","subscribers_url":"https://api.github.com/repos/lcdproc/lcdproc/subscribers","subscription_url":"https://api.github.com/repos/lcdproc/lcdproc/subscription","commits_url":"https://api.github.com/repos/lcdproc/lcdproc/commits{/sha}","git_commits_url":"https://api.github.com/repos/lcdproc/lcdproc/git/commits{/sha}","comments_url":"https://api.github.com/repos/lcdproc/lcdproc/comments{/number}","issue_comment_url":"https://api.github.com/repos/lcdproc/lcdproc/issues/comments{/number}","contents_url":"https://api.github.com/repos/lcdproc/lcdproc/contents/{+path}","compare_url":"https://api.github.com/repos/lcdproc/lcdproc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lcdproc/lcdproc/merges","archive_url":"https://api.github.com/repos/lcdproc/lcdproc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lcdproc/lcdproc/downloads","issues_url":"https://api.github.com/repos/lcdproc/lcdproc/issues{/number}","pulls_url":"https://api.github.com/repos/lcdproc/lcdproc/pulls{/number}","milestones_url":"https://api.github.com/repos/lcdproc/lcdproc/milestones{/number}","notifications_url":"https://api.github.com/repos/lcdproc/lcdproc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lcdproc/lcdproc/labels{/name}","releases_url":"https://api.github.com/repos/lcdproc/lcdproc/releases{/id}","deployments_url":"https://api.github.com/repos/lcdproc/lcdproc/deployments","created_at":"2016-07-22T10:13:59Z","updated_at":"2016-12-13T10:09:32Z","pushed_at":"2016-12-19T10:59:02Z","git_url":"git://github.com/lcdproc/lcdproc.git","ssh_url":"git@github.com:lcdproc/lcdproc.git","clone_url":"https://github.com/lcdproc/lcdproc.git","svn_url":"https://github.com/lcdproc/lcdproc","homepage":"http://lcdproc.org/","size":3745,"stargazers_count":15,"watchers_count":15,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":13,"mirror_url":null,"open_issues_count":8,"forks":13,"open_issues":8,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33"},"html":{"href":"https://github.com/lcdproc/lcdproc/pull/33"},"issue":{"href":"https://api.github.com/repos/lcdproc/lcdproc/issues/33"},"comments":{"href":"https://api.github.com/repos/lcdproc/lcdproc/issues/33/comments"},"review_comments":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33/comments"},"review_comment":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/lcdproc/lcdproc/pulls/33/commits"},"statuses":{"href":"https://api.github.com/repos/lcdproc/lcdproc/statuses/88eeb755d816bd112d5cf9359d49d985dbcb1cf9"}}}}
{"actor":{"display_login":"haraldg"}}