Proper method for implementing API on an ARM based firmware - api

I am developing a device firmware based on an LPC17XX+FreeRTOS. My development environment is Eclipse + GCC, codes are in C. The requirement of the end product is:
A "base firmware" running RTOS and performing some periodic task (eg. perform health check).
The base firmware needs to support an API which will have some functions for data manipulation/delay/timing and some functions for using the device ports and I/O.
The user can build their own app using this API.
The user app needs to reside in an empty space of the flash. (It will be sent to the device via Serial port and I plan to use IAP to save it on flash)
I want to start the app as a new task from the "base firmware".
Step 1 and 3 are fairly easy to implement. I am not sure what is the best way to implement 2,3 and 4. So far I've looked at Dynamic linking, jump tables, overlays etc and I am kind of lost. Can someone give me an overview of proper implementation steps?
Some related questions:
Any other way to develop firmware for a product which provide API based App/module development and loading?
What do I need to provide to the user for using the API? Will my API source code be open?
I am open to any ideas, thanks :)

Related

Is there any way to send data to cumulocity without physical devices

Finding a way to push data to cumulocity without physical devices
I am trying to find a way to push data to cumulocity without physical devices. is there any to implement in java?
If there is a way, please drop some snippets and doc links.
You can find an example implementation in Java for an MQTT client here: https://cumulocity.com/guides/device-sdk/mqtt-examples/#hello-mqtt-java.
Examples in other languages are next to it.
You can also use a tool like MQTTBox or MQTTFx if you don't want to implement something.

Considerations for Creating Industrial Applications (Native/Web)

