MARMEX_VB test application program. This application works on "mbed NXP LPC1768" only. This application expects to have the MARMEX_VB module on a "MAPLE mini type-B (MARM03-BASE)" baseboard (slot2) with MARMEX_OB module (on slot1)

Dependencies:   MARMEX_VB NokiaLCD mbed

This is the library test program.
The program can test features of the library (refer to MARMEX-VB's API document) and can save captured data into BMP file.

Warning!

This test program can run on "mbed NXP LPC1768" only.

/media/uploads/nxpfan/dsc_0506_-1-.jpg
Picture : sample of test program operation
The modules of MARMEX-VB and MARMEX-OB are set on the "MAPLE mini type-B (MARM03-BASE)" baseboard.
The image data from camera is mirrored and alpha graphics added by software.

bmp_handler.cpp

Committer:
nxpfan
Date:
2014-06-20
Revision:
8:86aae677a68b
Parent:
0:343c01965543

File content as of revision 8:86aae677a68b:

#include "mbed.h"                   //  for mbed
#include "MARMEX_VB.h"
#include "bmp_handler.h"

#if defined( TARGET_MBED_LPC1768 ) || defined( TARGET_LPC11U24_401 )
LocalFileSystem     local("local"); //  for mbed to access local file system
#endif

#ifdef  RGB565_FORMAT
char bhp[]   = {
    0x42, 0x4d, 0x8a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x7c, 0x00,
    0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x03, 0x00,
    0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x1f, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x47, 0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#else
#if 0
char bhp[]   = {
    0x42, 0x4d, 0x8a, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x7c, 0x00,
    0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00,
    0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x47, 0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

#else
typedef struct  bmp_header_st    {
    unsigned short  bfType            __attribute__((packed));
    unsigned long   bfSize            __attribute__((packed));
    unsigned short  bfReserved1       __attribute__((packed));
    unsigned short  bfReserved2       __attribute__((packed));
    unsigned long   bfOffBits         __attribute__((packed));

    unsigned long   biSize            __attribute__((packed));
    long            biWidth           __attribute__((packed));
    long            biHeight          __attribute__((packed));
    unsigned short  biPlanes          __attribute__((packed));
    unsigned short  biBitCount        __attribute__((packed));
    unsigned long   biCompression     __attribute__((packed));
    unsigned long   biSizeImage       __attribute__((packed));
    long            biXPixPerMeter    __attribute__((packed));
    long            biYPixPerMeter    __attribute__((packed));
    unsigned long   biClrUsed         __attribute__((packed));
    unsigned long   biCirImportant    __attribute__((packed));
}
bmp_header;
#endif
#endif


FILE    *fp;

int open_BMP( char *file_name, int get_horizontal_size, int get_vertical_size )
{
    bmp_header  bh  =   {
        0x4D42,
        get_horizontal_size * get_vertical_size * 4 + 54,
        0,
        0,
        54,
        40,
        get_horizontal_size,
        get_vertical_size,
        1,
        32,
        0,
        get_horizontal_size * get_vertical_size * 4,
        2835,
        2835,
        0,
        0
    };
    char    s[ 80 ];

    sprintf( s, "/local/%s", file_name );

    if ( NULL == (fp    = fopen( s, "wb" )) )
        return 1;

    fwrite( &bh, sizeof( bh ), 1, fp );
//    fwrite( bhp, sizeof( bhp ), 1, fp );

    return 0;
}

void write_BMP( short *p, int length )
{
#ifdef  RGB565_FORMAT
    fwrite( p, sizeof( short ), length, fp );
#else
    unsigned long   v[ length ];
    unsigned long   tmp;

    for ( int i = 0; i < length; i++ ) {
        tmp     = p[ i ];
        //tmp     = 0xF800;
        v[ i ]  = (tmp & 0x001F) << 3;
        v[ i ] |= (tmp & 0x07E0) << 5;
        v[ i ] |= (tmp & 0xF800) << 8;
    }

    fwrite( v, sizeof( unsigned long ), length, fp );
#endif
}

void write_BMP( short *p, int length, char mask )
{
    unsigned long   v[ length ];
    unsigned long   tmp;

    for ( int i = 0; i < length; i++ ) {
        tmp     = p[ i ];
        //tmp     = 0xF800;
        v[ i ]  = (mask & 0x4) ? (tmp & 0x001F) << 3 : 0;
        v[ i ] |= (mask & 0x2) ? (tmp & 0x07E0) << 5 : 0;
        v[ i ] |= (mask & 0x1) ? (tmp & 0xF800) << 8 : 0;
    }

    fwrite( v, sizeof( unsigned long ), length, fp );
}

void close_BMP( void )
{
    fclose( fp );
}


char *read_alpha_BMP( char *file_name, alpha_param *azp )
{
    bmp_header  bh;
    char        s[ 80 ];
    int         data_size;

    sprintf( s, "/local/%s", file_name );

    if ( NULL == (fp    = fopen( s, "rb" )) ) {
        azp->buffer = NULL;
        return NULL;
    }

    fread( &bh, sizeof( bh ), 1, fp );
    azp->h    = bh.biWidth;
    azp->v    = bh.biHeight;
    azp->byte_per_pixel = bh.biBitCount / 8;

    data_size   = sizeof( char ) * azp->h * azp->v * azp->byte_per_pixel;

    fseek( fp, bh.bfOffBits - sizeof( bh ), SEEK_CUR );

    if ( NULL == ( azp->buffer = (char *)malloc( data_size ) ) ) {
        fclose( fp );
        return ( NULL );
    }

    fread( azp->buffer, data_size, 1, fp );
    fclose( fp );

    printf( "alpha image loaded. (from \"%s\", size = %d/%d, %d bytes/pixel)\r\n", s, azp->h, azp->v, azp->byte_per_pixel );

    return azp->buffer;
}