The system uses a SAMD51 ARM processor with an Atmel Start based project. Start says 8.23 but the headers say FreeRTOS V9.0.0rc2. The project uses UARTs (one debug port and one data port) on Sierra Wireless HL series modems. The modems will typically be CAT M1. It was intended to use AT commands to post HTTP JSON packet; however, the released M1 modems do not have an IP stack.
The main app will poll the modem and determine if IP stack is available. If so, it will use the built-in stack. If not, it will use PPP shadow functions.
If the stack supports Berkeley Sockets or similar, that is ideal. At the very least, we need the connection functions encapsulated. We would also like an HTTP task, as described below.
C function to initiate PPP connection
Contractor to specify arguments required. A minimum will be the Queue Handle to which responses are posted, qhResponseQueueHandle.
Function returns a queue handle to which main program posts requests. A null handle signifies a failure.
If the function is called and PPP is already initialized, the connection is closed and reopened.
C function to close PPP connection.
Closing the connection does not end the task or queues. When connection is closed, queued requests are responded to with “ERROR CLOSED PPP”.
C function to connect to a server (“ip address”, uint port, bool TCP_nUDP, char *key);
Returns an error code. Connection state is known to FreeRTOS Task_HTTP_POST. The stack should support a minimum of two outgoing connections. Key is the assess code required for https.
C function to test connection to a server (“ip address”, uint port, bool TCP_nUDP, bool Reconnect);
Function to test the connection state.
This task will block on an incoming command queue. The queue item will have two null terminated strings. The first string is the HTTP header. The task shall append the literal text in the macro, EOF_STRING, to the header and send it. The task will then send the body string.
If the connection state is not SERVER OK the task posts an error state. Error states are, at least, NOT INITIALIZED, NO PPP LINK, NO SERVER SOCKET
On error, the task will post the error code to qhResponseQueueHandle. On success, it will post the response. If the response length exceeds the queue length, it will be truncated. (option is to allocate memory for response and post only the pointer and length to queue, but I would rather avoid memory leaks).
5 freelancers are bidding on average $860 for this job
Have experince with FreeRTOS in embedded applications with TCP/IP stack. Relevant Skills and Experience ARM Cortex M4, FreeRTOS Stay tuned, I'm still working on this proposal.