What considerations are needed when creating a web app that is intended to be used in an industrial plant setting for a company? My specific use case is an industrial facility with several different production plants that would each have its own device for the application interface.
How do companies enforce the usage of such apps on a monitor/tablet? For example, could I prevent them from using other stuff on the tablet?
Importantly, how would security work? They'd share a device. There may be multiple operators that use the app in a given shift. Would they all use the same authentication session (this is not preferable, as I'd like to uniquely identify the active user)? Obviously I could use standard username/passwords with token based sessions that expire, however, this leaves a lot of potential for account hijacking. Ideally, they'd be able to log on very quickly (PIN, perhaps?) and their session would end when they are done.
As long as there is internet connection, I would presume that there isn't much pro/con regarding the use of native applications versus web based or progressive web apps. Is this assumption correct?
What's the best way of identifying which device the application is being run on?
Is this a common thing to do in general? What other technologies are used to create software that obtains input from industrial operators?
--
Update - this is a good higher level consideration of the question at hand, however, it has become apparent why focused, specific questions are helpful. As such, I will follow up with questions that are specific.
Identifying the Area/Device a Web Application is Accessed On
Enforcing Specific Application Use on Tablets
Best Practices for Web App Authentication in Industrial Settings
I'm not able to answer everything in great detail but here are a few pointers. In the environment as you describe we usually see these two options. 1) you tell them what you need, internet, security, if they give you device and how it will be configured 2) they tell you exactly what you need to deliver.
I do not think you can 100% prevent them. We did it by providing the tablet( well laptops in our case) and the OS configuration took care of that, downside we had few devices to support. You seem to hint that there is always an internet connection so I guess you can collect all info about the system and send it back to you daily?
We were allowed to "tap" into their attendance SW and when you entered the facility you were able to use your 4 digit pin to log in if you were out of premisses you could not log in at all. I can imagine the following: you log in with your username and password - this does full verification, after that, you can use 4 digit pin to login for next n hours.
maybe, kinda, depends on what you are doing. Does the browser have all features you need? Our system needs multicast to perform really fast, so we have a native app
touched on this in 1. You could also use device enrolment process. You can also contractually force them that there will be only your software and it may invalidate support contract. It really depends on your creativity. My favourite( and it works - just tell them, there will only be installed my software and if not you will pay me double for support. I only saw one customer who installed some crap on the device when there were told not to
it really depends on what industry you are talking about, every industry is different. We almost always build a custom solution
The enforcement of the device/app usage depends on the customer, if the customer asked for help in the enforcement, then you can provide guide, training and workshops. If the customer serious about the enforcement then it will be a policy that's adapted by all the organization from top to down. Usually seniors will resist a workflow change more than juniors, so top management/executive should deal with that. Real life story: SAP team took 6 months to transform major newspaper workflow, during that few seniors got fired because they refuse to adapt the change.
Security shouldn't handicap the users, usually in industrial environment the network is isolated or at least restricted through VPN to connect multiple sites (plants in your case), regarding the active user: we usually provide guide/training/workshop for the users and inform them that using colleague account or device will prevent the system from tracking your accomplishment/tasks, so each user is responsible to make sure the active account/device is the one assigned to him/her.
It depends, with native you have more controls than web, but if the app is just doing monitoring then most of today apps use web for monitoring and the common way to receive input is REST APIs (even if the industrial devices doesn't support REST API, a middleware could be written to transform the output). If you need more depth about native vs web you need to ask new question with more details about the requirements.
Depends on the tech you are using (native or web), and things I mentioned in point 2: you can use whitelist of devices that's allowed to run the app. overall there are many best ways to track down the device.
How common in general? I think such information can only be achieved by survey, the world full of variations. And having something common not mean its safe or best, our industry keep changing at all levels. So to stay in the loop, we must keep learning and self-updating without reboot.

Suggestion for open source software to create a voice chat application

Looking to create a voice application to work with 10 computers and 1 server connected locally.(offline) I'm thinking the server would hold the application and the computers would run clients.
Ideally there would be a total of 10 channels that users can join or leave.
I'm looking for open source applications or APIs that I can utilize for this. Are there any suggestions of prewritten code I can utilize and create a custom GUI?
I'm looking to create something similar to ventrillo but have the ability to customize the GUI.
You can use asterisk with app_conference or webrtc and some MCU.
But anyway you will not get even close to ventrillo. Ventrillo's main complexity is not conference itself, but noise supression/voice detection and choose of correct codec for each channel acordinly to current bandwidth.

How to use biometric fingerprint reader to develop a fingerprint database

I have purchased a simple biometric fingerprint reader that is usually used for laptop security through a USB connection. It is just called biomentric finger print reader, not branded! It came with the software for creating security for laptop, and it works great.
However, I had a different idea for it: I am intending to create a database of users fingerprints so that I can identify which user swiped their fingers on it, ie, to use it for different users' authentication using fingerprints. I don't seem to be making any head or tail on how to go about that.
I would like to find out if there is other kind of software to install that will make this gadget print the fingerprint or a code to say a spreadsheet or database whenever I swipe a finger on it? I was thinking it would be a simple as when I use a bar code scanner to print codes of various items to a spreadsheet.
Could someone please advise how to go about this. I believe it should do that but I just dont know where to start.
thanks.
As an alternative wrapper to WinBioNET as mentioned by Robinicks there is WinBiometric.Net.
Disclaimer: I do not own this project.
It has a really nice test project for playing around with the different API functions available in the Windows Wiometric Framework. This test project was monumental in helping me understand the Windows Biometric Framework.
The WinBiometric.Net wrapper has a claim of 100% API coverage, a NuGet package and has the MIT license.
I found it to generally have a very high quality of code as well.
As for storing the fingerprints in a database you could use the WinBioCaptureSample API function to capture a sample, which can then be stored in a database.
The sample can be converted into an image as well, there is a nice example of this in the wrapper.
I know this is an old question but I figured I'd post anyway.
You can use the WBF (Windows biometric Framework) API that is free, but you must first verify if your biometric device is WBF compatible. The documentation and samples for WBF are for C++, but there is a wrapper sample in C# that you can download here: Cirrostrata biometrics Regarding how to convert the scanned data into an image, you can check this post: How to convert winbio data into image. Hope this helps to start.
You can use the WinBioNET .NET wrapper for Windows Biometric Framework (WBF). It has a demo winforms app in the solution. Just open it up, select the demo app as the "startup project" and run. If you have any devices connected it will enumerate it at startup.

Common Session for Windows Store Application

Our Team is trying to build multiple Windows 8 Store Apps for an enterprise.
How do we maintain a common session for all apps(where we store data which need to be shared)?
How do we enable direct interaction between the apps developed i.e. sharing objects or string(JSON) among the apps?
There is not built in way to do this. Realistically you probably have three options to share data between applications.
The first is to use the cloud / web services. This makes the most sense as you'd have full control about what is shared, authentication etc. Using libraries such as SignalR could let you add real time functionality between the applications as well as multiple users.
The Share contract, by using custom data formats you could enable the apps to share specialised data between each of them. This can make sense if the user has a set of data they want to send to another application to enable a quick piece of workflow as the Share target is only partially launched. This also is limited in that it's enabled by user action.
Custom protocol handlers, by giving each app it's only protocol my-custom-app:///some-action?param1=value etc then you can pass data between apps, note this launches the app in question when you launch that uri. This would be best for more longer running scenarios.
I'd suggest a combination of all three depending on the user action. Cloud services to store the data for the user and then a mixture of Share and Protocol to enable to the user to smartly move the apps seamlessly.
Here exactly the same question as yours. In short: there is no such ability. Sometimes I think that it will be easier to share data via Internet that in device.