void GetChipLayout( HWND hWindow, LPRECT lpRect, LPINT lpRows, LPINT lpCols, LPINT lpRowIncr, LPINT lpColIncr, LPINT lpStart ) /***********************************************************************/ { int xChipSize, yChipSize, iWidth, iHeight, xPos, yPos, iColors; LPPALETTE lpPalette; if ( !(lpPalette = (LPPALETTE)GetWindowLong(hWindow, GWL_PALETTE)) ) return; if ( (iColors = lpPalette->iColors) <= 0 ) iColors = 1; GetDrawClientRect(hWindow, lpRect); InflateRect(lpRect, -3, -3); iWidth = RectWidth(lpRect); iHeight = RectHeight(lpRect); xPos = GetScrollPos(hWindow, SB_HORZ); yPos = GetScrollPos(hWindow, SB_VERT); GetChipSize( &xChipSize, &yChipSize ); *lpRows = iHeight / yChipSize; *lpCols = iWidth / xChipSize; if ( PaletteVertical() ) { // Fill left to right, row at a time *lpRowIncr = *lpCols; *lpColIncr = 1; *lpStart = (yPos * (*lpCols)) + xPos; // Too ensure proper scrolling, make the height an exact multiple lpRect->bottom = lpRect->top + (*lpRows * yChipSize) - 1; } else { // Fill top to bottom, row at a time *lpRowIncr = 1; *lpColIncr = *lpRows; *lpStart = (xPos * (*lpRows)) + yPos; // Too ensure proper scrolling, make the width an exact multiple lpRect->right = lpRect->left + (*lpCols * xChipSize) - 1; } }
void SetProgReadCommand(void) { static const unsigned int AT26DF041 = 0x1F4400; static const unsigned int AT26DF004 = 0x1F0400; static const unsigned int AT26DF081A = 0x1F4501; mcode_WREN = WREN; mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Program = PAGE_PROGRAM; mcode_Read = BULK_FAST_READ; mcode_SegmentErase= SE; mcode_WRDI=0x04; mcode_ProgramCode_4Adr=0xFF; mcode_ReadCode=0xFF; if(strcmp(Chip_Info.Class,SUPPORT_SST_25xFxx)==0) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = 0x60; mcode_Read = BULK_NORM_READ; if(strstr(Chip_Info.TypeName,"B") != NULL ||strstr(Chip_Info.TypeName,"W") != NULL) mcode_Program = AAI_2_BYTE ; else mcode_Program = AAI_1_BYTE ; } else if(strstr(Chip_Info.Class,SUPPORT_SST_25xFxxA)!=NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = 0x60; mcode_Read = BULK_NORM_READ; mcode_Program = AAI_1_BYTE ; } else if(strstr(Chip_Info.Class,SUPPORT_SST_25xFxxB)!=NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = 0x60; mcode_Read = BULK_NORM_READ; mcode_Program = AAI_2_BYTE ; mcode_SegmentErase = 0xD8; mcode_WRDI = WRDI; } else if(strstr(Chip_Info.Class,SUPPORT_SST_25xFxxC) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = 0x60; mcode_Read = BULK_FAST_READ; mcode_Program = PAGE_PROGRAM ; mcode_SegmentErase = 0xD8; mcode_WREN = WREN; } else if(strstr(Chip_Info.Class,SUPPORT_ATMEL_AT25FSxxx) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_NORM_READ; mcode_Program = PP_128BYTE ; mcode_SegmentErase = 0xD8; } else if(strstr(Chip_Info.Class,SUPPORT_ATMEL_AT25Fxxx) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_NORM_READ; mcode_Program = PP_128BYTE ; mcode_SegmentErase = 0x52; } else if(strstr(Chip_Info.Class,SUPPORT_ATMEL_AT26xxx) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_FAST_READ; mcode_SegmentErase = 0xD8; if(AT26DF041 == Chip_Info.UniqueID) { mcode_Program = PP_AT26DF041; } else if(AT26DF004 == Chip_Info.UniqueID) { mcode_Program = AAI_1_BYTE; } else { mcode_Program = PAGE_PROGRAM; } } else if(strstr(Chip_Info.Class,SUPPORT_ESMT_F25Lxx) != NULL) { const unsigned int F25L04UA=0x8C8C8C; mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_FAST_READ; mcode_SegmentErase = 0xD8; if(F25L04UA == Chip_Info.UniqueID) mcode_Program = AAI_1_BYTE; else mcode_Program = AAI_2_BYTE;//PAGE_PROGRAM; } else if(strstr(Chip_Info.Class,SUPPORT_NUMONYX_Alverstone) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_NORM_READ; mcode_Program = MODE_NUMONYX_PCM ; mcode_SegmentErase = 0xD8; } else if(strstr(Chip_Info.Class,SUPPORT_EON_EN25QHxx_Large) != NULL || strstr(Chip_Info.Class,SUPPORT_MACRONIX_MX25Lxxx_Large) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_4BYTE_FAST_READ; mcode_Program = PP_4ADR_256BYTE ; mcode_SegmentErase = 0xD8; mcode_ProgramCode_4Adr = 0x02; mcode_ReadCode = 0x0B; } else if(strstr(Chip_Info.Class,SUPPORT_SPANSION_S25FLxx_Large) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_4BYTE_FAST_READ; mcode_Program = PP_4ADR_256BYTE ; mcode_SegmentErase = 0xD8; mcode_ProgramCode_4Adr = 0x12; mcode_ReadCode = 0x0C; //printf("Read Code=%X\r\n",mcode_ReadCode); } else if(strstr(Chip_Info.Class,SUPPORT_NUMONYX_N25Qxxx_Large) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_4BYTE_FAST_READ_MICRON; mcode_Program = PP_4ADDR_256BYTE_MICROM ; if(strstr(Chip_Info.TypeName,"N25Q512") != NULL) mcode_SegmentErase = 0xD4; else mcode_SegmentErase = 0xD8; mcode_ProgramCode_4Adr = 0x02; mcode_ReadCode = 0x0B; } else if(strstr(Chip_Info.Class,SUPPORT_MACRONIX_MX25Lxxx_PP32) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Read = BULK_FAST_READ; mcode_Program = PP_32BYTE ; mcode_SegmentErase = 0xD8; } else if(strstr(Chip_Info.Class,SUPPORT_WINBOND_W25Pxx_Large) != NULL) { mcode_RDSR = RDSR; mcode_WRSR = WRSR; mcode_ChipErase = CHIP_ERASE; mcode_Program = PP_4ADR_256BYTE; mcode_Read = BULK_4BYTE_FAST_READ; mcode_SegmentErase= SE; mcode_ProgramCode_4Adr = 0x02; mcode_ReadCode = 0x0C; } else if(strstr(Chip_Info.Class,SUPPORT_ATMEL_45DBxxxB) != NULL) { mcode_RDSR = 0xD7; mcode_WRSR = 0; mcode_Read = BULK_AT45xx_READ; mcode_Program = PAGE_WRITE; mcode_SegmentErase = 0; CHIP_INFO mem_id; SetPageSize(&mem_id, 0); Chip_Info.ChipSizeInByte=GetChipSize(); Chip_Info.PageSizeInByte=GetPageSize(); } else if(strstr(Chip_Info.Class,SUPPORT_ATMEL_45DBxxxD) != NULL) { mcode_RDSR = 0xD7; mcode_WRSR = 0; mcode_Read = BULK_AT45xx_READ; mcode_Program = PAGE_WRITE; mcode_SegmentErase = 0; CHIP_INFO mem_id; SetPageSize(&mem_id, 0); Chip_Info.ChipSizeInByte=GetChipSize(); Chip_Info.PageSizeInByte=GetPageSize(); } // printf("Erase Code=%X\r\n",mcode_ChipErase); // printf("Read Code=%X\r\n",mcode_ReadCode); // printf("mcode_ProgramCode_4Adr=%X\r\n",mcode_ProgramCode_4Adr); }
LOCAL BOOL Palette_HandleScroll( HWND hWindow, BOOL fVScroll, UINT code, int pos) /************************************************************************/ { int Value, Position, MinPos, MaxPos, xChipSize, yChipSize; int Type, iRows, iCols, iRowIncr, iColIncr, iStart; RECT ClientRect; LPPALETTE lpPalette; // get pointer to palette information lpPalette = (LPPALETTE)GetWindowLong(hWindow, GWL_PALETTE); if (!lpPalette || !lpPalette->iColors) return(FALSE); if ( fVScroll ) { if ( !PaletteVertical() ) return( FALSE ); Type = SB_VERT; } else { if ( PaletteVertical() ) return( FALSE ); Type = SB_HORZ; } Value = Position = GetScrollPos(hWindow, Type); GetScrollRange(hWindow, Type, &MinPos, &MaxPos); GetChipLayout(hWindow, &ClientRect, &iRows, &iCols, &iRowIncr, &iColIncr, &iStart); switch (code) { case SB_LINEUP: Value -= 1; break; case SB_LINEDOWN: Value += 1; break; case SB_PAGEUP: if (Type == SB_VERT) Value -= (iRows-1); else Value -= (iCols-1); Value = bound(Value, MinPos, MaxPos); break; case SB_PAGEDOWN: if (Type == SB_VERT) Value += (iRows-1); else Value += (iCols-1); Value = bound(Value, MinPos, MaxPos); break; case SB_THUMBPOSITION: case SB_THUMBTRACK: Value = pos; break; } if ( Value == Position || Value < MinPos || Value > MaxPos) return(FALSE); SetScrollPos(hWindow, Type, Value, YES); GetChipSize(&xChipSize, &yChipSize); Value -= Position; Value = -Value; ClientRect.bottom++; ClientRect.right++; if (Type == SB_VERT) { // xChipSize--; Value = (Value * xChipSize); } else { // yChipSize--; Value = (Value * yChipSize); } if (Type == SB_VERT) ScrollWindow( hWindow, 0, Value, &ClientRect, &ClientRect ); else ScrollWindow( hWindow, Value, 0, &ClientRect, &ClientRect ); return(TRUE); }