<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[PINE64 - Development Discussion on PineTime]]></title>
		<link>https://forum.pine64.org/</link>
		<description><![CDATA[PINE64 - https://forum.pine64.org]]></description>
		<pubDate>Sat, 16 May 2026 05:28:34 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Update pinetime bootloader OTA?]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=20029</link>
			<pubDate>Sat, 04 Oct 2025 21:25:01 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=29421">oscar-gardiazabal</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=20029</guid>
			<description><![CDATA[Hi, I'm trying to upload a modified pinetime bootloader using the reloader-mcuboot-1.0.1.zip from <a href="https://github.com/InfiniTimeOrg/pinetime-mcuboot-bootloader/releases/tag/1.0.1" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/pinetim.../tag/1.0.1</a><br />
I tried with the simplest test possible changing the version of the header to 2.0.0 in the reloader-mcuboot.bin of the reloader-mcuboot.zip with:<br />
"printf '\x02\x00\x00\x00\x00\x00\x00\x00' | dd of=reloader-mcuboot.bin bs=1 seek=&#36;((0x14)) conv=notrunc"<br />
and build it again with the same command of the Makefile:<br />
"python3 -m nordicsemi dfu genpkg --dev-type 0x0052 --application reloader-mcuboot.bin reloader-mcuboot.zip"<br />
After uploading the zip with Watchmate for Linux I got the image is ok but the InfiniTime shows the same version for the bootloader "1.0.1".<br />
It is still possible to update the bootloader OTA? I'm missing something? Thank you!<br />
Last try was using: Python 3.10.13, adafruit-nrfutil version 0.5.3.post16]]></description>
			<content:encoded><![CDATA[Hi, I'm trying to upload a modified pinetime bootloader using the reloader-mcuboot-1.0.1.zip from <a href="https://github.com/InfiniTimeOrg/pinetime-mcuboot-bootloader/releases/tag/1.0.1" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/pinetim.../tag/1.0.1</a><br />
I tried with the simplest test possible changing the version of the header to 2.0.0 in the reloader-mcuboot.bin of the reloader-mcuboot.zip with:<br />
"printf '\x02\x00\x00\x00\x00\x00\x00\x00' | dd of=reloader-mcuboot.bin bs=1 seek=&#36;((0x14)) conv=notrunc"<br />
and build it again with the same command of the Makefile:<br />
"python3 -m nordicsemi dfu genpkg --dev-type 0x0052 --application reloader-mcuboot.bin reloader-mcuboot.zip"<br />
After uploading the zip with Watchmate for Linux I got the image is ok but the InfiniTime shows the same version for the bootloader "1.0.1".<br />
It is still possible to update the bootloader OTA? I'm missing something? Thank you!<br />
Last try was using: Python 3.10.13, adafruit-nrfutil version 0.5.3.post16]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[wasp-os bluetooth dev documentation?]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19627</link>
			<pubDate>Thu, 16 Jan 2025 21:43:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28856">vrtigo</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19627</guid>
			<description><![CDATA[Having a bit of a time trying to develop bluetooth on the PineTime under wasp-os 0.4.<br />
<br />
There is little documentation about this from what ive seen, but Ive figured out that I need to use ubluepy, and set up and advertise a service. I can do this, but it nukes the Nordic UART Service, leaving development from that point problematic. Ive tried adding the NUS service and characteristics using the UUID's found in pynus, but the app fails to load when I do so with very little information about whats wrong.<br />
<br />
Any ideas on how to move forward?]]></description>
			<content:encoded><![CDATA[Having a bit of a time trying to develop bluetooth on the PineTime under wasp-os 0.4.<br />
<br />
There is little documentation about this from what ive seen, but Ive figured out that I need to use ubluepy, and set up and advertise a service. I can do this, but it nukes the Nordic UART Service, leaving development from that point problematic. Ive tried adding the NUS service and characteristics using the UUID's found in pynus, but the app fails to load when I do so with very little information about whats wrong.<br />
<br />
Any ideas on how to move forward?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[keep state across invocations]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19482</link>
			<pubDate>Thu, 31 Oct 2024 19:06:29 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28610">lmamane</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19482</guid>
			<description><![CDATA[In InfiniTime, is there a way for my screen (app) to maintain some state across invocations? E.g. for app settings, but also for a stopwatch/timer that can resume even if the user switched to another screen and back. I would just store the time point at which the stopwatch/timer started, and then recompute the elapsed/remaining time from the current time point when it is reopened.]]></description>
			<content:encoded><![CDATA[In InfiniTime, is there a way for my screen (app) to maintain some state across invocations? E.g. for app settings, but also for a stopwatch/timer that can resume even if the user switched to another screen and back. I would just store the time point at which the stopwatch/timer started, and then recompute the elapsed/remaining time from the current time point when it is reopened.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[multithreading issue / SIGSEGV under InfiniSim]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19478</link>
			<pubDate>Sat, 26 Oct 2024 15:57:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28610">lmamane</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19478</guid>
			<description><![CDATA[I get various crashes/SIGSEGV/SIGFPE/uncaught exceptions/"mutex released when not held"/... when running InfiniTime under InfiniSim.<br />
<br />
I opened the discussion for one of the reproducible ones at <a href="https://github.com/InfiniTimeOrg/InfiniSim/issues/160" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/InfiniSim/issues/160</a><br />
<br />
Another reproducible one seems too subtle / incomprehensible for me, and it seems to me that different threads get mixed up. I was hoping someone here would have more clue than me.<br />
<br />
The backtrace looks like:<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Thread 5 "displayapp" received signal SIGSEGV, Segmentation fault.<br />
[Switching to Thread 0x7fffe29fe6c0 (LWP 642677)]<br />
0x00005555555cf26b in lv_refr_obj (obj=0x7ffff79f1c, mask_ori_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:892<br />
892&nbsp;&nbsp;&nbsp;&nbsp;    if(obj-&gt;hidden != 0) return;<br />
(gdb) bt<br />
#0  0x00005555555cf26b in lv_refr_obj (obj=0x7ffff79f1c, mask_ori_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:892<br />
#1  0x00005555555cf1d6 in lv_refr_obj_and_children (top_p=0x555556bb96c8, mask_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:867<br />
#2  0x00005555555cef04 in lv_refr_area_part (area_p=0x7fffdc0017c2) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:773<br />
#3  0x00005555555ce3d6 in lv_refr_area (area_p=0x7fffdc0017c2) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:515<br />
#4  0x00005555555cdf7a in lv_refr_areas () at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:405<br />
#5  0x00005555555cd9ba in _lv_disp_refr_task (task=0x7fffdc001918) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:204<br />
#6  0x00005555555e53e4 in lv_task_exec (task=0x7fffdc001918) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_misc/lv_task.c:386<br />
#7  0x00005555555e4e6f in lv_task_handler () at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_misc/lv_task.c:134<br />
#8  0x00005555555af57a in Pinetime::Applications::DisplayApp::Refresh (this=0x5555556a4ae0 &lt;displayApp&gt;) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/displayapp/DisplayApp.cpp:251<br />
#9  0x00005555555af208 in Pinetime::Applications::DisplayApp::Process (instance=0x5555556a4ae0 &lt;displayApp&gt;) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/displayapp/DisplayApp.cpp:149<br />
#10 0x0000555555609dec in sdl_function_wrapper (instance=0x5555556a5bf8 &lt;displayApp+4376&gt;) at /home/master/src/pinetime/InfiniSim/sim/task.cpp:61</code></div></div><br />
Note that according to <span style="font-family: Courier New;" class="mycode_font">gdb</span>, in frame 1 <span style="font-family: Courier New;" class="mycode_font">lv_refr_obj_and_children</span> is called with <span style="font-family: Courier New;" class="mycode_font">top_p=0x555556bb96c8</span> in thread <span style="font-family: Courier New;" class="mycode_font">LWP 642677</span>. I have modified this function to make debug outputs to a file, one file per thread, as follows:<br />
<br />
Near the top of the file:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#define __USE_GNU<br />
#include &lt;unistd.h&gt;<br />
#undef __USE_GNU</code></div></div>then in the function:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>    char buf[40];<br />
    snprintf(buf, sizeof(buf), "VERBOSE_DEBUG_lv_core_%d.txt", gettid());<br />
    buf[sizeof(buf)-1] = (char)0;<br />
    FILE* vdf = fopen(buf, "a");</code></div></div>and then I <span style="font-family: Courier New;" class="mycode_font">fprintf(vdf, ...)</span><span style="font-family: Sans-serif;" class="mycode_font">, in particular I log the value of </span><span style="font-family: Courier New;" class="mycode_font">top_p</span><span style="font-family: Sans-serif;" class="mycode_font">. Now, the "funny thing" is according to the logs, <span style="font-family: Courier New;" class="mycode_font">lv_refr_obj_and_children</span> is called with <span style="font-family: Courier New;" class="mycode_font">top_p=0x555556bb96c8</span> only in thread </span><span style="font-family: Courier New;" class="mycode_font">642669</span><span style="font-family: Sans-serif;" class="mycode_font">!</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; grep -l 96c8 VERBOSE_DEBUG_lv_core_6426*<br />
VERBOSE_DEBUG_lv_core_642669.txt</code></div></div><span style="font-family: Sans-serif;" class="mycode_font">According to </span><span style="font-family: Courier New;" class="mycode_font">gdb</span><span style="font-family: Sans-serif;" class="mycode_font">, that thread is:</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Thread 1 (Thread 0x7ffff6e22cc0 (LWP 642669) "infinisim"):<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
29&nbsp;&nbsp;&nbsp;&nbsp;../sysdeps/unix/sysv/linux/poll.c: No such file or directory.<br />
(gdb) thread 1<br />
[Switching to thread 1 (Thread 0x7ffff6e22cc0 (LWP 642669))]<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
29&nbsp;&nbsp;&nbsp;&nbsp;in ../sysdeps/unix/sysv/linux/poll.c<br />
(gdb) bt<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
#1  0x00007ffff71f0d12 in ?? () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#2  0x00007ffff71f2d8f in ?? () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#3  0x00007ffff71f2f00 in xcb_wait_for_reply64 () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#4  0x00007ffff743810c in _XReply () from /lib/x86_64-linux-gnu/libX11.so.6<br />
#5  0x00007ffff74336ff in XSync () from /lib/x86_64-linux-gnu/libX11.so.6<br />
#6  0x00007ffff6498166 in ?? () from /lib/x86_64-linux-gnu/libGLX_mesa.so.0<br />
#7  0x00007ffff648823b in ?? () from /lib/x86_64-linux-gnu/libGLX_mesa.so.0<br />
#8  0x00007ffff7ecbbe6 in ?? () from /lib/x86_64-linux-gnu/libSDL2-2.0.so.0<br />
#9  0x00007ffff7e2f276 in ?? () from /lib/x86_64-linux-gnu/libSDL2-2.0.so.0<br />
#10 0x0000555555572074 in Framework::refresh (this=0x7fffffffdee0) at /home/master/src/pinetime/InfiniSim/main.cpp:609<br />
#11 0x000055555556f5d5 in main (argc=1, argv=0x7fffffffe0c8) at /home/master/src/pinetime/InfiniSim/main.cpp:1145</code></div></div><span style="font-family: Sans-serif;" class="mycode_font">Somehow the threads get mixed up???</span><br />
<br />
<span style="font-family: Sans-serif;" class="mycode_font">According to the logs, that function is called in thread 642677 only with values </span><span style="font-family: Courier New;" class="mycode_font">top_p = 0x7fffdc001958</span><span style="font-family: Sans-serif;" class="mycode_font">, </span><span style="font-family: Courier New;" class="mycode_font">0x7fffdc001c58</span><span style="font-family: Sans-serif;" class="mycode_font"> or </span><span style="font-family: Courier New;" class="mycode_font">0x7fffdc001d58</span><span style="font-family: Sans-serif;" class="mycode_font"> and each time it is called, </span><span style="font-family: Courier New;" class="mycode_font">lv_obj_get_parent(top_p) == NULL</span><span style="font-family: Sans-serif;" class="mycode_font"> (this is the value with which </span><span style="font-family: Courier New;" class="mycode_font">par</span><span style="font-family: Sans-serif;" class="mycode_font"> is initialised), meaning the function exits without entering the </span><span style="font-family: Courier New;" class="mycode_font">while(par != NULL)</span><span style="font-family: Sans-serif;" class="mycode_font"> loop, and never enters the </span><span style="font-family: Courier New;" class="mycode_font">lv_refr_obj</span><span style="font-family: Sans-serif;" class="mycode_font"> call where the SIGSEGV happens, which is the one in the loop.</span><br />
<br />
<span style="font-family: Sans-serif;" class="mycode_font">Still according to the logs, in thread 642669, all calls where </span><span style="font-family: Courier New;" class="mycode_font">top_p == 0x555556bb96c8</span><span style="font-family: Sans-serif;" class="mycode_font"> return, and the last call has another top_p value and has <span style="font-family: Courier New;" class="mycode_font">lv_obj_get_parent(top_p) == NULL</span>.</span>]]></description>
			<content:encoded><![CDATA[I get various crashes/SIGSEGV/SIGFPE/uncaught exceptions/"mutex released when not held"/... when running InfiniTime under InfiniSim.<br />
<br />
I opened the discussion for one of the reproducible ones at <a href="https://github.com/InfiniTimeOrg/InfiniSim/issues/160" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/InfiniSim/issues/160</a><br />
<br />
Another reproducible one seems too subtle / incomprehensible for me, and it seems to me that different threads get mixed up. I was hoping someone here would have more clue than me.<br />
<br />
The backtrace looks like:<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Thread 5 "displayapp" received signal SIGSEGV, Segmentation fault.<br />
[Switching to Thread 0x7fffe29fe6c0 (LWP 642677)]<br />
0x00005555555cf26b in lv_refr_obj (obj=0x7ffff79f1c, mask_ori_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:892<br />
892&nbsp;&nbsp;&nbsp;&nbsp;    if(obj-&gt;hidden != 0) return;<br />
(gdb) bt<br />
#0  0x00005555555cf26b in lv_refr_obj (obj=0x7ffff79f1c, mask_ori_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:892<br />
#1  0x00005555555cf1d6 in lv_refr_obj_and_children (top_p=0x555556bb96c8, mask_p=0x7fffe29fdb2e) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:867<br />
#2  0x00005555555cef04 in lv_refr_area_part (area_p=0x7fffdc0017c2) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:773<br />
#3  0x00005555555ce3d6 in lv_refr_area (area_p=0x7fffdc0017c2) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:515<br />
#4  0x00005555555cdf7a in lv_refr_areas () at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:405<br />
#5  0x00005555555cd9ba in _lv_disp_refr_task (task=0x7fffdc001918) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_core/lv_refr.c:204<br />
#6  0x00005555555e53e4 in lv_task_exec (task=0x7fffdc001918) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_misc/lv_task.c:386<br />
#7  0x00005555555e4e6f in lv_task_handler () at /home/master/src/pinetime/InfiniSim/InfiniTime/src/libs/lvgl/src/lv_misc/lv_task.c:134<br />
#8  0x00005555555af57a in Pinetime::Applications::DisplayApp::Refresh (this=0x5555556a4ae0 &lt;displayApp&gt;) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/displayapp/DisplayApp.cpp:251<br />
#9  0x00005555555af208 in Pinetime::Applications::DisplayApp::Process (instance=0x5555556a4ae0 &lt;displayApp&gt;) at /home/master/src/pinetime/InfiniSim/InfiniTime/src/displayapp/DisplayApp.cpp:149<br />
#10 0x0000555555609dec in sdl_function_wrapper (instance=0x5555556a5bf8 &lt;displayApp+4376&gt;) at /home/master/src/pinetime/InfiniSim/sim/task.cpp:61</code></div></div><br />
Note that according to <span style="font-family: Courier New;" class="mycode_font">gdb</span>, in frame 1 <span style="font-family: Courier New;" class="mycode_font">lv_refr_obj_and_children</span> is called with <span style="font-family: Courier New;" class="mycode_font">top_p=0x555556bb96c8</span> in thread <span style="font-family: Courier New;" class="mycode_font">LWP 642677</span>. I have modified this function to make debug outputs to a file, one file per thread, as follows:<br />
<br />
Near the top of the file:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#define __USE_GNU<br />
#include &lt;unistd.h&gt;<br />
#undef __USE_GNU</code></div></div>then in the function:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>    char buf[40];<br />
    snprintf(buf, sizeof(buf), "VERBOSE_DEBUG_lv_core_%d.txt", gettid());<br />
    buf[sizeof(buf)-1] = (char)0;<br />
    FILE* vdf = fopen(buf, "a");</code></div></div>and then I <span style="font-family: Courier New;" class="mycode_font">fprintf(vdf, ...)</span><span style="font-family: Sans-serif;" class="mycode_font">, in particular I log the value of </span><span style="font-family: Courier New;" class="mycode_font">top_p</span><span style="font-family: Sans-serif;" class="mycode_font">. Now, the "funny thing" is according to the logs, <span style="font-family: Courier New;" class="mycode_font">lv_refr_obj_and_children</span> is called with <span style="font-family: Courier New;" class="mycode_font">top_p=0x555556bb96c8</span> only in thread </span><span style="font-family: Courier New;" class="mycode_font">642669</span><span style="font-family: Sans-serif;" class="mycode_font">!</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; grep -l 96c8 VERBOSE_DEBUG_lv_core_6426*<br />
VERBOSE_DEBUG_lv_core_642669.txt</code></div></div><span style="font-family: Sans-serif;" class="mycode_font">According to </span><span style="font-family: Courier New;" class="mycode_font">gdb</span><span style="font-family: Sans-serif;" class="mycode_font">, that thread is:</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Thread 1 (Thread 0x7ffff6e22cc0 (LWP 642669) "infinisim"):<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
29&nbsp;&nbsp;&nbsp;&nbsp;../sysdeps/unix/sysv/linux/poll.c: No such file or directory.<br />
(gdb) thread 1<br />
[Switching to thread 1 (Thread 0x7ffff6e22cc0 (LWP 642669))]<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
29&nbsp;&nbsp;&nbsp;&nbsp;in ../sysdeps/unix/sysv/linux/poll.c<br />
(gdb) bt<br />
#0  0x00007ffff790d11f in __GI___poll (fds=0x7fffffffdac8, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29<br />
#1  0x00007ffff71f0d12 in ?? () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#2  0x00007ffff71f2d8f in ?? () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#3  0x00007ffff71f2f00 in xcb_wait_for_reply64 () from /lib/x86_64-linux-gnu/libxcb.so.1<br />
#4  0x00007ffff743810c in _XReply () from /lib/x86_64-linux-gnu/libX11.so.6<br />
#5  0x00007ffff74336ff in XSync () from /lib/x86_64-linux-gnu/libX11.so.6<br />
#6  0x00007ffff6498166 in ?? () from /lib/x86_64-linux-gnu/libGLX_mesa.so.0<br />
#7  0x00007ffff648823b in ?? () from /lib/x86_64-linux-gnu/libGLX_mesa.so.0<br />
#8  0x00007ffff7ecbbe6 in ?? () from /lib/x86_64-linux-gnu/libSDL2-2.0.so.0<br />
#9  0x00007ffff7e2f276 in ?? () from /lib/x86_64-linux-gnu/libSDL2-2.0.so.0<br />
#10 0x0000555555572074 in Framework::refresh (this=0x7fffffffdee0) at /home/master/src/pinetime/InfiniSim/main.cpp:609<br />
#11 0x000055555556f5d5 in main (argc=1, argv=0x7fffffffe0c8) at /home/master/src/pinetime/InfiniSim/main.cpp:1145</code></div></div><span style="font-family: Sans-serif;" class="mycode_font">Somehow the threads get mixed up???</span><br />
<br />
<span style="font-family: Sans-serif;" class="mycode_font">According to the logs, that function is called in thread 642677 only with values </span><span style="font-family: Courier New;" class="mycode_font">top_p = 0x7fffdc001958</span><span style="font-family: Sans-serif;" class="mycode_font">, </span><span style="font-family: Courier New;" class="mycode_font">0x7fffdc001c58</span><span style="font-family: Sans-serif;" class="mycode_font"> or </span><span style="font-family: Courier New;" class="mycode_font">0x7fffdc001d58</span><span style="font-family: Sans-serif;" class="mycode_font"> and each time it is called, </span><span style="font-family: Courier New;" class="mycode_font">lv_obj_get_parent(top_p) == NULL</span><span style="font-family: Sans-serif;" class="mycode_font"> (this is the value with which </span><span style="font-family: Courier New;" class="mycode_font">par</span><span style="font-family: Sans-serif;" class="mycode_font"> is initialised), meaning the function exits without entering the </span><span style="font-family: Courier New;" class="mycode_font">while(par != NULL)</span><span style="font-family: Sans-serif;" class="mycode_font"> loop, and never enters the </span><span style="font-family: Courier New;" class="mycode_font">lv_refr_obj</span><span style="font-family: Sans-serif;" class="mycode_font"> call where the SIGSEGV happens, which is the one in the loop.</span><br />
<br />
<span style="font-family: Sans-serif;" class="mycode_font">Still according to the logs, in thread 642669, all calls where </span><span style="font-family: Courier New;" class="mycode_font">top_p == 0x555556bb96c8</span><span style="font-family: Sans-serif;" class="mycode_font"> return, and the last call has another top_p value and has <span style="font-family: Courier New;" class="mycode_font">lv_obj_get_parent(top_p) == NULL</span>.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Developing on Mac (M3)]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19431</link>
			<pubDate>Sun, 22 Sep 2024 13:48:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28523">oksalahti</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19431</guid>
			<description><![CDATA[Hi,<br />
<br />
I just bought PineTime and started working on my own watch face.<br />
<br />
I managed to compile and run LVGL simulator for Mac with M3 (<a href="https://docs.lvgl.io/7.11/get-started/pc-simulator.html" target="_blank" rel="noopener" class="mycode_url">https://docs.lvgl.io/7.11/get-started/pc-simulator.html</a>)<br />
<br />
I tested my watch face with the LVGL simulator and it works as I would like it to work. Next step is to try to get my watch face running on the InfiniSim simulator.<br />
<br />
I managed to compile the InfiniSim simulator on Mac but it won't start. These are the error messages I get when trying to run the compiled simulator on mac.<br />
<br />
Has anyone managed to run the InfiniSim simulator on mac? Any ideas what's going on? I know I might be able to build InfiniTime project itself and upload my new code on my device but I'd feel much more safe if I can verify that the code runs on the simulator first.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>initial free_size = 40360<br />
info:  systemtask task started!<br />
info:  Last reset reason : Reset pin<br />
info:  [SpiNorFlash] Manufacturer : 0, Memory type : 0, memory density : 0<br />
info:  [SpiNorFlash] Wakeup<br />
info:  DISABLE<br />
info:  displayapp task started!<br />
info:  DISABLE<br />
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'nextEventMatchingMask should only be called from the Main Thread!'<br />
*** First throw call stack:<br />
(<br />
0  CoreFoundation                      0x0000000186420540 __exceptionPreprocess + 176<br />
1  libobjc.A.dylib                    0x0000000185f11eb4 objc_exception_throw + 60<br />
2  AppKit                              0x000000018a37487c -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 3164<br />
3  SDL2                                0x000000010502d76c SDL2 + 87916<br />
4  SDL2                                0x000000010502da08 SDL2 + 88584<br />
5  SDL2                                0x00000001050aca00 SDL_DYNAPI_entry + 218324<br />
6  SDL2                                0x00000001050acb30 SDL_DYNAPI_entry + 218628<br />
7  infinisim                          0x0000000104706af8 sdl_event_handler + 44<br />
8  infinisim                          0x00000001046dd328 lv_task_exec + 96<br />
9  infinisim                          0x00000001046dd0a0 lv_task_handler + 536<br />
10  infinisim                          0x00000001046944c8 _ZN8Pinetime12Applications10DisplayApp7RefreshEv + 328<br />
11  infinisim                          0x000000010469433c _ZN8Pinetime12Applications10DisplayApp7ProcessEPv + 88<br />
12  infinisim                          0x000000010470b8bc _Z20sdl_function_wrapperPv + 44<br />
13  SDL2                                0x0000000105037e80 SDL2 + 130688<br />
14  SDL2                                0x000000010503aef8 SDL2 + 143096<br />
15  libsystem_pthread.dylib            0x00000001862ce034 _pthread_start + 136<br />
16  libsystem_pthread.dylib            0x00000001862c8e3c thread_start + 8<br />
)<br />
libc++abi: terminating due to uncaught exception of type NSException<br />
zsh: abort      ./infinisim</code></div></div>]]></description>
			<content:encoded><![CDATA[Hi,<br />
<br />
I just bought PineTime and started working on my own watch face.<br />
<br />
I managed to compile and run LVGL simulator for Mac with M3 (<a href="https://docs.lvgl.io/7.11/get-started/pc-simulator.html" target="_blank" rel="noopener" class="mycode_url">https://docs.lvgl.io/7.11/get-started/pc-simulator.html</a>)<br />
<br />
I tested my watch face with the LVGL simulator and it works as I would like it to work. Next step is to try to get my watch face running on the InfiniSim simulator.<br />
<br />
I managed to compile the InfiniSim simulator on Mac but it won't start. These are the error messages I get when trying to run the compiled simulator on mac.<br />
<br />
Has anyone managed to run the InfiniSim simulator on mac? Any ideas what's going on? I know I might be able to build InfiniTime project itself and upload my new code on my device but I'd feel much more safe if I can verify that the code runs on the simulator first.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>initial free_size = 40360<br />
info:  systemtask task started!<br />
info:  Last reset reason : Reset pin<br />
info:  [SpiNorFlash] Manufacturer : 0, Memory type : 0, memory density : 0<br />
info:  [SpiNorFlash] Wakeup<br />
info:  DISABLE<br />
info:  displayapp task started!<br />
info:  DISABLE<br />
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'nextEventMatchingMask should only be called from the Main Thread!'<br />
*** First throw call stack:<br />
(<br />
0  CoreFoundation                      0x0000000186420540 __exceptionPreprocess + 176<br />
1  libobjc.A.dylib                    0x0000000185f11eb4 objc_exception_throw + 60<br />
2  AppKit                              0x000000018a37487c -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 3164<br />
3  SDL2                                0x000000010502d76c SDL2 + 87916<br />
4  SDL2                                0x000000010502da08 SDL2 + 88584<br />
5  SDL2                                0x00000001050aca00 SDL_DYNAPI_entry + 218324<br />
6  SDL2                                0x00000001050acb30 SDL_DYNAPI_entry + 218628<br />
7  infinisim                          0x0000000104706af8 sdl_event_handler + 44<br />
8  infinisim                          0x00000001046dd328 lv_task_exec + 96<br />
9  infinisim                          0x00000001046dd0a0 lv_task_handler + 536<br />
10  infinisim                          0x00000001046944c8 _ZN8Pinetime12Applications10DisplayApp7RefreshEv + 328<br />
11  infinisim                          0x000000010469433c _ZN8Pinetime12Applications10DisplayApp7ProcessEPv + 88<br />
12  infinisim                          0x000000010470b8bc _Z20sdl_function_wrapperPv + 44<br />
13  SDL2                                0x0000000105037e80 SDL2 + 130688<br />
14  SDL2                                0x000000010503aef8 SDL2 + 143096<br />
15  libsystem_pthread.dylib            0x00000001862ce034 _pthread_start + 136<br />
16  libsystem_pthread.dylib            0x00000001862c8e3c thread_start + 8<br />
)<br />
libc++abi: terminating due to uncaught exception of type NSException<br />
zsh: abort      ./infinisim</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Pinetime - Kids with special needs]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19279</link>
			<pubDate>Wed, 12 Jun 2024 04:42:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28264">hidara</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19279</guid>
			<description><![CDATA[A friend of mine has a 4-year-old kid who is deaf and now that he's riding a bike they have to chase after him to get his attention. I have discovered that this is common in this particular special-needs community and I purchased 2x pinetimes to see if I could create an app that at the press of a button would make the other watch vibrate. Watches arrived today<br />
<br />
I'm pretty comfortable with Linux, Python and development in general but haven't used MicroPython that much.<br />
I would greatly appreciate any tips on this project and plan to share it on Github for other parents in the same situation<br />
<br />
<span style="font-weight: bold;" class="mycode_b">COMPLETE<br />
</span><br />
<ul class="mycode_list"><li>WaspOS is installed on both watches. I'm more comfortable with Python for app dev but can revert to Infinitime if there is reason<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">TODO </span>Tips are welcome for these (especially if something is/is not possible)<br />
<ul class="mycode_list"><li>Find some way to pair the two watches over Bluetooth LE. In waspOS I couldn't find a Bluetooth setting to connect the watch to another device but I have found that I can discover the watch with my phone. Ideally, I would have a settings menu in case one watch is damaged and I don't have to embed the connection details in the code but happy to hard code the connection for now<br />
</li>
<li>Find some way to trigger the vibration on a software button press or better still, have a background app that sends the Bluetooth message trigger on a double hardware button press would be perfect<br />
</li>
<li>Ensure that the devices connect automatically and I'm not sure what to do about battery management. Is there deep sleep on these?<br />
</li>
<li>A warning when the device goes out of range would be nice for parents<br />
</li>
</ul>
<br />
<br />
<br />
I'll start chipping away at these but any help would be great. Cheers]]></description>
			<content:encoded><![CDATA[A friend of mine has a 4-year-old kid who is deaf and now that he's riding a bike they have to chase after him to get his attention. I have discovered that this is common in this particular special-needs community and I purchased 2x pinetimes to see if I could create an app that at the press of a button would make the other watch vibrate. Watches arrived today<br />
<br />
I'm pretty comfortable with Linux, Python and development in general but haven't used MicroPython that much.<br />
I would greatly appreciate any tips on this project and plan to share it on Github for other parents in the same situation<br />
<br />
<span style="font-weight: bold;" class="mycode_b">COMPLETE<br />
</span><br />
<ul class="mycode_list"><li>WaspOS is installed on both watches. I'm more comfortable with Python for app dev but can revert to Infinitime if there is reason<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">TODO </span>Tips are welcome for these (especially if something is/is not possible)<br />
<ul class="mycode_list"><li>Find some way to pair the two watches over Bluetooth LE. In waspOS I couldn't find a Bluetooth setting to connect the watch to another device but I have found that I can discover the watch with my phone. Ideally, I would have a settings menu in case one watch is damaged and I don't have to embed the connection details in the code but happy to hard code the connection for now<br />
</li>
<li>Find some way to trigger the vibration on a software button press or better still, have a background app that sends the Bluetooth message trigger on a double hardware button press would be perfect<br />
</li>
<li>Ensure that the devices connect automatically and I'm not sure what to do about battery management. Is there deep sleep on these?<br />
</li>
<li>A warning when the device goes out of range would be nice for parents<br />
</li>
</ul>
<br />
<br />
<br />
I'll start chipping away at these but any help would be great. Cheers]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Dev/Prod Setup]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=19276</link>
			<pubDate>Sun, 09 Jun 2024 22:32:27 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=28257">Fady Anwar</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=19276</guid>
			<description><![CDATA[Hi,<br />
I was wondering if it would be a good idea to buy two watches, one that is for development (dev kit) and another that is for my use (sealed) as in being prod. Would this setup by any means guarantee that if I flash the prod one with a properly tested firmware from the dev watch then I won't brick the prod one? Your thoughts please, thank you!<br />
<br />
Regards,<br />
Fady]]></description>
			<content:encoded><![CDATA[Hi,<br />
I was wondering if it would be a good idea to buy two watches, one that is for development (dev kit) and another that is for my use (sealed) as in being prod. Would this setup by any means guarantee that if I flash the prod one with a properly tested firmware from the dev watch then I won't brick the prod one? Your thoughts please, thank you!<br />
<br />
Regards,<br />
Fady]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Infinitime Build problem]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18807</link>
			<pubDate>Fri, 20 Oct 2023 15:31:21 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=27498">BlackDev</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18807</guid>
			<description><![CDATA[Hi guys, <br />
<br />
I'm trying to build Infinitime project on my windows machine but with no success. I have been following the steps in:<br />
<br />
<a href="https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/buildAndProgram.md" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/InfiniT...Program.md</a> <br />
<br />
I'm stuck in the last step, the make command. <br />
<br />
Cmake command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Cmake -DARM_NONE_EABI_TOOLCHAIN_PATH="C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10" -DNRF5_SDK_PATH="C:/Users/blackdev/pinetime/nRF5_SDK_15.3.0_59ac345" -DCMAKE_BUILD_TYPE=Debug -DBUILD_DFU=1 -DBUILD_RESOURCES=1 -DTARGET_DEVICE=PINETIME -S . -B build</code></div></div><br />
Which results in adding the following files inside build folder<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>├───CMakeFiles<br />
│   ├───3.28.0-rc2<br />
│   │   ├───CompilerIdASM<br />
│   │   ├───CompilerIdC<br />
│   │   │   ├───Debug<br />
│   │   │   │   └───CompilerIdC.tlog<br />
│   │   │   └───tmp<br />
│   │   ├───CompilerIdCXX<br />
│   │   │   ├───Debug<br />
│   │   │   │   └───CompilerIdCXX.tlog<br />
│   │   │   └───tmp<br />
│   │   └───x64<br />
│   │       └───Debug<br />
│   │           └───VCTargetsPath.tlog<br />
│   ├───58e9d56eaa4cb413b76d7d838cbc8fb1<br />
│   ├───74be971449aa6aebb611e3cfdd9dd126<br />
│   ├───83f795d81ab7de042a55dc014fe330ec<br />
│   ├───CMakeScratch<br />
│   └───pkgRedirects<br />
└───src<br />
    ├───CMakeFiles<br />
    └───displayapp<br />
        └───fonts<br />
            └───CMakeFiles</code></div></div><br />
<br />
Then I enter the build folder and I try to use make command as described in the above link <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j4 pinetime-app</code></div></div><br />
It doesn't work, it says:<br />
"make: *** No rule to make target 'pinetime-app'.  Stop."<br />
<br />
I also tried make -j4, but similar issue. <br />
<br />
Any hints and guidance would be greatly appreciated.<br />
<br />
Thanks]]></description>
			<content:encoded><![CDATA[Hi guys, <br />
<br />
I'm trying to build Infinitime project on my windows machine but with no success. I have been following the steps in:<br />
<br />
<a href="https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/buildAndProgram.md" target="_blank" rel="noopener" class="mycode_url">https://github.com/InfiniTimeOrg/InfiniT...Program.md</a> <br />
<br />
I'm stuck in the last step, the make command. <br />
<br />
Cmake command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Cmake -DARM_NONE_EABI_TOOLCHAIN_PATH="C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10" -DNRF5_SDK_PATH="C:/Users/blackdev/pinetime/nRF5_SDK_15.3.0_59ac345" -DCMAKE_BUILD_TYPE=Debug -DBUILD_DFU=1 -DBUILD_RESOURCES=1 -DTARGET_DEVICE=PINETIME -S . -B build</code></div></div><br />
Which results in adding the following files inside build folder<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>├───CMakeFiles<br />
│   ├───3.28.0-rc2<br />
│   │   ├───CompilerIdASM<br />
│   │   ├───CompilerIdC<br />
│   │   │   ├───Debug<br />
│   │   │   │   └───CompilerIdC.tlog<br />
│   │   │   └───tmp<br />
│   │   ├───CompilerIdCXX<br />
│   │   │   ├───Debug<br />
│   │   │   │   └───CompilerIdCXX.tlog<br />
│   │   │   └───tmp<br />
│   │   └───x64<br />
│   │       └───Debug<br />
│   │           └───VCTargetsPath.tlog<br />
│   ├───58e9d56eaa4cb413b76d7d838cbc8fb1<br />
│   ├───74be971449aa6aebb611e3cfdd9dd126<br />
│   ├───83f795d81ab7de042a55dc014fe330ec<br />
│   ├───CMakeScratch<br />
│   └───pkgRedirects<br />
└───src<br />
    ├───CMakeFiles<br />
    └───displayapp<br />
        └───fonts<br />
            └───CMakeFiles</code></div></div><br />
<br />
Then I enter the build folder and I try to use make command as described in the above link <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>make -j4 pinetime-app</code></div></div><br />
It doesn't work, it says:<br />
"make: *** No rule to make target 'pinetime-app'.  Stop."<br />
<br />
I also tried make -j4, but similar issue. <br />
<br />
Any hints and guidance would be greatly appreciated.<br />
<br />
Thanks]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Schematics for components not on the main board]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18733</link>
			<pubDate>Fri, 22 Sep 2023 14:24:39 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=27410">ado</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18733</guid>
			<description><![CDATA[Hello, I've been looking at the PineTime schematics, and I don't see any documentation on what is connected to the other ends of the various connectors on the main board. Is there some additional documentation about those components? For example, I'm curious on what is attached to the KEY connector - I can't quite tell from the main board schematic what exactly would go on the other end.]]></description>
			<content:encoded><![CDATA[Hello, I've been looking at the PineTime schematics, and I don't see any documentation on what is connected to the other ends of the various connectors on the main board. Is there some additional documentation about those components? For example, I'm curious on what is attached to the KEY connector - I can't quite tell from the main board schematic what exactly would go on the other end.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Is Dev kit still a must for application programming in 2023? thx]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18721</link>
			<pubDate>Tue, 19 Sep 2023 04:10:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=27394">ccchan234</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18721</guid>
			<description><![CDATA[hi,<br />
<br />
1. just ordered a sealed version as i saw people on youtube (likely the leader from wasp-os) could still use bluetooth to flash OS, flash software to pinetime.<br />
<br />
2. this post from lwn also claims that unless doing very low level development, otherwise it's not necessary:<br />
<span style="font-size: 1pt;" class="mycode_size"><span style="font-family: Times New Roman;" class="mycode_font">PINE64 does sell a </span></span><a href="https://pine64.com/product/pinetime-dev-kit/" target="_blank" rel="noopener" class="mycode_url"><span style="color: #8080ff;" class="mycode_color"><span style="font-size: 1pt;" class="mycode_size"><span style="font-family: Times New Roman;" class="mycode_font">developer kit</span></span></span></a><span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">, which has the same hardware as the PineTime but is not sealed, allowing access to pins for resetting and reflashing the watch. Developers who want to work on the bootloader will probably want a developer kit, but, because of the </span></span>watchdog, it should not be necessary for other development.<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size"> The developer kit is currently out of stock, but it appears that this is temporary. It is also possible to break the seal and open the watch, but there is a risk of damaging the hardware.</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">3. i knew sometimes if the watch freezes, having the kit could instantly reboot it and it is more reasonable than wait till it drain, but the kit is semi...either you drill a hole, solder some wires and cover up the watch,</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">OR it would be one that easily tear away. so, in addition to money (which i could afford next month), there still a lot of DIY to do.</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">So, i just write some simple programs, esp with help of gpt4 for application. if it freezed once/twice per month, i am ok to wait till it drain.</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">then can i avoid the dev kit? avoid the soldering and drilling as i dont have these DIY tools myself.</span></span><br />
<br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">thanks</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">ref:</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size"><a href="https://lwn.net/Articles/941796/" target="_blank" rel="noopener" class="mycode_url">https://lwn.net/Articles/941796/</a></span></span>]]></description>
			<content:encoded><![CDATA[hi,<br />
<br />
1. just ordered a sealed version as i saw people on youtube (likely the leader from wasp-os) could still use bluetooth to flash OS, flash software to pinetime.<br />
<br />
2. this post from lwn also claims that unless doing very low level development, otherwise it's not necessary:<br />
<span style="font-size: 1pt;" class="mycode_size"><span style="font-family: Times New Roman;" class="mycode_font">PINE64 does sell a </span></span><a href="https://pine64.com/product/pinetime-dev-kit/" target="_blank" rel="noopener" class="mycode_url"><span style="color: #8080ff;" class="mycode_color"><span style="font-size: 1pt;" class="mycode_size"><span style="font-family: Times New Roman;" class="mycode_font">developer kit</span></span></span></a><span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">, which has the same hardware as the PineTime but is not sealed, allowing access to pins for resetting and reflashing the watch. Developers who want to work on the bootloader will probably want a developer kit, but, because of the </span></span>watchdog, it should not be necessary for other development.<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size"> The developer kit is currently out of stock, but it appears that this is temporary. It is also possible to break the seal and open the watch, but there is a risk of damaging the hardware.</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">3. i knew sometimes if the watch freezes, having the kit could instantly reboot it and it is more reasonable than wait till it drain, but the kit is semi...either you drill a hole, solder some wires and cover up the watch,</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">OR it would be one that easily tear away. so, in addition to money (which i could afford next month), there still a lot of DIY to do.</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">So, i just write some simple programs, esp with help of gpt4 for application. if it freezed once/twice per month, i am ok to wait till it drain.</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">then can i avoid the dev kit? avoid the soldering and drilling as i dont have these DIY tools myself.</span></span><br />
<br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">thanks</span></span><br />
<br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size">ref:</span></span><br />
<span style="font-family: Times New Roman;" class="mycode_font"><span style="font-size: 1pt;" class="mycode_size"><a href="https://lwn.net/Articles/941796/" target="_blank" rel="noopener" class="mycode_url">https://lwn.net/Articles/941796/</a></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Bluetooth BLE-MIDI-controller app for PineTime / InfiniTime]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18625</link>
			<pubDate>Sun, 20 Aug 2023 11:17:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=26694">Luno</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18625</guid>
			<description><![CDATA[Hi there,<br />
<br />
I've made a BLE-MIDI-controller app for PineTime, which can send MIDI-data over BLE to music synthesizers:<br />
<a href="https://codeberg.org/Luno/InfiniTime_ble-midi" target="_blank" rel="noopener" class="mycode_url">https://codeberg.org/Luno/InfiniTime_ble-midi</a>]]></description>
			<content:encoded><![CDATA[Hi there,<br />
<br />
I've made a BLE-MIDI-controller app for PineTime, which can send MIDI-data over BLE to music synthesizers:<br />
<a href="https://codeberg.org/Luno/InfiniTime_ble-midi" target="_blank" rel="noopener" class="mycode_url">https://codeberg.org/Luno/InfiniTime_ble-midi</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Python programme for a vibration signal from Raspberry Pi 4 via bluetooth connection]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18293</link>
			<pubDate>Thu, 01 Jun 2023 07:33:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=26911">Tria91</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18293</guid>
			<description><![CDATA[Hi,<br />
please, I need some help to make a vibration signal, if possible with adjustable vibration-length, out from a Python programme from a Raspberry Pi 4 via bluetooth connection.<br />
<br />
Best regards,<br />
Gerald]]></description>
			<content:encoded><![CDATA[Hi,<br />
please, I need some help to make a vibration signal, if possible with adjustable vibration-length, out from a Python programme from a Raspberry Pi 4 via bluetooth connection.<br />
<br />
Best regards,<br />
Gerald]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zephyr Backlight Examples for PineTime]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18206</link>
			<pubDate>Sat, 06 May 2023 20:54:09 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=24224">lcj</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18206</guid>
			<description><![CDATA[This is a very junior question but I am just trying to get the backlight going using Zephyr, VS Code (with nRF Connect for VS Code Add-In), the PineTime DevKit0 board in Zephyr, and a PineTime DK.<br />
<br />
I am trying to figure out how to do the backlight from the button example (which replaced the board specific example). I have not been able to get it working. It uses code like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET_OR(SW0_NODE, gpios,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      {0});<br />
static struct gpio_callback button_cb_data;<br />
<br />
/*<br />
 * The led0 devicetree alias is optional. If present, we'll use it<br />
 * to turn on the LED whenever the button is pressed.<br />
 */<br />
static struct gpio_dt_spec led = GPIO_DT_SPEC_GET_OR(DT_ALIAS(led0), gpios,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {0});<br />
<br />
void button_pressed(const struct device *dev, struct gpio_callback *cb,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    uint32_t pins)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;printk("Button pressed at %" PRIu32 "&#92;n", k_cycle_get_32());<br />
}<br />
<br />
void main(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int ret;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!device_is_ready(button.port)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error: button device %s is not ready&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       button.port-&gt;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = gpio_pin_configure_dt(&amp;button, GPIO_INPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (ret != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error %d: failed to configure %s pin %d&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       ret, button.port-&gt;name, button.pin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = gpio_pin_interrupt_configure_dt(&amp;button,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      GPIO_INT_EDGE_TO_ACTIVE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (ret != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error %d: failed to configure interrupt on %s pin %d&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret, button.port-&gt;name, button.pin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
...<br />
}</code></div></div><br />
These other examples:<br />
<br />
<a href="https://github.com/najnesnaj/pinetime-zephyr/blob/master/app/samples/lvgl/src/main.c" target="_blank" rel="noopener" class="mycode_url">pinetime-zephyr/main.c at master · najnesnaj/pinetime-zephyr · GitHub</a><br />
<br />
<a href="https://github.com/albsod/pinetime-hypnos/blob/master/app/hypnos/src/display.c" target="_blank" rel="noopener" class="mycode_url">[/url][url=https://github.com/albsod/pinetime-hypnos/blob/master/app/hypnos/src/backlight.c]pinetime-hypnos/backlight.c at master · albsod/pinetime-hypnos · GitHub</a><br />
<br />
<a href="https://github.com/ck-telecom/pinetime/blob/develop/app/src/service/backlight.c" target="_blank" rel="noopener" class="mycode_url">pinetime/backlight.c at develop · ck-telecom/pinetime · GitHub</a><br />
<br />
Use code which looks like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#if DT_NODE_HAS_STATUS(LED0_NODE, okay)<br />
#define LED0    DT_GPIO_LABEL(LED0_NODE, gpios)<br />
#define PIN     DT_GPIO_PIN(LED0_NODE, gpios)<br />
#define FLAGS   DT_GPIO_FLAGS(LED0_NODE, gpios)<br />
#endif<br />
<br />
static void backlight_init(void)<br />
{<br />
        const struct device *dev;<br />
<br />
        dev = device_get_binding(LED0);<br />
        /* If you have a backlight, set it up and turn it on here */<br />
        gpio_pin_configure(dev, PIN, GPIO_OUTPUT_ACTIVE | FLAGS);<br />
        gpio_pin_set(dev, PIN, 1);<br />
}</code></div></div><br />
<br />
or this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/* ********** ********** DEFINES ********** ********** ********** */<br />
#define BACKLIGHT_PORT  DT_GPIO_LABEL(DT_ALIAS(led1), gpios)<br />
#define BACKLIGHT_1     DT_GPIO_PIN(DT_ALIAS(led0), gpios)<br />
#define BACKLIGHT_2     DT_GPIO_PIN(DT_ALIAS(led1), gpios)<br />
#define BACKLIGHT_3     DT_GPIO_PIN(DT_ALIAS(led2), gpios)<br />
/* ********** **********  ********** ********** ********** */<br />
<br />
/* ********** ********** VARIABLES AND STRUCTS ********** ********** */<br />
static const struct device* backlight_dev;<br />
static bool backlight_enabled = false;<br />
/* ********** ********** ********** ********** ********** ********** */<br />
<br />
/* ********** ********** FUNCTIONS ********** ********** */<br />
void backlight_init()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;backlight_dev = device_get_binding(BACKLIGHT_PORT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_1, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_2, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_3, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;backlight_enable(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;LOG_DBG("Backlight init: Done");<br />
}</code></div></div><br />
<br />
I guess my questions is should I try to use the <span style="font-weight: bold;" class="mycode_b">GPIO_DT_SPEC_GET_OR</span> syntax or <span style="font-weight: bold;" class="mycode_b">DT_GPIO_PIN</span>, <span style="font-weight: bold;" class="mycode_b">DT_GPIO_LABEL</span>, and <span style="font-weight: bold;" class="mycode_b">DT_GPIO_FLAGS</span>.<br />
<br />
I'm really new at this, as you can probably tell. I might be mixing things up. Trying to figure out the GPIO to turn on/off the backlight and it seems like this commonly/historically used <span style="font-weight: bold;" class="mycode_b">device*</span> structure and the <span style="font-weight: bold;" class="mycode_b">gpio_dt_spec</span> from the examples.]]></description>
			<content:encoded><![CDATA[This is a very junior question but I am just trying to get the backlight going using Zephyr, VS Code (with nRF Connect for VS Code Add-In), the PineTime DevKit0 board in Zephyr, and a PineTime DK.<br />
<br />
I am trying to figure out how to do the backlight from the button example (which replaced the board specific example). I have not been able to get it working. It uses code like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET_OR(SW0_NODE, gpios,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      {0});<br />
static struct gpio_callback button_cb_data;<br />
<br />
/*<br />
 * The led0 devicetree alias is optional. If present, we'll use it<br />
 * to turn on the LED whenever the button is pressed.<br />
 */<br />
static struct gpio_dt_spec led = GPIO_DT_SPEC_GET_OR(DT_ALIAS(led0), gpios,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     {0});<br />
<br />
void button_pressed(const struct device *dev, struct gpio_callback *cb,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    uint32_t pins)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;printk("Button pressed at %" PRIu32 "&#92;n", k_cycle_get_32());<br />
}<br />
<br />
void main(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int ret;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!device_is_ready(button.port)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error: button device %s is not ready&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       button.port-&gt;name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = gpio_pin_configure_dt(&amp;button, GPIO_INPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (ret != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error %d: failed to configure %s pin %d&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       ret, button.port-&gt;name, button.pin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = gpio_pin_interrupt_configure_dt(&amp;button,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      GPIO_INT_EDGE_TO_ACTIVE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (ret != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk("Error %d: failed to configure interrupt on %s pin %d&#92;n",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret, button.port-&gt;name, button.pin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
...<br />
}</code></div></div><br />
These other examples:<br />
<br />
<a href="https://github.com/najnesnaj/pinetime-zephyr/blob/master/app/samples/lvgl/src/main.c" target="_blank" rel="noopener" class="mycode_url">pinetime-zephyr/main.c at master · najnesnaj/pinetime-zephyr · GitHub</a><br />
<br />
<a href="https://github.com/albsod/pinetime-hypnos/blob/master/app/hypnos/src/display.c" target="_blank" rel="noopener" class="mycode_url">[/url][url=https://github.com/albsod/pinetime-hypnos/blob/master/app/hypnos/src/backlight.c]pinetime-hypnos/backlight.c at master · albsod/pinetime-hypnos · GitHub</a><br />
<br />
<a href="https://github.com/ck-telecom/pinetime/blob/develop/app/src/service/backlight.c" target="_blank" rel="noopener" class="mycode_url">pinetime/backlight.c at develop · ck-telecom/pinetime · GitHub</a><br />
<br />
Use code which looks like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#if DT_NODE_HAS_STATUS(LED0_NODE, okay)<br />
#define LED0    DT_GPIO_LABEL(LED0_NODE, gpios)<br />
#define PIN     DT_GPIO_PIN(LED0_NODE, gpios)<br />
#define FLAGS   DT_GPIO_FLAGS(LED0_NODE, gpios)<br />
#endif<br />
<br />
static void backlight_init(void)<br />
{<br />
        const struct device *dev;<br />
<br />
        dev = device_get_binding(LED0);<br />
        /* If you have a backlight, set it up and turn it on here */<br />
        gpio_pin_configure(dev, PIN, GPIO_OUTPUT_ACTIVE | FLAGS);<br />
        gpio_pin_set(dev, PIN, 1);<br />
}</code></div></div><br />
<br />
or this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>/* ********** ********** DEFINES ********** ********** ********** */<br />
#define BACKLIGHT_PORT  DT_GPIO_LABEL(DT_ALIAS(led1), gpios)<br />
#define BACKLIGHT_1     DT_GPIO_PIN(DT_ALIAS(led0), gpios)<br />
#define BACKLIGHT_2     DT_GPIO_PIN(DT_ALIAS(led1), gpios)<br />
#define BACKLIGHT_3     DT_GPIO_PIN(DT_ALIAS(led2), gpios)<br />
/* ********** **********  ********** ********** ********** */<br />
<br />
/* ********** ********** VARIABLES AND STRUCTS ********** ********** */<br />
static const struct device* backlight_dev;<br />
static bool backlight_enabled = false;<br />
/* ********** ********** ********** ********** ********** ********** */<br />
<br />
/* ********** ********** FUNCTIONS ********** ********** */<br />
void backlight_init()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;backlight_dev = device_get_binding(BACKLIGHT_PORT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_1, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_2, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gpio_pin_configure(backlight_dev, BACKLIGHT_3, GPIO_OUTPUT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;backlight_enable(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;LOG_DBG("Backlight init: Done");<br />
}</code></div></div><br />
<br />
I guess my questions is should I try to use the <span style="font-weight: bold;" class="mycode_b">GPIO_DT_SPEC_GET_OR</span> syntax or <span style="font-weight: bold;" class="mycode_b">DT_GPIO_PIN</span>, <span style="font-weight: bold;" class="mycode_b">DT_GPIO_LABEL</span>, and <span style="font-weight: bold;" class="mycode_b">DT_GPIO_FLAGS</span>.<br />
<br />
I'm really new at this, as you can probably tell. I might be mixing things up. Trying to figure out the GPIO to turn on/off the backlight and it seems like this commonly/historically used <span style="font-weight: bold;" class="mycode_b">device*</span> structure and the <span style="font-weight: bold;" class="mycode_b">gpio_dt_spec</span> from the examples.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Realtime heartrate and accelerometer via bluetooth]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18189</link>
			<pubDate>Mon, 01 May 2023 11:40:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=26808">Marc_s</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18189</guid>
			<description><![CDATA[Hello!<br />
<br />
I'm working on an interactive installation where I want some audio to react to visitors heart rate and activity. I am planning to stream realtime (or every ≈0.5 sec?) the heart rate and accelerometer data to a computer or Rasperry Pi or similar device via Bluetooth. That should be done for several hours a day.<br />
<br />
I'm trying to find the perfect smartwatch to do it. Is something that can be done in a Pinetime? From my overview of the device, there should be no problem, but there may be some stuff that I missed. Those more experienced in the platform can advise me on any foreseeable issues?<br />
<br />
Thanks!]]></description>
			<content:encoded><![CDATA[Hello!<br />
<br />
I'm working on an interactive installation where I want some audio to react to visitors heart rate and activity. I am planning to stream realtime (or every ≈0.5 sec?) the heart rate and accelerometer data to a computer or Rasperry Pi or similar device via Bluetooth. That should be done for several hours a day.<br />
<br />
I'm trying to find the perfect smartwatch to do it. Is something that can be done in a Pinetime? From my overview of the device, there should be no problem, but there may be some stuff that I missed. Those more experienced in the platform can advise me on any foreseeable issues?<br />
<br />
Thanks!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[help on developing BLE bluetooth MIDI]]></title>
			<link>https://forum.pine64.org/showthread.php?tid=18108</link>
			<pubDate>Wed, 05 Apr 2023 18:08:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.pine64.org/member.php?action=profile&uid=26694">Luno</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.pine64.org/showthread.php?tid=18108</guid>
			<description><![CDATA[Hi there,<br />
<br />
I want BLE-MIDI on the PineTime, overall preferred running in InfiniTime, because it seems the only still active OS. And I really like that OS.<br />
I tried a library from Adafruit, with no success. Then I found this: <a href="https://novelbits.io/bluetooth-gatt-services-characteristics/" target="_blank" rel="noopener" class="mycode_url">https://novelbits.io/bluetooth-gatt-serv...teristics/</a> which explains very detailed how everything works, and I can compile it with Segger development tools (almost: There is a known bug in creating the binary, but that's ok, I don't want to stay on Segger anyway). But I can't find out how I could integrate it into InfiniTime. There are so many dependencies. How can one do something like port a new library?<br />
<br />
<br />
Best regards,<br />
Luno]]></description>
			<content:encoded><![CDATA[Hi there,<br />
<br />
I want BLE-MIDI on the PineTime, overall preferred running in InfiniTime, because it seems the only still active OS. And I really like that OS.<br />
I tried a library from Adafruit, with no success. Then I found this: <a href="https://novelbits.io/bluetooth-gatt-services-characteristics/" target="_blank" rel="noopener" class="mycode_url">https://novelbits.io/bluetooth-gatt-serv...teristics/</a> which explains very detailed how everything works, and I can compile it with Segger development tools (almost: There is a known bug in creating the binary, but that's ok, I don't want to stay on Segger anyway). But I can't find out how I could integrate it into InfiniTime. There are so many dependencies. How can one do something like port a new library?<br />
<br />
<br />
Best regards,<br />
Luno]]></content:encoded>
		</item>
	</channel>
</rss>