{"id":1715,"date":"2016-04-26T10:24:17","date_gmt":"2016-04-26T17:24:17","guid":{"rendered":"http:\/\/visualgdb.com\/w\/?p=1715"},"modified":"2016-04-26T10:24:17","modified_gmt":"2016-04-26T17:24:17","slug":"using-project-templates-for-embedded-projects","status":"publish","type":"post","link":"https:\/\/visualgdb.com\/tutorials\/arm\/templates\/","title":{"rendered":"Using Project Templates for Embedded Projects"},"content":{"rendered":"<p>This tutorial shows how to convert a VisualGDB project into a template that can be used to create a similar project on the same or a different machine. Before you begin, install VisualGDB 5.1 or later. Note that project templates are available in the Custom edition and higher.<\/p>\n<p>We will first create a basic project, modify it by adding some source files and changing settings, and then show how to create a template based on it.<\/p>\n<ol>\n<li>Start Visual Studio and launch the VisualGDB Embedded Project Wizard:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/01-demoname.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1716\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/01-demoname.png\" alt=\"01-demoname\" width=\"786\" height=\"514\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/01-demoname.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/01-demoname-300x196.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Proceed with the default settings on the first page (New Project-&gt;Embedded Binary):<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/02-prjtype2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1717\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/02-prjtype2.png\" alt=\"02-prjtype\" width=\"738\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/02-prjtype2.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/02-prjtype2-300x230.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>On the second page select your toolchain and device. In this tutorial we will target the STM32F4Discovery board, so we select the STM32F407VG device. Change the floating point support mode to Hardware and the libc library type to newlib-nano. We will show later how these settings will be saved in the template:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/03-device3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1718\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/03-device3.png\" alt=\"03-device\" width=\"738\" height=\"626\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/03-device3.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/03-device3-300x254.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>On the Sample Selection page select &#8220;LEDBlink (HAL)&#8221; and proceed with the default settings:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/04-sample2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1719\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/04-sample2.png\" alt=\"04-sample\" width=\"738\" height=\"626\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/04-sample2.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/04-sample2-300x254.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>On the Debug transport page select your debug method and configure it to use your JTAG or SWD programmer. In this example we will explicitly select the SWD mode and change the load mode to &#8220;Load only if changed&#8221; to show how these settings are saved in the template:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/05-dbgex.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1720\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/05-dbgex.png\" alt=\"05-dbgex\" width=\"738\" height=\"626\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/05-dbgex.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/05-dbgex-300x254.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>Press &#8220;Finish&#8221; to generate the project. We will now modify it by adding a class called &#8220;PWMGenerator&#8221; that will generate the PWM output to make the LED go brighter and dimmer softly. Right-click in Solution Explorer and select &#8220;Add-&gt;New Item&#8221;:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/08-newitem.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1721\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/08-newitem.png\" alt=\"08-newitem\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/08-newitem.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/08-newitem-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Add an empty PWMGenerator.h file to the project:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/09-pwmgen.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1722\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/09-pwmgen.png\" alt=\"09-pwmgen\" width=\"786\" height=\"534\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/09-pwmgen.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/09-pwmgen-300x204.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Similarly add PWMGenerator.cpp:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/10-gencpp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1723\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/10-gencpp.png\" alt=\"10-gencpp\" width=\"786\" height=\"534\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/10-gencpp.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/10-gencpp-300x204.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Copy the following text into PWMGenerator.h:\n<pre class=\"\">#pragma once\r\n\r\nclass PWMGenerator\r\n{\r\nprivate:\r\n\u00a0\u00a0\u00a0 int m_TotalPeriod, m_Pin;\r\n\u00a0\u00a0\u00a0 double m_DutyCycle;\r\n\u00a0\u00a0 \u00a0\r\npublic:\r\n\u00a0\u00a0\u00a0 PWMGenerator(int totalPeriod, int pin)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : m_TotalPeriod(totalPeriod)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 , m_DutyCycle(0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 , m_Pin(pin)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 void SetDutyCycle(double portion)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m_DutyCycle = portion;\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 void RunIteration();\r\n};<\/pre>\n<p>Then click on the Smart Tag near the &#8220;RunIteration&#8221; function and select &#8220;Create implementation&#8221;: <a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/11-header.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1724\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/11-header.png\" alt=\"11-header\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/11-header.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/11-header-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Enter the following implementation for the function (don&#8217;t forget to include PWMGenerator.h and the HAL header file):\n<pre class=\"\">void PWMGenerator::RunIteration()\r\n{\r\n\u00a0\u00a0\u00a0 HAL_GPIO_WritePin(GPIOD, m_Pin, GPIO_PIN_SET);\r\n\u00a0\u00a0\u00a0 for (int i = 0; i &lt; (m_TotalPeriod * m_DutyCycle); i++)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 asm(\"nop\");\r\n\u00a0\u00a0\u00a0 HAL_GPIO_WritePin(GPIOD, m_Pin, GPIO_PIN_RESET);\r\n\u00a0\u00a0\u00a0 for (int i = 0; i &lt; (m_TotalPeriod * (1 - m_DutyCycle)); i++)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 asm(\"nop\");\r\n}<\/pre>\n<p><a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/12-cpp.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1725\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/12-cpp.png\" alt=\"12-cpp\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/12-cpp.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/12-cpp-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Finally add the following lines to your main() function:\n<pre class=\"\">#ifdef ENABLE_PWM_GENERATOR\r\n\u00a0\u00a0 \u00a0for (double arg = 0;;arg+=0.01)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0gen.SetDutyCycle((1 + sin(arg)) \/ 2);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0gen.RunIteration();\r\n\u00a0\u00a0 \u00a0}\r\n#endif<\/pre>\n<p><a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/13-cond.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1726\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/13-cond.png\" alt=\"13-cond\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/13-cond.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/13-cond-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Note how the code block inside the #ifdef statement is inactive. This happens because we have never defined the ENABLE_PWM_GENERATOR macro. Open VisualGDB Project Properties and define it on the Makefile Settings page:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/14-pwmenable.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1727\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/14-pwmenable.png\" alt=\"14-pwmenable\" width=\"786\" height=\"594\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/14-pwmenable.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/14-pwmenable-300x227.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Now the code block is active. You can press F5 to build and start debugging your project so that you can verify that the LED is slowly turning brighter and dimmer:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/15-enabled.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1728\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/15-enabled.png\" alt=\"15-enabled\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/15-enabled.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/15-enabled-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>We will now convert the project into a template that will contain:\n<ul>\n<li>The new PWMGenerator class<\/li>\n<li>The modifications to the main .cpp file<\/li>\n<li>The selected device and its properties like the newlib-nano library<\/li>\n<li>The build settings like the added ENABLE_PWM_GENERATOR macro<\/li>\n<li>The debug settings like the explicitly selected SWD method<\/li>\n<\/ul>\n<p>Select File-&gt;Export Project Template in Visual Studio:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/16-template.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1729\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/16-template.png\" alt=\"16-template\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/16-template.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/16-template-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Enter the file name for the template. If you press the &#8220;Browse&#8221; button, VisualGDB will offer saving it to %LOCALAPPDATA%\\VisualGDB\\CustomProjectTemplates, however you can pick any other location:<br \/>\n<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/17-zipfile.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1730\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/17-zipfile.png\" alt=\"17-zipfile\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/17-zipfile.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/17-zipfile-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/li>\n<li>Now we will create a project based on the template. You can do that on the same machine, or any other machine that has VisualGDB installed and can access the template file. Open VisualGDB Embedded Project Wizard:<br \/>\n<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/18-newprjx2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1731\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/18-newprjx2.png\" alt=\"18-newprjx2\" width=\"786\" height=\"534\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/18-newprjx2.png 786w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/18-newprjx2-300x204.png 300w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/a><\/li>\n<li>Select &#8220;Create a project from a custom template&#8221;:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/19-template.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1732\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/19-template.png\" alt=\"19-template\" width=\"738\" height=\"565\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/19-template.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/19-template-300x230.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a>\n<p>Note how the &#8220;Finish&#8221; button becomes available immediately after you select the template file. If you press it now, VisualGDB will immediately create a project based on the template, however if you click &#8220;Next&#8221;, you can go through the settings loaded from the template and change them if you wish.<\/li>\n<li>The Device Selection page will have the device pre-selected and the settings like the Newlib-nano library will be automatically loaded:<br \/>\n<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/20-autodev.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1733\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/20-autodev.png\" alt=\"20-autodev\" width=\"738\" height=\"605\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/20-autodev.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/20-autodev-300x246.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>The Debug Method page will similarly have the correct debug method selected and configured exactly in the way your original project was:<br \/>\n<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/21-autodbg.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1734\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/21-autodbg.png\" alt=\"21-autodbg\" width=\"738\" height=\"605\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/21-autodbg.png 738w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/21-autodbg-300x246.png 300w\" sizes=\"(max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>Once you press Finish, VisualGDB will generate a new project that will have all files and build settings from the original project. Note how the ENABLE_PWM_GENERATOR macro is automatically defined.<br \/>\n<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/22-created.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1735\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/22-created.png\" alt=\"22-created\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/22-created.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/22-created-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/p>\n<p>Common files outside the project directory won&#8217;t be included in the project and will be referenced instead.<\/li>\n<li>The VisualGDB project template format is straight-forward: it&#8217;s simply a .zip file containing your project files and the template.xml file containing a snapshot of the project properties. You can rename the file to .zip and simply open it in Explorer:<a href=\"http:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/23-xmlzip.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1736\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/23-xmlzip.png\" alt=\"23-xmlzip\" width=\"956\" height=\"676\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/23-xmlzip.png 956w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2016\/03\/23-xmlzip-300x212.png 300w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a>Because VisualGDB saves all project settings in the template file independently, the templates will work across all supported Visual Studio versions. E.g. you can create a template in Visual Studio 2015 and use it to create a project in Visual Studio 2008.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to convert a VisualGDB project into a template that can be used to create a similar<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[53,38,123],"_links":{"self":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/1715"}],"collection":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/comments?post=1715"}],"version-history":[{"count":3,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/1715\/revisions"}],"predecessor-version":[{"id":1925,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/1715\/revisions\/1925"}],"wp:attachment":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/media?parent=1715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/categories?post=1715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/tags?post=1715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}