forked from xuos/xiuos
Merge branch 'prepare_for_master' of https://gitlink.org.cn/xuos/xiuos into prepare_for_master
This commit is contained in:
@@ -129,6 +129,9 @@ uint8_t lora_recv_data[ADAPTER_LORA_TRANSFER_DATA_LENGTH];
|
||||
struct LoraDataFormat client_recv_data_format[ADAPTER_LORA_CLIENT_NUM];
|
||||
|
||||
static sem_t gateway_recv_data_sem;
|
||||
static sem_t gateway_send_cmd_sem;
|
||||
static sem_t client_recv_cmd_sem;
|
||||
static sem_t client_send_data_sem;
|
||||
struct LoraDataFormat gateway_recv_data_format;
|
||||
|
||||
static int recv_error_cnt = 0;
|
||||
@@ -315,6 +318,8 @@ static int LoraGatewaySendCmd(struct Adapter *adapter, uint8_t client_id, uint16
|
||||
return -1;
|
||||
}
|
||||
|
||||
PrivSemaphoreAbandon(&gateway_send_cmd_sem);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -410,6 +415,7 @@ static int LoraClientSendData(struct Adapter *adapter, void *send_buf, int lengt
|
||||
return -1;
|
||||
}
|
||||
|
||||
PrivSemaphoreAbandon(&client_send_data_sem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -462,7 +468,7 @@ static int LoraClientDataAnalyze(struct Adapter *adapter, void *send_buf, int le
|
||||
struct timespec abstime;
|
||||
abstime.tv_sec = DEFAULT_SEM_TIMEOUT;
|
||||
|
||||
ret = PrivSemaphoreObtainWait(&adapter->sem, &abstime);
|
||||
ret = PrivSemaphoreObtainWait(&client_recv_cmd_sem, NULL);
|
||||
if (0 == ret) {
|
||||
//only handle this client_id information from gateway
|
||||
if ((client_recv_data_format[client_id - 1].client_id == adapter->net_role_id) &&
|
||||
@@ -653,9 +659,15 @@ static int LoraReceiveDataCheck(struct Adapter *adapter, uint8_t *recv_data, uin
|
||||
static void *LoraReceiveTask(void *parameter)
|
||||
{
|
||||
int ret = 0;
|
||||
struct timespec abstime;
|
||||
abstime.tv_sec = DEFAULT_SEM_TIMEOUT;
|
||||
|
||||
struct Adapter *lora_adapter = (struct Adapter *)parameter;
|
||||
|
||||
while (1) {
|
||||
#ifdef AS_LORA_GATEWAY_ROLE
|
||||
PrivSemaphoreObtainWait(&gateway_send_cmd_sem, NULL);
|
||||
#endif
|
||||
memset(lora_recv_data, 0, ADAPTER_LORA_TRANSFER_DATA_LENGTH);
|
||||
|
||||
ret = AdapterDeviceRecv(lora_adapter, lora_recv_data, ADAPTER_LORA_TRANSFER_DATA_LENGTH);
|
||||
@@ -675,8 +687,10 @@ static void *LoraReceiveTask(void *parameter)
|
||||
if (ret < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
PrivSemaphoreAbandon(&lora_adapter->sem);
|
||||
#ifdef AS_LORA_CLIENT_ROLE
|
||||
PrivSemaphoreAbandon(&client_recv_cmd_sem);
|
||||
PrivSemaphoreObtainWait(&client_send_data_sem, &abstime);
|
||||
#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -702,7 +716,7 @@ void LoraGatewayProcess(struct Adapter *lora_adapter, struct LoraGatewayParam *g
|
||||
printf("LoraGatewaySendCmd client ID %d error\n", gateway->client_id[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
ret = PrivSemaphoreObtainWait(&gateway_recv_data_sem, &abstime);
|
||||
if (0 == ret) {
|
||||
printf("LoraGatewayProcess receive client %d data done\n", gateway->client_id[i]);
|
||||
@@ -904,9 +918,13 @@ int AdapterLoraInit(void)
|
||||
adapter->done = product_info->model_done;
|
||||
#endif
|
||||
|
||||
PrivSemaphoreCreate(&adapter->sem, 0, 0);
|
||||
|
||||
#ifdef AS_LORA_GATEWAY_ROLE
|
||||
PrivSemaphoreCreate(&gateway_recv_data_sem, 0, 0);
|
||||
PrivSemaphoreCreate(&gateway_send_cmd_sem, 0, 0);
|
||||
#else//AS_LORA_CLIENT_ROLE
|
||||
PrivSemaphoreCreate(&client_recv_cmd_sem, 0, 0);
|
||||
PrivSemaphoreCreate(&client_send_data_sem, 0, 0);
|
||||
#endif
|
||||
|
||||
PrivMutexCreate(&adapter->lock, 0);
|
||||
|
||||
@@ -944,9 +962,9 @@ int AdapterLoraTest(void)
|
||||
PrivTaskStartup(&lora_recv_data_task);
|
||||
|
||||
#ifdef ADD_NUTTX_FEATURES
|
||||
lora_gateway_attr.priority = 19;
|
||||
lora_gateway_attr.priority = 20;
|
||||
#else
|
||||
lora_gateway_attr.schedparam.sched_priority = 19;
|
||||
lora_gateway_attr.schedparam.sched_priority = 20;
|
||||
#endif
|
||||
|
||||
PrivTaskCreate(&lora_gateway_task, &lora_gateway_attr, &LoraGatewayTask, (void *)adapter);
|
||||
@@ -966,9 +984,9 @@ int AdapterLoraTest(void)
|
||||
PrivTaskStartup(&lora_recv_data_task);
|
||||
|
||||
#ifdef ADD_NUTTX_FEATURES
|
||||
lora_client_attr.priority = 19;
|
||||
lora_client_attr.priority = 20;
|
||||
#else
|
||||
lora_client_attr.schedparam.sched_priority = 19;
|
||||
lora_client_attr.schedparam.sched_priority = 20;
|
||||
#endif
|
||||
|
||||
//create lora client task
|
||||
|
||||
@@ -67,7 +67,7 @@ typedef enum
|
||||
|
||||
struct ControlDevice
|
||||
{
|
||||
char *dev_name;
|
||||
char dev_name[20];
|
||||
int status;
|
||||
|
||||
//to do
|
||||
|
||||
@@ -190,3 +190,33 @@ int SerialRead(uint8_t *read_data, int length)
|
||||
return data_size;
|
||||
#endif
|
||||
}
|
||||
|
||||
int ControlFileDataStore(uint8 *data, int data_length)
|
||||
{
|
||||
int data_file_fd = -1;
|
||||
struct stat data_file_status;
|
||||
int i = 0;
|
||||
|
||||
//Step1 : open data file from SD card or other store device
|
||||
data_file_fd = PrivOpen(FILE_NAME, O_RDONLY);
|
||||
if (data_file_fd < 0) {
|
||||
printf("Open data file %s failed\n", FILE_NAME);
|
||||
PrivClose(data_file_fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (0 != fstat(data_file_fd, &data_file_status)) {
|
||||
printf("Get data file information failed!\n");
|
||||
PrivClose(data_file_fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
lseek(data_file_fd, data_file_status.st_size, SEEK_SET);
|
||||
|
||||
//Step2 : write data to file in SD card or other store device
|
||||
FatfsPrintf(GetFileDescriptor(data_file_fd), data, data_length);
|
||||
|
||||
//Step3 : close data file from SD card or other store device
|
||||
PrivClose(data_file_fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,9 @@ extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define FILE_NAME "plc_data.csv"
|
||||
extern void FatfsPrintf(struct FileDescriptor *fdp, const void *src, size_t len);
|
||||
|
||||
/*Control Framework Socket Init*/
|
||||
void SocketInit(char *ip, char *mask, char *gw);
|
||||
|
||||
@@ -60,6 +63,9 @@ void SerialWrite(uint8_t *write_data, int length);
|
||||
/*Control Framework Serial Read*/
|
||||
int SerialRead(uint8_t *read_data, int length);
|
||||
|
||||
/*Control Framework Store data in SD Card*/
|
||||
int ControlFileDataStore(uint8 *data, int data_length);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user