1、support adapter_lora gateway and client state-machine-model;2、fix aiit-arm32-board usb compile error.

This commit is contained in:
Liu_Weichao
2021-11-17 17:37:04 +08:00
parent c631063b7a
commit 7a172fd136
17 changed files with 721 additions and 575 deletions
@@ -262,9 +262,6 @@ static uint32 SpiLoraWrite(void *dev, struct BusBlockWriteParam *write_param)
NULL_PARAM_CHECK(dev);
NULL_PARAM_CHECK(write_param);
uint8 i;
char Msg[SPI_LORA_BUFFER_SIZE] = {0};
if (write_param->size > 256) {
KPrintf("SpiLoraWrite ERROR:The message is too long!\n");
return ERROR;
@@ -289,15 +286,32 @@ static uint32 SpiLoraRead(void *dev, struct BusBlockReadParam *read_param)
{
NULL_PARAM_CHECK(dev);
NULL_PARAM_CHECK(read_param);
int read_times = 100;
//Radio->StartRx();
SX1276StartRx();
KPrintf("SpiLoraRead Ready!\n");
while (read_times) {
if (SX1276Process() != RF_RX_DONE) {
read_times --;
MdelayKTask(500);
} else {
break;
}
}
if (read_times > 0) {
SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
} else {
read_param->read_length = 0;
}
//while(Radio->Process() != RF_RX_DONE);
//Radio->GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
while(SX1276Process() != RF_RX_DONE);
SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
// while(SX1276Process() != RF_RX_DONE);
// SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
return read_param->read_length;
}
@@ -479,7 +493,7 @@ int LoraSx12xxSpiDeviceInit(void)
return EOK;
}
#define LORA_TEST
//#define LORA_TEST
#ifdef LORA_TEST
/*Just for lora test*/
static struct Bus *bus;
File diff suppressed because it is too large Load Diff
@@ -183,6 +183,7 @@ tSX1276LR* SX1276LR;
* Local RF buffer for communication support
*/
static uint8_t RFBuffer[RF_BUFFER_SIZE];
static uint8_t TFBuffer[RF_BUFFER_SIZE];
/*!
* RF state machine variable
@@ -401,7 +402,7 @@ void SX1276LoRaSetTxPacket( const void *buffer, uint16_t size )
{
TxPacketSize = 255;
}
memcpy( ( void * )RFBuffer, buffer, ( size_t )TxPacketSize );
memcpy( ( void * )TFBuffer, buffer, ( size_t )TxPacketSize );
RFLRState = RFLR_STATE_TX_INIT;
}
@@ -678,7 +679,7 @@ uint32_t SX1276LoRaProcess( void )
SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoTxBaseAddr;
SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr );
// Write payload buffer to LORA modem
SX1276WriteFifo( RFBuffer, SX1276LR->RegPayloadLength );
SX1276WriteFifo( TFBuffer, SX1276LR->RegPayloadLength );
// TxDone RxTimeout FhssChangeChannel ValidHeader
SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_01 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_01;
// PllLock Mode Ready
@@ -240,8 +240,10 @@
#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
#if defined ( __GNUC__ ) /* GNU Compiler */
#if defined ( __GNUC__ ) /* GNU Compiler */
#ifndef __packed
#define __packed __attribute__ ((__packed__))
#endif
#endif
/**
@@ -279,15 +279,32 @@ static uint32 SpiLoraRead(void *dev, struct BusBlockReadParam *read_param)
{
NULL_PARAM_CHECK(dev);
NULL_PARAM_CHECK(read_param);
int read_times = 1000;
//Radio->StartRx();
SX1276StartRx();
KPrintf("SpiLoraRead Ready!\n");
while (read_times) {
if (SX1276Process() != RF_RX_DONE) {
read_times --;
MdelayKTask(500);
} else {
break;
}
}
if (read_times > 0) {
SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
} else {
read_param->read_length = 0;
}
//while(Radio->Process() != RF_RX_DONE);
//Radio->GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
while(SX1276Process() != RF_RX_DONE);
SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
// while(SX1276Process() != RF_RX_DONE);
// SX1276GetRxPacket(read_param->buffer, (uint16 *)&read_param->read_length);
return read_param->read_length;
}
@@ -461,7 +478,7 @@ int LoraSx12xxSpiDeviceInit(void)
return EOK;
}
#define LORA_TEST
//#define LORA_TEST
#ifdef LORA_TEST
/*Just for lora test*/
static struct Bus *bus;
@@ -214,13 +214,14 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDataStan
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return EOK;
}
static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiDataStandard *spi_datacfg)
{
SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data);
uint32 spi_read_length = 0;;
uint8 device_id = dev_param->spi_slave_param->spi_slave_id;
uint8 device_master_id = dev_param->spi_dma_param->spi_master_id;
uint8 cs_gpio_pin = dev_param->spi_slave_param->spi_cs_gpio_pin;
@@ -282,10 +283,11 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiDataStand
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH);
}
spi_read_length += spi_datacfg->length;
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return spi_read_length;
}
/*manage the spi device operations*/
@@ -183,6 +183,7 @@ tSX1276LR* SX1276LR;
* Local RF buffer for communication support
*/
static uint8_t RFBuffer[RF_BUFFER_SIZE];
static uint8_t TFBuffer[RF_BUFFER_SIZE];
/*!
* RF state machine variable
@@ -401,7 +402,7 @@ void SX1276LoRaSetTxPacket( const void *buffer, uint16_t size )
{
TxPacketSize = 255;
}
memcpy( ( void * )RFBuffer, buffer, ( size_t )TxPacketSize );
memcpy( ( void * )TFBuffer, buffer, ( size_t )TxPacketSize );
RFLRState = RFLR_STATE_TX_INIT;
}
@@ -678,7 +679,7 @@ uint32_t SX1276LoRaProcess( void )
SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoTxBaseAddr;
SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr );
// Write payload buffer to LORA modem
SX1276WriteFifo( RFBuffer, SX1276LR->RegPayloadLength );
SX1276WriteFifo( TFBuffer, SX1276LR->RegPayloadLength );
// TxDone RxTimeout FhssChangeChannel ValidHeader
SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_01 | RFLR_DIOMAPPING1_DIO1_00 | RFLR_DIOMAPPING1_DIO2_00 | RFLR_DIOMAPPING1_DIO3_01;
// PllLock Mode Ready
@@ -215,13 +215,14 @@ static uint32 SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDataStan
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return EOK;
}
static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiDataStandard *spi_datacfg)
{
SpiDeviceParam *dev_param = (SpiDeviceParam *)(spi_dev->haldev.private_data);
uint32 spi_read_length = 0;
uint8 device_id = dev_param->spi_slave_param->spi_slave_id;
uint8 device_master_id = dev_param->spi_dma_param->spi_master_id;
uint8 cs_gpio_pin = dev_param->spi_slave_param->spi_cs_gpio_pin;
@@ -281,10 +282,11 @@ static uint32 SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiDataStand
gpiohs_set_pin(cs_gpio_pin, GPIO_PV_HIGH);
}
spi_read_length += spi_datacfg->length;
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return spi_read_length;
}
/*manage the spi device operations*/
@@ -1097,7 +1097,7 @@ static uint32 Stm32SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDat
}
if (state != 0) {
KPrintf("spi transfer error : %d\n", state);
KPrintf("spi write error : %d\n", state);
spi_datacfg->length = 0;
}
}
@@ -1109,7 +1109,7 @@ static uint32 Stm32SpiWriteData(struct SpiHardwareDevice *spi_dev, struct SpiDat
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return EOK;
}
/**
@@ -1125,7 +1125,7 @@ static uint32 Stm32SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiData
{
int state;
x_size_t message_length, already_send_length;
uint16 read_length;
uint16 read_length, spi_read_length = 0;
const uint8 *ReadBuf;
NULL_PARAM_CHECK(spi_dev);
@@ -1158,7 +1158,7 @@ static uint32 Stm32SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiData
/* start once data exchange in DMA mode */
if (spi_datacfg->rx_buff) {
memset((uint8_t *)ReadBuf, 0xff, read_length);
//memset((uint8_t *)ReadBuf, 0xff, read_length);
if (StmSpi->spi_dma_flag & SPI_USING_RX_DMA_FLAG) {
state = SpiReceiveDma(*spi_init, spi_instance, StmSpi->dma.dma_rx.init, StmSpi->dma.dma_rx.instance, StmSpi->dma.dma_tx.init, StmSpi->dma.dma_tx.instance, (uint8_t *)ReadBuf, read_length);
} else {
@@ -1167,7 +1167,7 @@ static uint32 Stm32SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiData
}
if (state != 0) {
KPrintf("spi transfer error : %d\n", state);
KPrintf("spi read error : %d\n", state);
spi_datacfg->length = 0;
}
}
@@ -1176,10 +1176,11 @@ static uint32 Stm32SpiReadData(struct SpiHardwareDevice *spi_dev, struct SpiData
GPIO_WriteBit(cs->GPIOx, cs->GPIO_Pin, Bit_SET);
}
spi_read_length += spi_datacfg->length;
spi_datacfg = spi_datacfg->next;
}
return spi_datacfg->length;
return spi_read_length;
}
/**
+1 -1
View File
@@ -58,7 +58,7 @@ struct SpiDataStandard
const uint8 *tx_buff;
uint32 tx_len;
const uint8 *rx_buff;
uint8 *rx_buff;
uint32 rx_len;
uint32 length;
+62 -21
View File
@@ -52,17 +52,30 @@ static uint32 SpiDeviceWrite(void *dev, struct BusBlockWriteParam *write_param)
NULL_PARAM_CHECK(dev);
NULL_PARAM_CHECK(write_param);
int ret;
struct SpiHardwareDevice *spi_dev = (struct SpiHardwareDevice *)dev;
struct SpiDataStandard spi_msg;
struct SpiDataStandard *spi_msg;
spi_msg.tx_buff = (uint8 *)write_param->buffer;
spi_msg.rx_buff = NONE;
spi_msg.length = write_param->size;
spi_msg.spi_chip_select = 0;
spi_msg.spi_cs_release = 0;
spi_msg.next = NONE;
spi_msg = (struct SpiDataStandard *)x_malloc(sizeof(struct SpiDataStandard));
if (NONE == spi_msg) {
KPrintf("SpiDeviceWrite x_malloc msg error\n");
x_free(spi_msg);
return ERROR;
}
return spi_dev->spi_dev_done->dev_write(spi_dev, &spi_msg);
//memset(spi_msg, 0, sizeof(struct SpiDataStandard));
spi_msg->tx_buff = (uint8 *)write_param->buffer;
spi_msg->rx_buff = NONE;
spi_msg->length = write_param->size;
spi_msg->spi_chip_select = 0;
spi_msg->spi_cs_release = 0;
spi_msg->next = NONE;
ret = spi_dev->spi_dev_done->dev_write(spi_dev, spi_msg);
x_free(spi_msg);
return ret;
}
static uint32 SpiDeviceRead(void *dev, struct BusBlockReadParam *read_param)
@@ -70,17 +83,30 @@ static uint32 SpiDeviceRead(void *dev, struct BusBlockReadParam *read_param)
NULL_PARAM_CHECK(dev);
NULL_PARAM_CHECK(read_param);
int ret;
struct SpiHardwareDevice *spi_dev = (struct SpiHardwareDevice *)dev;
struct SpiDataStandard spi_msg;
struct SpiDataStandard *spi_msg;
spi_msg.tx_buff = NONE;
spi_msg.rx_buff = (uint8 *)read_param->buffer;
spi_msg.length = read_param->size;
spi_msg.spi_chip_select = 0;
spi_msg.spi_cs_release = 0;
spi_msg.next = NONE;
spi_msg = (struct SpiDataStandard *)x_malloc(sizeof(struct SpiDataStandard));
if (NONE == spi_msg) {
KPrintf("SpiDeviceRead x_malloc msg error\n");
x_free(spi_msg);
return ERROR;
}
return spi_dev->spi_dev_done->dev_read(spi_dev, &spi_msg);
//memset(spi_msg, 0, sizeof(struct SpiDataStandard));
spi_msg->tx_buff = NONE;
spi_msg->rx_buff = (uint8 *)read_param->buffer;
spi_msg->length = read_param->size;
spi_msg->spi_chip_select = 0;
spi_msg->spi_cs_release = 0;
spi_msg->next = NONE;
ret = spi_dev->spi_dev_done->dev_read(spi_dev, spi_msg);
x_free(spi_msg);
return ret;
}
static const struct HalDevDone dev_done =
@@ -183,12 +209,27 @@ int SpiDevConfigureCs(struct HardwareDev *dev, uint8 spi_chip_select, uint8 spi_
{
NULL_PARAM_CHECK(dev);
int ret;
struct SpiHardwareDevice *spi_dev = (struct SpiHardwareDevice *)dev;
struct SpiDataStandard msg;
struct SpiDataStandard *msg;
memset(&msg, 0, sizeof(struct SpiDataStandard));
msg.spi_chip_select = spi_chip_select;
msg.spi_cs_release = spi_cs_release;
msg = (struct SpiDataStandard *)x_malloc(sizeof(struct SpiDataStandard));
if (NONE == msg) {
KPrintf("SpiDevConfigureCs x_malloc msg error\n");
x_free(msg);
return ERROR;
}
return spi_dev->spi_dev_done->dev_write(spi_dev, &msg);
//memset(msg, 0, sizeof(struct SpiDataStandard));
msg->length = 0;
msg->rx_buff = NONE;
msg->tx_buff = NONE;
msg->next = NONE;
msg->spi_chip_select = spi_chip_select;
msg->spi_cs_release = spi_cs_release;
ret = spi_dev->spi_dev_done->dev_write(spi_dev, msg);
x_free(msg);
return ret;
}
@@ -491,14 +491,14 @@ x_err_t UsbhClearFeature(UinstPointer device, int endpoint, int feature)
x_err_t UsbhGetInterfaceDescriptor(UcfgDescPointer CfgDesc, int num,
UintfDescPointer* IntfDesc)
{
uint64 ptr, depth = 0;
uint32 ptr, depth = 0;
UdescPointer desc;
NULL_PARAM_CHECK(CfgDesc);
ptr = (uint64)CfgDesc + CfgDesc->bLength;
while(ptr < (uint64)CfgDesc + CfgDesc->wTotalLength)
ptr = (uint32)CfgDesc + CfgDesc->bLength;
while(ptr < (uint32)CfgDesc + CfgDesc->wTotalLength)
{
if(depth++ > 0x20)
{
@@ -517,7 +517,7 @@ x_err_t UsbhGetInterfaceDescriptor(UcfgDescPointer CfgDesc, int num,
return EOK;
}
}
ptr = (uint64)desc + desc->bLength;
ptr = (uint32)desc + desc->bLength;
}
KPrintf("usb_get_interface_descriptor %d failed\n", num);
@@ -538,7 +538,7 @@ x_err_t UsbhGetEndpointDescriptor(UintfDescPointer IntfDesc, int num,
UepDescPointer* EpDesc)
{
int count = 0, depth = 0;
uint64 ptr;
uint32 ptr;
UdescPointer desc;
@@ -546,7 +546,7 @@ x_err_t UsbhGetEndpointDescriptor(UintfDescPointer IntfDesc, int num,
CHECK(num < IntfDesc->bNumEndpoints);
*EpDesc = NONE;
ptr = (uint64)IntfDesc + IntfDesc->bLength;
ptr = (uint32)IntfDesc + IntfDesc->bLength;
while(count < IntfDesc->bNumEndpoints)
{
if(depth++ > 0x20)
@@ -567,7 +567,7 @@ x_err_t UsbhGetEndpointDescriptor(UintfDescPointer IntfDesc, int num,
}
else count++;
}
ptr = (uint64)desc + desc->bLength;
ptr = (uint32)desc + desc->bLength;
}
KPrintf("usb_get_endpoint_descriptor %d failed\n", num);
@@ -49,7 +49,7 @@ static x_err_t RootHubCtrl(struct uhcd *hcd, uint16 port, uint8 cmd, void *args)
hcd->roothub->PortStatus[port-1] = (*(uint32 *)args);
break;
case RH_CLEAR_PORT_FEATURE:
switch(((uint64)args))
switch(((uint32)args))
{
case PORT_FEAT_C_CONNECTION:
hcd->roothub->PortStatus[port-1] &= ~PORT_CCSC;
@@ -69,7 +69,7 @@ static x_err_t RootHubCtrl(struct uhcd *hcd, uint16 port, uint8 cmd, void *args)
}
break;
case RH_SET_PORT_FEATURE:
switch((uint64)args)
switch((uint32)args)
{
case PORT_FEAT_CONNECTION:
hcd->roothub->PortStatus[port-1] |= PORT_CCSC;
@@ -222,7 +222,7 @@ x_err_t UsbhHubClearPortFeature(UhubPointer hub, uint16 port, uint16 feature)
if(hub->IsRoothub)
{
RootHubCtrl(hub->hcd, port, RH_CLEAR_PORT_FEATURE,
(void*)(uint64)feature);
(void*)(uint32)feature);
return EOK;
}
@@ -254,7 +254,7 @@ x_err_t UsbhHubSetPortFeature(UhubPointer hub, uint16 port,
if(hub->IsRoothub)
{
RootHubCtrl(hub->hcd, port, RH_SET_PORT_FEATURE,
(void*)(uint64)feature);
(void*)(uint32)feature);
return EOK;
}