Modify existing Windows C-sharp app to work with USB device

Job ID: 37329449

Budget: $30 – $250 USD

SEE the Video explanation of the project on LOOM https://www.loom.com/share/f89a96d1b3e74f7f9f33a79b3fc9e6ca
(REVIEW THIS VIDEO AND PROVIDE A FLAT PRICE + TIME WITH A DEADLINE TO DO THE JOB)

Written explanation
-----------------------------------
We have an existing Windows C-sharp app called "POS" The purpose of this app, is to allow a retailer to read product inventory RFID (radio frequency identification) labels to mark them as sold in our cloud software.

When the app starts, it reads its setup.ini so it has its settings. And it displayed two buttons (sale and return)
When either button is pressed the app connects to a network service IP and it does a pull request to get the item numbers, so they can be marked as sold.

for example, it can run, and read 10 items, which it displays on the screen, and when the submit button is pressed, it commits 10 items of data back to the local network service IP address.

Here is where you come in, and what I want you to do, is to modify this app, and extend the functionality of this app, so it can also work with a USB inventory reader.

I want you to update this app so that it works with a USB-connected device to the PC Windows OS via the provided SDK(c-sharp).

I want you to update the setup.ini with a new setting (see setup.ini original and compare it to settings - new.json)
"mode": "network_reader", or "mode": "USB",

If "network_reader" is set, the app should work as it does now.
If "USB" is set, then the app should use your new logic to connect to the USB device.

If "USB" is set

* upon start up you need to connect to "settings_url" defined in the setup.ini to pull some settings.
(example settings_url": "http://app.hidden.net/masoud1357/001/api/v1/epc_settings?api_key=MPZ98723852385673826750000"
you need to cache the received info (save to epc_settings.ini), so in case in future startups, if the cloud does not reply back in a maximum of 3 seconds it reads the settings from the cache setting file. These settings are needed so when items are read via the USB device friendly info can be displayed. SEE "settings_url Cloud API response.txt"

The USB device will read unique RFID numbers for each inventory as it reads them, which are 24 digits (example FF1FF0000000004000000001) you will need the settings from the cloud or epc_settings.ini to extract human-friendly numbers to display. For example, to extract a human-friendly number from FF1FF0000000004000000001 you need to first convert it to binary, next follow the settings in epc_settings.ini and extract specific bits, and convert them to decimal, to display the human-friendly number. (SEE RFID_number_to_human_friendly_number.txt)

As each inventory item is read, you will continue to get 24-digit numbers (AKA EPC numbers).
example FF1FF0000000004000000001, FF1FF0000000004000000002, FF1FF0000000004000000003
and for each one, you will extract the human-readable number and display it in the app.


Once the commit button is pressed, save the payload a JSON file in a folder /api/pending/year_month_day_hour_seconds.json
next submit the JSON to "submit_API_url" (SEE submit_api.txt), and once the submit is successful, move the JSON file to /api/success/year_month_day_hour_seconds.json (if the cloud times out after 3 seconds give up but keep the JSON in the pending folder, and retry to send it to the cloud in 5 seconds.) (if the app starts up and JSON files are in the pending folder, try to send them to the cloud. but do it in a different thread so the main app functionally does not pause or stop)

------------------------------------------------------------------------
Recommended Steps
------------------------------------------------------------------------
Step 1 - connect to my machine via anydesk, and play with the POS assistant so you can see how it works now. also, play with the demo USB app so you see how it works as well.

Step 2 - build the original app with the source code and confirm it works afterward. And submit it to me so i can see it too.

Step 3 - study USB SDK for a few minutes

Step 4 - implement the new settings inside the setup.ini so it reads the values when it starts up.

Step 5 - set setup.ini to USB make it connect to the cloud to retrieve the "settings_url" info and save the info to epc_settings.ini

Step 6 - when the app starts connect to a USB device. and when the sale is clicked, make it read the RFID numbers, and display each item read in human-friendly numbers.

Step 7 - if submit is pressed commit to "submit_API_url"

---------------------------------------------------------------------------------
Developer Requirements
--------------------------------------------------------------------------------
* must be able to talk with me verbally in English (not perfect is okay.. but we have to understand you)
* must be available to collaborate with us USA hours

USB DEVICE SDK https://drive.google.com/file/d/1ygZRRAHS0zt_S8unMXLP7miBmCoWbrrA/view?usp=sharing
Related categories: Windows Desktop C# Programming