<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Problems to use FTP with Zephyr</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/119132/problems-to-use-ftp-with-zephyr</link><description>Hi, 
 
 I&amp;#180;m tryng to developer an application with nrf9161dk and i need create and upload a txt file with FTP. I&amp;#180;m in trouble to create the file with &amp;lt;zephyr/fs/fs.h&amp;gt; and &amp;lt;zephyr/sys/fdtable.h&amp;gt;. I receive a lot of errors of compiler. I also dont have</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 19 Feb 2025 22:05:28 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/119132/problems-to-use-ftp-with-zephyr" /><item><title>RE: Problems to use FTP with Zephyr</title><link>https://devzone.nordicsemi.com/thread/523774?ContentTypeID=1</link><pubDate>Wed, 19 Feb 2025 22:05:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7909bc79-4922-4a50-b7c8-e600fc92a9e3</guid><dc:creator>Felipe Dantas</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I forgot about this open topic. I&amp;#39;m back to post the solution. When I opened this topic I was a beginner in Zephyr. After some trial and errors, I solved this issue with the code below:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static K_SEM_DEFINE(ftp_sem, 0, 1);

char ftp_svr[80];
char ftp_path[80];
char ftp_user[50];
char ftp_pass[50];
uint16_t ftp_port = 21;	 
char remote_path[128] = &amp;quot;/&amp;quot;; 
char ftp_string_to_send[300] = &amp;quot;File Content Here&amp;quot;; 

void ftp_ctrl_callback(const uint8_t *msg, uint16_t len)
{
	LOG_INF(&amp;quot;%s&amp;quot;, msg);
	/* Release semaphore when receiving answer from server */
	k_sem_give(&amp;amp;ftp_sem);
}

void ftp_data_callback(const uint8_t *msg, uint16_t len)
{
	LOG_INF(&amp;quot;%s&amp;quot;, msg);
}

static void ftp_send_data(void)
{
	char file_name[100];

	int err = snprintf(ftp_string_to_send, sizeof(ftp_string_to_send) - 1, &amp;quot;File Content Here&amp;quot;);

	// Deactivate psm and edrx to don&amp;#180;t interfere with the FTP transmission (optional)
	lte_lc_psm_req(false);
	lte_lc_edrx_req(false);

	// Initialize FTP Client
	int ret = ftp_init(ftp_ctrl_callback, ftp_data_callback);
	if (ret)
	{
		LOG_ERR(&amp;quot;FTP Client initialization failed: %d\n&amp;quot;, ret);
		return;
	}

	// Conect to FTP server
	ret = ftp_open(ftp_svr, ftp_port, -1);
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;Failed to open an FTP connection: %d\n&amp;quot;, ret);
		ftp_close();
		return;
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	// Login on FTP server
	ret = ftp_login(ftp_user, ftp_pass);
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;Login to FTP server failed: %d\n&amp;quot;, ret);
		ftp_close();
		return;
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	// Get server status
	ret = ftp_status();
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;Requesting server status failed: %d\n&amp;quot;, ret);
		ftp_close();
		return;
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	// Config remote Path
	if (strlen(remote_path) &amp;gt; 0)
	{
		LOG_INF(&amp;quot;Changing remote directory to: %s\n&amp;quot;, remote_path);
		ret = ftp_cwd(remote_path);
		if (ret &amp;lt; 0)
		{
			LOG_ERR(&amp;quot;Failed to change remote directory: %d\n&amp;quot;, ret);
			ftp_close();
			return;
		}

		// Wait server response
		k_sem_take(&amp;amp;ftp_sem, K_FOREVER);
	}

	// Define transfer mode (ASCII ou BINARY)
	LOG_INF(&amp;quot;Setting transfer type to ASCII...\n&amp;quot;);
	ret = ftp_type(FTP_TYPE_ASCII);
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;Failed to set transfer type: %d\n&amp;quot;, ret);
		ftp_close();
		return;
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	// FILE UPLOAD
	LOG_INF(&amp;quot;Uploading file to FTP server...\n&amp;quot;);

	ret = ftp_put(file_name, (const uint8_t *)ftp_string_to_send, strlen(ftp_string_to_send), FTP_PUT_NORMAL);
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;FTP file upload failed: %d\n&amp;quot;, ret);
		ftp_close();
		return;
	}
	else
	{
		LOG_INF(&amp;quot;File uploaded successfully.\n&amp;quot;);
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	// Close FTP connection
	ret = ftp_close();
	if (ret &amp;lt; 0)
	{
		LOG_ERR(&amp;quot;Disconnecting from server failed: %d\n&amp;quot;, ret);
	}

	// Wait server response
	k_sem_take(&amp;amp;ftp_sem, K_FOREVER);

	LOG_INF(&amp;quot;Disconnected from FTP server.\n&amp;quot;);

	// Activate PSM e eDRX 
	lte_lc_psm_req(true);
	lte_lc_edrx_req(true);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;What I and many developers need sometimes is just an example. It would be nice to have this in the FTP documentation.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Felipe Dantas&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Problems to use FTP with Zephyr</title><link>https://devzone.nordicsemi.com/thread/523773?ContentTypeID=1</link><pubDate>Wed, 14 Aug 2024 11:19:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c6809e8d-dcf8-44ef-9e37-5530c8d32ebb</guid><dc:creator>Hakon</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
[quote user=""]I receive a lot of errors of compiler.[/quote]
&lt;p&gt;please show a screenshot or something from the compile errors.&lt;/p&gt;
[quote user=""]I also dont have idea of how use FTP in zephyr for nrf cause don´t exist any lib or example of ftp client lib or ftp api.[/quote]
&lt;p&gt;How about this one? &lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/networking/ftp_client.html"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/networking/ftp_client.html&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>