亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? diskloop.c

?? 嵌入式程序
?? C
字號:
//file name: Diskloop.c
//file description: responsible for writing data to disk
#include	"recordloop.h"
#include	"memorypool.h"
#include	"stdio.h"
#include	"kernel.h"
#include	"cleanup.h"
#include    "base.h"

#define DISK_STATE_NORMAL        0   //normal state
#define DISK_STATE_FULL          1  //disk full
#define DISK_STATE_CHANGE        2   //disk switch

#define DISK_PROCESS_CMD_DATA    1
#define DISK_PROCESS_CMD_CONTROL 2

#define DISK_PROCESS_STATE_IDLE                   0
#define DISK_PROCESS_STATE_STOPREC                1
#define DISK_PROCESS_STATE_REC                    2
#define DISK_PROCESS_STATE_STARTREC               3

#define NO_UNSAVED_FRAME -9999
#define UNSAVED_FRAME_LOST -1

static U32 newFrameTime; // the latest frame time
static S32 diskState; //disk state
static FILE *FileHandle[16];
static S32 OldestInfoFrame[16] = -1;
static S32 newInfoFrame[16] = -1;
extern CHANNEL_STATE ChState[16];
extern SYSTEM_PARA_SET   system_parameter ;
MSG_Q_ID DiskQueue;
typedef struct _DSKPRCS_MSG_STRUCT
{
	U16 sender;
    U16 cmd;                         //command
    U16 ch;                          //channel
    U16 framehead;                   //number of data piece
} DSKPRCS_MSG_STRUCT;

//function: getNewFrameTime();
//description: when data frame reach,frame time be noted by newFrameTime 
//argument: the frame head
U32 getNewFrameTime(S32 head)
{
    newFrameTime = mpGetTime(head)
    return newFrameTime;
}


//function:  getDiskstate()
//description: take note disk state when disk state switches
//argument: disk state
S32 getDiskstate(S32 dskState)
{
    diskState = dskState;
    ruturn diskState;
}

//function: diskProcess()
//description: the entry function of diskloop task
//no arguments
void diskProcess(void)
{
    S32 status;
//  int ch;
//  int framehead;
    queueInit();
    while(1)
    {

        if( receive_message( recorder_queque , sizeof( KERNEL_MESSAGE ) , ( U8 *) &msg ) < sizeof( CMD_MESSAGE ) )
            continue ;
        if(msg->cmd == DISK_PROCESS_CMD_DATA)
            putFrameIntoQueue(msg->ch, msg->framehead);
        if(mpGetType(msg->framehead) == INFO_FRAME)
            newInfoFrame[msg->ch] = msg->framehead;
        status = getDiskProcessState(msg->ch);

        switch(status)
        {
            case DISK_PROCESS_STATE_IDLE:
                DPIdleState(msg);
                break;
            case DISK_PROCESS_STATE_STOPREC:                
                DPStopRecState(msg);
                break;
            case DISK_PROCESS_STATE_REC:                    
                DPRecState(msg);
                break;
            case DISK_PROCESS_STATE_STARTREC:               
                DPStartRecState(msg);
                break;
            default:
                break;
        }
      }
}

//function: getDiskProcessState()
//description: return state of diskloop
//argument: channel
static S32 getDiskProcessState(S32 ch)
{
    S32 status;
    status  = getStatus(ch);
    if((status & 0x01 == 0) && (FileHandle[ch] == NULL))
        return DISK_PROCESS_STATE_IDLE;
    else if((status & 0x01 == 0) && (FileHandle[ch] != NULL))
        return DISK_PROCESS_STATE_STOPREC;
    else if((status & 0x01 != 0) && (FileHandle[ch] != NULL))
        return DISK_PROCESS_STATE_REC;
    else if((status & 0x01 != 0) && (FileHandle[ch] == NULL))
        return DISK_PROCESS_STATE_STARTREC;
    else 
        return DISK_PROCESS_STATE_IDLE;
}

//function: DPIdleState(DPMESSAGE msg)
//desciption: process in idle state
//argument: msg
static void DPIdleState(DPMESSAGE msg)
{

}

//function: DPStopRecState()
//description: stop recorder and close file
//argument: msg
static void DPStopRecState(DPMESSAGE *msg);
{
    S32 command;
    command = msg->command;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            DPCloseFile(msg);
            break;
        case DISK_LOOP_CMD_control;
            DPCloseFile(msg);
            break;
        default:
            break;
    }
}

//function: DPRecState()
//description: write data into file
//argument:   msg
static void DPRecState(DPMESSAGE *msg)
{
    S32 command;
    command = msg->command;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            DPWriteFile(msg);
            break;
        case DISK_LOOP_CMD_control:
            DPWriteFile(msg);
            break;
        default:
            break;
    }
}

//function: DPStartRecState()
//description: start record, open file
//argument: msg
static void DPStartRecState(DPMESSAGE *msg)
{
    int command;
    command= msg->cmd;
    switch(command)
    {
        case DISK_LOOP_CMD_DATA:
            if(DPOpenFile(msg))
            {
                if(status & 0x2 != 0)
                    savePreRec(msg->ch);
                if(newInfoFrame[msg->ch] >= 0)
                    DPWriteFile(newInfoFrame[msg->ch],msg->framehead);
                DPWriteFile(msg->ch,msg->framehead);
            }
            break;
         default:
            break;
    }
}

