An Architecture for a hardware-software system
You are to design a single camera software, various client applications, and a communication model for a family of cameras. Each camera runs the Android OS, and will be crafted to make several variants; each of which takes up different forms. Each camera has various channels and interfaces to communicate with.
Variables in the camera variants:
Remember, not each will have all of these mediums and interfaces. One variant may have a display, but another might only be accessible wirelessly. Some may have all. Each camera will also have different things it can do; some cameras perform on-device analytics, others provide for onboard stabilization whereas others don't.
Now, you are to create one camera software that fits all variants. Likewise, you are required to write only one client software per interface; an app, a browser interface, a desktop app etc that can communicate with each of these variants. You must ensure every client interface is backward compatible, and if possible, provide forward compatibility.
How do you go about designing such a system, ensuring you can communicate with any variant through any channel, with forward and backward compatibility?
-
Fun fact, this is my 100th blog and I'm happy it's this! I'll put up my solution in the next blogpost. I'd love to hear solutions though! Remember, when I first joined this project, the problem statement was not as structured and well defined, we figured things on the fly and kept adding things on the go. We also did not expect it to grow to these many variants then. I'm proud of what I came up with though!
Variables in the camera variants:
- headless or on-device display
ie, the camera may be wireless only; it may have an LED as an indicator, or it may have an OLED or LCD - perform on-device analytics
not each camera is allowed to perform on-board analytics; some could do stabilization, some face detection, some motion detection, some may perform all. This is limited by what algorithms the customer buys. - camera sensor resolution, fps, camera lens
every variant has a different sensor and lens specification - multiple camera sensors
some cameras might have multiple sensors; thermal, near IR, or visible light - motor-driven PTZ
the camera might have a pan-tilt-zoom driven by motors - ... and many more that we don't know yet.
- wireless mediums such as Wifi, Bluetooth, Wifi Direct, Hotspot
- wired mediums such as Ethernet, or a USB cable
- physical touch-screen
- physical 5 buttons keypad, or a joystick
- voice
- a mobile application - android and ios both
- a browser by entering the camera's IP address
- a desktop application running on windows, linux, and mac
- a browser but being able to access the camera globally via the internet
- a CLI; command line terminal interface
The different cameras that can be communicated to via various channels/mediums using different interfaces.
Remember, not each will have all of these mediums and interfaces. One variant may have a display, but another might only be accessible wirelessly. Some may have all. Each camera will also have different things it can do; some cameras perform on-device analytics, others provide for onboard stabilization whereas others don't.
Now, you are to create one camera software that fits all variants. Likewise, you are required to write only one client software per interface; an app, a browser interface, a desktop app etc that can communicate with each of these variants. You must ensure every client interface is backward compatible, and if possible, provide forward compatibility.
How do you go about designing such a system, ensuring you can communicate with any variant through any channel, with forward and backward compatibility?
-
Fun fact, this is my 100th blog and I'm happy it's this! I'll put up my solution in the next blogpost. I'd love to hear solutions though! Remember, when I first joined this project, the problem statement was not as structured and well defined, we figured things on the fly and kept adding things on the go. We also did not expect it to grow to these many variants then. I'm proud of what I came up with though!
Comments
Post a Comment