/*
 * task_run_FLASH.c
 *
 *  Created on: May 7, 2014
 *      Author: Administrator
 */
#include "app_inc.h"


#define         FLASH_NAME "flashx:bank0"


//===========================================================================
//任务名称：task_run_FLASH
//功能概要：定义task_flash任务
//参数说明：未使用
//===========================================================================
void task_run_FLASH(uint32_t initial_data)
{
    MQX_FILE_PTR    flash_file;
    _mqx_int        i;
    _mqx_int        lenth = 0;
    int itemp;

    // 打开FLASH设备
    flash_file = fopen(FLASH_NAME, NULL);
    //使能flah块缓存
    ioctl(flash_file, FLASH_IOCTL_ENABLE_SECTOR_CACHE, NULL);
    //Flash读写数据帧格式提示
    printf("请在串口调试工具中选择HEX发送\n");
    printf("写数据帧格式：41 04 05 01 ** ** 44\n");
    printf("读数据帧格式：41 04 05 02 ** ** 44\n");
    for(;;)
    {
       //等待串口4接收完整数据帧事件位（Event_UART4_ReData）
      _lwevent_wait_for(&lwevent_group1, Event_UART4_ReData, FALSE, NULL);
      //获取数据帧所有字节的长度
      lenth=g_UART_ISR_buffer[1]+3;
      //判断数据帧是否正确
      if((g_UART_ISR_buffer[0]==0x41)&&(g_UART_ISR_buffer[lenth-1]==0x44))
      {
         //写命令
        if(g_UART_ISR_buffer[3]==0x01)
        {
          printf("写入Flash区域的数据为：");
          for(itemp=0;itemp<g_UART_ISR_buffer[1]+3;itemp++)
          {
              printf("%02x",g_UART_ISR_buffer[itemp]);
          }
          fseek(flash_file, -lenth, IO_SEEK_END);
          write(flash_file, g_UART_ISR_buffer, lenth);
          printf("\n");
        }
         //读命令
        else if(g_UART_ISR_buffer[3]==0x02)
        {
          fseek(flash_file, -lenth, IO_SEEK_END);
          read(flash_file, g_UART_ISR_buffer, lenth);
          printf("请在串口调试工具中选择HEX显示\n");
          //数据回发
          for(i=0;i<lenth;i++)
		  {
			  fwrite(&g_UART_ISR_buffer[i],sizeof(uint8),1,stdout);
		  }
      }
    }
      else
      {
        fclose(flash_file);
        flash_file=NULL;
      }
    //清除串口4接收完整数据帧事件位（Event_UART4_ReData）
    _lwevent_clear(&lwevent_group1, Event_UART4_ReData);
      _time_delay(5000);
    }
    _task_block();
}