//function:   DPOpenFile(int ch, int framehead);
//description: open a file in which data save
//arguments:  chanel, framehead
static S32 DPOpenFile(S32 ch, S32 framehead)
{
    S32 left;
    left = getHDDLeftSpace();
    if(left <= DISK_THRESHOLD)
    {
        diskState = DISK_STATE_FULL;
        //ADD function which inform recordloop open file is error


        
        return;
    }

    //add a function     create filename




    

    
    
}

//function:  DPWriteFile(int ch, int framehead)
//description: write data to file
//arguments: chanel, framehead
static S32 DPWriteFile(S32 ch, S32 framehead)
{
    S32 left;
    left = getHDDLeftSpace();
    if(left <= DISK_THRESHOLD)
    {
        diskState = DISK_STATE_FULL;
        return 0;
    }

    ret = mpFWrite(msg->datano,FileHandle[ch]);
    if(ret < 0)
    {    
        fclose(FileHandle(ch)) ;
        FileHandle(ch) = NULL;
        DiskState = DISK_STATE_ERROR;
        return 0;
    }

    return 1;
}

//function: static int DPCloseFile(int ch)
//description: close file
//argument: chanel
static S32 DPCloseFile(S32 ch)
{
    if(fclose(FileHandle[ch]));
    {
        diskState = DISK_STATE_ERROR;
        //ADD A FUNCTION TO INFORM RECORDLOOP TO CLOSE FILE ERROR


        return 0;
    }
    //ADD A FUNCTION TO INFORM RECORDLOOP TO CLOSE FILE OK



    return 1;
    
    
}

//function:	 putFrameIntoQueue(int ch, int framehead)
//description: put frame data to prerecorder queue
//argument: chanel, framehead
static void putFrameIntoQueue(S32 ch, S32 framehead)
{
    if(queueIsFull(ch))
    {
        S32 rear;
        queueGetOut(ch, &rear);
        if(mpGetType(framehead) == INFO_FRAME)
        {
            if(OldestInfoFrame[ch] >=0)
                mpRelease(newInfoFrame[ch], MEMORY_POOL_SAVE_OK);
            newInfoFrame[ch] = rear;
        }
        else
            mpRelease(newInfoFrame[ch], MEMORY_POOL_SAVE_OK);
    }
    queuePutIn(ch,framehead);
}

