2025-05-21 11:31:07 +08:00
|
|
|
/*
|
|
|
|
* fml_master_iic.c
|
|
|
|
*
|
|
|
|
* Created on: 2025年4月7日
|
|
|
|
* Author: 22332
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "cola_init.h"
|
|
|
|
#include "cola_device.h"
|
|
|
|
#include "cola_os.h"
|
|
|
|
#include "fml_master_iic.h"
|
|
|
|
#include "shell.h"
|
2025-05-30 14:10:31 +08:00
|
|
|
#include "fml_gpio.h"
|
2025-05-21 11:31:07 +08:00
|
|
|
|
|
|
|
#define TXBUFFER_LEN 8u
|
|
|
|
|
|
|
|
static task_t gmastiicTask;
|
|
|
|
|
|
|
|
static cola_device_t *g_pDevmaster = NULL;
|
|
|
|
|
|
|
|
uint8_t masterTxBuffer[TXBUFFER_LEN];
|
|
|
|
bool trans = true;
|
|
|
|
|
|
|
|
void fml_master_init(void)
|
|
|
|
{
|
|
|
|
g_pDevmaster = cola_device_find("MASTER_IIC");
|
|
|
|
if(g_pDevmaster)
|
|
|
|
cola_device_open(g_pDevmaster, 0);
|
|
|
|
for (int i = 0u; i < TXBUFFER_LEN; i++)
|
|
|
|
masterTxBuffer[i] = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
int fml_master_iic_write(uint8_t devAddr,uint8_t *buf,int len)
|
|
|
|
{
|
|
|
|
int ret = 0;
|
|
|
|
cola_device_ctrl(g_pDevmaster, devAddr, NULL);
|
|
|
|
ret = cola_device_write(g_pDevmaster, 0x00, buf, len);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
int fml_master_iic_read(uint8_t devAddr,uint8_t reg,uint8_t *buf,int len)
|
|
|
|
{
|
|
|
|
int ret = 0;
|
|
|
|
cola_device_ctrl(g_pDevmaster, devAddr, NULL);
|
|
|
|
ret = cola_device_write(g_pDevmaster, 0x00, ®, 1);
|
|
|
|
if(ret == 1)
|
|
|
|
ret = cola_device_read(g_pDevmaster, 0x00, buf, len);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t fml_master_read_tft_page_reg(uint8_t page,uint8_t reg)
|
|
|
|
{
|
|
|
|
uint8_t pStartCmdSet[] = {0xC8,0x00,0x58,0xA8,0x18,0x01};
|
|
|
|
uint8_t pPageSel[] = {0x00,0x00,page};
|
|
|
|
uint8_t pPassWord[] = {0xFD,0x00,0xAA};
|
|
|
|
uint8_t pReg[] = {reg,0x00};
|
|
|
|
uint8_t readValue = 0x00;
|
|
|
|
cola_device_ctrl(g_pDevmaster, SLAVE_ADDR_TFT, NULL);
|
|
|
|
cola_device_write(g_pDevmaster,0,pStartCmdSet,sizeof(pStartCmdSet));
|
|
|
|
cola_device_write(g_pDevmaster,0,pPageSel,sizeof(pPageSel));
|
|
|
|
cola_device_write(g_pDevmaster,0,pPassWord,sizeof(pPassWord));
|
|
|
|
cola_device_write(g_pDevmaster,0,pReg,sizeof(pReg));
|
|
|
|
cola_device_ctrl(g_pDevmaster, SLAVE_ADDR_TFT, NULL);
|
|
|
|
cola_device_read(g_pDevmaster,0,&readValue,1);
|
|
|
|
return readValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int string_to_number(const char *str) {
|
|
|
|
if (!str || *str == '\0') return -1;
|
|
|
|
long result = 0;
|
|
|
|
char *end_ptr;
|
|
|
|
int base = 10;
|
|
|
|
if (str[0] == '0' && tolower(str[1]) == 'x') {
|
|
|
|
base = 16;
|
|
|
|
}
|
|
|
|
result = strtol(str, &end_ptr, base);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int masteri2c(int argc, char *argv[]) {
|
|
|
|
if (argc < 4) {
|
|
|
|
logWrite("para length must greater than 3\r\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
int ret = 0;
|
|
|
|
int i = 0, len = argc - 3;
|
|
|
|
|
|
|
|
int address,slaveAddr=0x00;
|
|
|
|
uint8_t buf[SHELL_PARAMETER_MAX_NUMBER];
|
|
|
|
|
|
|
|
bool bEnableRead = false;
|
|
|
|
bool bEnableWrite = false;
|
|
|
|
char *pDevStrName = argv[1];
|
|
|
|
int mode = atoi(argv[2]);
|
|
|
|
cola_device_t *pDev = NULL;
|
|
|
|
|
|
|
|
//logWrite("argc=%d\r\n",argc);
|
|
|
|
memset(buf, sizeof(buf), 0);
|
|
|
|
if(strcmp(pDevStrName,"max25512") == 0)
|
|
|
|
{
|
|
|
|
slaveAddr = SLAVE_ADDR_MAX25512;
|
|
|
|
pDev = cola_device_find("max25512_IIC");
|
|
|
|
if(mode == 0)
|
|
|
|
bEnableRead = true;
|
|
|
|
else if(mode == 1)
|
|
|
|
bEnableWrite = true;
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"pmic") == 0)
|
|
|
|
{
|
|
|
|
slaveAddr = SLAVE_ADDR_PMIC;
|
|
|
|
pDev = cola_device_find("PMIC_IIC");
|
|
|
|
if(mode == 0)
|
|
|
|
bEnableRead = true;
|
|
|
|
else if(mode == 1)
|
|
|
|
bEnableWrite = true;
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"tft") == 0)
|
|
|
|
{
|
|
|
|
slaveAddr = SLAVE_ADDR_TFT;
|
|
|
|
pDev = cola_device_find("TFT_IIC");
|
|
|
|
if(mode == 0)
|
|
|
|
bEnableRead = true;
|
|
|
|
else if(mode == 1)
|
|
|
|
bEnableWrite = true;
|
|
|
|
}
|
2025-05-30 14:10:31 +08:00
|
|
|
else if(strcmp(pDevStrName,"backlight") == 0)
|
|
|
|
{
|
|
|
|
extern void fml_gpio_write(uint8_t pos,bool status);
|
|
|
|
extern bool fml_Write_ISET(uint8_t value);
|
|
|
|
logWrite("backlight=%d\r\n",mode);
|
|
|
|
fml_gpio_write(1,mode);
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"iset") == 0)
|
|
|
|
{
|
|
|
|
extern void fml_gpio_write(uint8_t pos,bool status);
|
|
|
|
extern bool fml_Write_ISET(uint8_t value);
|
|
|
|
logWrite("fml_Write_ISET=%d\r\n",mode);
|
|
|
|
fml_Write_ISET(0x02);
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"bist") == 0)
|
|
|
|
{
|
|
|
|
extern void fml_gpio_write(uint8_t pos,bool status);
|
|
|
|
logWrite("OUT_TFT_BIST=%d\r\n",mode);
|
|
|
|
fml_gpio_write(4,mode);
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"pdb") == 0)
|
|
|
|
{
|
|
|
|
extern void fml_gpio_write(uint8_t pos,bool status);
|
|
|
|
logWrite("pdb=%d\r\n",mode);
|
|
|
|
fml_gpio_write(2,mode);
|
|
|
|
}
|
|
|
|
else if(strcmp(pDevStrName,"pmic_en") == 0)
|
|
|
|
{
|
|
|
|
logWrite("pmic en=%d\r\n",mode);
|
|
|
|
fml_gpio_write(OUT_BL_EN,false);
|
|
|
|
}
|
2025-05-21 11:31:07 +08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
//logWrite("not support\r\n");
|
|
|
|
extern uint8_t fml_tft_read_page_reg(uint8_t page,uint8_t reg);
|
|
|
|
uint8_t page = string_to_number(argv[2]);
|
|
|
|
uint8_t reg = string_to_number(argv[3]);
|
|
|
|
#if 0
|
|
|
|
logWrite("read = 0x%02X\r\n",fml_tft_read_page_reg(page,reg));
|
|
|
|
#else
|
|
|
|
logWrite("read = 0x%02X\r\n",fml_master_read_tft_page_reg(page,reg));
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
if(bEnableWrite)
|
|
|
|
{
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
buf[i] = string_to_number(argv[3 + i]);
|
|
|
|
address = buf[0];
|
|
|
|
|
|
|
|
logWrite("Write[len=%d][addr=0x%02X]:",len,address);
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
logWrite("%02X ", buf[i]);
|
|
|
|
}
|
|
|
|
logWrite("\r\n");
|
|
|
|
#if 0
|
|
|
|
ret = cola_device_write(pDev, address, buf + 1, len - 1);
|
|
|
|
#else
|
|
|
|
ret = fml_master_iic_write(slaveAddr, buf, len);
|
|
|
|
#endif
|
|
|
|
if (ret == 0) {
|
|
|
|
logWrite("write err\r\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(bEnableRead)
|
|
|
|
{
|
|
|
|
address = string_to_number(argv[3]);
|
|
|
|
if(strcmp(pDevStrName,"tft") == 0 && (address > 0xFF))
|
|
|
|
{
|
|
|
|
address = string_to_number(argv[3]);
|
|
|
|
len = string_to_number(argv[4]);
|
|
|
|
logWrite("Read[len=%d][addr=0x%04X]:",len,address);
|
|
|
|
#if 0
|
|
|
|
ret = cola_device_read(pDev, address, buf, len);
|
|
|
|
#else
|
|
|
|
ret = fml_master_iic_read(slaveAddr, address, buf, len);
|
|
|
|
#endif
|
|
|
|
if (ret == 0) {
|
|
|
|
logWrite("read err\r\n");
|
|
|
|
}else{
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
logWrite("%02X ", buf[i]);
|
|
|
|
}
|
|
|
|
logWrite("\r\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
address = string_to_number(argv[3]);
|
|
|
|
len = string_to_number(argv[4]);
|
|
|
|
if(len > SHELL_PARAMETER_MAX_NUMBER)
|
|
|
|
{
|
|
|
|
logWrite("Warn:len[%d] >SHELL_PARAMETER_MAX_NUMBER[%d],set len to %d\r\n",len,SHELL_PARAMETER_MAX_NUMBER,SHELL_PARAMETER_MAX_NUMBER);
|
|
|
|
len = SHELL_PARAMETER_MAX_NUMBER;
|
|
|
|
}
|
|
|
|
logWrite("Read[len=%d][addr=0x%02X]:",len,address);
|
|
|
|
#if 0
|
|
|
|
ret = cola_device_read(pDev, address, buf, len);
|
|
|
|
#else
|
|
|
|
ret = fml_master_iic_read(slaveAddr, address, buf, len);
|
|
|
|
#endif
|
|
|
|
if (ret == 0) {
|
|
|
|
logWrite("read err\r\n");
|
|
|
|
}else{
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
logWrite("%02X ", buf[i]);
|
|
|
|
}
|
|
|
|
logWrite("\r\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), masteri2c, masteri2c, masteri2c,masteri2c);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|