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
 | 
					    SRC_FILES := main.c
 | 
				
			||||||
    ifeq ($(CONFIG_LIB_LV),y)
 | 
					    ifeq ($(CONFIG_LIB_LV),y)
 | 
				
			||||||
        SRC_DIR += lv_app
 | 
					        SRC_DIR += lv_app
 | 
				
			||||||
 | 
					        SRC_DIR += tinyttf_app
 | 
				
			||||||
    endif
 | 
					    endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ifeq ($(CONFIG_APPLICATION_OTA),y)
 | 
					    ifeq ($(CONFIG_APPLICATION_OTA),y)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@
 | 
				
			||||||
* @date:    2022/1/7
 | 
					* @date:    2022/1/7
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ADD_XIZI_FETURES
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -56,4 +57,5 @@ void TestAdc(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestAdc, a adc test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static uint16_t image_buff[384000];
 | 
					static uint16_t image_buff[384000];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestCamera(int argc, char *argv[])
 | 
					void TestCamera(int argc, char *argv[])
 | 
				
			||||||
| 
						 | 
					@ -96,4 +117,5 @@ void TestCamera(int argc, char *argv[])
 | 
				
			||||||
    printf("The camera test is finished successfully\n");
 | 
					    printf("The camera test is finished successfully\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestCamera, a camera test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.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);
 | 
					PRIV_SHELL_CMD_FUNCTION(TestCAN, a can test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@
 | 
				
			||||||
* @author:  AIIT XUOS Lab
 | 
					* @author:  AIIT XUOS Lab
 | 
				
			||||||
* @date:    2022/1/11
 | 
					* @date:    2022/1/11
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					#ifdef ADD_XIZI_FETURES
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -57,3 +57,4 @@ void TestDac(void)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestDac, a dac test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -171,3 +191,4 @@ PRIV_SHELL_CMD_FUNCTION(TestSocketAsClient, a w5500 client-ip-port-msg test samp
 | 
				
			||||||
#endif
 | 
					#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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -32,4 +52,5 @@ void TestFlash(void)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestFlash, a flash test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -59,4 +79,5 @@ void TestFs(void)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestFs, a sd or usb filesystem test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -70,4 +90,5 @@ void  TestGpio(void)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestGpio, a gpio test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -73,4 +93,5 @@ void TestHwTimer(void)
 | 
				
			||||||
    PrivClose(timer_fd);
 | 
					    PrivClose(timer_fd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestHwTimer, a timer test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.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);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -18,8 +38,21 @@ void TestLcd(void)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // draw text
 | 
					 | 
				
			||||||
    LcdWriteParam graph_param;
 | 
					    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.type = LCD_STRING_TYPE;
 | 
				
			||||||
    graph_param.string_info.x_pos = 0;
 | 
					    graph_param.string_info.x_pos = 0;
 | 
				
			||||||
    graph_param.string_info.y_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.back_color = 0xFFFF;
 | 
				
			||||||
    graph_param.string_info.font_color = 0x0000;
 | 
					    graph_param.string_info.font_color = 0x0000;
 | 
				
			||||||
    graph_param.string_info.addr = "hello_world!";
 | 
					    graph_param.string_info.addr = "hello_world!";
 | 
				
			||||||
 | 
					 | 
				
			||||||
    PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
					    PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint16 color_select = 0xF800;
 | 
					    // draw line
 | 
				
			||||||
    for (int i = 0; i < 5; i++)
 | 
					    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.type = LCD_DOT_TYPE;
 | 
				
			||||||
        graph_param.pixel_info.x_startpos = 0;
 | 
					        graph_param.pixel_info.x_startpos = 0;
 | 
				
			||||||
        graph_param.pixel_info.y_startpos = 50 * i;
 | 
					        graph_param.pixel_info.y_startpos = i * 50;
 | 
				
			||||||
        graph_param.pixel_info.x_endpos = 320;
 | 
					        graph_param.pixel_info.x_endpos = 319;
 | 
				
			||||||
        graph_param.pixel_info.y_endpos = 50 * i;
 | 
					        graph_param.pixel_info.y_endpos = i * 50;
 | 
				
			||||||
        graph_param.pixel_info.pixel_color = &color_select;
 | 
					        graph_param.pixel_info.pixel_color = color_select;
 | 
				
			||||||
        PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
					        PrivWrite(lcd_fd, &graph_param, NULL_PARAMETER);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    free(color_select);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PrivClose(lcd_fd);
 | 
					    PrivClose(lcd_fd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestLcd, a lcd test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.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);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -83,4 +103,5 @@ void Test485(void)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(Test485, a RS485 test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.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);
 | 
					PRIV_SHELL_CMD_FUNCTION(TestRTC, a rtc test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,6 @@ void TestTouch(void)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -49,6 +48,7 @@ void TestTouch(void)
 | 
				
			||||||
#define LCD_DOT_TYPE 1
 | 
					#define LCD_DOT_TYPE 1
 | 
				
			||||||
#define LCD_SIZE 320
 | 
					#define LCD_SIZE 320
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif ADD_XIZI_FETURES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestTouch(void)
 | 
					void TestTouch(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -109,4 +109,5 @@ void TestTouch(void)
 | 
				
			||||||
    PrivClose(touch_fd);
 | 
					    PrivClose(touch_fd);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestTouch, a touch test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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 <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <transform.h>
 | 
					#include <transform.h>
 | 
				
			||||||
| 
						 | 
					@ -42,4 +62,5 @@ void TestWDT(int argc, char *agrv[])
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PRIV_SHELL_CMD_FUNCTION(TestWDT, a wdt test sample, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
					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
 | 
					#endif
 | 
				
			||||||
#ifdef ADD_NUTTX_FETURES
 | 
					#ifdef ADD_NUTTX_FETURES
 | 
				
			||||||
    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
					    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
				
			||||||
    attr.priority = LWIP_TCP_DEMO_TASK_PRIO;
 | 
					    attr.priority = LWIP_UDP_DEMO_TASK_PRIO;
 | 
				
			||||||
    attr.stacksize = LWIP_TCP_DEMO_TASK_STACK_SIZE;
 | 
					    attr.stacksize = LWIP_UDP_DEMO_TASK_STACK_SIZE;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PrivTaskCreate(&udp_server_task, &attr, &UdpSocketRecvTask, NULL);
 | 
					    PrivTaskCreate(&udp_server_task, &attr, &UdpSocketRecvTask, NULL);
 | 
				
			||||||
| 
						 | 
					@ -208,8 +208,8 @@ void UdpSocketSendTest(int argc, char *argv[])
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef ADD_NUTTX_FETURES
 | 
					#ifdef ADD_NUTTX_FETURES
 | 
				
			||||||
    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
					    pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
 | 
				
			||||||
    attr.priority = LWIP_TCP_DEMO_TASK_PRIO;
 | 
					    attr.priority = LWIP_UDP_DEMO_TASK_PRIO;
 | 
				
			||||||
    attr.stacksize = LWIP_TCP_DEMO_TASK_STACK_SIZE;
 | 
					    attr.stacksize = LWIP_UDP_DEMO_TASK_STACK_SIZE;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PrivTaskCreate(&udp_client_task, &attr, &UdpSocketSendTask, NULL);
 | 
					    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
 | 
					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
 | 
					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
 | 
					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();
 | 
					    Adapter4GActive();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ControlProtocolType modbus_tcp_protocol = ControlProtocolFind();
 | 
					    ControlProtocolType melsec_1e_protocol = ControlProtocolFind();
 | 
				
			||||||
    if (NULL == modbus_tcp_protocol) {
 | 
					    if (NULL == melsec_1e_protocol) {
 | 
				
			||||||
        printf("%s get modbus tcp protocol %p failed\n", __func__, modbus_tcp_protocol);
 | 
					        printf("%s get melsec 1e protocol %p failed\n", __func__, melsec_1e_protocol);
 | 
				
			||||||
        return;
 | 
					        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) {
 | 
					    if (CONTROL_REGISTERED == melsec_1e_protocol->protocol_status) {
 | 
				
			||||||
        ControlProtocolOpen(modbus_tcp_protocol);
 | 
					        ControlProtocolOpen(melsec_1e_protocol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (;;) {
 | 
					        for (;;) {
 | 
				
			||||||
            read_data_length = ControlProtocolRead(modbus_tcp_protocol, read_data, sizeof(read_data));
 | 
					            read_data_length = ControlProtocolRead(melsec_1e_protocol, read_data, sizeof(read_data));
 | 
				
			||||||
            printf("%s read [%d] modbus tcp data %d using receipe file\n", __func__, i, read_data_length);
 | 
					            printf("%s read [%d] melsec 1e data %d using receipe file\n", __func__, i, read_data_length);
 | 
				
			||||||
            if (read_data_length) {
 | 
					            if (read_data_length) {
 | 
				
			||||||
                for (j = 0; j < read_data_length; j ++) {
 | 
					                for (j = 0; j < read_data_length; j ++) {
 | 
				
			||||||
                    printf("j %d data 0x%x\n", j, read_data[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
 | 
					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
 | 
					 * @brief PLC SCHNEIDER M241 app
 | 
				
			||||||
 * @version 3.0
 | 
					 * @version 3.0
 | 
				
			||||||
 * @author AIIT XUOS Lab
 | 
					 * @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(circular_area);
 | 
				
			||||||
    CA_PARAM_CHECK(output_buffer);
 | 
					    CA_PARAM_CHECK(output_buffer);
 | 
				
			||||||
    CHECK(data_length > 0);
 | 
					    CA_CHECK(data_length > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(CircularAreaAppIsEmpty(circular_area)) {
 | 
					    if(CircularAreaAppIsEmpty(circular_area)) {
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
| 
						 | 
					@ -199,7 +199,7 @@ int CircularAreaAppWrite(CircularAreaAppType circular_area, uint8_t *input_buffe
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    CA_PARAM_CHECK(circular_area);
 | 
					    CA_PARAM_CHECK(circular_area);
 | 
				
			||||||
    CA_PARAM_CHECK(input_buffer);
 | 
					    CA_PARAM_CHECK(input_buffer);
 | 
				
			||||||
    CHECK(data_length > 0);
 | 
					    CA_CHECK(data_length > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(CircularAreaAppIsFull(circular_area) && (!b_force)) {
 | 
					    if(CircularAreaAppIsFull(circular_area) && (!b_force)) {
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
| 
						 | 
					@ -248,7 +248,7 @@ static struct CircularAreaAppOps CircularAreaAppOperations =
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
CircularAreaAppType CircularAreaAppInit(uint32_t circular_area_length)
 | 
					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);
 | 
					    circular_area_length = CA_ALIGN_DOWN(circular_area_length, 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,11 +29,20 @@
 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
#endif
 | 
					#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)                                                                  \
 | 
					#define CA_PARAM_CHECK(param)                                                                  \
 | 
				
			||||||
    do                                                                                         \
 | 
					    do                                                                                         \
 | 
				
			||||||
    {                                                                                          \
 | 
					    {                                                                                          \
 | 
				
			||||||
        if(param == NULL) {                                                                    \
 | 
					        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(1);                                                                          \
 | 
				
			||||||
        }                                                                                      \
 | 
					        }                                                                                      \
 | 
				
			||||||
    }while (0) 
 | 
					    }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
											
										
									
								
							| 
						 | 
					@ -112,15 +112,20 @@ static int ModbusUartGetDataBySerial(ModbusUartReadItem *p_read_item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ModbusUartDataInfo *p_modbus_uart_data_info = &(p_read_item->data_info);
 | 
					    ModbusUartDataInfo *p_modbus_uart_data_info = &(p_read_item->data_info);
 | 
				
			||||||
    BasicPlcDataInfo *p_base_data_info = &(p_modbus_uart_data_info->base_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; 
 | 
					    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);
 | 
					    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);
 | 
					    SerialWrite(p_base_data_info->p_command, p_base_data_info->command_length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (READ_COIL_STATUS == function_code || READ_INPUT_STATUS == function_code) {
 | 
					    if (READ_COIL_STATUS == function_code || READ_INPUT_STATUS == function_code) {
 | 
				
			||||||
        cmd_length = 6;
 | 
					        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;
 | 
					        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) {
 | 
					    } else if (WRITE_SINGLE_COIL == function_code || WRITE_SINGLE_REGISTER == function_code) {
 | 
				
			||||||
        cmd_length = 8;
 | 
					        cmd_length = 8;
 | 
				
			||||||
    } else {
 | 
					    } 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 p_recipe - recipe pointer
 | 
				
			||||||
 * @param protocol_format_info - protocol format info pointer
 | 
					 * @param protocol_format_info - protocol format info pointer
 | 
				
			||||||
 * @return success : 0 error : -1
 | 
					 * @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
 | 
					 * @param p_recipe - recipe pointer
 | 
				
			||||||
 * @return success : 0 error : -1
 | 
					 * @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;
 | 
					    uint16_t head_device_number = 0;
 | 
				
			||||||
    for (uint8_t i = 0; i < 6; i++) {
 | 
					    for (uint8_t i = 0; i < 6; i++) {
 | 
				
			||||||
        if (0 != p_read_item->head_device_number_string[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
 | 
					        else
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -297,7 +297,7 @@ static uint16_t Melsec3eiqrGenerateCommand(uint8_t *p_command, uint32_t command_
 | 
				
			||||||
    uint16_t head_device_number = 0;
 | 
					    uint16_t head_device_number = 0;
 | 
				
			||||||
    for (uint8_t i = 0; i < 6; i++) {
 | 
					    for (uint8_t i = 0; i < 6; i++) {
 | 
				
			||||||
        if (0 != p_read_item->head_device_number_string[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
 | 
					        else
 | 
				
			||||||
            break;
 | 
					            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] = 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]);
 | 
					                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");
 | 
					    printf("\n");
 | 
				
			||||||
| 
						 | 
					@ -629,16 +629,51 @@ static int MelsecGetDataBySocket(int32_t socket, MelsecReadItem *p_read_item)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int MelsecGetDataBySerial(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));
 | 
					    memset(recv_buff, 0, sizeof(recv_buff));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MelsecDataInfo *p_melsec_data_info = &(p_read_item->data_info);
 | 
					    MelsecDataInfo *p_melsec_data_info = &(p_read_item->data_info);
 | 
				
			||||||
    BasicPlcDataInfo *p_base_data_info = &(p_melsec_data_info->base_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);
 | 
					    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);
 | 
					    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) {
 | 
					    if (read_length) {
 | 
				
			||||||
        ControlPrintfList("RECV", recv_buff, read_length);
 | 
					        ControlPrintfList("RECV", recv_buff, read_length);
 | 
				
			||||||
        return MelsecTransformRecvBuffToData(p_read_item, recv_buff);
 | 
					        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_EFFECT            (28)     //set effect
 | 
				
			||||||
#define IOCTRL_CAMERA_SET_EXPOSURE          (29)     //set auto exposure
 | 
					#define IOCTRL_CAMERA_SET_EXPOSURE          (29)     //set auto exposure
 | 
				
			||||||
/*********************shell***********************/
 | 
					/*********************shell***********************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SEPARATE_COMPILE
 | 
				
			||||||
//for int func(int argc, char *agrv[])
 | 
					//for int func(int argc, char *agrv[])
 | 
				
			||||||
#define PRIV_SHELL_CMD_MAIN_ATTR (SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN))
 | 
					#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)  \
 | 
					#define PRIV_SHELL_CMD_FUNCTION(_func, _desc, _attr)  \
 | 
				
			||||||
    SHELL_EXPORT_CMD(_attr, _func, _func, _desc)
 | 
					    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**************************/
 | 
					/**********************mutex**************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int PrivMutexCreate(pthread_mutex_t *p_mutex, const pthread_mutexattr_t *attr);
 | 
					int PrivMutexCreate(pthread_mutex_t *p_mutex, const pthread_mutexattr_t *attr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,33 +32,33 @@ extern "C" {
 | 
				
			||||||
typedef int   pid_t;
 | 
					typedef int   pid_t;
 | 
				
			||||||
typedef unsigned long int pthread_t; 
 | 
					typedef unsigned long int pthread_t; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct sched_param {
 | 
					// struct sched_param {
 | 
				
			||||||
    int    sched_priority; /* process execution scheduling priority */
 | 
					//     int    sched_priority; /* process execution scheduling priority */
 | 
				
			||||||
    size_t slice;          /* time slice in SCHED_RR mode (ms) */
 | 
					//     size_t slice;          /* time slice in SCHED_RR mode (ms) */
 | 
				
			||||||
};
 | 
					// };
 | 
				
			||||||
typedef struct pthread_attr {
 | 
					// typedef struct pthread_attr {
 | 
				
			||||||
    unsigned char      is_initialized;  /* if the attr is initialized set to 1, otherwise set to 0 */
 | 
					//     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 */
 | 
					//     void              *stackaddr;       /* the start addr of the stack of the pthead */
 | 
				
			||||||
    size_t             stacksize;       /* the size 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      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
 | 
					//     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
 | 
					//                                            shall be inherited from the creating thread, and the scheduling attributes in this
 | 
				
			||||||
                                           attr argument shall be ignored */
 | 
					//                                            attr argument shall be ignored */
 | 
				
			||||||
    unsigned char      schedpolicy;     /* the sched policy of the thread */
 | 
					//     unsigned char      schedpolicy;     /* the sched policy of the thread */
 | 
				
			||||||
    struct sched_param schedparam;      /* the parameter of the thread scheduling */
 | 
					//     struct sched_param schedparam;      /* the parameter of the thread scheduling */
 | 
				
			||||||
    size_t             guardsize;       /* guardsize is set to protect the stack, not supported */
 | 
					//     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 */
 | 
					//     unsigned char      detachstate;     /* when set to PTHREAD_CREATE_JOINABLE, thread will not end untill the creating thread end */
 | 
				
			||||||
} pthread_attr_t;
 | 
					// } pthread_attr_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct pthread_mutexattr {
 | 
					// typedef struct pthread_mutexattr {
 | 
				
			||||||
    int is_initialized;
 | 
					//     int is_initialized;
 | 
				
			||||||
    int type;
 | 
					//     int type;
 | 
				
			||||||
    int protocol;
 | 
					//     int protocol;
 | 
				
			||||||
    int prioceiling;
 | 
					//     int prioceiling;
 | 
				
			||||||
    int pshared;
 | 
					//     int pshared;
 | 
				
			||||||
} pthread_mutexattr_t;
 | 
					// } pthread_mutexattr_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef int pthread_mutex_t ;
 | 
					// typedef int pthread_mutex_t ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,16 @@ extern "C" {
 | 
				
			||||||
//     PTHREAD_SCOPE_SYSTEM,
 | 
					//     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   pid_t;
 | 
				
			||||||
// typedef int pthread_mutex_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,
 | 
					int pthread_attr_setschedparam(pthread_attr_t           *attr,
 | 
				
			||||||
                               struct sched_param const *param)
 | 
					                               struct sched_param const *param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    NULL_PARAM_CHECK(attr != NULL);
 | 
					    // NULL_PARAM_CHECK(attr);
 | 
				
			||||||
    NULL_PARAM_CHECK(param != NULL);
 | 
					    // NULL_PARAM_CHECK(param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    attr->schedparam.sched_priority = param->sched_priority;
 | 
					    attr->schedparam.sched_priority = param->sched_priority;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef  SEPARATE_COMPILE
 | 
					#ifdef  SEPARATE_COMPILE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../../../../../Ubiquitous/XiZi/arch/kswitch.h"
 | 
					#include "../../../../../../Ubiquitous/XiZi_IIoT/arch/kswitch.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TASK_INFO      1
 | 
					#define TASK_INFO      1
 | 
				
			||||||
#define MEM_INFO       2
 | 
					#define MEM_INFO       2
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
menu "lib"
 | 
					menu "app lib"
 | 
				
			||||||
    choice
 | 
					    choice
 | 
				
			||||||
            prompt "chose a kind of lib for app"
 | 
					            prompt "chose a kind of lib for app"
 | 
				
			||||||
            default APP_SELECT_NEWLIB
 | 
					            default APP_SELECT_NEWLIB
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
# SRC_DIR := lvgl
 | 
					# SRC_DIR := lvgl
 | 
				
			||||||
 | 
					SRC_DIR := 
 | 
				
			||||||
ifeq ($(CONFIG_APP_SELECT_NEWLIB),y)
 | 
					ifeq ($(CONFIG_APP_SELECT_NEWLIB),y)
 | 
				
			||||||
	ifeq ($(CONFIG_SEPARATE_COMPILE),y)
 | 
						ifeq ($(CONFIG_SEPARATE_COMPILE),y)
 | 
				
			||||||
		SRC_DIR += app_newlib
 | 
							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_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_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_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 ".\\" */
 | 
					//#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)
 | 
					# define LV_FREETYPE_CACHE_SIZE (16 * 1024)
 | 
				
			||||||
#endif
 | 
					#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*/
 | 
					/*Rlottie library*/
 | 
				
			||||||
#define LV_USE_RLOTTIE 0
 | 
					#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 <fcntl.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#ifndef WIN32
 | 
					// #ifdef __linux__
 | 
				
			||||||
#include <dirent.h>
 | 
					// #include <dirent.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#else
 | 
					#include <transform.h>
 | 
				
			||||||
#include <windows.h>
 | 
					// #else
 | 
				
			||||||
#endif
 | 
					// #include <windows.h>
 | 
				
			||||||
 | 
					// #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*********************
 | 
					/*********************
 | 
				
			||||||
 *      DEFINES
 | 
					 *      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_RD) flags = O_RDONLY;
 | 
				
			||||||
    else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = O_RDWR;
 | 
					    else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) flags = O_RDWR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef LV_FS_POSIX_PATH
 | 
					#ifdef LV_FS_POSIX_PATH
 | 
				
			||||||
    /*Make the path relative to the current directory (the projects root folder)*/
 | 
					    /*Make the path relative to the current directory (the projects root folder)*/
 | 
				
			||||||
    char buf[256];
 | 
					    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);
 | 
					    int f = open(buf, flags);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    int f = open(path, flags);
 | 
					    int f = open(path, flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    if(f < 0) return NULL;
 | 
					    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 {
 | 
					    do {
 | 
				
			||||||
        entry = readdir(dir_p);
 | 
					        entry = readdir(dir_p);
 | 
				
			||||||
        if(entry) {
 | 
					        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, entry->d_name);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            strcpy(fn, "");
 | 
					            strcpy(fn, "");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ extern "C" {
 | 
				
			||||||
#include "sjpg/lv_sjpg.h"
 | 
					#include "sjpg/lv_sjpg.h"
 | 
				
			||||||
#include "freetype/lv_freetype.h"
 | 
					#include "freetype/lv_freetype.h"
 | 
				
			||||||
#include "rlottie/lv_rlottie.h"
 | 
					#include "rlottie/lv_rlottie.h"
 | 
				
			||||||
 | 
					#include "tiny_ttf/lv_tiny_ttf.h"
 | 
				
			||||||
/*********************
 | 
					/*********************
 | 
				
			||||||
 *      DEFINES
 | 
					 *      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_x;   /**< x offset of the bounding box*/
 | 
				
			||||||
    int16_t ofs_y;  /**< y 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 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;
 | 
					} lv_font_glyph_dsc_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** The bitmaps might be upscaled by 3 to achieve subpixel rendering.*/
 | 
					/** 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_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*/
 | 
					    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*/
 | 
					    const void * dsc;                     /**< Store implementation specific or run_time data or caching here*/
 | 
				
			||||||
#if LV_USE_USER_DATA
 | 
					#if LV_USE_USER_DATA
 | 
				
			||||||
    void * user_data;               /**< Custom user data for font.*/
 | 
					    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
 | 
					 * @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  )
 | 
					    if (irq_num >=   ARCH_MAX_IRQ_NUM  )
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ArchEnableHwIrq(irq_num);
 | 
					    return ArchEnableHwIrq(irq_num, cpu_id);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This function will disable a irq.
 | 
					 * 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
 | 
					 * @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  )
 | 
					    if (irq_num >=   ARCH_MAX_IRQ_NUM  )
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ArchDisableHwIrq(irq_num);
 | 
					    return ArchDisableHwIrq(irq_num, cpu_id);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* called from arch-specific ISR wrapper */
 | 
					/* called from arch-specific ISR wrapper */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,8 +55,8 @@ struct IsrDone
 | 
				
			||||||
    bool (*isInIsr)();
 | 
					    bool (*isInIsr)();
 | 
				
			||||||
    int32_t  (*registerIrq)(uint32_t irq_num, IsrHandlerType handler, void *arg);
 | 
					    int32_t  (*registerIrq)(uint32_t irq_num, IsrHandlerType handler, void *arg);
 | 
				
			||||||
    int32_t  (*freeIrq)(uint32_t irq_num);
 | 
					    int32_t  (*freeIrq)(uint32_t irq_num);
 | 
				
			||||||
    int32_t  (*enableIrq)(uint32_t irq_num);
 | 
					    int32_t  (*enableIrq)(uint32_t irq_num, uint32_t cpu_id);
 | 
				
			||||||
    int32_t  (*disableIrq)(uint32_t irq_num);
 | 
					    int32_t  (*disableIrq)(uint32_t irq_num, uint32_t cpu_id);
 | 
				
			||||||
    void   (*handleIrq)(uint32_t irq_num);
 | 
					    void   (*handleIrq)(uint32_t irq_num);
 | 
				
			||||||
    uint16_t (*getCounter)() ;
 | 
					    uint16_t (*getCounter)() ;
 | 
				
			||||||
    void   (*incCounter)();
 | 
					    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
 | 
					include $(KERNEL_ROOT)/compiler.mk
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,8 +19,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ARCH_MAX_IRQ_NUM  PLATFORM_MAX_IRQ_NR
 | 
					#define ARCH_MAX_IRQ_NUM  PLATFORM_MAX_IRQ_NR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int32_t ArchEnableHwIrq(uint32_t irq_num);
 | 
					int32_t ArchEnableHwIrq(uint32_t irq_num, uint32_t cpu_id);
 | 
				
			||||||
int32_t ArchDisableHwIrq(uint32_t irq_num);
 | 
					int32_t ArchDisableHwIrq(uint32_t irq_num, uint32_t cpu_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! @brief
 | 
					//! @brief
 | 
				
			||||||
typedef enum {
 | 
					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"
 | 
					.section ".startup","ax"
 | 
				
			||||||
.globl _reset
 | 
					.globl _reset
 | 
				
			||||||
 | 
					.extern init
 | 
				
			||||||
_reset:
 | 
					_reset:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* set the cpu to SVC32 mode and disable interrupt */
 | 
					    /* set the cpu to SVC32 mode and disable interrupt */
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,11 @@ _reset:
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    ldr     r0, =stack_top
 | 
					    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
 | 
					    @  Set the startup stack for svc
 | 
				
			||||||
    mov     sp, r0
 | 
					    mov     sp, r0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,7 +91,7 @@ ctor_loop:
 | 
				
			||||||
    b       ctor_loop
 | 
					    b       ctor_loop
 | 
				
			||||||
ctor_end:
 | 
					ctor_end:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bl     start_kernel
 | 
					    bl     init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_loop_here:
 | 
					_loop_here:
 | 
				
			||||||
    b      _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;
 | 
					    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_priority(irq_num, priority);
 | 
				
			||||||
    gic_set_irq_security(irq_num, false);    // set IRQ as non-secure
 | 
					    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);
 | 
					    gic_enable_irq(irq_num, true);
 | 
				
			||||||
    return 0;
 | 
					    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_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;
 | 
					    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/arch/arm/armv7-a/cortex-a9 \
 | 
				
			||||||
	-I$(KERNEL_ROOT)/hardkernel/abstraction \
 | 
						-I$(KERNEL_ROOT)/hardkernel/abstraction \
 | 
				
			||||||
	-I$(KERNEL_ROOT)/include \
 | 
						-I$(KERNEL_ROOT)/include \
 | 
				
			||||||
 | 
						-I$(BSP_ROOT)/third_party_driver/include \
 | 
				
			||||||
	-I$(BSP_ROOT)/include
 | 
						-I$(BSP_ROOT)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(CONFIG_RESOURCES_LWIP),y)
 | 
					ifeq ($(CONFIG_RESOURCES_LWIP),y)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
SRC_FILES := board.c ivt.c
 | 
					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
 | 
					# export LINK_LWIP := $(KERNEL_ROOT)/resources/ethernet/LwIP/liblwip.a
 | 
				
			||||||
# endif
 | 
					# endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export DEFINES := -DHAVE_CCONFIG_H
 | 
					export DEFINES := -DHAVE_CCONFIG_H -DCHIP_MX6DQ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export USING_NEWLIB =1
 | 
					export USING_NEWLIB =1
 | 
				
			||||||
export USING_VFS = 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