📄 common.c
字号:
memset(&phonebook, 0, sizeof(phonebook));
}
offset += sizePhoneBook;
if (sysNvRamGet((char *) &incomingcall, sizeCallRecord - 1, offset) != OK)
{
printf("Init incoming call record error. load default param!\n");
memset(&incomingcall, 0, sizeCallRecord);
needSetCall = 1;
}
offset += sizeCallRecord;
if (sysNvRamGet((char *) &outgoingcall, sizeCallRecord - 1, offset) != OK)
{
printf("Init outgoing call record error. load default param!\n");
memset(&outgoingcall, 0, sizeCallRecord);
needSetCall = 1;
}
offset += sizeCallRecord;
if (sysNvRamGet((char *) &noanswercall, sizeCallRecord - 1, offset) != OK)
{
printf("Init noanswer call record error. load default param!\n");
memset(&noanswercall, 0, sizeCallRecord);
needSetCall = 1;
}
offset += sizeCallRecord;
if (sysNvRamGet((char *) &phoneconfig, sizePhoneConfig - 1, offset) != OK)
{
printf("Init phone config error. load default param!\n");
LoadDefaultParam();
}
if (phoneconfig.conf_network.gateway == 0xFFFFFFFF)
{
printf("Invalid gateway in nvram, set it to default value\n");
phoneconfig.conf_network.gateway = phoneconfig.conf_network.ipaddr;
}
if (SpawnTask( "tRecordCall", (FUNCPTR) SetCallInfo, FALSE, 200, 2048 ) == ERROR)
{
fprintf(stderr, "InitPhoneParam: Unable to spawn RecodCall\n");
}
}
int recordIncomingCall()
{
int offset = CONFIG_LOCATION + sizeof(phonebook);
int flag;
semTake(callSem, WAIT_FOREVER);
flag = sysNvRamSet((char *)incomingcall, sizeof(incomingcall), offset);
semGive(callSem);
return flag;
}
int recordNoanswercall()
{
int offset = CONFIG_LOCATION + sizeof(phonebook) + 2*sizeof(incomingcall);
int flag;
semTake(callSem, WAIT_FOREVER);
flag = sysNvRamSet((char *)noanswercall, sizeof(noanswercall), offset);
semGive(callSem);
return flag;
}
int recordOutgoingcall()
{
int offset = CONFIG_LOCATION + sizeof(phonebook) + sizeof(incomingcall);
int flag;
semTake(callSem, WAIT_FOREVER);
flag = sysNvRamSet((char *)outgoingcall, sizeof(outgoingcall), offset);
semGive(callSem);
return flag;
}
int recordAllCall()
{
int flag;
if (!needSetCall)
return OK;
printf("write call info to flash!\n");
flag = recordIncomingCall();
flag = recordNoanswercall() && flag;
flag = recordOutgoingcall() && flag;
semTake(callSem, WAIT_FOREVER);
needSetCall = 0;
semGive(callSem);
printf("write OK!\n");
return flag;
}
int deleteCall(int flag, int index, int maxCallSize)
{
int i;
struct s_callrecord* callList;
if (index >= maxCallSize || index < 0)
{
printf("index = %d error ! return ...\n", index);
return ERROR;
}
if (flag == 1)
callList = incomingcall;
else if (flag == 2)
callList = outgoingcall;
else if (flag == 3)
callList = noanswercall;
else
{
printf("flag = %d error ! return ...\n", flag);
return ERROR;
}
semTake(callSem, WAIT_FOREVER);
for ( i = index; i < maxCallSize-1; ++i )
{
memcpy(&callList[i], &callList[i+1], sizeof(struct s_callrecord));
}
callList[maxCallSize-1].number[0] = '\0';
callList[maxCallSize-1].time = 0;
needSetCall = 1;
semGive(callSem);
return OK;
}
int deletAllCall(int flag)
{
semTake(callSem, WAIT_FOREVER);
if (flag == 1)
{
memset(&incomingcall, 0, sizeof(incomingcall));
needSetCall = 1;
}
else if (flag == 2)
{
memset(&outgoingcall, 0, sizeof(outgoingcall));
needSetCall = 1;
}
else if (flag == 3)
{
memset(&noanswercall, 0, sizeof(noanswercall));
needSetCall = 1;
}
else if (flag == 0)
{
memset(&incomingcall, 0, sizeof(incomingcall));
memset(&outgoingcall, 0, sizeof(outgoingcall));
memset(&noanswercall, 0, sizeof(noanswercall));
needSetCall = 1;
}
else
{
printf("flag = %d error, return ...\n", flag);
}
semGive(callSem);
return OK;
}
/**
* 保存已接来电
* 参数: char *number: 已接来电的号码或IP地址
* 返回值: int: 执行是否成功,OK or Error
*/
int AppRecordIncomingCall(char * number)
{
int i = 0;
int end; /* 数组末尾位置 */
time_t currentTime = 0; /* 当前时间 */
struct timespec tp;
semTake(callSem, WAIT_FOREVER);
if (clock_gettime(CLOCK_REALTIME, &tp) == OK)
{
currentTime = tp.tv_sec;
}
for (end = MAX_CALL_RECORD - 1; (incomingcall[end].time == 0) && (end>=0); --end)
;
/* 将数组中已有的元素后移 */
if ((end < MAX_CALL_RECORD - 1) && (end >= 0))
{
for (i = end; i>=0; --i)
incomingcall[i+1] = incomingcall[i];
}
/* 数组已满 */
else if (end == MAX_CALL_RECORD - 1)
{
for (i = end; i>0; --i)
incomingcall[i] = incomingcall[i-1];
}
if (number == NULL || number[0] == 0)
{
incomingcall[0].number[0] = 0;
}
else
{
if (number[0] == '0' + 10)
number[0] = '*';
strncpy(incomingcall[0].number, number, MAX_PHONE_NUMBER_LEN);
incomingcall[0].number[MAX_PHONE_NUMBER_LEN] = '\0';
}
incomingcall[0].time = currentTime;
needSetCall = 1;
semGive(callSem);
return OK;
}
/**
* 保存未接来电
* 参数: char *number: 未接来电的号码或IP地址
* 返回值: int: 执行是否成功,OK or Error
*/
int AppRecordNoAnswerCall(char * number)
{
int i;
int end; /* 数组末尾位置 */
time_t currentTime = 0; /* 当前时间 */
struct timespec tp;
semTake(callSem, WAIT_FOREVER);
if (clock_gettime(CLOCK_REALTIME, &tp) == OK)
{
currentTime = tp.tv_sec;
}
for (end = MAX_CALL_RECORD - 1; (noanswercall[end].time == 0) && (end>=0); --end)
;
/* 将数组中已有的元素后移 */
if ((end < MAX_CALL_RECORD - 1) && (end >= 0))
{
for (i=end; i>=0; --i)
noanswercall[i+1] = noanswercall[i];
}
/* 数组已满 */
else if (end == MAX_CALL_RECORD - 1)
{
for (i=end; i>0; --i)
noanswercall[i] = noanswercall[i-1];
}
if (number == NULL || number[0] == 0)
{
noanswercall[0].number[0] = 0;
}
else
{
if (number[0] == '0' + 10)
number[0] = '*';
strncpy(noanswercall[0].number, number, MAX_PHONE_NUMBER_LEN);
noanswercall[0].number[MAX_PHONE_NUMBER_LEN] = '\0';
}
noanswercall[0].time = currentTime;
needSetCall = 1;
semGive(callSem);
return OK;
}
/**
* 保存拨出号码
* 参数: char *number: 已拨出的号码或IP地址
* 返回值: int: 执行是否成功,OK or Error
*/
int AppRecordOutgoingCall(char * number)
{
int i;
int end; /* 数组末尾位置 */
time_t currentTime = 0; /* 当前时间 */
struct timespec tp;
semTake(callSem, WAIT_FOREVER);
if (clock_gettime(CLOCK_REALTIME, &tp) == OK)
{
currentTime = tp.tv_sec;
}
for (end = MAX_CALL_RECORD - 1; (outgoingcall[end].time == 0) && (end>=0); --end)
;
/* 将数组中已有的元素后移 */
if ((end < MAX_CALL_RECORD - 1) && (end >= 0))
{
for (i=end; i>=0; --i)
outgoingcall[i+1] = outgoingcall[i];
}
/* 数组已满 */
else if (end == MAX_CALL_RECORD - 1)
{
for (i=end; i>0; --i)
outgoingcall[i] = outgoingcall[i-1];
}
if (number == NULL || number[0] == 0)
{
outgoingcall[0].number[0] = 0;
}
else
{
if (number[0] == '0' + 10)
number[0] = '*';
strncpy(outgoingcall[0].number, number, MAX_PHONE_NUMBER_LEN);
outgoingcall[0].number[MAX_PHONE_NUMBER_LEN] = '\0';
}
outgoingcall[0].time = currentTime;
needSetCall = 1;
semGive(callSem);
return OK;
}
#ifndef HC
int convertType(int eType)
{
int temp = eType;
if (local_off_hook_event == eType)
{
handset_up = TRUE;
temp = local_off_hook_event;
}
if (local_on_hook_event == eType)
{
handset_up = FALSE;
if (on_speakerphone == FALSE)
{
temp = local_on_hook_event;
}
else
{
temp = local_off_hook_event;
}
}
if (speaker_event == eType)
{
#ifndef HC
on_speakerphone = (on_speakerphone + 1) & 1;
#endif
if (!handset_up && !on_speakerphone)
{
temp = local_on_hook_event;
}
else
{
temp = local_off_hook_event;
}
}
return temp;
}
#endif
int ConvertChar2CharNum(char* ipAddr, char* digit_set)
{
int i = 1;
char iptemp[4];
while (digit_set[i] != '\0')
{
if (digit_set[i] < '0' || digit_set[i] > '9')
return -1;
i++;
}
iptemp[3] = (digit_set[10]-'0')*100+(digit_set[11]-'0')*10+(digit_set[12]-'0');
iptemp[2] = (digit_set[7]-'0')*100+(digit_set[8]-'0')*10+(digit_set[9]-'0');
iptemp[1] = (digit_set[4]-'0')*100+(digit_set[5]-'0')*10+(digit_set[6]-'0');
iptemp[0] = (digit_set[1]-'0')*100+(digit_set[2]-'0')*10+(digit_set[3]-'0');
sprintf(ipAddr, "%u.%u.%u.%u", iptemp[0], iptemp[1], iptemp[2], iptemp[3]);
return 0;
}
int ConvertChar2Int(char * ipAddr, unsigned int* num)
{
unsigned char ip[4] = {0,0,0,0};
int i;
if (ipAddr == NULL || strlen(ipAddr) < 13 || ipAddr[0] != '*')
{
printf("string \"%s\" not valid!\n", ipAddr);
return -1;
}
for (i = 1; i < 13; i++)
{
ip[(i-1)/3] = (ipAddr[i] - '0') + ip[(i-1)/3] * 10;
}
*num = 0;
for (i = 0; i < 4; i++)
{
printf("ip[%i]=%x!\n", i , ip[i]);
*num = (*num << 8) + ip[i];
/*printf("num=%x!\n", *num);*/
}
return 0;
}
void ConvertInt2CharNum(char* ipAddr, unsigned int num, int flag)
{
unsigned char ip[4];
ip[0] = num >> 24;
ip[1] = (num >> 16) & 0xFF;
ip[2] = (num >> 8) & 0xFF;
ip[3] = num & 0xFF;
if (1 == flag)
{
/*ip addr is "*192168123001"*/
sprintf(ipAddr, "*%03u%03u%03u%03u", ip[0], ip[1], ip[2], ip[3]);
}
else if (2 == flag)
{
/*ip addr is 192.168.123.1*/
sprintf(ipAddr, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
}
else if (3 == flag)
{
/*ip addr is char[4]*/
ipAddr[0] = ip[0];
ipAddr[1] = ip[1];
ipAddr[2] = ip[2];
ipAddr[3] = ip[3];
}
}
#ifndef HC
void LcdLowerShowString(char * msg)
{
if (!(*menu_inuse))
{
ClearLcd();
LcdShowString(msg);
}
}
#endif
void LcdLowerShow(char* msg1, char* msg2)
{
char str1[12];
if(NULL == msg1)
str1[0] = '\0';
else
{
strncpy(str1,msg1,11);
str1[11] = '\0';
}
if (!(*menu_inuse))
{
if (msg1)
{
ClearLcd();
}
WriteLcd( /*msg1*/str1, 0, 0 );
WriteLcd( msg2, 1, 0 );
}
}
#if 0
#ifndef HC
void LcdShowDialNum(char* msg)
{
int iSize = sizeof(msg);
ClearLcd();
if (iSize > LCD_WIDTH)
{
WriteLcd(&msg[iSize - LCD_WIDTH], 1, 0);
}
else
{
WriteLcd(msg, 1, LCD_WIDTH - iSize);
}
}
#endif
#endif
#if 0
void showTime(int val, int verify, int length, int location)
{
static char format[4] = "%02u";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -