{"id":4779,"date":"2021-09-10T10:32:20","date_gmt":"2021-09-10T01:32:20","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=4779"},"modified":"2021-09-10T10:32:24","modified_gmt":"2021-09-10T01:32:24","slug":"xbox-360-%eb%93%9c%eb%9d%bc%ec%9d%b4%eb%b2%84-%eb%a7%8c%ec%a7%80%ea%b8%b01","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/xbox-360-%eb%93%9c%eb%9d%bc%ec%9d%b4%eb%b2%84-%eb%a7%8c%ec%a7%80%ea%b8%b01\/","title":{"rendered":"xbox 360 \ub4dc\ub77c\uc774\ubc84 \ub9cc\uc9c0\uae301"},"content":{"rendered":"\n<p>\ub0b4 \ub77c\uc988\ubca0\ub9ac \ud30c\uc774\uc5d0 usb \ud0c0\uc785 xbox360 \ud328\ub4dc\ub97c \ubd99\uc5ec \ubcf4\uace0\uc2f6\ub2e4. \ub9ac\ub205\uc2a4 \ucee4\ub110 xpad.c\uc5d0 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8 \uac70\uc758 \ubaa8\ub4e0 \uc81c\ud488 usb vendor, product id\uac00 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub2e4. xpad.c\uac00 \uc870\uae08 \ubcf5\uc791\ud558\uc5ec usb \uc778\ud130\ub7fd\ud2b8 \uc0ac\uc6a9 \ubc29\ubc95\uc744 \uc798 \uc774\ud574\ud560 \uc218 \uc5c6\ub2e4. \ud0a4 \uc785\ub825 \uc124\uc815\uc744 \uc5b4\ub5bb\uac8c \ud560\uc9c0\ub294 \ub098\uc911 \ubb38\uc81c\uace0&#8230; usb-skeletion.c \ubb38\uc11c \uc5ed\uc2dc \uc5b4\ub835\ub2e4. \uc5ec\uae30\ub294 \uc778\ud130\ub7fd\ud2b8 \ub300\uc2e0 \ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \uc804\uc1a1\uc744 \ubaa9\ud45c\ub85c \ud588\ub2e4.<\/p>\n\n\n\n<p>\uadf8 \uc911 \uac00\uc7a5 \ube44\uc2b7\ud55c <a href=\".\/drivers\/hid\/usbhid\/usbmouse.c\">usb \ub9c8\uc6b0\uc2a4 \ub4dc\ub77c\uc774\ubc84<\/a>\ub97c \ucee4\ub110\uc5d0\uc11c \ucc3e\uc558\ub2e4. \ucee4\ub110\uc774 \uc131\uacbd\uacfc \uac19\uc544 \ubaa8\ub4e0 \ubb3c\uc74c\uc5d0 \ub300\ud55c \ub2f5\uc744 \ud55c\ub2e4. 200\uc904 \uc57d\uac04 \ub118\uc5b4\uac00\ub294 \ucf54\ub4dc\ub85c \uc815\ub9d0 \uc778\ud130\ub7fd\ud2b8 \ud575\uc2ec\ub9cc \uc791\uc131\ud588\ub2e4.<\/p>\n\n\n\n<p>\ub300\ub7b5 \uad6c\uc131\uc740 \uc544\ub798\uc640 \uac19\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>usb \uad6c\uc870\uccb4 \uc120\uc5b8.<\/li><li>\uc0ac\uc6a9\uac00\ub2a5\ud55c usb \ubc88\ud638 \ucc3e\uc74c, \ub4f1\ub85d.<\/li><li>\uc785\ub825 \uc124\uc815.<\/li><li>\uc778\ud130\ub7fd\ud2b8 \uc124\uc815.<\/li><\/ul>\n\n\n\n<p><a href=\"https:\/\/manpages.debian.org\/jessie-backports\/linux-manual-4.8\/usb_fill_int_urb.9.en.html\">usb_fill_int_urb<\/a>\ub85c call \ud568\uc218\ub97c \ub4f1\ub85d\ud558\uc5ec \uc778\ud130\ub7fd\ud2b8\ub97c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. usb \uc778\ud130\ub7fd\ud2b8\uac00 \uc77c\uc815 \uc8fc\uae30\ub85c \ubc1c\uc0dd\ud55c\ub2e4. \uacc4\uc18d \uc2e4\ud589\ud558\uae30 \uc704\ud574 \uc778\ud130\ub7fd\ud2b8\ub85c \uc2e4\ud589\ud560 \ud568\uc218 \uc548\uc5d0 usb_submit_urb\ub97c \ub123\ub294\ub2e4. \uc54c\uace0\ubcf4\uba74 \ucc38 \uc26c\uc6b4\ub370 \ucc98\uc74c \uc774\ud574\ud558\uae30 \uc5b4\ub835\ub2e4. xpad.c\ub3c4 \uac19\uc740 \ubc29\uc2dd\uc774\ub2e4. \ucc98\uc74c\uc5d0 \uc65c \uc548\ubcf4\uc600\ub294\uc9c0&#8230;\uc544\uc9c1 \ud0a4 \uc785\ub825\uc744 \uc124\uc815\ud558\uc9c0 \uc54a\uc558\uace0, \ucee4\ub110\uc5d0 test\ub97c \ucd9c\ub825\ud558\ub3c4\ub85d \ud588\ub2e4.<\/p>\n\n\n\n<p>usb \uad6c\uc870\uccb4\ub294 \uc5ec\ub7ec \uc815\ubcf4\ub97c \uc27d\uac8c \uc0ac\uc6a9\ud558\ub824 \uad70\ub354\ub354\uae30\ub97c \ub9ce\uc774 \ubd99\uc774\ub294 \ub4ef \ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;linux\/kernel.h>\n#include &lt;linux\/input.h>\n#include &lt;linux\/module.h>\n#include &lt;linux\/usb\/input.h>\n#include &lt;linux\/init.h>\n#include &lt;linux\/device.h>\n#include &lt;linux\/usb\/input.h>\n#include &lt;linux\/slab.h>\n#define USB_XBOX_MINOR_BASE\t1\n\t\t\n\/\/\uad6c\uc870\uccb4 \uc120\uc5b8.\nstruct usb_xpad{\n\tstruct input_dev *dev;\t\t\/* input device interface *\/\n\tstruct usb_device *udev;\t\/* usb device *\/\n\tstruct usb_interface *intf;\t\/* usb interface *\/\n\t__u8    irq_in_endpointAddr;    \/* interrupt in address*\/\n\t__u8    irq_out_endpointAddr;   \/* interrupt out address*\/\n\tstruct usb_endpoint_descriptor *endpoint_in, *endpoint_out;\n\tsigned char *data;\t\t\/* input data *\/\n\tstruct urb *irq_in;\t\t\/* urb for interrupt in report*\/\n\tstruct work_struct work;\t\/* init\/remove device from callback *\/\n};\nstatic struct usb_xpad *myPad;\nstatic int xpad_init_input(struct usb_xpad *xpad);\nstatic void xpad_deinit_input(struct usb_xpad *xpad);\nstatic void usb_xpad_irq(struct urb *urb){\n\tpr_info(\"test\\n\");\n\tusb_submit_urb(urb, GFP_KERNEL);\n}\nstatic int xpad_init_urb(struct usb_interface *intf, struct usb_xpad *xpad);\nstatic ssize_t xbox_read(struct file *file, char *buffer, size_t count,\n\t\t\t loff_t *ppos)\n{\n\tpr_info(\"device was read.\\n\");\n\treturn 0;\n}\nstatic ssize_t xbox_write(struct file *file, const char *user_buffer,\n\t\t\t  size_t count, loff_t *ppos)\n{\n\treturn 0;\n}\nstatic int xbox_open(struct inode *inode, struct file *file)\n{\n\tint retval;\n\tstruct urb *ptr_urb;\n\tptr_urb = usb_alloc_urb(0, GFP_KERNEL);\n\tpr_info(\"device was opened.\\n\");\n\tif (!ptr_urb) {\n\t\tretval = -ENOMEM;\n\t\tgoto error;\n\t}\n\treturn 0;\nerror:\n\tif(ptr_urb)\n\t{\n\t\tusb_free_urb(ptr_urb);\n\t}\n\treturn retval;\n}\nstatic int xbox_release(struct inode *inode, struct file *file)\n{\n\tpr_info(\"xbox was released\\n\");\n\treturn 0;\n}\nstatic int xbox_flush(struct file *file, fl_owner_t id)\n{\n\treturn 0;\n}\nstatic const struct file_operations xboxtest_fops = {\n\t.owner =\tTHIS_MODULE,\n\t.read =\t\txbox_read,\n\t.write =\txbox_write,\n\t.open =\t\txbox_open,\n\t.release =\txbox_release,\n\t.flush =\txbox_flush,\n\t.llseek =\tnoop_llseek,\n};\n\/*\n * usb class driver info in order to get a minor number from the usb core,\n * and to have the device registered with the driver core\n *\/\nstatic struct usb_class_driver xbox_class = {\n\t.name =\t\t\"xbox%d\",\n\t.fops =\t\t&amp;xboxtest_fops,\n\t.minor_base =\tUSB_XBOX_MINOR_BASE,\n};\nstatic struct usb_driver xpad_test_driver;\nstatic const struct usb_device_id xpad_table[] = {\n\t\/\/{ USB_INTERFACE_INFO('X', 'B', 0) },\t\/* X-Box USB-IF not approved class *\/\n\t\/\/XPAD_XBOX360_VENDOR(0x045e),\t\t\/* Microsoft X-Box 360 controllers *\/\n\t{USB_DEVICE(0x045e, 0x028e)},\n\t{ }\n};\nstatic const signed short xpad_common_btn[] = {\n\tBTN_A, BTN_B, BTN_X, BTN_Y,\t\t\t\/* \"analog\" buttons *\/\n\tBTN_START, BTN_SELECT, BTN_THUMBL, BTN_THUMBR,\t\/* start\/back\/sticks *\/\n\t-1\t\t\t\t\t\t\/* terminating entry *\/\n};\nMODULE_DEVICE_TABLE(usb, xpad_table);\nstatic int xpad_init_input(struct usb_xpad *xpad)\n{\n\tstruct input_dev *input_dev;\n\tint i, error;\n\tint pipe, maxp;\n\tinput_dev = input_allocate_device();\n\tif (!input_dev)\n\t\treturn -ENOMEM;\n\txpad->dev = input_dev;\n\tusb_to_input_id(xpad->udev, &amp;input_dev->id);\n\tinput_set_drvdata(input_dev, xpad);\n\t\/* set up standard buttons *\/\n\tfor (i = 0; xpad_common_btn[i] >= 0; i++)\n\t\tinput_set_capability(input_dev, EV_KEY, xpad_common_btn[i]);\n\tpipe = usb_rcvintpipe(xpad->udev, xpad->irq_in_endpointAddr);\n\tmaxp = usb_maxpacket(xpad->udev, pipe, usb_pipeout(pipe));\n\tusb_fill_int_urb(xpad->irq_in, xpad->udev,\n\t\t\tpipe, xpad->data,\n\t\t\t(maxp > 8 ? 8 : maxp),\n\t\t\tusb_xpad_irq, xpad, \n\t\t\txpad->endpoint_in->bInterval);\n\terror = input_register_device(input_dev);\n\tif (error)\n\t\tgoto err_free_dev;\n\tpr_info(\"usb input was registered\\n\");\n\tusb_submit_urb(xpad->irq_in, GFP_KERNEL);\n\treturn 0;\t\/\/return ok;\nerr_free_dev:\n\tinput_free_device(input_dev);\n\treturn error;\n}\nstatic void xpad_deinit_input(struct usb_xpad *xpad)\n{\n\tpr_info(\"xpad is %p, ->dev is %p.\\n\",xpad, xpad->dev);\n\tif(xpad->dev)\n\t\tinput_unregister_device(xpad->dev);\n}\nstatic int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id)\n{\n\tstruct usb_xpad *xpad;\n\tstruct usb_device *udev;\n\tstruct usb_endpoint_descriptor *ep_irq_in,*ep_irq_out;\n\tstruct usb_host_interface *intf_tmp;\n\tint retval;\n\tudev = interface_to_usbdev(intf);\n\txpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);\n\tif (!xpad)\n\t\treturn -ENOMEM;\n\t\/\/\ucd08\uae30\ud654\n\t\/\/kzallocd\uc73c\ub85c 0\uc73c\ub85c \ucd08\uae30\ud654\n\t\/\/xpad->odata_serial = 0;\n\txpad->udev = udev;\n\txpad->intf = intf;\n\tmyPad = xpad;\n\tpr_info(\"xpad is %p, myPad is %p\\n\", xpad->intf, myPad->intf);\n\tpr_info(\"interface is %p\\n\", intf);\n\t\/\/if (intf->cur_altsetting->desc.bNumEndpoints != 2)\n\t\/\/\treturn -ENODEV;\n\tintf_tmp = intf->cur_altsetting;\n\t\/\/ find common usb endpoint helper \uc0ac\uc6a9\n\t\/\/https:\/\/lkml.org\/lkml\/2020\/9\/21\/1239\n\t\n\t\/* set up the endpoint information *\/\n\t\/* use only the first bulk-in and bulk-out endpoints *\/\n\tretval = usb_find_common_endpoints(intf_tmp,\n\t\t\tNULL, NULL, &amp;ep_irq_in, &amp;ep_irq_out);\n\tif (retval) {\n\t\tdev_err(&amp;intf->dev,\n\t\t\t\"Could not find both irq-in and irq-out endpoints\\n\");\n\t\tgoto error;\n\t}\n\txpad->irq_in_endpointAddr = ep_irq_in->bEndpointAddress;\n\txpad->irq_out_endpointAddr = ep_irq_out->bEndpointAddress;\n\txpad->endpoint_in = ep_irq_in;\n\txpad->endpoint_out = ep_irq_out;\n\txpad->irq_in = usb_alloc_urb(0, GFP_KERNEL);\n\tif (!xpad->irq_in) {\n\t\tretval = -ENOMEM;\n\t\tgoto err_free_in_urb;\n\t}\n\tusb_set_intfdata(intf, xpad);\n\tpr_info(\"[info]: found interrupt end point, in: %d, out: %d\", ep_irq_in->bEndpointAddress, ep_irq_out->bEndpointAddress);\n\tpr_info(\"probe \\n\");\n\t\/\/pr_info(\"%04X:%04X pluged \\n\", id->idVendor, id->idProduct);\n\tretval = usb_register_dev(intf, &amp;xbox_class);\n\tif (retval&lt; 0) {\n\t\tpr_err(\"usb_register failed for the \"__FILE__ \"driver.\"\n\t\t\t\t\"Error number %d\", retval);\n\t\tusb_set_intfdata(intf, NULL);\n\t\tgoto error;\n\t}\n\t\/* let the user know what node this device is now attached to *\/\n\tdev_info(&amp;intf->dev,\n\t\t \"USB Skeleton device now attached to USBSkel-%d\",\n\t\t intf->minor);\n\t\/\/input\uc73c\ub85c \ub4f1\ub85d.\n\txpad_init_input(xpad);\n\t\n\treturn 0;\nerror:\n\tkfree(xpad);\n\treturn retval;\nerr_free_in_urb:\n\tusb_free_urb(xpad->irq_in);\n\treturn retval;\n}\nstatic void xpad_disconnect(struct usb_interface *intf)\n{\n\tstruct usb_xpad *xpad;\n\txpad = usb_get_intfdata(intf);\n\tpr_info(\"xpad address is %p\\n\", xpad);\n\txpad_deinit_input(xpad);\n\tusb_deregister_dev(intf, &amp;xbox_class);\n\tusb_set_intfdata(intf, NULL);\n\tkfree(xpad);\n\tpr_info(\"disconnected\\n\");\n}\nstatic int xpad_suspend(struct usb_interface *intf, pm_message_t message)\n{\n\tpr_info(\"suspendes\\n\");\n\treturn 0;\n}\nstatic int xpad_resume(struct usb_interface *intf)\n{\n\tpr_info(\"resumed\\n\");\n\treturn 0;\n}\nstatic struct usb_driver xpad_test_driver = {\n\t.name\t\t= \"xbox360_test\",\n\t.probe\t\t= xpad_probe,\n\t.disconnect\t= xpad_disconnect,\n\t.suspend\t= xpad_suspend,\n\t.resume\t\t= xpad_resume,\n\t.id_table\t= xpad_table,\n};\nstatic int xpad_init_urb(struct usb_interface *intf, struct usb_xpad *xpad)\n{\n\tint retval;\n\txpad->irq_in= usb_alloc_urb(0, GFP_KERNEL);\n\tif (!xpad->irq_in) {\n\t\tretval = -ENOMEM;\n\t\tgoto error;\n\t}\n\treturn 0;\nerror:\n\treturn retval;\n}\n\t\n\/\/ \ubaa8\ub4c8 loading, unloading \ud14c\uc2a4\ud2b8\ub97c \uc704\ud574 \uacfc\uac70 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\n\/\/module_init(usb_xboxtest_init);\n\/\/module_exit(usb_xboxtest_exit);\n\/\/Macro\nmodule_usb_driver(xpad_test_driver);\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"now0930\");\nMODULE_DESCRIPTION(\"Hello, xbox pad!\");\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[45180.903315] xpad is ea6ce566, myPad is ea6ce566\n[45180.903332] interface is ea6ce566\n[45180.903349] [info]: found interrupt end point, in: 129, out: 1\n[45180.903360] probe \n[45180.903636] xbox360_test 1-1.2:1.0: USB Skeleton device now attached to USBSkel-1\n[45180.903815] input: Unspecified device as \/devices\/virtual\/input\/input8\n[45180.904290] usb input was registered\n[45180.904475] xpad is 50c63d58, myPad is 50c63d58\n[45180.904489] interface is 50c63d58\n[45180.904506] [info]: found interrupt end point, in: 130, out: 2\n[45180.904518] probe \n[45180.904685] xbox360_test 1-1.2:1.1: USB Skeleton device now attached to USBSkel-2\n[45180.904841] input: Unspecified device as \/devices\/virtual\/input\/input9\n[45180.905155] usb input was registered\n[45180.905310] xpad is 3bfd76ed, myPad is 3bfd76ed\n[45180.905323] interface is 3bfd76ed\n[45180.905342] xbox360_test 1-1.2:1.2: Could not find both irq-in and irq-out endpoints\n[45180.905432] xpad is 07d8d175, myPad is 07d8d175\n[45180.905451] interface is 07d8d175\n[45180.905469] xbox360_test 1-1.2:1.3: Could not find both irq-in and irq-out endpoints\n[45180.905585] usbcore: registered new interface driver xbox360_test\n[45180.909177] test\n[45180.913170] test\n[45210.971462] test\n[45210.984592] test\n[45210.997466] test\n[45211.010595] test\n[45211.075485] test\n[45211.088606] test\n[45211.109483] test\n[45211.130612] test\n[45211.151488] test\n[45211.168617] test\n[45211.181493] test\n[45211.754713] test\n[45211.799598] test\n[45211.812711] test\n[45212.329679] test\n[45217.545918] usbcore: deregistering interface driver xbox360_test\n[45217.546248] test\n[45217.546378] xpad address is 99d70f22\n[45217.546411] xpad is 99d70f22, ->dev is 8784f33d.\n[45217.699130] disconnected\n[45217.699578] test\n[45217.699674] xpad address is 0764c1af\n[45217.699692] xpad is 0764c1af, ->dev is 379dff77.\n[45217.779137] disconnected<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ub0b4 \ub77c\uc988\ubca0\ub9ac \ud30c\uc774\uc5d0 usb \ud0c0\uc785 xbox360 \ud328\ub4dc\ub97c \ubd99\uc5ec \ubcf4\uace0\uc2f6\ub2e4. \ub9ac\ub205\uc2a4 \ucee4\ub110 xpad.c\uc5d0 \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8 \uac70\uc758 \ubaa8\ub4e0 \uc81c\ud488 usb vendor, product id\uac00 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4782,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[949,911,53,798,950,948],"class_list":["post-4779","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-12","tag-driver","tag-kernel","tag-linux","tag-raspberry","tag-usb","tag-xbox360"],"jetpack_featured_media_url":"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2021\/09\/20210910_103043-scaled-e1631237517878.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=4779"}],"version-history":[{"count":1,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4779\/revisions"}],"predecessor-version":[{"id":4781,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/4779\/revisions\/4781"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media\/4782"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=4779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=4779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=4779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}