xiuos3/kernel/kernel_test/test_can.c

170 lines
4.4 KiB
C

/*
* Copyright (c) 2020 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file test_can.c
* @brief support to test can function
* @version 1.0
* @author AIIT XUOS Lab
* @date 2021-04-24
*/
#include "bus_can.h"
#include "dev_can.h"
uint8 buf[8] = {0x33,0x55,0x77,0x99,0x66,0x44,0x88,0x11};
uint8 rx_buf[8];
struct BusBlockWriteParam cfx = {
.pos = 0,
.buffer = buf,
.size = 8
};
uint8 rx_buf[8] = {0};
struct BusBlockReadParam read_param = {
.pos = 0,
.buffer =rx_buf ,
.read_length =0
};
static struct CanDriverConfigure can_defconfig = {
.tsjw = 0,
.tbs2 = 5 ,
.tbs1 = 6,
.brp = 6,
.mode = 0
};
struct BusConfigureInfo configure_info ={
.configure_cmd = 0,
.private_data = &can_defconfig
};
static int _CanTestSend(const char *bus_name, const char *driver_name, const char *device_name0)
{
int i;
struct Bus *bus;
struct Driver *driver, *bus_driver;
struct HardwareDev *device0, *device1;
struct HardwareDev *bus_device0;
if(bus_name)
{
bus = BusFind(bus_name);
KPrintf("##test bus %p##\n", bus);
}
if(driver_name)
{
driver = CanDriverFind(driver_name, TYPE_CAN_DRV);
bus_driver = BusFindDriver(bus, driver_name);
KPrintf("##test driver %p bus_driver %p##\n", driver, bus_driver);
}
if(device_name0)
{
device0 = CanDeviceFind(device_name0, TYPE_CAN_DEV);
bus_device0 = BusFindDevice(bus, device_name0);
KPrintf("####test device0 %p bus_device0 %p####\n", device0, bus_device0);
KPrintf("####test device0 private %p\n", device0->private_data);
}
BusDrvConfigure(bus_driver, &configure_info);
while(1)
{
BusDevWriteData(device0, &cfx);
uint8 * buf =(uint8 *) cfx.buffer;
KPrintf("send:");
for(i = 0;i<cfx.size;i++)
KPrintf("0x%2x ", buf[i]);
KPrintf("\n");
MdelayKTask(2000);
}
}
void CanTestSend(void)
{
_CanTestSend(CAN_BUS_NAME_1,CAN_DRIVER_NAME,CAN_1_DEVICE_NAME_1);
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),CanTestSend, CanTestSend, Close AC task );
static int _CanTestRecv(const char *bus_name, const char *driver_name, const char *device_name0)
{
int len ,i;
struct Bus *bus;
struct Driver *driver, *bus_driver;
struct HardwareDev *device0, *device1;
struct HardwareDev *bus_device0;
if(bus_name)
{
KPrintf("####test find bus %s\n", bus_name);
bus = BusFind(bus_name);
KPrintf("####test bus %p####\n", bus);
}
if(driver_name)
{
KPrintf("####test find driver %s\n", driver_name);
driver = CanDriverFind(driver_name, TYPE_CAN_DRV);
bus_driver = BusFindDriver(bus, driver_name);
KPrintf("####test driver %p bus_driver %p####\n", driver, bus_driver);
}
if(device_name0)
{
KPrintf("####test find device0 %s\n", device_name0);
device0 = CanDeviceFind(device_name0, TYPE_CAN_DEV);
bus_device0 = BusFindDevice(bus, device_name0);
KPrintf("####test device0 %p bus_device0 %p####\n", device0, bus_device0);
KPrintf("####test device0 private %p\n", device0->private_data);
}
BusDrvConfigure(bus_driver, &configure_info);
while(1)
{
len = BusDevReadData(bus_device0,&read_param);
if(0 != len)
{
for(i = 0; i<len;i++)
KPrintf("0x%02x ", rx_buf[i]);
KPrintf("\n");
}
else
{
MdelayKTask(100);
}
}
}
void CanTestRecv(void)
{
_CanTestRecv(CAN_BUS_NAME_1,CAN_DRIVER_NAME,CAN_1_DEVICE_NAME_1);
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),CanTestRecv, CanTestRecv, Close AC task );