| /**************************************************************************** |
| * apps/examples/tcp_ipc_server/protocol.c |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The |
| * ASF licenses this file to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| * |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include "lorawan/uart_lorawan_layer.h" |
| #include "protocol.h" |
| |
| /**************************************************************************** |
| * Pre-processor Definitions |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Private Types |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Private Function Prototypes |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Private Data |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Public Data |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Private Functions |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Public Functions |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Definitions |
| ****************************************************************************/ |
| |
| #define LORAWAN_DOWNLINK_TIME_MS 10000 |
| #define MAX_MESSAGE_SIZE 12 |
| #define SEND_MESSAGE 'U' |
| #define DOWNLINK_RESPONSE 'D' |
| |
| /**************************************************************************** |
| * Name: send_msg_to_lpwan |
| * Description: function that parses received message from a client and |
| * sends a message to UART LoRaWAN layer based on parsed |
| * data. |
| * Parameters: - pointer to char array containing received message from |
| * client |
| * - pointer to a protocol structure variable, which will contain |
| * the response to be sent back to client |
| * Return: nothing |
| ****************************************************************************/ |
| |
| void send_msg_to_lpwan(unsigned char *msg, protocolo_ipc *pt_protocol) |
| { |
| protocolo_ipc tprotocol; |
| unsigned char buf_recv_downlink[12]; |
| int bytes_recv = 0; |
| |
| memcpy((unsigned char *)&tprotocol, msg, sizeof(protocolo_ipc)); |
| |
| /* Parse message accordingly to received opcode */ |
| |
| switch (tprotocol.opcode) |
| { |
| case SEND_MESSAGE: |
| /* A client wants to send a LoRaWAN message. Here, the message is |
| * forwarded to LoRaWAN transceiver |
| */ |
| |
| memset(buf_recv_downlink, 0x00, sizeof(buf_recv_downlink)); |
| bytes_recv = lorawan_radioenge_send_msg(tprotocol.msg, |
| tprotocol.msg_size, |
| buf_recv_downlink, |
| sizeof(buf_recv_downlink), |
| LORAWAN_DOWNLINK_TIME_MS); |
| printf("Number of Downlink bytes received: %d\n\n", bytes_recv); |
| |
| if (bytes_recv < MAX_MESSAGE_SIZE) |
| { |
| pt_protocol->opcode = DOWNLINK_RESPONSE; |
| pt_protocol->msg_size = (unsigned char) bytes_recv; |
| snprintf((char *)pt_protocol->msg, MAX_MESSAGE_SIZE, "%s", |
| buf_recv_downlink); |
| } |
| break; |
| |
| default: |
| break; |
| } |
| } |