//function:	static int savePreRec(int ch);
//description: save data in prerecord queue to disk
//argument:chanel
static S32 savePreRec(S32 ch)
{
    if(OldestInfoFrame[ch] >= 0)
        ret = mpFWrite(datano, FileHandle[ch]);
    while(!queueIsEmpty(ch))
    {
        S32 datano = -1;
        queueGetOut(ch,&datano);
        ret = mpFWrite(datano, FileHandle[ch]);
        mpRelease(datano, MEMORY_POOL_SAVE_OK);
        if(ret < 0)
            return ERROR;
    }
    return OK;
}
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米影视7777精品一区二区| 色综合天天综合色综合av| 91丨porny丨国产| 日韩亚洲电影在线| 亚洲精品国产第一综合99久久| 久久精品国产99久久6| 色呦呦一区二区三区| 久久蜜臀中文字幕| 日本va欧美va欧美va精品| 欧美在线观看视频一区二区三区| 国产喂奶挤奶一区二区三区| 日本va欧美va瓶| 欧美日韩在线三级| 亚洲欧美激情一区二区| 不卡的av电影在线观看| 精品国产91久久久久久久妲己 | 午夜av一区二区三区| av午夜一区麻豆| 亚洲国产精品激情在线观看| 狠狠色丁香婷综合久久| 91精品国产免费| 午夜久久福利影院| 欧美日韩中文字幕一区二区| 一区二区三区在线视频观看| 99免费精品视频| 亚洲国产精品黑人久久久| 国产精品一区免费视频| 精品久久久影院| 日韩电影在线免费看| 欧美人xxxx| 五月综合激情日本mⅴ| 欧美日韩卡一卡二| 日韩制服丝袜先锋影音| 欧美日韩一级黄| 偷拍自拍另类欧美| 91精品福利在线一区二区三区 | 亚洲高清三级视频| 欧美日韩美少妇| 丝袜美腿一区二区三区| 5月丁香婷婷综合| 麻豆精品视频在线| 久久日一线二线三线suv| 久久精品国产**网站演员| 精品国产免费视频| 国产超碰在线一区| 亚洲欧美偷拍另类a∨色屁股| 在线免费观看视频一区| 日韩电影在线免费看| 精品国产成人在线影院 | 国产精品免费视频观看| 9l国产精品久久久久麻豆| 亚洲卡通动漫在线| 欧美日韩一区二区三区在线看| 五月天欧美精品| 欧美xxxxxxxx| 懂色一区二区三区免费观看| 国产精品久久久久天堂| 欧美日本在线播放| 精品一区二区在线免费观看| 中文字幕在线播放不卡一区| 在线观看国产日韩| 国产一区二区三区免费看| 亚洲欧美国产三级| 欧美一区二区三区在线观看| 国产精品一区一区| 亚洲一区二区三区精品在线| 精品国产百合女同互慰| 在线亚洲高清视频| 国内精品视频666| 亚洲免费观看视频| 日韩一区二区精品葵司在线| 成人av电影在线播放| 爽好多水快深点欧美视频| 国产亚洲欧美日韩日本| 欧美日韩在线三级| 国产传媒久久文化传媒| 亚洲高清免费在线| 欧美高清在线一区二区| 欧美一区二区三区啪啪| 色综合久久综合网| 国产高清在线观看免费不卡| 午夜精品福利一区二区三区蜜桃| 久久久久9999亚洲精品| 91精品国模一区二区三区| 99热在这里有精品免费| 国产一区二区三区综合| 午夜婷婷国产麻豆精品| 亚洲欧美经典视频| 中文字幕欧美日韩一区| 精品粉嫩aⅴ一区二区三区四区| 色婷婷狠狠综合| 国产成人免费在线观看不卡| 青青草成人在线观看| 一区二区三区蜜桃网| 中文字幕一区在线观看| 国产午夜亚洲精品理论片色戒 | 国产视频亚洲色图| 日韩一区二区精品葵司在线| 欧美特级限制片免费在线观看| 成人h精品动漫一区二区三区| 国产乱子轮精品视频| 久久国产精品72免费观看| 日本中文字幕一区二区有限公司| 亚洲制服丝袜av| 伊人夜夜躁av伊人久久| 亚洲激情男女视频| 国产精品国产三级国产aⅴ中文| 国产亚洲一区二区三区在线观看| 精品国产一区二区三区久久影院| 日韩一级黄色片| 欧美一区二区在线不卡| 日韩午夜电影在线观看| 欧美丰满少妇xxxbbb| 在线综合视频播放| 制服丝袜国产精品| 欧美α欧美αv大片| 精品久久久久久久久久久久包黑料| 91麻豆精品国产91| 欧美一区二区三区视频免费| 91精品国产一区二区三区香蕉| 欧美一区二区三区视频免费| 欧美一级高清大全免费观看| 日韩美女视频一区二区在线观看| 日韩欧美亚洲国产精品字幕久久久| 日韩一区二区三区电影在线观看| 欧美v日韩v国产v| 国产色综合一区| 中文字幕一区二区三区四区不卡| 最近中文字幕一区二区三区| 亚洲国产视频一区| 日韩不卡在线观看日韩不卡视频| 久久国产精品区| 成人精品高清在线| 91福利国产成人精品照片| 在线视频国内一区二区| 日韩亚洲欧美成人一区| 国产日韩欧美麻豆| 亚洲人成精品久久久久久| 亚洲v日本v欧美v久久精品| 日韩国产精品91| 国产麻豆一精品一av一免费| 99久久精品免费看国产免费软件| 在线观看91精品国产入口| 777午夜精品免费视频| 久久综合五月天婷婷伊人| 日韩美女视频一区| 午夜激情一区二区三区| 国产成人在线视频播放| 欧美视频一区二区| 久久久久久99久久久精品网站| 亚洲精品国产精华液| 国模套图日韩精品一区二区| 91色九色蝌蚪| 日韩欧美在线影院| 自拍偷在线精品自拍偷无码专区 | 亚洲免费在线视频| 久久国产福利国产秒拍| 色噜噜狠狠色综合中国| 久久影院午夜片一区| 一区二区三区中文字幕| 国产在线国偷精品产拍免费yy | 9色porny自拍视频一区二区| 欧美一卡在线观看| 夜夜嗨av一区二区三区中文字幕| 激情都市一区二区| 欧美日韩在线观看一区二区| 国产精品灌醉下药二区| 久久爱另类一区二区小说| 欧美艳星brazzers| 国产精品的网站| 国产在线精品一区二区三区不卡 | 欧美午夜片在线观看| 国产日韩欧美激情| 毛片av一区二区| 欧美日韩一级视频| 亚洲色图另类专区| 国产美女久久久久| 精品美女一区二区| 亚洲福利视频一区二区| 一本久道久久综合中文字幕 | 久久精品人人做人人爽人人 | 亚洲综合视频在线| 97久久精品人人澡人人爽| 久久久久9999亚洲精品| 精品一区二区日韩| 欧美精品一卡二卡| 亚洲丶国产丶欧美一区二区三区| 99久久99精品久久久久久| 国产日韩av一区| 激情成人午夜视频| 日韩欧美另类在线| 日本aⅴ免费视频一区二区三区 | 91亚洲精品乱码久久久久久蜜桃| 精品少妇一区二区三区在线视频| 亚洲国产精品一区二区久久| 91色在线porny| 亚洲伊人伊色伊影伊综合网| 欧美在线影院一区二区| 水野朝阳av一区二区三区| 欧美日韩久久一区二区|