diff --git a/APP_Framework/Framework/connection/adapter.h b/APP_Framework/Framework/connection/adapter.h index ea0ed6f06..aefb0df1f 100644 --- a/APP_Framework/Framework/connection/adapter.h +++ b/APP_Framework/Framework/connection/adapter.h @@ -117,6 +117,12 @@ enum IpType IPV6, }; +struct AdapterData +{ + uint32 len; + uint8 *buffer; +}; + struct AdapterProductInfo { uint32_t functions; diff --git a/APP_Framework/Framework/connection/lora/adapter_lora.c b/APP_Framework/Framework/connection/lora/adapter_lora.c index 0f1a0c6bd..397e89e26 100644 --- a/APP_Framework/Framework/connection/lora/adapter_lora.c +++ b/APP_Framework/Framework/connection/lora/adapter_lora.c @@ -29,8 +29,8 @@ extern AdapterProductInfoType E220Attach(struct Adapter *adapter); #endif #define ADAPTER_LORA_CLIENT_NUM 255 -#define ADAPTER_LORA_DATA_LENGTH 128 -#define ADAPTER_LORA_RECV_DATA_LENGTH 256 +#define ADAPTER_LORA_DATA_LENGTH 256 +#define ADAPTER_LORA_RECV_DATA_LENGTH ADAPTER_LORA_DATA_LENGTH + 16 #define ADAPTER_LORA_DATA_HEAD 0x3C #define ADAPTER_LORA_NET_PANID 0x0102 @@ -167,13 +167,7 @@ static int LoraReceiveDataCheck(uint8 *data, uint16 length, struct LoraDataForma uint32 recv_data_length = 0; for ( i = 0; i < length; i ++) { if (ADAPTER_LORA_DATA_HEAD == data[i]) { -#ifdef ADD_NUTTX_FETURES - /*Big-Endian*/ recv_data_length = (data[i + 4] & 0xFF) | ((data[i + 5] & 0xFF) << 8) | ((data[i + 6] & 0xFF) << 16) | ((data[i + 7] & 0xFF) << 24); -#else - /*Little-Endian*/ - recv_data_length = ((data[i + 4] & 0xFF) << 24) | ((data[i + 5] & 0xFF) << 16) | ((data[i + 6] & 0xFF) << 8) | (data[i + 7] & 0xFF); -#endif if (sizeof(struct LoraDataFormat) == recv_data_length) { memcpy(recv_data, (uint8 *)(data + i), sizeof(struct LoraDataFormat)); return 0; @@ -469,6 +463,7 @@ static int LoraClientDataAnalyze(struct Adapter *adapter, void *send_buf, int le static int LoraClientJoinNet(struct Adapter *adapter, unsigned short panid) { struct LoraDataFormat client_join_data; + struct AdapterData priv_lora_net; memset(&client_join_data, 0, sizeof(struct LoraDataFormat)); @@ -484,7 +479,10 @@ static int LoraClientJoinNet(struct Adapter *adapter, unsigned short panid) client_join_data.flame_head, client_join_data.length, client_join_data.panid, client_join_data.data_type, client_join_data.client_id, client_join_data.gateway_id, client_join_data.crc16); - if (AdapterDeviceJoin(adapter, (uint8 *)&client_join_data) < 0) { + priv_lora_net.len = sizeof(struct LoraDataFormat); + priv_lora_net.buffer = (uint8 *)&client_join_data; + + if (AdapterDeviceJoin(adapter, (uint8 *)&priv_lora_net) < 0) { return -1; } @@ -498,18 +496,22 @@ static int LoraClientJoinNet(struct Adapter *adapter, unsigned short panid) */ static int LoraClientQuitNet(struct Adapter *adapter, unsigned short panid) { - struct LoraDataFormat client_join_data; + struct LoraDataFormat client_quit_data; + struct AdapterData priv_lora_net; - memset(&client_join_data, 0, sizeof(struct LoraDataFormat)); + memset(&client_quit_data, 0, sizeof(struct LoraDataFormat)); - client_join_data.flame_head = ADAPTER_LORA_DATA_HEAD; - client_join_data.length = sizeof(struct LoraDataFormat); - client_join_data.panid = panid; - client_join_data.data_type = ADAPTER_LORA_DATA_TYPE_QUIT; - client_join_data.client_id = adapter->net_role_id; - client_join_data.crc16 = LoraCrc16((uint8 *)&client_join_data, sizeof(struct LoraDataFormat) - 2); + client_quit_data.flame_head = ADAPTER_LORA_DATA_HEAD; + client_quit_data.length = sizeof(struct LoraDataFormat); + client_quit_data.panid = panid; + client_quit_data.data_type = ADAPTER_LORA_DATA_TYPE_QUIT; + client_quit_data.client_id = adapter->net_role_id; + client_quit_data.crc16 = LoraCrc16((uint8 *)&client_quit_data, sizeof(struct LoraDataFormat) - 2); - if (AdapterDeviceDisconnect(adapter, (uint8 *)&client_join_data) < 0) { + priv_lora_net.len = sizeof(struct LoraDataFormat); + priv_lora_net.buffer = (uint8 *)&client_quit_data; + + if (AdapterDeviceDisconnect(adapter, (uint8 *)&priv_lora_net) < 0) { return -1; } @@ -623,7 +625,6 @@ static void *LoraGatewayTask(void *parameter) static void *LoraClientDataTask(void *parameter) { int i, ret = 0; - int join_times = 10; struct Adapter *lora_adapter = (struct Adapter *)parameter; struct LoraClientParam *client = (struct LoraClientParam *)lora_adapter->adapter_param; diff --git a/APP_Framework/Framework/connection/lora/e220/e220.c b/APP_Framework/Framework/connection/lora/e220/e220.c index 2fec48457..3a028817e 100644 --- a/APP_Framework/Framework/connection/lora/e220/e220.c +++ b/APP_Framework/Framework/connection/lora/e220/e220.c @@ -344,10 +344,9 @@ static int E220Ioctl(struct Adapter *adapter, int cmd, void *args) static int E220Join(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; - uint16 len = 144; - - ret = PrivWrite(adapter->fd, (void *)priv_net_group, len); + ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0) { printf("E220 Join net group failed: %d!\n", ret); } @@ -383,7 +382,22 @@ static int E220Send(struct Adapter *adapter, const void *buf, size_t len) */ static int E220Recv(struct Adapter *adapter, void *buf, size_t len) { - return PrivRead(adapter->fd, buf, len); + int recv_len, recv_len_continue; + + uint8 *recv_buf = PrivMalloc(len); + + recv_len = PrivRead(adapter->fd, recv_buf, len); + while (recv_len < len) { + recv_len_continue = PrivRead(adapter->fd, recv_buf + recv_len, len - recv_len); + + recv_len += recv_len_continue; + } + + memcpy(buf, recv_buf, recv_len); + + PrivFree(recv_buf); + + return recv_len; } /** @@ -396,9 +410,9 @@ static int E220Quit(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; - uint16 len = 144; + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; - ret = PrivWrite(adapter->fd, (void *)priv_net_group, len); + ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0){ printf("E220 quit net group failed %d!\n", ret); } diff --git a/APP_Framework/Framework/connection/lora/sx1278/sx1278.c b/APP_Framework/Framework/connection/lora/sx1278/sx1278.c index 914db8998..dda8b54e0 100644 --- a/APP_Framework/Framework/connection/lora/sx1278/sx1278.c +++ b/APP_Framework/Framework/connection/lora/sx1278/sx1278.c @@ -108,7 +108,9 @@ static int Sx1278Ioctl(struct Adapter *adapter, int cmd, void *args) static int Sx1278Join(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; - ret = Sx127x_Nuttx_Write(adapter->fd, (void *)priv_net_group, 144); + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; + + ret = Sx127x_Nuttx_Write(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0){ printf("Sx1278 Join net group failed: %d!\n", ret); } @@ -119,7 +121,9 @@ static int Sx1278Join(struct Adapter *adapter, unsigned char *priv_net_group) static int Sx1278Join(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; - ret = PrivWrite(adapter->fd, (void *)priv_net_group, 144); + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; + + ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0){ printf("Sx1278 Join net group failed: %d!\n", ret); } @@ -196,7 +200,9 @@ static int Sx1278Recv(struct Adapter *adapter, void *buf, size_t len) static int Sx1278Quit(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; - ret = Sx127x_Nuttx_Write(adapter->fd, (void *)priv_net_group, 144); + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; + + ret = Sx127x_Nuttx_Write(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0){ printf("Sx1278 quit net group failed %d!\n", ret); } @@ -207,7 +213,9 @@ static int Sx1278Quit(struct Adapter *adapter, unsigned char *priv_net_group) static int Sx1278Quit(struct Adapter *adapter, unsigned char *priv_net_group) { int ret; - ret = PrivWrite(adapter->fd, (void *)priv_net_group, 144); + struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group; + + ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len); if(ret < 0){ printf("Sx1278 quit net group failed %d!\n", ret); } diff --git a/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c b/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c index 851f5fa4e..a022c32b3 100644 --- a/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c +++ b/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c @@ -629,7 +629,7 @@ void WriteCH438Block(uint8 maddr, uint8 mlen, uint8 *mbuf) ** date: **------------------------------------------------------------------------------------------------------- ********************************************************************************************************/ -void Ch438UartSend( uint8 ext_uart_no,uint8 *data, uint8 Num ) +void Ch438UartSend(uint8 ext_uart_no, uint8 *data, uint16 Num) { uint8 REG_LSR_ADDR,REG_THR_ADDR; @@ -958,10 +958,35 @@ static uint32 ImxrtCh438WriteData(void *dev, struct BusBlockWriteParam *write_pa NULL_PARAM_CHECK(dev); NULL_PARAM_CHECK(write_param); + int write_len, write_len_continue; + int i, write_index; + uint8 *write_buffer; + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)dev; struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; - Ch438UartSend(dev_param->ext_uart_no, (uint8 *)write_param->buffer, write_param->size); + write_len = write_param->size; + write_len_continue = write_param->size; + write_buffer = (uint8 *)write_param->buffer; + + if (write_len > 256) { + if (0 == write_len % 256) { + write_index = write_len / 256; + for (i = 0; i < write_index; i ++) { + Ch438UartSend(dev_param->ext_uart_no, write_buffer + i * 256, 256); + } + } else { + write_index = 0; + while (write_len_continue > 256) { + Ch438UartSend(dev_param->ext_uart_no, write_buffer + write_index * 256, 256); + write_index++; + write_len_continue = write_len - write_index * 256; + } + Ch438UartSend(dev_param->ext_uart_no, write_buffer + write_index * 256, write_len_continue); + } + } else { + Ch438UartSend(dev_param->ext_uart_no, write_buffer, write_len); + } return EOK; } @@ -1028,6 +1053,12 @@ static uint32 ImxrtCh438ReadData(void *dev, struct BusBlockReadParam *read_param read_param->read_length = rcv_num; interrupt_done = 1; + + // int i; + // uint8 *buffer = (uint8 *)read_param->buffer; + // for (i = 0; i < rcv_num; i ++) { + // KPrintf("Ch438UartRcv i %u data 0x%x\n", i, buffer[i]); + // } } } }