<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.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/"><channel><title>Smart Security and Surveillance</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/</link><description>A community design challenge focused on smart security and surveillance projects, where members design, build, and document practical solutions to real-world monitoring and protection problems.  Participants share their process, hardware choices, and resul</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Forum Post: RE: Identity Protocol - Part 6 - Snatch Detection with the BMI160 IMU</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56861/identity-protocol---part-6---snatch-detection-with-the-bmi160-imu/235028</link><pubDate>Sun, 19 Apr 2026 07:40:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:f046734c-1ebe-45eb-a7f4-5c8c80528967</guid><dc:creator>arvindsa</dc:creator><description>saramic I used flowchart image straight out of mermaid. and thanks to your comment to use gif. I&amp;#39;ve added that. I am using Kden to make the gif though.</description></item><item><title>Forum Post: Identity Protocol - Part 6 - Snatch Detection with the BMI160 IMU</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56861/identity-protocol---part-6---snatch-detection-with-the-bmi160-imu</link><pubDate>Sun, 19 Apr 2026 07:38:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:4abc1470-dd60-4403-abd4-feebb4e4391b</guid><dc:creator>arvindsa</dc:creator><description>With the summer kicking in India, it is too hot to be outside, Plus it&amp;#39;s holiday season for the Institute i work with and so I got more free time. My Work-cation at Goa has me fully charged and motivated. Today I will explain though how i Implemented Tug/Snatch detection. Recap: The idea is simple enough: stop making people swipe a card and type a PIN at every single door. Instead, the ID card (a MAX32630FTHR + ATECC508A in your pocket) unlocks once via PIN, then silently does challenge-response crypto over Bluetooth every time you walk up to a door. If the card gets yanked off you, the IMU detects the tug and it locks itself. No PIN, no entry. For more details check the Part 1 of the series Identity Protocol Part 1 - Plan Identity Protocol - Part 2 - Django Server Identity Protocol - Part 3 - Unboxing and Blinking with Maxim LPSDK Identity Protocol - Part 4 - BLE using PAN1326B and BTstack Identity Protocol - Part 5 - Interfacing a Keypad Tug detection is one of the important function to the project, as it prevents the card being stolen while in an unlocked state. Full source is in firmware/tests/imu-bmi160/ and firmware/tests/tug-detection/ in the project repo. BMI160 Hardware This nice little sensor from Bosch sits on the FTHR board&amp;#39;s shared I2C bus alongside the MAX14690N PMIC. The pin mapping for I2CM2 MAP_A on the MAX32630 is: SDA - P5_7 SCL - P6_0 The sensor has an address of 0x68. Credits: mbed.com Learning about the BMI160 Communication Before writing a single line of LPSDK code I read through hanyazou&amp;#39;s BMI160-Arduino library available at https://github.com/hanyazou/bmi160-arduino . It is derived from Intel&amp;#39;s CurieIMU driver and covers the register map in. From this I surmised 1. The power-up command sequence After power-on the BMI160 holds both accelerometer and gyroscope in suspend mode. They must be woken explicitly, in order, with startup delays that the datasheet specifies: Step Register Value Purpose Delay after 1 0x7E (CMD) 0xB6 Soft reset 10 ms 2 0x7E (CMD) 0x11 Accel -&amp;gt; normal mode 5 ms 3 0x7E (CMD) 0x15 Gyro -&amp;gt; normal mode 80 ms 2. Verifying the chip with CHIP_ID The Step that tells me things are communicating. Register 0x00 returns a fixed value of 0xD1 for the BMI160. Reading it is the simplest sanity check that I2C wiring and addressing are correct before doing anything else. The Arduino library checks this in getDeviceID(). 3. Data layout: gyro first, then accelerometer Reading 12 consecutive bytes starting at 0x0C gives you all six axes: Offset Register Content 0 0x0C Gyro X low byte 1 0x0D Gyro X high byte 2 0x0E Gyro Y low byte 3 0x0F Gyro Y high byte 4 0x10 Gyro Z low byte 5 0x11 Gyro Z high byte 6 0x12 Accel X low byte 7 0x13 Accel X high byte 8 0x14 Accel Y low byte 9 0x15 Accel Y high byte 10 0x16 Accel Z low byte 11 0x17 Accel Z high byte Each pair is a little-endian signed 16-bit integer: ax = (int16_t)(buf[6] | (buf[7] x) { int32_t t = x; x = y; y = t; } if (z &amp;gt; x) { int32_t t = x; x = z; z = t; } if (z &amp;gt; y) { int32_t t = y; y = z; z = t; } return x + (y &amp;gt;&amp;gt; 1); /* max + 0.5 * mid */ } Threshold tuning I just kept decreasing the threshold until i was satisfactory Here is the link to full video if you are interested. - https://youtu.be/xhUsJPgzvA0 I choose 21,000 as a good balance better detecting a sharp tug and ignoring basic tugs. Polling Loop device_state_t state = STATE_LOCKED; int16_t ax, ay, az; bmi160_read_accel(&amp;amp;ax, &amp;amp;ay, &amp;amp;az); int32_t prev_mag = accel_magnitude(ax, ay, az); while (1) { TMR_Delay(MXC_TMR0, MSEC(20)); /* 50 Hz */ bmi160_read_accel(&amp;amp;ax, &amp;amp;ay, &amp;amp;az); int32_t mag = accel_magnitude(ax, ay, az); int32_t delta = mag - prev_mag; if (delta JERK_THRESHOLD) { state = STATE_LOCKED; led_red(); printf(&amp;quot;TUG DETECTED (delta=%ld) -- LOCKED\n&amp;quot;, (long)delta); } } I couldn&amp;#39;t get the jerk threshold calculated on the Sensor itself and so, i just left the interrupt pin alone and decided on polling and calculating on MCU. Code for this particular post is available at https://github.com/arvindsa/identity-protocol-e14-challenge/tree/main/firmware/tests/tug-detection Code for entire project is available at https://github.com/arvindsa/identity-protocol-e14-challenge Results Results can be seen in the full video of the tug threshold test - https://youtu.be/xhUsJPgzvA0 . Final Notes One of the important decision I have to take was to choose between an option of Calculating correct acceleration using the square root method at the cost of lower sampling rate or Having a higher sampling rate at the cost of an approximated acceleration. I went with approximation because i can appropriately change the threshold value experimentally. This will prove to be a better choice when i start integrating all the function and they take up cpu cycles. If it was actual acceleration calculation the other functionality will drag the sampling rate even lower. The Start of the project is the Cryptographic signing by ATECC508A. Since I&amp;#39;ve worked with it before, all i have to do is port the code to match the LPSDK&amp;#39;s function call which is almost done. I am making a small change to my project, previously in my plan it was the door device will use another ATECC508A for verification. But I realized it was not needed and so we will use software library micro-ecc for verification of the cryptographic signature. I will explain it in detail over a post. It&amp;#39;s the write-up which is the hard part.</description><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/security_2D00_challenge">security-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/bmi160">bmi160</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/design_2D00_challenge">design-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/MAX32630FTHR_2300_">MAX32630FTHR#</category></item><item><title>Forum Post: RE: Identity Protocol - Part 5 - Interfacing a Keypad</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56856/identity-protocol---part-5---interfacing-a-keypad/235025</link><pubDate>Sun, 19 Apr 2026 00:53:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5074991a-40ae-4e2b-8979-80e7305acae5</guid><dc:creator>arvindsa</dc:creator><description>Actually, I write my draft first in typora and mermaid. Infact I purchased typora for that specific purpose, writing academic style documents is a breeze with typora. But as you said, control over visuals is near to impossible. So i used to extract it as svg, ask chatgpt to style it use Inkscape for final touch up. But this process is lengthy and unpredictable. Thats why I shifted to making the flow chat on draw.io. at the end. Claude AI, i had used it for a very complicated free lancing project, a solid assistant but expensive.</description></item><item><title>Forum Post: RE: Identity Protocol - Part 5 - Interfacing a Keypad</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56856/identity-protocol---part-5---interfacing-a-keypad/235016</link><pubDate>Sat, 18 Apr 2026 22:23:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:048496f6-9970-4f4b-b698-9e03ee4a8c67</guid><dc:creator>saramic</dc:creator><description>the gist does display it - but clearly not through the embedding function - the mermaid version of the flow chart would be something like</description></item><item><title>Forum Post: RE: Identity Protocol - Part 5 - Interfacing a Keypad</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56856/identity-protocol---part-5---interfacing-a-keypad/235015</link><pubDate>Sat, 18 Apr 2026 22:22:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e345b849-aa04-4ca6-a9cc-d13dfc4da3f8</guid><dc:creator>saramic</dc:creator><description>ahh nice - reminds me I have a keypad somewhere in my junk box that I should look at using in a project some time. For the diagrams, you could also use Mermaid - putting your image above into Claude AI it gave me something like ```mermaid graph TD START([START]) --&amp;gt; SCAN[Scan keypad twice 10 ms apart] SCAN --&amp;gt; MATCH{Scans match? Debouncing} MATCH -- No (unstable) --&amp;gt; SCAN MATCH -- Yes --&amp;gt; NEW_KEY{New key pressed? last_Key != key?} NEW_KEY -- No --&amp;gt; RELEASED{Key just released?} RELEASED -- No --&amp;gt; SCAN NEW_KEY -- Yes --&amp;gt; CALC[&amp;quot;row = key / 4 col = key % 4 label = key_map[row][col]&amp;quot;] CALC --&amp;gt; REPORT_KEY[&amp;quot;Report KEY label last_key = key&amp;quot;] REPORT_KEY --&amp;gt; SCAN RELEASED -- Yes --&amp;gt; REPORT_UP[&amp;quot;Report KEY_UP last_key = KEY_NONE&amp;quot;] REPORT_UP --&amp;gt; SCAN ``` The beauty is that things like Github just render the flow chart as does Typora - the flow chart is unfortunate not as pretty, and you have less control on how it is laid out - but it is code - which for me has always been the winner &amp;#175;\_(ツ)_/&amp;#175;</description></item><item><title>File: Unboxin</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/m/managed-videos/151213</link><pubDate>Fri, 17 Apr 2026 18:30:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:f4db3e7d-c0a9-495b-8b1b-522bdb4904c4</guid><dc:creator>meera_hussien</dc:creator><description /></item><item><title>Forum Post: Guardian Sentinel — Active Environment Monitoring for Smart Safety &amp; Security &lt;Part 1&gt;</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56859/guardian-sentinel-active-environment-monitoring-for-smart-safety-security-part-1</link><pubDate>Fri, 17 Apr 2026 18:24:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6b427411-4d60-40ad-b6c2-8125c332d305</guid><dc:creator>meera_hussien</dc:creator><description>Guardian Sentinel — Active Environment Monitoring for Smart Safety &amp;amp; Security Image 1. AI Generated Image Introduction For this design challenge, I have decided to build an active environment monitoring system for smart safety and security. The system will not only monitor the environment, but will also respond accordingly. I originally planned to develop this system for use inside a workshop, but unfortunately I do not have access to one. Therefore, I will be using my working room and simulating a similar workshop environment. In addition to the hardware provided, I will also be using several extra sensors to achieve the project objectives, which I will explain in the next post. As shown in Image 1, it provides an overview of the main concept of this project. The system will monitor environmental conditions such as temperature, humidity, air quality, and CO2, and based on these readings, it will take the necessary action. In addition, a sensor will be included to detect the presence of people. All of this will be monitored through a dedicated dashboard, and the data will be logged for future use. Unboxing Below is the pic and video of the unboxing. I have also include the related document for each of the device. Let&amp;#39;s watch the unboxing video below. community.element14.com/.../Unboxin.mp4 This is the image and the link for each of the component which i have received. 1 . Analog Devices MAX32630FTHR# Application Platform X 2 {gallery} Analog Devices MAX32630FTHR# Application Platform 2. Analog Devices FTHR-PMD-INTZ Adapter Board 3. W&amp;#252;rth Elektronik 150015 Featherwing ICLED Display 4. Particle FWNG-ETH Ethernet Featherwing Adapter 5. Adafruit ADA2927 DC Motor + Stepper FeatherWing And last but not least, it comes with the element14 cool stickers In the next post we shall see in detail on each of these product and also get started using it.</description><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/e14">e14</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/design_2D00_challenge">design-challenge</category></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1326B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1326b-and-btstack/235012</link><pubDate>Fri, 17 Apr 2026 05:40:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:ba783fd4-8076-45d3-b58d-cfd9038db115</guid><dc:creator>arvindsa</dc:creator><description>Just realized that i made a typo in the Title - Changed from PAN1346B to PAN1326B</description></item><item><title>File: p5-01</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/m/managed-videos/151210</link><pubDate>Fri, 17 Apr 2026 05:18:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:1e46f95a-e5ab-428e-88ea-61caff1cf804</guid><dc:creator>arvindsa</dc:creator><description /></item><item><title>Forum Post: Identity Protocol - Part 5 - Interfacing a Keypad</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56856/identity-protocol---part-5---interfacing-a-keypad</link><pubDate>Fri, 17 Apr 2026 05:16:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9ce7c98c-6026-4b9f-a0f0-34daa86b4489</guid><dc:creator>arvindsa</dc:creator><description>In Part 5, I&amp;#39;ll interface an 4x4 Tactile Keypad without using an external library Recap: The idea is simple enough: stop making people swipe a card and type a PIN at every single door. Instead, the ID card (a MAX32630FTHR + ATECC508A in your pocket) unlocks once via PIN, then silently does challenge-response crypto over Bluetooth every time you walk up to a door. If the card gets yanked off you, the IMU detects the tug and it locks itself. No PIN, no entry. For more details check the Part 1 of the series Identity Protocol Part 1 - Plan Identity Protocol - Part 2 - Django Server Identity Protocol - Part 3 - Unboxing and Blinking with Maxim LPSDK Identity Protocol - Part 4 - BLE using PAN1326B and BTstack For my ID Card device i need a way to enter the pin in order to unlock it, I initially thought of a membrane keyboard, but in my box of electronics treasure, I found an tactile keyboard which i had bought before from Robu: https://robu.in/product/4x4-matrix-16-keyboard-keypad/ and an datasheet attached to it. But when i tried with the code, it was not working well, the letter orientation came such that it seemed the rows and columns were transposed. Swapping the pins for Rows and Columns worked. Confusion set it, is my simple enough code wrong? Revelation set in when Adafruit&amp;#39;s learning page showed the correct pin out here: https://learn.adafruit.com/matrix-keypad/pinouts . My Code is right, the datasheet was wrong. Here is the correct one Photo Credits: Adafruit (Do note my code uses C0~C3 instead of C1~C4) and similarly for the Rows Working of Keypad The working of keypad is an age old and proven mechanism. Each key is a switch, one side of the switch is wired along the column and the other side is wired along the row. When switch is pressed, it connects the respective column to the row. To detect the key pressed, we wire the 4 Row and 4 Columns pins to GPIO Photo Credits: Adafruit All the Rows are made input without any pull-ups / pull downs (HiZ - High impedance). The Columns are made input with pull ups One Row (lets saw R1) is driven low and the 4 columns are read to see which one is low. The column corresponding to the key pressed will be low. If no Column is found to be low, the next Row is made low after restoring the previous row to HiZ If all rows are scanned and no columns are found low, then it means no key is pressed When One key is found to be pressed, It is saved in key and last key. During the next round of scan if the same key is found to be still pressed, it is ignored. This way i have implemented a simple hold detection. This happens until the the scan finds no key pressed, but last key is set, this signals a key release event, and last_key is set as none. a 10ms interval between scans should be sufficient for the de-bouncing delay. If you don&amp;#39;t know what de-bouncing is check out https://www.picotech.com/library/articles/blog/what-is-switch-bounce-how-to-implement-debounce In my implementation of this as a function - keypad_scan() it returns an integer such that the number starts from 0 and increases as keys go from top to bottom and left to right. This way i can quickly compare the pressed key to the last one in one statement, plus also is easier to debug in case a key / row / column is not working 1=0 2=1 3=2 A=3 4=4 5=5 6=6 B=7 7=8 8=9 9=10 C=11 *=12 0=13 #=14 D=15 Flow Chart of working Keypad Wiring Signal Pin KPD_ROW0 P5_0 KPD_ROW1 P5_1 KPD_ROW2 P5_2 KPD_ROW3 P5_3 KPD_COL0 P5_4 KPD_COL1 P5_6 KPD_COL2 P3_2 KPD_COL3 P3_3 The Results This one is in a gif format. Below is the full video (there might be a video sync issue between the screen capture and the video of me pressing the button) community.element14.com/.../p5_2D00_01.mp4 Source Code #include #include &amp;quot;mxc_errors.h&amp;quot; #include &amp;quot;gpio.h&amp;quot; #include &amp;quot;tmr_utils.h&amp;quot; #include &amp;quot;uart.h&amp;quot; /* ---- Board_Init override ------------------------------------------------- */ int Board_Init(void) { return E_NO_ERROR; } /* ---- Keypad configuration ------------------------------------------------ */ #define KEYPAD_ROWS 4 #define KEYPAD_COLS 4 /* Row pins: P5_0, P5_1, P5_2, P5_3 (SPI header pins, no SPI peripheral on ID device) */ static const gpio_cfg_t row_cfg[KEYPAD_ROWS] = { { PORT_5, PIN_0, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL }, { PORT_5, PIN_1, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL }, { PORT_5, PIN_2, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL }, { PORT_5, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL }, }; /* Column pins: P5_4, P5_6, P3_2, P3_3 -- input with internal pull-up */ static const gpio_cfg_t col_cfg[KEYPAD_COLS] = { { PORT_5, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP }, { PORT_5, PIN_6, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP }, { PORT_3, PIN_2, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP }, { PORT_3, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP }, }; #define KEY_NONE -1 /* no key detected this scan, cant use 0 */ /* Key label lookup: row-major, matches physical layout * Row 0: 1 2 3 A * Row 1: 4 5 6 B * Row 2: 7 8 9 C * Row 3: * 0 # D */ static const char key_map[KEYPAD_ROWS][KEYPAD_COLS] = { { &amp;#39;1&amp;#39;, &amp;#39;2&amp;#39;, &amp;#39;3&amp;#39;, &amp;#39;A&amp;#39; }, { &amp;#39;4&amp;#39;, &amp;#39;5&amp;#39;, &amp;#39;6&amp;#39;, &amp;#39;B&amp;#39; }, { &amp;#39;7&amp;#39;, &amp;#39;8&amp;#39;, &amp;#39;9&amp;#39;, &amp;#39;C&amp;#39; }, { &amp;#39;*&amp;#39;, &amp;#39;0&amp;#39;, &amp;#39;#&amp;#39;, &amp;#39;D&amp;#39; }, }; /* * keypad_init -- configure all row pins as outputs (high), all col pins as * inputs with pull-ups. */ static void keypad_init(void) { for (int r = 0; r = 0 &amp;amp;&amp;amp; key != last_key) { /* New confirmed press */ int row = key / KEYPAD_COLS; int col = key % KEYPAD_COLS; printf(&amp;quot;KEY %c (%d,%d)\r\n&amp;quot;, key_map[row][col], row, col); last_key = key; } else if (key == KEY_NONE &amp;amp;&amp;amp; last_key != KEY_NONE) { /* Key released (confirmed idle) */ printf(&amp;quot;UP\r\n&amp;quot;); last_key = KEY_NONE; } /* key == -2 (unstable): ignore, loop again immediately */ } } Code for this particular post is available at https://github.com/arvindsa/identity-protocol-e14-challenge/tree/main/firmware/tests/keypad-scan Code for entire project is available at https://github.com/arvindsa/identity-protocol-e14-challenge Final Notes The code worked brilliantly and now i can get on the next peripherals. I was supposed to do the Crypto signing work next, but i decided to do it on a weekend when i have a longer block of free time. Also i decided to move away from inkscape to draw.io website at https://app.diagrams.net/ for my flow chart creation. Gets work done faster. and I stick to copy-pasting from Typora for the github style tables.</description><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/security_2D00_challenge">security-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/keypad">keypad</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/design_2D00_challenge">design-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/MAX32630FTHR_2300_">MAX32630FTHR#</category></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/235005</link><pubDate>Thu, 16 Apr 2026 20:23:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9cee909e-0747-44d0-93e9-67dfaf7be8ef</guid><dc:creator>arvindsa</dc:creator><description>Yes, Best thing to beat the heat.</description></item><item><title>Forum Post: RE: Forum Thread 1 EchoGuard – Edge-Based Intelligent Security System | Project Kickoff &amp; Unboxing</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56847/forum-thread-1-echoguard-edge-based-intelligent-security-system-project-kickoff-unboxing/235004</link><pubDate>Thu, 16 Apr 2026 20:21:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:bd1d3249-ff2d-4a01-8670-6710a69f2842</guid><dc:creator>DAB</dc:creator><description>Nice set of components. I look forward to seeing your build.</description></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/235003</link><pubDate>Thu, 16 Apr 2026 20:15:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c47a30af-e641-47cc-a02d-b172e1f5fa04</guid><dc:creator>DAB</dc:creator><description>Good update. Well deserved break.</description></item><item><title>Forum Post: RE: Forum Thread 2 EchoGuard – MAX32630FTHR Setup &amp; First Blink Program Upload</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56852/forum-thread-2-echoguard-max32630fthr-setup-first-blink-program-upload/234999</link><pubDate>Thu, 16 Apr 2026 15:21:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:fe6acc2a-89b3-450b-a808-046ee59033dd</guid><dc:creator>Nidhee</dc:creator><description>Ah nice, appreciate the ffmpeg commands — super helpful. Thank you so much</description></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/234998</link><pubDate>Thu, 16 Apr 2026 14:55:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d86d863f-20bc-46ea-adbe-30ce28bf0ab7</guid><dc:creator>arvindsa</dc:creator><description>Thank you. It definitely was a well deserved break, Whenever I post, one thing that goes though my mind, is will a new person going though this post, can he understand it?? Sometimes i come back a day later to read though again and evaluate. I seriously appreciate your feedback in this regard.</description></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/234997</link><pubDate>Thu, 16 Apr 2026 14:53:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a0e41e66-0258-4033-9468-26fb8e699c2b</guid><dc:creator>arvindsa</dc:creator><description>Thank you so much.</description></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/234996</link><pubDate>Thu, 16 Apr 2026 14:45:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0a3ddeed-8f5a-4e41-be4d-71c5c7252243</guid><dc:creator>BigG</dc:creator><description>That chillout place on the beach looks awesome. Ha, and well deserved. This is a very good detailed post on the technicalities of the getting BTstack up and running on this platform. I recall trying this on Mbed years ago and failing to get anywhere.</description></item><item><title>Forum Post: RE: Identity Protocol - Part 4 - BLE using PAN1346B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1346b-and-btstack/234995</link><pubDate>Thu, 16 Apr 2026 12:28:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:bd54078b-4ba0-4a21-8749-b64202cbff7a</guid><dc:creator>JoRatcliffe</dc:creator><description>Nice, great update!</description></item><item><title>Forum Post: Identity Protocol - Part 4 - BLE using PAN1326B and BTstack</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56853/identity-protocol---part-4---ble-using-pan1326b-and-btstack</link><pubDate>Thu, 16 Apr 2026 11:01:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b449688f-b5c8-4779-91ce-d940f32ac3fa</guid><dc:creator>arvindsa</dc:creator><description>In Part 4, I&amp;#39;ll walk through getting Bluetooth Low Energy up and running on the MAX32630FTHR Recap: The idea is simple enough: stop making people swipe a card and type a PIN at every single door. Instead, the ID card (a MAX32630FTHR + ATECC508A in your pocket) unlocks once via PIN, then silently does challenge-response crypto over Bluetooth every time you walk up to a door. If the card gets yanked off you, the IMU detects the tug and it locks itself. No PIN, no entry. For more details check the Part 1 of the series Identity Protocol Part 1 - Plan Identity Protocol - Part 2 - Django Server Identity Protocol - Part 3 - Unboxing and Blinking with Maxim LPSDK I was initially happy when i saw an folder exactLE in the LPSDK&amp;#39;s file thinking it might be an easy fit, but the rabbit hole just got started. Let&amp;#39;s start by telling about the module itself The Bluetooth Hardware PAN1326B module a compact module from Panasonic built around the TI CC2564B chip. This gives you Bluetooth Classic + BLE 4.1. The CC2564B talks to the MAX32630 over UART. It is not a standalone BLE SoC unlike nrf52 and it is a radio that needs a host controller library on the MCU side to drive it. A basic google search took me to BTStack - https://github.com/bluekitchen/btstack and their supported boards here: https://bluekitchen-gmbh.com/btstack/ports/existing_ports.html listed our MAX32630FTHR. I was happy. Imported their git repo as a submodule to mine and git submodule add github.com/.../btstack.git third_party/btstack funnily enough i had to run the `make` command inside the btstack\port\max32630-fthr folder to generate the examples. The nice part is they also have shipped a copy of the LPSDK source files with BTStack, It brings its own board support file (board.c) written specifically for the FTHR, with UART1 on MAP_A (P2_0/P2_1) as the debug console and UART0 on MAP_B as the CC2564B interface. so nice of them. No toolchain though. That&amp;#39;s alright. Its the best way. They even gave a template for the makefile to make a fresh project with BTStack, It was a bit complicated to i asked chatGPT to help me mix my makefile and BTStack to make a makefile which will use the toolchain i already have with the LPSDK and BT Stack they have, which turned out to be like - PROJECT ?= ble_beacon PORT_NAME ?= max32630-fthr TARGET = MAX3263x TARGET_UC := MAX3263X TARGET_LC := max3263x COMPILER = GCC # ---- User-configurable roots ------------------------------------------------ # Root of this project (auto-detected) PROJECT_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) # BTstack root (override if needed) BTSTACK_ROOT ?= $(PROJECT_ROOT)/../../../third_party/btstack BTSTACK_ROOT := $(abspath $(BTSTACK_ROOT)) # Optional: override from environment instead of sdk.local.mk LPSDK_ROOT ?= # Load local overrides if present -include $(PROJECT_ROOT)/../../sdk.local.mk ifeq ($(LPSDK_ROOT),) $(warning LPSDK_ROOT not set — flash target will not work) endif # ---- Derived paths ---------------------------------------------------------- PORT_DIR := $(BTSTACK_ROOT)/port/$(PORT_NAME) MAXIM_PATH := $(PORT_DIR)/maxim LIBS_DIR := $(MAXIM_PATH)/Firmware/$(TARGET_UC)/Libraries CMSIS_ROOT := $(LIBS_DIR)/CMSIS # ---- Build flags ------------------------------------------------------------ PROJ_CFLAGS += -DRO_FREQ=96000000 PROJ_CFLAGS += -DMXC_ASSERT_ENABLE PROJ_CFLAGS += -DENABLE_HCI_INIT PROJ_CFLAGS += --specs=nano.specs PROJ_LDFLAGS += --specs=nano.specs # ---- Source paths ----------------------------------------------------------- VPATH = . src IPATH = . src # BTstack core VPATH += \ $(BTSTACK_ROOT)/src \ $(BTSTACK_ROOT)/src/ble \ $(BTSTACK_ROOT)/src/classic \ $(BTSTACK_ROOT)/platform/embedded \ $(BTSTACK_ROOT)/chipset/cc256x \ $(BTSTACK_ROOT)/3rd-party/micro-ecc \ $(BTSTACK_ROOT)/3rd-party/md5 \ $(BTSTACK_ROOT)/src/ble/gatt-service IPATH += \ $(BTSTACK_ROOT)/src \ $(BTSTACK_ROOT)/src/ble \ $(BTSTACK_ROOT)/src/classic \ $(BTSTACK_ROOT)/platform/embedded \ $(BTSTACK_ROOT)/chipset/cc256x \ $(BTSTACK_ROOT)/3rd-party/micro-ecc \ $(BTSTACK_ROOT)/3rd-party/md5 \ $(BTSTACK_ROOT)/src/ble/gatt-service \ $(BTSTACK_ROOT)/3rd-party/hxcmod-player # Port sources VPATH += $(PORT_DIR)/src IPATH += $(PORT_DIR)/src # ---- Board support ---------------------------------------------------------- ADAPT_BOARD_DIR := $(PORT_DIR)/board/$(PORT_NAME) BOARD_DIR := $(LIBS_DIR)/Boards/EvKit_V1 VPATH += $(LIBS_DIR)/Boards/Source IPATH += $(LIBS_DIR)/Boards/Include include $(ADAPT_BOARD_DIR)/board.mk # ---- BTstack sources -------------------------------------------------------- SRCS += \ btstack_audio.c \ ... # Third-party SRCS += uECC.c md5.c # Port + app SRCS += \ btstack_port.c \ hal_tick.c \ hal_flash_bank_mxc.c \ main.c \ ble_beacon.c \ btstack_link_key_db_stub.c # ---- Peripheral driver + CMSIS --------------------------------------------- PERIPH_DRIVER_DIR := $(LIBS_DIR)/$(TARGET_UC)PeriphDriver include $(PERIPH_DRIVER_DIR)/periphdriver.mk include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk # ---- Output helpers --------------------------------------------------------- bin: $(BUILD_DIR)/$(PROJECT).elf arm-none-eabi-objcopy -O binary $ #include &amp;quot;btstack.h&amp;quot; #include &amp;quot;gpio.h&amp;quot; /* RGB LEDs — active-low, open-drain */ static const gpio_cfg_t led_r = { PORT_2, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN }; static const gpio_cfg_t led_g = { PORT_2, PIN_5, GPIO_FUNC_GPIO, GPIO_PAD_OPEN_DRAIN }; static const uint8_t adv_data[] = { 0x02, 0x01, 0x06, /* Flags: LE General Discoverable */ 0x0A, 0x09, &amp;#39;I&amp;#39;, &amp;#39;D&amp;#39;, &amp;#39;-&amp;#39;, &amp;#39;B&amp;#39;, &amp;#39;e&amp;#39;, &amp;#39;a&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;o&amp;#39;, &amp;#39;n&amp;#39;, /* Complete Local Name */ }; static btstack_packet_callback_registration_t hci_event_callback_registration; static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size) { UNUSED(channel); UNUSED(size); if (packet_type != HCI_EVENT_PACKET) return; switch (hci_event_packet_get_type(packet)) { case BTSTACK_EVENT_STATE: if (btstack_event_state_get_state(packet) == HCI_STATE_WORKING) { bd_addr_t zero_addr = {0}; gap_advertisements_set_params(0x0100, 0x0200, 0, 0, zero_addr, 0x07, 0x00); gap_advertisements_set_data(sizeof(adv_data), (uint8_t *)adv_data); gap_advertisements_enable(1); GPIO_OutClr(&amp;amp;led_g); /* green on */ GPIO_OutSet(&amp;amp;led_r); /* red off */ printf(&amp;quot;Advertising as \&amp;quot;ID-Beacon\&amp;quot;\n&amp;quot;); } else if (btstack_event_state_get_state(packet) == HCI_STATE_OFF) { printf(&amp;quot;HCI off\n&amp;quot;); } break; default: break; } } int btstack_main(int argc, const char *argv[]) { UNUSED(argc); UNUSED(argv); GPIO_Config(&amp;amp;led_r); GPIO_Config(&amp;amp;led_g); GPIO_OutClr(&amp;amp;led_r); /* red on while initialising */ GPIO_OutSet(&amp;amp;led_g); /* green off */ hci_event_callback_registration.callback = &amp;amp;packet_handler; hci_add_event_handler(&amp;amp;hci_event_callback_registration); hci_power_control(HCI_POWER_ON); return 0; } The code ran fine and i was able to verify it&amp;#39;s working using the Nordic&amp;#39;s Connect App on my phone. Serial UART log via hterm The Makefile I used BTstack&amp;#39;s bundled copy of the LPSDK inside port/max32630-fthr/maxim/ rather than the main LPSDK installation. This keeps the BTstack port self-contained a Every BTstack source file is listed explicitly. no wildcard includes. The `-DENABLE_HCI_INIT` flag is critical: it gates the HCI transport setup inside `btstack_port.c`. Without it, the CC2564B is never initialised. I still can&amp;#39;t understand why. if anyone can. i&amp;#39;ll be grateful to them PROJECT = ble_beacon PORT_NAME = max32630-fthr BTSTACK_ROOT ?= ../../../third_party/btstack BTSTACK_ROOT := $(abspath $(BTSTACK_ROOT)) PORT_DIR = $(BTSTACK_ROOT)/port/$(PORT_NAME) MAXIM_PATH = $(PORT_DIR)/maxim LIBS_DIR = $(MAXIM_PATH)/Firmware/MAX3263X/Libraries # Machine-specific OpenOCD path only — BTstack uses its own bundled SDK -include ../../sdk.local.mk PROJ_CFLAGS += -DENABLE_HCI_INIT # Core BTstack SRCS += btstack_memory.c btstack_memory_pool.c btstack_linked_list.c SRCS += btstack_util.c btstack_run_loop.c btstack_run_loop_embedded.c SRCS += btstack_crypto.c btstack_audio.c SRCS += hci.c hci_cmd.c hci_dump.c hci_dump_embedded_stdout.c hci_transport_h4.c SRCS += btstack_uart_block_embedded.c # BLE layer SRCS += ad_parser.c att_dispatch.c sm.c SRCS += le_device_db_tlv.c btstack_tlv.c btstack_tlv_flash_bank.c # Third-party crypto SRCS += uECC.c md5.c # CC2564B chipset driver + init script SRCS += btstack_chipset_cc256x.c bluetooth_init_cc2564B_1.8_BT_Spec_4.1.c # Port-specific files SRCS += btstack_port.c hal_tick.c hal_flash_bank_mxc.c main.c # Application SRCS += ble_beacon.c btstack_link_key_db_stub.c However, there is one catch. When initializing the MAX32630FTHR port, the `btstack_port.c` file calls `btstack_link_key_db_tlv_get_instance()` and `hci_set_link_key_db()` regardless of whether we compile for BLE only. The problem is that both functions reside in the `#ifdef ENABLE_CLASSIC` block in the BTstack code. Once you define `ENABLE_CLASSIC`, you will have SBC/A2DP audio definitions pulled into your source tree that The fix is a small stub file (`src/btstack_link_key_db_stub.c`) that satisfies the linker without touching the classic stack at all: #include #include &amp;quot;classic/btstack_link_key_db_tlv.h&amp;quot; /* Returns NULL — no link-key storage. Safe: classic pairing is never initiated. */ const btstack_link_key_db_t * btstack_link_key_db_tlv_get_instance(const btstack_tlv_t *impl, void *ctx) { (void)impl; (void)ctx; return NULL; } void hci_set_link_key_db(btstack_link_key_db_t const *db) { (void)db; } Now, i tried to capture the signals using my salae logic analyzer but, it took be 10mins after i gracefully took the analyzer out of the box, hooked up the wires and tried to find the Bluetooth pins on the feather. I had the pin-out card in front of me, but realized it too late, that the pins to the Bluetooth is not broken out properly for easy access. A note on Compiling Even though i used the tool chain provided by the installation from LPSDK, i used the firmware from the BTStack. So, The build uses the LPSDK&amp;#39;s bundled `make.exe` from `Toolchain/msys/1.0/bin/`. You need both the MSYS bin directory and the ARM toolchain on PATH. The cleanest way is to set `LPSDK_ROOT` in your environment (or in `firmware/sdk.local.ps1`) and use the included `build_and_flash.ps1`: The Code Repository You can find the project code here - https://github.com/arvindsa/identity-protocol-e14-challenge/tree/main Next Steps Sharing data over BLE GATT, Getting the ATECC508A crypto chip talking over I2C, provisioning a key pair, and running a sign/verify round-trip. That&amp;#39;s where the actual security story starts. Final notes The BTStack helped me quite a lot, their documentation https://bluekitchen-gmbh.com/btstack/ports/existing_ports.html#sec:max32630-fthrPort was quite easy to understand which helped me quite easily. There was a time where i thought of pivoting to mbed or arduino but i stuck to my initial goal. Infact I was sure it will get frustrating that i decided to work on the BLE after my Workation at Goa. Work in the morning and Chill on a beach side with a chilled beer. Here is a photo of my Chillout time. The easy documentation BTStack propelled me and thus managed to get this BLE Working within couple of hours. I still am new to BLE and heavily using Youtube videos and ChatGPT to help me understand it. Yet, i am quite confident i will get it done.</description><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/ble">ble</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/btstack">btstack</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/security_2D00_challenge">security-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/analog_2D00_devices">analog-devices</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/maxim">maxim</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/design_2D00_challenge">design-challenge</category><category domain="https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/tags/MAX32630FTHR_2300_">MAX32630FTHR#</category></item><item><title>Forum Post: RE: Identity Protocol - Part 2 - Django Server</title><link>https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/f/forum/56830/identity-protocol---part-2---django-server/234993</link><pubDate>Thu, 16 Apr 2026 03:09:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:240f33e8-fde1-40af-b2ac-be9cb9e48925</guid><dc:creator>arvindsa</dc:creator><description>Thank you so much for the clarification.</description></item></channel></rss>