📄 tskmcnm.c
字号:
#include <p18cxxx.h>
#include "includes.h"
#include "filesys.h"
#include "file.h"
#include "event.h"
#include "device.h"
#define SYS_INT_CTL 0x00
#define DOMAIN_LEN_LOAD 0x0a
#define PDU_HEAD_LOAD 0x09
#define SM 0
#define DIAL 1
extern OS_MEM *pMemSml;
extern OS_MEM *pMemLge;
extern OS_MEM *pMemHug;
void mkdft_LocalPara(F_LocalPara *pf);
void mkdft_UserPrivate(F_UserPrivate *pf);
void mkdft_CallCtl(F_CallCtl *pf);
#pragma romdata CCODE
INT8U rom localpara_file[] = "LCL_P";
INT8U rom usrpri_file[] = "U_P";
INT8U rom callctl_file[] = "CAL_C";
//#pragma code MYCODE
void tskMCNM(void * data){
void rom * pMsg;
INT8U err;
INT16U i;
INT8U rom * ptrT0;
INT8U rom * ptrT1;
// If the fike system is not vilade, this task have to make several default
// files to make the system keep running with simplest function. These file
// includes:
// _file_localPara;
// _file_UserPrivate;
// _file_CallCtl;
if(filesys_init() != FS_OK){
filesys_format();
}
i = file_open(localpara_file, &ptrT0);
if(i == 0xff){
file_create(localpara_file, sizeof(F_LocalPara));
i = file_open(localpara_file, &ptrT0);
mkdft_LocalPara((F_LocalPara *)ptrT0);
file_save(i, 0, sizeof(F_LocalPara));
}
i = file_open(usrpri_file, &ptrT0);
if(i == 0xff){
file_create(usrpri_file, sizeof(F_UserPrivate));
i = file_open(usrpri_file, &ptrT0);
mkdft_UserPrivate((F_UserPrivate *)ptrT0);
file_save(i, 0, sizeof(F_UserPrivate));
}
i = file_open(callctl_file, &ptrT0);
if(i == 0xff){
file_create(callctl_file, sizeof(F_CallCtl));
i = file_open(callctl_file, &ptrT0);
if(i != 0xff){
mkdft_CallCtl((F_CallCtl *)ptrT0);
file_save(i, 0, sizeof(F_CallCtl));
}
}
//
i = file_open(localpara_file, &ptrT0);
err = sysdev_open(DEV_ID_KBD);
sysdev_ioctl(err, 0, ((F_LocalPara *)ptrT0)->BackLED);
//
for(;;){
pMsg = OSQPend(peventMCNM, 0, &err);
if(err == OS_NO_ERR){
if((INT24U)pMsg >= PTR_MAX){
//switch ((INT24U)pMsg){
// case MSG_MCNM_CLEARSYSFILE:
//Make_DefaultSysFile();
// break;
//}
}
else{
switch (((MSG_HEAD *)pMsg)->Msg_ID){
case MSG_MCNM_RECEIVE:
if(((MSG_PROTOCOL *)pMsg)->Type == SYS_INT_CTL){
if(((MSG_PROTOCOL *)pMsg)->SubType == PDU_HEAD_LOAD){//download the PDU head
if(((MSG_HEAD *)pMsg)->LenOfAttach != sizeof(PDU_HEAD)) break; //length error
//if(CheckCRC(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach)== TRUE){
//FileSave();
//refresh WIC' GCB
//}
}
}
else{
//MCNMFrameProc(((MSG_HEAD *)pMsg)->pMem, ((MSG_HEAD *)pMsg)->LenOfAttach, ((MSG_PROTOCOL *)pMsg)->Type);
}
break;
}
Func_Clear_Msg(pMsg);
}
}
}
}
void mkdft_LocalPara(F_LocalPara *pf){
pf->CtlWord = 0;
pf->PINCode[0] = 0xff;
pf->SelfNum[0] = 0xff;
pf->SpeakerVolume = 3;
pf->LockPassword[0] = 0xff;
pf->BackLED = 0;
pf->RingType = 1;
pf->ChgStartM = 0;
pf->ChgArg = 0;
}
void mkdft_UserPrivate(F_UserPrivate *pf){
INT8U i,j;
pf->UnAcceptCall.head = 0;
pf->UnAcceptCall.len = 0;
pf->RecentRxCall.head = 0;
pf->RecentRxCall.len = 0;
pf->RecentTxCall.head = 0;
pf->RecentTxCall.len = 0;
for(i=0; i<2; i++){
pf->SMTbl[i].head = SMTBLINDEXLEN - 2;
pf->SMTbl[i].tail = SMTBLINDEXLEN - 1;
pf->SMTbl[i].index[SMTBLINDEXLEN-2].previous = SMTBLINDEXLEN-1;
pf->SMTbl[i].index[SMTBLINDEXLEN-2].next = SMTBLINDEXLEN-1;
pf->SMTbl[i].index[SMTBLINDEXLEN-1].previous = SMTBLINDEXLEN-2;
pf->SMTbl[i].index[SMTBLINDEXLEN-1].next = SMTBLINDEXLEN-2;
pf->SMTbl[i].numofSM = 0;
for(j = 0; j<SMTBLINDEXLEN; j++){
pf->SMTbl[i].index[j].peernum[0] = 0xff;
}
}
pf->PhoneBook.head = PHONEBOOKLEN;
pf->PhoneBook.tail = PHONEBOOKLEN+1;
pf->PhoneBook.item[PHONEBOOKLEN].previous = PHONEBOOKLEN+1;
pf->PhoneBook.item[PHONEBOOKLEN].next = PHONEBOOKLEN+1;
pf->PhoneBook.item[PHONEBOOKLEN+1].previous = PHONEBOOKLEN;
pf->PhoneBook.item[PHONEBOOKLEN+1].next = PHONEBOOKLEN;
pf->PhoneBook.item[PHONEBOOKLEN].name[0] = 0x0000;
pf->PhoneBook.item[PHONEBOOKLEN+1].name[0] = 0xfffe;
for(i=0;i<PHONEBOOKLEN;i++){
pf->PhoneBook.item[i].name[0] = 0xffff;
}
}
void mkdft_CallCtl(F_CallCtl *pf){
}
/*
INT8U rom * ProcessDomain(INT8U rom *ptr, INT8U domain, INT8U type, INT8U *erri);
INT8U MCNMFrameProc(INT8U rom * ptrD, INT16U Len, INT8U type){ //return if the frame is currupted, "1" for error, "0" for OK
INT8U rom *ptrTemp;
INT8U err,i,j,k;
INT8U rom *ptrT0;
ptrTemp = ptrD+8;
if(Len< 8) return (1);
for(i = 0; i<8; i++){
k = 0b00000001;
for(j = 0; j<8; j++){
if((k & *ptrD) != 0){
ptrTemp = ProcessDomain(ptrTemp,i*8+j, type,&err);
if(err != 0) return (1);
}
k = k << 1;
}
ptrD++;
}
return (0);
}
INT8U Make_BitMap(INT8U domain, INT8U rom * ptrBuf);
INT8U rom * ProcessDomain(INT8U rom *ptr, INT8U domain, INT8U type, INT8U *erri){
INT8U rom *pSml;
INT8U rom *pInf;
OS_MEM * pMem;
INT8U err;
//if there is error, err = 0xff
*erri = 0;
if(domain > 63){
* erri = 1;
return ((INT8U rom *)0xffffff); //local error but no frame err, just throw it away
}
if(domain == 63){ //the polling domain
domain = *ptr;
domain &= 0x7f;
if(DomainLen[domain] == 0) return(ptr+1);
pSml = OSMemGet(pMemSml, &err);
if(err == OS_NO_ERR){
if(DomainLen[domain]>(255-13)){
pInf = OSMemGet(pMemHug,&err);
pMem = pMemHug;
if(err != OS_NO_ERR) return((INT8U rom *)0xffffff);
}
else{
pInf = OSMemGet(pMemLge,&err);
pMem = pMemLge;
if(err != OS_NO_ERR) return((INT8U rom *)0xffffff);
}
}
((MSG_HEAD *)pSml)->Msg_ID = MSG_MCNM_TRANSMIT;
((MSG_HEAD *)pSml)->Origin = peventMCNM;
((MSG_HEAD *)pSml)->pmemME = pMemSml;
((MSG_HEAD *)pSml)->Attached = TRUE;
((MSG_HEAD *)pSml)->LenOfAttach = DomainLen[domain]+8;
((MSG_HEAD *)pSml)->pMem = pInf;
((MSG_HEAD *)pSml)->pmemATT = pMem;
((MSG_HEAD *)pSml)->LenOfBody = 0;
Make_BitMap(domain, pInf);
pInf +=8;
//Read_Domain(domain, pInf);
OSQPost(peventTxProtocol, pSml);
return(ptr+1);
}
else{ //save the frame
if(DomainLen[domain] == 0) return (ptr);
else {
//Save_Domain(domain,ptr);
return(ptr+DomainLen[domain]);
}
}
return (ptr);
}
void Make_SysFileIndex(void){
INT8U i;
INT16U Offset;
Offset = 0;
for(i=0; i<128; i++){
DomainOffset[i] = Offset;
Offset += DomainLen[i];
}
}
INT8U Make_BitMap(INT8U domain, INT8U rom * ptrBuf){
INT8U i;
if(domain>63) return(1);
for(i=0; i<domain/8; i++){
*ptrBuf = 0;
ptrBuf++;
}
*ptrBuf++ = BipMap[domain%8];
for(i=0; i<8-domain/8-1;i++){
*ptrBuf = 0;
ptrBuf++;
}
return(0);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -