From d4fc3a6ff05cdf017fe9bc41446ec9b15afae196 Mon Sep 17 00:00:00 2001 From: Aman Maheshwari Date: Fri, 22 Nov 2024 16:57:32 +0530 Subject: [PATCH 1/5] Add notch filter 50Hz/60Hz --- src/components/Connection.tsx | 764 +++++++++++++++++++++------------- src/components/filters.tsx | 100 +++++ 2 files changed, 578 insertions(+), 286 deletions(-) create mode 100644 src/components/filters.tsx diff --git a/src/components/Connection.tsx b/src/components/Connection.tsx index 4b873bf..ce9d5ef 100644 --- a/src/components/Connection.tsx +++ b/src/components/Connection.tsx @@ -2,6 +2,7 @@ import React, { useState, useRef, useCallback, useEffect } from "react"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; +import { Notch } from './filters'; import { Cable, @@ -17,6 +18,8 @@ import { Minus, ZoomIn, // For magnify/zoom in functionality ZoomOut, // For zoom out functionality + CircleOff, + ReplaceAll, } from "lucide-react"; import { BoardsList } from "./boards"; import { toast } from "sonner"; @@ -54,6 +57,7 @@ const Connection: React.FC = ({ onPauseChange, datastream, Connection, + selectedBits, setSelectedBits, isDisplay, setIsDisplay, @@ -67,6 +71,7 @@ const Connection: React.FC = ({ const isRecordingRef = useRef(false); // Ref to track if the device is recording const [isEndTimePopoverOpen, setIsEndTimePopoverOpen] = useState(false); const [detectedBits, setDetectedBits] = useState(null); // State to store the detected bits + const detectedBitsRef = React.useRef(null); const [isRecordButtonDisabled, setIsRecordButtonDisabled] = useState(false); // New state variable const [datasets, setDatasets] = useState([]); // State to store the recorded datasets const [hasData, setHasData] = useState(false); @@ -91,6 +96,8 @@ const Connection: React.FC = ({ ); const buffer: number[] = []; // Buffer to store incoming data const bufferdRef = useRef([[], []]); // Two buffers: [0] and [1] + const [isFilterPopoverOpen, setIsFilterPopoverOpen] = useState(false); + const filterRef = useRef(null); const togglePause = () => { const newPauseState = !isDisplay; @@ -188,6 +195,7 @@ const Connection: React.FC = ({ if (board) { setifBits(board.bits as BitSelection); setSelectedBits(board.bits as BitSelection); + detectedBitsRef.current = board.bits as BitSelection; return `${board.name} | Product ID: ${info.usbProductId}`; // Return the board name and product ID } @@ -253,6 +261,20 @@ const Connection: React.FC = ({ toast.error("Failed to connect to device."); } }; + const sample = useCallback((bits: BitSelection | null): number => { + if (bits === null) { + return 0; // Default value for null input + } + console.log(bits); + switch (bits) { + case "fourteen": + return 1; + case "ten": + return 2; + default: + return 0; // Fallback value for unexpected cases + } + }, []); const disconnectDevice = async (): Promise => { try { @@ -299,6 +321,43 @@ const Connection: React.FC = ({ Connection(false); } }; + const appliedFiltersRef = React.useRef<{ [key: number]: number }>({}); + const [, forceUpdate] = React.useReducer((x) => x + 1, 0); + + const removeFilter = (channelIndex: number) => { + delete appliedFiltersRef.current[channelIndex]; // Remove the filter for the channel + forceUpdate(); // Trigger re-render + console.log(`Filter removed from Channel ${channelIndex}`); + }; + + // Function to handle frequency selection + const handleFrequencySelection = (channelIndex: number, frequency: number) => { + appliedFiltersRef.current[channelIndex] = frequency; // Update the filter for the channel + forceUpdate(); //Trigger re-render + console.log( + `Channel ${channelIndex} selected with frequency ${frequency}Hz` + ); + }; + + // Function to set the same filter for all channels + const applyFilterToAllChannels = (channels: number[], frequency: number) => { + channels.forEach((channelIndex) => { + appliedFiltersRef.current[channelIndex] = frequency; // Set the filter for the channel + }); + forceUpdate(); // Trigger re-render + console.log( + `Filter set to ${frequency}Hz for all channels: ${channels.join(", ")}` + ); + }; + + // Function to remove the filter for all channels + const removeFilterFromAllChannels = (channels: number[]) => { + channels.forEach((channelIndex) => { + delete appliedFiltersRef.current[channelIndex]; // Remove the filter for the channel + }); + forceUpdate(); // Trigger re-render + console.log(`Filters removed from all channels: ${channels.join(", ")}`); + }; // Function to read data from a connected device and process it const readData = async (): Promise => { @@ -309,6 +368,14 @@ const Connection: React.FC = ({ const SYNC_BYTE2 = 0x7c; // Second synchronization byte const END_BYTE = 0x01; // End byte to signify the end of a packet let previousCounter: number | null = null; // Variable to store the previous counter value for loss detection + const notchFilters = [ + new Notch(), // Notch_1 + new Notch(), // Notch_2 + new Notch(), // Notch_3 + new Notch(), // Notch_4 + new Notch(), // Notch_5 + new Notch(), // Notch_6 + ]; try { // Loop while the device is connected @@ -351,12 +418,25 @@ const Connection: React.FC = ({ const packet = buffer.slice(syncIndex, syncIndex + PACKET_LENGTH); // Extract the packet from the buffer const channelData: number[] = []; // Array to store the extracted channel data for (let channel = 0; channel < NUM_CHANNELS; channel++) { - // Loop through each channel in the packet - const highByte = packet[channel * 2 + HEADER_LENGTH]; // Extract the high byte for the channel - const lowByte = packet[channel * 2 + HEADER_LENGTH + 1]; // Extract the low byte for the channel - const value = (highByte << 8) | lowByte; // Combine high and low bytes to get the channel value - channelData.push(value); // Convert the value to string and store it in the array + const highByte = packet[channel * 2 + HEADER_LENGTH]; + const lowByte = packet[channel * 2 + HEADER_LENGTH + 1]; + const value = (highByte << 8) | lowByte; + + if (appliedFiltersRef.current[channel] !== undefined) { + // Apply the filter if one is set for this channel + channelData.push( + notchFilters[channel].process( + value, + appliedFiltersRef.current[channel], + sample(detectedBitsRef.current) + ) + ); + } else { + // Push raw value if no filter is applied + channelData.push(value); + } } + const counter = packet[2]; // Extract the counter value from the packet channelData.push(counter); // Add the counter to the channel data datastream(channelData); // Pass the channel data to the LineData function for further processing @@ -469,9 +549,8 @@ const Connection: React.FC = ({ if (minutes === 0) { return `${seconds} second${seconds !== 1 ? "s" : ""}`; } - return `${minutes} minute${minutes !== 1 ? "s" : ""} ${seconds} second${ - seconds !== 1 ? "s" : "" - }`; + return `${minutes} minute${minutes !== 1 ? "s" : ""} ${seconds} second${seconds !== 1 ? "s" : "" + }`; }; // Updated stopRecording function @@ -735,353 +814,466 @@ const Connection: React.FC = ({ toast.error("Failed to save data. Please try again."); } }; -// bg-gray-100 text-white p-2 flex-none flex items-center justify-center + // bg-gray-100 text-white p-2 flex-none flex items-center justify-center return (
- {/* Left-aligned section */} -
- {isRecordingRef.current && ( -
- - -
- + {isRecordingRef.current && ( +
+ + +
+ + + + + +
+
+ Set End Time (minutes)
- )} - - - -
-
- Set End Time (minutes) -
-
- {[1, 10, 20, 30].map((time) => ( +
+ {[1, 10, 20, 30].map((time) => ( + + ))} +
+
+ + e.key === "Enter" && handleCustomTimeSet() + } + onChange={handleCustomTimeChange} + className="w-20" + /> - ))} -
-
- - e.key === "Enter" && handleCustomTimeSet() - } - onChange={handleCustomTimeChange} - className="w-20" - /> - +
-
-
- -
-
- )} -
- - {/* Center-aligned buttons */} -
- {/* Connection button with tooltip */} - - - - - - -

{isConnected ? "Disconnect Device" : "Connect Device"}

-
-
-
- {/* Autoscale/Bit selection */} - {isConnected && ( - - -
- {/* Decrease Canvas Button */} - - - - - -

{Zoom === 1 ? "We can't shrinkage" : "Decrease Zoom"}

-
-
- - - - {/* Toggle All Channels Button */} - - - - - -

{FullZoom ? "Remove Full Zoom" : "Full Zoom"}

-
-
- - - - {/* Increase Canvas Button */} - - - - - -

- {Zoom >= 10 ? "Maximum Zoom Reached" : "Increase Zoom"} -

-
-
+ +
-
-
- )} +
+ )} +
- {/* Display (Play/Pause) button with tooltip */} - {isConnected && ( + {/* Center-aligned buttons */} +
+ {/* Connection button with tooltip */} - -

- {isDisplay ? "Pause Data Display" : "Resume Data Display"} -

+

{isConnected ? "Disconnect Device" : "Connect Device"}

- )} + {/* Autoscale/Bit selection */} + {isConnected && ( + + +
+ {/* Decrease Canvas Button */} + + + + + +

{Zoom === 1 ? "We can't shrinkage" : "Decrease Zoom"}

+
+
- {/* Record button with tooltip */} - {isConnected && ( - - - - - - -

- {!isRecordingRef.current - ? "Start Recording" - : "Stop Recording"} -

-
-
-
- )} + - {/* Save/Delete data buttons with tooltip */} - {isConnected && ( - -
- {hasData && datasets.length === 1 && ( - - - - - -

Save Data as CSV

-
-
- )} + {/* Toggle All Channels Button */} + + + + + +

{FullZoom ? "Remove Full Zoom" : "Full Zoom"}

+
+
- + + + {/* Increase Canvas Button */} + + + + + +

+ {Zoom >= 10 ? "Maximum Zoom Reached" : "Increase Zoom"} +

+
+
+
+ +
+ )} + {/* Display (Play/Pause) button with tooltip */} + {isConnected && ( + - -

Save Recording

+

+ {isDisplay ? "Pause Data Display" : "Resume Data Display"} +

+
+ )} + {/* Record button with tooltip */} + {isConnected && ( + -

Delete Recording

+

+ {!isRecordingRef.current + ? "Start Recording" + : "Stop Recording"} +

-
-
- )} - - {/* Canvas control buttons with tooltip */} - {isConnected && ( - - -
- {/* Decrease Canvas Button */} - - - - - -

- {canvasCount === 1 - ? "At Least One Canvas Required" - : "Decrease Channel"} -

-
-
+ + )} + + {/* Save/Delete data buttons with tooltip */} + {isConnected && ( + +
+ {hasData && datasets.length === 1 && ( + + + + + +

Save Data as CSV

+
+
+ )} - {/* Toggle All Channels Button */} -

- {showAllChannels - ? "Hide All Channels" - : "Show All Channels"} -

+

Save Recording

- - - {/* Increase Canvas Button */} -

- {canvasCount >= 6 - ? "Maximum Channels Reached" - : "Increase Channel"} -

+

Delete Recording

- -
- )} + + )} + {isConnected && ( + + + + + +
+
+ {/* Filter Name */} +
+ {/* Buttons */} +
+ + + +
+
+
+ {["CH1", "CH2", "CH3", "CH4", "CH5", "CH6"].map((filterName, index) => ( +
+ {/* Filter Name */} +
{filterName}
+ + {/* Buttons */} +
+ + + +
+
+ ))} +
+
+
+ +
+ )} + + + {/* Canvas control buttons with tooltip */} + {isConnected && ( + + +
+ {/* Decrease Canvas Button */} + + + + + +

+ {canvasCount === 1 + ? "At Least One Canvas Required" + : "Decrease Channel"} +

+
+
+ + + + {/* Toggle All Channels Button */} + + + + + +

+ {showAllChannels + ? "Hide All Channels" + : "Show All Channels"} +

+
+
+ + + + {/* Increase Canvas Button */} + + + + + +

+ {canvasCount >= 6 + ? "Maximum Channels Reached" + : "Increase Channel"} +

+
+
+
+
+
+ )} +
-
); }; diff --git a/src/components/filters.tsx b/src/components/filters.tsx new file mode 100644 index 0000000..e5b9317 --- /dev/null +++ b/src/components/filters.tsx @@ -0,0 +1,100 @@ + +//Notch Filter 50Hz/60Hz +export class Notch { + // Properties to hold the state of the filter sections + private z1_1: number; + private z2_1: number; + + private z1_2: number; + private z2_2: number; + + private x_1: number; + private x_2: number; + + constructor() { + // Initialize state variables for both filter sections + this.z1_1 = 0; + this.z2_1 = 0; + + this.z1_2 = 0; + this.z2_2 = 0; + + this.x_1 = 0; + this.x_2 = 0; + } + + // Method to apply the filter + process(input: number, type: number, sample: number): number { + let output = input; + switch (sample) { + case 1: // 500Hz + switch (type) { + case 1: // Notch Sampling rate: 500.0 Hz, frequency: [48.0, 52.0] Hz. + this.x_1 = output - (-1.56858163 * this.z1_1) - (0.96424138 * this.z2_1); + output = 0.96508099 * this.x_1 + -1.56202714 * this.z1_1 + 0.96508099 * this.z2_1; + this.z2_1 = this.z1_1; + this.z1_1 = this.x_1; + + // Second filter section + this.x_2 = output - (-1.61100358 * this.z1_2) - (0.96592171 * this.z2_2); + output = 1.0 * this.x_2 + -1.61854514 * this.z1_2 + 1.0 * this.z2_2; + this.z2_2 = this.z1_2; + this.z1_2 = this.x_2; + break; + case 2: // Notch Sampling rate: 500.0 Hz, frequency: [58.0, 62.0] Hz. + this.x_1 = output - (-1.40810535 * this.z1_1) - (0.96443153 * this.z2_1); + output = 0.96508099 * this.x_1 + (-1.40747202 * this.z1_1) + (0.96508099 * this.z2_1); + this.z2_1 = this.z1_1; + this.z1_1 = this.x_1; + + // Second filter section + this.x_2 = output - (-1.45687509 * this.z1_2) - (0.96573127 * this.z2_2); + output = 1.00000000 * this.x_2 + (-1.45839783 * this.z1_2) + (1.00000000 * this.z2_2); + this.z2_2 = this.z1_2; + this.z1_2 = this.x_2; + break; + default: + break; + } + break; + + case 2: // 250Hz + switch (type) { + case 1: // Notch Sampling rate: 250.0 Hz, frequency: [48.0, 52.0] Hz. + this.x_1 = output - (-0.53127491 * this.z1_1) - (0.93061518 * this.z2_1); + output = 0.93137886 * this.x_1 + (-0.57635175 * this.z1_1) + 0.93137886 * this.z2_1; + this.z2_1 = this.z1_1; + this.z1_1 = this.x_1; + + // Second filter section + this.x_2 = output - (-0.66243374 * this.z1_2) - (0.93214913 * this.z2_2); + output = 1.00000000 * this.x_2 + (-0.61881558 * this.z1_2) + 1.00000000 * this.z2_2; + this.z2_2 = this.z1_2; + this.z1_2 = this.x_2; + break; + + case 2: // Notch Sampling rate: 250.0 Hz, frequency: [58.0, 62.0] Hz. + this.x_1 = output - (-0.05269865 * this.z1_1) - (0.93123336 * this.z2_1); + output = 0.93137886 * this.x_1 + (-0.11711144 * this.z1_1) + 0.93137886 * this.z2_1; + this.z2_1 = this.z1_1; + this.z1_1 = this.x_1; + + // Second filter section + this.x_2 = output - (-0.18985625 * this.z1_2) - (0.93153034 * this.z2_2); + output = 1.00000000 * this.x_2 + (-0.12573985 * this.z1_2) + 1.00000000 * this.z2_2; + this.z2_2 = this.z1_2; + this.z1_2 = this.x_2; + break; + + default: + break; + } + break; + + default: + break; + } + + return output; + } +} \ No newline at end of file From 2e81a0721e7b5b30e40e25c25eec1d765aa6256d Mon Sep 17 00:00:00 2001 From: Aman Maheshwari Date: Sat, 23 Nov 2024 15:04:07 +0530 Subject: [PATCH 2/5] Update version --- Version.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.tsx b/Version.tsx index d9b9b6f..d8abb7f 100644 --- a/Version.tsx +++ b/Version.tsx @@ -1,2 +1,2 @@ // version.tsx -export const VERSION = "2.1.0a"; +export const VERSION = "2.2.0a"; From ea67d7c6051cf672d79cc12dd624c84cc21280a1 Mon Sep 17 00:00:00 2001 From: Aman Maheshwari Date: Tue, 26 Nov 2024 11:39:57 +0530 Subject: [PATCH 3/5] Update Logo of indexdb and web serialapi --- public/assets/dark/Indexeddbdark.png | Bin 0 -> 9372 bytes public/assets/dark/serialdevicedark.png | Bin 0 -> 6956 bytes public/assets/light/Indexeddblight.png | Bin 0 -> 22800 bytes public/assets/light/serialdevicelight.png | Bin 0 -> 14756 bytes src/components/LandingComp/TechStack.tsx | 10 +++++----- 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 public/assets/dark/Indexeddbdark.png create mode 100644 public/assets/dark/serialdevicedark.png create mode 100644 public/assets/light/Indexeddblight.png create mode 100644 public/assets/light/serialdevicelight.png diff --git a/public/assets/dark/Indexeddbdark.png b/public/assets/dark/Indexeddbdark.png new file mode 100644 index 0000000000000000000000000000000000000000..c0accc697716bc4077c7369d1e9c375911dd2a3b GIT binary patch literal 9372 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%0An z2Qoo(v(ZG8TLdUiMLJX{a5Yfa2Xhr$f!GXez3BitQZPG^NCcfw-RNB0jG{2~zeZpGp{fU8!A%|HkSQuSZHI+T%3Wf5mY{&$C zBzyy(FHF(DT^g)?=*7%DtVP5#D{x&@EUk7at+alj3ut$hS9m(>US=H+PDYOEZ zv)bLlF*%Mf87)`tS5S;MqQPvNFK6gct0P-`|G^&{nnnr$kUflL;zF8}B-%0Gqi>gb z0Zpt|IEu$qPB}tphoH24mio3Uzs&~<$-|%s@^Zq;u*{i!kt&v$OFBL ztAJ>z3JItCMxX2=6lurj`})~#+G+!$^TP=PYA5cz@CMiqtAv?2dq-Hf(d<|C|8U0J zM613tot{LTGY-%O7vGj@KficH`kRb@0P zD`Dx7wuO$k)R z`wn^^q37WmpuXdI@#Zm)7d%QDNQsL~uCzRS)oe+@6oCkLQ$@>5so} zSOubs!x22ArIwo*Z_Vy&KmR@u$*klr?ImrHE1$4WUl=f6*a+yJjgj86pP&w_d!)V8 zbzD5$qj>hsYTj6SwQ>%TFa%MV=P=;i^fZ#kLANjX9$8`V%8-N)E_ABLfKv}@k!eO= zuFa9c*}<=9Zqsu40R&b@wRpX0yA{>5r>9s)VH{=T`(PI7@>^}SpgNsdQ6!wPZ*3O8 zZ*5NZK+AHP*vb)kC^B4k(d$!))Jq75)@G(r>zs>rOsFu>M#xD79BptujY0)Dv!d z_#FmS@M{TSSkK)yOBY;!eGV~TwAXY!YQ3JMFPqKr&-2G4_J+B1AETf(;N3~D9{vP{ zaVRcGdqdQdEa3B6EO%qXvG_~1@9Fy5k&}~|A!LV|AFV$F1%2lce0fWYD<$3<6ciZK ziz`Ayn&aZFgS}zo_sAdDERqpb`*kgzIr*R}S#g)pzTkpF$>M!jYNEoLU~viVPr6@q zq(^%&)(Do<*FgktjtKn+0wfWT<-WNq@-2w3UmP6sSp$5eH<3IC33(D$^mIVw00FUe zvR<^st0zpZfUUV{_UF&A%8P;uJ?czo&6IRSzr5AaT4`n)%pYF|hLSk)1SHS?Jc?tY z=j<{Ond&Tf%Fqgdd;mPgVAveX~v=;3H~=>bs|!SHkPnQaa(?-UDI?sa!%%1 z{G5N>bpY1AIaa5bsIC19q@C{TC-iqBnw{XP)!Ilc!D+DJKKErZyG#4u_{R=pUCmbG YE!hU&mpuHCytLBZ-9EdRJHyWYCl0h^XaE2J literal 0 HcmV?d00001 diff --git a/public/assets/light/Indexeddblight.png b/public/assets/light/Indexeddblight.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1aaadd87fa18be6c544e45f89fdaff409f889b GIT binary patch literal 22800 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 QKf45s4b2QnPrBatUn=9v&;S4c literal 0 HcmV?d00001 diff --git a/src/components/LandingComp/TechStack.tsx b/src/components/LandingComp/TechStack.tsx index e4e131b..7aac11c 100644 --- a/src/components/LandingComp/TechStack.tsx +++ b/src/components/LandingComp/TechStack.tsx @@ -43,8 +43,8 @@ const Stack = () => { name: "Web Serial API", logo: theme === "light" - ? "./assets/dark/favicon.ico" - : "./assets/light/favicon.ico", + ? "./assets/dark/serialdevicedark.png" + : "./assets/light/serialdevicelight.png", url: "https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API", description: "For connecting to the serial port of the device.", }, @@ -52,8 +52,8 @@ const Stack = () => { name: "IndexedDB API", logo: theme === "light" - ? "./assets/dark/favicon.ico" - : "./assets/light/favicon.ico", + ? "./assets/dark/Indexeddbdark.png" + : "./assets/light/Indexeddblight.png", url: "https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API", description: "IndexedDB is a low-level API for client-side storage.", }, @@ -124,4 +124,4 @@ const Stack = () => { ); }; -export default Stack; +export default Stack; \ No newline at end of file From 4acb45303e2eca8de78bc0122c20125fba49aea4 Mon Sep 17 00:00:00 2001 From: Aman Maheshwari Date: Tue, 26 Nov 2024 12:21:56 +0530 Subject: [PATCH 4/5] Update filters --- src/components/Connection.tsx | 45 +++++++++++++++-------------------- src/components/filters.tsx | 11 +++++++++ 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/components/Connection.tsx b/src/components/Connection.tsx index ce9d5ef..70a15a9 100644 --- a/src/components/Connection.tsx +++ b/src/components/Connection.tsx @@ -421,20 +421,13 @@ const Connection: React.FC = ({ const highByte = packet[channel * 2 + HEADER_LENGTH]; const lowByte = packet[channel * 2 + HEADER_LENGTH + 1]; const value = (highByte << 8) | lowByte; - - if (appliedFiltersRef.current[channel] !== undefined) { - // Apply the filter if one is set for this channel - channelData.push( - notchFilters[channel].process( - value, - appliedFiltersRef.current[channel], - sample(detectedBitsRef.current) - ) - ); - } else { - // Push raw value if no filter is applied - channelData.push(value); - } + channelData.push( + notchFilters[channel].process( + value, + appliedFiltersRef.current[channel], + sample(detectedBitsRef.current) + ) + ); } const counter = packet[2]; // Extract the counter value from the packet @@ -1113,8 +1106,8 @@ const Connection: React.FC = ({ onClick={() => removeFilterFromAllChannels([0, 1, 2, 3, 4, 5])} className={ Object.keys(appliedFiltersRef.current).length === 0 - ? "bg-red-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-red-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > @@ -1125,8 +1118,8 @@ const Connection: React.FC = ({ onClick={() => applyFilterToAllChannels([0, 1, 2, 3, 4, 5], 1)} className={ Object.keys(appliedFiltersRef.current).length === 6 && Object.values(appliedFiltersRef.current).every((value) => value === 1) - ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > 50Hz @@ -1137,8 +1130,8 @@ const Connection: React.FC = ({ onClick={() => applyFilterToAllChannels([0, 1, 2, 3, 4, 5], 2)} className={ Object.keys(appliedFiltersRef.current).length === 6 && Object.values(appliedFiltersRef.current).every((value) => value === 2) - ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > 60Hz @@ -1159,8 +1152,8 @@ const Connection: React.FC = ({ onClick={() => removeFilter(index)} className={ appliedFiltersRef.current[index] === undefined - ? "bg-red-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-red-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > @@ -1171,8 +1164,8 @@ const Connection: React.FC = ({ onClick={() => handleFrequencySelection(index, 1)} className={ appliedFiltersRef.current[index] === 1 - ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > 50Hz @@ -1183,8 +1176,8 @@ const Connection: React.FC = ({ onClick={() => handleFrequencySelection(index, 2)} className={ appliedFiltersRef.current[index] === 2 - ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background - : "bg-white-500" // Active background + ? "bg-green-700 hover:bg-white-500 text-white hover:text-white" // Disabled background + : "bg-white-500" // Active background } > 60Hz diff --git a/src/components/filters.tsx b/src/components/filters.tsx index e5b9317..6def59c 100644 --- a/src/components/filters.tsx +++ b/src/components/filters.tsx @@ -1,3 +1,13 @@ +// TypeScript filter classes for Chords +// Made with <3 at Upside Down labs +// Author: Aman Maheshwari +// +// Reference: +// https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.butter.html +// https://courses.ideate.cmu.edu/16-223/f2020/Arduino/FilterDemos/filter_gen.py +// +// Note: +// filter_gen.py provides C/C++ type functions which we have converted to TS //Notch Filter 50Hz/60Hz export class Notch { @@ -25,6 +35,7 @@ export class Notch { // Method to apply the filter process(input: number, type: number, sample: number): number { + if(!type) return input; let output = input; switch (sample) { case 1: // 500Hz From 067b1f796e9b8cc99845d07e58c1a641bb92b3e2 Mon Sep 17 00:00:00 2001 From: Aman Maheshwari Date: Tue, 26 Nov 2024 18:22:00 +0530 Subject: [PATCH 5/5] Updated tech section logo --- public/assets/dark/Indexeddbdark.png | Bin 9372 -> 0 bytes public/assets/dark/Webserialdark.svg | 25 ++++++++++++++++++++++ public/assets/dark/indexDBdark.svg | 22 +++++++++++++++++++ public/assets/dark/serialdevicedark.png | Bin 6956 -> 0 bytes public/assets/light/Indexeddblight.png | Bin 22800 -> 0 bytes public/assets/light/indexDBlight.svg | 22 +++++++++++++++++++ public/assets/light/serialdevicelight.png | Bin 14756 -> 0 bytes public/assets/light/serialdevicelight.svg | 25 ++++++++++++++++++++++ src/components/LandingComp/TechStack.tsx | 8 +++---- 9 files changed, 98 insertions(+), 4 deletions(-) delete mode 100644 public/assets/dark/Indexeddbdark.png create mode 100644 public/assets/dark/Webserialdark.svg create mode 100644 public/assets/dark/indexDBdark.svg delete mode 100644 public/assets/dark/serialdevicedark.png delete mode 100644 public/assets/light/Indexeddblight.png create mode 100644 public/assets/light/indexDBlight.svg delete mode 100644 public/assets/light/serialdevicelight.png create mode 100644 public/assets/light/serialdevicelight.svg diff --git a/public/assets/dark/Indexeddbdark.png b/public/assets/dark/Indexeddbdark.png deleted file mode 100644 index c0accc697716bc4077c7369d1e9c375911dd2a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9372 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 + + + + + + + + + + + + + + + + + diff --git a/public/assets/dark/indexDBdark.svg b/public/assets/dark/indexDBdark.svg new file mode 100644 index 0000000..1fcb776 --- /dev/null +++ b/public/assets/dark/indexDBdark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/public/assets/dark/serialdevicedark.png b/public/assets/dark/serialdevicedark.png deleted file mode 100644 index 4098fc7017c2b2e62e3259144e56c7e631c619db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6956 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%0An z2Qoo(v(ZG8TLdUiMLJX{a5Yfa2Xhr$f!GXez3BitQZPG^NCcfw-RNB0jG{2~zeZpGp{fU8!A%|HkSQuSZHI+T%3Wf5mY{&$C zBzyy(FHF(DT^g)?=*7%DtVP5#D{x&@EUk7at+alj3ut$hS9m(>US=H+PDYOEZ zv)bLlF*%Mf87)`tS5S;MqQPvNFK6gct0P-`|G^&{nnnr$kUflL;zF8}B-%0Gqi>gb z0Zpt|IEu$qPB}tphoH24mio3Uzs&~<$-|%s@^Zq;u*{i!kt&v$OFBL ztAJ>z3JItCMxX2=6lurj`})~#+G+!$^TP=PYA5cz@CMiqtAv?2dq-Hf(d<|C|8U0J zM613tot{LTGY-%O7vGj@KficH`kRb@0P zD`Dx7wuO$k)R z`wn^^q37WmpuXdI@#Zm)7d%QDNQsL~uCzRS)oe+@6oCkLQ$@>5so} zSOubs!x22ArIwo*Z_Vy&KmR@u$*klr?ImrHE1$4WUl=f6*a+yJjgj86pP&w_d!)V8 zbzD5$qj>hsYTj6SwQ>%TFa%MV=P=;i^fZ#kLANjX9$8`V%8-N)E_ABLfKv}@k!eO= zuFa9c*}<=9Zqsu40R&b@wRpX0yA{>5r>9s)VH{=T`(PI7@>^}SpgNsdQ6!wPZ*3O8 zZ*5NZK+AHP*vb)kC^B4k(d$!))Jq75)@G(r>zs>rOsFu>M#xD79BptujY0)Dv!d z_#FmS@M{TSSkK)yOBY;!eGV~TwAXY!YQ3JMFPqKr&-2G4_J+B1AETf(;N3~D9{vP{ zaVRcGdqdQdEa3B6EO%qXvG_~1@9Fy5k&}~|A!LV|AFV$F1%2lce0fWYD<$3<6ciZK ziz`Ayn&aZFgS}zo_sAdDERqpb`*kgzIr*R}S#g)pzTkpF$>M!jYNEoLU~viVPr6@q zq(^%&)(Do<*FgktjtKn+0wfWT<-WNq@-2w3UmP6sSp$5eH<3IC33(D$^mIVw00FUe zvR<^st0zpZfUUV{_UF&A%8P;uJ?czo&6IRSzr5AaT4`n)%pYF|hLSk)1SHS?Jc?tY z=j<{Ond&Tf%Fqgdd;mPgVAveX~v=;3H~=>bs|!SHkPnQaa(?-UDI?sa!%%1 z{G5N>bpY1AIaa5bsIC19q@C{TC-iqBnw{XP)!Ilc!D+DJKKErZyG#4u_{R=pUCmbG YE!hU&mpuHCytLBZ-9EdRJHyWYCl0h^XaE2J diff --git a/public/assets/light/Indexeddblight.png b/public/assets/light/Indexeddblight.png deleted file mode 100644 index 5d1aaadd87fa18be6c544e45f89fdaff409f889b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22800 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 + + + + + + + + + + + + + + diff --git a/public/assets/light/serialdevicelight.png b/public/assets/light/serialdevicelight.png deleted file mode 100644 index 06fc727ddf550dc32e163be3f4514ee2a112170c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14756 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 QKf45s4b2QnPrBatUn=9v&;S4c diff --git a/public/assets/light/serialdevicelight.svg b/public/assets/light/serialdevicelight.svg new file mode 100644 index 0000000..9661ddd --- /dev/null +++ b/public/assets/light/serialdevicelight.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/components/LandingComp/TechStack.tsx b/src/components/LandingComp/TechStack.tsx index 7aac11c..65b2d3e 100644 --- a/src/components/LandingComp/TechStack.tsx +++ b/src/components/LandingComp/TechStack.tsx @@ -43,8 +43,8 @@ const Stack = () => { name: "Web Serial API", logo: theme === "light" - ? "./assets/dark/serialdevicedark.png" - : "./assets/light/serialdevicelight.png", + ? "./assets/dark/Webserialdark.svg" + : "./assets/light/serialdevicelight.svg", url: "https://developer.mozilla.org/en-US/docs/Web/API/Web_Serial_API", description: "For connecting to the serial port of the device.", }, @@ -52,8 +52,8 @@ const Stack = () => { name: "IndexedDB API", logo: theme === "light" - ? "./assets/dark/Indexeddbdark.png" - : "./assets/light/Indexeddblight.png", + ? "./assets/dark/indexDBdark.svg" + : "./assets/light/indexDBlight.svg", url: "https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API", description: "IndexedDB is a low-level API for client-side storage.", },