コード例 #1
0
//--------------------------------------------------------------------------------------------------
static void ConnectionLostHandler
(
    void* contextPtr, ///< context parameter contains the session for which the connection was lost
    char* causePtr    ///< paho library doesn't currently populate this
)
{
    le_event_Report(ConnectionLostThreadEventId, &contextPtr, sizeof(void*));
}
コード例 #2
0
ファイル: avData.c プロジェクト: legatoproject/legato-af
//--------------------------------------------------------------------------------------------------
void avData_ReportSessionState
(
    le_avdata_SessionState_t sessionState
)
{
    LE_DEBUG("Reporting session state %d", sessionState);

    // Send the event to interested applications
    le_event_Report(SessionStateEvent, &sessionState, sizeof(sessionState));
}
コード例 #3
0
//--------------------------------------------------------------------------------------------------
le_cellnet_RequestObjRef_t le_cellnet_Request
(
    void
)
{
    uint32_t command = REQUEST_COMMAND;
    le_event_Report(CommandEvent, &command, sizeof(command));

    // Need to return a unique reference that will be used by Release.
    return le_ref_CreateRef(RequestRefMap, (void*)1);
}
コード例 #4
0
ファイル: le_wifiAp.c プロジェクト: mangOH/WiFi
static void PaEventApHandler
(
    le_wifiAp_Event_t event,
    void * ctxPtr
)
{

    LE_DEBUG( "PaEventApHandler event: %d", event );

    le_event_Report( NewWifiApEventId, (void*)&event, sizeof( le_wifiAp_Event_t ) );
}
コード例 #5
0
ファイル: mqttClient.c プロジェクト: CoRfr/mangOH-MqttClient
static void mqttClient_SendConnStateEvent(bool isConnected, int32_t connectErrorCode, int32_t subErrorCode)
{
  mqttClient_connStateData_t eventData;
  mqttClient_t* clientData = mqttMain_getClient();

  eventData.isConnected = isConnected;
  eventData.connectErrorCode = connectErrorCode;
  eventData.subErrorCode = subErrorCode;

  LE_DEBUG("MQTT connected(%d), error(%d), sub-error(%d)", eventData.isConnected, eventData.connectErrorCode, eventData.subErrorCode);
  le_event_Report(clientData->connStateEvent, &eventData, sizeof(eventData));
}
コード例 #6
0
//--------------------------------------------------------------------------------------------------
void pa_audioSimu_ReceiveDtmf
(
    char dtmf
)
{
    le_audio_StreamEvent_t streamEvent;

    // Only one interface support the DTMF detection for now
    streamEvent.streamEvent = LE_AUDIO_BITMASK_DTMF_DETECTION;
    streamEvent.event.dtmf = dtmf;

    le_event_Report(DtmfEvent, &streamEvent, sizeof(le_audio_StreamEvent_t));
}
コード例 #7
0
ファイル: multiServerMain.c プロジェクト: H-H-bin/legato-af
void TriggerTestA
(
    void
)
{
    // todo: This could instead be the value passed into the trigger function, but need
    //       to change the .api definition for that to work.
    static int32_t triggerCount=0;
    triggerCount++;

    LE_PRINT_VALUE("%d", triggerCount);
    le_event_Report(TriggerEvent, &triggerCount, sizeof(triggerCount));
}
コード例 #8
0
// -------------------------------------------------------------------------------------------------
static void MrcNetRegHandler
(
    le_mrc_NetRegState_t state,
    void*  contextPtr
)
{
    le_cellnet_State_t cellNetState = TranslateToCellNetState(state);

    LE_PRINT_VALUE("Cellular Network Registration state.%d", cellNetState);

    // Send the state event to applications
    le_event_Report(CellNetStateEvent, &cellNetState, sizeof(cellNetState));
}
コード例 #9
0
//--------------------------------------------------------------------------------------------------
static void ReportCellNetStateEvent
(
    le_cellnet_State_t state
)
{
    LE_DEBUG("Report cellular network state %d (%s)", state, cellNetStateStr[state]);

    // Update current network cell state
    CurrentState = state;

    // Send the event to interested applications
    le_event_Report(CellNetStateEvent, &state, sizeof(state));
}
コード例 #10
0
ファイル: mqttClient.c プロジェクト: CoRfr/mangOH-MqttClient
static void mqttClient_SendIncomingMessageEvent(const char* topicName, const char* keyName, const char* value, const char* timestamp)
{
  mqttClient_inMsg_t eventData;
  mqttClient_t* clientData = mqttMain_getClient();

  strcpy(eventData.topicName, topicName);
  strcpy(eventData.keyName, keyName);
  strcpy(eventData.value, value);
  strcpy(eventData.timestamp, timestamp);

  LE_DEBUG("Send MQTT incoming message('%s', ['%s':'%s'@'%s'])", eventData.topicName, eventData.keyName, eventData.value, eventData.timestamp);
  le_event_Report(clientData->inMsgEvent, &eventData, sizeof(eventData));
}
コード例 #11
0
//--------------------------------------------------------------------------------------------------
static void SendCellNetStateEvent
(
    void
)
{
    le_mrc_NetRegState_t  state;
    le_mrc_GetNetRegState(&state);
    le_cellnet_State_t cellNetState = TranslateToCellNetState(state);
    LE_PRINT_VALUE("%i", cellNetState);

    // Send the event to interested applications
    le_event_Report(CellNetStateEvent, &cellNetState, sizeof(cellNetState));
}
コード例 #12
0
ファイル: le_antenna.c プロジェクト: H-H-bin/legato-af
//--------------------------------------------------------------------------------------------------
static void AntennaStatus ( pa_antenna_StatusInd_t* msgRef )
{
    // Sanity check
    if (( msgRef->antennaType >= LE_ANTENNA_MAX ) ||
        ( AntennaCtx[msgRef->antennaType].antennaRef == NULL ) ||
        ( AntennaCtx[msgRef->antennaType].statusEventId == NULL ))
    {
        LE_ERROR("Invalid status indication");
        return;
    }

    LE_DEBUG("Report AntennaStatus antenna %d", msgRef->antennaType);

    // Report the status if event was created
    le_event_Report( AntennaCtx[msgRef->antennaType].statusEventId,
                    (void*)msgRef, sizeof(pa_antenna_StatusInd_t) );
}
コード例 #13
0
static void SigUser1Handler(int sigNum)
{
    LE_ASSERT(sigNum == SIGUSR1);
    LE_INFO("%s received through fd handler.", strsignal(sigNum));

    switch (checkCount)
    {
        case 1:
        {
            // Report event to delete sigs for our thread.
            le_event_Report(delEvent, NULL, 0);

            break;
        }

        default: LE_FATAL("Should not be here.");
    }
}
コード例 #14
0
//--------------------------------------------------------------------------------------------------
void le_cellnet_Release
(
    le_cellnet_RequestObjRef_t requestRef ///< Reference to a previously requested cellular network
)
{
    // Look up the reference.  If it is NULL, then the reference is not valid.
    // Otherwise, delete the reference and send the release command to the CellNet thread.
    void* cellNetPtr = le_ref_Lookup(RequestRefMap, requestRef);
    if ( cellNetPtr == NULL )
    {
        LE_ERROR("Invalid cellular network request reference %p", requestRef);
    }
    else
    {
        LE_PRINT_VALUE("%p", requestRef);
        le_ref_DeleteRef(RequestRefMap, requestRef);

        uint32_t command = RELEASE_COMMAND;
        le_event_Report(CommandEvent, &command, sizeof(command));
    }
}
コード例 #15
0
//--------------------------------------------------------------------------------------------------
static int MessageArrivedHandler
(
    void* contextPtr,
    char* topicNamePtr,
    int topicLen,
    MQTTClient_message* messagePtr
)
{
    mqtt_Session* s = le_ref_Lookup(SessionRefMap, contextPtr);
    if (s == NULL)
    {
        LE_WARN("Session doesn't exist");
        return true;
    }

    mqtt_Message* storedMsgPtr = le_mem_ForceAlloc(MessagePoolRef);
    LE_ASSERT(storedMsgPtr);
    memset(storedMsgPtr, 0, sizeof(*storedMsgPtr));

    LE_DEBUG("MessageArrivedHandler called for topic=%s. Storing session=0x%p", topicNamePtr, contextPtr);
    storedMsgPtr->sessionRef = contextPtr;

    // When topicLen is 0 it means that the topic contains embedded nulls and can't be treated as a
    // normal C string
    storedMsgPtr->topicLength = (topicLen == 0) ? (strlen(topicNamePtr) + 1) : topicLen;
    storedMsgPtr->topicPtr = le_mem_ForceAlloc(TopicPoolRef);
    LE_ASSERT(storedMsgPtr->topicPtr);
    memset(storedMsgPtr->topicPtr, 0, sizeof(MQTT_MAX_TOPIC_LENGTH));
    memcpy(storedMsgPtr->topicPtr, topicNamePtr, storedMsgPtr->topicLength);

    storedMsgPtr->payloadLength = messagePtr->payloadlen;
    storedMsgPtr->payloadPtr = le_mem_ForceAlloc(PayloadPoolRef);
    LE_ASSERT(storedMsgPtr->payloadPtr);
    memset(storedMsgPtr->payloadPtr, 0, sizeof(MQTT_MAX_PAYLOAD_LENGTH));
    memcpy(storedMsgPtr->payloadPtr, messagePtr->payload, storedMsgPtr->payloadLength);

    le_event_Report(ReceiveThreadEventId, &storedMsgPtr, sizeof(mqtt_Message*));

    return true;
}
コード例 #16
0
ファイル: le_mcc.c プロジェクト: mbaglin/legato-af
//--------------------------------------------------------------------------------------------------
static void NewCallEventHandler
(
    pa_mcc_CallEventData_t*  dataPtr
)
{
    le_mcc_Call_t* callPtr = NULL;

    // Acquire wakeup source on first indication of call
    if (LE_MCC_EVENT_SETUP == dataPtr->event ||
        LE_MCC_EVENT_ORIGINATING == dataPtr->event ||
        LE_MCC_EVENT_INCOMING == dataPtr->event)
    {
        // Note: 3GPP calls have both SETUP and INCOMING states, so
        // this will warn on INCOMING state as a second "stay awake"
        le_pm_StayAwake(WakeupSource);
    }

    // Check if we have already an ongoing callPtr for this call
    callPtr = GetCallObject("", dataPtr->callId, true);

    if (callPtr == NULL)
    {
        // Call not in progress
        // check if a callPtr exists with the same number
        callPtr = GetCallObject(dataPtr->phoneNumber, -1, false);

        if (callPtr == NULL)
        {
            callPtr = CreateCallObject (dataPtr->phoneNumber,
                                        dataPtr->callId,
                                        dataPtr->event,
                                        dataPtr->terminationEvent,
                                        dataPtr->terminationCode);
        }

        callPtr->inProgress = true;
    }
    else
    {
        callPtr->event = dataPtr->event;
        callPtr->termination = dataPtr->terminationEvent;
        callPtr->terminationCode = dataPtr->terminationCode;

        // Update reference count
        UpdateReferenceCount(callPtr);
    }

    // Handle call state transition
    switch (dataPtr->event)
    {
         case LE_MCC_EVENT_TERMINATED:
            // Release wakeup source once call termination is processed
            le_pm_Relax(WakeupSource);
            callPtr->inProgress = false;
        break;
        default:
        break;
    }

    // Call the client's handler
    le_event_Report(CallStateEventId,
                    &callPtr->callRef,
                    sizeof(callPtr->callRef));
}
コード例 #17
0
ファイル: CombainHttp.cpp プロジェクト: mangOH/mangOH
void *CombainHttpThreadFunc(void *context)
{
    char combainUrl[128];
    char oldCombainApiKey[MAX_LEN_API_KEY];
    do {
        auto t = RequestJson->dequeue();

        // Have the API key changeable from DHUB
        if (strncmp(oldCombainApiKey, combainApiKey, sizeof(combainUrl) - (1 + strlen(combainUrl))) != 0)
        {
            strncpy(oldCombainApiKey, combainApiKey, sizeof(combainUrl) - (1 + strlen(combainUrl)));
            combainUrl[0] = '\0';
            strcpy(combainUrl, "https://cps.combain.com?key=");
            strncat(combainUrl, oldCombainApiKey, sizeof(combainUrl) - (1 + strlen(combainUrl)));
        }

        ma_combainLocation_LocReqHandleRef_t handle = std::get<0>(t);
        std::string &requestBody = std::get<1>(t);

        if (oldCombainApiKey[0] == '\0')
        {
            ResponseJson->enqueue(std::make_tuple(handle, "Combain API key not set"));
            le_event_Report(ResponseAvailableEvent, NULL, 0);
            continue;
        }

        // Bug existed as we kept tacking onto the existing buffer
        HttpReceiveBuffer.used = 0;
        HttpReceiveBuffer.data[0] = 0;

        CURL* curl = curl_easy_init();
        LE_ASSERT(curl);

        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_URL, combainUrl) == CURLE_OK);

        struct curl_slist *httpHeaders = NULL;
        httpHeaders = curl_slist_append(httpHeaders, "Content-Type:application/json");
        LE_ASSERT(httpHeaders != NULL);
        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_HTTPHEADER, httpHeaders) == CURLE_OK);

        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, requestBody.c_str()) == CURLE_OK);
        LE_INFO("APIKEY: %s", combainUrl);
        LE_INFO("SENDING %d char: %s", requestBody.length(), requestBody.c_str());

        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemCallback) == CURLE_OK);
        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&HttpReceiveBuffer) == CURLE_OK);

        // Set the timeout for connection phase
        LE_ASSERT(curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, CURL_CONNECT_TIMEOUT_SECONDS) == CURLE_OK);

        const CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
        {
            LE_ERROR("libcurl returned error (%d): %s", res, curl_easy_strerror(res));
            // TODO: better way to encode CURL errors?
            ResponseJson->enqueue(std::make_tuple(handle, ""));
            le_event_Report(ResponseAvailableEvent, NULL, 0);
        }

        else
        {
            std::string json((char*)HttpReceiveBuffer.data, HttpReceiveBuffer.used);
            LE_INFO("RECEIVED %d char: %s", HttpReceiveBuffer.used, (char*) HttpReceiveBuffer.data);
            ResponseJson->enqueue(std::make_tuple(handle, json));
            le_event_Report(ResponseAvailableEvent, NULL, 0);
        }

        curl_easy_cleanup(curl);

        curl_slist_free_all(httpHeaders);
    } while (true);
}