Embedded Systems C Bridge API: Unterschied zwischen den Versionen

Aus expecco Wiki (Version 2.x)
Zur Navigation springen Zur Suche springen
Zeile 45: Zeile 45:
await response decode request
await response decode request
*** prepare response object
*** prepare response object
call handler(request, response)
call handler(req, resp)
... || handler in target <================================
... || handler in target <================================
... || fills response
... || fills response

Version vom 1. September 2019, 11:58 Uhr

Embedded Systems C Bridge API[Bearbeiten]

We provide the CBridge code both as a DLL (shared object) and as a static link library upon request. If linked against the application, or dynamically loaded into the application, expecco can interact with - even if the target is an embedded system.

Architecture[Bearbeiten]

The CBridge opens a socket and listens for an incoming connection. Only one such connection may be active at any time. Once connected, expecco will send requests and receive responses, which are exchanged in human readable JSON format, which is very similar to the ChromeV8 debug interface message format.

The set of supported messages is defined by the target system - therefore customers have full control over which messages are allowed to be interchanged, and how they are handled. This is done before the bridge is activated by so called message registration calls.

The bridge code as provided by exept includes handlers for various common tasks, which can be registered as option. Except also provides a ready-to-run cBridge executable, which is configured to register handlers for remote code execution (i.e. for Bridged C Actions).

As an alternative to using the library, customers can also implement the wire protocol, which is described below.

CBridge Message Interchange Sequence Diagram[Bearbeiten]

In the following diagram,

  • function calls are marked as "=====>"
  • socket messages as "------>"
  • parallel execution as "||"
  • thread blocking (suspend / wait) as "***"
  • normal thread execution as "..."
expecco side              target                                cBridge library          cBridge thread
     ...
                     initialization:
                       cBrige_registerHandler(...) ======> register handler 
                                                           immediate return
                                                   <======
                       cBrige_registerHandler(...) ======> register handler 
                                                           immediate return
                                                   <======
                          ...
                       cBrige_startAsync(...)      ======> starts cBridge thread    
                                                           immediate return
                          ...                      <======
                       target runs as usual
                          ...                                                        await incoming message
                                                                                     ***
     ...
   send request -------------------------------------------------------------------> receive request (JSON)
   await response                                                                    decode request
     ***                                                                             prepare response object
                                                                                     call handler(req, resp)
                          ... || handler in target <================================
                          ... || fills response
                          ... ||                   ================================> send response
                                                                                     encode response
   send request <------------------------------------------------------------------- send response (JSON)
     ...                  ...                                                        await incoming message
                                                                                     ***

CBridge Library[Bearbeiten]

Bridge Wire Protocol[Bearbeiten]



Copyright © 2014-2024 eXept Software AG