forked from xuos/xiuos
				
			Merge remote-tracking branch 'xuos/prepare_for_master' into prepare_for_master
This commit is contained in:
		
						commit
						5677cd0768
					
				| 
						 | 
				
			
			@ -13,6 +13,7 @@ ifeq ($(CONFIG_ADD_XIZI_FETURES),y)
 | 
			
		|||
    SRC_FILES := main.c
 | 
			
		||||
    ifeq ($(CONFIG_LIB_LV),y)
 | 
			
		||||
        SRC_DIR += lv_app
 | 
			
		||||
        SRC_DIR += tinyttf_app
 | 
			
		||||
    endif
 | 
			
		||||
 | 
			
		||||
    ifeq ($(CONFIG_APPLICATION_OTA),y)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
* @date:    2022/1/7
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -57,3 +58,4 @@ void TestAdc(void)
 | 
			
		|||
    return;
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestAdc, a adc test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,29 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_camera.c
 | 
			
		||||
* @brief:   a application of camera function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/7
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static uint16_t image_buff[384000];
 | 
			
		||||
 | 
			
		||||
void TestCamera(int argc, char *argv[])
 | 
			
		||||
| 
						 | 
				
			
			@ -97,3 +118,4 @@ void TestCamera(int argc, char *argv[])
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestCamera, a camera test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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:   a application of can function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2023/2/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -64,3 +84,4 @@ void TestCAN(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestCAN, a can test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/1/11
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -57,3 +57,4 @@ void TestDac(void)
 | 
			
		|||
    return;
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestDac, a dac test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_ethernet.c
 | 
			
		||||
* @brief:   a application of ethernet function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -171,3 +191,4 @@ PRIV_SHELL_CMD_FUNCTION(TestSocketAsClient, a w5500 client-ip-port-msg test samp
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_flash.c
 | 
			
		||||
* @brief:   a application of flash function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -33,3 +53,4 @@ void TestFlash(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestFlash, a flash test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_fs.c
 | 
			
		||||
* @brief:   a application of file_system function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/11/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,3 +80,4 @@ void TestFs(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestFs, a sd or usb filesystem test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_gpio.c
 | 
			
		||||
* @brief:   a application of GPIO function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -71,3 +91,4 @@ void  TestGpio(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestGpio, a gpio test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_hwtimer.c
 | 
			
		||||
* @brief:   a application of hwtimer function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -74,3 +94,4 @@ void TestHwTimer(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestHwTimer, a timer test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_i2c.c
 | 
			
		||||
* @brief:   a application of i2c function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -48,3 +68,4 @@ void TestI2C(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestI2C, a iic test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_lcd.c
 | 
			
		||||
* @brief:   a application of lcd function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -18,8 +38,21 @@ void TestLcd(void)
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // draw text
 | 
			
		||||
    LcdWriteParam graph_param;
 | 
			
		||||
 | 
			
		||||
    // black
 | 
			
		||||
    uint16* color_select = malloc(sizeof(uint16) * 321 * 321);
 | 
			
		||||
    memset(color_select, 0x00, sizeof(uint16) * 321 * 321);
 | 
			
		||||
    graph_param.type = LCD_DOT_TYPE;
 | 
			
		||||
    graph_param.pixel_info.x_startpos = 0;
 | 
			
		||||
    graph_param.pixel_info.y_startpos = 0;
 | 
			
		||||
    graph_param.pixel_info.x_endpos = 320;
 | 
			
		||||
    graph_param.pixel_info.y_endpos = 320;
 | 
			
		||||
    graph_param.pixel_info.pixel_color = color_select;
 | 
			
		||||
    PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
			
		||||
    free(color_select);
 | 
			
		||||
 | 
			
		||||
    // draw text
 | 
			
		||||
    graph_param.type = LCD_STRING_TYPE;
 | 
			
		||||
    graph_param.string_info.x_pos = 0;
 | 
			
		||||
    graph_param.string_info.y_pos = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,22 +62,28 @@ void TestLcd(void)
 | 
			
		|||
    graph_param.string_info.back_color = 0xFFFF;
 | 
			
		||||
    graph_param.string_info.font_color = 0x0000;
 | 
			
		||||
    graph_param.string_info.addr = "hello_world!";
 | 
			
		||||
 | 
			
		||||
    PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
			
		||||
 | 
			
		||||
    uint16 color_select = 0xF800;
 | 
			
		||||
    for (int i = 0; i < 5; i++)
 | 
			
		||||
    // draw line
 | 
			
		||||
    color_select = malloc(sizeof(uint16) * 1 * 320);
 | 
			
		||||
    for (int i = 0; i < 320; i++)
 | 
			
		||||
    {
 | 
			
		||||
        color_select[i] = 0xF800;
 | 
			
		||||
    }
 | 
			
		||||
    for (int i = 1; i <= 5; i++)
 | 
			
		||||
    {
 | 
			
		||||
        graph_param.type = LCD_DOT_TYPE;
 | 
			
		||||
        graph_param.pixel_info.x_startpos = 0;
 | 
			
		||||
        graph_param.pixel_info.y_startpos = 50 * i;
 | 
			
		||||
        graph_param.pixel_info.x_endpos = 320;
 | 
			
		||||
        graph_param.pixel_info.y_endpos = 50 * i;
 | 
			
		||||
        graph_param.pixel_info.pixel_color = &color_select;
 | 
			
		||||
        graph_param.pixel_info.y_startpos = i * 50;
 | 
			
		||||
        graph_param.pixel_info.x_endpos = 319;
 | 
			
		||||
        graph_param.pixel_info.y_endpos = i * 50;
 | 
			
		||||
        graph_param.pixel_info.pixel_color = color_select;
 | 
			
		||||
        PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
			
		||||
    }
 | 
			
		||||
    free(color_select);
 | 
			
		||||
 | 
			
		||||
    PrivClose(lcd_fd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestLcd, a lcd test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_loraE220.c
 | 
			
		||||
* @brief:   a application of loraE220 function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -145,3 +165,4 @@ void TestLora(int argc, char *argv[])
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestLora, a lora test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_rs485.c
 | 
			
		||||
* @brief:   a application of rs485 function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -84,3 +104,4 @@ void Test485(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(Test485, a RS485 test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_rtc.c
 | 
			
		||||
* @brief:   a application of rtc function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -39,3 +59,4 @@ void TestRTC(int argc,char *argv[])
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestRTC, a rtc test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,6 @@ void TestTouch(void)
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +48,7 @@ void TestTouch(void)
 | 
			
		|||
#define LCD_DOT_TYPE 1
 | 
			
		||||
#define LCD_SIZE 320
 | 
			
		||||
 | 
			
		||||
#elif ADD_XIZI_FETURES
 | 
			
		||||
 | 
			
		||||
void TestTouch(void)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -110,3 +110,4 @@ void TestTouch(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestTouch, a touch test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,23 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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_wdt.c
 | 
			
		||||
* @brief:   a application of wdt function
 | 
			
		||||
* @version: 1.1
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2022/12/17
 | 
			
		||||
*/
 | 
			
		||||
#ifdef ADD_XIZI_FETURES
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -43,3 +63,4 @@ void TestWDT(int argc, char *agrv[])
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(TestWDT, a wdt test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -142,8 +142,8 @@ void UdpSocketRecvTest(int argc, char *argv[])
 | 
			
		|||
#endif
 | 
			
		||||
#ifdef ADD_NUTTX_FETURES
 | 
			
		||||
    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
			
		||||
    attr.priority = LWIP_TCP_DEMO_TASK_PRIO;
 | 
			
		||||
    attr.stacksize = LWIP_TCP_DEMO_TASK_STACK_SIZE;
 | 
			
		||||
    attr.priority = LWIP_UDP_DEMO_TASK_PRIO;
 | 
			
		||||
    attr.stacksize = LWIP_UDP_DEMO_TASK_STACK_SIZE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    PrivTaskCreate(&udp_server_task, &attr, &UdpSocketRecvTask, NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -208,8 +208,8 @@ void UdpSocketSendTest(int argc, char *argv[])
 | 
			
		|||
#endif
 | 
			
		||||
#ifdef ADD_NUTTX_FETURES
 | 
			
		||||
    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
			
		||||
    attr.priority = LWIP_TCP_DEMO_TASK_PRIO;
 | 
			
		||||
    attr.stacksize = LWIP_TCP_DEMO_TASK_STACK_SIZE;
 | 
			
		||||
    attr.priority = LWIP_UDP_DEMO_TASK_PRIO;
 | 
			
		||||
    attr.stacksize = LWIP_UDP_DEMO_TASK_STACK_SIZE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    PrivTaskCreate(&udp_client_task, &attr, &UdpSocketSendTask, NULL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
SRC_DIR := advantech beckhoff br delta mitsubishi omron schneider siemens
 | 
			
		||||
SRC_DIR := advantech beckhoff br delta mitsubishi omron schneider siemens ge xinje
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
SRC_FILES := delta_as228t.c
 | 
			
		||||
SRC_FILES := delta_as228t.c delta_as332t.c delta_dvp.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 delta_dvp.c
 | 
			
		||||
 * @brief PLC DELTA DVP app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
extern int Adapter4GActive(void);
 | 
			
		||||
 | 
			
		||||
void ControlDeltadvpTest(void)
 | 
			
		||||
{
 | 
			
		||||
    int i, j = 0;
 | 
			
		||||
    int read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[128] = {0};
 | 
			
		||||
 | 
			
		||||
#ifdef CONNECTION_ADAPTER_4G
 | 
			
		||||
    Adapter4GActive();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType modbus_tcp_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == modbus_tcp_protocol) {
 | 
			
		||||
        printf("%s get modbus tcp protocol %p failed\n", __func__, modbus_tcp_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get modbus tcp protocol %p successfull\n", __func__, modbus_tcp_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == modbus_tcp_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(modbus_tcp_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(modbus_tcp_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] modbus tcp data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            i++;
 | 
			
		||||
            memset(read_data, 0, sizeof(read_data));
 | 
			
		||||
            PrivTaskDelay(10000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(modbus_tcp_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlDeltadvpTest, Delta dvp Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
SRC_FILES := ge_versamax001.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 ge_versamax001.c
 | 
			
		||||
 * @brief PLC GE Versamax app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
extern int Adapter4GActive(void);
 | 
			
		||||
 | 
			
		||||
void ControlGeversamaxTest(void)
 | 
			
		||||
{
 | 
			
		||||
    int i, j = 0;
 | 
			
		||||
    int read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[128] = {0};
 | 
			
		||||
 | 
			
		||||
#ifdef CONNECTION_ADAPTER_4G
 | 
			
		||||
    Adapter4GActive();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType modbus_rtu_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == modbus_rtu_protocol) {
 | 
			
		||||
        printf("%s get modbus rtu protocol %p failed\n", __func__, modbus_rtu_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get modbus rtu protocol %p successfull\n", __func__, modbus_rtu_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == modbus_rtu_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(modbus_rtu_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(modbus_rtu_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] modbus rtu data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            i++;
 | 
			
		||||
            memset(read_data, 0, sizeof(read_data));
 | 
			
		||||
            PrivTaskDelay(10000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(modbus_rtu_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlGeversamaxTest, ge versamax001 Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
SRC_FILES := mitsubishi_fx3u.c mitsubishi_fx5u.c
 | 
			
		||||
SRC_FILES := mitsubishi_fx3u.c mitsubishi_fx5u.c mitsubishi_fx2n.c mitsubishi_q02u.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 mitsubishi_fx2n.c
 | 
			
		||||
 * @brief PLC MITSUBISHI FX2N app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
extern int Adapter4GActive(void);
 | 
			
		||||
 | 
			
		||||
void ControlFx2nTest(void)
 | 
			
		||||
{
 | 
			
		||||
    int i, j = 0;
 | 
			
		||||
    int read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[128] = {0};
 | 
			
		||||
 | 
			
		||||
#ifdef CONNECTION_ADAPTER_4G
 | 
			
		||||
    Adapter4GActive();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType melsec_1c_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == melsec_1c_protocol) {
 | 
			
		||||
        printf("%s get melsec 1c protocol %p failed\n", __func__, melsec_1c_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get melsec 1c protocol %p successfull\n", __func__, melsec_1c_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == melsec_1c_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(melsec_1c_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(melsec_1c_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] melsec 1c data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            i++;
 | 
			
		||||
            memset(read_data, 0, sizeof(read_data));
 | 
			
		||||
            PrivTaskDelay(10000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(melsec_1c_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlFx2nTest, Mitsubishi FX2N Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,20 +32,20 @@ void ControlFx3uTest(void)
 | 
			
		|||
    Adapter4GActive();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType modbus_tcp_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == modbus_tcp_protocol) {
 | 
			
		||||
        printf("%s get modbus tcp protocol %p failed\n", __func__, modbus_tcp_protocol);
 | 
			
		||||
    ControlProtocolType melsec_1e_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == melsec_1e_protocol) {
 | 
			
		||||
        printf("%s get melsec 1e protocol %p failed\n", __func__, melsec_1e_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get modbus tcp protocol %p successfull\n", __func__, modbus_tcp_protocol);
 | 
			
		||||
    printf("%s get melsec 1e protocol %p successfull\n", __func__, melsec_1e_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == modbus_tcp_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(modbus_tcp_protocol);
 | 
			
		||||
    if (CONTROL_REGISTERED == melsec_1e_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(melsec_1e_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(modbus_tcp_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] modbus tcp data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            read_data_length = ControlProtocolRead(melsec_1e_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] melsec 1e data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 mitsubishi_q02u.c
 | 
			
		||||
 * @brief PLC MITSUBISHI Q02U app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
extern int Adapter4GActive(void);
 | 
			
		||||
 | 
			
		||||
void ControlQ02uTest(void)
 | 
			
		||||
{
 | 
			
		||||
    int i, j = 0;
 | 
			
		||||
    int read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[128] = {0};
 | 
			
		||||
 | 
			
		||||
#ifdef CONNECTION_ADAPTER_4G
 | 
			
		||||
    Adapter4GActive();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType melsec_3e_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == melsec_3e_protocol) {
 | 
			
		||||
        printf("%s get melsec 3e protocol %p failed\n", __func__, melsec_3e_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get melsec 3e protocol %p successfull\n", __func__, melsec_3e_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == melsec_3e_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(melsec_3e_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(melsec_3e_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] melsec 3c data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            i++;
 | 
			
		||||
            memset(read_data, 0, sizeof(read_data));
 | 
			
		||||
            PrivTaskDelay(10000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(melsec_3c_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlQ02uTest, Mitsubishi Q02U Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
SRC_FILES := omron_cj2m.c omron_nj501.c omron_nx102.c
 | 
			
		||||
SRC_FILES := omron_cj2m.c omron_nj501.c omron_nx102.c omron_cp1h.c omron_cp1l.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 omron_cj2m.c
 | 
			
		||||
 * @brief PLC OMRON CJ2M app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 omron_.cp1l.c
 | 
			
		||||
 * @brief PLC OMRON CP1L app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2023.2.10
 | 
			
		||||
 */
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
void ControlOmronCP1LTest(void)
 | 
			
		||||
{
 | 
			
		||||
    int i = 0;
 | 
			
		||||
    uint16_t read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[1024] = {0};
 | 
			
		||||
    ControlProtocolType fins_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == fins_protocol) {
 | 
			
		||||
        printf("%s get fins protocol %p failed\n", __func__, fins_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get fins protocol %p successfull\n", __func__, fins_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == fins_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(fins_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(fins_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] fins data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            i++;
 | 
			
		||||
            PrivTaskDelay(100000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(fins_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlOmronCP1LTest, Omron Plc FINS Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
{
 | 
			
		||||
    "device_id": 1,
 | 
			
		||||
    "device_name": "m241",
 | 
			
		||||
    "communication_type": 1,
 | 
			
		||||
    "serial_config": {
 | 
			
		||||
        "station": 1,
 | 
			
		||||
        "baud_rate": 9600,
 | 
			
		||||
        "data_bits": 8,
 | 
			
		||||
        "stop_bits": 1,
 | 
			
		||||
        "check_mode": 3
 | 
			
		||||
    },
 | 
			
		||||
    "protocol_type": 3,
 | 
			
		||||
    "read_period": 100,
 | 
			
		||||
    "read_item_list": [
 | 
			
		||||
        {
 | 
			
		||||
            "value_name": "MW0",
 | 
			
		||||
            "value_type": 3,
 | 
			
		||||
            "function_code": 3,
 | 
			
		||||
            "start_address": 0,
 | 
			
		||||
            "quantity": 1
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "value_name": "MW1",
 | 
			
		||||
            "value_type": 3,
 | 
			
		||||
            "function_code": 3,
 | 
			
		||||
            "start_address": 1,
 | 
			
		||||
            "quantity": 1
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -15,9 +15,50 @@
 | 
			
		|||
 * @brief PLC SCHNEIDER M241 app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2022.9.27
 | 
			
		||||
 * @date 2023.2.1
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <control.h>
 | 
			
		||||
 | 
			
		||||
extern int Adapter4GActive(void);
 | 
			
		||||
 | 
			
		||||
void ControlM241Test(void)
 | 
			
		||||
{
 | 
			
		||||
    int i, j = 0;
 | 
			
		||||
    int read_data_length = 0;
 | 
			
		||||
    uint8_t read_data[128] = {0};
 | 
			
		||||
 | 
			
		||||
    #ifdef CONNECTION_ADAPTER_4G
 | 
			
		||||
        Adapter4GActive();
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    ControlProtocolType modbus_rtu_protocol = ControlProtocolFind();
 | 
			
		||||
    if (NULL == modbus_rtu_protocol) {
 | 
			
		||||
        printf("%s get modbus rtu protocol %p failed\n", __func__, modbus_rtu_protocol);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("%s get modbus rtu protocol %p successfull\n", __func__, modbus_rtu_protocol);
 | 
			
		||||
 | 
			
		||||
    if (CONTROL_REGISTERED == modbus_rtu_protocol->protocol_status) {
 | 
			
		||||
        ControlProtocolOpen(modbus_rtu_protocol);
 | 
			
		||||
 | 
			
		||||
        for (;;) {
 | 
			
		||||
            read_data_length = ControlProtocolRead(modbus_rtu_protocol, read_data, sizeof(read_data));
 | 
			
		||||
            printf("%s read [%d] modbus rtu data %d using receipe file\n", __func__, i, read_data_length);
 | 
			
		||||
            if (read_data_length) {
 | 
			
		||||
                for (j = 0; j < read_data_length; j ++) {
 | 
			
		||||
                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            i++;
 | 
			
		||||
            memset(read_data, 0, sizeof(read_data));
 | 
			
		||||
            PrivTaskDelay(10000);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //ControlProtocolClose(modbus_rtu_protocol);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ControlM241Test, Schneider M241 Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
SRC_FILES := xsdh-60a32-e.c xdh-60t4-e.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 mitsubishi_fx3u.c
 | 
			
		||||
 * @brief PLC MITSUBISHI FX3U app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2023.2.1
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2022 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 mitsubishi_fx3u.c
 | 
			
		||||
 * @brief PLC MITSUBISHI FX3U app
 | 
			
		||||
 * @version 3.0
 | 
			
		||||
 * @author AIIT XUOS Lab
 | 
			
		||||
 * @date 2023.3.1
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +158,7 @@ int CircularAreaAppRead(CircularAreaAppType circular_area, uint8_t *output_buffe
 | 
			
		|||
{
 | 
			
		||||
    CA_PARAM_CHECK(circular_area);
 | 
			
		||||
    CA_PARAM_CHECK(output_buffer);
 | 
			
		||||
    CHECK(data_length > 0);
 | 
			
		||||
    CA_CHECK(data_length > 0);
 | 
			
		||||
 | 
			
		||||
    if(CircularAreaAppIsEmpty(circular_area)) {
 | 
			
		||||
        return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +199,7 @@ int CircularAreaAppWrite(CircularAreaAppType circular_area, uint8_t *input_buffe
 | 
			
		|||
{
 | 
			
		||||
    CA_PARAM_CHECK(circular_area);
 | 
			
		||||
    CA_PARAM_CHECK(input_buffer);
 | 
			
		||||
    CHECK(data_length > 0);
 | 
			
		||||
    CA_CHECK(data_length > 0);
 | 
			
		||||
 | 
			
		||||
    if(CircularAreaAppIsFull(circular_area) && (!b_force)) {
 | 
			
		||||
        return -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +248,7 @@ static struct CircularAreaAppOps CircularAreaAppOperations =
 | 
			
		|||
 */
 | 
			
		||||
CircularAreaAppType CircularAreaAppInit(uint32_t circular_area_length)
 | 
			
		||||
{
 | 
			
		||||
    CHECK(circular_area_length > 0);
 | 
			
		||||
    CA_CHECK(circular_area_length > 0);
 | 
			
		||||
 | 
			
		||||
    circular_area_length = CA_ALIGN_DOWN(circular_area_length, 8);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,11 +29,20 @@
 | 
			
		|||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CA_CHECK(TRUE_CONDITION)                                                                                   \
 | 
			
		||||
    do                                                                                                             \
 | 
			
		||||
    {                                                                                                              \
 | 
			
		||||
        if(!(TRUE_CONDITION)) {                                                                                    \
 | 
			
		||||
            printf("%s CHECK condition is false at line[%d] of [%s] func.\n", #TRUE_CONDITION, __LINE__, __func__);\
 | 
			
		||||
            while(1);                                                                                              \
 | 
			
		||||
        }                                                                                                          \
 | 
			
		||||
    }while (0) 
 | 
			
		||||
 | 
			
		||||
#define CA_PARAM_CHECK(param)                                                                  \
 | 
			
		||||
    do                                                                                         \
 | 
			
		||||
    {                                                                                          \
 | 
			
		||||
        if(param == NULL) {                                                                    \
 | 
			
		||||
            KPrintf("PARAM CHECK FAILED ...%s %d %s is NULL.\n", __func__, __LINE__, #param);  \
 | 
			
		||||
            printf("PARAM CHECK FAILED ...%s %d %s is NULL.\n", __func__, __LINE__, #param);  \
 | 
			
		||||
            while(1);                                                                          \
 | 
			
		||||
        }                                                                                      \
 | 
			
		||||
    }while (0) 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
# ISSUE
 | 
			
		||||
 | 
			
		||||
Code in Lib `tjpgd` might be redefined in RT-thread(which has not been tested). if occurs, please try to temporarily delete `tjpgd.c` in dir and `tjpgd.h` in ../model/m4/.
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,93 @@
 | 
			
		|||
/*----------------------------------------------------------------------------/
 | 
			
		||||
/ TJpgDec - Tiny JPEG Decompressor include file               (C)ChaN, 2019
 | 
			
		||||
/----------------------------------------------------------------------------*/
 | 
			
		||||
#ifndef DEF_TJPGDEC
 | 
			
		||||
#define DEF_TJPGDEC
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/* System Configurations */
 | 
			
		||||
 | 
			
		||||
#define JD_SZBUF        512 /* Size of stream input buffer */
 | 
			
		||||
#define JD_FORMAT       1   /* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */
 | 
			
		||||
#define JD_USE_SCALE    1   /* Use descaling feature for output */
 | 
			
		||||
#define JD_TBLCLIP      1   /* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */
 | 
			
		||||
 | 
			
		||||
#define JD_SCALE        2   /* 0:1/1  1:1/2  2:1/4  3:1/8 */
 | 
			
		||||
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32) /* Main development platform */
 | 
			
		||||
typedef unsigned char   uint8_t;
 | 
			
		||||
typedef unsigned short  uint16_t;
 | 
			
		||||
typedef short           int16_t;
 | 
			
		||||
typedef unsigned long   uint32_t;
 | 
			
		||||
typedef long            int32_t;
 | 
			
		||||
#else
 | 
			
		||||
#include "stdint.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Error code */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
    JDR_OK = 0, /* 0: Succeeded */
 | 
			
		||||
    JDR_INTR,   /* 1: Interrupted by output function */
 | 
			
		||||
    JDR_INP,    /* 2: Device error or wrong termination of input stream */
 | 
			
		||||
    JDR_MEM1,   /* 3: Insufficient memory pool for the image */
 | 
			
		||||
    JDR_MEM2,   /* 4: Insufficient stream input buffer */
 | 
			
		||||
    JDR_PAR,    /* 5: Parameter error */
 | 
			
		||||
    JDR_FMT1,   /* 6: Data format error (may be damaged data) */
 | 
			
		||||
    JDR_FMT2,   /* 7: Right format but not supported */
 | 
			
		||||
    JDR_FMT3    /* 8: Not supported JPEG standard */
 | 
			
		||||
} JRESULT;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Rectangular structure */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    uint16_t left, right, top, bottom;
 | 
			
		||||
} JRECT;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Decompressor object structure */
 | 
			
		||||
typedef struct JDEC JDEC;
 | 
			
		||||
struct JDEC
 | 
			
		||||
{
 | 
			
		||||
    uint16_t dctr;              /* Number of bytes available in the input buffer */
 | 
			
		||||
    uint8_t *dptr;              /* Current data read ptr */
 | 
			
		||||
    uint8_t *inbuf;             /* Bit stream input buffer */
 | 
			
		||||
    uint8_t dmsk;               /* Current bit in the current read byte */
 | 
			
		||||
    uint8_t scale;              /* Output scaling ratio */
 | 
			
		||||
    uint8_t msx, msy;           /* MCU size in unit of block (width, height) */
 | 
			
		||||
    uint8_t qtid[3];            /* Quantization table ID of each component */
 | 
			
		||||
    int16_t dcv[3];             /* Previous DC element of each component */
 | 
			
		||||
    uint16_t nrst;              /* Restart inverval */
 | 
			
		||||
    uint16_t width, height;     /* Size of the input image (pixel) */
 | 
			
		||||
    uint8_t *huffbits[2][2];    /* Huffman bit distribution tables [id][dcac] */
 | 
			
		||||
    uint16_t *huffcode[2][2];   /* Huffman code word tables [id][dcac] */
 | 
			
		||||
    uint8_t *huffdata[2][2];    /* Huffman decoded data tables [id][dcac] */
 | 
			
		||||
    int32_t *qttbl[4];          /* Dequantizer tables [id] */
 | 
			
		||||
    void *workbuf;              /* Working buffer for IDCT and RGB output */
 | 
			
		||||
    uint8_t *mcubuf;            /* Working buffer for the MCU */
 | 
			
		||||
    void *pool;                 /* Pointer to available memory pool */
 | 
			
		||||
    uint16_t sz_pool;           /* Size of momory pool (bytes available) */
 | 
			
		||||
    uint16_t (*infunc)(JDEC *, uint8_t *, uint16_t); /* Pointer to jpeg stream input function */
 | 
			
		||||
    void *device;               /* Pointer to I/O device identifiler for the session */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* TJpgDec API functions */
 | 
			
		||||
JRESULT jd_prepare (JDEC *, uint16_t(*)(JDEC *, uint8_t *, uint16_t), void *, uint16_t, void *);
 | 
			
		||||
JRESULT jd_decomp (JDEC *, uint16_t(*)(JDEC *, void *, JRECT *), uint8_t);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _TJPGDEC */
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
SRC_FILES := ttf_demo.c lv_example_tiny_ttf_1.c lv_example_tiny_ttf_2.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
## Tiny TTF font engine
 | 
			
		||||
用于在触摸屏上渲染矢量字体,若要使用该引擎,需开启LVGL。
 | 
			
		||||
### Usage
 | 
			
		||||
在`lv_conf.h`中开启`LV_USE_TINY_TTF`,可以使用`lv_tiny_ttf_create_data(data, data_size, line_height)`创建字体,创建字体后像LVGL正常字体一样使用。
 | 
			
		||||
默认情况下,TTF或者OTF文件必须作为数组嵌入到程序,见`ubuntu_font`,如果要从sd卡中读取文件,需开启`LV_TINY_TTF_FILE_SUPPORT`和`LV_USE_FS_POSIX`。  
 | 
			
		||||
 | 
			
		||||
> 注意:从sd卡中读取字库文件会比较慢,请谨慎使用!   
 | 
			
		||||
 | 
			
		||||
默认情况下,字体使用4KB缓存来加速渲染,可以使用`lv_tiny_ttf_create_data_ex(data, data_size, line_height, cache_size)`或者`lv_tiny_ttf_create_file_ex(path, line_height, cache_size)`更改此大小
 | 
			
		||||
。
 | 
			
		||||
### API
 | 
			
		||||
见 xiuos/APP_Framework/lib/lvgl/src/extra/libs/tiny_ttf/lv_tiny_ttf.h
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file lv_example_tiny_ttf.h
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef LV_EXAMPLE_TINY_TTF_H
 | 
			
		||||
#define LV_EXAMPLE_TINY_TTF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*********************
 | 
			
		||||
 *      INCLUDES
 | 
			
		||||
 *********************/
 | 
			
		||||
 | 
			
		||||
/*********************
 | 
			
		||||
 *      DEFINES
 | 
			
		||||
 *********************/
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 *      TYPEDEFS
 | 
			
		||||
 **********************/
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 * GLOBAL PROTOTYPES
 | 
			
		||||
 **********************/
 | 
			
		||||
void lv_example_tiny_ttf_1(void);
 | 
			
		||||
void lv_example_tiny_ttf_2(void);
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 *      MACROS
 | 
			
		||||
 **********************/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
} /*extern "C"*/
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*LV_EXAMPLE_TINY_TTF_H*/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
#include <../../lib/lvgl/examples/lv_examples.h>
 | 
			
		||||
#if LV_USE_TINY_TTF && LV_BUILD_EXAMPLES
 | 
			
		||||
 | 
			
		||||
#include "ubuntu_font_ch.h"
 | 
			
		||||
/**
 | 
			
		||||
 * Load a font with Tiny_TTF
 | 
			
		||||
 */
 | 
			
		||||
void lv_example_tiny_ttf_1(void)
 | 
			
		||||
{
 | 
			
		||||
    /*Create style with the new font*/
 | 
			
		||||
    static lv_style_t style;
 | 
			
		||||
    lv_style_init(&style);
 | 
			
		||||
    lv_font_t * font = lv_tiny_ttf_create_data(ubuntu_font, sizeof(ubuntu_font), 35);
 | 
			
		||||
    lv_style_set_text_font(&style, font);
 | 
			
		||||
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);
 | 
			
		||||
 | 
			
		||||
    /*Create a label with the new style*/
 | 
			
		||||
    lv_obj_t * label = lv_label_create(lv_scr_act());
 | 
			
		||||
    lv_obj_add_style(label, &style, 0);
 | 
			
		||||
    lv_label_set_text(label, "你好世界\nI'm a font\ncreated\nwith Tiny TTF");
 | 
			
		||||
    lv_obj_center(label);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
#include <../../lib/lvgl/examples/lv_examples.h>
 | 
			
		||||
#if LV_USE_TINY_TTF && LV_TINY_TTF_FILE_SUPPORT //&& LV_BUILD_EXAMPLES
 | 
			
		||||
#define MAX_READ_LENGTH 1000
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
/**
 | 
			
		||||
 * Load a font with Tiny_TTF from file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void lv_example_tiny_ttf_2(void)
 | 
			
		||||
{
 | 
			
		||||
    /*Create style with the new font*/
 | 
			
		||||
    static lv_style_t style;
 | 
			
		||||
    lv_style_init(&style);
 | 
			
		||||
    lv_font_t * font = lv_tiny_ttf_create_file("G:/normal.ttf", 35);
 | 
			
		||||
    
 | 
			
		||||
    lv_style_set_text_font(&style, font);
 | 
			
		||||
    lv_style_set_text_align(&style, LV_TEXT_ALIGN_CENTER);
 | 
			
		||||
 | 
			
		||||
    /*Create a label with the new style*/
 | 
			
		||||
    lv_obj_t * label = lv_label_create(lv_scr_act());
 | 
			
		||||
    lv_obj_set_size(label, 240, 136);
 | 
			
		||||
    lv_obj_add_style(label, &style, 0);
 | 
			
		||||
    lv_label_set_text(label, "你好世界\nI'm a font\ncreated\nwith Tiny TTF");
 | 
			
		||||
    lv_obj_center(label);
 | 
			
		||||
    lv_tiny_ttf_destroy(font);
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
/*
 | 
			
		||||
* 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:    ttf_demo.c
 | 
			
		||||
* @brief:   a application using tinyttf
 | 
			
		||||
* @version: 2.0
 | 
			
		||||
* @author:  AIIT XUOS Lab
 | 
			
		||||
* @date:    2023/3/15
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <lvgl.h>
 | 
			
		||||
#include <lv_port_indev_template.h>
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
 | 
			
		||||
extern void lv_example_tiny_ttf_1(void);
 | 
			
		||||
extern void lv_example_tiny_ttf_2(void);
 | 
			
		||||
void* ttf_thread(void *parameter)
 | 
			
		||||
{
 | 
			
		||||
    /* display demo; you may replace with your LVGL application at here */
 | 
			
		||||
    lv_example_tiny_ttf_1();
 | 
			
		||||
    // lv_example_tiny_ttf_1();
 | 
			
		||||
 | 
			
		||||
    /* handle the tasks of LVGL */
 | 
			
		||||
    while(1)
 | 
			
		||||
    {
 | 
			
		||||
        lv_task_handler();
 | 
			
		||||
        PrivTaskDelay(10);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pthread_t lvgl_task;
 | 
			
		||||
static int ttf_demo_init(void)
 | 
			
		||||
{
 | 
			
		||||
    pthread_attr_t attr;
 | 
			
		||||
    attr.schedparam.sched_priority = 25;
 | 
			
		||||
    attr.stacksize = 4096;
 | 
			
		||||
 | 
			
		||||
    PrivTaskCreate(&lvgl_task, &attr, ttf_thread, NULL);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
PRIV_SHELL_CMD_FUNCTION(ttf_demo_init, a tinyttf init sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -113,14 +113,19 @@ static int ModbusUartGetDataBySerial(ModbusUartReadItem *p_read_item)
 | 
			
		|||
    ModbusUartDataInfo *p_modbus_uart_data_info = &(p_read_item->data_info);
 | 
			
		||||
    BasicPlcDataInfo *p_base_data_info = &(p_modbus_uart_data_info->base_data_info);   
 | 
			
		||||
    ModbusUartFunctionCode function_code = p_modbus_uart_data_info->function_code;
 | 
			
		||||
    uint16_t quantity = p_read_item->quantity;//++
 | 
			
		||||
 | 
			
		||||
    ControlPrintfList("SEND", p_base_data_info->p_command, p_base_data_info->command_length);
 | 
			
		||||
    SerialWrite(p_base_data_info->p_command, p_base_data_info->command_length);
 | 
			
		||||
 | 
			
		||||
    if (READ_COIL_STATUS == function_code || READ_INPUT_STATUS == function_code) {
 | 
			
		||||
        cmd_length = 6;
 | 
			
		||||
    } else if (READ_HOLDING_REGISTER == function_code || READ_INPUT_REGISTER == function_code) {
 | 
			
		||||
    } else if ((READ_HOLDING_REGISTER == function_code || READ_INPUT_REGISTER == function_code) && quantity == 1 ) {
 | 
			
		||||
        cmd_length = 7;
 | 
			
		||||
    } else if ((READ_HOLDING_REGISTER == function_code || READ_INPUT_REGISTER == function_code) && quantity == 2 ) {
 | 
			
		||||
        cmd_length = 9;
 | 
			
		||||
    } else if ((READ_HOLDING_REGISTER == function_code || READ_INPUT_REGISTER == function_code) && quantity == 4 ) {
 | 
			
		||||
        cmd_length = 13;    
 | 
			
		||||
    } else if (WRITE_SINGLE_COIL == function_code || WRITE_SINGLE_REGISTER == function_code) {
 | 
			
		||||
        cmd_length = 8;
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -369,7 +374,7 @@ static struct ControlDone modbusuart_protocol_done =
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: Modbus TCP Protocol Cmd Generate
 | 
			
		||||
 * @description: Modbus Uart Protocol Cmd Generate
 | 
			
		||||
 * @param p_recipe - recipe pointer
 | 
			
		||||
 * @param protocol_format_info - protocol format info pointer
 | 
			
		||||
 * @return success : 0 error : -1
 | 
			
		||||
| 
						 | 
				
			
			@ -402,7 +407,7 @@ int ModbusUartProtocolFormatCmd(struct ControlRecipe *p_recipe, ProtocolFormatIn
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @description: Modbus TCP Protocol Init
 | 
			
		||||
 * @description: Modbus Uart Protocol Init
 | 
			
		||||
 * @param p_recipe - recipe pointer
 | 
			
		||||
 * @return success : 0 error : -1
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -270,7 +270,7 @@ static uint16_t Melsec3eqlGenerateCommand(uint8_t *p_command, uint32_t command_c
 | 
			
		|||
    uint16_t head_device_number = 0;
 | 
			
		||||
    for (uint8_t i = 0; i < 6; i++) {
 | 
			
		||||
        if (0 != p_read_item->head_device_number_string[i])
 | 
			
		||||
            head_device_number = TransformAsciiToHex(p_read_item->head_device_number_string[i]) + head_device_number * (((0x9c == (uint8_t)p_read_item->device_code) || (0x9d == (uint8_t)p_read_item->device_code)) ? 16 : 10);
 | 
			
		||||
            head_device_number = TransformAsciiToHex(p_read_item->head_device_number_string[i]) + head_device_number * (((0x9c == (uint8_t)p_read_item->device_code) || (0x9d == (uint8_t)p_read_item->device_code) || (0xa0 == (uint8_t)p_read_item->device_code) || (0xb4 == (uint8_t)p_read_item->device_code)) ? 16 : 10);
 | 
			
		||||
        else
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -297,7 +297,7 @@ static uint16_t Melsec3eiqrGenerateCommand(uint8_t *p_command, uint32_t command_
 | 
			
		|||
    uint16_t head_device_number = 0;
 | 
			
		||||
    for (uint8_t i = 0; i < 6; i++) {
 | 
			
		||||
        if (0 != p_read_item->head_device_number_string[i])
 | 
			
		||||
            head_device_number = TransformAsciiToHex(p_read_item->head_device_number_string[i]) + head_device_number * (((0x9c == (uint8_t)p_read_item->device_code) || (0x9d == (uint8_t)p_read_item->device_code)) ? 16 : 10);
 | 
			
		||||
            head_device_number = TransformAsciiToHex(p_read_item->head_device_number_string[i]) + head_device_number * (((0x9c == (uint8_t)p_read_item->device_code) || (0x9d == (uint8_t)p_read_item->device_code)|| (0xa0 == (uint8_t)p_read_item->device_code)|| (0xb4 == (uint8_t)p_read_item->device_code)) ? 16 : 10);
 | 
			
		||||
        else
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -567,7 +567,7 @@ static int MelsecTransformRecvBuffToData(MelsecReadItem *p_read_item, uint8_t *r
 | 
			
		|||
                p_data[2 * i] = TransformAsciiToHex(recv_buff[recv_buff_index]) * 16 + TransformAsciiToHex(recv_buff[recv_buff_index + 1]);
 | 
			
		||||
                p_data[2 * i + 1] = TransformAsciiToHex(recv_buff[recv_buff_index + 2]) * 16 + TransformAsciiToHex(recv_buff[recv_buff_index + 3]);
 | 
			
		||||
            }
 | 
			
		||||
            printf("0x%x 0x%x", p_data[2 * i], p_data[2 * i + 1]);
 | 
			
		||||
            printf("0x%x 0x%x ", p_data[2 * i], p_data[2 * i + 1]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    printf("\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -629,16 +629,51 @@ static int MelsecGetDataBySocket(int32_t socket, MelsecReadItem *p_read_item)
 | 
			
		|||
 */
 | 
			
		||||
static int MelsecGetDataBySerial(MelsecReadItem *p_read_item)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t read_length = 0;
 | 
			
		||||
    uint32_t cmd_length,read_length = 0;
 | 
			
		||||
    memset(recv_buff, 0, sizeof(recv_buff));
 | 
			
		||||
 | 
			
		||||
    MelsecDataInfo *p_melsec_data_info = &(p_read_item->data_info);
 | 
			
		||||
    BasicPlcDataInfo *p_base_data_info = &(p_melsec_data_info->base_data_info); 
 | 
			
		||||
    MelsecCommandType melsec_command_type = p_melsec_data_info->command_type;//++
 | 
			
		||||
    MelsecFrameType melsec_frame_type= p_melsec_data_info->frame_type;//++
 | 
			
		||||
 | 
			
		||||
    uint16_t device_points_count = p_read_item->device_points_count;//++
 | 
			
		||||
 | 
			
		||||
    ControlPrintfList("SEND", p_base_data_info->p_command, p_base_data_info->command_length);
 | 
			
		||||
    SerialWrite(p_base_data_info->p_command, p_base_data_info->command_length);
 | 
			
		||||
    //++
 | 
			
		||||
   if (MELSEC_1C_FRAME == melsec_frame_type) {
 | 
			
		||||
      if (READ_IN_BITS == melsec_command_type ) {
 | 
			
		||||
          cmd_length = 9;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==1 ) {
 | 
			
		||||
          cmd_length = 12;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==2 ) {
 | 
			
		||||
          cmd_length = 16;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==4 ) {
 | 
			
		||||
          cmd_length = 24;
 | 
			
		||||
      } else {
 | 
			
		||||
        //MULTIPLE_COIL and MULTIPLE_REGISTER to do
 | 
			
		||||
        cmd_length = 0;
 | 
			
		||||
     }
 | 
			
		||||
   }else  if(MELSEC_3C_FRAME == melsec_frame_type){
 | 
			
		||||
    if (READ_IN_BITS == melsec_command_type ) {
 | 
			
		||||
          cmd_length = 15;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==1 ) {
 | 
			
		||||
          cmd_length = 18;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==2 ) {
 | 
			
		||||
          cmd_length = 22;
 | 
			
		||||
      } else if (READ_IN_WORD == melsec_command_type && device_points_count==4 ) {
 | 
			
		||||
          cmd_length = 30;
 | 
			
		||||
      } else {
 | 
			
		||||
        //MULTIPLE_COIL and MULTIPLE_REGISTER to do
 | 
			
		||||
        cmd_length = 0;
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
    read_length = SerialRead(recv_buff, sizeof(recv_buff));
 | 
			
		||||
   }
 | 
			
		||||
//++
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    read_length = SerialRead(recv_buff, cmd_length);
 | 
			
		||||
    if (read_length) {
 | 
			
		||||
        ControlPrintfList("RECV", recv_buff, read_length);
 | 
			
		||||
        return MelsecTransformRecvBuffToData(p_read_item, recv_buff);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -319,6 +319,8 @@ typedef struct
 | 
			
		|||
#define IOCTRL_CAMERA_SET_EFFECT            (28)     //set effect
 | 
			
		||||
#define IOCTRL_CAMERA_SET_EXPOSURE          (29)     //set auto exposure
 | 
			
		||||
/*********************shell***********************/
 | 
			
		||||
 | 
			
		||||
#ifndef SEPARATE_COMPILE
 | 
			
		||||
//for int func(int argc, char *agrv[])
 | 
			
		||||
#define PRIV_SHELL_CMD_MAIN_ATTR (SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -335,6 +337,15 @@ typedef struct
 | 
			
		|||
#define PRIV_SHELL_CMD_FUNCTION(_func, _desc, _attr)  \
 | 
			
		||||
    SHELL_EXPORT_CMD(_attr, _func, _func, _desc)
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
//for int func(int argc, char *agrv[])
 | 
			
		||||
#define PRIV_SHELL_CMD_MAIN_ATTR() 
 | 
			
		||||
 | 
			
		||||
//for int func(int i, char ch, char *str)
 | 
			
		||||
#define PRIV_SHELL_CMD_FUNC_ATTR()
 | 
			
		||||
#define PRIV_SHELL_CMD_FUNCTION(_func, _desc, _attr) 
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
/**********************mutex**************************/
 | 
			
		||||
 | 
			
		||||
int PrivMutexCreate(pthread_mutex_t *p_mutex, const pthread_mutexattr_t *attr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,33 +32,33 @@ extern "C" {
 | 
			
		|||
typedef int   pid_t;
 | 
			
		||||
typedef unsigned long int pthread_t; 
 | 
			
		||||
 | 
			
		||||
struct sched_param {
 | 
			
		||||
    int    sched_priority; /* process execution scheduling priority */
 | 
			
		||||
    size_t slice;          /* time slice in SCHED_RR mode (ms) */
 | 
			
		||||
};
 | 
			
		||||
typedef struct pthread_attr {
 | 
			
		||||
    unsigned char      is_initialized;  /* if the attr is initialized set to 1, otherwise set to 0 */
 | 
			
		||||
    void              *stackaddr;       /* the start addr of the stack of the pthead */
 | 
			
		||||
    size_t             stacksize;       /* the size of the stack of the pthead */
 | 
			
		||||
    unsigned char      contentionscope; /* the scope of contention, only PTHREAD_SCOPE_SYSTEM is supported */
 | 
			
		||||
    unsigned char      inheritsched;    /* when set to PTHREAD_INHERIT_SCHED, specifies that the thread scheduling attributes
 | 
			
		||||
                                           shall be inherited from the creating thread, and the scheduling attributes in this
 | 
			
		||||
                                           attr argument shall be ignored */
 | 
			
		||||
    unsigned char      schedpolicy;     /* the sched policy of the thread */
 | 
			
		||||
    struct sched_param schedparam;      /* the parameter of the thread scheduling */
 | 
			
		||||
    size_t             guardsize;       /* guardsize is set to protect the stack, not supported */
 | 
			
		||||
    unsigned char      detachstate;     /* when set to PTHREAD_CREATE_JOINABLE, thread will not end untill the creating thread end */
 | 
			
		||||
} pthread_attr_t;
 | 
			
		||||
// struct sched_param {
 | 
			
		||||
//     int    sched_priority; /* process execution scheduling priority */
 | 
			
		||||
//     size_t slice;          /* time slice in SCHED_RR mode (ms) */
 | 
			
		||||
// };
 | 
			
		||||
// typedef struct pthread_attr {
 | 
			
		||||
//     unsigned char      is_initialized;  /* if the attr is initialized set to 1, otherwise set to 0 */
 | 
			
		||||
//     void              *stackaddr;       /* the start addr of the stack of the pthead */
 | 
			
		||||
//     size_t             stacksize;       /* the size of the stack of the pthead */
 | 
			
		||||
//     unsigned char      contentionscope; /* the scope of contention, only PTHREAD_SCOPE_SYSTEM is supported */
 | 
			
		||||
//     unsigned char      inheritsched;    /* when set to PTHREAD_INHERIT_SCHED, specifies that the thread scheduling attributes
 | 
			
		||||
//                                            shall be inherited from the creating thread, and the scheduling attributes in this
 | 
			
		||||
//                                            attr argument shall be ignored */
 | 
			
		||||
//     unsigned char      schedpolicy;     /* the sched policy of the thread */
 | 
			
		||||
//     struct sched_param schedparam;      /* the parameter of the thread scheduling */
 | 
			
		||||
//     size_t             guardsize;       /* guardsize is set to protect the stack, not supported */
 | 
			
		||||
//     unsigned char      detachstate;     /* when set to PTHREAD_CREATE_JOINABLE, thread will not end untill the creating thread end */
 | 
			
		||||
// } pthread_attr_t;
 | 
			
		||||
 | 
			
		||||
typedef struct pthread_mutexattr {
 | 
			
		||||
    int is_initialized;
 | 
			
		||||
    int type;
 | 
			
		||||
    int protocol;
 | 
			
		||||
    int prioceiling;
 | 
			
		||||
    int pshared;
 | 
			
		||||
} pthread_mutexattr_t;
 | 
			
		||||
// typedef struct pthread_mutexattr {
 | 
			
		||||
//     int is_initialized;
 | 
			
		||||
//     int type;
 | 
			
		||||
//     int protocol;
 | 
			
		||||
//     int prioceiling;
 | 
			
		||||
//     int pshared;
 | 
			
		||||
// } pthread_mutexattr_t;
 | 
			
		||||
 | 
			
		||||
typedef int pthread_mutex_t ;
 | 
			
		||||
// typedef int pthread_mutex_t ;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,16 @@ extern "C" {
 | 
			
		|||
//     PTHREAD_SCOPE_SYSTEM,
 | 
			
		||||
// };
 | 
			
		||||
 | 
			
		||||
// #define NULL_PARAM_CHECK(param)                                                                  \
 | 
			
		||||
//     do                                                                                         \
 | 
			
		||||
//     {                                                                                          \
 | 
			
		||||
//         if(param == NULL) {                                                                    \
 | 
			
		||||
//             printf("PARAM CHECK FAILED ...%s %d %s is NULL.\n", __func__, __LINE__, #param);   \
 | 
			
		||||
//             while(1);                                                                          \
 | 
			
		||||
//         }                                                                                      \
 | 
			
		||||
//     }while (0) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef int   pid_t;
 | 
			
		||||
// typedef int pthread_mutex_t ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,8 +67,8 @@ int pthread_attr_init(pthread_attr_t *attr)
 | 
			
		|||
int pthread_attr_setschedparam(pthread_attr_t           *attr,
 | 
			
		||||
                               struct sched_param const *param)
 | 
			
		||||
{
 | 
			
		||||
    NULL_PARAM_CHECK(attr != NULL);
 | 
			
		||||
    NULL_PARAM_CHECK(param != NULL);
 | 
			
		||||
    // NULL_PARAM_CHECK(attr);
 | 
			
		||||
    // NULL_PARAM_CHECK(param);
 | 
			
		||||
 | 
			
		||||
    attr->schedparam.sched_priority = param->sched_priority;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
 | 
			
		||||
#ifdef  SEPARATE_COMPILE
 | 
			
		||||
 | 
			
		||||
#include "../../../../../../Ubiquitous/XiZi/arch/kswitch.h"
 | 
			
		||||
#include "../../../../../../Ubiquitous/XiZi_IIoT/arch/kswitch.h"
 | 
			
		||||
 | 
			
		||||
#define TASK_INFO      1
 | 
			
		||||
#define MEM_INFO       2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
menu "lib"
 | 
			
		||||
menu "app lib"
 | 
			
		||||
    choice
 | 
			
		||||
            prompt "chose a kind of lib for app"
 | 
			
		||||
            default APP_SELECT_NEWLIB
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
# SRC_DIR := lvgl
 | 
			
		||||
 | 
			
		||||
SRC_DIR := 
 | 
			
		||||
ifeq ($(CONFIG_APP_SELECT_NEWLIB),y)
 | 
			
		||||
	ifeq ($(CONFIG_SEPARATE_COMPILE),y)
 | 
			
		||||
		SRC_DIR += app_newlib
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -686,7 +686,7 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
 | 
			
		|||
//#define LV_FS_STDIO_PATH "/home/john/"    /*Set the working directory. If commented it will be "./" */
 | 
			
		||||
 | 
			
		||||
#define LV_USE_FS_POSIX '\0'        /*Uses open, read, etc*/
 | 
			
		||||
//#define LV_FS_POSIX_PATH "/home/john/"    /*Set the working directory. If commented it will be "./" */
 | 
			
		||||
// #define LV_FS_POSIX_PATH "G:"    /*Set the working directory. If commented it will be "./" */
 | 
			
		||||
 | 
			
		||||
#define LV_USE_FS_WIN32 '\0'        /*Uses CreateFile, ReadFile, etc*/
 | 
			
		||||
//#define LV_FS_WIN32_PATH "C:\\Users\\john\\"    /*Set the working directory. If commented it will be ".\\" */
 | 
			
		||||
| 
						 | 
				
			
			@ -716,6 +716,13 @@ e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
 | 
			
		|||
# define LV_FREETYPE_CACHE_SIZE (16 * 1024)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Built-in TTF decoder */
 | 
			
		||||
#define LV_USE_TINY_TTF 1
 | 
			
		||||
#if LV_USE_TINY_TTF
 | 
			
		||||
    /* Enable loading TTF data from files */
 | 
			
		||||
    #define LV_TINY_TTF_FILE_SUPPORT 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*Rlottie library*/
 | 
			
		||||
#define LV_USE_RLOTTIE 0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
#ifndef	_DIRENT_H
 | 
			
		||||
#define	_DIRENT_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
 | 
			
		||||
#define __NEED_ino_t
 | 
			
		||||
#define __NEED_off_t
 | 
			
		||||
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
 | 
			
		||||
#define __NEED_size_t
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <bits/alltypes.h>
 | 
			
		||||
 | 
			
		||||
#include <bits/dirent.h>
 | 
			
		||||
 | 
			
		||||
typedef struct __dirstream DIR;
 | 
			
		||||
 | 
			
		||||
#define d_fileno d_ino
 | 
			
		||||
 | 
			
		||||
int            closedir(DIR *);
 | 
			
		||||
DIR           *fdopendir(int);
 | 
			
		||||
DIR           *opendir(const char *);
 | 
			
		||||
struct dirent *readdir(DIR *);
 | 
			
		||||
int            readdir_r(DIR *__restrict, struct dirent *__restrict, struct dirent **__restrict);
 | 
			
		||||
void           rewinddir(DIR *);
 | 
			
		||||
int            dirfd(DIR *);
 | 
			
		||||
 | 
			
		||||
int alphasort(const struct dirent **, const struct dirent **);
 | 
			
		||||
int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **));
 | 
			
		||||
 | 
			
		||||
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 | 
			
		||||
void           seekdir(DIR *, long);
 | 
			
		||||
long           telldir(DIR *);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 | 
			
		||||
#define DT_UNKNOWN 0
 | 
			
		||||
#define DT_FIFO 1
 | 
			
		||||
#define DT_CHR 2
 | 
			
		||||
#define DT_DIR 4
 | 
			
		||||
#define DT_BLK 6
 | 
			
		||||
#define DT_REG 8
 | 
			
		||||
#define DT_LNK 10
 | 
			
		||||
#define DT_SOCK 12
 | 
			
		||||
#define DT_WHT 14
 | 
			
		||||
#define IFTODT(x) ((x)>>12 & 017)
 | 
			
		||||
#define DTTOIF(x) ((x)<<12)
 | 
			
		||||
int getdents(int, struct dirent *, size_t);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _GNU_SOURCE
 | 
			
		||||
int versionsort(const struct dirent **, const struct dirent **);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
 | 
			
		||||
#define dirent64 dirent
 | 
			
		||||
#define readdir64 readdir
 | 
			
		||||
#define readdir64_r readdir_r
 | 
			
		||||
#define scandir64 scandir
 | 
			
		||||
#define alphasort64 alphasort
 | 
			
		||||
#define versionsort64 versionsort
 | 
			
		||||
#define off64_t off_t
 | 
			
		||||
#define ino64_t ino_t
 | 
			
		||||
#define getdents64 getdents
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -12,12 +12,13 @@
 | 
			
		|||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#ifndef WIN32
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
// #ifdef __linux__
 | 
			
		||||
// #include <dirent.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <transform.h>
 | 
			
		||||
// #else
 | 
			
		||||
// #include <windows.h>
 | 
			
		||||
// #endif
 | 
			
		||||
 | 
			
		||||
/*********************
 | 
			
		||||
 *      DEFINES
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +102,8 @@ static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
 | 
			
		|||
    else if(mode == LV_FS_MODE_RD) flags = O_RDONLY;
 | 
			
		||||
    else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = O_RDWR;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
#ifdef LV_FS_POSIX_PATH
 | 
			
		||||
    /*Make the path relative to the current directory (the projects root folder)*/
 | 
			
		||||
    char buf[256];
 | 
			
		||||
| 
						 | 
				
			
			@ -109,6 +112,7 @@ static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
 | 
			
		|||
    int f = open(buf, flags);
 | 
			
		||||
#else
 | 
			
		||||
    int f = open(path, flags);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    if(f < 0) return NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +267,7 @@ static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn)
 | 
			
		|||
    do {
 | 
			
		||||
        entry = readdir(dir_p);
 | 
			
		||||
        if(entry) {
 | 
			
		||||
            if(entry->d_type == DT_DIR) sprintf(fn, "/%s", entry->d_name);
 | 
			
		||||
            if(entry->d_kind == FTYPE_DIR) sprintf(fn, "/%s", entry->d_name);
 | 
			
		||||
            else strcpy(fn, entry->d_name);
 | 
			
		||||
        } else {
 | 
			
		||||
            strcpy(fn, "");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@ extern "C" {
 | 
			
		|||
#include "sjpg/lv_sjpg.h"
 | 
			
		||||
#include "freetype/lv_freetype.h"
 | 
			
		||||
#include "rlottie/lv_rlottie.h"
 | 
			
		||||
 | 
			
		||||
#include "tiny_ttf/lv_tiny_ttf.h"
 | 
			
		||||
/*********************
 | 
			
		||||
 *      DEFINES
 | 
			
		||||
 *********************/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,469 @@
 | 
			
		|||
#include "lv_tiny_ttf.h"
 | 
			
		||||
#if LV_USE_TINY_TTF
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#ifndef LV_TINY_TTF_DEFAULT_CACHE_SIZE
 | 
			
		||||
    #define LV_TINY_TTF_DEFAULT_CACHE_SIZE 4096
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef LV_TINY_TTF_CACHE_BUCKETS
 | 
			
		||||
    #define LV_TINY_TTF_CACHE_BUCKETS 16
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define STB_RECT_PACK_IMPLEMENTATION
 | 
			
		||||
#define STBRP_STATIC
 | 
			
		||||
#define STBTT_STATIC
 | 
			
		||||
#define STB_TRUETYPE_IMPLEMENTATION
 | 
			
		||||
#define STBTT_HEAP_FACTOR_SIZE_32 50
 | 
			
		||||
#define STBTT_HEAP_FACTOR_SIZE_128 20
 | 
			
		||||
#define STBTT_HEAP_FACTOR_SIZE_DEFAULT 10
 | 
			
		||||
#define STBTT_malloc(x,u)  ((void)(u),lv_mem_alloc(x))
 | 
			
		||||
#define STBTT_free(x,u)    ((void)(u),lv_mem_free(x))
 | 
			
		||||
#define TTF_CACHE_MALLOC(x)  (lv_mem_alloc(x))
 | 
			
		||||
#define TTF_CACHE_REALLOC(x,y)  (lv_mem_realloc(x,y))
 | 
			
		||||
#define TTF_CACHE_FREE(x)    (lv_mem_free(x))
 | 
			
		||||
#define TTF_MALLOC(x)  (lv_mem_alloc(x))
 | 
			
		||||
#define TTF_FREE(x)    (lv_mem_free(x))
 | 
			
		||||
typedef void * ttf_cache_handle_t;
 | 
			
		||||
typedef struct ttf_cache_entry {
 | 
			
		||||
    int key;
 | 
			
		||||
    unsigned long long age;
 | 
			
		||||
    int size;
 | 
			
		||||
    void * data;
 | 
			
		||||
} ttf_cache_entry_t;
 | 
			
		||||
typedef struct ttf_cache_bucket {
 | 
			
		||||
    int capacity;
 | 
			
		||||
    ttf_cache_entry_t * entries;
 | 
			
		||||
} ttf_cache_bucket_t;
 | 
			
		||||
 | 
			
		||||
typedef struct ttf_cache {
 | 
			
		||||
    int max_size;
 | 
			
		||||
    int bucket_size;
 | 
			
		||||
    int total_size;
 | 
			
		||||
    unsigned long long age;
 | 
			
		||||
    ttf_cache_bucket_t * buckets;
 | 
			
		||||
} ttf_cache_t;
 | 
			
		||||
 | 
			
		||||
static unsigned long long ttf_cache_get_oldest_age(ttf_cache_handle_t * handle)
 | 
			
		||||
{
 | 
			
		||||
    ttf_cache_t * cache = (ttf_cache_t *)handle;
 | 
			
		||||
    unsigned long long result = (unsigned long long) - 1;
 | 
			
		||||
    for(int i = 0; i < cache->bucket_size; ++i) {
 | 
			
		||||
        ttf_cache_bucket_t * bucket = &cache->buckets[i];
 | 
			
		||||
        if(bucket->entries != NULL) {
 | 
			
		||||
            for(int j = 0; j < bucket->capacity; ++j) {
 | 
			
		||||
                ttf_cache_entry_t * entry = &bucket->entries[j];
 | 
			
		||||
                if(entry->age != 0 && entry->age < result) {
 | 
			
		||||
                    result = entry->age;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if(result == (unsigned long long) - 1) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
static ttf_cache_handle_t ttf_cache_create(int max_size, int buckets)
 | 
			
		||||
{
 | 
			
		||||
    ttf_cache_t * result = (ttf_cache_t *)TTF_CACHE_MALLOC(sizeof(ttf_cache_t));
 | 
			
		||||
    if(result == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    result->age = 1;
 | 
			
		||||
    result->max_size = max_size;
 | 
			
		||||
    result->total_size = 0;
 | 
			
		||||
    result->bucket_size = buckets;
 | 
			
		||||
    result->buckets = (ttf_cache_bucket_t *)TTF_CACHE_MALLOC(buckets * sizeof(ttf_cache_bucket_t));
 | 
			
		||||
    if(result->buckets == NULL) {
 | 
			
		||||
        TTF_CACHE_FREE(result);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    for(int i = 0; i < buckets; ++i) {
 | 
			
		||||
        result->buckets[i].capacity = 0;
 | 
			
		||||
        result->buckets[i].entries = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
static void * ttf_cache_get(ttf_cache_handle_t handle, int key)
 | 
			
		||||
{
 | 
			
		||||
    if(handle == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    ttf_cache_t * cache = (ttf_cache_t *)handle;
 | 
			
		||||
    int ci = key % cache->bucket_size;
 | 
			
		||||
    ttf_cache_bucket_t * bucket = &cache->buckets[ci];
 | 
			
		||||
    for(int i = 0; i < bucket->capacity; ++i) {
 | 
			
		||||
        ttf_cache_entry_t * entry = &bucket->entries[i];
 | 
			
		||||
        if(entry->age != 0 && entry->key == key) {
 | 
			
		||||
            entry->age = ++cache->age;
 | 
			
		||||
            return entry->data;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
static void * ttf_cache_add(ttf_cache_handle_t handle, int key, int size)
 | 
			
		||||
{
 | 
			
		||||
    if(handle == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    ttf_cache_t * cache = (ttf_cache_t *)handle;
 | 
			
		||||
    int ci = key % cache->bucket_size;
 | 
			
		||||
    ttf_cache_bucket_t * bucket = &cache->buckets[ci];
 | 
			
		||||
    for(int i = 0; i < bucket->capacity; ++i) {
 | 
			
		||||
        ttf_cache_entry_t * entry = &bucket->entries[i];
 | 
			
		||||
        if(entry->age != 0 && entry->key == key) {
 | 
			
		||||
            TTF_CACHE_FREE(entry->data);
 | 
			
		||||
            cache->total_size -= entry->size;
 | 
			
		||||
            entry->age = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    while(cache->total_size > 0 && (cache->max_size < cache->total_size + size)) {
 | 
			
		||||
        // expire entries
 | 
			
		||||
        unsigned long long oldest = ttf_cache_get_oldest_age(handle);
 | 
			
		||||
        if(oldest == 0) {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        for(int i = 0; i < cache->bucket_size; ++i) {
 | 
			
		||||
            ttf_cache_bucket_t * bucket2 = &cache->buckets[i];
 | 
			
		||||
            for(int j = 0; j < bucket2->capacity; ++j) {
 | 
			
		||||
                ttf_cache_entry_t * entry = &bucket2->entries[j];
 | 
			
		||||
                if(entry->age == oldest) {
 | 
			
		||||
                    if(entry->data != NULL) {
 | 
			
		||||
                        TTF_CACHE_FREE(entry->data);
 | 
			
		||||
                        entry->data = NULL;
 | 
			
		||||
                        entry->age = 0;
 | 
			
		||||
                        cache->total_size -= entry->size;
 | 
			
		||||
                        entry->size = 0;
 | 
			
		||||
                        i = cache->bucket_size;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if(bucket->entries == NULL) {
 | 
			
		||||
        bucket->capacity = 4;
 | 
			
		||||
        bucket->entries = (ttf_cache_entry_t *)TTF_CACHE_MALLOC(sizeof(ttf_cache_entry_t) * bucket->capacity);
 | 
			
		||||
        if(bucket->entries == NULL) {
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
        for(int i = 0; i < bucket->capacity; ++i) {
 | 
			
		||||
            bucket->entries[i].age = 0;
 | 
			
		||||
            bucket->entries[i].data = NULL;
 | 
			
		||||
            bucket->entries[i].size = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    for(int i = 0; i < bucket->capacity; ++i) {
 | 
			
		||||
        ttf_cache_entry_t * entry = &bucket->entries[i];
 | 
			
		||||
        if(entry->age == 0) {
 | 
			
		||||
            entry->data = TTF_CACHE_MALLOC(size);
 | 
			
		||||
            if(entry->data == NULL) {
 | 
			
		||||
                return NULL;
 | 
			
		||||
            }
 | 
			
		||||
            entry->size = size;
 | 
			
		||||
            entry->age = cache->age;
 | 
			
		||||
            entry->key = key;
 | 
			
		||||
            cache->total_size += size;
 | 
			
		||||
            return entry->data;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    int newcap = bucket->capacity * 2;
 | 
			
		||||
    ttf_cache_entry_t * te = (ttf_cache_entry_t *)TTF_CACHE_REALLOC(bucket->entries, sizeof(ttf_cache_entry_t) * newcap);
 | 
			
		||||
    if(te == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    bucket->entries = te;
 | 
			
		||||
    for(int i = bucket->capacity; i < newcap; ++i) {
 | 
			
		||||
        bucket->entries[i].age = 0;
 | 
			
		||||
        bucket->entries[i].data = NULL;
 | 
			
		||||
        bucket->entries[i].size = 0;
 | 
			
		||||
    }
 | 
			
		||||
    void * result = TTF_CACHE_MALLOC(size);
 | 
			
		||||
    bucket->entries[bucket->capacity].data = result;
 | 
			
		||||
    if(result == NULL) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    bucket->entries[bucket->capacity].size = size;
 | 
			
		||||
    bucket->entries[bucket->capacity].age = cache->age;
 | 
			
		||||
    bucket->entries[bucket->capacity].key = key;
 | 
			
		||||
    bucket->capacity = newcap;
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ttf_cache_clear(ttf_cache_handle_t handle)
 | 
			
		||||
{
 | 
			
		||||
    if(handle == NULL) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    ttf_cache_t * cache = (ttf_cache_t *)handle;
 | 
			
		||||
    for(int i = 0; i < cache->bucket_size; ++i) {
 | 
			
		||||
        ttf_cache_bucket_t * bucket = &cache->buckets[i];
 | 
			
		||||
        if(bucket->entries != NULL) {
 | 
			
		||||
            for(int j = 0; j < bucket->capacity; ++j) {
 | 
			
		||||
                ttf_cache_entry_t * entry = &bucket->entries[j];
 | 
			
		||||
                if(entry->age != 0 && entry->data != NULL) {
 | 
			
		||||
                    TTF_CACHE_FREE(entry->data);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            TTF_CACHE_FREE(cache->buckets[i].entries);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
static void ttf_cache_destroy(ttf_cache_handle_t handle)
 | 
			
		||||
{
 | 
			
		||||
    ttf_cache_clear(handle);
 | 
			
		||||
    TTF_CACHE_FREE((ttf_cache_t *)handle);
 | 
			
		||||
}
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
// a hydra stream that can be in memory or from a file
 | 
			
		||||
typedef struct ttf_cb_stream {
 | 
			
		||||
    lv_fs_file_t * file;
 | 
			
		||||
    const void * data;
 | 
			
		||||
    size_t size;
 | 
			
		||||
    size_t position;
 | 
			
		||||
} ttf_cb_stream_t;
 | 
			
		||||
 | 
			
		||||
static void ttf_cb_stream_read(ttf_cb_stream_t * stream, void * data, size_t to_read)
 | 
			
		||||
{
 | 
			
		||||
    if(stream->file != NULL) {
 | 
			
		||||
        uint32_t br;
 | 
			
		||||
        lv_fs_read(stream->file, data, to_read, &br);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        if(to_read + stream->position >= stream->size) {
 | 
			
		||||
            to_read = stream->size - stream->position;
 | 
			
		||||
        }
 | 
			
		||||
        memcpy(data, ((const unsigned char *)stream->data + stream->position), to_read);
 | 
			
		||||
        stream->position += to_read;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
static void ttf_cb_stream_seek(ttf_cb_stream_t * stream, size_t position)
 | 
			
		||||
{
 | 
			
		||||
    if(stream->file != NULL) {
 | 
			
		||||
        lv_fs_seek(stream->file, position, LV_FS_SEEK_SET);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        if(position > stream->size) {
 | 
			
		||||
            stream->position = stream->size;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            stream->position = position;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define STBTT_STREAM_TYPE ttf_cb_stream_t*
 | 
			
		||||
#define STBTT_STREAM_SEEK(s,x) ttf_cb_stream_seek(s,x);
 | 
			
		||||
#define STBTT_STREAM_READ(s,x,y) ttf_cb_stream_read(s,x,y);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "stb_rect_pack.h"
 | 
			
		||||
#include "stb_truetype_htcw.h"
 | 
			
		||||
 | 
			
		||||
typedef struct ttf_font_desc {
 | 
			
		||||
    lv_fs_file_t file;
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
    ttf_cb_stream_t stream;
 | 
			
		||||
#else
 | 
			
		||||
    const uint8_t * stream;
 | 
			
		||||
#endif
 | 
			
		||||
    stbtt_fontinfo info;
 | 
			
		||||
    ttf_cache_handle_t cache;
 | 
			
		||||
    float scale;
 | 
			
		||||
    int ascent;
 | 
			
		||||
    int descent;
 | 
			
		||||
} ttf_font_desc_t;
 | 
			
		||||
 | 
			
		||||
static bool ttf_get_glyph_dsc_cb(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter,
 | 
			
		||||
                                 uint32_t unicode_letter_next)
 | 
			
		||||
{
 | 
			
		||||
    if(unicode_letter < 0x20 ||
 | 
			
		||||
       unicode_letter == 0xf8ff || /*LV_SYMBOL_DUMMY*/
 | 
			
		||||
       unicode_letter == 0x200c) { /*ZERO WIDTH NON-JOINER*/
 | 
			
		||||
        dsc_out->box_w = 0;
 | 
			
		||||
        dsc_out->adv_w = 0;
 | 
			
		||||
        dsc_out->box_h = 0;                                /*height of the bitmap in [px]*/
 | 
			
		||||
        dsc_out->ofs_x = 0;                                           /*X offset of the bitmap in [pf]*/
 | 
			
		||||
        dsc_out->ofs_y = 0;                                           /*Y offset of the bitmap in [pf]*/
 | 
			
		||||
        dsc_out->bpp = 0;
 | 
			
		||||
        dsc_out->is_placeholder = false;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    ttf_font_desc_t * dsc = (ttf_font_desc_t *)font->dsc;
 | 
			
		||||
    int g1 = stbtt_FindGlyphIndex(&dsc->info, (int)unicode_letter);
 | 
			
		||||
    int x1, y1, x2, y2;
 | 
			
		||||
 | 
			
		||||
    stbtt_GetGlyphBitmapBox(&dsc->info, g1, dsc->scale, dsc->scale, &x1, &y1, &x2, &y2);
 | 
			
		||||
    int g2 = 0;
 | 
			
		||||
    if(unicode_letter_next != 0) {
 | 
			
		||||
        g2 = stbtt_FindGlyphIndex(&dsc->info, (int)unicode_letter_next);
 | 
			
		||||
    }
 | 
			
		||||
    int advw, lsb;
 | 
			
		||||
    stbtt_GetGlyphHMetrics(&dsc->info, g1, &advw, &lsb);
 | 
			
		||||
    int k = stbtt_GetGlyphKernAdvance(&dsc->info, g1, g2);
 | 
			
		||||
    dsc_out->adv_w = (uint16_t)floor((((float)advw + (float)k) * dsc->scale) +
 | 
			
		||||
                                     0.5f); /*Horizontal space required by the glyph in [px]*/
 | 
			
		||||
 | 
			
		||||
    dsc_out->adv_w = (uint16_t)floor((((float)advw + (float)k) * dsc->scale) +
 | 
			
		||||
                                     0.5f); /*Horizontal space required by the glyph in [px]*/
 | 
			
		||||
    dsc_out->box_w = (x2 - x1 + 1);                                /*width of the bitmap in [px]*/
 | 
			
		||||
    dsc_out->box_h = (y2 - y1 + 1);                                /*height of the bitmap in [px]*/
 | 
			
		||||
    dsc_out->ofs_x = x1;                                           /*X offset of the bitmap in [pf]*/
 | 
			
		||||
    dsc_out->ofs_y = -y2; /*Y offset of the bitmap measured from the as line*/
 | 
			
		||||
    dsc_out->bpp = 8;     /*Bits per pixel: 1/2/4/8*/
 | 
			
		||||
    dsc_out->is_placeholder = false;
 | 
			
		||||
    return true;          /*true: glyph found; false: glyph was not found*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const uint8_t * ttf_get_glyph_bitmap_cb(const lv_font_t * font, uint32_t unicode_letter)
 | 
			
		||||
{
 | 
			
		||||
    ttf_font_desc_t * dsc = (ttf_font_desc_t *)font->dsc;
 | 
			
		||||
    const stbtt_fontinfo * info = (const stbtt_fontinfo *)&dsc->info;
 | 
			
		||||
    uint8_t * buffer = (uint8_t *)ttf_cache_get(dsc->cache, unicode_letter);
 | 
			
		||||
    if(buffer == NULL) {
 | 
			
		||||
        int g1 = stbtt_FindGlyphIndex(info, (int)unicode_letter);
 | 
			
		||||
        int x1, y1, x2, y2;
 | 
			
		||||
        stbtt_GetGlyphBitmapBox(info, g1, dsc->scale, dsc->scale, &x1, &y1, &x2, &y2);
 | 
			
		||||
        int w, h;
 | 
			
		||||
        w = x2 - x1 + 1;
 | 
			
		||||
        h = y2 - y1 + 1;
 | 
			
		||||
        int buffer_size = w * h;
 | 
			
		||||
        buffer = ttf_cache_add(dsc->cache, unicode_letter, buffer_size);
 | 
			
		||||
        if(buffer == NULL) {
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
        memset(buffer, 0, buffer_size);
 | 
			
		||||
        stbtt_MakeGlyphBitmap(info, buffer, w, h, w, dsc->scale, dsc->scale, g1);
 | 
			
		||||
    }
 | 
			
		||||
    return buffer; /*Or NULL if not found*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static lv_font_t * lv_tiny_ttf_create(const char * path, const void * data, size_t data_size,  lv_coord_t line_height,
 | 
			
		||||
                                      size_t cache_size)
 | 
			
		||||
{
 | 
			
		||||
    LV_UNUSED(data_size);
 | 
			
		||||
    if((path == NULL && data == NULL) || 0 >= line_height) {
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: invalid argument\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    if(cache_size < 1) {
 | 
			
		||||
        cache_size = LV_TINY_TTF_DEFAULT_CACHE_SIZE;
 | 
			
		||||
    }
 | 
			
		||||
    ttf_font_desc_t * dsc = (ttf_font_desc_t *)TTF_MALLOC(sizeof(ttf_font_desc_t));
 | 
			
		||||
    if(dsc == NULL) {
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: out of memory\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    dsc->cache = ttf_cache_create(cache_size, LV_TINY_TTF_CACHE_BUCKETS);
 | 
			
		||||
    if(dsc->cache == NULL) {
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: out of memory\n");
 | 
			
		||||
        TTF_FREE(dsc);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
    if(path != NULL) {
 | 
			
		||||
 | 
			
		||||
        if(LV_FS_RES_OK != lv_fs_open(&dsc->file, path, LV_FS_MODE_RD)) {
 | 
			
		||||
            printf("tiny_ttf:error is %s \n",lv_fs_open(&dsc->file, path, LV_FS_MODE_RD));
 | 
			
		||||
            ttf_cache_destroy(dsc->cache);
 | 
			
		||||
            TTF_FREE(dsc);
 | 
			
		||||
            LV_LOG_ERROR("tiny_ttf: unable to open %s\n", path);
 | 
			
		||||
            printf("tiny_ttf: unable to open %s\n", path);
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
        dsc->stream.file = &dsc->file;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        dsc->stream.file = NULL;
 | 
			
		||||
        dsc->stream.data = (const uint8_t *)data;
 | 
			
		||||
        dsc->stream.size = data_size;
 | 
			
		||||
        dsc->stream.position = 0;
 | 
			
		||||
    }
 | 
			
		||||
    if(0 == stbtt_InitFont(&dsc->info, &dsc->stream, stbtt_GetFontOffsetForIndex(&dsc->stream, 0))) {
 | 
			
		||||
        ttf_cache_destroy(dsc->cache);
 | 
			
		||||
        TTF_FREE(dsc);
 | 
			
		||||
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: init failed\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
    dsc->stream = (const uint8_t *)data;
 | 
			
		||||
    if(0 == stbtt_InitFont(&dsc->info, dsc->stream, stbtt_GetFontOffsetForIndex(dsc->stream, 0))) {
 | 
			
		||||
        ttf_cache_destroy(dsc->cache);
 | 
			
		||||
        TTF_FREE(dsc);
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: init failed\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    float scale = stbtt_ScaleForPixelHeight(&dsc->info, line_height);
 | 
			
		||||
    lv_font_t * out_font = (lv_font_t *)TTF_MALLOC(sizeof(lv_font_t));
 | 
			
		||||
    if(out_font == NULL) {
 | 
			
		||||
        ttf_cache_destroy(dsc->cache);
 | 
			
		||||
        TTF_FREE(dsc);
 | 
			
		||||
        LV_LOG_ERROR("tiny_ttf: out of memory\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    out_font->line_height = line_height;
 | 
			
		||||
    out_font->fallback = NULL;
 | 
			
		||||
    out_font->dsc = dsc;
 | 
			
		||||
    int line_gap;
 | 
			
		||||
    stbtt_GetFontVMetrics(&dsc->info, &dsc->ascent, &dsc->descent, &line_gap);
 | 
			
		||||
    dsc->scale = scale;
 | 
			
		||||
    out_font->base_line = line_height - (lv_coord_t)(dsc->ascent * scale);
 | 
			
		||||
    out_font->underline_position = (uint8_t)line_height - dsc->descent;
 | 
			
		||||
    out_font->underline_thickness = 0;
 | 
			
		||||
    out_font->subpx = 0;
 | 
			
		||||
    out_font->get_glyph_dsc = ttf_get_glyph_dsc_cb;
 | 
			
		||||
    out_font->get_glyph_bitmap = ttf_get_glyph_bitmap_cb;
 | 
			
		||||
    return out_font;
 | 
			
		||||
}
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_file_ex(const char * path, lv_coord_t line_height, size_t cache_size)
 | 
			
		||||
{
 | 
			
		||||
    return lv_tiny_ttf_create(path, NULL, 0, line_height, cache_size);
 | 
			
		||||
}
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_file(const char * path, lv_coord_t line_height)
 | 
			
		||||
{
 | 
			
		||||
    return lv_tiny_ttf_create(path, NULL, 0, line_height, 0);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_data_ex(const void * data, size_t data_size, lv_coord_t line_height, size_t cache_size)
 | 
			
		||||
{
 | 
			
		||||
    return lv_tiny_ttf_create(NULL, data, data_size, line_height, cache_size);
 | 
			
		||||
}
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_data(const void * data, size_t data_size, lv_coord_t line_height)
 | 
			
		||||
{
 | 
			
		||||
    return lv_tiny_ttf_create(NULL, data, data_size, line_height, 0);
 | 
			
		||||
}
 | 
			
		||||
void lv_tiny_ttf_set_size(lv_font_t * font, lv_coord_t line_height)
 | 
			
		||||
{
 | 
			
		||||
    ttf_font_desc_t * dsc = (ttf_font_desc_t *)font->dsc;
 | 
			
		||||
    if(line_height > 0) {
 | 
			
		||||
        font->line_height = line_height;
 | 
			
		||||
        dsc->scale = stbtt_ScaleForPixelHeight(&dsc->info, line_height);
 | 
			
		||||
        font->base_line = line_height - (lv_coord_t)(dsc->ascent * dsc->scale);
 | 
			
		||||
        font->underline_position = (uint8_t)line_height - dsc->descent;
 | 
			
		||||
        ttf_cache_clear(dsc->cache);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
void lv_tiny_ttf_destroy(lv_font_t * font)
 | 
			
		||||
{
 | 
			
		||||
    if(font != NULL) {
 | 
			
		||||
        if(font->dsc != NULL) {
 | 
			
		||||
            ttf_font_desc_t * ttf = (ttf_font_desc_t *)font->dsc;
 | 
			
		||||
            ttf_cache_destroy(ttf->cache);
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
            if(ttf->stream.file != NULL) {
 | 
			
		||||
                lv_fs_close(&ttf->file);
 | 
			
		||||
            }
 | 
			
		||||
#endif
 | 
			
		||||
            TTF_FREE(ttf);
 | 
			
		||||
        }
 | 
			
		||||
        TTF_FREE(font);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file lv_templ.h
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef LV_TINY_TTF_H
 | 
			
		||||
#define LV_TINY_TTF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*********************
 | 
			
		||||
 *      INCLUDES
 | 
			
		||||
 *********************/
 | 
			
		||||
#include "../../../lvgl.h"
 | 
			
		||||
 | 
			
		||||
#if LV_USE_TINY_TTF
 | 
			
		||||
 | 
			
		||||
/*********************
 | 
			
		||||
 *      DEFINES
 | 
			
		||||
 *********************/
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 *      TYPEDEFS
 | 
			
		||||
 **********************/
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 * GLOBAL PROTOTYPES
 | 
			
		||||
 **********************/
 | 
			
		||||
#if LV_TINY_TTF_FILE_SUPPORT !=0
 | 
			
		||||
// create a font from the specified file or path with the specified line height.
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_file(const char * path, lv_coord_t line_height);
 | 
			
		||||
 | 
			
		||||
// create a font from the specified file or path with the specified line height with the specified cache size.
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_file_ex(const char * path, lv_coord_t line_height, size_t cache_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// create a font from the specified data pointer with the specified line height.
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_data(const void * data, size_t data_size, lv_coord_t line_height);
 | 
			
		||||
 | 
			
		||||
// create a font from the specified data pointer with the specified line height and the specified cache size.
 | 
			
		||||
lv_font_t * lv_tiny_ttf_create_data_ex(const void * data, size_t data_size, lv_coord_t line_height, size_t cache_size);
 | 
			
		||||
 | 
			
		||||
// set the size of the font to a new line_height
 | 
			
		||||
void lv_tiny_ttf_set_size(lv_font_t * font, lv_coord_t line_height);
 | 
			
		||||
 | 
			
		||||
// destroy a font previously created with lv_tiny_ttf_create_xxxx()
 | 
			
		||||
void lv_tiny_ttf_destroy(lv_font_t * font);
 | 
			
		||||
 | 
			
		||||
/**********************
 | 
			
		||||
 *      MACROS
 | 
			
		||||
 **********************/
 | 
			
		||||
 | 
			
		||||
#endif /*LV_USE_TINY_TTF*/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
} /*extern "C"*/
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*LV_TINY_TTF_H*/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,632 @@
 | 
			
		|||
// stb_rect_pack.h - v1.01 - public domain - rectangle packing
 | 
			
		||||
// Sean Barrett 2014
 | 
			
		||||
//
 | 
			
		||||
// Useful for e.g. packing rectangular textures into an atlas.
 | 
			
		||||
// Does not do rotation.
 | 
			
		||||
//
 | 
			
		||||
// Before #including,
 | 
			
		||||
//
 | 
			
		||||
//    #define STB_RECT_PACK_IMPLEMENTATION
 | 
			
		||||
//
 | 
			
		||||
// in the file that you want to have the implementation.
 | 
			
		||||
//
 | 
			
		||||
// Not necessarily the awesomest packing method, but better than
 | 
			
		||||
// the totally naive one in stb_truetype (which is primarily what
 | 
			
		||||
// this is meant to replace).
 | 
			
		||||
//
 | 
			
		||||
// Has only had a few tests run, may have issues.
 | 
			
		||||
//
 | 
			
		||||
// More docs to come.
 | 
			
		||||
//
 | 
			
		||||
// No memory allocations; uses qsort() and assert() from stdlib.
 | 
			
		||||
// Can override those by defining STBRP_SORT and STBRP_ASSERT.
 | 
			
		||||
//
 | 
			
		||||
// This library currently uses the Skyline Bottom-Left algorithm.
 | 
			
		||||
//
 | 
			
		||||
// Please note: better rectangle packers are welcome! Please
 | 
			
		||||
// implement them to the same API, but with a different init
 | 
			
		||||
// function.
 | 
			
		||||
//
 | 
			
		||||
// Credits
 | 
			
		||||
//
 | 
			
		||||
//  Library
 | 
			
		||||
//    Sean Barrett
 | 
			
		||||
//  Minor features
 | 
			
		||||
//    Martins Mozeiko
 | 
			
		||||
//    github:IntellectualKitty
 | 
			
		||||
//
 | 
			
		||||
//  Bugfixes / warning fixes
 | 
			
		||||
//    Jeremy Jaussaud
 | 
			
		||||
//    Fabian Giesen
 | 
			
		||||
//
 | 
			
		||||
// Version history:
 | 
			
		||||
//
 | 
			
		||||
//     1.01  (2021-07-11)  always use large rect mode, expose STBRP__MAXVAL in public section
 | 
			
		||||
//     1.00  (2019-02-25)  avoid small space waste; gracefully fail too-wide rectangles
 | 
			
		||||
//     0.99  (2019-02-07)  warning fixes
 | 
			
		||||
//     0.11  (2017-03-03)  return packing success/fail result
 | 
			
		||||
//     0.10  (2016-10-25)  remove cast-away-const to avoid warnings
 | 
			
		||||
//     0.09  (2016-08-27)  fix compiler warnings
 | 
			
		||||
//     0.08  (2015-09-13)  really fix bug with empty rects (w=0 or h=0)
 | 
			
		||||
//     0.07  (2015-09-13)  fix bug with empty rects (w=0 or h=0)
 | 
			
		||||
//     0.06  (2015-04-15)  added STBRP_SORT to allow replacing qsort
 | 
			
		||||
//     0.05:  added STBRP_ASSERT to allow replacing assert
 | 
			
		||||
//     0.04:  fixed minor bug in STBRP_LARGE_RECTS support
 | 
			
		||||
//     0.01:  initial release
 | 
			
		||||
//
 | 
			
		||||
// LICENSE
 | 
			
		||||
//
 | 
			
		||||
//   See end of file for license information.
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//       INCLUDE SECTION
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef STB_INCLUDE_STB_RECT_PACK_H
 | 
			
		||||
#define STB_INCLUDE_STB_RECT_PACK_H
 | 
			
		||||
 | 
			
		||||
#define STB_RECT_PACK_VERSION  1
 | 
			
		||||
 | 
			
		||||
#ifdef STBRP_STATIC
 | 
			
		||||
    #define STBRP_DEF static
 | 
			
		||||
#else
 | 
			
		||||
    #define STBRP_DEF extern
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct stbrp_context stbrp_context;
 | 
			
		||||
typedef struct stbrp_node    stbrp_node;
 | 
			
		||||
typedef struct stbrp_rect    stbrp_rect;
 | 
			
		||||
 | 
			
		||||
typedef int            stbrp_coord;
 | 
			
		||||
 | 
			
		||||
#define STBRP__MAXVAL  0x7fffffff
 | 
			
		||||
// Mostly for internal use, but this is the maximum supported coordinate value.
 | 
			
		||||
 | 
			
		||||
#if defined(__GNUC__) || defined(__clang__)
 | 
			
		||||
#pragma GCC diagnostic push
 | 
			
		||||
#pragma GCC diagnostic ignored "-Wunused-function"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
STBRP_DEF int stbrp_pack_rects(stbrp_context * context, stbrp_rect * rects, int num_rects);
 | 
			
		||||
// Assign packed locations to rectangles. The rectangles are of type
 | 
			
		||||
// 'stbrp_rect' defined below, stored in the array 'rects', and there
 | 
			
		||||
// are 'num_rects' many of them.
 | 
			
		||||
//
 | 
			
		||||
// Rectangles which are successfully packed have the 'was_packed' flag
 | 
			
		||||
// set to a non-zero value and 'x' and 'y' store the minimum location
 | 
			
		||||
// on each axis (i.e. bottom-left in cartesian coordinates, top-left
 | 
			
		||||
// if you imagine y increasing downwards). Rectangles which do not fit
 | 
			
		||||
// have the 'was_packed' flag set to 0.
 | 
			
		||||
//
 | 
			
		||||
// You should not try to access the 'rects' array from another thread
 | 
			
		||||
// while this function is running, as the function temporarily reorders
 | 
			
		||||
// the array while it executes.
 | 
			
		||||
//
 | 
			
		||||
// To pack into another rectangle, you need to call stbrp_init_target
 | 
			
		||||
// again. To continue packing into the same rectangle, you can call
 | 
			
		||||
// this function again. Calling this multiple times with multiple rect
 | 
			
		||||
// arrays will probably produce worse packing results than calling it
 | 
			
		||||
// a single time with the full rectangle array, but the option is
 | 
			
		||||
// available.
 | 
			
		||||
//
 | 
			
		||||
// The function returns 1 if all of the rectangles were successfully
 | 
			
		||||
// packed and 0 otherwise.
 | 
			
		||||
 | 
			
		||||
struct stbrp_rect {
 | 
			
		||||
    // reserved for your use:
 | 
			
		||||
    int            id;
 | 
			
		||||
 | 
			
		||||
    // input:
 | 
			
		||||
    stbrp_coord    w, h;
 | 
			
		||||
 | 
			
		||||
    // output:
 | 
			
		||||
    stbrp_coord    x, y;
 | 
			
		||||
    int            was_packed;  // non-zero if valid packing
 | 
			
		||||
 | 
			
		||||
}; // 16 bytes, nominally
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_init_target(stbrp_context * context, int width, int height, stbrp_node * nodes, int num_nodes);
 | 
			
		||||
// Initialize a rectangle packer to:
 | 
			
		||||
//    pack a rectangle that is 'width' by 'height' in dimensions
 | 
			
		||||
//    using temporary storage provided by the array 'nodes', which is 'num_nodes' long
 | 
			
		||||
//
 | 
			
		||||
// You must call this function every time you start packing into a new target.
 | 
			
		||||
//
 | 
			
		||||
// There is no "shutdown" function. The 'nodes' memory must stay valid for
 | 
			
		||||
// the following stbrp_pack_rects() call (or calls), but can be freed after
 | 
			
		||||
// the call (or calls) finish.
 | 
			
		||||
//
 | 
			
		||||
// Note: to guarantee best results, either:
 | 
			
		||||
//       1. make sure 'num_nodes' >= 'width'
 | 
			
		||||
//   or  2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
 | 
			
		||||
//
 | 
			
		||||
// If you don't do either of the above things, widths will be quantized to multiples
 | 
			
		||||
// of small integers to guarantee the algorithm doesn't run out of temporary storage.
 | 
			
		||||
//
 | 
			
		||||
// If you do #2, then the non-quantized algorithm will be used, but the algorithm
 | 
			
		||||
// may run out of temporary storage and be unable to pack some rectangles.
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context * context, int allow_out_of_mem);
 | 
			
		||||
// Optionally call this function after init but before doing any packing to
 | 
			
		||||
// change the handling of the out-of-temp-memory scenario, described above.
 | 
			
		||||
// If you call init again, this will be reset to the default (false).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_setup_heuristic(stbrp_context * context, int heuristic);
 | 
			
		||||
// Optionally select which packing heuristic the library should use. Different
 | 
			
		||||
// heuristics will produce better/worse results for different data sets.
 | 
			
		||||
// If you call init again, this will be reset to the default.
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    STBRP_HEURISTIC_Skyline_default = 0,
 | 
			
		||||
    STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
 | 
			
		||||
    STBRP_HEURISTIC_Skyline_BF_sortHeight
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// the details of the following structures don't matter to you, but they must
 | 
			
		||||
// be visible so you can handle the memory allocations for them
 | 
			
		||||
 | 
			
		||||
struct stbrp_node {
 | 
			
		||||
    stbrp_coord  x, y;
 | 
			
		||||
    stbrp_node * next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct stbrp_context {
 | 
			
		||||
    int width;
 | 
			
		||||
    int height;
 | 
			
		||||
    int align;
 | 
			
		||||
    int init_mode;
 | 
			
		||||
    int heuristic;
 | 
			
		||||
    int num_nodes;
 | 
			
		||||
    stbrp_node * active_head;
 | 
			
		||||
    stbrp_node * free_head;
 | 
			
		||||
    stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
//     IMPLEMENTATION SECTION
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifdef STB_RECT_PACK_IMPLEMENTATION
 | 
			
		||||
#ifndef STBRP_SORT
 | 
			
		||||
    #include <stdlib.h>
 | 
			
		||||
    #define STBRP_SORT qsort
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef STBRP_ASSERT
 | 
			
		||||
    #include <assert.h>
 | 
			
		||||
    #define STBRP_ASSERT assert
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
    #define STBRP__NOTUSED(v)  (void)(v)
 | 
			
		||||
    #define STBRP__CDECL       __cdecl
 | 
			
		||||
#else
 | 
			
		||||
    #define STBRP__NOTUSED(v)  (void)sizeof(v)
 | 
			
		||||
    #define STBRP__CDECL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    STBRP__INIT_skyline = 1
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_setup_heuristic(stbrp_context * context, int heuristic)
 | 
			
		||||
{
 | 
			
		||||
    switch(context->init_mode) {
 | 
			
		||||
        case STBRP__INIT_skyline:
 | 
			
		||||
            STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
 | 
			
		||||
            context->heuristic = heuristic;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            STBRP_ASSERT(0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context * context, int allow_out_of_mem)
 | 
			
		||||
{
 | 
			
		||||
    if(allow_out_of_mem)
 | 
			
		||||
        // if it's ok to run out of memory, then don't bother aligning them;
 | 
			
		||||
        // this gives better packing, but may fail due to OOM (even though
 | 
			
		||||
        // the rectangles easily fit). @TODO a smarter approach would be to only
 | 
			
		||||
        // quantize once we've hit OOM, then we could get rid of this parameter.
 | 
			
		||||
        context->align = 1;
 | 
			
		||||
    else {
 | 
			
		||||
        // if it's not ok to run out of memory, then quantize the widths
 | 
			
		||||
        // so that num_nodes is always enough nodes.
 | 
			
		||||
        //
 | 
			
		||||
        // I.e. num_nodes * align >= width
 | 
			
		||||
        //                  align >= width / num_nodes
 | 
			
		||||
        //                  align = ceil(width/num_nodes)
 | 
			
		||||
 | 
			
		||||
        context->align = (context->width + context->num_nodes - 1) / context->num_nodes;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
STBRP_DEF void stbrp_init_target(stbrp_context * context, int width, int height, stbrp_node * nodes, int num_nodes)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    for(i = 0; i < num_nodes - 1; ++i)
 | 
			
		||||
        nodes[i].next = &nodes[i + 1];
 | 
			
		||||
    nodes[i].next = NULL;
 | 
			
		||||
    context->init_mode = STBRP__INIT_skyline;
 | 
			
		||||
    context->heuristic = STBRP_HEURISTIC_Skyline_default;
 | 
			
		||||
    context->free_head = &nodes[0];
 | 
			
		||||
    context->active_head = &context->extra[0];
 | 
			
		||||
    context->width = width;
 | 
			
		||||
    context->height = height;
 | 
			
		||||
    context->num_nodes = num_nodes;
 | 
			
		||||
    stbrp_setup_allow_out_of_mem(context, 0);
 | 
			
		||||
 | 
			
		||||
    // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
 | 
			
		||||
    context->extra[0].x = 0;
 | 
			
		||||
    context->extra[0].y = 0;
 | 
			
		||||
    context->extra[0].next = &context->extra[1];
 | 
			
		||||
    context->extra[1].x = (stbrp_coord) width;
 | 
			
		||||
    context->extra[1].y = (1 << 30);
 | 
			
		||||
    context->extra[1].next = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// find minimum y position if it starts at x1
 | 
			
		||||
static int stbrp__skyline_find_min_y(stbrp_context * c, stbrp_node * first, int x0, int width, int * pwaste)
 | 
			
		||||
{
 | 
			
		||||
    stbrp_node * node = first;
 | 
			
		||||
    int x1 = x0 + width;
 | 
			
		||||
    int min_y, visited_width, waste_area;
 | 
			
		||||
 | 
			
		||||
    STBRP__NOTUSED(c);
 | 
			
		||||
 | 
			
		||||
    STBRP_ASSERT(first->x <= x0);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
    // skip in case we're past the node
 | 
			
		||||
    while(node->next->x <= x0)
 | 
			
		||||
        ++node;
 | 
			
		||||
#else
 | 
			
		||||
    STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    STBRP_ASSERT(node->x <= x0);
 | 
			
		||||
 | 
			
		||||
    min_y = 0;
 | 
			
		||||
    waste_area = 0;
 | 
			
		||||
    visited_width = 0;
 | 
			
		||||
    while(node->x < x1) {
 | 
			
		||||
        if(node->y > min_y) {
 | 
			
		||||
            // raise min_y higher.
 | 
			
		||||
            // we've accounted for all waste up to min_y,
 | 
			
		||||
            // but we'll now add more waste for everything we've visted
 | 
			
		||||
            waste_area += visited_width * (node->y - min_y);
 | 
			
		||||
            min_y = node->y;
 | 
			
		||||
            // the first time through, visited_width might be reduced
 | 
			
		||||
            if(node->x < x0)
 | 
			
		||||
                visited_width += node->next->x - x0;
 | 
			
		||||
            else
 | 
			
		||||
                visited_width += node->next->x - node->x;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // add waste area
 | 
			
		||||
            int under_width = node->next->x - node->x;
 | 
			
		||||
            if(under_width + visited_width > width)
 | 
			
		||||
                under_width = width - visited_width;
 | 
			
		||||
            waste_area += under_width * (min_y - node->y);
 | 
			
		||||
            visited_width += under_width;
 | 
			
		||||
        }
 | 
			
		||||
        node = node->next;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *pwaste = waste_area;
 | 
			
		||||
    return min_y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    int x, y;
 | 
			
		||||
    stbrp_node ** prev_link;
 | 
			
		||||
} stbrp__findresult;
 | 
			
		||||
 | 
			
		||||
static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context * c, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    int best_waste = (1 << 30), best_x, best_y = (1 << 30);
 | 
			
		||||
    stbrp__findresult fr;
 | 
			
		||||
    stbrp_node ** prev, *node, *tail, **best = NULL;
 | 
			
		||||
 | 
			
		||||
    // align to multiple of c->align
 | 
			
		||||
    width = (width + c->align - 1);
 | 
			
		||||
    width -= width % c->align;
 | 
			
		||||
    STBRP_ASSERT(width % c->align == 0);
 | 
			
		||||
 | 
			
		||||
    // if it can't possibly fit, bail immediately
 | 
			
		||||
    if(width > c->width || height > c->height) {
 | 
			
		||||
        fr.prev_link = NULL;
 | 
			
		||||
        fr.x = fr.y = 0;
 | 
			
		||||
        return fr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    node = c->active_head;
 | 
			
		||||
    prev = &c->active_head;
 | 
			
		||||
    while(node->x + width <= c->width) {
 | 
			
		||||
        int y, waste;
 | 
			
		||||
        y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
 | 
			
		||||
        if(c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) {  // actually just want to test BL
 | 
			
		||||
            // bottom left
 | 
			
		||||
            if(y < best_y) {
 | 
			
		||||
                best_y = y;
 | 
			
		||||
                best = prev;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // best-fit
 | 
			
		||||
            if(y + height <= c->height) {
 | 
			
		||||
                // can only use it if it first vertically
 | 
			
		||||
                if(y < best_y || (y == best_y && waste < best_waste)) {
 | 
			
		||||
                    best_y = y;
 | 
			
		||||
                    best_waste = waste;
 | 
			
		||||
                    best = prev;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        prev = &node->next;
 | 
			
		||||
        node = node->next;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    best_x = (best == NULL) ? 0 : (*best)->x;
 | 
			
		||||
 | 
			
		||||
    // if doing best-fit (BF), we also have to try aligning right edge to each node position
 | 
			
		||||
    //
 | 
			
		||||
    // e.g, if fitting
 | 
			
		||||
    //
 | 
			
		||||
    //     ____________________
 | 
			
		||||
    //    |____________________|
 | 
			
		||||
    //
 | 
			
		||||
    //            into
 | 
			
		||||
    //
 | 
			
		||||
    //   |                         |
 | 
			
		||||
    //   |             ____________|
 | 
			
		||||
    //   |____________|
 | 
			
		||||
    //
 | 
			
		||||
    // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
 | 
			
		||||
    //
 | 
			
		||||
    // This makes BF take about 2x the time
 | 
			
		||||
 | 
			
		||||
    if(c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
 | 
			
		||||
        tail = c->active_head;
 | 
			
		||||
        node = c->active_head;
 | 
			
		||||
        prev = &c->active_head;
 | 
			
		||||
        // find first node that's admissible
 | 
			
		||||
        while(tail->x < width)
 | 
			
		||||
            tail = tail->next;
 | 
			
		||||
        while(tail) {
 | 
			
		||||
            int xpos = tail->x - width;
 | 
			
		||||
            int y, waste;
 | 
			
		||||
            STBRP_ASSERT(xpos >= 0);
 | 
			
		||||
            // find the left position that matches this
 | 
			
		||||
            while(node->next->x <= xpos) {
 | 
			
		||||
                prev = &node->next;
 | 
			
		||||
                node = node->next;
 | 
			
		||||
            }
 | 
			
		||||
            STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
 | 
			
		||||
            y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
 | 
			
		||||
            if(y + height <= c->height) {
 | 
			
		||||
                if(y <= best_y) {
 | 
			
		||||
                    if(y < best_y || waste < best_waste || (waste == best_waste && xpos < best_x)) {
 | 
			
		||||
                        best_x = xpos;
 | 
			
		||||
                        STBRP_ASSERT(y <= best_y);
 | 
			
		||||
                        best_y = y;
 | 
			
		||||
                        best_waste = waste;
 | 
			
		||||
                        best = prev;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            tail = tail->next;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fr.prev_link = best;
 | 
			
		||||
    fr.x = best_x;
 | 
			
		||||
    fr.y = best_y;
 | 
			
		||||
    return fr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context * context, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    // find best position according to heuristic
 | 
			
		||||
    stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
 | 
			
		||||
    stbrp_node * node, *cur;
 | 
			
		||||
 | 
			
		||||
    // bail if:
 | 
			
		||||
    //    1. it failed
 | 
			
		||||
    //    2. the best node doesn't fit (we don't always check this)
 | 
			
		||||
    //    3. we're out of memory
 | 
			
		||||
    if(res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
 | 
			
		||||
        res.prev_link = NULL;
 | 
			
		||||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // on success, create new node
 | 
			
		||||
    node = context->free_head;
 | 
			
		||||
    node->x = (stbrp_coord) res.x;
 | 
			
		||||
    node->y = (stbrp_coord)(res.y + height);
 | 
			
		||||
 | 
			
		||||
    context->free_head = node->next;
 | 
			
		||||
 | 
			
		||||
    // insert the new node into the right starting point, and
 | 
			
		||||
    // let 'cur' point to the remaining nodes needing to be
 | 
			
		||||
    // stiched back in
 | 
			
		||||
 | 
			
		||||
    cur = *res.prev_link;
 | 
			
		||||
    if(cur->x < res.x) {
 | 
			
		||||
        // preserve the existing one, so start testing with the next one
 | 
			
		||||
        stbrp_node * next = cur->next;
 | 
			
		||||
        cur->next = node;
 | 
			
		||||
        cur = next;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        *res.prev_link = node;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // from here, traverse cur and free the nodes, until we get to one
 | 
			
		||||
    // that shouldn't be freed
 | 
			
		||||
    while(cur->next && cur->next->x <= res.x + width) {
 | 
			
		||||
        stbrp_node * next = cur->next;
 | 
			
		||||
        // move the current node to the free list
 | 
			
		||||
        cur->next = context->free_head;
 | 
			
		||||
        context->free_head = cur;
 | 
			
		||||
        cur = next;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // stitch the list back in
 | 
			
		||||
    node->next = cur;
 | 
			
		||||
 | 
			
		||||
    if(cur->x < res.x + width)
 | 
			
		||||
        cur->x = (stbrp_coord)(res.x + width);
 | 
			
		||||
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
    cur = context->active_head;
 | 
			
		||||
    while(cur->x < context->width) {
 | 
			
		||||
        STBRP_ASSERT(cur->x < cur->next->x);
 | 
			
		||||
        cur = cur->next;
 | 
			
		||||
    }
 | 
			
		||||
    STBRP_ASSERT(cur->next == NULL);
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        int count = 0;
 | 
			
		||||
        cur = context->active_head;
 | 
			
		||||
        while(cur) {
 | 
			
		||||
            cur = cur->next;
 | 
			
		||||
            ++count;
 | 
			
		||||
        }
 | 
			
		||||
        cur = context->free_head;
 | 
			
		||||
        while(cur) {
 | 
			
		||||
            cur = cur->next;
 | 
			
		||||
            ++count;
 | 
			
		||||
        }
 | 
			
		||||
        STBRP_ASSERT(count == context->num_nodes + 2);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int STBRP__CDECL rect_height_compare(const void * a, const void * b)
 | 
			
		||||
{
 | 
			
		||||
    const stbrp_rect * p = (const stbrp_rect *) a;
 | 
			
		||||
    const stbrp_rect * q = (const stbrp_rect *) b;
 | 
			
		||||
    if(p->h > q->h)
 | 
			
		||||
        return -1;
 | 
			
		||||
    if(p->h < q->h)
 | 
			
		||||
        return  1;
 | 
			
		||||
    return (p->w > q->w) ? -1 : (p->w < q->w);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int STBRP__CDECL rect_original_order(const void * a, const void * b)
 | 
			
		||||
{
 | 
			
		||||
    const stbrp_rect * p = (const stbrp_rect *) a;
 | 
			
		||||
    const stbrp_rect * q = (const stbrp_rect *) b;
 | 
			
		||||
    return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
STBRP_DEF int stbrp_pack_rects(stbrp_context * context, stbrp_rect * rects, int num_rects)
 | 
			
		||||
{
 | 
			
		||||
    int i, all_rects_packed = 1;
 | 
			
		||||
 | 
			
		||||
    // we use the 'was_packed' field internally to allow sorting/unsorting
 | 
			
		||||
    for(i = 0; i < num_rects; ++i) {
 | 
			
		||||
        rects[i].was_packed = i;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // sort according to heuristic
 | 
			
		||||
    STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
 | 
			
		||||
 | 
			
		||||
    for(i = 0; i < num_rects; ++i) {
 | 
			
		||||
        if(rects[i].w == 0 || rects[i].h == 0) {
 | 
			
		||||
            rects[i].x = rects[i].y = 0;  // empty rect needs no space
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
 | 
			
		||||
            if(fr.prev_link) {
 | 
			
		||||
                rects[i].x = (stbrp_coord) fr.x;
 | 
			
		||||
                rects[i].y = (stbrp_coord) fr.y;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                rects[i].x = rects[i].y = STBRP__MAXVAL;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // unsort
 | 
			
		||||
    STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
 | 
			
		||||
 | 
			
		||||
    // set was_packed flags and all_rects_packed status
 | 
			
		||||
    for(i = 0; i < num_rects; ++i) {
 | 
			
		||||
        rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
 | 
			
		||||
        if(!rects[i].was_packed)
 | 
			
		||||
            all_rects_packed = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // return the all_rects_packed status
 | 
			
		||||
    return all_rects_packed;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__GNUC__) || defined(__clang__)
 | 
			
		||||
    #pragma GCC diagnostic pop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
This software is available under 2 licenses -- choose whichever you prefer.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
ALTERNATIVE A - MIT License
 | 
			
		||||
Copyright (c) 2017 Sean Barrett
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
			
		||||
this software and associated documentation files (the "Software"), to deal in
 | 
			
		||||
the Software without restriction, including without limitation the rights to
 | 
			
		||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 | 
			
		||||
of the Software, and to permit persons to whom the Software is furnished to do
 | 
			
		||||
so, subject to the following conditions:
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
ALTERNATIVE B - Public Domain (www.unlicense.org)
 | 
			
		||||
This is free and unencumbered software released into the public domain.
 | 
			
		||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
 | 
			
		||||
software, either in source code form or as a compiled binary, for any purpose,
 | 
			
		||||
commercial or non-commercial, and by any means.
 | 
			
		||||
In jurisdictions that recognize copyright laws, the author or authors of this
 | 
			
		||||
software dedicate any and all copyright interest in the software to the public
 | 
			
		||||
domain. We make this dedication for the benefit of the public at large and to
 | 
			
		||||
the detriment of our heirs and successors. We intend this dedication to be an
 | 
			
		||||
overt act of relinquishment in perpetuity of all present and future rights to
 | 
			
		||||
this software under copyright law.
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 | 
			
		||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
------------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -41,6 +41,8 @@ typedef struct {
 | 
			
		|||
    int16_t ofs_x;   /**< x offset of the bounding box*/
 | 
			
		||||
    int16_t ofs_y;  /**< y offset of the bounding box*/
 | 
			
		||||
    uint8_t bpp;   /**< Bit-per-pixel: 1, 2, 4, 8*/
 | 
			
		||||
    uint8_t is_placeholder: 1; /** Glyph is missing. But placeholder will still be displayed */
 | 
			
		||||
 | 
			
		||||
} lv_font_glyph_dsc_t;
 | 
			
		||||
 | 
			
		||||
/** The bitmaps might be upscaled by 3 to achieve subpixel rendering.*/
 | 
			
		||||
| 
						 | 
				
			
			@ -70,7 +72,7 @@ typedef struct _lv_font_t {
 | 
			
		|||
 | 
			
		||||
    int8_t underline_position;      /**< Distance between the top of the underline and base line (< 0 means below the base line)*/
 | 
			
		||||
    int8_t underline_thickness;     /**< Thickness of the underline*/
 | 
			
		||||
 | 
			
		||||
    const struct _lv_font_t * fallback;   /**< Fallback font for missing glyph. Resolved recursively */
 | 
			
		||||
    const void * dsc;                     /**< Store implementation specific or run_time data or caching here*/
 | 
			
		||||
#if LV_USE_USER_DATA
 | 
			
		||||
    void * user_data;               /**< Custom user data for font.*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,104 +0,0 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ALLOW_BSD_COMPONENTS=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="sabre-lite"
 | 
			
		||||
CONFIG_ARCH_BOARD_SABRE_LITE=y
 | 
			
		||||
CONFIG_ARCH_BUTTONS=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imx6"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMX6=y
 | 
			
		||||
CONFIG_ARCH_CHIP_IMX6_6QUAD=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=2048
 | 
			
		||||
CONFIG_ARCH_IRQBUTTONS=y
 | 
			
		||||
CONFIG_ARCH_LOWVECTORS=y
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=99369
 | 
			
		||||
CONFIG_BOOT_RUNFROMSDRAM=y
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CODECS_HASH_MD5=y
 | 
			
		||||
CONFIG_DEBUG_FULLOPT=y
 | 
			
		||||
CONFIG_DEBUG_SYMBOLS=y
 | 
			
		||||
CONFIG_DEV_ZERO=y
 | 
			
		||||
CONFIG_ELF=y
 | 
			
		||||
CONFIG_ETH0_PHY_KSZ8081=y
 | 
			
		||||
CONFIG_EXAMPLES_HELLO=m
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER=y
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_GROUPSIZE=500
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_SERVER=y
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_SERVERIP=0x2b1f4d32
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_TARGET2=y
 | 
			
		||||
CONFIG_EXAMPLES_UDPBLASTER=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_HAVE_CXX=y
 | 
			
		||||
CONFIG_HAVE_CXXINITIALIZE=y
 | 
			
		||||
CONFIG_IMX6_ENET=y
 | 
			
		||||
CONFIG_IMX6_UART2=y
 | 
			
		||||
CONFIG_IMX_DDR_SIZE=1073741824
 | 
			
		||||
CONFIG_IMX_ENET_NTXBUFFERS=1
 | 
			
		||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
 | 
			
		||||
CONFIG_INIT_STACKSIZE=3072
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LIBC_ENVPATH=y
 | 
			
		||||
CONFIG_LIBC_EXECFUNCS=y
 | 
			
		||||
CONFIG_NET=y
 | 
			
		||||
CONFIG_NETDB_DNSCLIENT=y
 | 
			
		||||
CONFIG_NETDB_DNSCLIENT_ENTRIES=4
 | 
			
		||||
CONFIG_NETDB_DNSSERVER_NOADDR=y
 | 
			
		||||
CONFIG_NETINIT_DRIPADDR=0x0a000202
 | 
			
		||||
CONFIG_NETINIT_IPADDR=0x0a00020f
 | 
			
		||||
CONFIG_NETINIT_NOMAC=y
 | 
			
		||||
CONFIG_NETUTILS_CODECS=y
 | 
			
		||||
CONFIG_NETUTILS_IPERF=y
 | 
			
		||||
CONFIG_NETUTILS_IPERFTEST_DEVNAME="eth0"
 | 
			
		||||
CONFIG_NETUTILS_TELNETD=y
 | 
			
		||||
CONFIG_NETUTILS_TFTPC=y
 | 
			
		||||
CONFIG_NETUTILS_WEBCLIENT=y
 | 
			
		||||
CONFIG_NET_BROADCAST=y
 | 
			
		||||
CONFIG_NET_ETH_PKTSIZE=1514
 | 
			
		||||
CONFIG_NET_ICMP=y
 | 
			
		||||
CONFIG_NET_ICMP_SOCKET=y
 | 
			
		||||
CONFIG_NET_MAX_LISTENPORTS=8
 | 
			
		||||
CONFIG_NET_STATISTICS=y
 | 
			
		||||
CONFIG_NET_TCP=y
 | 
			
		||||
CONFIG_NET_UDP=y
 | 
			
		||||
CONFIG_NET_UDP_CHECKSUMS=y
 | 
			
		||||
CONFIG_NFS=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_PATH_INITIAL="/mnt/nfs/bin"
 | 
			
		||||
CONFIG_PREALLOC_TIMERS=4
 | 
			
		||||
CONFIG_RAM_SIZE=1073741824
 | 
			
		||||
CONFIG_RAM_START=0x10000000
 | 
			
		||||
CONFIG_RAM_VSTART=0x10000000
 | 
			
		||||
CONFIG_RAW_BINARY=y
 | 
			
		||||
CONFIG_RR_INTERVAL=200
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_LPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_STACK_COLORATION=y
 | 
			
		||||
CONFIG_START_DAY=23
 | 
			
		||||
CONFIG_START_MONTH=12
 | 
			
		||||
CONFIG_START_YEAR=2020
 | 
			
		||||
CONFIG_SYMTAB_ORDEREDBYNAME=y
 | 
			
		||||
CONFIG_SYSLOG_TIMESTAMP=y
 | 
			
		||||
CONFIG_SYSTEM_DHCPC_RENEW=y
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB=y
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB_ARRAYNAME="g_symtab"
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB_COUNTNAME="g_nsymbols"
 | 
			
		||||
CONFIG_SYSTEM_PING=y
 | 
			
		||||
CONFIG_TESTING_GETPRIME=y
 | 
			
		||||
CONFIG_TESTING_OSTEST=y
 | 
			
		||||
CONFIG_TESTING_OSTEST_FPUTESTDISABLE=y
 | 
			
		||||
CONFIG_UART2_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY=y
 | 
			
		||||
CONFIG_READLINE_TABCOMPLETION=y
 | 
			
		||||
| 
						 | 
				
			
			@ -1,107 +0,0 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ALLOW_BSD_COMPONENTS=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="sabre-lite"
 | 
			
		||||
CONFIG_ARCH_BOARD_SABRE_LITE=y
 | 
			
		||||
CONFIG_ARCH_BUTTONS=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imx6"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMX6=y
 | 
			
		||||
CONFIG_ARCH_CHIP_IMX6_6QUAD=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=2048
 | 
			
		||||
CONFIG_ARCH_IRQBUTTONS=y
 | 
			
		||||
CONFIG_ARCH_LOWVECTORS=y
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=99369
 | 
			
		||||
CONFIG_BOOT_RUNFROMSDRAM=y
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CODECS_HASH_MD5=y
 | 
			
		||||
CONFIG_DEBUG_FULLOPT=y
 | 
			
		||||
CONFIG_DEBUG_SYMBOLS=y
 | 
			
		||||
CONFIG_DEV_ZERO=y
 | 
			
		||||
CONFIG_ELF=y
 | 
			
		||||
CONFIG_ETH0_PHY_KSZ8081=y
 | 
			
		||||
CONFIG_EXAMPLES_HELLO=m
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER=y
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_GROUPSIZE=500
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_SERVER=y
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_SERVERIP=0x2b1f4d32
 | 
			
		||||
CONFIG_EXAMPLES_TCPBLASTER_TARGET2=y
 | 
			
		||||
CONFIG_EXAMPLES_UDPBLASTER=y
 | 
			
		||||
CONFIG_FS_PROCFS=y
 | 
			
		||||
CONFIG_HAVE_CXX=y
 | 
			
		||||
CONFIG_HAVE_CXXINITIALIZE=y
 | 
			
		||||
CONFIG_IMX6_ENET=y
 | 
			
		||||
CONFIG_IMX6_UART2=y
 | 
			
		||||
CONFIG_IMX_DDR_SIZE=1073741824
 | 
			
		||||
CONFIG_IMX_ENET_NTXBUFFERS=1
 | 
			
		||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
 | 
			
		||||
CONFIG_INIT_STACKSIZE=3072
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LIBC_ENVPATH=y
 | 
			
		||||
CONFIG_LIBC_EXECFUNCS=y
 | 
			
		||||
CONFIG_NET=y
 | 
			
		||||
CONFIG_NETDB_DNSCLIENT=y
 | 
			
		||||
CONFIG_NETDB_DNSCLIENT_ENTRIES=4
 | 
			
		||||
CONFIG_NETDB_DNSSERVER_NOADDR=y
 | 
			
		||||
CONFIG_NETINIT_DRIPADDR=0x0a000202
 | 
			
		||||
CONFIG_NETINIT_IPADDR=0x0a00020f
 | 
			
		||||
CONFIG_NETINIT_NOMAC=y
 | 
			
		||||
CONFIG_NETUTILS_CODECS=y
 | 
			
		||||
CONFIG_NETUTILS_IPERF=y
 | 
			
		||||
CONFIG_NETUTILS_IPERFTEST_DEVNAME="eth0"
 | 
			
		||||
CONFIG_NETUTILS_TELNETD=y
 | 
			
		||||
CONFIG_NETUTILS_TFTPC=y
 | 
			
		||||
CONFIG_NETUTILS_WEBCLIENT=y
 | 
			
		||||
CONFIG_NET_BROADCAST=y
 | 
			
		||||
CONFIG_NET_ETH_PKTSIZE=1514
 | 
			
		||||
CONFIG_NET_ICMP=y
 | 
			
		||||
CONFIG_NET_ICMP_SOCKET=y
 | 
			
		||||
CONFIG_NET_MAX_LISTENPORTS=8
 | 
			
		||||
CONFIG_NET_STATISTICS=y
 | 
			
		||||
CONFIG_NET_TCP=y
 | 
			
		||||
CONFIG_NET_UDP=y
 | 
			
		||||
CONFIG_NET_UDP_CHECKSUMS=y
 | 
			
		||||
CONFIG_NFS=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_PATH_INITIAL="/mnt/nfs/bin"
 | 
			
		||||
CONFIG_PREALLOC_TIMERS=4
 | 
			
		||||
CONFIG_RAM_SIZE=1073741824
 | 
			
		||||
CONFIG_RAM_START=0x10000000
 | 
			
		||||
CONFIG_RAM_VSTART=0x10000000
 | 
			
		||||
CONFIG_RAW_BINARY=y
 | 
			
		||||
CONFIG_RR_INTERVAL=200
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_LPWORK=y
 | 
			
		||||
CONFIG_SMP=y
 | 
			
		||||
CONFIG_STACK_COLORATION=y
 | 
			
		||||
CONFIG_START_DAY=8
 | 
			
		||||
CONFIG_START_MONTH=3
 | 
			
		||||
CONFIG_START_YEAR=2021
 | 
			
		||||
CONFIG_SYMTAB_ORDEREDBYNAME=y
 | 
			
		||||
CONFIG_SYSLOG_TIMESTAMP=y
 | 
			
		||||
CONFIG_SYSTEM_DHCPC_RENEW=y
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB=y
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB_ARRAYNAME="g_symtab"
 | 
			
		||||
CONFIG_SYSTEM_NSH_SYMTAB_COUNTNAME="g_nsymbols"
 | 
			
		||||
CONFIG_SYSTEM_PING=y
 | 
			
		||||
CONFIG_SYSTEM_SYSTEM=y
 | 
			
		||||
CONFIG_SYSTEM_TASKSET=y
 | 
			
		||||
CONFIG_TESTING_GETPRIME=y
 | 
			
		||||
CONFIG_TESTING_OSTEST=y
 | 
			
		||||
CONFIG_TESTING_OSTEST_FPUTESTDISABLE=y
 | 
			
		||||
CONFIG_TESTING_SMP=y
 | 
			
		||||
CONFIG_UART2_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY=y
 | 
			
		||||
CONFIG_READLINE_TABCOMPLETION=y
 | 
			
		||||
| 
						 | 
				
			
			@ -1,74 +0,0 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong-arm32/configs/knsh/Make.defs
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/.config
 | 
			
		||||
include $(TOPDIR)/tools/Config.mk
 | 
			
		||||
include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
 | 
			
		||||
 | 
			
		||||
LDSCRIPT1 = memory.ld
 | 
			
		||||
LDSCRIPT2 = kernel-space.ld
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)}"
 | 
			
		||||
  ARCHSCRIPT += -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)}"
 | 
			
		||||
else
 | 
			
		||||
  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT1)
 | 
			
		||||
  ARCHSCRIPT += -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT2)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  ARCHOPTIMIZATION = -g
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(CONFIG_DEBUG_NOOPT),y)
 | 
			
		||||
  ARCHOPTIMIZATION += $(MAXOPTIMIZATION)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCHCFLAGS = -fno-builtin
 | 
			
		||||
ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
 | 
			
		||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -fno-strict-aliasing
 | 
			
		||||
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
 | 
			
		||||
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
 | 
			
		||||
 | 
			
		||||
CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
 | 
			
		||||
CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
 | 
			
		||||
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
 | 
			
		||||
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
NXFLATLDFLAGS1 = -r -d -warn-common
 | 
			
		||||
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
 | 
			
		||||
LDNXFLATFLAGS = -e main -s 2048
 | 
			
		||||
 | 
			
		||||
# Loadable module definitions
 | 
			
		||||
 | 
			
		||||
CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
 | 
			
		||||
 | 
			
		||||
LDMODULEFLAGS = -r -e module_initialize
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
 | 
			
		||||
else
 | 
			
		||||
  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  LDFLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,57 +0,0 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
# CONFIG_ARCH_RAMFUNCS is not set
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong-arm32"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG_ARM32=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE=y
 | 
			
		||||
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
 | 
			
		||||
CONFIG_ARMV7M_ICACHE=y
 | 
			
		||||
CONFIG_ARMV7M_LAZYFPU=y
 | 
			
		||||
CONFIG_ARMV7M_USEBASEPRI=y
 | 
			
		||||
CONFIG_ARM_MPU=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=104926
 | 
			
		||||
CONFIG_BUILD_PROTECTED=y
 | 
			
		||||
CONFIG_IMXRT_GPIO_IRQ=y
 | 
			
		||||
CONFIG_IMXRT_GPIO3_0_15_IRQ=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NSH_ARCHINIT=y
 | 
			
		||||
CONFIG_NSH_DISABLE_MKRD=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_NUTTX_USERSPACE=0x60200000
 | 
			
		||||
CONFIG_PASS1_BUILDIR="boards/arm/imxrt/xidatong-arm32/kernel"
 | 
			
		||||
CONFIG_RAM_SIZE=524288
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_RAW_BINARY=y
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=8
 | 
			
		||||
CONFIG_START_MONTH=6
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_SYS_RESERVED=9
 | 
			
		||||
CONFIG_DEV_GPIO=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY_LEN=100
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY_LINELEN=120
 | 
			
		||||
CONFIG_READLINE_TABCOMPLETION=y
 | 
			
		||||
CONFIG_FS_ROMFS=y
 | 
			
		||||
CONFIG_NSH_ROMFSETC=y
 | 
			
		||||
CONFIG_NSH_ARCHROMFS=y
 | 
			
		||||
CONFIG_BOARDCTL_RESET=y
 | 
			
		||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,85 +0,0 @@
 | 
			
		|||
############################################################################
 | 
			
		||||
# boards/arm/imxrt/xidatong-arm32/configs/libcxxtest/Make.defs
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
############################################################################
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/.config
 | 
			
		||||
include $(TOPDIR)/tools/Config.mk
 | 
			
		||||
include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_ARMV7M_DTCM),y)
 | 
			
		||||
  LDSCRIPT = flash-dtcm.ld
 | 
			
		||||
else
 | 
			
		||||
  LDSCRIPT = flash-ocram.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  ARCHSCRIPT = -T "${shell cygpath -w $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}"
 | 
			
		||||
else
 | 
			
		||||
  ARCHSCRIPT = -T$(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  ARCHOPTIMIZATION = -g
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifneq ($(CONFIG_DEBUG_NOOPT),y)
 | 
			
		||||
  ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing \
 | 
			
		||||
                      -fno-strength-reduce -fomit-frame-pointer
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ARCHCFLAGS = -fno-builtin
 | 
			
		||||
ifeq ($(CONFIG_CXX_EXCEPTION),y)
 | 
			
		||||
  ARCHCPUFLAGSXX = -fno-builtin
 | 
			
		||||
else
 | 
			
		||||
  ARCHCPUFLAGSXX = -fno-builtin -fno-exceptions -fcheck-new
 | 
			
		||||
endif
 | 
			
		||||
ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef #-fno-strict-aliasing
 | 
			
		||||
ARCHWARNINGSXX = -Wall -Wshadow -Wundef
 | 
			
		||||
ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CFLAGS := $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
 | 
			
		||||
CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
 | 
			
		||||
CXXFLAGS  = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) \
 | 
			
		||||
            $(ARCHCPUFLAGS) $(ARCHXXINCLUDES)
 | 
			
		||||
CXXFLAGS += $(ARCHDEFINES) $(EXTRAFLAGS) -pipe -std=c++11
 | 
			
		||||
CXXFLAGS += -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
 | 
			
		||||
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -D_LIBCPP_NO_EXCEPTIONS
 | 
			
		||||
CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
 | 
			
		||||
CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
 | 
			
		||||
AFLAGS := $(CFLAGS) -D__ASSEMBLY__
 | 
			
		||||
 | 
			
		||||
NXFLATLDFLAGS1 = -r -d -warn-common
 | 
			
		||||
NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
 | 
			
		||||
LDNXFLATFLAGS = -e main -s 2048
 | 
			
		||||
 | 
			
		||||
# Loadable module definitions
 | 
			
		||||
 | 
			
		||||
CMODULEFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
 | 
			
		||||
 | 
			
		||||
LDMODULEFLAGS = -r -e module_initialize
 | 
			
		||||
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
 | 
			
		||||
  LDMODULEFLAGS += -T "${shell cygpath -w $(TOPDIR)/libs/libc/modlib/gnu-elf.ld}"
 | 
			
		||||
else
 | 
			
		||||
  LDMODULEFLAGS += -T $(TOPDIR)/libs/libc/modlib/gnu-elf.ld
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
 | 
			
		||||
  LDFLAGS += -g
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +0,0 @@
 | 
			
		|||
#
 | 
			
		||||
# This file is autogenerated: PLEASE DO NOT EDIT IT.
 | 
			
		||||
#
 | 
			
		||||
# You can use "make menuconfig" to make any modifications to the installed .config file.
 | 
			
		||||
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
 | 
			
		||||
# modifications.
 | 
			
		||||
#
 | 
			
		||||
CONFIG_ADD_NUTTX_FETURES=y
 | 
			
		||||
CONFIG_ARCH="arm"
 | 
			
		||||
CONFIG_ARCH_BOARD="xidatong-arm32"
 | 
			
		||||
CONFIG_ARCH_BOARD_XIDATONG_ARM32=y
 | 
			
		||||
CONFIG_ARCH_CHIP="imxrt"
 | 
			
		||||
CONFIG_ARCH_CHIP_IMXRT=y
 | 
			
		||||
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
 | 
			
		||||
CONFIG_ARCH_INTERRUPTSTACK=10240
 | 
			
		||||
CONFIG_ARCH_STACKDUMP=y
 | 
			
		||||
CONFIG_BOARD_LATE_INITIALIZE=y
 | 
			
		||||
CONFIG_BOARD_LOOPSPERMSEC=20000
 | 
			
		||||
CONFIG_BUILTIN=y
 | 
			
		||||
CONFIG_CLOCK_MONOTONIC=y
 | 
			
		||||
CONFIG_C99_BOOL8=y
 | 
			
		||||
CONFIG_IMXRT_GPIO_IRQ=y
 | 
			
		||||
CONFIG_IMXRT_GPIO3_0_15_IRQ=y
 | 
			
		||||
CONFIG_HAVE_CXX=y
 | 
			
		||||
CONFIG_IDLETHREAD_STACKSIZE=2048
 | 
			
		||||
CONFIG_IMXRT_LPUART1=y
 | 
			
		||||
CONFIG_INTELHEX_BINARY=y
 | 
			
		||||
CONFIG_LIBCXX=y
 | 
			
		||||
CONFIG_LIBCXXABI=y
 | 
			
		||||
CONFIG_LIBC_FLOATINGPOINT=y
 | 
			
		||||
CONFIG_LIBC_LOCALTIME=y
 | 
			
		||||
CONFIG_LIBM=y
 | 
			
		||||
CONFIG_LPUART1_SERIAL_CONSOLE=y
 | 
			
		||||
CONFIG_NSH_BUILTIN_APPS=y
 | 
			
		||||
CONFIG_NSH_FILEIOSIZE=512
 | 
			
		||||
CONFIG_NSH_LINELEN=64
 | 
			
		||||
CONFIG_NSH_READLINE=y
 | 
			
		||||
CONFIG_RAM_SIZE=536870912
 | 
			
		||||
CONFIG_RAM_START=0x20200000
 | 
			
		||||
CONFIG_RAW_BINARY=y
 | 
			
		||||
CONFIG_SCHED_CPULOAD=y
 | 
			
		||||
CONFIG_SCHED_HPWORK=y
 | 
			
		||||
CONFIG_SCHED_WAITPID=y
 | 
			
		||||
CONFIG_START_DAY=14
 | 
			
		||||
CONFIG_START_MONTH=3
 | 
			
		||||
CONFIG_SYSTEM_NSH=y
 | 
			
		||||
CONFIG_DEV_GPIO=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY=y
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY_LEN=100
 | 
			
		||||
CONFIG_READLINE_CMD_HISTORY_LINELEN=120
 | 
			
		||||
CONFIG_READLINE_TABCOMPLETION=y
 | 
			
		||||
CONFIG_FS_ROMFS=y
 | 
			
		||||
CONFIG_NSH_ROMFSETC=y
 | 
			
		||||
CONFIG_NSH_ARCHROMFS=y
 | 
			
		||||
CONFIG_BOARDCTL_RESET=y
 | 
			
		||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
/****************************************************************************
 | 
			
		||||
 * boards/arm/imxrt/xidatong-arm32/scripts/flash-mcuboot-app
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 *
 | 
			
		||||
 ****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Specify the memory areas */
 | 
			
		||||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  flash (rx)  : ORIGIN = 0x60100000, LENGTH = 0x00100000
 | 
			
		||||
  sram  (rwx) : ORIGIN = 0x20200000, LENGTH = 0x00080000
 | 
			
		||||
  itcm  (rwx) : ORIGIN = 0x00000000, LENGTH = 0x00020000
 | 
			
		||||
  dtcm  (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
OUTPUT_ARCH(arm)
 | 
			
		||||
EXTERN(_vectors)
 | 
			
		||||
EXTERN(g_flash_config)
 | 
			
		||||
EXTERN(g_image_vector_table)
 | 
			
		||||
EXTERN(g_dcd_data)
 | 
			
		||||
 | 
			
		||||
ENTRY(_stext)
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
    .text :
 | 
			
		||||
    {
 | 
			
		||||
        _stext = ABSOLUTE(.);
 | 
			
		||||
        *(.vectors)
 | 
			
		||||
        *(.text .text.*)
 | 
			
		||||
        *(.fixup)
 | 
			
		||||
        *(.gnu.warning)
 | 
			
		||||
        *(.rodata .rodata.*)
 | 
			
		||||
        *(.gnu.linkonce.t.*)
 | 
			
		||||
        *(.glue_7)
 | 
			
		||||
        *(.glue_7t)
 | 
			
		||||
        *(.got)
 | 
			
		||||
        *(.gcc_except_table)
 | 
			
		||||
        *(.gnu.linkonce.r.*)
 | 
			
		||||
        _etext = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .init_section :
 | 
			
		||||
    {
 | 
			
		||||
        _sinit = ABSOLUTE(.);
 | 
			
		||||
        *(.init_array .init_array.*)
 | 
			
		||||
        _einit = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .ARM.extab :
 | 
			
		||||
    {
 | 
			
		||||
        *(.ARM.extab*)
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    .ARM.exidx :
 | 
			
		||||
    {
 | 
			
		||||
        __exidx_start = ABSOLUTE(.);
 | 
			
		||||
        *(.ARM.exidx*)
 | 
			
		||||
        __exidx_end = ABSOLUTE(.);
 | 
			
		||||
    } > flash
 | 
			
		||||
 | 
			
		||||
    _eronly = ABSOLUTE(.);
 | 
			
		||||
 | 
			
		||||
    .data :
 | 
			
		||||
    {
 | 
			
		||||
        _sdata = ABSOLUTE(.);
 | 
			
		||||
        *(.data .data.*)
 | 
			
		||||
        *(.gnu.linkonce.d.*)
 | 
			
		||||
        CONSTRUCTORS
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        _edata = ABSOLUTE(.);
 | 
			
		||||
    } > sram AT > flash
 | 
			
		||||
 | 
			
		||||
    .ramfunc ALIGN(4):
 | 
			
		||||
    {
 | 
			
		||||
        _sramfuncs = ABSOLUTE(.);
 | 
			
		||||
        *(.ramfunc  .ramfunc.*)
 | 
			
		||||
        _eramfuncs = ABSOLUTE(.);
 | 
			
		||||
    } > sram AT > flash
 | 
			
		||||
 | 
			
		||||
    _framfuncs = LOADADDR(.ramfunc);
 | 
			
		||||
 | 
			
		||||
    .bss :
 | 
			
		||||
    {
 | 
			
		||||
        _sbss = ABSOLUTE(.);
 | 
			
		||||
        *(.bss .bss.*)
 | 
			
		||||
        *(.gnu.linkonce.b.*)
 | 
			
		||||
        *(COMMON)
 | 
			
		||||
        . = ALIGN(4);
 | 
			
		||||
        _ebss = ABSOLUTE(.);
 | 
			
		||||
    } > sram
 | 
			
		||||
 | 
			
		||||
    /* Stabs debugging sections. */
 | 
			
		||||
 | 
			
		||||
    .stab 0 : { *(.stab) }
 | 
			
		||||
    .stabstr 0 : { *(.stabstr) }
 | 
			
		||||
    .stab.excl 0 : { *(.stab.excl) }
 | 
			
		||||
    .stab.exclstr 0 : { *(.stab.exclstr) }
 | 
			
		||||
    .stab.index 0 : { *(.stab.index) }
 | 
			
		||||
    .stab.indexstr 0 : { *(.stab.indexstr) }
 | 
			
		||||
    .comment 0 : { *(.comment) }
 | 
			
		||||
    .debug_abbrev 0 : { *(.debug_abbrev) }
 | 
			
		||||
    .debug_info 0 : { *(.debug_info) }
 | 
			
		||||
    .debug_line 0 : { *(.debug_line) }
 | 
			
		||||
    .debug_pubnames 0 : { *(.debug_pubnames) }
 | 
			
		||||
    .debug_aranges 0 : { *(.debug_aranges) }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -118,12 +118,12 @@ static int32_t FreeHwIrq(uint32_t irq_num)
 | 
			
		|||
 *
 | 
			
		||||
 * @return 0 on success; -1 on failure
 | 
			
		||||
 */
 | 
			
		||||
static int32_t EnableHwIrq(uint32_t irq_num)
 | 
			
		||||
static int32_t EnableHwIrq(uint32_t irq_num, uint32_t cpu_id)
 | 
			
		||||
{
 | 
			
		||||
    if (irq_num >=   ARCH_MAX_IRQ_NUM  )
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
    return ArchEnableHwIrq(irq_num);
 | 
			
		||||
    return ArchEnableHwIrq(irq_num, cpu_id);
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * This function will disable a irq.
 | 
			
		||||
| 
						 | 
				
			
			@ -133,12 +133,12 @@ static int32_t EnableHwIrq(uint32_t irq_num)
 | 
			
		|||
 * @return 0 on success; -1 on failure
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int32_t DisableHwIrq(uint32_t irq_num)
 | 
			
		||||
static int32_t DisableHwIrq(uint32_t irq_num, uint32_t cpu_id)
 | 
			
		||||
{
 | 
			
		||||
    if (irq_num >=   ARCH_MAX_IRQ_NUM  )
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
    return ArchDisableHwIrq(irq_num);
 | 
			
		||||
    return ArchDisableHwIrq(irq_num, cpu_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* called from arch-specific ISR wrapper */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,8 +55,8 @@ struct IsrDone
 | 
			
		|||
    bool (*isInIsr)();
 | 
			
		||||
    int32_t  (*registerIrq)(uint32_t irq_num, IsrHandlerType handler, void *arg);
 | 
			
		||||
    int32_t  (*freeIrq)(uint32_t irq_num);
 | 
			
		||||
    int32_t  (*enableIrq)(uint32_t irq_num);
 | 
			
		||||
    int32_t  (*disableIrq)(uint32_t irq_num);
 | 
			
		||||
    int32_t  (*enableIrq)(uint32_t irq_num, uint32_t cpu_id);
 | 
			
		||||
    int32_t  (*disableIrq)(uint32_t irq_num, uint32_t cpu_id);
 | 
			
		||||
    void   (*handleIrq)(uint32_t irq_num);
 | 
			
		||||
    uint16_t (*getCounter)() ;
 | 
			
		||||
    void   (*incCounter)();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
SRC_FILES := boot.S  cache.S exception.S cortexA9.S gic.c interrupt.c 
 | 
			
		||||
SRC_FILES := boot.S  cache.S exception.S cortexA9.S gic.c interrupt.c mmu.c ccm_pll.c
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,8 +19,8 @@
 | 
			
		|||
 | 
			
		||||
#define ARCH_MAX_IRQ_NUM  PLATFORM_MAX_IRQ_NR
 | 
			
		||||
 | 
			
		||||
int32_t ArchEnableHwIrq(uint32_t irq_num);
 | 
			
		||||
int32_t ArchDisableHwIrq(uint32_t irq_num);
 | 
			
		||||
int32_t ArchEnableHwIrq(uint32_t irq_num, uint32_t cpu_id);
 | 
			
		||||
int32_t ArchDisableHwIrq(uint32_t irq_num, uint32_t cpu_id);
 | 
			
		||||
 | 
			
		||||
//! @brief
 | 
			
		||||
typedef enum {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//! @addtogroup cortexa9
 | 
			
		||||
//! @{
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file  arm_cp_registers.h
 | 
			
		||||
 * @brief Definitions for ARM coprocessor registers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __ARM_CP_REGISTERS_H__
 | 
			
		||||
#define __ARM_CP_REGISTERS_H__
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
//! @name ACTLR
 | 
			
		||||
//@{
 | 
			
		||||
#define BM_ACTLR_SMP (1 << 6)
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name DFSR
 | 
			
		||||
//@{
 | 
			
		||||
#define BM_DFSR_WNR (1 << 11)   //!< Write not Read bit. 0=read, 1=write.
 | 
			
		||||
#define BM_DFSR_FS4 (0x400)      //!< Fault status bit 4..
 | 
			
		||||
#define BP_DFSR_FS4 (10)        //!< Bit position for FS[4].
 | 
			
		||||
#define BM_DFSR_FS (0xf)      //!< Fault status bits [3:0].
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name SCTLR
 | 
			
		||||
//@{
 | 
			
		||||
#define BM_SCTLR_TE (1 << 30)  //!< Thumb exception enable.
 | 
			
		||||
#define BM_SCTLR_AFE (1 << 29) //!< Access flag enable.
 | 
			
		||||
#define BM_SCTLR_TRE (1 << 28) //!< TEX remap enable.
 | 
			
		||||
#define BM_SCTLR_NMFI (1 << 27)    //!< Non-maskable FIQ support.
 | 
			
		||||
#define BM_SCTLR_EE (1 << 25)  //!< Exception endianess.
 | 
			
		||||
#define BM_SCTLR_VE (1 << 24)  //!< Interrupt vectors enable.
 | 
			
		||||
#define BM_SCTLR_FI (1 << 21)   //!< Fast interrupt configurable enable.
 | 
			
		||||
#define BM_SCTLR_RR (1 << 14)  //!< Round Robin
 | 
			
		||||
#define BM_SCTLR_V (1 << 13)   //!< Vectors
 | 
			
		||||
#define BM_SCTLR_I (1 << 12)   //!< Instruction cache enable
 | 
			
		||||
#define BM_SCTLR_Z (1 << 11)   //!< Branch prediction enable
 | 
			
		||||
#define BM_SCTLR_SW (1 << 10)  //!< SWP and SWPB enable
 | 
			
		||||
#define BM_SCTLR_CP15BEN (1 << 5)  //!< CP15 barrier enable
 | 
			
		||||
#define BM_SCTLR_C (1 << 2)    //!< Data cache enable
 | 
			
		||||
#define BM_SCTLR_A (1 << 1)    //!< Alignment check enable
 | 
			
		||||
#define BM_SCTLR_M (1 << 0)    //!< MMU enable
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @}
 | 
			
		||||
 | 
			
		||||
#endif // __ARM_CP_REGISTERS_H__
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
 | 
			
		||||
.section ".startup","ax"
 | 
			
		||||
.globl _reset
 | 
			
		||||
 | 
			
		||||
.extern init
 | 
			
		||||
_reset:
 | 
			
		||||
 | 
			
		||||
    /* set the cpu to SVC32 mode and disable interrupt */
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,11 @@ _reset:
 | 
			
		|||
    
 | 
			
		||||
    ldr     r0, =stack_top
 | 
			
		||||
 | 
			
		||||
    @ get cpu id, and subtract the offset from the stacks base address
 | 
			
		||||
    mrc     p15,0,r2,c0,c0,5  @ read multiprocessor affinity register
 | 
			
		||||
    and     r2, r2, #3        @ mask off, leaving CPU ID field
 | 
			
		||||
    mov     r5, r2		      @ save cpu id for later
 | 
			
		||||
 | 
			
		||||
    @  Set the startup stack for svc
 | 
			
		||||
    mov     sp, r0
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +91,7 @@ ctor_loop:
 | 
			
		|||
    b       ctor_loop
 | 
			
		||||
ctor_end:
 | 
			
		||||
 | 
			
		||||
    bl     start_kernel
 | 
			
		||||
    bl     init
 | 
			
		||||
 | 
			
		||||
_loop_here:
 | 
			
		||||
    b      _loop_here
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,442 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
#include "registers/regsccm.h"
 | 
			
		||||
#include "registers/regsccmanalog.h"
 | 
			
		||||
#include "registers/regsgpc.h"
 | 
			
		||||
#include "registers/regsiomuxc.h"
 | 
			
		||||
#include "registers/regsuart.h"
 | 
			
		||||
#include "registers/regsssi.h"
 | 
			
		||||
#include "registers/regsepit.h"
 | 
			
		||||
#include "registers/regsgpt.h"
 | 
			
		||||
#include "registers/regsi2c.h"
 | 
			
		||||
#include "registers/regsspdif.h"
 | 
			
		||||
#include "registers/regsspba.h"
 | 
			
		||||
#include "registers/regssdmaarm.h"
 | 
			
		||||
#include "registers/regsecspi.h"
 | 
			
		||||
 | 
			
		||||
#if defined(CHIP_MX6DQ)
 | 
			
		||||
#include "registers/regssata.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(CHIP_MX6SL)
 | 
			
		||||
#include "registers/regsgpmi.h"
 | 
			
		||||
#include "registers/regsesai.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Variables
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
const uint32_t PLL1_OUTPUT = 792000000;
 | 
			
		||||
const uint32_t PLL2_OUTPUT[] = { 528000000, 396000000, 352000000, 198000000, 594000000 };
 | 
			
		||||
const uint32_t PLL3_OUTPUT[] = { 480000000, 720000000, 540000000, 508235294, 454736842 };
 | 
			
		||||
const uint32_t PLL4_OUTPUT = 650000000;
 | 
			
		||||
const uint32_t PLL5_OUTPUT = 650000000;
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Code
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
void ccm_init(void)
 | 
			
		||||
{
 | 
			
		||||
    // ETHNET
 | 
			
		||||
    HW_CCM_ANALOG_PLL_ENET_CLR(BM_CCM_ANALOG_PLL_ENET_POWERDOWN);
 | 
			
		||||
    HW_CCM_ANALOG_PLL_ENET_SET(BM_CCM_ANALOG_PLL_ENET_ENABLE);
 | 
			
		||||
    HW_CCM_ANALOG_PLL_ENET_CLR(BM_CCM_ANALOG_PLL_ENET_BYPASS);
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
    HW_CCM_ANALOG_PLL_ENET.B.DIV_SELECT = 0x3;
 | 
			
		||||
#else
 | 
			
		||||
	HW_CCM_ANALOG_PLL_ENET.B.DIV_SELECT = 0x1;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // Ungate clocks that are not enabled in a driver - need to be updated 
 | 
			
		||||
    HW_CCM_CCGR0_WR(0xffffffff);
 | 
			
		||||
    HW_CCM_CCGR1_WR(0xFFCF0FFF);    // EPIT, ESAI, GPT enabled by driver
 | 
			
		||||
    HW_CCM_CCGR2_WR(0xFFFFF03F);    // I2C enabled by driver
 | 
			
		||||
    HW_CCM_CCGR3_WR(0xffffffff);
 | 
			
		||||
    HW_CCM_CCGR4_WR(0x00FFFF03);    // GPMI, Perfmon enabled by driver
 | 
			
		||||
    HW_CCM_CCGR5_WR(0xF0FFFFCF);    // UART, SATA enabled by driver
 | 
			
		||||
    HW_CCM_CCGR6_WR(0xffffffff);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Keep default settings at reset.
 | 
			
		||||
     * pre_periph_clk_sel is by default at 0, so the selected output
 | 
			
		||||
     * of PLL2 is the main output at 528MHz.
 | 
			
		||||
     * => by default, ahb_podf divides by 4 => AHB_CLK@132MHz.
 | 
			
		||||
     * => by default, ipg_podf divides by 2 => IPG_CLK@66MHz.
 | 
			
		||||
     */
 | 
			
		||||
    HW_CCM_CBCDR.U = BF_CCM_CBCDR_AHB_PODF(3)
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
        | BF_CCM_CBCDR_AXI_PODF(1)
 | 
			
		||||
#endif
 | 
			
		||||
        | BF_CCM_CBCDR_IPG_PODF(1);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * UART clock tree: PLL3 (480MHz) div-by-6: 80MHz
 | 
			
		||||
     * 80MHz uart_clk_podf (div-by-1) = 80MHz (UART module clock input)
 | 
			
		||||
     */
 | 
			
		||||
//    writel(readl(CCM_CSCDR1) & 0x0000003F, CCM_CSCDR1);
 | 
			
		||||
//     HW_CCM_CSCDR1.U = 
 | 
			
		||||
 | 
			
		||||
    /* Mask all interrupt sources that could wake up the processor when in
 | 
			
		||||
       a low power mode. A source is individually masked/unmasked when the 
 | 
			
		||||
       interrupt is enabled/disabled by the GIC/interrupt driver. */
 | 
			
		||||
    HW_GPC_IMR1_WR(0xFFFFFFFF);
 | 
			
		||||
    HW_GPC_IMR2_WR(0xFFFFFFFF);
 | 
			
		||||
    HW_GPC_IMR3_WR(0xFFFFFFFF);
 | 
			
		||||
    HW_GPC_IMR4_WR(0xFFFFFFFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t get_main_clock(main_clocks_t clock)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ret_val = 0;
 | 
			
		||||
    uint32_t pre_periph_clk_sel = HW_CCM_CBCMR.B.PRE_PERIPH_CLK_SEL;
 | 
			
		||||
 | 
			
		||||
    switch (clock) {
 | 
			
		||||
    case CPU_CLK:
 | 
			
		||||
        ret_val = PLL1_OUTPUT;
 | 
			
		||||
        break;
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
    case AXI_CLK:
 | 
			
		||||
        ret_val = PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.AXI_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
    case MMDC_CH0_AXI_CLK:
 | 
			
		||||
        ret_val = PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.MMDC_CH0_AXI_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
#endif
 | 
			
		||||
    case AHB_CLK:
 | 
			
		||||
        ret_val = PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.AHB_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
    case IPG_CLK:
 | 
			
		||||
        ret_val =
 | 
			
		||||
            PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.AHB_PODF +
 | 
			
		||||
                                               1) / (HW_CCM_CBCDR.B.IPG_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
    case IPG_PER_CLK:
 | 
			
		||||
        ret_val =
 | 
			
		||||
            PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.AHB_PODF +
 | 
			
		||||
                                               1) / (HW_CCM_CBCDR.B.IPG_PODF +
 | 
			
		||||
                                                     1) / (HW_CCM_CSCMR1.B.PERCLK_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
    case MMDC_CH1_AXI_CLK:
 | 
			
		||||
        ret_val = PLL2_OUTPUT[pre_periph_clk_sel] / (HW_CCM_CBCDR.B.MMDC_CH1_AXI_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
#endif
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret_val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t get_peri_clock(peri_clocks_t clock)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ret_val = 0;
 | 
			
		||||
 | 
			
		||||
    switch (clock)
 | 
			
		||||
    {
 | 
			
		||||
        case UART1_MODULE_CLK:
 | 
			
		||||
        case UART2_MODULE_CLK:
 | 
			
		||||
        case UART3_MODULE_CLK:
 | 
			
		||||
        case UART4_MODULE_CLK:
 | 
			
		||||
            // UART source clock is a fixed PLL3 / 6
 | 
			
		||||
            ret_val = PLL3_OUTPUT[0] / 6 / (HW_CCM_CSCDR1.B.UART_CLK_PODF + 1);
 | 
			
		||||
            break;
 | 
			
		||||
        
 | 
			
		||||
        // eCSPI clock:
 | 
			
		||||
        //     PLL3(480) -> /8 -> CSCDR2[ECSPI_CLK_PODF]
 | 
			
		||||
        case SPI_CLK:
 | 
			
		||||
            ret_val = PLL3_OUTPUT[0] / 8 / (HW_CCM_CSCDR2.B.ECSPI_CLK_PODF + 1);
 | 
			
		||||
            break;
 | 
			
		||||
        
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
        case RAWNAND_CLK:
 | 
			
		||||
            ret_val =
 | 
			
		||||
                PLL3_OUTPUT[0] / (HW_CCM_CS2CDR.B.ENFC_CLK_PRED + 1) / (HW_CCM_CS2CDR.B.ENFC_CLK_PODF +
 | 
			
		||||
                                                                        1);
 | 
			
		||||
            break;
 | 
			
		||||
            
 | 
			
		||||
        case CAN_CLK:
 | 
			
		||||
            // For i.mx6dq/sdl CAN source clock is a fixed PLL3 / 8
 | 
			
		||||
        ret_val = PLL3_OUTPUT[0] / 8 / (HW_CCM_CSCMR2.B.CAN_CLK_PODF + 1);
 | 
			
		||||
        break;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret_val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * Set/unset clock gating for a peripheral.
 | 
			
		||||
 * @param   ccm_ccgrx Address of the clock gating register: CCM_CCGR1,...
 | 
			
		||||
 * @param   cgx_offset Offset of the clock gating field: CG(x).
 | 
			
		||||
 * @param   gating_mode Clock gating mode: CLOCK_ON or CLOCK_OFF.
 | 
			
		||||
 */
 | 
			
		||||
void ccm_ccgr_config(uint32_t ccm_ccgrx, uint32_t cgx_offset, uint32_t gating_mode)
 | 
			
		||||
{
 | 
			
		||||
    if (gating_mode == CLOCK_ON)
 | 
			
		||||
    {
 | 
			
		||||
        *(volatile uint32_t *)(ccm_ccgrx) |= cgx_offset;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        *(volatile uint32_t *)(ccm_ccgrx) &= ~cgx_offset;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void clock_gating_config(uint32_t base_address, uint32_t gating_mode)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ccm_ccgrx = 0;
 | 
			
		||||
    uint32_t cgx_offset = 0;
 | 
			
		||||
 | 
			
		||||
    switch (base_address)
 | 
			
		||||
    {
 | 
			
		||||
        case REGS_UART1_BASE:
 | 
			
		||||
        case REGS_UART2_BASE:
 | 
			
		||||
        case REGS_UART3_BASE:
 | 
			
		||||
        case REGS_UART4_BASE:
 | 
			
		||||
        case REGS_UART5_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(13) | CG(12);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SSI3_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(11);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SSI2_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(10);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SSI1_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(9);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SPDIF_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(7);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SPBA_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(6);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_SDMAARM_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(3);
 | 
			
		||||
            break;
 | 
			
		||||
#if CHIP_MX6DQ
 | 
			
		||||
        case REGS_SATA_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR5_ADDR;
 | 
			
		||||
            cgx_offset = CG(2);
 | 
			
		||||
            break;
 | 
			
		||||
#endif // CHIP_MX6DQ
 | 
			
		||||
        case REGS_EPIT1_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(6);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_EPIT2_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(7);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_GPT_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(10);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_I2C1_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR2_ADDR;
 | 
			
		||||
            cgx_offset = CG(3);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_I2C2_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR2_ADDR;
 | 
			
		||||
            cgx_offset = CG(4);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_I2C3_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR2_ADDR;
 | 
			
		||||
            cgx_offset = CG(5);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_ECSPI1_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(0);
 | 
			
		||||
            break;        
 | 
			
		||||
        case REGS_ECSPI2_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(1);
 | 
			
		||||
            break;        
 | 
			
		||||
        case REGS_ECSPI3_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(2);
 | 
			
		||||
            break;        
 | 
			
		||||
        case REGS_ECSPI4_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(3);
 | 
			
		||||
            break;        
 | 
			
		||||
#if CHIP_MX6DQ
 | 
			
		||||
        case REGS_ECSPI5_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(4);
 | 
			
		||||
            break;        
 | 
			
		||||
#endif // CHIP_MX6DQ
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
        case REGS_GPMI_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR4_ADDR;
 | 
			
		||||
            cgx_offset = CG(15) | CG(14) | CG(13) | CG(12);
 | 
			
		||||
            break;
 | 
			
		||||
        case REGS_ESAI_BASE:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR1_ADDR;
 | 
			
		||||
            cgx_offset = CG(8);
 | 
			
		||||
            break;
 | 
			
		||||
        case CAAM_BASE_ADDR:
 | 
			
		||||
            ccm_ccgrx = HW_CCM_CCGR0_ADDR;
 | 
			
		||||
            cgx_offset = CG(6) | CG(5) | CG(4);
 | 
			
		||||
            break;
 | 
			
		||||
#endif // !defined (CHIP_MX6SL)
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // apply changes only if a valid address was found 
 | 
			
		||||
    if (ccm_ccgrx != 0)
 | 
			
		||||
    {
 | 
			
		||||
        ccm_ccgr_config(ccm_ccgrx, cgx_offset, gating_mode);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ccm_set_lpm_wakeup_source(uint32_t irq_id, bool doEnable)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t reg_offset = 0;
 | 
			
		||||
    uint32_t bit_offset = 0;
 | 
			
		||||
    uint32_t gpc_imr = 0;
 | 
			
		||||
 | 
			
		||||
    // calculate the offset of the register handling that interrupt ID
 | 
			
		||||
    // ID starts at 32, so for instance ID=89 is handled by IMR2 because
 | 
			
		||||
    // the integer part of the division is reg_offset = 2
 | 
			
		||||
    reg_offset = (irq_id / 32);
 | 
			
		||||
    // and the rest of the previous division is used to calculate the bit
 | 
			
		||||
    // offset in the register, so for ID=89 this is bit_offset = 25
 | 
			
		||||
    bit_offset = irq_id - 32 * reg_offset;
 | 
			
		||||
 | 
			
		||||
    // get the current value of the corresponding GPC_IMRx register
 | 
			
		||||
    gpc_imr = readl(HW_GPC_IMR1_ADDR + (reg_offset - 1) * 4);
 | 
			
		||||
 | 
			
		||||
    if (doEnable) {
 | 
			
		||||
        // clear the corresponding bit to unmask the interrupt source 
 | 
			
		||||
        gpc_imr &= ~(1 << bit_offset);
 | 
			
		||||
        // write the new mask 
 | 
			
		||||
        writel(gpc_imr, HW_GPC_IMR1_ADDR + (reg_offset - 1) * 4);
 | 
			
		||||
    } else {
 | 
			
		||||
        // set the corresponding bit to mask the interrupt source 
 | 
			
		||||
        gpc_imr |= (1 << bit_offset);
 | 
			
		||||
        // write the new mask 
 | 
			
		||||
        writel(gpc_imr, HW_GPC_IMR1_ADDR + (reg_offset - 1) * 4);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ccm_enter_low_power(lp_modes_t lp_mode)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ccm_clpcr = 0;
 | 
			
		||||
 | 
			
		||||
    // if MMDC channel 1 is not used, the handshake must be masked 
 | 
			
		||||
    // set disable core clock in wait - set disable oscillator in stop
 | 
			
		||||
    ccm_clpcr = 
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
        BM_CCM_CLPCR_BYPASS_MMDC_CH1_LPM_HS |
 | 
			
		||||
#endif
 | 
			
		||||
        BM_CCM_CLPCR_SBYOS | BM_CCM_CLPCR_ARM_CLK_DIS_ON_LPM | lp_mode;
 | 
			
		||||
 | 
			
		||||
    if (lp_mode == STOP_MODE) {
 | 
			
		||||
        // enable peripherals well-biased 
 | 
			
		||||
        ccm_clpcr |= BM_CCM_CLPCR_WB_PER_AT_LPM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    HW_CCM_CLPCR_WR(ccm_clpcr);
 | 
			
		||||
 | 
			
		||||
    __asm(
 | 
			
		||||
             // data synchronization barrier (caches, TLB maintenance, ...) 
 | 
			
		||||
             "dsb;"
 | 
			
		||||
             // wait for interrupt instruction 
 | 
			
		||||
             "wfi;"
 | 
			
		||||
             // instruction synchronization barrier (flush the pipe-line) 
 | 
			
		||||
             "isb;");
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if !defined (CHIP_MX6SL)
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Configure ipu 1 and 2 hsp clk to default 264MHz
 | 
			
		||||
 *
 | 
			
		||||
 * ipu_hsp_clk is derived from mmdc_ch0 divided by 2.
 | 
			
		||||
 */
 | 
			
		||||
void ipu_hsp_clk_config(void)
 | 
			
		||||
{
 | 
			
		||||
    // clk_sel from mmdc_ch0, podf=1
 | 
			
		||||
    HW_CCM_CSCDR3_WR(BF_CCM_CSCDR3_IPU1_HSP_CLK_SEL(0)
 | 
			
		||||
                     | BF_CCM_CSCDR3_IPU1_HSP_PODF(1)
 | 
			
		||||
#if CHIP_MX6DQ
 | 
			
		||||
                     | BF_CCM_CSCDR3_IPU2_HSP_CLK_SEL(0)
 | 
			
		||||
                     | BF_CCM_CSCDR3_IPU2_HSP_PODF(1)
 | 
			
		||||
#endif // CHIP_MX6DQ
 | 
			
		||||
        );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gpu_clock_config(void)
 | 
			
		||||
{
 | 
			
		||||
    HW_CCM_ANALOG_PLL_VIDEO_NUM_WR(0xFF0D6C3);
 | 
			
		||||
    HW_CCM_ANALOG_PLL_VIDEO_WR(BF_CCM_ANALOG_PLL_VIDEO_DIV_SELECT(2) |
 | 
			
		||||
                               BF_CCM_ANALOG_PLL_VIDEO_ENABLE(1) |
 | 
			
		||||
                               BF_CCM_ANALOG_PLL_VIDEO_BYPASS(1));
 | 
			
		||||
    while (!HW_CCM_ANALOG_PLL_VIDEO.B.LOCK) ;   //waiting for PLL lock
 | 
			
		||||
    BF_CLR(CCM_ANALOG_PLL_VIDEO, BYPASS);
 | 
			
		||||
 | 
			
		||||
    //ldb_di0_clk select PLL5
 | 
			
		||||
    HW_CCM_CS2CDR.B.LDB_DI0_CLK_SEL = 0;    // PLL5
 | 
			
		||||
 | 
			
		||||
    HW_IOMUXC_GPR3.B.LVDS1_MUX_CTL = 0; // LVDS1 source is IPU1 DI0 port
 | 
			
		||||
    HW_IOMUXC_GPR3.B.LVDS0_MUX_CTL = 2; // LVDS0 source is IPU2 DI0 port
 | 
			
		||||
 | 
			
		||||
    HW_CCM_CHSCCDR.B.IPU1_DI0_CLK_SEL = 3;  // derive clock from ldb_di0_clk
 | 
			
		||||
    HW_CCM_CSCMR2_SET(BM_CCM_CSCMR2_LDB_DI0_IPU_DIV | BM_CCM_CSCMR2_LDB_DI1_IPU_DIV);   // ldb_di0 divided by 3.5
 | 
			
		||||
 | 
			
		||||
#if CHIP_MX6DQ
 | 
			
		||||
    HW_CCM_CSCDR2.B.IPU2_DI0_CLK_SEL = 3;   // derive clock from ldb_di0_clk
 | 
			
		||||
    HW_CCM_CSCDR2.B.IPU2_DI1_CLK_SEL = 3;   // derive clock from 352M PFD
 | 
			
		||||
#endif // CHIP_MX6DQ
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// End of file
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,150 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _CCM_PLL_H_
 | 
			
		||||
#define _CCM_PLL_H_
 | 
			
		||||
 | 
			
		||||
#include "sdk_types.h"
 | 
			
		||||
 | 
			
		||||
//! @addtogroup diag_clocks
 | 
			
		||||
//! @{
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#define CLK_SRC_32K         32768
 | 
			
		||||
 | 
			
		||||
//! @brief Create a clock gate bit mask value.
 | 
			
		||||
//! @param x 0..15, for CG0 to CG15
 | 
			
		||||
#define CG(x) (3 << (x*2))
 | 
			
		||||
 | 
			
		||||
//! @brief Constants for CCM CCGR register fields.
 | 
			
		||||
enum _clock_gate_constants
 | 
			
		||||
{
 | 
			
		||||
    CLOCK_ON = 0x3, //!< Clock always on in both run and stop modes.
 | 
			
		||||
    CLOCK_ON_RUN = 0x1, //!< Clock on only in run mode.
 | 
			
		||||
    CLOCK_OFF = 0x0 //!< Clocked gated off.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//! @brief Low power mdoes.
 | 
			
		||||
typedef enum _lp_modes {
 | 
			
		||||
    RUN_MODE,
 | 
			
		||||
    WAIT_MODE,
 | 
			
		||||
    STOP_MODE,
 | 
			
		||||
} lp_modes_t;
 | 
			
		||||
 | 
			
		||||
//! @brief Main clock sources.
 | 
			
		||||
typedef enum _main_clocks {
 | 
			
		||||
    CPU_CLK,
 | 
			
		||||
    AXI_CLK,
 | 
			
		||||
    MMDC_CH0_AXI_CLK,
 | 
			
		||||
    AHB_CLK,
 | 
			
		||||
    IPG_CLK,
 | 
			
		||||
    IPG_PER_CLK,
 | 
			
		||||
    MMDC_CH1_AXI_CLK,
 | 
			
		||||
} main_clocks_t;
 | 
			
		||||
 | 
			
		||||
//! @brief Peripheral clocks.
 | 
			
		||||
typedef enum _peri_clocks {
 | 
			
		||||
    UART1_MODULE_CLK,
 | 
			
		||||
    UART2_MODULE_CLK,
 | 
			
		||||
    UART3_MODULE_CLK,
 | 
			
		||||
    UART4_MODULE_CLK,
 | 
			
		||||
    SSI1_BAUD,
 | 
			
		||||
    SSI2_BAUD,
 | 
			
		||||
    CSI_BAUD,
 | 
			
		||||
    MSTICK1_CLK,
 | 
			
		||||
    MSTICK2_CLK,
 | 
			
		||||
    RAWNAND_CLK,
 | 
			
		||||
    USB_CLK,
 | 
			
		||||
    VPU_CLK,
 | 
			
		||||
    SPI_CLK,
 | 
			
		||||
    CAN_CLK
 | 
			
		||||
} peri_clocks_t;
 | 
			
		||||
 | 
			
		||||
//! @brief Available PLLs.
 | 
			
		||||
typedef enum plls {
 | 
			
		||||
    PLL1,
 | 
			
		||||
    PLL2,
 | 
			
		||||
    PLL3,
 | 
			
		||||
    PLL4,
 | 
			
		||||
    PLL5,
 | 
			
		||||
} plls_t;
 | 
			
		||||
 | 
			
		||||
extern const uint32_t PLL1_OUTPUT;
 | 
			
		||||
extern const uint32_t PLL2_OUTPUT[];
 | 
			
		||||
extern const uint32_t PLL3_OUTPUT[];
 | 
			
		||||
extern const uint32_t PLL4_OUTPUT;
 | 
			
		||||
extern const uint32_t PLL5_OUTPUT;
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// API
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! @brief Set/unset clock gating for a peripheral.
 | 
			
		||||
//! @param   base_address configure clock gating for that module from the base address.
 | 
			
		||||
//! @param   gating_mode clock gating mode: CLOCK_ON or CLOCK_OFF.
 | 
			
		||||
void clock_gating_config(uint32_t base_address, uint32_t gating_mode);
 | 
			
		||||
 | 
			
		||||
//! @brief Returns the frequency of a clock in megahertz.
 | 
			
		||||
uint32_t get_main_clock(main_clocks_t clk);
 | 
			
		||||
 | 
			
		||||
//! @brief Returns the frequency of a clock in megahertz.
 | 
			
		||||
uint32_t get_peri_clock(peri_clocks_t clk);
 | 
			
		||||
 | 
			
		||||
//! @brief Inits clock sources.
 | 
			
		||||
void ccm_init(void);
 | 
			
		||||
 | 
			
		||||
//! @brief Prepare and enter in a low power mode.
 | 
			
		||||
//! @param lp_mode low power mode : WAIT_MODE or STOP_MODE.
 | 
			
		||||
void ccm_enter_low_power(lp_modes_t lp_mode);
 | 
			
		||||
 | 
			
		||||
//! @brief Mask/unmask an interrupt source that can wake up the processor when in a
 | 
			
		||||
//! low power mode.
 | 
			
		||||
//!
 | 
			
		||||
//! @param   irq_id ID of the interrupt to mask/unmask.
 | 
			
		||||
//! @param   doEnable Pass true to unmask the source ID.
 | 
			
		||||
void ccm_set_lpm_wakeup_source(uint32_t irq_id, bool doEnable);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! @}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -27,19 +27,19 @@ void EnableLocalInterrupt(unsigned long level)
 | 
			
		|||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t ArchEnableHwIrq(uint32_t irq_num)
 | 
			
		||||
int32_t ArchEnableHwIrq(uint32_t irq_num, uint32_t cpu_id)
 | 
			
		||||
{
 | 
			
		||||
    // gic_set_irq_priority(irq_num, priority);
 | 
			
		||||
    gic_set_irq_security(irq_num, false);    // set IRQ as non-secure
 | 
			
		||||
    // gic_set_cpu_target(irq_num, CPU_0, true);
 | 
			
		||||
    gic_set_cpu_target(irq_num, cpu_id, true);
 | 
			
		||||
    gic_enable_irq(irq_num, true);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t ArchDisableHwIrq(uint32_t irq_num)
 | 
			
		||||
int32_t ArchDisableHwIrq(uint32_t irq_num, uint32_t cpu_id)
 | 
			
		||||
{
 | 
			
		||||
    gic_enable_irq(irq_num, false);
 | 
			
		||||
    // gic_set_cpu_target(irq_num, CPU_0, false);
 | 
			
		||||
    gic_set_cpu_target(irq_num, cpu_id, false);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,285 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file  mmu.c
 | 
			
		||||
 * @brief System memory arangement.
 | 
			
		||||
 */
 | 
			
		||||
#include "cortex_a9.h"
 | 
			
		||||
#include "mmu.h"
 | 
			
		||||
#include "arm_cp_registers.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
//! @brief Size in bytes of the first-level page table.
 | 
			
		||||
#define MMU_L1_PAGE_TABLE_SIZE (16 * 1024)
 | 
			
		||||
 | 
			
		||||
//! @brief First-level 1MB section descriptor entry.
 | 
			
		||||
typedef union mmu_l1_section {
 | 
			
		||||
    uint32_t u;
 | 
			
		||||
    struct {
 | 
			
		||||
        uint32_t id:2;  //!< ID
 | 
			
		||||
        uint32_t b:1;   //!< Bufferable
 | 
			
		||||
        uint32_t c:1;   //!< Cacheable
 | 
			
		||||
        uint32_t xn:1;  //!< Execute-not
 | 
			
		||||
        uint32_t domain:4;  //!< Domain
 | 
			
		||||
        uint32_t _impl_defined:1;   //!< Implementation defined, should be zero.
 | 
			
		||||
        uint32_t ap1_0:2;  //!< Access permissions AP[1:0]
 | 
			
		||||
        uint32_t tex:3; //!< TEX remap
 | 
			
		||||
        uint32_t ap2:1; //!< Access permissions AP[2] 
 | 
			
		||||
        uint32_t s:1;   //!< Shareable
 | 
			
		||||
        uint32_t ng:1;  //!< Not-global
 | 
			
		||||
        uint32_t _zero:1;   //!< Should be zero.
 | 
			
		||||
        uint32_t ns:1;  //!< Non-secure
 | 
			
		||||
        uint32_t address:12;   //!< Physical base address
 | 
			
		||||
    };
 | 
			
		||||
} mmu_l1_section_t;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    kMMU_L1_Section_ID = 2,  //!< ID value for a 1MB section first-level entry.
 | 
			
		||||
    kMMU_L1_Section_Address_Shift = 20  //!< Bit offset of the physical base address field.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Externs
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
extern char __l1_page_table_start;
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Code
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
void mmu_enable()
 | 
			
		||||
{
 | 
			
		||||
    // invalidate all tlb 
 | 
			
		||||
    arm_unified_tlb_invalidate();
 | 
			
		||||
 | 
			
		||||
    // read SCTLR 
 | 
			
		||||
    uint32_t sctlr;
 | 
			
		||||
    _ARM_MRC(15, 0, sctlr, 1, 0, 0);
 | 
			
		||||
    
 | 
			
		||||
    // set MMU enable bit 
 | 
			
		||||
    sctlr |= BM_SCTLR_M;
 | 
			
		||||
 | 
			
		||||
    // write modified SCTLR
 | 
			
		||||
    _ARM_MCR(15, 0, sctlr, 1, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mmu_disable()
 | 
			
		||||
{
 | 
			
		||||
    // read current SCTLR 
 | 
			
		||||
    uint32_t sctlr;
 | 
			
		||||
    _ARM_MRC(15, 0, sctlr, 1, 0, 0);
 | 
			
		||||
    
 | 
			
		||||
    // clear MMU enable bit 
 | 
			
		||||
    sctlr &=~ BM_SCTLR_M;
 | 
			
		||||
 | 
			
		||||
    // write modified SCTLR
 | 
			
		||||
    _ARM_MCR(15, 0, sctlr, 1, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mmu_init()
 | 
			
		||||
{
 | 
			
		||||
    // Get the L1 page table base address.
 | 
			
		||||
    uint32_t * table = (uint32_t *)&__l1_page_table_start;
 | 
			
		||||
    uint32_t share_attr = kShareable;
 | 
			
		||||
 | 
			
		||||
    // write table address to TTBR0
 | 
			
		||||
    _ARM_MCR(15, 0, table, 2, 0, 0);
 | 
			
		||||
 | 
			
		||||
    // set Client mode for all Domains
 | 
			
		||||
    uint32_t dacr = 0x55555555; 
 | 
			
		||||
    _ARM_MCR(15, 0, dacr, 3, 0, 0); // MCR p15, 0, <Rd>, c3, c0, 0 ; Write DACR
 | 
			
		||||
 | 
			
		||||
    // Clear the L1 table.
 | 
			
		||||
    bzero(table, MMU_L1_PAGE_TABLE_SIZE);
 | 
			
		||||
    
 | 
			
		||||
    // Create default mappings.
 | 
			
		||||
    mmu_map_l1_range(0x00000000, 0x00000000, 0x00900000, kStronglyOrdered, kShareable, kRWAccess); // ROM and peripherals
 | 
			
		||||
    mmu_map_l1_range(0x00900000, 0x00900000, 0x00100000, kStronglyOrdered, kShareable, kRWAccess); // OCRAM
 | 
			
		||||
    mmu_map_l1_range(0x00a00000, 0x00a00000, 0x0f600000, kStronglyOrdered, kShareable, kRWAccess); // More peripherals
 | 
			
		||||
   
 | 
			
		||||
    // Check whether SMP is enabled. If it is not, then we don't want to make SDRAM shareable.
 | 
			
		||||
    uint32_t actlr = 0x0;
 | 
			
		||||
    _ARM_MRC(15, 0, actlr, 1, 0, 1);
 | 
			
		||||
    if (actlr & BM_ACTLR_SMP)
 | 
			
		||||
    {
 | 
			
		||||
        share_attr = kShareable;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        share_attr = kNonshareable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if defined(CHIP_MX6DQ) || defined(CHIP_MX6SDL)
 | 
			
		||||
    mmu_map_l1_range(0x10000000, 0x10000000, 0x80000000, kOuterInner_WB_WA, share_attr, kRWAccess); // 2GB DDR
 | 
			
		||||
#elif defined(CHIP_MX6SL)
 | 
			
		||||
    mmu_map_l1_range(0x80000000, 0x80000000, 0x40000000, kOuterInner_WB_WA, share_attr, kRWAccess); // 1GB DDR
 | 
			
		||||
#else
 | 
			
		||||
#error Unknown chip type!
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mmu_map_l1_range(uint32_t pa, uint32_t va, uint32_t length, mmu_memory_type_t memoryType, mmu_shareability_t isShareable, mmu_access_t access)
 | 
			
		||||
{
 | 
			
		||||
    register mmu_l1_section_t entry;
 | 
			
		||||
    entry.u = 0;
 | 
			
		||||
    
 | 
			
		||||
    // Set constant attributes.
 | 
			
		||||
    entry.id = kMMU_L1_Section_ID;
 | 
			
		||||
    entry.xn = 0; // Allow execution
 | 
			
		||||
    entry.domain = 0; // Domain 0
 | 
			
		||||
    entry.ng = 0; // Global
 | 
			
		||||
    entry.ns = 0; // Secure
 | 
			
		||||
    
 | 
			
		||||
    // Set attributes based on the selected memory type.
 | 
			
		||||
    switch (memoryType)
 | 
			
		||||
    {
 | 
			
		||||
        case kStronglyOrdered:
 | 
			
		||||
            entry.c = 0;
 | 
			
		||||
            entry.b = 0;
 | 
			
		||||
            entry.tex = 0;
 | 
			
		||||
            entry.s = 1; // Ignored
 | 
			
		||||
            break;
 | 
			
		||||
        case kDevice:
 | 
			
		||||
            if (isShareable)
 | 
			
		||||
            {
 | 
			
		||||
                entry.c = 0;
 | 
			
		||||
                entry.b = 1;
 | 
			
		||||
                entry.tex = 0;
 | 
			
		||||
                entry.s = 1; // Ignored
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                entry.c = 0;
 | 
			
		||||
                entry.b = 0;
 | 
			
		||||
                entry.tex = 2;
 | 
			
		||||
                entry.s = 0; // Ignored
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case kOuterInner_WB_WA:
 | 
			
		||||
            entry.c = 1;
 | 
			
		||||
            entry.b = 1;
 | 
			
		||||
            entry.tex = 1;
 | 
			
		||||
            entry.s = isShareable;
 | 
			
		||||
            break;
 | 
			
		||||
        case kOuterInner_WT:
 | 
			
		||||
            entry.c = 1;
 | 
			
		||||
            entry.b = 0;
 | 
			
		||||
            entry.tex = 0;
 | 
			
		||||
            entry.s = isShareable;
 | 
			
		||||
            break;
 | 
			
		||||
        case kNoncacheable:
 | 
			
		||||
            entry.c = 0;
 | 
			
		||||
            entry.b = 0;
 | 
			
		||||
            entry.tex = 1;
 | 
			
		||||
            entry.s = isShareable;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Set attributes from specified access mode.
 | 
			
		||||
    switch (access)
 | 
			
		||||
    {
 | 
			
		||||
        case kNoAccess:
 | 
			
		||||
            entry.ap2 = 0;
 | 
			
		||||
            entry.ap1_0 = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case kROAccess:
 | 
			
		||||
            entry.ap2 = 1;
 | 
			
		||||
            entry.ap1_0 = 3;
 | 
			
		||||
            break;
 | 
			
		||||
        case kRWAccess:
 | 
			
		||||
            entry.ap2 = 0;
 | 
			
		||||
            entry.ap1_0 = 3;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Get the L1 page table base address.
 | 
			
		||||
    uint32_t * table = (uint32_t *)&__l1_page_table_start;
 | 
			
		||||
    
 | 
			
		||||
    // Convert addresses to 12-bit bases.
 | 
			
		||||
    uint32_t vbase = va >> kMMU_L1_Section_Address_Shift;
 | 
			
		||||
    uint32_t pbase = pa >> kMMU_L1_Section_Address_Shift;
 | 
			
		||||
    uint32_t entries = length >> kMMU_L1_Section_Address_Shift;
 | 
			
		||||
 | 
			
		||||
    // Fill in L1 page table entries.
 | 
			
		||||
    for (; entries > 0; ++pbase, ++vbase, --entries)
 | 
			
		||||
    {
 | 
			
		||||
        entry.address = pbase;
 | 
			
		||||
        table[vbase] = entry.u;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Invalidate TLB
 | 
			
		||||
    arm_unified_tlb_invalidate();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool mmu_virtual_to_physical(uint32_t virtualAddress, uint32_t * physicalAddress)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t pa = 0;
 | 
			
		||||
    
 | 
			
		||||
    // VA to PA translation with privileged read permission check  
 | 
			
		||||
    _ARM_MCR(15, 0, virtualAddress & 0xfffffc00, 7, 8, 0);
 | 
			
		||||
    
 | 
			
		||||
    // Read PA register 
 | 
			
		||||
    _ARM_MRC(15, 0, pa, 7, 4, 0);
 | 
			
		||||
    
 | 
			
		||||
    // First bit of returned value is Result of conversion (0 is successful translation) 
 | 
			
		||||
    if (pa & 1)
 | 
			
		||||
    {
 | 
			
		||||
        // We can try write permission also 
 | 
			
		||||
        // VA to PA translation with privileged write permission check  
 | 
			
		||||
        _ARM_MCR(15, 0, virtualAddress & 0xfffffc00, 7, 8, 1);
 | 
			
		||||
        
 | 
			
		||||
        // Read PA register 
 | 
			
		||||
        _ARM_MRC(15, 0, pa, 7, 4, 0);
 | 
			
		||||
        
 | 
			
		||||
        // First bit of returned value is Result of conversion (0 is successful translation) 
 | 
			
		||||
        if (pa & 1)
 | 
			
		||||
        {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (physicalAddress)
 | 
			
		||||
    {
 | 
			
		||||
        // complete address returning base + offset
 | 
			
		||||
        pa = (pa & 0xfffff000) | (virtualAddress & 0x00000fff);
 | 
			
		||||
        *physicalAddress = pa;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,157 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//! @addtogroup diag_mmu
 | 
			
		||||
//! @{
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file  mmu.h
 | 
			
		||||
 * @brief System memory arrangement.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _MMU_H_
 | 
			
		||||
#define _MMU_H_
 | 
			
		||||
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
//! @brief Memory region attributes.
 | 
			
		||||
typedef enum _mmu_memory_type
 | 
			
		||||
{
 | 
			
		||||
    kStronglyOrdered,
 | 
			
		||||
    kDevice,
 | 
			
		||||
    kOuterInner_WB_WA,
 | 
			
		||||
    kOuterInner_WT,
 | 
			
		||||
    kNoncacheable,
 | 
			
		||||
} mmu_memory_type_t;
 | 
			
		||||
 | 
			
		||||
//! @brief Memory region shareability options.
 | 
			
		||||
typedef enum _mmu_shareability
 | 
			
		||||
{
 | 
			
		||||
    kShareable = 1,
 | 
			
		||||
    kNonshareable = 0
 | 
			
		||||
} mmu_shareability_t;
 | 
			
		||||
 | 
			
		||||
//! @brief Access permissions for a memory region.
 | 
			
		||||
typedef enum _mmu_access
 | 
			
		||||
{
 | 
			
		||||
    kNoAccess,
 | 
			
		||||
    kROAccess,
 | 
			
		||||
    kRWAccess
 | 
			
		||||
} mmu_access_t;
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Prototypes
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Enable the MMU.
 | 
			
		||||
 *
 | 
			
		||||
 * The L1 page tables and MMU settings must have already been configured by
 | 
			
		||||
 * calling mmu_init() before the MMU is enabled.
 | 
			
		||||
 */
 | 
			
		||||
void mmu_enable();
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Disable the MMU.
 | 
			
		||||
 */
 | 
			
		||||
void mmu_disable();
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Set up the default first-level page table.
 | 
			
		||||
 *
 | 
			
		||||
 * Initializes the L1 page table with the following regions:
 | 
			
		||||
 *  - 0x00000000...0x00900000 : ROM and peripherals, strongly-ordered
 | 
			
		||||
 *  - 0x00900000...0x00a00000 : OCRAM, strongly-ordered
 | 
			
		||||
 *  - For MX6DQ or MX6SDL: 0x10000000...0x90000000 : DDR, normal, outer inner, write-back, write-allocate
 | 
			
		||||
 *  - For MX6SL: 0x80000000...0xc0000000 : DDR, normal, outer inner, write-back, write-allocate
 | 
			
		||||
 *
 | 
			
		||||
 * If the CPU is participating in SMP, then the DDR regions are made shareable. Otherwise they
 | 
			
		||||
 * are marked as non-shareable.
 | 
			
		||||
 *
 | 
			
		||||
 * The TTBR0 register is set to the base of the L1 table.
 | 
			
		||||
 *
 | 
			
		||||
 * All memory domains are configured to allow client access. However, note that only domain 0 is
 | 
			
		||||
 * used by mmu_map_l1_range().
 | 
			
		||||
 */
 | 
			
		||||
void mmu_init();
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Maps a range of memory in the first-level page table.
 | 
			
		||||
 *
 | 
			
		||||
 * Entries in the first-level page table are filled in for the range of virtual addresses
 | 
			
		||||
 * starting at @a va and continuing for @a length bytes. These virtual addreses are mapped
 | 
			
		||||
 * to the physical addresses starting at @a pa and continuing for @a length bytes. All table
 | 
			
		||||
 * entries for the range of mapped memory have the same attributes, which are selected with
 | 
			
		||||
 * the @a memoryType, @a isShareable, and @a access parameters.
 | 
			
		||||
 *
 | 
			
		||||
 * @param pa The base physical address of the range to which the virtual address will be mapped.
 | 
			
		||||
 * @param va The base virtual address of the range.
 | 
			
		||||
 * @param length The size of the range to be mapped, in bytes. This value must be divisible by 1MB.
 | 
			
		||||
 * @param memoryType The type of the memory region. This controls caching, buffering, ordering of
 | 
			
		||||
 *      memory accesses, and other attributes of the region.
 | 
			
		||||
 * @param isShareable The shareability of the physical memory. Ignored for strongly-ordered memory.
 | 
			
		||||
 * @param access Access permissions.
 | 
			
		||||
 */
 | 
			
		||||
void mmu_map_l1_range(uint32_t pa, uint32_t va, uint32_t length, mmu_memory_type_t memoryType, mmu_shareability_t isShareable, mmu_access_t access);
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Convert virtual address to physical.
 | 
			
		||||
 *
 | 
			
		||||
 * First attempts a priviledged read translation for the current security mode. If that fails,
 | 
			
		||||
 * a priviledged write translation, also for the current security mode, is attempted. If this
 | 
			
		||||
 * second attempt at translation fails, then false will be returned.
 | 
			
		||||
 *
 | 
			
		||||
 * @param virtualAddress Virtual address to convert to a physical address.
 | 
			
		||||
 * @param[out] physicalAddress This parameter is filled in with the physical address corresponding
 | 
			
		||||
 *      to the virtual address passed in @a virtualAddress.
 | 
			
		||||
 * @retval true The address returned through @a physicalAddress is valid.
 | 
			
		||||
 * @retval false The conversion failed for some reason.
 | 
			
		||||
 */
 | 
			
		||||
bool mmu_virtual_to_physical(uint32_t virtualAddress, uint32_t * physicalAddress);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! @}
 | 
			
		||||
 | 
			
		||||
#endif // _MMU_H_
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +24,7 @@ KERNELPATHS += \
 | 
			
		|||
	-I$(KERNEL_ROOT)/hardkernel/arch/arm/armv7-a/cortex-a9 \
 | 
			
		||||
	-I$(KERNEL_ROOT)/hardkernel/abstraction \
 | 
			
		||||
	-I$(KERNEL_ROOT)/include \
 | 
			
		||||
	-I$(BSP_ROOT)/third_party_driver/include \
 | 
			
		||||
	-I$(BSP_ROOT)/include
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_RESOURCES_LWIP),y)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
SRC_FILES := board.c ivt.c
 | 
			
		||||
 | 
			
		||||
SRC_DIR := third_party_driver
 | 
			
		||||
SRC_DIR := common third_party_driver
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,10 @@
 | 
			
		|||
void start_kernel()
 | 
			
		||||
#include <isr.h>
 | 
			
		||||
extern void platform_init(void);
 | 
			
		||||
extern void print_version(void);
 | 
			
		||||
void init()
 | 
			
		||||
{
 | 
			
		||||
    SysInitIsrManager();
 | 
			
		||||
    platform_init();
 | 
			
		||||
 | 
			
		||||
    print_version();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
SRC_FILES := platform_init.c print_clock_info.c print_version.c
 | 
			
		||||
SRC_DIR := 
 | 
			
		||||
 | 
			
		||||
include $(KERNEL_ROOT)/compiler.mk
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
// #include "board_io_expanders.h"
 | 
			
		||||
#include "platform_init.h"
 | 
			
		||||
#include <cortex_a9.h>
 | 
			
		||||
#include <mmu.h>
 | 
			
		||||
 | 
			
		||||
#include <registers/regsuart.h>
 | 
			
		||||
 | 
			
		||||
uint32_t g_debug_uart_port = HW_UART4;
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Code
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
void platform_init(void)
 | 
			
		||||
{
 | 
			
		||||
    enable_neon_fpu();
 | 
			
		||||
    disable_strict_align_check();
 | 
			
		||||
    mmu_init();
 | 
			
		||||
 | 
			
		||||
    // Map some SDRAM for DMA
 | 
			
		||||
#if defined(BOARD_EVB)
 | 
			
		||||
    mmu_map_l1_range(0x30000000, 0x30000000, 0x70000000, kNoncacheable, kShareable, kRWAccess);
 | 
			
		||||
#elif defined(BOARD_SMART_DEVICE)
 | 
			
		||||
    mmu_map_l1_range(0x20000000, 0x20000000, 0x30000000, kNoncacheable, kShareable, kRWAccess);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // Enable interrupts. Until this point, the startup code has left interrupts disabled.
 | 
			
		||||
    gic_init();
 | 
			
		||||
    arm_set_interrupt_state(true);
 | 
			
		||||
    
 | 
			
		||||
    // Initialize clock sources, dividers, ... 
 | 
			
		||||
    ccm_init();
 | 
			
		||||
    
 | 
			
		||||
    // Configure the EPIT timer used for system delay function. 
 | 
			
		||||
    system_time_init();
 | 
			
		||||
    
 | 
			
		||||
    // Initialize the debug/console UART 
 | 
			
		||||
    uart_init(g_debug_uart_port, 115200, PARITY_NONE, STOPBITS_ONE, EIGHTBITS, FLOWCTRL_OFF);
 | 
			
		||||
 | 
			
		||||
    // flush UART RX FIFO 
 | 
			
		||||
    uint8_t c;
 | 
			
		||||
    do {
 | 
			
		||||
        c = uart_getchar(g_debug_uart_port);
 | 
			
		||||
    } while (c != NONE_CHAR);
 | 
			
		||||
 | 
			
		||||
    // Some init for the board 
 | 
			
		||||
    // board_ioexpander_init();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(__PLATFORM_INIT_H__)
 | 
			
		||||
#define __PLATFORM_INIT_H__
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! @brief Do basic hardware initialization to make the system usable.
 | 
			
		||||
//!
 | 
			
		||||
//! Performs minimal initialization to enable most drivers to work. The GIC,
 | 
			
		||||
//! CCM, and UART drivers are inited. The systme timer is inited. And
 | 
			
		||||
//! board_ioexpander_init() is called.
 | 
			
		||||
void platform_init(void);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // __PLATFORM_INIT_H__
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,129 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "print_clock_info.h"
 | 
			
		||||
#include <ccm_pll.h>
 | 
			
		||||
#include <registers/regsuart.h>
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Code
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
extern uint32_t g_debug_uart_port;
 | 
			
		||||
void show_freq(void)
 | 
			
		||||
{
 | 
			
		||||
    printf("========== Clock frequencies ===========\n");
 | 
			
		||||
 | 
			
		||||
    printf("CPU: %ld kHz\n", get_main_clock(CPU_CLK)/1000);
 | 
			
		||||
    printf("DDR: %ld kHz\n", get_main_clock(MMDC_CH0_AXI_CLK)/1000);
 | 
			
		||||
    printf("IPG: %ld kHz\n", get_main_clock(IPG_CLK)/1000);
 | 
			
		||||
    
 | 
			
		||||
    peri_clocks_t clk = UART1_MODULE_CLK + (g_debug_uart_port - HW_UART1);
 | 
			
		||||
    printf("Debug UART: %ld Hz\n", get_peri_clock(clk));
 | 
			
		||||
 | 
			
		||||
    printf("========================================\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! @todo Rewrite for MMDC controller. This code is currently for MX53.
 | 
			
		||||
void show_ddr_config(void)
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
    uint32_t temp1, dsiz, row, col, cs_info;
 | 
			
		||||
    uint32_t temp2, num_banks, ddr_type;
 | 
			
		||||
    uint32_t density, megabyte;
 | 
			
		||||
    uint32_t num_rows = 1, num_cols = 1, num_dsiz = 1, i = 1;
 | 
			
		||||
 | 
			
		||||
    printf("========== DDR configuration ===========\n");
 | 
			
		||||
 | 
			
		||||
    megabyte = 1024 * 1024;
 | 
			
		||||
    /* read ESDCTL and gather information */
 | 
			
		||||
    temp1 = readl(ESDCTL_REGISTERS_BASE_ADDR + 0x00);
 | 
			
		||||
    dsiz = ((temp1 & (0x00030000)) >> 16);
 | 
			
		||||
    /*Calculate dsize */
 | 
			
		||||
    while (i <= dsiz) {
 | 
			
		||||
        num_dsiz *= 2;
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
    dsiz = 16 * num_dsiz;
 | 
			
		||||
 | 
			
		||||
    row = ((temp1 & (0x07000000)) >> 24) + 11;
 | 
			
		||||
    col = ((temp1 & (0x00700000)) >> 20) + 9;
 | 
			
		||||
    cs_info = (temp1 & (0xC0000000)) >> 30;
 | 
			
		||||
    /* read ESDMISC to get # of BANK info */
 | 
			
		||||
    temp2 = readl(ESDCTL_REGISTERS_BASE_ADDR + 0x18);
 | 
			
		||||
    num_banks = (!((temp2 & (0x00000020)) >> 5)) * 4 + 4;
 | 
			
		||||
    ddr_type = (temp2 & (0x00000018)) >> 3;
 | 
			
		||||
    printf("data bits: %d, num_banks: %d \n", dsiz, num_banks);
 | 
			
		||||
    printf("row: %d, col: %d \n", row, col);
 | 
			
		||||
 | 
			
		||||
    if (ddr_type == 1)
 | 
			
		||||
        printf("DDR type is DDR2 \n");
 | 
			
		||||
    else if (ddr_type == 2)
 | 
			
		||||
        printf("DDR type is LPDDR2\n");
 | 
			
		||||
    else
 | 
			
		||||
        printf("DDR type is DDR3 \n");
 | 
			
		||||
 | 
			
		||||
    if (cs_info == 0)
 | 
			
		||||
        printf("No chip select is enabled \n");
 | 
			
		||||
    else if (cs_info == 2)
 | 
			
		||||
        printf("Chip select CSD0 is used \n");
 | 
			
		||||
    else if (cs_info == 1)
 | 
			
		||||
        printf("Chip select CSD1 is used  \n");
 | 
			
		||||
    else
 | 
			
		||||
        printf("Both chip select CSD0 and CSD1 are used  \n");
 | 
			
		||||
 | 
			
		||||
    /* Now calculate the DDR density per chip select */
 | 
			
		||||
 | 
			
		||||
    i = 1;
 | 
			
		||||
    /* First need to calculate the number of rows and cols 2^row and 2^col */
 | 
			
		||||
    while (i <= row) {
 | 
			
		||||
        num_rows *= 2;
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    debug_printf("num_rows= %d\n", num_rows);
 | 
			
		||||
    i = 1;
 | 
			
		||||
 | 
			
		||||
    while (i <= col) {
 | 
			
		||||
        num_cols *= 2;
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    debug_printf("num_cols= %d\n", num_cols);
 | 
			
		||||
    density = num_rows * num_cols / megabyte;
 | 
			
		||||
    density = density * dsiz * num_banks / 8;
 | 
			
		||||
    printf("Density per chip select: %dMB \n", density);
 | 
			
		||||
    printf("========================================\n\n");
 | 
			
		||||
#endif // 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__PRINT_CLOCK_INFO_H__)
 | 
			
		||||
#define __PRINT_CLOCK_INFO_H__
 | 
			
		||||
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
 | 
			
		||||
//! @addtogroup app_common
 | 
			
		||||
//! @{
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// API
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Display module frequency
 | 
			
		||||
 */
 | 
			
		||||
void show_freq(void);
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Display the board's DDR configuration
 | 
			
		||||
 */
 | 
			
		||||
void show_ddr_config(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! @}
 | 
			
		||||
 | 
			
		||||
#endif // __PRINT_CLOCK_INFO_H__
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,73 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file  print_version.c
 | 
			
		||||
 * @brief Contains function to print out the app release version.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
#include "sdk_version.h"
 | 
			
		||||
// #include "board_id/board_id.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Code
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * print out the diag release version info
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void print_version(void)
 | 
			
		||||
{
 | 
			
		||||
    // char chip_str[64] = { 0 };
 | 
			
		||||
    // char chip_rev_str[64] = { 0 };
 | 
			
		||||
    // char board_str[64] = { 0 };
 | 
			
		||||
    // char board_rev_str[64] = { 0 };
 | 
			
		||||
 | 
			
		||||
    // fsl_board_id_t fsl_board_id = get_board_id();
 | 
			
		||||
 | 
			
		||||
    // chip_name(chip_str, fsl_board_id.B.CHIP_TYPE_ID, false);
 | 
			
		||||
    // chip_revision(chip_rev_str, fsl_board_id.B.CHIP_REV_MAJOR, fsl_board_id.B.CHIP_REV_MINOR);
 | 
			
		||||
    // board_name(board_str, BOARD_TYPE);
 | 
			
		||||
    // board_revision(board_rev_str, BOARD_REVISION);
 | 
			
		||||
 | 
			
		||||
    // printf("\n\n\n\n");
 | 
			
		||||
    // printf("**************************************************************************\n");
 | 
			
		||||
    // printf("    Platform SDK (%s) for %s %s %s %s\n", k_sdk_version, chip_str, chip_rev_str,
 | 
			
		||||
    //        board_str, board_rev_str);
 | 
			
		||||
    // printf("    Build: %s, %s\n", __DATE__, __TIME__);
 | 
			
		||||
    // printf("    %s\n", k_sdk_copyright);
 | 
			
		||||
    printf("**************************************************************************\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file print_version.h
 | 
			
		||||
 * @brief release version define - should be changed for each release
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(__PRINT_VERSION_H__)
 | 
			
		||||
#define __PRINT_VERSION_H__
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Prototypes
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @brief Prints the version header to the console.
 | 
			
		||||
 */
 | 
			
		||||
void print_version(void);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // __PRINT_VERSION_H__
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ endif
 | 
			
		|||
# export LINK_LWIP := $(KERNEL_ROOT)/resources/ethernet/LwIP/liblwip.a
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
export DEFINES := -DHAVE_CCONFIG_H
 | 
			
		||||
export DEFINES := -DHAVE_CCONFIG_H -DCHIP_MX6DQ
 | 
			
		||||
 | 
			
		||||
export USING_NEWLIB =1
 | 
			
		||||
export USING_VFS = 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
/*!
 | 
			
		||||
 * @file buffers.h
 | 
			
		||||
 * @definitions for ALL buffer memory space regions used by sdk drivers
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define IPU_DEFAULT_WORK_CLOCK 264000000
 | 
			
		||||
#define IPU_DMA_MEMORY_START	0x40000000
 | 
			
		||||
#define IPU_DMA_MEMORY_END		0x43FFFFFF
 | 
			
		||||
 | 
			
		||||
#define HDMI_AUDIO_BUF_START  0x4fff0000
 | 
			
		||||
#define HDMI_AUDIO_BUF_END    0x4fff4000
 | 
			
		||||
 | 
			
		||||
#define CH23_EBA0 	(IPU_DMA_MEMORY_START + 0x00000000)
 | 
			
		||||
#define CH23_EBA1 	(IPU_DMA_MEMORY_START + 0x00400000)
 | 
			
		||||
#define CH27_EBA0 	(IPU_DMA_MEMORY_START + 0x00800000)
 | 
			
		||||
#define CH27_EBA1 	(IPU_DMA_MEMORY_START + 0x00C00000)
 | 
			
		||||
#define CH28_EBA0 	(IPU_DMA_MEMORY_START + 0x01000000)
 | 
			
		||||
#define CH28_EBA1 	(IPU_DMA_MEMORY_START + 0x01400000)
 | 
			
		||||
#define CH0_EBA0 	(IPU_DMA_MEMORY_START + 0x01800000)
 | 
			
		||||
#define CH0_EBA1 	(IPU_DMA_MEMORY_START + 0x01C00000)
 | 
			
		||||
 | 
			
		||||
/*for dual video playback*/
 | 
			
		||||
#define IPU1_CH23_EBA0	CH23_EBA0
 | 
			
		||||
#define IPU1_CH23_EBA1	CH23_EBA1
 | 
			
		||||
#define IPU2_CH23_EBA0	CH27_EBA0
 | 
			
		||||
#define IPU2_CH23_EBA1	CH27_EBA1
 | 
			
		||||
 | 
			
		||||
// for video playback after resizing&rotation
 | 
			
		||||
#define CH22_EBA0 	(IPU_DMA_MEMORY_START + 0x01800000)
 | 
			
		||||
#define CH22_EBA1	(IPU_DMA_MEMORY_START + 0x01C00000)
 | 
			
		||||
 | 
			
		||||
#define CH21_EBA0 	(IPU_DMA_MEMORY_START + 0x02000000)
 | 
			
		||||
#define CH21_EBA1 	(IPU_DMA_MEMORY_START + 0x02400000)
 | 
			
		||||
#define CH20_EBA0 	(IPU_DMA_MEMORY_START + 0x02800000)
 | 
			
		||||
#define CH20_EBA1 	(IPU_DMA_MEMORY_START + 0x02C00000)
 | 
			
		||||
 | 
			
		||||
/* put the TWO video instance on different CS to
 | 
			
		||||
   improve the performance.
 | 
			
		||||
 */
 | 
			
		||||
#define VPU_WORK_BUFFERS        (0x44100000)
 | 
			
		||||
#define VIDEO_BUFFERS_START     (0x48000000)
 | 
			
		||||
#define VIDEO_BUFFERS_END       (0x4FFFFFFF)
 | 
			
		||||
 | 
			
		||||
/*OCRAM partition table*/
 | 
			
		||||
#define VPU_SEC_AXI_START	0x00910000
 | 
			
		||||
#define VPU_SEC_AXI_END		0x0091FFFF
 | 
			
		||||
 | 
			
		||||
/* OCRAM ADMA buffer */
 | 
			
		||||
#define USDHC_ADMA_BUFFER1 0x00907000
 | 
			
		||||
#define USDHC_ADMA_BUFFER2 0x00908000
 | 
			
		||||
#define USDHC_ADMA_BUFFER3 0x00909000
 | 
			
		||||
#define USDHC_ADMA_BUFFER4 0x0090A000
 | 
			
		||||
 | 
			
		||||
// USB buffers
 | 
			
		||||
#define QH_BUFFER               0x00908000  // internal RAM
 | 
			
		||||
#define TD_BUFFER               0x00908200  // internal RAM
 | 
			
		||||
 | 
			
		||||
#define SATA_PROTOCOL_BUFFER_BASE 0x0090a000
 | 
			
		||||
#define SATA_PROTOCOL_BUFFER_SIZE 0x1000
 | 
			
		||||
#define SATA_TRANSFER_BUFFER_BASE 0x0090c000
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,144 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2008-2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
 * are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions of source code must retain the above copyright notice, this list
 | 
			
		||||
 *   of conditions and the following disclaimer.
 | 
			
		||||
 *
 | 
			
		||||
 * o Redistributions in binary form must reproduce the above copyright notice, this
 | 
			
		||||
 *   list of conditions and the following disclaimer in the documentation and/or
 | 
			
		||||
 *   other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
 | 
			
		||||
 *   contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *   software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * @file io.h
 | 
			
		||||
 * @brief Register access macros.
 | 
			
		||||
 *
 | 
			
		||||
 * @ingroup diag_init
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __IO_H__
 | 
			
		||||
#define __IO_H__
 | 
			
		||||
 | 
			
		||||
#include "sdk_types.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "sdk.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Definitions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
//! @name Register read functions
 | 
			
		||||
//@{
 | 
			
		||||
#define reg8_read(addr)       *((volatile uint8_t *)(addr))
 | 
			
		||||
#define reg16_read(addr)      *((volatile uint16_t *)(addr))
 | 
			
		||||
#define reg32_read(addr)      *((volatile uint32_t *)(addr))
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Register write functions
 | 
			
		||||
//@{
 | 
			
		||||
#define reg8_write(addr,val)  *((volatile uint8_t *)(addr)) = (val)
 | 
			
		||||
#define reg16_write(addr,val) *((volatile uint16_t *)(addr)) = (val)
 | 
			
		||||
#define reg32_write(addr,val) *((volatile uint32_t *)(addr)) = (val)
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Memory read functions
 | 
			
		||||
//@{
 | 
			
		||||
#define mem8_read(addr)       *((volatile uint8_t *)(addr))
 | 
			
		||||
#define mem16_read(addr)      *((volatile uint16_t *)(addr))
 | 
			
		||||
#define mem32_read(addr)      *((volatile uint32_t *)(addr))
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Memory write functions
 | 
			
		||||
//@{
 | 
			
		||||
#define mem8_write(addr,val)  *((volatile uint8_t *)(addr)) = (val)
 | 
			
		||||
#define mem16_write(addr,val) *((volatile uint16_t *)(addr)) = (val)
 | 
			
		||||
#define mem32_write(addr,val) *((volatile uint32_t *)(addr)) = (val)
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Read functions
 | 
			
		||||
//@{
 | 
			
		||||
#define readb(a)        reg8_read(a)
 | 
			
		||||
#define readw(a)        reg16_read(a)
 | 
			
		||||
#define readl(a)        reg32_read(a)
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Write functrions
 | 
			
		||||
//!
 | 
			
		||||
//! The prefered method to access registers.
 | 
			
		||||
//@{
 | 
			
		||||
#define writeb(v, a)    reg8_write(a, v)
 | 
			
		||||
#define writew(v, a)    reg16_write(a, v)
 | 
			
		||||
#define writel(v, a)    reg32_write(a, v)
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Bit set/clear functions
 | 
			
		||||
//@{
 | 
			
		||||
#define  reg8setbit(addr,bitpos) \
 | 
			
		||||
         reg8_write((addr),(reg8_read((addr)) | (1<<(bitpos))))
 | 
			
		||||
 | 
			
		||||
#define  reg16setbit(addr,bitpos) \
 | 
			
		||||
         reg16_write((addr),(reg16_read((addr)) | (1<<(bitpos))))
 | 
			
		||||
 | 
			
		||||
#define  reg32setbit(addr,bitpos) \
 | 
			
		||||
         reg32_write((addr),(reg32_read((addr)) | (1<<(bitpos))))
 | 
			
		||||
 | 
			
		||||
#define  reg8clrbit(addr,bitpos) \
 | 
			
		||||
         reg8_write((addr),(reg8_read((addr)) & (0xFF ^ (1<<(bitpos)))))
 | 
			
		||||
 | 
			
		||||
#define  reg16clrbit(addr,bitpos) \
 | 
			
		||||
         reg16_write((addr),(reg16_read((addr)) & (0xFFFF ^ (1<<(bitpos)))))
 | 
			
		||||
 | 
			
		||||
#define  reg32clrbit(addr,bitpos) \
 | 
			
		||||
         reg32_write((addr),(reg32_read((addr)) & (0xFFFFFFFF ^ (1<<(bitpos)))))
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//! @name Masked write functions
 | 
			
		||||
//@{
 | 
			
		||||
#define reg8_write_mask(addr, data, mask) \
 | 
			
		||||
        reg8_write((addr),((reg8_read(addr) & (~mask)) | (mask & data)))
 | 
			
		||||
 | 
			
		||||
#define reg16_write_mask(addr, data, mask) \
 | 
			
		||||
        reg16_write((addr),((reg16_read(addr) & (~mask)) | (mask & data)))
 | 
			
		||||
 | 
			
		||||
#define reg32_write_mask(addr, data, mask) \
 | 
			
		||||
        reg32_write((addr),((reg32_read(addr) & (~mask)) | (mask & data)))
 | 
			
		||||
 | 
			
		||||
#define gen_msk32(start, end)	((0xFFFFFFFF << (start)) ^ (0xFFFFFFFF << ((end + 1))))
 | 
			
		||||
#define reg32_set_field(addr, start, end, val) \
 | 
			
		||||
		reg32_write_mask(addr, (val) << (start), gen_msk32((start, end)))
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * This macro is used to get certain bit field from a number
 | 
			
		||||
 */
 | 
			
		||||
#define GET_FIELD(val, len, sh)          ((val >> sh) & ((1 << len) - 1))
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * This macro is used to set certain bit field inside a number
 | 
			
		||||
 */
 | 
			
		||||
#define SET_FIELD(val, len, sh, nval)    ((val & ~(((1 << len) - 1) << sh)) | (nval << sh))
 | 
			
		||||
 | 
			
		||||
#endif // __IO_H__
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// EOF
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) 2012, Freescale Semiconductor, Inc.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 | 
			
		||||
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 | 
			
		||||
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// File: iomux_config.h
 | 
			
		||||
 | 
			
		||||
/* ------------------------------------------------------------------------------
 | 
			
		||||
 * <auto-generated>
 | 
			
		||||
 *     This code was generated by a tool.
 | 
			
		||||
 *     Runtime Version:3.4.0.0
 | 
			
		||||
 *
 | 
			
		||||
 *     Changes to this file may cause incorrect behavior and will be lost if
 | 
			
		||||
 *     the code is regenerated.
 | 
			
		||||
 * </auto-generated>
 | 
			
		||||
 * ------------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _IOMUX_CONFIG_H_
 | 
			
		||||
#define _IOMUX_CONFIG_H_
 | 
			
		||||
 | 
			
		||||
// Board and Module IOMUXC configuration function prototypes.
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Board IOMUXC configuration function.
 | 
			
		||||
void iomux_config(void);
 | 
			
		||||
 | 
			
		||||
// Module IOMUXC configuration functions.
 | 
			
		||||
void arm_iomux_config(void);
 | 
			
		||||
void asrc_iomux_config(void);
 | 
			
		||||
void audmux_iomux_config(void);
 | 
			
		||||
void ccm_iomux_config(void);
 | 
			
		||||
void dcic_iomux_config(int instance);
 | 
			
		||||
void dcic1_iomux_config(void);
 | 
			
		||||
void dcic2_iomux_config(void);
 | 
			
		||||
void ecspi_iomux_config(int instance);
 | 
			
		||||
void ecspi1_iomux_config(void);
 | 
			
		||||
void ecspi2_iomux_config(void);
 | 
			
		||||
void ecspi3_iomux_config(void);
 | 
			
		||||
void ecspi4_iomux_config(void);
 | 
			
		||||
void ecspi5_iomux_config(void);
 | 
			
		||||
void eim_iomux_config(void);
 | 
			
		||||
void enet_iomux_config(void);
 | 
			
		||||
void epit_iomux_config(int instance);
 | 
			
		||||
void epit1_iomux_config(void);
 | 
			
		||||
void epit2_iomux_config(void);
 | 
			
		||||
void esai_iomux_config(void);
 | 
			
		||||
void flexcan_iomux_config(int instance);
 | 
			
		||||
void flexcan1_iomux_config(void);
 | 
			
		||||
void flexcan2_iomux_config(void);
 | 
			
		||||
void gpio_iomux_config(int instance);
 | 
			
		||||
void gpio1_iomux_config(void);
 | 
			
		||||
void gpio2_iomux_config(void);
 | 
			
		||||
void gpio3_iomux_config(void);
 | 
			
		||||
void gpio4_iomux_config(void);
 | 
			
		||||
void gpio5_iomux_config(void);
 | 
			
		||||
void gpio6_iomux_config(void);
 | 
			
		||||
void gpio7_iomux_config(void);
 | 
			
		||||
void gpmi_iomux_config(void);
 | 
			
		||||
void gpt_iomux_config(void);
 | 
			
		||||
void hdmi_iomux_config(void);
 | 
			
		||||
void i2c_iomux_config(int instance);
 | 
			
		||||
void i2c1_iomux_config(void);
 | 
			
		||||
void i2c2_iomux_config(void);
 | 
			
		||||
void i2c3_iomux_config(void);
 | 
			
		||||
void ipu_iomux_config(int instance);
 | 
			
		||||
void ipu1_iomux_config(void);
 | 
			
		||||
void ipu2_iomux_config(void);
 | 
			
		||||
void kpp_iomux_config(void);
 | 
			
		||||
void ldb_iomux_config(void);
 | 
			
		||||
void mipi_csi_iomux_config(void);
 | 
			
		||||
void mipi_dsi_iomux_config(void);
 | 
			
		||||
void mipi_hsi_iomux_config(void);
 | 
			
		||||
void mlb_iomux_config(void);
 | 
			
		||||
void mmdc_iomux_config(void);
 | 
			
		||||
void pcie_iomux_config(void);
 | 
			
		||||
void pmu_iomux_config(void);
 | 
			
		||||
void pwm_iomux_config(int instance);
 | 
			
		||||
void pwm1_iomux_config(void);
 | 
			
		||||
void pwm2_iomux_config(void);
 | 
			
		||||
void pwm3_iomux_config(void);
 | 
			
		||||
void pwm4_iomux_config(void);
 | 
			
		||||
void sata_phy_iomux_config(void);
 | 
			
		||||
void sdma_iomux_config(void);
 | 
			
		||||
void sjc_iomux_config(void);
 | 
			
		||||
void snvs_iomux_config(void);
 | 
			
		||||
void spdif_iomux_config(void);
 | 
			
		||||
void src_iomux_config(void);
 | 
			
		||||
void uart_iomux_config(int instance);
 | 
			
		||||
void uart1_iomux_config(void);
 | 
			
		||||
void uart2_iomux_config(void);
 | 
			
		||||
void uart3_iomux_config(void);
 | 
			
		||||
void uart4_iomux_config(void);
 | 
			
		||||
void uart5_iomux_config(void);
 | 
			
		||||
void usb_iomux_config(void);
 | 
			
		||||
void usdhc_iomux_config(int instance);
 | 
			
		||||
void usdhc1_iomux_config(void);
 | 
			
		||||
void usdhc2_iomux_config(void);
 | 
			
		||||
void usdhc3_iomux_config(void);
 | 
			
		||||
void usdhc4_iomux_config(void);
 | 
			
		||||
void wdog_iomux_config(int instance);
 | 
			
		||||
void wdog1_iomux_config(void);
 | 
			
		||||
void wdog2_iomux_config(void);
 | 
			
		||||
void xtalosc_iomux_config(void);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // _IOMUX_CONFIG_H_
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue