mythroad直接支持的数据结构，函数调用，以及入口函数。

uint64 #ifndef SIM_MOD typedef unsigned long long uint64 #else typedef unsigned _int64 uint64; #endif
int64 #ifndef SIM_MOD typedef typedef long long int64 #else typedef _int64 int64; #endif
no_check_stack #ifdef MR_SPREADTRUM_MOD #pragma no_check_stack #endif

uint16 typedef unsigned short uint16; //有符号16bit整型
uint32 typedef unsigned long int uint32; //无符号32bit整型
int32 typedef long int int32; //有符号32bit整型
uint8 typedef unsigned char uint8; //无符号8bit整型
int8 typedef signed char int8; //有符号8bit整型
int16 typedef signed short int16; //有符号16bit整型

FALSE #define FALSE 0
TRUE #define TRUE 1
NULL #define NULL (void*)0

MR_SUCCESS #define MR_SUCCESS 0 //成功
MR_FAILED #define MR_FAILED -1 //失败
MR_IGNORE #define MR_IGNORE 1 //不关心
MR_WAITING #define MR_WAITING 2 //异步(非阻塞)模式

头文件

Header:mrc_base.h


Mythroad常用库函数

Syntax

mrc_malloc #define malloc mrc_malloc
mrc_free #define free mrc_free
memcpy #define memcpy mrc_memcpy
memcmp #define memcmp mrc_memcmp
memchr #define memchr mrc_memchr
memset #define memset mrc_memset
memmove #define memmove mrc_memmove

strchr #define strchr mrc_strchr
strcpy #define strcpy mrc_strcpy
strncpy #define strncpy mrc_strncpy
strcat #define strcat mrc_strcat
strncat #define strncat mrc_strncat
strcmp #define strcmp mrc_strcmp
strncmp #define strncmp mrc_strncmp
strcoll #define strcoll mrc_strcoll
strlen #define strlen mrc_strlen
strstr #define strstr mrc_strstr
strtoul #define strtoul mrc_strtoul

MR_ATOI extern int (*MR_ATOI)(const char * nptr);
sprintf #define sprintf mrc_sprintf
MR_SPRINTF extern int (*MR_SPRINTF)(char * s, const char * format, ...);
atoi #define atoi mrc_atoi

MR_MEMCHR extern void *(*MR_MEMCHR)(const void * s, int c, int n);
MR_MEMSET extern void *(*MR_MEMSET)(void * s, int c, int n);
MR_MEMCPY extern void *(*MR_MEMCPY)(void * s1, const void * s2, int n);
MR_MEMCMP extern int (*MR_MEMCMP)(const void * s1, const void * s2, int n);
MR_MEMMOVE extern void *(*MR_MEMMOVE)(void * s1, const void * s2, int n);

mrc_strchr extern const char *mrc_strchr(const char *src,int c);
mrc_wstrlen extern int32 mrc_wstrlen(char * txt);
MR_STRCPY extern char *(*MR_STRCPY)(char * s1, const char * s2);
MR_STRNCPY extern char *(*MR_STRNCPY)(char * s1, const char * s2, int n);
MR_STRCAT extern char *(*MR_STRCAT)(char * s1, const char * s2);
MR_STRNCAT extern char *(*MR_STRNCAT)(char * s1, const char * s2, int n);
MR_STRCMP extern int (*MR_STRCMP)(const char * s1, const char * s2);
MR_STRNCMP extern int (*MR_STRNCMP)(const char * s1, const char * s2, int n);
MR_STRCOLL extern int (*MR_STRCOLL)(const char * s1, const char * s2);
MR_STRLEN extern int (*MR_STRLEN)(const char * s);
MR_STRSTR extern char *(*MR_STRSTR)(const char * s1, const char * s2);
MR_STRTOUL extern unsigned long int (*MR_STRTOUL)(const char * nptr, char ** endptr, int base);

mrc_malloc extern void* mrc_malloc(int size);
mrc_free extern void mrc_free(void *address);
mrc_memcmp #define mrc_memcmp(s1, s2, n) MR_MEMCMP(s1, s2, n)
mrc_memcpy #define mrc_memcpy(s1, s2, n) MR_MEMCPY(s1, s2, n)
mrc_memmove #define mrc_memmove(s1, s2, n) MR_MEMMOVE(s1, s2, n)
mrc_memchr #define mrc_memchr(s1, c, n) MR_MEMCHR(s1, c, n)
mrc_memset #define mrc_memset(s1, c, n) MR_MEMSET(s1, c, n)

mrc_strcpy #define mrc_strcpy(s1, s2) MR_STRCPY(s1, s2)
mrc_strncpy #define mrc_strncpy(s1, s2, n) MR_STRNCPY(s1, s2, n)
mrc_strcat #define mrc_strcat(s1, s2) MR_STRCAT(s1, s2)
mrc_strncat #define mrc_strncat(s1, s2, n) MR_STRNCAT(s1, s2, n)
mrc_strcmp #define mrc_strcmp(s1, s2) MR_STRCMP(s1, s2)
mrc_strncmp #define mrc_strncmp(s1, s2, n) MR_STRNCMP(s1, s2, n)
mrc_strlen #define mrc_strlen(s) MR_STRLEN(s)
mrc_strstr #define mrc_strstr(s1, s2) MR_STRSTR(s1, s2)
mrc_strcoll #define mrc_strcoll(s1, s2) MR_STRCOLL(s1, s2)

mrc_sprintf #define mrc_sprintf MR_SPRINTF
mrc_atoi #define mrc_atoi(s1) MR_ATOI(s1)
mrc_strtoul #define mrc_strtoul(s1, s2, n) MR_STRTOUL(s1, s2, n)

MR_MALLOC #define MR_MALLOC(size) mrc_malloc(size)
MR_FREE #define MR_FREE(p, size) m rc_free(p)

Remarks

一般不推荐在mythroad代码中使用C标准的库函数，一些C标准的库函数会导致mythroad代码的链接失败。
虽然使用C标准库函数是不推荐的，但在许多情况下使用C标准库函数的应用也是可以运行的，但使用未经
验证的C标准库函数，可能会由于不被手机支持而引发死机等问题。mythroad平台提供一些最为常用的C库函数，
请尽量使用这些函数。

Requirements

Header:mrc_base.h


Mythroad图片显示：

图片处理是游戏及应用开发的一个重要部分，现Mythroad支持16位、24位及256色的BMP图片。为了避免内存消耗，请尽量将大图分割成多个小图来处理。


BM图片处理模式

Syntax

typedef enum {
BM_OR,
BM_XOR,
BM_COPY,
BM_NOT,
BM_MERGENOT,
BM_ANDNOT,
BM_TRANSPARENT,
BM_AND,
BM_GRAY,
BM_REVERSE
};

Members

BM_OR, SRC .OR. DST* 半透明效果
BM_XOR SRC .XOR. DST*
BM_COPY, DST = SRC* 覆盖
BM_NOT DST = (!SRC)*
BM_MERGENOT, DST .OR. (!SRC)
BM_ANDNOT DST .AND. (!SRC)
BM_TRANSPARENT, 透明色不显示，图片的第一个象素（左上角的象素）是透明色
BM_GRAY 灰化显示
BM_REVERSE 保留

Requirements

Header:mrc_base.h


用增强的方式将bmp图片绘制于指定图片中。将序号si 的bmp缓冲中的图片，从缓冲中的图片的(sx, sy)开始的宽高为w, h的区域，绘制到序号di 的从(dx,dy)开始的bmp缓冲中。与mrc_bitmapNew配合使用。

Syntax

int mrc_bitmapDraw(
uint16 di,
int16 dx,
int16 dy,
uint16 si,
int16 sx,
int16 sy,
uint16 w,
uint16 h,
int16 A,
int16 B,
int16 C,
int16 D,
uint16 rop
);

Parameters

di
[IN]目标图片缓冲序号
dx
[IN]目标的X坐标
dy
[IN]目标的X坐标
si
[IN]源图片缓冲序号
sx
[IN]源的X坐标
sy
[IN]源的Y坐标
w
[IN]图片的宽
h
[IN]图片的高
A
[IN]见Remark部分
B
[IN]见Remark部分
C
[IN]见Remark部分
D
[IN]见Remark部分
Rop
[IN]有如下两种选择BM_COPY, BM_TRANSPARENT

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

A、B、C、D用于图像变化，用于该变化的变换矩阵为：
x = A0*x0 + B0*y0
y = C0*x0 + D0*y0
这里为了表示小数，A, B, C, D均被乘以了256，即：
A = A0*256
B = B0*256
C = C0*256
D = D0*256
根据变换公式，可以绘出不同效果的图像，比如：
旋转图像：
A = 256 * cos（角度）
B = 256 * sin（角度）
C = 256 * -sin（角度）
D = 256 * cos（角度）
放大、缩小图像：
A = 256 * 放大倍数
B = 0
C = 0
D = 256 * 放大倍数

Requirements

Header:mrc_base.h


将屏幕缓冲载入序号为i的bmp缓冲中。

Syntax

int mrc_bitmapGetScreen(
uint16 i
);

Parameters

i
[IN] 图片缓冲序号

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


将mrp中名为filename的图片，从(x, y)开始的宽高为w, h的区域，加载到序号为i的bmp缓冲中。max_w为名为filename的图片的图片宽度。

Syntax

int32 mrc_bitmapLoad(
uint16 i,
char* filename,
int16 x,
int16 y,
uint16 w,
uint16 h,
uint16 max_w
);

Parameters

i
[IN]图片缓冲序号
filename
[IN]文件名，当文件名为"*"时，释放该缓存
x
[IN]源图片的起始位置X坐标
y
[IN]源图片的起始位置Y坐标
w
[IN]欲加载图片的宽
h
[IN]欲加载图片的高
max_w
[IN]欲加载图片的原始宽度

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


兴建一个序号为i的bmp缓冲，缓冲图片的宽高为w, h。与mrc_bitmapShow配合使用

Syntax

int mrc_bitmapNew(
uint16 i,
uint16 w,
uint16 h
);

Parameters

i
[IN]图片缓冲序号
w
[IN]图片的宽
h
[IN]图片的高

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


将序号为i的bmp缓冲中的图片，从缓冲中的图片的(sx, sy)开始的宽高为w, h的区域，绘制到(x, y)开始的屏幕缓冲中。与mrc_bitmapNew配合使用

Syntax

int32 mrc_bitmapShow(
uint16 i,
int16 x,
int16 y,
uint16 rop,
int16 sx,
int16 sy,
int16 w,
int16 h
);

Parameters

i
[IN]图片缓冲序号
x
[IN]源图片的起始位置X坐标
y
[IN]源图片的起始位置Y坐标
rop
[IN]取值为BM_OR、BM_XOR、BM_COPY、BM_NOT、BM_MERGENOT、BM_ANDNOT、BM_TRANSPARENT、BM_AND、BM_GRAY、BM_REVERSE
sx
[IN]源图片的起始位置X
sy
[IN]源图片的起始位置Y
w
[IN]欲加载图片的宽
h
[IN]欲加载图片的高

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


功能同mrc_bitmapShow，唯一不同点是:源图片不是位于图片缓冲区内，而是由参数给出。

Syntax

int mrc_bitmapShowEx( uint16* p, int16 x, int16 y, int16 mw, int16 w, int16 h, uint16 rop, int16 sx, int16 sy );

Parameters

p
[IN]源图片指针
x
[IN]源图片的起始位置X坐标
y
[IN]源图片的起始位置Y坐标
mw
[IN]
w
[IN]欲加载图片的宽
h
[IN]欲加载图片的高
rop
[IN]取值为BM_OR、BM_XOR、BM_COPY、BM_NOT、BM_MERGENOT、BM_ANDNOT、BM_TRANSPARENT、BM_AND、BM_GRAY、BM_REVERSE

sx
[IN]源图片的起始位置X
sy
[IN]源图片的起始位置Y

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


图片描述结构体

Syntax

typedef struct{
uint16 w;
uint16 h;
uint32 buflen;
uint32 type;
uint16* p;
}mr_bitmapSt;

Members

w
图片宽度
h
图片高度
buflen
图片缓冲长度
type
图片类型
p
图片缓冲指钟

Requirements

Header:mrc_base.h


判断碰撞的画精灵函数，返回值是画精灵时精灵所在位置 非r,g,b的象素点数目。

Syntax

int32 mrc_spriteCheck(
uint16 i,
uint16 spriteindex,
int16 x,
int16 y,
uint8 r,
uint8 g,
uint8 b
);

Parameters

di
[IN]目标图片缓冲序号
spriteindex
[IN]精灵编号
x
[IN]屏幕X坐标
y
[IN]屏幕X坐标
r
[IN]RGB R值
g
[IN]RGB G值
b
[IN]RGB B值

Return Value

>=0 非r,g,b的象素点数目
MR_FAILED 失败

Requirements

Header:mrc_base.h


绘制精灵

Syntax

int32 mrc_spriteDraw(
uint16 i,
uint16 spriteindex,
int16 x,
int16 y,
uint16 mod
);

Parameters

i
[IN] 图片缓冲序号
spriteindex
[IN] 精灵编号
x
[IN] 屏幕X坐标
y
[IN] 屏幕Y坐标
mod
[IN] 取值为BM_OR、BM_XOR、BM_COPY、BM_NOT、BM_MERGENOT、BM_ANDNOT、BM_TRANSPARENT、BM_AND、BM_GRAY、BM_REVERSE

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

精灵简介:精灵是游戏运动的主体，支持碰撞检测，同时可以加载10个序列，处理方便灵活。精灵序列图片左上角的象素是透明色。

Requirements

Header:mrc_base.h


绘制精灵(增强)

Syntax

int32 mrc_spriteDraw(
uint16 i,
uint16 spriteindex,
int16 x,
int16 y,
int16 A,
int16 B,
int16 C,
int16 D
);

Parameters

i
[IN] 图片缓冲序号
spriteindex
[IN] 精灵编号
x
[IN] 屏幕X坐标
y
[IN] 屏幕Y坐标
A
[IN]见Remark部分
B
[IN]见Remark部分
C
[IN]见Remark部分
D
[IN]见Remark部分

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

精灵简介:精灵是游戏运动的主体，支持碰撞检测，同时可以加载10个序列，处理方便灵活。精灵序列图片左上角的象素是透明色。
A、B、C、D用于图像变化，用于该变化的变换矩阵为：
x = A0*x0 + B0*y0
y = C0*x0 + D0*y0
这里为了表示小数，A, B, C, D均被乘以了256，即：
A = A0*256
B = B0*256
C = C0*256
D = D0*256
根据变换公式，可以绘出不同效果的图像，比如：
旋转图像：
A = 256 * cos（角度）
B = 256 * sin（角度）
C = 256 * -sin（角度）
D = 256 * cos（角度）
放大、缩小图像：
A = 256 * 放大倍数
B = 0
C = 0
D = 256 * 放大倍数

Requirements

Header:mrc_base.h


设置精灵高度

Syntax

int32 mrc_spriteSet(
uint16 i,
uint16 h
);

Parameters

i
[IN] 图片缓冲序号
h
[IN] 精灵高度

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

精灵简介:精灵是游戏运动的主体，支持碰撞检测，同时可以加载10个序列，处理方便灵活。精灵序列图片左上角的象素是透明色。

Requirements

Header:mrc_base.h


δ֪

Syntax

typedef struct{
uint16 h;
}mr_spriteSt;

Members

h
δ֪

Requirements

Header:mrc_base.h


画地砖

Syntax

int32 mrc_tileDraw(
uint16 i
);

Parameters

i
[IN]图片缓冲序号(地砖号)

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


读取地砖值

Syntax

int32 mrc_tileGetTile(
uint16 i,
uint16 x,
uint16 y
);

Parameters

i
[IN]图片缓冲序号(地砖号)，由mrc_bitmapNew创建
x
[IN]地砖列
y
[IN]地砖行

Return Value

>=0 地砖值
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


设置地砖。

Syntax

int32 mrc_tileInit(
uint16 i,
int16 x,
int16 y,
uint16 w,
uint16 h,
uint16 tileh
);

Parameters

i
[IN]目标图片缓冲序号(地砖号)
x
[IN]屏幕位置X
y
[IN]屏幕位置Y
w
[IN]地砖列数
h
[IN]地砖行数
tileh
[IN]地砖图片高

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


从文件filename中读取地图到地砖i

Syntax

int32 mrc_tileLoad(
uint16 i,
char* filename
);

Parameters

i
[IN]图片缓冲序号(地砖号)，由mrc_bitmapNew创建
file
[IN]地图文件名

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


设置地砖i的可视范围。

Syntax

int32 mrc_tileSetRect(
uint16 i,
int16 x1,
int16 y1,
int16 x2,
int16 y2
);

Parameters

i
[IN]图片缓冲序号(地砖号)
x1
[IN]可视范围的左上X坐标
y1
[IN]可视范围的左上Y坐标
x2
[IN]可视范围的右下X坐标
y2
[IN]可视范围的右下X坐标

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


设置地砖值

Syntax

int32 mrc_tileSetTile(
uint16 i,
uint16 x,
uint16 y,
uint16 v
);

Parameters

i
[IN]图片缓冲序号(地砖号)，由mrc_bitmapNew创建
x
[IN]地砖列
y
[IN]地砖行
v
[IN]地砖值

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


地砖i卷动

Syntax

int32 mrc_tileShift(
uint16 i,
uint16 mode
);

Parameters

i
[IN]图片缓冲序号(地砖号)
mode
[IN]0 UP；1 DOWN；2 LEFT；3 RIGHT；

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

地砖简介:地砖，背景和关卡设计的基石。图片序号与mrc_bitmapLoad中的图片序号对应，同时可以有3个地砖，图片序号0～2。

Requirements

Header:mrc_base.h


δ֪

Syntax

typedef struct{
int16 x;
int16 y;
uint16 w;
uint16 h;
int16 x1;
int16 y1;
int16 x2;
int16 y2;
uint16 tilew;
uint16 tileh;
}mr_tileSt;

Members

δ֪

Requirements

Header:mrc_base.h


Mythroad图片处理示例

Mythroad图片处理处理示例的一般流程如下：

1、创建序号为i的bmp缓存
ret = mrc_bitmapNew(1,bk1->width, bk1->height);

2、装载图片
ret = mrc_bitmapLoad(1, name, 0, 0, logo->width, logo->height, logo->width);

3、绘制图片
mrc_bitmapShow( 1,0,0+g_delta_y,BM_COPY,0,0,bk1->width,bk1->height);

3、释放图片
ret = mrc_bitmapLoad(1, "*", 0, 0, bk1->width,bk1->height,bk1->width);


MyThroad 声音接口
Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但 Mythroad 中这五个文件并不能同时播放，当且仅当播放的声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。


播放声音缓冲

Syntax

int32 mrc_soundPlay(
uint16 i,
int32 loop
);

Parameters

i
[IN] 声音缓存序号，由mrc_soundSet创建
loop
[IN] 0:单次播放, 1:循环播放

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但Mythroad 中这五个文件并不能同时播放，当且仅当播放的 声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。

Requirements

Header:mrc_base.h


设置声音缓冲

Syntax

int32 mrc_soundSet(
uint16 i,
char * filename,
int32 type
);

Parameters

i
[IN] 声音缓存序号
filename
[IN] 声音文件名
type
[IN] 见MR_SOUND_TYPE枚举定义

Return Value

MR_SUCCESS 设置成功
MR_FAILED 设置失败

Remarks

Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但Mythroad 中这五个文件并不能同时播放，当且仅当播放的 声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。

Requirements

Header:mrc_base.h


停止播放声音缓冲

Syntax

int32 mrc_soundStop(
uint16 i
);

Parameters

i
[IN] 声音缓存序号，由mrc_soundSet创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但Mythroad 中这五个文件并不能同时播放，当且仅当播放的 声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。

Requirements

Header:mrc_base.h


播放声音数据

Syntax

int32 mr_playSoundEx(
int type,
const void* data,
uint32 dataLen,
int32 loop
);

Parameters

type
[IN] 声音数据类型，见MR_SOUND_TYPE定义，此函数支持MR_SOUND_MIDI MR_SOUND_WAV MR_SOUND_MP3
data
[IN] 声音数据指针
datalen
[IN] 声音数据长度
loop
[IN] 0:单次播放, 1:循环播放

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但Mythroad 中这五个文件并不能同时播放，当且仅当播放的 声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。

Requirements

Header:mrc_base.h


SDK所支持的音频类型

Syntax

enum {
MR_SOUND_MIDI,
MR_SOUND_WAV,
MR_SOUND_MP3,
MR_SOUND_AMR,
MR_SOUND_PCM
}MR_SOUND_TYPE;

Members

MR_SOUND_MIDI MIDI音频格式
MR_SOUND_WAV WAV音频格式
MR_SOUND_MP3 MP3音频格式
MR_SOUND_PCM 8K 16bit PCM

Requirements

Header:mrc_base.h


停止播放声音数据

Syntax

int32 mr_stopSoundEx(int type);

Parameters

type
[IN] 声音数据类型，见MR_SOUND_TYPE定义，此函数支持MR_SOUND_MIDI MR_SOUND_WAV MR_SOUND_MP3

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

Mythroad中最多同时支持 5个声音缓冲， index = 0~4。需要注意的是虽然Mythroad中最多同时支持5个Sound文件，但Mythroad 中这五个文件并不能同时播放，当且仅当播放的 声音类型不同并且宿主平台支持同时播放类型不同的声音时，可以同时播放不同的声音。

Requirements

Header:mrc_base.h


Mythroad声音处理接口

Mythroad声音播放处理示例

1、添加语音数据
typedef struct {
int32 len;
uint8 type;
void* pData;
} T_SOUND_MAP;//声音说明结构本
static T_SOUND_MAP sound_map[GAME_SOUND_MAX_ID];//声音缓存组
mrc_readFileFromMrpEx(NULL,name,(uint8**)&(sound_map[id].pData),(int32 *)&(sound_map[id].len),0);//从MRP资源包中装载声音数据

2、播放语音数据
mr_playSoundEx(sound_map[index].type, sound_map[index].pData, sound_map[index].len, loop);

3、停止播放语音数据
mr_stopSoundEx(sound_map[index].type);


mrc_DrawTextEx Flag标识

FLAG

DRAW_TEXT_EX_IS_UNICODE
#define DRAW_TEXT_EX_IS_UNICODE 1是否使用UNICODE码, 网络字节序
DRAW_TEXT_EX_IS_AUTO_NEWLINE
#define DRAW_TEXT_EX_IS_AUTO_NEWLINE 2是否自动换行

Requirements

Header:mrc_base.h


字符编码格式

Syntax

typedef enum {
MR_ENCODE_ASCII,
MR_ENCODE_UNICODE
};

Members

MR_ENCODE_ASCII ASCII编码
MR_ENCODE_UNICODE UNICODE编码

Requirements

Header:mrc_base.h


将压缩BCD编码的数字串解码出来。

Syntax

char *mrc_BCDDecode(
char *bcd,
int32 len,
char *output
);

Parameters

bcd
[IN]压缩BCD编码的数字串；
len
[IN]压缩BCD编码的数字串长度；
output
[OUT]输出字符串,空间由调用者负责申请和释放，本函数不负责申请释放内存。

Return Value

成功:返回指针output；失败:返回NULL

Remarks

1、BCD编码解释
2、ASCII数据转BCD见mrc_BCDEncode定义。

Requirements

Header:mrc_exb.h


对输入的ASCII数字串进行BCD压缩编码。

Syntax

char* mrc_BCDEncode(
char *in,
char *out
);

Parameters

in
[IN]ASCII数字串;
out
[OUT]BCD编码字符串。

Return Value

若输入参数*in和*out均不是NULL，则返回out的指针，否则返回NULL。

Remarks

1、BCD编码解释
2、输出字符串缓冲区，函数调用者负责创建该缓冲区，长度必须不少于mrc_strlen(in)/2+mrc_strlen(in)%2，此外，输出串无串结束标志。

Requirements

Header:mrc_exb.h


将gb字符串转换为Unicode字符串，并申请一片内存保存Unicode字符串，将Unicode字符串的指针返回。

Syntax

uint16* mrc_c2u(
char *cp,
int32 *err,
int32 *size
);

Parameters

cp
[IN]输入的gb字符串
err
[OUT]填NULL；若err为非NULL，则在转换出错时err返回出错字符的索引
size
[OUT]输出的Unicode字符串长度

Return Value

NULL 转换出错
其他 Unicode字符串指针

Remarks

由于早期mythroad版本，应用使用该函数时需要附带编码转换表，使用该函数将使目标代码增大约16K。

Requirements

Header:mrc_base.h


将指定字符（仅支持unicode）绘制于屏幕指定区域，区域外的部分不显示；

Syntax

int32 mrc_drawChar(
uint8* chr,
int16 x,
int16 y,
mr_screenRectSt rect,
mr_colourSt colorst,
uint16 font
);

Parameters

chr
[IN]待显示的字符unicode指针
x
[IN]待显示的字符左上角x
y
[IN]待显示的字符左上角y
rect
[IN]显示的字符限制范围
colorst
[IN] 字体顔色 见mr_colourSt定义
font
[IN]字体的大小 见MR_FONT_TYPE定义

Return Value

MR_SUCCESS 操作成功，字符为\00\00时也返回成功，但没有实质显示操作；
MR_FAILED 操作失败，字符在字库中未找到会返回该值；

Requirements

Header:mrc_base.h


绘制线段。

Syntax

void mrc_drawLine(
int16 x1,
int16 y1,
int16 x2,
int16 y2,
uint8 r,
uint8 g,
uint8 b
);

Parameters

x1
[IN]X起始坐标
y1
[IN]Y起始坐标
x2
[IN]X终点坐标
y2
[IN]Y终点坐标
r
[IN]RGB R
g
[IN]RGB G
b
[IN]RGB B

Return Value

void

Requirements

Header:mrc_base.h


在屏幕的指定位置绘制点。

Syntax

void mrc_drawPoint(
int16 x,
int16 y,
uint16 nativecolor
);

Parameters

x1
[IN]X坐标
y1
[IN]Y坐标
nativecolor
[IN]点的颜色。（R:G:B = 5:6:5）

Return Value

void

Requirements

Header:mrc_base.h


在屏幕的指定位置绘制点。

Syntax

void mrc_drawPointEx(
int16 x,
int16 y,
int32 r,
int32 g,
int32 b
);

Parameters

x
[IN]X坐标
y
[IN]Y坐标
r
[IN]RGB R值
g
[IN]RGB G值
b
[IN]RGB B值

Return Value

void

Remarks

类同于mrc_drawPoint

Requirements

Header:mrc_base.h


绘制矩形于指定区域。

Syntax

void mrc_drawRect(
int16 x,
int16 y,
int16 w,
int16 h,
uint8 r,
uint8 g,
uint8 b
);

Parameters

x
[IN]X
y
[IN]Y
w
[IN]宽
h
[IN]高
r
[IN]RGB R
g
[IN]RGB G
b
[IN]RGB B

Return Value

void

Requirements

Header:mrc_base.h


将指定文本绘制于屏幕指定位置。

Syntax

int32 mrc_drawText(
char* pcText,
int16 x,
int16 y,
uint8 r,
uint8 g,
uint8 b,
int is_unicode,
uint16 font
);

Parameters

pcTest
[IN]待显示的字符串
x
[IN]待显示的字符左上角x
y
[IN]待显示的字符左上角y
r
[IN]字体颜色r,g,b，r取值范围：0~255
g
[IN]字体颜色r,g,b，g取值范围：0~255
b
[IN]字体颜色r,g,b，b取值范围：0~255
is_unicode
[IN] 是否是unicode，TRUE(1)表示使用unicode编码，FALSE(0)表示使用GB2312编码
font
[IN]字体的大小 见MR_FONT_TYPE定义

Return Value

MR_SUCCESS 操作成功，字符为\00\00时也返回成功，但没有实质显示操作；
MR_FAILED 操作失败，字符在字库中未找到会返回该值；

Requirements

Header:mrc_base.h


与函数mrc_drawText功能相似，不同点在于mrc_drawText将显示的字符限制在左上角为（x, y），宽高为（w, h）的矩形范围之内。

Syntax

int32 mrc_drawTextEx(
char* pcText,
int16 x,
int16 y,
mr_screenRectSt rect,
mr_colourSt colorst,
int flag,
uint16 font
);

Parameters

pcTest
[IN]待显示的字符串
x
[IN]待显示的字符左上角x
y
[IN]待显示的字符左上角y
rect
[IN]矩形区域，见mr_screenRectSt定义
colorst
[IN]字体顔色 RGB 值 见mr_colourSt定义
flag
[IN] 可以取值为DRAW_TEXT_EX_IS_UNICODE DRAW_TEXT_EX_IS_AUTO_NEWLINE，也可以是这些值的相加，即：DRAW_TEXT_EX_IS_UNICODE | DRAW_TEXT_EX_IS_AUTO_NEWLINE
font
[IN]字体的大小 见MR_FONT_TYPE定义

Return Value

指示出在屏幕上第一个未完整显示字符的索引，该索引是Text的unicode索引值。即使函数使用gb输入字符串，函数返回的索引值也是根据该字符串转换为
unicode串后的索引值。若所有字符都能完整显示，则返回该字串转换为unicode串后的长度。

Requirements

Header:mrc_base.h


与函数mrc_drawText功能相似，不同点在于mrc_drawTextLeft函数不支持GB，所以比较节省内存。

Syntax

int32 mrc_drawTextLeft(
char* pcText,
int16 x,
int16 y,
mr_screenRectSt rect,
mr_colourSt colorst,
int flag,
uint16 font
);

Parameters

pcTest
[IN]待显示的字符串
x
[IN]待显示的字符左上角x
y
[IN]待显示的字符左上角y
rect
[IN]矩形区域，见mr_screenRectSt定义
colorst
[IN]字体顔色 RGB 值 见mr_colourSt定义
flag
[IN] 可以取值为DRAW_TEXT_EX_IS_UNICODE DRAW_TEXT_EX_IS_AUTO_NEWLINE，也可以是这些值的相加，即：DRAW_TEXT_EX_IS_UNICODE | DRAW_TEXT_EX_IS_AUTO_NEWLINE
font
[IN]字体的大小 见MR_FONT_TYPE定义

Return Value

指示出在屏幕上第一个未完整显示字符的索引(字节)，该索引是Text的unicode索引值。若所有字符都能完整显示，则返回该字串转换为unicode串后的长度。

Requirements

Header:mrc_base.h


与函数mrc_drawTextLeft功能相似，不同点在于mrc_drawTextLeft函数从右往左显示文本，相应的最右边显示的文本最后一个字符；并且，该函数不支持自动换行。

Syntax

int32 mrc_drawTextRight(
char* pcText,
int16 x,
int16 y,
mr_screenRectSt rect,
mr_colourSt colorst,
int flag,
uint16 font
);

Parameters

pcTest
[IN]待显示的字符串
x
[IN]待显示的字符左上角x
y
[IN]待显示的字符左上角y
rect
[IN]矩形区域，见mr_screenRectSt定义
colorst
[IN]字体顔色 RGB 值 见mr_colourSt定义
flag
[IN] 可以取值为DRAW_TEXT_EX_IS_UNICODE DRAW_TEXT_EX_IS_AUTO_NEWLINE，也可以是这些值的相加，即：DRAW_TEXT_EX_IS_UNICODE | DRAW_TEXT_EX_IS_AUTO_NEWLINE
font
[IN]字体的大小 见MR_FONT_TYPE定义

Return Value

指示出在屏幕上第一个未完整显示字符的索引(字节)，该索引是Text的unicode索引值。若所有字符都能完整显示，则返回该字串转换为unicode串后的长度。

Requirements

Header:mrc_base.h


将屏幕的左上角x,y，宽高为w,h的矩形区域内的r,g,b分别增强perr/256, perg/256, perb/256倍。若perr=256, perg=0, perb=0，将只保留矩形区域内的红色；若perr=perg= perb=128，将使矩形区域内产生一种半透明的效果。

Syntax

void mrc_EffSetCon(
int16 x,
int16 y,
int16 w,
int16 h,
int16 perr,
int16 perg,
int16 perb
);

Parameters

x
[IN]指定区域X坐标
y
[IN]指定区域Y坐标
w
[IN]指定区域宽度
h
[IN]指定区域高度
r
[IN]RGB R值
g
[IN]RGB G值
b
[IN]RGB B值

Return Value

void

Requirements

Header:mrc_base.h


从一个字符串中搜索一个字符最后出现的位置。

Syntax

char * mrc_strrchr(
const char * string,
int32 ch
);

Parameters

string
[IN]以NULL结尾的字符串;
lch
[IN]需要查找的字符。

Return Value

函数返回字符在串中最后出现的位置指针，若没有找到，返回NULL。

Remarks

void

Requirements

Header:mrc_exb.h


获取字符串的显示宽度和高度。

Syntax

int mrc_textWidthHeight(
char* pcText,
int is_unicode,
uint16 font,
int32* w,
int32* h
);

Parameters

pcText
[IN]待显示的字符串
unicode
[IN]是否是unicode，TRUE(1)表示使用unicode编码，FALSE(0)表示使用GB2312编码。
font
[IN]字体大小，可能的值是MR_FONT_SMALL MR_FONT_MEDIUM MR_FONT_BIG
w
[OUT]字符串的显示宽度
h
[OUT]字符串的显示高度

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Requirements

Header:mrc_base.h


将unicode编码的字符串转成gb2312编码。

Syntax

int32 mrc_unicodeToGb2312(
uint8* input,
int32 input_len,
uint8** output,
int32* output_len
);

Parameters

input
[IN]需要转换的unicode字符串;
input_len
[IN]需要转换的unicode字符串长度，字节为单位;
output
[OUT]转换成功以后的bg2312编码字符串存放缓冲区，缓冲区的内存由应用调用者提供并管理、释放;
output_len
[OUT]output缓冲区的长度，字节为单位

Return Value

MR_SUCCESS 转换成功
MR_FAILED 转换失败

Remarks

1、output缓冲区必须使用malloc分配处理的空间，否则手机可能会出现重启；
2、UNICODE编码解释
3、编码解释

Requirements

Header:mrc_exb.h


RGB 顔色定义

Syntax

typedef struct{
uint8 r;
uint8 g;
uint8 b;
}mr_colourSt;

Members

r
RGB 三原色 red (0 ` 255)
g
RGB 三原色 green (0 ` 255)
b
RGB 三原色 blue (0 ` 255)

Requirements

Header:mrc_base.h


SDK所支持的字体类型

Syntax

typedef enum {
MR_FONT_SMALL,
MR_FONT_MEDIUM,
MR_FONT_BIG
}MR_FONT_TYPE;

Members

MR_FONT_SMALL 小号字体
MR_FONT_MEDIUM 中号字体
MR_FONT_BIG 大号字体

Requirements

Header:mrc_base.h


MyThroad Timer简介

 利用Timer周期性触发的特点，常用它来完成状态的捕获、屏幕刷新等工作。在Mythroad平台中通过给Timer设置回调函数， 就可以在Timer触发时，自动调用其处理过程。

在设置Timer时长时，要结合Timer回调函数里其对自身调用的位置，适当做调整，以给其它较低优先级线程运行的时间。比如：
void UpdateScreenCallback（int32 data）
｛
PaintPics();
mrc_timerStart(GAME_LEVEL_TIMER, STONE_TIMER_INTERVAL, 1, AutoGenStoneLine,1);
}
即：回调后置时，Timer时应适当调小；反之
void UpdateScreenCallback（int32 data）
｛
mrc_timerStart(GAME_LEVEL_TIMER, STONE_TIMER_INTERVAL, 1, AutoGenStoneLine,1);
PaintPics();
}
即：回调前置时，Timer时长应适当增大。


定时器回调函数

Syntax

typedef void (*mrc_timerCB)(int32 data);

Parameters

data
[IN] 启动定时器时传入的data参数。

Return Value

void

Requirements

Header:mrc_base.h


创建定时器

Syntax

int32 mrc_timerCreate (void);

Parameters

void

Return Value

非NULL 定时器句柄
NULL 失败

Requirements

Header:mrc_base.h


删除定时器

Syntax

void mrc_timerDelete (int32 t);

Parameters

t
[IN]定时器句柄，由mrc_timerCreate创建。

Return Value

void

Requirements

Header:mrc_base.h


启动定时器

Syntax

int32 mrc_timerStart (
int32 t,
int32 time,
int32 data,
mrc_timerCB f,
int32 loop
);

Parameters

t
[IN]定时器句柄，由mrc_timerCreate创建
time
[IN]定时器时长，单位毫秒
data
[IN]启动定时器时传入的data参数
f
[IN]定时器回调函数，见mrc_timerCB定义
loop
[IN]是否循环；0:不循环，1:循环

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


停止定时器

Syntax

void mrc_timerStop (int32 t);

Parameters

t
[IN]定时器句柄，由mrc_timerCreate创建。

Return Value

void

Requirements

Header:mrc_base.h


Timer示例

 代码取自“泡泡龙”游戏中炮弹装载小龙的绘制部分

1、创建Timer
UPDATE_LEFT_DRAGON_WORK_TIMER = mrc_timerCreate();

2、Timer回调处理
void LeftDragonDoWork(void)
{
PaintLeftDragonStatus(LEFT_DRAGON_PUSH);
mrc_timerStart(UPDATE_LEFT_DRAGON_WORK_TIMER,500, 0, LeftDragonRecover,0);
}

3、启动Timer
mrc_timerStart(UPDATE_LEFT_DRAGON_WORK_TIMER,500, 0, LeftDragonRecover,0);

4、停止Timer
mrc_timerStop(UPDATE_LEFT_DRAGON_WORK_TIMER);

5、删除Timer
mrc_timerDelete(UPDATE_LEFT_DRAGON_WORK_TIMER);


照相机

首先调用mrc_Camera_init初始化设备；
其次mrc_Camera_creat创建预览界面；
mrc_Camera_capture拍照 ；
mrc_Camera_zoomOut缩小；
调用mrc_Camera_zoomIn放大；
退出，调用mrc_Camera_capture关闭照相机；

加速传感器使用说明

使用步骤。

1、 配置加速传感器参数，如果返回 MR_IGNORE 那么就不支持。

2、 配置成功以后，启动加速传感器。启动成功以后，就可以在mr_event()中接收数据了。

3、 mr_event()中

param1 MR_MOTION_TITLE事件以后表示有接收到加速传感器的事件了。

Param2 表示x、y方向的偏移，x占用低位16bit，y占用高位的16bit，

Param3 表示z方向偏移

应用程序只需要对这些数据进行处理就可以。

4、 停止加速传感器，应用使用结束以后停止传感器。

特别注明：

对于有需要监听direct（方向）、shark（震动）、转动角度方面需求，可以通过增加对x、y、z这些原始数据处理以后得到。


CAMERA_CAPTURE_MODE_MULTIPLE

照相机拍照模式

Syntax

typedef enum{
CAMERA_CAPTURE_MODE_MULTIPLE = 1,
CAMERA_CAPTURE_MODE_SINGLE = 2
}CAMERA_CAPTURE_MODE_T;

Members

CAMERA_CAPTURE_MODE_MULTIPLE
多张连拍模式
CAMERA_STATUS_INIT
单张拍照模式,拍照完成以后，如果要继续拍照要调用mrc_Camera_resume

Requirements

Header:mrc_camera.h


照相机拍照数据结构体

Syntax

typedef struct{
void* img_data;
int32 img_data_len;
}CAMERA_IMG_DATA_T;

Members

img_data
拍照返回的jpg格式图片数据指针
img_data_len
拍照返回的jpg格式图片数据长度

Requirements

Header:mrc_camera.h


照相机拍照质量模式

Syntax

typedef enum{
CAMERA_IMG_QUALITY_LOW,
CAMERA_IMG_QUALITY_NORMAL,
CAMERA_IMG_QUALITY_HIGH
}CAMERA_IMG_QUALITY_T;

Members

CAMERA_IMG_QUALITY_LOW
较差的图片质量
CAMERA_IMG_QUALITY_NORMAL
一般效果的图片质量
CAMERA_IMG_QUALITY_HIGH
高品质的图片质量

Requirements

Header:mrc_camera.h


照相机状态

Syntax

typedef enum{
CAMERA_STATUS_UNINIT,
CAMERA_STATUS_INIT,
CAMERA_STATUS_INIT_FAILED,
CAMERA_STATUS_START,
CAMERA_STATUS_START_FAILED,
CAMERA_STATUS_CAPTURE,
CAMERA_STATUS_CAPTURE_FAILED,
CAMERA_STATUS_PAUSE,
CAMERA_STATUS_RESUME_FAILED,
CAMERA_STATUS_CLOSE
}CAMERA_STATUS_T;

Members

CAMERA_STATUS_UNINIT
未初始化状态
CAMERA_STATUS_INIT
初始化成功状态
CAMERA_STATUS_INIT_FAILED
初始化失败状态
CAMERA_STATUS_START
启动成功状态
CAMERA_STATUS_START_FAILED
启动失败状态
CAMERA_STATUS_CAPTURE
拍照成功状态
CAMERA_STATUS_CAPTURE_FAILED
拍照失败状态
CAMERA_STATUS_PAUSE
暂停状态
CAMERA_STATUS_RESUME_FAILED
恢复失败状态
CAMERA_STATUS_CLOSE
关闭状态

Requirements

Header:mrc_camera.h


拍照

Syntax

int32 mrc_Camera_capture(
uint8 mode,
CAMERA_IMG_DATA_T* img_data
);

Parameters

mode
[IN]拍照模式，见枚举定义CAMERA_CAPTURE_MODE_T
img_data
[OUT]img_data:用于输出拍照的jpge图片数据，包括数据指针和数据大小，结构定义见CAMERA_IMG_DATA_T

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

注意:函数返回以后用户需要自己创建内存空间，将图片进行拷贝

Requirements

Header:mrc_camera.h


创建摄像头预览界面

Syntax

int32 mrc_Camera_creat(
uint16 x,
uint16 y,
uint16 prevW,
uint16 prevH,
uint16 imgW,
uint16 imgH,
uint32 img_quality_type
);

Parameters

x
[IN]预览区域的x坐标
y
[IN]预览区域的y坐标
prevW
[IN]预览区域的宽度
prevH
[IN]预览区域的高度
imgW
[IN]拍下来的照片的宽度
imgH
[IN]拍下来的照片的高度
img_quality_type
[IN]照片质量类型，定义见枚举定义CAMERA_IMG_QUALITY_T

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

注意:prevW和prevH最大，分别为屏幕的宽和高，如果屏幕大小是240x320，那么它们的最大值分别为240和320;
imgW和imgH的最大值与摄像头的像素有关系，可以大于屏幕的宽和高。

Requirements

Header:mrc_camera.h


关闭摄像头设备

Syntax

void mrc_Camera_destroy(void);

Parameters

void

Return Value

void

Remarks

调用该接口以后，如果想再次使用，那么必须重新初始化摄像头

Requirements

Header:mrc_camera.h


获取摄像头缩放等级

Syntax

int32 mrc_Camera_getZoom(void);

Parameters

void

Return Value

int32 摄像头缩放等级

Remarks

需添加对等级定义的说明

Requirements

Header:mrc_camera.h


摄像头设备初始化

Syntax

int32 mrc_Camera_init(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

备注:使用摄像头之前必须调用该接口，否则无法正常拍照

Requirements

Header:mrc_camera.h


暂停摄像头，如果先前处于预览状态，那么将会退出预览状态

Syntax

int32 mrc_Camera_pause(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

暂停摄像头，如果先前处于预览状态，那么将会退出预览状态

Requirements

Header:mrc_camera.h


恢复摄像头，如果先前处于预览状态，那么将会恢复到预览状态

Syntax

int32 mrc_Camera_resume(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

恢复摄像头，如果先前处于预览状态，那么将会恢复到预览状态

Requirements

Header:mrc_camera.h


获取摄像头当前状态

Syntax

uint8 mrc_Camera_status(void);

Parameters

void

Return Value

摄像头的当前状态，见枚举值CAMERA_STATUS_T定义

Remarks

void

Requirements

Header:mrc_camera.h


摄像头放大功能

Syntax

int32 mrc_Camera_zoomIn(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

该函数说明需添加

Requirements

Header:mrc_camera.h


摄像头缩小功能

Syntax

int32 mrc_Camera_zoomOut(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

该函数说明需添加

Requirements

Header:mrc_camera.h


传感器侦测动作类型枚举

枚举定义

typedef enum

{

MOTION_EVENT_SHAKE,

MOTION_EVENT_TILT

}MOTION_EVENT_T;

成员说明

MOTION_EVENT_SHAKE 当前侦测动作为晃动

MOTION_EVENT_TILT 当前侦测动作为倾斜


传感器晃动方向枚举定义

枚举定义

typedef enum

{

MOTION_SHAKE_NO_DIRECT,

MOTION_SHAKE_LEFT,

MOTION_SHAKE_RIGHT,

MOTION_SHAKE_FORWARD,

MOTION_SHAKE_BACKWARD

}MOTION_SHAKE_T;

成员说明

MOTION_SHAKE_LEFT 左

MOTION_SHAKE_RIGHT 右

MOTION_SHAKE_FORWARD 前

MOTION_SHAKE_BACKWARD后


获取返回参数的取值范围的最大值MAXRANGE。

函数定义

int32 mrc_motionSensorGetRange(void);

参数说明

无

返回值

成功:返回MR_PLAT_VALUE_BASE+MAXRANGE；因此需要将最终结果减去1000(MR_PLAT_VALUE_BASE的值)

失败:返回MR_FAILED;

不支持:返回MR_INGORE;

头文件

Mrc_exb.h


关闭传感器

函数定义

int32 mrc_motionSensorPowerOff(void);

参数说明

无

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_exb.h


打开传感器

函数定义

int32 mrc_motionSensorPowerOn(void);

参数说明

无

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_exb.h


监听晃动事件

函数定义

int32 mrc_motionSensorStartShakeListen(int32 sensitive);

参数说明

Sensitive [IN] 见MR_MOTION_SENSITIVE_ENUM枚举定义

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_exb.h


监听倾角事件

函数定义

int32 mrc_motionSensorStartTiltListen(int32 sensitive);

参数说明

Sensitive [IN] 见MR_MOTION_SENSITIVE_ENUM枚举定义

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_exb.h


暂停接收传感器事件

函数定义

int32 mrc_motionSensorStopListen(void);

参数说明

无

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_exb.h


传感器的敏感度，枚举类型。

枚举值定义

typedef enum

{

MR_MOTION_SENSITIVE_LOW,

MR_MOTION_SENSITIVE_NORMAL,

MR_MOTION_SENSITIVE_HIGH,

NUM_OF_MDI_MOTION_SENSITIVE

} MR_MOTION_SENSITIVE_ENUM;


倾斜侦测下的X、Y、Z坐标值结构体

结构体定义

typedef struct

{

int32 x;

int32 y;

int32 z;

}T_MOTION_TILT;


Mythroad扩展接口

照相机


Mythroad付费处理示例

Mythroad付费处理示例的一般流程如下：

1、初始化收费模块
if (mrc_initChargeOverSea(&PayCtrlInfo) == MR_SUCCESS)
{
Mggq_a_Enter_Game();//启动游戏
}

2、设置收费信息，包括MCC、通道、金额、付费类型等

3、发送付费信息
调用mrc_ChargeExOverSea直接付费或调用mrc_scoreConfirm进行二次确认付费


提供带回调函数的灵活扩展的海外版收费功能。

Syntax

int32 mrc_ChargeExOverSea(
uint32 Option,
uint16 Channel,
uint16 value,
uint16 mcc,
uint16 ChargePoint,
int32 data,
mrc_PayCB f,
int32 timeOut
);

Parameters

Option
值为0时，表示不写记录，用于购买道具等多次发送的场合；值为1时，表示要写记录，用于产品购买注册等场合。若检查到已付费的存盘记录，则本函数立刻返回成功.
Channel
收费渠道，由斯凯定义、分配。示例可见PAY_CHANNEL
value
收费金额，单位为通道的计费单位。最大取值范围为10条该通道SP短信的对应值，例如，1.5的通道最大值为150。
mcc
从Excel表中取得的MCC值，主要是用于校验，避免出错。
ChargePoint
计费点编号。
data
回调函数的参数
f
回调函数，见mrc_PayCB定义。当f=NULL时，回调函数将被忽略，这时本函数行为和mrc_ChargeEx完全一致。
timeOut
超时保护定时器等待的毫秒数。如果超时时间还是没有收到所有的状态报告，当超时时间到达时，回调函数必须被调用,在传给应用 的data数据中指明尚未收到的短信条数。
若该值为0，则所有短信提交协议栈成功后立刻返回，若该值为负数，则永久等待，直到收到足够的短信发送成功状态报告。

Return Value

MR_SUCCESS 第一条MO短信成功提交协议栈；后续短信将异步MO;
MR_FAILED 收费失败。

Remarks

在最后一条MO短信返回成功的状态报告后，回调函数将被执行。

Requirements

Header:mrc_payment.h


付费检测

Syntax

int32 mrc_checkCharge(void)

Parameters

void

Return Value

MR_SUCCESS:找到成功发送了计费短信的合法签名文件；
MR_FAILED:没有找到指定的签名文件或者签名文件不是本手机的。

Remarks

检查应用所在目录的appname子目录有无成功发送计费短信的签名文件，若有，则返回成功，否则返回失败。
扩展定义见mrc_checkChargeEx

Requirements

Header:mrc_payment.h


付费检测

Syntax

int32 mrc_checkChargeEx(int32 Option);

Parameters

Option
[IN]见PAY_CHECK_OPTION

Return Value

MR_SUCCESS 条件匹配；
MR_FAILED 查找失败。

Remarks

mrc_checkChargeEx(CHECK_IS_REGISTER)==MR_SUCCESS，用户已注册应用；
mrc_checkChargeEx(CHECK_IS_FREE)==MR_SUCCESS，游戏在该运营商免费；
mrc_checkChargeEx(CHECK_IS_MONTHUSER)==MR_SUCCESS，用户是包月用户.

Requirements

Header:mrc_payment.h


付费类型检测

Syntax

int32 mrc_checkChargeExOverSea(int32 Option);

Parameters

Option
[IN]见PAY_CHECK_OPTION定义

Return Value

MR_SUCCESS 条件匹配；
MR_FAILED 查找失败。

Remarks

mrc_checkChargeExOverSea(CHECK_IS_REGISTER)==MR_SUCCESS，用户已注册应用；目前只支持CHECK_IS_REGISTER属性。

Requirements

Header:mrc_payment.h


用户对付费操作的二次确认。

Syntax

void mrc_ConfirmSms(int32 isBuy);

Parameters

isBuy
［IN］0:用户放弃二次确认；1:用户选择二次确认。

Return Value

MR_SUCCESS 设置成功。 MR_FAILED 设置失败。

Remarks

在mrc_ChargeExConfirm调用后，如果通道需要二次确认，在收到确认提醒短信后，回调函数cbQueConfirm将被调用，
然后应用将提示用户是否确认购买行为，应用均需要调用mrc_ConfirmSms函数，告知用户态度。
(1)、如果用户选择购买，则计费模块将很快就调用mrc_PayCB f；并在后台异步的完成二次确认以及后续其他短信的自动二次确认；
(2)、如果用户选择不购买，则计费模块将清空短信发送队列，回调函数mrc_PayCB f将不会被执行。

Requirements

Header:mrc_payment.h


初始化计费模块，申请各种资源。

Syntax

int32 mrc_initChargeOverSea(
PAY_CTR_INFO_T *tPayCtrlInfo
);

Parameters

tPayCtrlInfo
[OUT]tPayCtrlInfo 见PAY_CTR_INFO_T定义

Return Value

MR_SUCCESS 初始化成功
MR_FAILED 初始化失败

Remarks

必须首先调用。在多国语言版本中，资费说明和收费金额、操作说明和游戏中语言文字都保存在EXCEL表生成的资源文件中。
1、计费初始化时，取得计费控制信息；
2、根据计费控制信息，取得各个收费点的收费金额；
3、如果注册费为0，则不应该弹出注册提示；
4、如果道具收费为0，可以弹出道具信息，用户点击确定后调用短信发送函数，
短信发送函数将返回成功。

Requirements

Header:mrc_payment.h


配置SDK计费模块的默认主、副SP计费通道。

Syntax

int32 mrc_initDefaultChn(
uint16 priChn,
uint16 slvChn
);

Parameters

priChn
［IN］主通道ID。高字节为联通主通道ID，低字节为移动主通道ID；当高字节为0时，联通主通道ID和移动主通道ID相同。
slvChn
［IN］副通道ID。高字节为联通副通道ID，低字节为移动副通道ID；当高字节为0时，联通副通道ID和移动副通道ID相同。

Return Value

MR_SUCCESS 设置成功。 MR_FAILED 设置失败。

Remarks

在计费初始化之后，调用发送收费短信的接口之前，必须调用mrc_initDefaultChn。
SDK计费模块总是尝试优先使用主通道进行收费；如果通道单价高于收费金额，则尝试使用副通道进行收费；
目前暂时还不支持将主通道收费余额转给副通道收取的方式，日后将视情况支持。
在SDKv1.0.2.42以及之前的版本中，不支持副通道，主通道的移动联通也是相同地进行切换。
在SDKv1.0.2.43版本中，只有主通道支持通道切换，副通道不支持切换；
在SDKv1.0.3.0到SDKv1.0.3.15版本中，主副通道不支持移动、联通分开配置。

Requirements

Header:mrc_payment.h


启动WAP浏览器查询积分。

Syntax

void mrc_LookScore(void);

Parameters

void

Return Value

void

Requirements

Header:mrc_payment.h


付费回调函数

Syntax

typedef void (*mrc_PayCB)(int32 data);

Members

data
data的定义未知

Returns

void

Requirements

Header:mrc_payment.h


发送定购信息

函数定义

int32 mrc_payment(void);

参数说明

无

返回值

MR_SUCCESS 发送成功

MR_FAILED 发送失败

MR_IGNORE 未准备好

头文件

Mrc_base_i.h


给当前游戏、当前用户生成注册文件

Syntax

int32 mrc_RegisterSid(void);

Parameters

void

Return Value

MR_SUCCESS 注册成功;
MR_FAILED 注册失败。

Remarks

(1)、若用户已注册，则不做任何操作；
(2)、若注册文件不存在，则新生成注册文件；
(3)、若注册文件已存在，则将用户的IMSI添加到注册文件中；

Requirements

Header:mrc_payment.h


释放计费模块相关资源。

Syntax

int32 mrc_releaseChargeOverSea(void);

Parameters

void

Return Value

MR_SUCCESS 成功释放资源
MR_FAILED 释放失败

Requirements

Header:mrc_payment.h


支持二次确认和积分上传的短信计费接口。

Syntax

int32 mrc_scoreConfirm(
uint32 Option,
uint16 value,
mrc_PayCB f,
int32 data,
int32 timeOut,
mrc_PayCB cbQueConfirm,
uint16 mcc,
int32 score
);

Parameters

Option
［IN］值为0时，表示不写记录，用于购买道具等多次发送的场合；值为1时，表示要写记录，用于产品购买注册等场合。
若检查到已付费的存盘记录，则本函数立刻返回成功。
value
［IN］收费金额，单位为通道的计费单位。最大取值范围为10条该通道SP短信的对应值，例如，1.5的通道最大值为150。
f
［IN］mrc_PayCB短信发送完毕的回调函数，当f=NULL时，回调函数将被忽略，这时本函数行为和mrc_ChargeEx完全一致。
data
［IN］当f函数被调用时的回调函数参数。
timeOut
［IN］超时保护定时器等待的毫秒数。如果超时时间还是没有收到所有的状态报告,当超时时间到达时，回调函数必须被调用。
在传给应用 的data数据中指明尚未收到的短信条数。若该值为0，则所有短信提交协议栈成功后立刻返回，若该值为负数，则永久等待，直到收到足够的短信发送成功状态报告。
cbQueConfirm
［IN］mrc_PayCB二次确认短信通知函数。当该通道需要二次确认时，收到二次确认提醒后，该函数将被执行。确认继续付费，需调用mrc_ConfirmSms
mcc
［IN］从Excel表中取得的MCC值，主要是用于校验，避免出错。
score
［IN］若需要上传积分，则调用本函数。

Return Value

MR_SUCCESS 第一条MO短信成功提交协议栈；后续短信将异步MO;
MR_FAILED 收费失败。

Remarks

1、如果最终使用的通道不需要二次确认，则本函数的行为和mrc_ChargeExOversea一致；
2、如果最终使用的通道需要二次确认，则在收到运营商回复的第一条的回复请求后，调用回调函数cbQueConfirm。

Requirements

Header:mrc_payment.h


付费回调函数

Syntax

typedef struct{
uint32 Option;//是否生成签名文件，1:生成；0:不生成；
uint16 Channel;//收费通道
uint16 value;//收费金额
int32 timeOut;//超时时间，若为0则不等待，立刻返回
int32 data;//传给回调函数的参数。
mrc_PayCB fcb;
}PAY_CALLBACK_t;

Members

mrc_PayCB
见mrc_PayCB定义

Requirements

Header:mrc_payment.h


付费通道定义

Syntax

typedef enum{
ZHANGSHANGLINGTONG_2RMB=0, // 0表示2元掌上灵通的通道，移动1元，联通2元
PAYMENT_TEST, // 1表示测试
ZHIYUNSHIDAI_2RMB, // 2 表示指云时代的通道，移动1元，联通2元
ZHANGSHANGLINGTONG_2RMB_MMS, // 3表示掌上灵通的2块钱彩信通道，只有移动。从20080808开始用10662000300350的15省2元短信代替。
ZHIYUNSHIDAI_1RMB, // 4指云时代1RMB联通通道。
XINQINGHUDONG_1RMB, // 5心情互动1RMB联通通道。
GUNSHIYIDONG_2RMB, // 6滚石移动2RMB，移动、联通均2元。
CHUANGYIHEXIAN_2RMB, // 7创意和弦2RMB，移动、联通均2元。
TOM_2RMB, // 8TOM通道，移动、联通均2元。
TOM_TEST2RMB, // 9TOM测试通道，移动、联通均2元。
ZHIYUNSHIDAI_2RMB_JS, // 10指云时代移动1元联通2元，限江苏省使用。其他省份不可用。
ZHIYUNSHIDAI_2RMB_MMS, // 11 指云时代彩信通道，移动联通均2元。
ZHIYUNSHIDAI_1RMB_MT, // 12指云时代移动多MO单MT，联通多MO多MT通道，移动联通均1元。
ZHANGSHANGLINGTONG_2RMB_318,//13掌上灵通2RMB。
ZHIYUNSHIDAI_ZMCC10MT_UNICOM20,// 14指云时代移动1元，采用单MT下行屏蔽指令、联通2元
BEIWEI_CMCC10_UNICOM20, // 15北纬通道，移动1元，联通2元。
ZHANGSHANGLINGTONG_20, //16 和0号通道完全一致，主要是为了和阅读产品兼容而 增加的通道。表示2元掌上灵通的通道，移动1元，联通2元
PAY_CHN_ZY31, //17 指云时代移动3元彩信通道，联通使用1元指令。
PAY_CHN_XQ21, //18 心情互动移动2元通道，联通使用1元指令。
INDONESIA_2000RB, //19印度尼西亚2000卢比通道。
PAY_CHN_TMGAME22, //20TOM彩信游戏通道彩信，移动联通均2元
PAY_CHN_TMBOOK22, //21TOM彩信电子书通道，移动联通均2元
PAY_CHN_ZS22, //22掌上灵通10662000300350通道，移动、联通均2元；
PAY_CHN_CY12, //23创艺和弦通道，移动1元，联通2元
PAY_CHN_GS22_GUANGDONG, //24滚石广东通道。移动2源，联通2源。
PAY_CHN_ZX11, //25移动长沙掌讯1元，联通指云1元
PAY_CHN_ZX22, //26移动长沙掌讯2元，联通指云2元
PAY_CHN_ZYRTT22, // 27指云时代彩信通道，移动联通均2元。
PAY_CHN_ZSSIK22, // 28掌上灵通短信通道，移动联通均2元。是318通道。
PAY_CHN_CYAKJ22, // 29创意和弦短信通道，移动联通均2元。
PAY_CHN_ZYTGT22, // 30指云时代短信通道，移动联通均2元。
PAY_CHN_KZ12, // 31短信通道，移动联通均1元。
PAY_CHN_KZ22, // 32短信通道，移动联通均2元。
PAY_CHN_ZSD12, // 33短信通道，移动1元，联通2元。
PAY_CHN_ZYSIGN21, // 34短信通道，移动2元，联通1元。
MAX_PAY_CHANNEL }PAY_CHANNEL;

Requirements

Header:mrc_payment.h


PAY_CHECK_OPTION;

Syntax

typedef enum{
CHECK_IS_REGISTER=0x00,
CHECK_IS_FREE=0x01,
CHECK_IS_MONTHUSER=0x02
}PAY_CHECK_OPTION;

Members

CHECK_IS_REGISTER
注册付费
CHECK_IS_FREE
免费
CHECK_IS_MONTHUSER
包月用户

Requirements

Header:mrc_payment.h


PAY_CTR_INFO_T

Syntax

typedef struct{
int32 MCC;
int32 AppLanguageID;
}PAY_CTR_INFO_T;

Members

MCC
收费提示、收费金额的语言ID
AppLanguageID
操作说明、帮助介绍的语言ID

Requirements

Header:mrc_payment.h


PAY_MSG_OPTION

Syntax

typedef enum{
PAY_MSG_MAGIC=0,
PAY_MSG_REGISTER,
PAY_MSG_SCORE,
PAY_MSG_UNIPAY,
PAY_MSG_DATA
}PAY_MSG_OPTION;

Members

PAY_MSG_MAGIC
道具短信
PAY_MSG_REGISTER
注册短信
PAY_MSG_SCORE
收费积分短信
PAY_MSG_UNIPAY
统一充值短信
PAY_MSG_DATA

Requirements

Header:mrc_payment.h


标识付费状态

Syntax

typedef struct{
uint16 isReg;//是否已注册
uint32 Option;//是否生成签名文件，1:生成；0:不生成；
uint16 Channel;//收费通道
uint16 value;//收费金额
int32 timeOut;//超时时间，若为0则不等待，立刻返回
int32 data;//传给回调函数的参数。
mrc_PayCB fcb;
}PAY_STATUS_t;

Members

mrc_PayCB
见mrc_PayCB的定义

Requirements

Header:mrc_payment.h


存储记录

Syntax

typedef struct{
char MD5[33];//整个存盘记录的MD5。
int32 ver;//存盘记录版本；
int32 recNum;//用户记录的个数。
int32 CurRec;//当前用户是recNum中的的几个用户。
USER_RECORD_T *UserData;//recNum个用户记录。
}SAVE_RECORD_T;

Members

Requirements

Header:mrc_payment.h


用户消费记录

Syntax

typedef struct{
char MD5[33];//用户IMEI+IMSI的MD5值，由mrc_UserInfoMD5函数生成。
char Reserved[3];//保留
int32 value;//用户当天消费金额，用于进行限额，每天最高40RMB
mr_datetime lastPayDate;//用户最后消费的日期。用于进行限额。
//以下为用户私有数据。
int32 times;//用户已使用次数。
}USER_RECORD_T;

Members

Requirements

Header:mrc_payment.h


File文件操作 常见宏

Syntax

MR_IS_FILE #define MR_IS_FILE 1 文件
MR_IS_DIR #define MR_IS_DIR 2 目录
MR_IS_INVALID #define MR_IS_INVALID 8 无效(非文件、非目录)

MR_FILE_RDONLY #define MR_FILE_RDONLY 1以只读的方式打开文件
MR_FILE_WRONLY #define MR_FILE_WRONLY 2以只写的方式打开文件
MR_FILE_RDWR #define MR_FILE_RDWR 4以读写的方式打开文件
MR_FILE_CREATE #define MR_FILE_CREATE 8如果文件不存在，创建该文件
MR_FILE_RECREATE #define MR_FILE_RECREATE 16无论文件存不存在，都重新创建该文件

Requirements

Header:mrc_base.h


文件查找,位置指针偏移量标识

Syntax

typedef enum {
MR_SEEK_SET,
MR_SEEK_CUR,
MR_SEEK_END
};

Members

MR_SEEK_SET 从文件起始开始
MR_SEEK_CUR 从当前位置开始
MR_SEEK_END 从文件末尾开始

Requirements

Header:mrc_base.h


Md5_state_t md5状态信息结构体

结构体定义

typedef struct md5_state_s {

md5_word_t count[2]; /* message length in bits, lsw first */

md5_word_t abcd[4]; /* digest buffer */

md5_byte_t buf[64]; /* accumulate block */

} md5_state_t;

头文件

Mrc_base.h


关闭指定句柄的文件。

Syntax

int32 mrc_close(
int32 f
);

Parameters

f
文件句柄，由mrc_open创建。

Return Value

MR_SUCCESS 关闭成功
MR_FAILED 关闭失败

Remarks

Requirements

Header:mrc_base.h


取得文件类型信息。

Syntax

int32 mrc_fileState(
const char* filename
);

Parameters

filename
文件名称，需含路径。

Return Value

MR_IS_FILE 是文件
MR_IS_DIR 是目录
MR_IS_INVALID 文件不存在，或既不是文件也不是目录
相关描述见MR_IS_FILE MR_IS_DIR MR_IS_INVALID

Requirements

Header:mrc_base.h


取得一个目录搜索的结果。将结果放置于buffer中。当目录中的结果都遍历过后，返回MR_FAILED。

Syntax

int32 mrc_findGetNext(
int32 search_handle,
char* buffer,
uint32 len
);

Parameters

search_handle
[IN]调用mr_c_findStart时返回的查找句柄
buffer
[OUT]缓冲区，用于存放查找成功时文件名或一级子目录名
len
[IN]缓冲区大小

Return Value

MR_SUCCESS 搜索成功
MR_FAILED 搜索结束或搜索失败

Requirements

Header:mrc_base.h


查找指定名称目录中的文件

Syntax

int32 mrc_findStart(
const char* name,
char* buffer,
uint32 len
);

Parameters

name
[IN]目录名
buffer
[OUT]缓冲区，用于存放查找成功时第一个文件名或一级子目录名
len
[IN]缓冲区大小

Return Value

>0 查找句柄，供mrc_findGetNext、mr_c_findStop函数使用
MR_FAILED 失败

Remarks

准备搜索name指定的目录，当dsm调用该函数后，系统初始化一个目录搜索，并返回第一个目录搜索的结果，每当dsm调用一次mr_c_findGetNext函数，系统返回下一个该目录下的文件或一级子目录名。该函数只返回查找 句柄。当name为空字符串""时（注意name指向空串，但name不是NULL），搜索Mythroad平台引擎的文件当前目录。 如：若手机以"/dsmdata/"作为Mythroad平台引擎的文件当前目录，当name为空字符串时，搜索目录"/dsmdata"。 例：一个目录下有文件："a.bmp"、"b.mrp"；目录"data"，则mr_c_findStart返回查找句柄和"a.bmp"/handle，紧接着的mr_c_findGetNext返回"b.mrp"/MR_SUCCESS、"data"/MR_SUCCESS和XX(无效)/MR_FAILED。

Requirements

Header:mrc_base.h


目录搜索结束。中止一个mr_c_findStart开启的目录搜索。

Syntax

int32 mrc_findStop(
int32 search_handle
);

Parameters

search_handle
[IN]调用mr_c_findStart时返回的查找句柄

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


释放由mrc_readFileFromMrp函数读取的文件内容空间。

函数定义

void mrc_freeFileData(void* data, int32 filelen);

参数说明

Data [IN] 文件内容指针

Filelen [IN] 文件内容长度

返回值

无

头文件

Mrc_base.h


获得当前目录路径，注意，返回的目录路径是GB编码的。

Syntax

int32 mrc_GetCurrentDirectory(
int32 nBufferLength,
char *lpBuffer
);

Parameters

nBufferLength
[IN]lpBuffer的大小 lpBuffer
[OUT]存放目录路径的缓存

Return Value

目录信息的字节数，不包括字符串结束符；若读取失败，则返回值为0。

Remarks

1、GB编码 解释

Requirements

Header:mrc_exb.h


获得指定盘符的空间信息。

Syntax

uint64 mrc_GetDiskFreeSpaceEx(
uint8 *lpDirectoryName,
uint64 *TotalBytes,
uint64 *FreeBytes
);

Parameters

nBufferLength
[IN]lpDirectoryName，目标磁盘上的一个目录，若为NULL表示当前目录;
lTotalBytes
[OUT]该磁盘总的字节数；
lFreeBytes
[OUT]FreeBytes 该磁盘空闲字节数

Return Value

该盘符空闲字节数，当失败或空闲字节数为0时，返回0。

Remarks

目前限制当前目录必须为NULL，且必须是手机上的T卡。

Requirements

Header:mrc_exb.h


取得文件长度。

Syntax

int32 mrc_getLen(
const char* filename
);

Parameters

filename
[IN]filename 文件名称

Return Value

>=0 文件长度
MR_FAILED 失败/文件不存在

Requirements

Header:mrc_base.h


创建目录。

Syntax

int32 mrc_mkDir(
const char* name
);

Parameters

name
[IN]目录名称

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


打开指定名称文件。

Syntax

int32 mrc_open(
const char* filename,
uint32 mode
);

Parameters

filename
文件名

mode
文件打开方式,mode取值有MR_FILE_RDONLY只读的方式打开文件;
MR_FILE_WRONLY以只写的方式打开文件;
MR_FILE_WRONLY以读写的方式打开文件;
MR_FILE_RDWR以读写的方式打开文件
MR_FILE_CREATE如果文件不存在，创建该文件
MR_FILE_RECREATE无论文件存不存在，都重新创建该文件

Return Value

非 NULL 文件句柄
NULL 失败

Remarks

如果文件不存在，根据mode组合值中有MR_FILE_CREATE或MR_FILE_RECREATE则创建之。

Requirements

Header:mrc_base.h


读取文件的内容到指定的缓冲。

Syntax

int32 mrc_read(
int32 f,
void *p,
uint32 l
);

Parameters

f
[IN]文件句柄,由mrc_open创建
p
[OUT]文件缓存地址
l
[OUT]缓存长度

Return Value

>0 确切读出的字节数
MR_FAILED 失败

Requirements

Header:mrc_base.h


读取文件的所有内容到申请的内存中。

Syntax

void* mrc_readAll(
const char* filename,
uint32 *len
);

Parameters

filename
[IN]文件名称
len
[OUT]读取到内容的长度

Return Value

非NULL 指向读取到的内容的指针，该内存需要调用者释放
NULL 失败

Requirements

Header:mrc_base.h


从mrp中读取文件的所有内容到申请的内存中

从mrp中读取文件的所有内容到申请的内存中。使用该函数得到的内存，需要使用mrc_freeFileData函数释放。

函数定义

void * mrc_readFileFromMrp(

const char* filename,

int32 *filelen,

int32 lookfor

);

参数说明

Filename [IN] mrp文件名

fileLen [OUT] 当lookfor==0时返回文件内容长度

lookfor [IN] 指出函数的操作形式:

0: 读取mrp中文件的内容

1: 仅仅查找mrp中是否存在该文件，并不读取文件内容

返回值

非NULL 指向读取到的内容的指针，该内存需要调用者释放

NULL 失败

头文件

Mrc_network.h


从指定的mrp文件中读取指定的文件

从指定的mrp文件中读取指定的文件。该函数与mrc_readFileFromMrp的区别除了输入有所不同外，还有另外一个不同:mrc_readFileFromMrp函数尽量读取出mrp中的文件，仅对文件以及读取

过程做若检查；mrc_readFileFromMrpEx对读取过程做强检查，若文件以压缩形式存放，还会对文件进行内容的强检查。该函数适合使用在加载代码等需要较高正确性保证的环境。

函数定义

int32 mrc_readFileFromMrpEx(

char* packname,

const char* filename,

uint8 ** filebuf,

int32 *filelen,

int32 lookfor

);

参数说明

Packname [IN] MRP文件名

Filename [IN] 欲读取文件的文件名

Filebuf [OUT] 读取文件的输出缓冲,当文件以压缩形式存放时，若:*filebuf==NULL，

则函数申请一片空间存放返回的文件；

*filebuf!=NULL，这时函数使用*filebuf指向的空间存放返回的文件内容

*filebuf 当lookfor==0、2、3时返回文件内容指针

fileLen [OUT] 当*filebuf!=NULL、文件以压缩形式存放时，指出*filebuf指向的空间大小，若该空间大小不足以

存放解压以后的文件，则函数返回失败

*filelen 当lookfor==0、2、3时返回文件内容长度

lookfor [IN] 指出函数的操作形式:

0: 读取mrp中文件的内容，并通过*filebuf和*filelen

返回该内容；当*filebuf!=NULL时，返回的内存

需要调用者释放；

1: 仅仅查找mrp中是否存在该文件，并不读取

文件内容

2: 当mrp文件位于ROM或RAM中时，读取欲读取文

件的原始内容，即使文件进行了压缩也

不进行解压，返回的内存不需要释放；

当mrp文件位于文件系统中时，等同于

lookfor==0

3: 以强检查的方式读取mrp中文件的内容，由于

lookfor==0的方式读取文件时，文件是否压缩

的判断是自适应的，所以不能完全保证文件

的正确性；lookfor==3时会强制约定文件进行了

压缩，并进行强检查。当*filebuf!=NULL时，返回

的内存需要调用者释放；

返回值

MR_SUCCESS 成功，当lookfor==1时表示文件存在

MR_FAILED 失败

头文件

Mrc_network.h


删除文件。

Syntax

int32 mrc_remove(
const char* filename
);

Parameters

filename
[IN]filename 文件名称

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


文件重命名。

Syntax

int32 mrc_rename(
const char* oldname,
const char* newname
);

Parameters

oldname
[IN]旧文件名称
newname
[IN]新文件名称

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


删除目录以及目录下面的文件和子目录。

Syntax

int32 mrc_rmDir(
const char* name,
);

Parameters

name
[IN]目录名

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


设置文件指针。

Syntax

int32 mrc_seek(
int32 f,
int32 pos,
int method
);

Parameters

f
[IN]文件名称
pos
[IN]文件指针位置
method
[IN]查找方法MR_SEEK_SET; MR_SEEK_CUR; MR_SEEK_END见定义

Return Value

非NULL 指向读取到的内容的指针，该内存需要调用者释放
NULL 失败

Requirements

Header:mrc_base.h


得到当前文件读写指针的位置。

Syntax

int32 mrc_tell(
int32 aFileHandle
);

Parameters

aFileHandle
[IN]文件句柄，（此处需要添加FileOpen类似的句柄创建链接）

Return Value

操作结果，当前文件读写指针。返回值小于0,表示操作有误

Remarks

1、此函数目前只能在模拟器上使用；在手机上使用将返回MR_FAILED(-1)；
2、目前仅提供32bit版本，当读取文件长度超过2GB将发生溢出。

Requirements

Header:mrc_exb.h


写文件。

Syntax

int32 mrc_write(
int32 f,
void *p,
uint32 l
);

Parameters

f
[IN]文件句柄,由mrc_open创建
p
[IN]待写入数据存放地址
l
[IN]待写入数据长度

Return Value

>0 确切写入的字节数
MR_FAILED 失败

Requirements

Header:mrc_base.h


框架函数

 Mythroad平台应用的入口函数：
mrc_init应用初始化函数；
mrc_pause应用暂停函数,该函数在应用被暂停时（有电话等事件暂停应用）被mythroad平台调用；
mrc_resume该函数在应用恢复运行时被mythroad平台调用；
mrc_exitapp该函数在应用退出时被mythroad平台调用；
mrc_event应用事件函数；


应用事件函数该函数在应用运行期间，每当mythroad平台收到事件时被调用

Syntax

extern int32 mrc_event(
int32 code,
int32 param0,
int32 param1
);

Parameters

code
[IN] code的可能取值如下:
enum {
MR_KEY_PRESS, //按键按下事件
MR_KEY_RELEASE, //按键释放事件
MR_MOUSE_DOWN, //触摸屏（鼠标）按下事件
MR_MOUSE_UP, //触摸屏（鼠标）抬起/释放事件
MR_MENU_SELECT, //菜单选中事件
MR_MENU_RETURN, //菜单返回事件
MR_DIALOG_EVENT, // 对话框/编辑框/文本框事件
MR_EVENT01, //VM保留，请不要使用
MR_EXIT_EVENT, //应用退出事件
MR_EVENT02, //VM保留，请不要使用
MR_LOCALUI_EVENT //本地化接口事件
};
code：
移植层code取值范围为：0～999（已经使用的除外），其余保留给VM和应用。(0～999： 移植层使用（VM已经使用的除外）；1000～1999：VM使用；10000~99999:应用使用； 其余均保留；）2007-11-20添加规范。

param0
[IN]当code为MR_KEY_PRESS或MR_KEY_RELEASE时，param0的可能取值如下:
enum {
MR_KEY_0, //按键 0
MR_KEY_1, //按键 1
MR_KEY_2, //按键 2
MR_KEY_3, //按键 3
MR_KEY_4, //按键 4
MR_KEY_5, //按键 5
MR_KEY_6, //按键 6
MR_KEY_7, //按键 7
MR_KEY_8, //按键 8
MR_KEY_9, //按键 9
MR_KEY_STAR, //按键 *
MR_KEY_POUND, //按键 #
MR_KEY_UP, //按键 上
MR_KEY_DOWN, //按键 下
MR_KEY_LEFT, //按键 左
MR_KEY_RIGHT, //按键 右
MR_KEY_POWER, //按键 挂机键
MR_KEY_SOFTLEFT, //按键 左软键
MR_KEY_SOFTRIGHT, //按键 右软键
MR_KEY_SEND, //按键 接听键
MR_KEY_SELECT, //按键 确认/选择（若方向键中间有确认键，建议设为该键）
MR_KEY_VOLUME_UP, //按键 侧键上
MR_KEY_VOLUME_DOWN, //按键 侧键下
MR_KEY_NONE //按键 保留
};

当code为MR_MOUSE_DOWN或MR_MOUSE_UP时，param0为屏幕的x坐标；

当code为MR_MENU_SELECT时，param0为菜单index；

当code为MR_DIALOG_EVENT时，param0的可能取值如下:
enum {
MR_DIALOG_KEY_OK, //对话框/文本框等的"确定"键被点击(选择)
MR_DIALOG_KEY_CANCEL //对话框/文本框等的"取消"("返回")键被点击(选择)
};

当code为MR_LOCALUI_EVENT时，param0的可能取值如下:
enum {
MR_LOCALUI_KEY_OK, //本地控件的"确定"键被点击(选择)
MR_LOCALUI_KEY_CANCEL//本地控件的"取消"("返回")键被点击(选择)
};
param1
[IN]当code为MR_MOUSE_DOWN或MR_MOUSE_UP时，param1为屏幕的y坐标；

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


退出应用，应用调用该函数通知mythroad，应用将要退 出。

Syntax

void mrc_exit(void);

Parameters

void

Return Value

void

Requirements

Header:mrc_base.h


该函数在应用退出时被mythroad平台调用。

Syntax

extern int32 mrc_exitApp(void);

Parameters

void

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Requirements

Header:mrc_base.h


应用初始化函数该函数在应用初始化期间被mythroad平台调用，可以在这个函数中进行全局变量的初始化等工作。

Syntax

extern int32 mrc_init(void);

Parameters

void

Return Value

MR_SUCCESS 应用初始化成功
MR_FAILED 应用初始化失败

Requirements

Header:mrc_base.h


应用暂停函数该函数在应用被暂停时（有电话等事件暂停应用）,被mythroad平台调用。

Syntax

extern int32 mrc_pause(void);

Parameters

void

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Remarks

注:在MTK的一些移植版本中，suspend (pause)和 resume 中不能 创建本地UI窗口。

Requirements

Header:mrc_base.h


该函数在应用恢复运行时被mythroad平台调用。

Syntax

extern int32 mrc_resume(void);

Parameters

void

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Remarks

注:在MTK的一些移植版本中，suspend (pause)和 resume 中不能创建本地UI窗口。

Requirements

Header:mrc_base.h


Mythroad 入口API示例

代码取自“泡泡龙”游戏入口部分

1、mrc_init
int32 mrc_init(void){
VariablesInit();//变量初始化
mrc_initChargeOverSea();//付费模块初始化
chargeLanguageInit();//付费字符串资源装载
Mggq_a_Enter_Game();//进入游戏
}//进入游戏

2、mrc_pause
int32 mrc_pause(void)
{
Mggq_a_Suspend_Game();
return MR_SUCCESS;
}

3、mrc_resume
int32 mrc_resume(void)
{
Mggq_a_Resume_Game();
return MR_SUCCESS;
}

4、mrc_exitApp
int32 mrc_exitApp(void)
{
Mggq_a_ReleaseAllResource();
return MR_SUCCESS;
}

5、mrc_appEventp
int32 mrc_appEvent(int32 code, int32 param0, int32 param1)
{
switch(code)
{
case MR_MOUSE_DOWN:
Mggq_a_PointerPressed(param0, param1);
break;
case MR_MOUSE_UP:
Mggq_a_PointerReleased(param0, param1);
break;
case MR_KEY_PRESS:
Mggq_a_Keypressed(param0);
break;
case MR_KEY_RELEASE:
Mggq_a_KeyRelease(param0);
break;
default:
break;
}
}


MyThroad 窗体分类

 Mythroad平台下常用的几种窗体形式如下：

菜单

使用菜单时，首先调用mrc_menuCreate创建一菜单容器，然后调用mrc_menuSetItem来设置每一个菜单项，并通过 mrc_menuShow mrc_menuRefresh来完成显示处理，退出菜单时由mrc_menuRelease 完成资源的释放；

窗体

创建自定义窗体时，需注册两个窗口函数，一个是键盘事件回调函数PtrKeyEvent，另一个是窗体事件回调函数PtrKeyEvent。 常用的调用次序是：mrc_winInit mrc_winNew mrc_winClose

对话框

对话框常做内容提示，通过按键反馈与用户进行交互，产生的按键消息为MR_DIALOG_EVENT，右软键键值为：MR_DIALOG_KEY_CANCEL，左软键键值为：MR_DIALOG_KEY_OK。 mrc_dialogCreate创建指定内容的对话框，由mrc_dialogRefresh 刷新提示内容，最后退出时由mrc_dialogRelease完成资源释放。

文本框

文本框用来显示只读的文字信息。文本框和对话框并没有本质的区别，仅仅是显示方式上的不同，在使用上它们的主要区别是：对话框的内容一般较短，文本框的 内容一般较长，对话框一般实现为弹出式的窗口，文本框一般实现为全屏式的窗口。也可能在手机上对话框和文本框使用了相同的方式实现。
mrc_textCreate创建指定内容的文本框，由mrc_textRefresh 刷新提示内容，最后退出时由mrc_textRelease完成资源释放。

编辑框

编辑框用来显示并提供用户编辑文字信息，为应用提供用户输入接口，"text"是编辑框显示的初始内容。 它产生的按键消息为MR_DIALOG_EVENT，右软键键值为：MR_DIALOG_KEY_CANCEL，左软键键值为：MR_DIALOG_KEY_OK。
mrc_editCreate创建编辑框， 由mrc_editGetText获取用户输入， 最后退出时由mrc_editRelease完成资源释放。


Dialog对话框/文本框按键事件类型

Syntax

enum {
MR_DIALOG_KEY_OK,
MR_DIALOG_KEY_CANCEL
};

Members

MR_DIALOG_KEY_OK 对话框/文本框等的"确定"键被点击(选择);
MR_DIALOG_KEY_CANCEL 对话框/文本框等的"取消"("返回")键被点击(选择);

Requirements

Header:mrc_base.h


Dialog对话框按键类型

Syntax

enum {
MR_DIALOG_OK,
MR_DIALOG_OK_CANCEL,
MR_DIALOG_CANCEL
};

Members

MR_DIALOG_OK 对话框有"确定"键;
MR_DIALOG_CANCEL 对话框有"确定" "取消"键;
MR_DIALOG_OK_CANCEL 对话框有"返回"键

Requirements

Header:mrc_base.h


创建一个对话框，并返回对话框句柄。当对话框显示时，如果用户按了对话框上的某个键，系统将构造Mythroad应用消息，通过mrc_event函数传送给Mythroad应 用，消息类型为MR_DIALOG_EVENT，参数为该按键的ID。"确定"键ID为：MR_DIALOG_KEY_OK；"取消"键ID为：MR_DIALOG_KEY_CANCEL。

Syntax

int32 mrc_dialogCreate(
const char * title,
const char * text,
int32 type
);

Parameters

title
[IN]对话框的标题，unicode编码，网络字节序
text
[IN]对话框内容，unicode编码，网络字节序
type
[IN]对话框类型：MR_DIALOG_OK MR_DIALOG_OK_CANCEL MR_DIALOG_CANCEL

Return Value

正整数 对话框句柄
MR_FAILED 失败

Requirements

Header:mrc_base.h


刷新对话框的显示。

Syntax

int32 mrc_dialogRefresh(
int32 dialog,
const char * title,
const char * text,
int32 type
);

Parameters

dialog
[IN]对话框的句柄
title
[IN]对话框的标题，unicode编码，网络字节序
text
[IN]对话框内容，unicode编码，网络字节序
type
[IN]若type为-1，表示type不变,见定义MR_DIALOG_OK MR_DIALOG_OK_CANCEL MR_DIALOG_CANCEL

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


释放对话框。

Syntax

int32 mrc_dialogRelease(
int32 dialog
);

Parameters

dialog
[IN]对话框的句柄，由mrc_dialogCreate创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


虚拟新建一个基本窗体

Syntax

int32 mrc_platBaseWinNew(
int32 data,
PtrWinEvent winEvent,
PtrKeyEvent keyEvent
);

Parameters

data
窗体数据
winEvent
窗体事件处理函数
keyEvent
按键事件处理函数

Return Value

其他 窗体句柄
MR_FAILED 失败

Requirements

Header:mrc_text.h


新建一个对话框

Syntax

int32 mrc_platDialogNew(
char* title,
char* texttext,
int32 type,
int32 textdata,
PtrHilight hOk,
PtrHilight hCancel
);

Parameters

title
对话框标题
texttext
对话框内容
type
对话框类型 MR_DIALOG_OK：对话框有"确定"键; MR_DIALOG_OK_CANCEL：对话框有"确定"和"取消"键; MR_DIALOG_CANCEL：对话框有 "取消/返回"键。
textdata
窗体数据
hOk
用户选择"确定"时的回调
hCancel
用户选择"取消/返回"时的回调

Return Value

其他 窗体句柄
MR_FAILED 失败

Requirements

Header:mrc_text.h


刷新对话框

Syntax

int32 mrc_platDialogRefresh(
int32 text,
char * title,
char * texttext,
int32 type
);

Parameters

text
对话框句柄
title
对话框的标题
texttext
对话框的内容
type
对话框类型 MR_DIALOG_OK：对话框有"确定"键；MR_DIALOG_OK_CANCEL：对话框有"确定"和"取消"键；MR_DIALOG_CANCEL：对话框有 "取消/返回"键。

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_text.h


新建一个菜单。

Syntax

int32 mrc_platMenuNew(
char* title,
int32 num
);

Parameters

title
菜单标题
num
菜单项的数目

Return Value

其他 窗体句柄
MR_FAILED 失败

Requirements

Header:mrc_menu.h


刷新显示菜单。

Syntax

int32 mrc_platMenuRefresh(
int32 menu
);

Parameters

menu
[IN]菜单的句柄，由mrc_platMenuNew创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_menu.h


在菜单里设置一个菜单项，参数index是该菜单项的序号。

Syntax

int32 mrc_platMenuSetItem(
int32 menu,
const char *text,
int32 index,
PtrHilight cb,
int32 data
);

Parameters

menu
菜单句柄
text
菜单项的名称
index
菜单项的index号,index取值范围为[0，num](num是用mrc_platMenuNew创建菜单时指定的菜单条数目)。
当等于num时，是按“返回”键的回调函数。SDK在处理用户点击"返回"键时，默认不作任何操作，直接关闭窗口；
当用户自定义了回调函数时，需要用户在回调函数中负责关闭窗口。
cb
菜单项的回调函数PtrHilight
data
菜单项数据

Return Value

其他 窗体句柄
MR_FAILED 失败

Requirements

Header:mrc_menu.h


显示菜单。

Syntax

int32 mrc_platMenuShow(
int32 menu
);

Parameters

menu
［IN］菜单的句柄，由mrc_platMenuNew创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_menu.h


新建一个文本框

Syntax

int32 mrc_platTextNew(
char* title,
char* texttext,
int32 type,
int32 textdata,
PtrHilight hOk,
PtrHilight hCancel
);

Parameters

title
文本框的标题
texttext
文本框的内容
type
文本框类型 MR_DIALOG_OK：文本框有"确定"键; MR_DIALOG_OK_CANCEL：文本框有"确定"和"取消"键; MR_DIALOG_CANCEL：文本框有 "取消/返回"键。
textdata
窗体数据
hOk
用户选择"确定"时的回调
hCancel
用户选择"取消/返回"时的回调

Return Value

其他 窗体句柄
MR_FAILED 失败

Remarks

回调函数的介绍

Requirements

Header:mrc_text.h


刷新文本框

Syntax

int32 mrc_platTextRefresh(
int32 text,
char * title,
char * texttext
);

Parameters

text
文本框的句柄
title
文本框的标题
texttext
文本框的内容

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_text.h


新建一个可扩展窗体

Syntax

int32 mrc_platWinNew(
int32 data,
PtrWinEvent winEvent,
PtrKeyEvent keyEvent,
);

Parameters

data
窗体数据
winEvent
窗体事件处理函数
keyEvent
按键事件处理函数

Return Value

其他 窗体句柄
MR_FAILED 失败

Requirements

Header:mrc_text.h


创建一个可扩展窗体，并返回可扩展窗体句柄。

Syntax

int32 mrc_winCreate(void);

Parameters

void

Return Value

正整数 可扩展窗体句柄
MR_FAILED 失败

Remarks

可扩展窗体创建之后，用户的按键和触摸屏事件会被构造成Mythroad应用消息，通过mrc_event函数传送
给Mythroad应用，按键事件的消息类型为MR_KEY_PRESS、MR_KEY_RELEASE，触摸屏事件的消息类型为
MR_MOUSE_DOWN、MR_MOUSE_UP。因为在对话框、菜单等窗体状态下，应用仅能接收到菜单、对话框等事件，
当需要创建一个由应用自行绘制并处理按键事件的窗体时，就需要创建可扩展窗体。

Requirements

Header:mrc_base.h


释放可扩展窗体。

Syntax

int32 mrc_winRelease(int32 win);

Parameters

win
[IN] 窗体句柄，由mrc_winCreate创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


T_PLAT_TEXT的功能介绍

Syntax

typedef struct
{
int32 handle;
int32 data;
PtrHilight hOk;
PtrHilight hCancel;
}T_PLAT_TEXT;

Members

handle
handle 的句柄介绍
data
data的句柄介绍
hOk
hOk的介绍
hCancel
hCancel的介绍

Requirements

Header:mrc_text.h


T_PLAT_WIN的功能介绍

Syntax

typedef struct
{
int32 handle;
int32 data;
int32 type;
PtrWinEvent winEvent;
PtrKeyEvent keyEvent;
}T_PLAT_TEXT;

Members

handle
handle 的句柄介绍
data
data的句柄介绍
type
type的介绍
winEvent
winEvent的介绍
keyEvent
keyEvent的介绍

Requirements

Header:mrc_text.h


创建一个文本框，并返回文本框句柄。

Syntax

int32 mrc_textCreate(
const char * title,
const char * text,
int32 type
);

Parameters

title
[IN]文本框的标题，unicode编码，网络字节序
text
[IN]文本框内容，unicode编码，网络字节序
type
[IN]文本框按键类型,见定义MR_DIALOG_OK MR_DIALOG_OK_CANCEL MR_DIALOG_CANCEL

Return Value

正整数 文本框句柄
MR_FAILED 失败

Remarks

文本框用来显示只读的文字信息。文本框和对话框并没有本质的区别，仅仅是显示方式上的不同，在使用上它们的主要区别是：对话框的内容一般较短，文本框的 内容一般较长，对话框一般实现为弹出式的窗口，文本框一般实现为全屏式的窗口。也可能在手机上对话框和文本框使用了相同的方式实现。 文本框和对话框的消息参数是一样的。当文本框显示时，如果用户选择了文本框上的某个键，系统将构造Mythroad应用消息，通过mrc_event函数传送给Mythroad 平台，消息类型为MR_DIALOG_EVENT，参数为该按键的ID。"确定"键ID为：MR_DIALOG_KEY_OK；"取消"键ID为：MR_DIALOG_KEY_CANCEL。

Requirements

Header:mrc_base.h


刷新文本框显示。

Syntax

int32 mrc_textRefresh(
int32 handle,
const char * title,
const char * text
);

Parameters

handle
[IN]文本框句柄，由mrc_textCreate创建
title
[IN]文本框的标题，unicode编码，网络字节序
text
[IN]文本框内容，unicode编码，网络字节序

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


释放文本框。

Syntax

int32 mrc_textRelease(
int32 text
);

Parameters

text
[IN]文本框句柄，由mrc_textCreate创建

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


事件枚举

Syntax

enum {
MR_KEY_PRESS,
MR_KEY_RELEASE,
MR_MOUSE_DOWN,
MR_MOUSE_UP,
MR_MENU_SELECT,
MR_MENU_RETURN,
MR_DIALOG_EVENT,
MR_EVENT01,
MR_EXIT_EVENT,
MR_EVENT02,
MR_LOCALUI_EVENT
};

Members

MR_KEY_PRESS 按键按下事件
MR_KEY_RELEASE 按键释放事件
MR_MOUSE_DOWN 触摸屏（鼠标）按下事件
MR_MOUSE_UP 触摸屏（鼠标）抬起/释放事件
MR_MENU_SELECT 菜单选中事件
MR_MENU_RETURN 菜单返回事件
MR_DIALOG_EVENT 对话框/编辑框/文本框事件
MR_EVENT01 VM保留，请不要使用
MR_EVENT02 应用退出事件
MR_EXIT_EVENT VM保留，请不要使用
MR_LOCALUI_EVENT 本地化接口事件

Requirements

Header:mrc_base.h


虚拟键值定义

Syntax

enum {
MR_KEY_0, //按键 0
MR_KEY_1, //按键 1
MR_KEY_2, //按键 2
MR_KEY_3, //按键 3
MR_KEY_4, //按键 4
MR_KEY_5, //按键 5
MR_KEY_6, //按键 6
MR_KEY_7, //按键 7
MR_KEY_8, //按键 8
MR_KEY_9, //按键 9
MR_KEY_STAR, //按键 *
MR_KEY_POUND, //按键 #
MR_KEY_UP, //按键 上
MR_KEY_DOWN, //按键 下
MR_KEY_LEFT, //按键 左
MR_KEY_RIGHT, //按键 右
MR_KEY_POWER, //按键 挂机键
MR_KEY_SOFTLEFT, //按键 左软键
MR_KEY_SOFTRIGHT, //按键 右软键
MR_KEY_SEND, //按键 接听键
MR_KEY_SELECT, //按键 确认/选择（若方向键中间有确认键，建议设为该键）
MR_KEY_VOLUME_UP, //按键 侧键上
MR_KEY_VOLUME_DOWN, //按键 侧键下
MR_KEY_NONE //按键 保留
};

Requirements

Header:mrc_base.h


Dialog本地控件按键事件类型

Syntax

enum {
MR_LOCALUI_KEY_OK,
MR_LOCALUI_KEY_CANCEL
};

Members

MR_LOCALUI_KEY_OK 本地控件的"确定"键被点击(选择);
MR_LOCALUI_KEY_CANCEL 本地控件的"取消"("返回")键被点击(选择);

Requirements

Header:mrc_base.h


取得焦点窗体(活跃窗体)的窗体id

Syntax

int32 mrc_getActiveWinId(void);

Parameters

void

Return Value

>=0 窗体id
MR_FAILED 失败

Requirements

Header:mrc_win.h


获取指定窗体id的窗体数据

Syntax

int32 mrc_getWinDataById(
int32 id,
int32* data
);

Parameters

id
[IN]窗体ID，由mrc_winNew创建，如果指定窗体为焦点窗体，则可通过mrc_getActiveWinId获取窗体ID
data
[OUT]窗体数据

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_win.h


检查窗体是否已经创建

Syntax

int32 mrc_isTheWinCreated(
int32 winId
);

Parameters

winId
窗体ID

Return Value

TRUE 窗体已经创建
FALSE 窗体尚未创建

Remarks

winId由mrc_winNew创建

Requirements

Header:mrc_win.h


关闭最上层的窗体

Syntax

int32 mrc_winClose(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

内容说明

Requirements

Header:mrc_win.h


通过窗体id关闭窗体

Syntax

int32 mrc_winCloseById(
int32 id
);

Parameters

id
[IN]窗体ID，由mrc_winNew创建
，如果指定窗体为焦点窗体，则可通过mrc_getActiveWinId获取窗体ID

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_win.h


关闭最上层的窗体(焦点窗体)，不刷新其父窗体(即下一层窗体)

Syntax

int32 mrc_winCloseNotShow(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

内容说明

Requirements

Header:mrc_win.h


取得当前焦点窗体(活跃窗体)的窗体数据

Syntax

int32 mrc_winGetActiveWinData(
int32* data
);

Parameters

data
[OUT]窗体数据

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_win.h


窗体架构初始化

Syntax

void mrc_winInit(void);

Parameters

void

Return Value

void

Remarks

使用原因说明

Requirements

Header:mrc_win.h


新建窗体

Syntax

int32 mrc_winNew(
int32 data,
PtrWinEvent winEvent,
PtrKeyEvent keyEvent
);

Parameters

data
窗体数据
winEvent
窗体事件回调函数
keyEvent
按键回调函数

Return Value

TRUE 窗体已经创建
FALSE 窗体尚未创建

Remarks

winEvent见PtrWinEvent定义
keyEvent见PtrKeyEvent定义

Requirements

Header:mrc_win.h


函数为本窗体框架的恢复(被暂停的应用的)驱动函数，由外部在收到恢复事件时调用，一般在mrc_resume中调用该函数以 驱动窗体框架

Syntax

void mrc_winResume(void);

Parameters

void

Return Value

void

Remarks

内容说明

Requirements

Header:mrc_win.h


按键事件回调

Syntax

typedef void (*PtrKeyEvent)(
int32 data,
int32 code,
int32 param0,
int32 param1
);

Parameters

data
窗体数据
code
按键值
param0
param0说明
param1
param1说明

Return Value

void

Remarks

code为按键值，详细定义见虚拟键值E_KEY_CODE枚举值

Requirements

Header:mrc_win.h


窗体事件回调

Syntax

typedef void (*PtrWinEvent)(
int32 data,
int32 eventId
);

Parameters

data
窗体数据
eventId
窗体事件

Return Value

void

Remarks

eventId 为T_WIN_EVNET枚举值

Requirements

Header:mrc_win.h


T_WIN_EVENT的功能介绍

Syntax

typedef enum
{
WIN_EVENT_SHOW,
WIN_EVENT_PAUSE,
WIN_EVENT_REFRESH,
WIN_EVENT_UPDATE,
WIN_EVENT_EXIT
}T_WIN_EVENT;

Members

WIN_EVENT_SHOW
窗口创建好之后就会收到这个事件，可以在这个事件中画窗口的界面
WIN_EVENT_PAUSE
当创建一个新的窗口后，父窗口会收到这个事件
WIN_EVENT_REFRESH
当子窗口销毁掉后，父窗口会收到这个事件
WIN_EVENT_UPDATE
外部可以修改窗体中要显示的功能，然后向该窗体发送这个事件使窗体将更新的内容画到屏幕上
WIN_EVENT_EXIT
调用winDelete后，系统会向将要销毁的窗口发送这个事件，已处理窗口特殊的退出处理

Requirements

Header:mrc_win.h


文本编辑框文本类型

Syntax

enum {
MR_EDIT_ANY,
MR_EDIT_NUMERIC,
MR_EDIT_PASSWORD
};

Members

MR_EDIT_ANYE 任何字符
MR_EDIT_NUMERIC 数字
MR_EDIT_PASSWORD 密码，用"*"显示

Requirements

Header:mrc_base.h


创建一个编辑框，并返回编辑框句柄。

Syntax

int32 mrc_editCreate(
const char * title,
const char * text,
int32 type,
int32 max_size
);

Parameters

title
[IN]文本框的标题，unicode编码，网络字节序
text
[IN]文本框内容，unicode编码，网络字节序
type
[IN]见MR_EDIT_ANY;MR_EDIT_NUMERIC;MR_EDIT_PASSWORD定义
max_size
[IN]最多可以输入的字符（unicode）个数，这里每一个中文、字母、数字、符号都算一个字符

Return Value

正整数 编辑框句柄
MR_FAILED 失败

Remarks

编辑框用来显示并提供用户编辑文字信息。text是编辑框显示的初始内容。当编辑框显示时，
如果用户选择了编辑框上的某个键，系统将构造Mythroad应用消息，通过mrc_event函数传送给
Mythroad应用，消息类型为MR_DIALOG_EVENT，参数为该按键的ID;"确定"键ID为：MR_DIALOG_KEY_OK；
"取消"键ID为：MR_DIALOG_KEY_CANCEL。

Requirements

Header:mrc_base.h


获取编辑框内容，unicode编码。调用者若需在编辑框释放后仍然使用编辑框的内容，需要自行保存该内容。该函数需要在编辑框释放之前调用。

Syntax

const char* mrc_editGetText(
int32 edit
);

Parameters

edit
[IN]编辑框句柄，由mrc_editCreate定义

Return Value

非NULL 编辑框的内容指针，unicode编码
NULL 失败

Requirements

Header:mrc_base.h


释放编辑框。

Syntax

int32 mrc_editRelease(
int32 edit
);

Parameters

edit
[IN]编辑框句柄，由mrc_editCreate定义

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


创建一个菜单，并返回菜单句柄，title是菜单的标题。

Syntax

int32 mrc_menuCreate(
const char* title,
int16 num
);

Parameters

title
[IN]菜单的标题，unicode编码，网络字节序。
num
[IN]菜单项的数目

Return Value

正整数 菜单句柄
MR_FAILED 失败

Requirements

Header:mrc_base.h


刷新菜单显示。

Syntax

int32 mrc_menuRefresh(
int32 menu
);

Parameters

menu
[IN]菜单的句柄，由mrc_menuCreate创建
。

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


释放菜单。

Syntax

int32 mrc_menuRelease(
int32 menu
);

Parameters

menu
[IN]菜单的句柄，由mrc_menuCreate创建
。

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


在菜单里设置一个菜单项，参数index是该菜单项的序号，当用户选中某个菜单项时，把index号通过mrc_event函数发送到应用中。

Syntax

int32 mrc_menuSetItem(
int32 menu,
const char *text,
int32 index,
);

Parameters

menu
[IN]菜单的句柄，由mrc_menuCreate创建
。 text
[IN]菜单项的名字，使用unicode编码，网络字节序
index
[IN]菜单项的index号

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


显示菜单。当菜单显示时，如果用户选择了菜单上的某一项，系统将构造Mythroad应用消息，通过mrc_event函数传送给Mythroad应用，消息类型为MR_MENU_SELECT，参数为该菜单项的index。如果用户选择 了退出该菜单，系统将构造Mythroad应用消息，通过mrc_event函数传送给Mythroad应用，消息类型为MR_MENU_RETURN。

Syntax

int32 mrc_menuShow(
int32 menu
);

Parameters

menu
[IN]菜单的句柄，由mrc_menuCreate创建
。

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


菜单项被选择时的回调函数。

Syntax

typedef void (*PtrHilight)(int32 data);

Parameters

data
[IN]菜单项数据

Requirements

Header:mrc_menu.h


T_MENU菜单结构体。

Syntax

typedef struct{
int32 handle;
int32 itemNum;
T_MENU_ITEM EscMenu[1];
T_MENU_ITEM subMenu[1];
}T_MENU;

Members

handle
菜单句柄，由mrc_platMenuNew创建
itemNum
菜单项的个数
EscMenu
T_MENU_ITEM结构体变量，用户不作任何选择，直接选择“返回”键时的回调函数的函数指针和参数指针。
subMenu
T_MENU_ITEM其他菜单项的回调函数指针和参数指针菜单项的个数

Requirements

Header:mrc_menu.h


T_MENU_ITEM菜单项

Syntax

typedef struct{
PtrHilight hCb;
int32 data;
}T_MENU_ITEM;

Members

hCb
PtrHilight菜单处理回调函数
data
data 菜单项

Requirements

Header:mrc_menu.h


窗体处理示例

窗体示例以游戏“退出”时的提示对话框处理为例

1、创建容器窗体
mrc_winInit();
mrc_winNew(0,ExitGameWinEvent,ExitGameKeyEvent);
2、ExitGameWinEvent的窗体事件WIN_EVENT_SHOW处理
case WIN_EVENT_SHOW:
{ g_exit_game_dialog_win_id = mrc_dialogCreate(SGL_LoadString(TXT_CHOOSE),SGL_LoadString(TXT_EXIT_GAME), MR_DIALOG_OK_CANCEL);
if( MR_FAILED == g_exit_game_dialog_win_id )
{
mrc_exit();
return;
}
//调用本地UI,虚拟机被暂停
setVMStat(FALSE);
break;
}
3、ExitGameKeyEvent的按键消息处理
if ( type == MR_DIALOG_EVENT)
{
//点击返回，返回游戏主菜单
if( g_exit_game_dialog_win_id != -1 )
{
mrc_dialogRelease(g_exit_game_dialog_win_id);
g_exit_game_dialog_win_id = -1;
//释放本地UI,虚拟机恢复
setVMStat(TRUE);
}
｝
4、关闭容器窗体ExitGameWinEvent的窗体事件WIN_EVENT_EXIT处理
case WIN_EVENT_EXIT:
if( g_exit_game_dialog_win_id != -1 )
{ mrc_dialogRelease(g_exit_game_dialog_win_id);
g_exit_game_dialog_win_id = -1;
//释放本地UI,虚拟机恢复
setVMStat(TRUE);
}


abs求给定数值的绝对值

abs求给定数值的绝对值,原型定义如下：

#define abs(VAL) (((VAL)>0)?(VAL):(-(VAL)))


typedef int BOOL;


typedef unsigned char BYTE;


#define DIV(x, y)

#define DIV(x, y) ((x) / (y))


typedef unsigned long DWORD;


MRP文件信息操作枚举值

枚举定义

typedef enum {

MRP_ORICODING,

MRP_FILENAME,

MRP_APPNAME,

MRP_APPID,

MRP_APPVER,

MRP_VENDER,

MRP_DESCRIPTION,

MRP_VERSION,

MRP_CHANNEL,

MRP_CTRCHN,

MRP_NONE

}E_MRP_INFOID;

成员说明

MRP_ORICODING 直接读取编码。只有斯凯的特权用户方可执行该类型操作；

MRP_FILENAME MRP文件名称，最大11个有效字符，不包括'\0'；

MRP_APPNAME MRP应用名称，用户可见的应用名，最大23个有效字符，不包括'\0'，例如"雷电1944"；

MRP_APPID 每个应用对应一个唯一的ID，uint32类型；

MRP_APPVER 应用版本，uint32类型；

MRP_VENDER 开发商信息，最大39个有效字符，不包括'\0'；

MRP_DESCRIPTION 应用描述信息 ，最大63个有效字符；

MRP_VERSION 计费通道版本编号,uint16类型，两个字节；

MRP_CHANNEL 计费通道编号,两个字节，低地址的RecBuf[0]是移动，高地址的RecBuf[1]是联通；


获取手机的当前语言设置。

Syntax

int32 GetCurLanguageID(void);

Parameters

void

Return Value

MR_PLAT_VALUE_BASE = 1000
MR_PLAT_VALUE_BASE + 0 ：中文即1000
MR_PLAT_VALUE_BASE + 1 ：英文即1001
MR_FAILED ：获取失败
MR_IGNORE ：不支持该功能

Requirements

Header:mrc_exb.h


#define MAX(x, y) (((x) > (y))

#define MAX(x, y) (((x) > (y))?(x):(y))


将文件中的数据加入密钥计算MD5。

Syntax

int32 md5MakeFromFileHandle(
char *key,
int32 fhandle,
int32 offset ,
int32 len,
uint8* out
);

Parameters

key
[IN]密钥。若不加入密钥，置为NULL即可。若加入密钥，则将密钥和数据一起计算MD5;
fhandle
[IN]需要计算MD5的文件句柄(需加入文件句柄操作);
offset
[IN]从in+offset的地址偏移开始的len个字节的数据计算MD5;如果offset<0，返回失败。
len
[IN]需要计算的数据区总字节数，
(1)、若该值小于0，返回失败;
(2)、如果len=0，若key!=NULL，则将返回key的MD5，否则若len==0 && key==NULL，返回的MD5值依赖于MD5函数的具体实现;
(3)、如果(offset+len)>文件长度，则取到文件末尾为止，不触发错误。
out
[OUT]若函数返回MR_SUCCESS，则通过out返回16个字节的MD5校验值。这16个字节的内存由调用者申请、释放。

Return Value

MR_SUCCESS: MD5获取成功。
MR_FAILED : 获取失败，此时out中的值是不确定的，不可作为MD5值使用。

Requirements

Header:mrc_exb.h


将文件中的数据加入密钥计算MD5

函数定义

int32 md5MakeFromFileHandle(

char *key,

int32 fhandle,

int32 offset ,

int32 len,

uint8* out

);

参数说明

Key [IN] 密钥。若不加入密钥，置为NULL即可。若加入密钥，则将密钥和数据一起计算MD5。

Fhandle [IN] 需要计算MD5的文件句柄；

Offset [IN] 从文件头的offset字节的地址偏移开始的len个字节的数据计算MD5。如果offset<0，返回失败。

Len [IN] 需要计算的数据区总字节数。

(1)、若该值小于0，返回失败。

(u je 2)、如果len=0，若key!=NULL，则将返回key的MD5，否则若len==0 && key==NULL，返回的MD5值依赖于MD5函数的具体实现。

(3)、由于暂时不能通过文件句柄获取文件长度，所以将在连续9次读取失败或者连续9次读到0个字节时返回失败，即(len+offset)>filelen时通常将返回失败。

Out [OUT] 若函数返回MR_SUCCESS，则通过out返回16个字节的MD5校验值。这16个字节的内存由调用者申请、释放。

返回值

MR_SUCCESS:MD5获取成功。MR_FAILED :获取失败，此时out中的值是不确定的，不可作为MD5值使用。

头文件

Mrc_exb.h


将内存中的数据加入密钥后计算MD5。

Syntax

int32 md5MakeFromMem(
char *key,
uint8* in,
int32 offset,
int32 len,
uint8* out
);

Parameters

key
[IN]密钥。若不加入密钥，置为NULL即可。若加入密钥，则将密钥和数据一起计算MD5;
in
[IN]数据区指针;
offset
[IN]从in+offset的地址偏移开始的len个字节的数据计算MD5;如果offset<0，返回失败。
len
[IN]需要计算的数据区总字节数，若该值小于0，返回失败。如果len=0，若key!=NULL，则将返回key的MD5，
否则len==0 && key==NULL，返回的MD5值依赖于MD5函数的具体实现。
out
[OUT]若函数返回MR_SUCCESS，则通过out返回16个字节的MD5校验值,这16个字节的内存由调用者申请、释放。

Return Value

MR_SUCCESS: MD5获取成功。
MR_FAILED : 获取失败，此时out中的值是不确定的，不可作为MD5值使用。

Requirements

Header:mrc_exb.h


将16字节的MD5校验值转换为32字节的ASCII可见字符串。

Syntax

int32 md5ToString(
uint8* in,
uint8* out
);

Parameters

in
[IN]MD5校验值;
out
[OUT]若函数返回MR_SUCCESS，则通过out返回32个字节的MD5校验值;这32个字节的内存由调用者申请、释放。

Return Value

MR_SUCCESS MD5获取成功;
MR_FAILED 获取失败

Requirements

Header:mrc_exb.h


typedef unsigned char md5_byte_t; /* 8-bit byte */

头文件

Mrc_base.h


MD5状态信息结构体

结构体定义

typedef struct md5_state_s {

md5_word_t count[2]; /* message length in bits, lsw first */

md5_word_t abcd[4]; /* digest buffer */

md5_byte_t buf[64]; /* accumulate block */

} md5_state_t;

头文件

Mrc_base.h


typedef unsigned int md5_word_t; /* 32-bit word */

头文件

Mrc_base.h


#define MIN(x, y) (((x) < (y))

#define MIN(x, y) (((x) < (y))?(x):(y))


#define MOD(x, y)

#define MOD(x, y) ((x) % (y))

头文件

Mrc_network.h


APP应用信息结构体

结构体定义

typedef struct

{

int32 id;

int32 ver;

char* sidName;

}mrc_appInfoSt;

成员说明

Id 标识该APP，一般情况下为唯一

Ver APP版本

sidName APP对应sid文件的名称


把字符串转换成整型数

函数定义

int mrc_atoi(const char *nptr);

参数说明

nptr[IN] 数字字符串指针

返回值

atoi()会扫描参数nptr字符串，检测到第一个数字或正负符号时开始做类型转换，之后检测到非数字或结束符 \0 时停止转换，返回整型数。

头文件

Mrc_base_i.h


对指定号码发起呼叫

函数定义

void mrc_call(char *number);

参数说明

pNumber [IN] 目标号码

返回值

无

头文件

Mrc_base_i.h


使用指定的颜色清除屏幕。

Syntax

void mrc_clearScreen(
int32 r,
int32 g,
int32 b
);

Parameters

r
[IN]RGB R值
g
[IN]RGB G值
b
[IN]RGB B值

Return Value

void

Requirements

Header:mrc_base.h


连接指定地址WAP

函数定义

void mrc_connectWAP(char* wap);

参数说明

Wap [IN] wap地址

返回值

无

头文件

Mrc_base_i.h


函数将事件传入已经初始化的C代码程序中。

函数定义

int32 mrc_extEvent(int32 ext, int32 code, int32 param0, int32 param1);

参数说明

Ext [IN] C代码程序句柄

Param [IN]

Param [IN]

返回值

C代码程序mrc_event返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


函数释放一个已经加载的C代码程序。

函数定义

int32 mrc_extFree(int32 ext);

参数说明

Ext [IN] C代码程序句柄

返回值

MR_FAILED 操作失败

MR_SUCCESS 操作成功

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

注意:如果需要在子模块发往主模块的事件处理函数中调用该函数释放子模块，需要注意的是，当调用完mrc_extFree函数之后，实际上子模块所运行的代码空间在逻辑上已经被释放，注意不要在mrc_extFree函数之后再进行与内存申请有关的操作。

头文件

Mrc_base_i.h


函数对一个已经加载的C代码程序进行初始化。

函数定义

int32 mrc_extInit(int32 ext);

参数说明

Ext [IN] C代码程序句柄

返回值

MR_FAILED 操作失败

MR_SUCCESS 操作成功

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


函数mrc_extLoad加载一个ext文件所包含的C代码程序。

函数定义

int32 mrc_extLoad(uint8* buf, int32 len);

参数说明

Buf [IN] 指向ext文件内容的指针

Len [IN] ext文件长度

返回值

MR_FAILED 操作失败

其他 C代码程序句柄

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


函数将暂停操作传入已经初始化的C代码程序中。

函数定义

int32 mrc_extPause(int32 ext);

参数说明

Ext [IN] C代码程序句柄

返回值

C代码程序mrc_ extPause返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


C代码管理，该函数需要在主ext模块中实现，当在子ext模块中调用mrc_extSendAppEvent函数时，主ext模块中的该函数被调用。

函数定义

int32 mrc_extRecvAppEvent(

int32 app,

int32 code,

int32 param0,

int32 param1

);

参数说明

App [IN]

Code [IN]

Param0 [IN]

Param1 [IN]

返回值

返回值将被作为子模块mrc_extSendAppEvent函数的返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


C代码管理，该函数需要在主ext模块中实现，当在子ext模块中调用mrc_extSendAppEvent函数时，主ext模块中的该函数被调用。

函数定义

int32 mrc_extRecvAppEventEx(

int32 code,

int32 param0,

int32 param1

);

参数说明

Code [IN]

Param0 [IN]

Param1 [IN]

返回值

返回值将被作为子模块mrc_extSendAppEvent函数的返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


函数将恢复操作传入已经初始化的C代码程序中。

函数定义

int32 mrc_ extResume (int32 ext);

参数说明

Ext [IN] C代码程序句柄

返回值

C代码程序mrc_ extResume返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


在子ext模块中调用该函数，主ext(管理)模块中的mrc_extRecvAppEvent函数将被调用。

函数定义

int32 mrc_extSendAppEvent(int32 app, int32 code, int32 param0, int32 param1);

参数说明

App [IN]

Code [IN]

Param0 [IN]

Param1 [IN]

返回值

返回值为主ext模块mrc_extRecvAppEvent函数的返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


在子ext模块中调用该函数，主ext(管理)模块中的mrc_extRecvAppEvent函数将被调用。

函数定义

int32 mrc_extSendAppEventEx (int32 app, int32 code, int32 param0, int32 param1);

参数说明

App [IN]

Code [IN]

Param0 [IN]

Param1 [IN]

返回值

返回值为主ext模块mrc_extSendAppEventEx函数的返回值

备注

见函数系列mrc_extLoad、mrc_extFree、mrc_extInit、mrc_extEvent、mrc_extPause、mrc_extResume、mrc_extSendAppEvent、mrc_extSendAppEventEx、mrc_extMpsFpCall、mrc_extInitMainModule

头文件

Mrc_base_i.h


该函数用于调试使用，返回的是最后一次操作文件失败的错误信息。

Syntax

int32 mrc_ferrno(void);

Parameters

void

Return Value

最后一次操作文件失败的错误信息

Remarks

返回的错误信息具体含义与平台上使用的文件系统有关，该函数可能被实现为总是返回MR_SUCCESS。

Requirements

Header:mrc_base.h


释放已分配的内存块

函数定义

void *mrc_free(unsigned int num_bytes);

参数说明

Num_bytes[IN] 欲释放空间的指针

返回值

无

备注

无

头文件

Mrc_base_i.h


释放由原始内存申请方式申请的空间。

原型

void mrc_freeOrigin(void* add, int32 size);

参数说明

Add [in] 指针

Size [in] 长度

返回值

无

头文件

mrc_exb.h


获取APP应用相关信息

函数定义

mrc_appInfoSt * mrc_getAppInfo(void);

参数说明

无

返回值

非NULL说明返回成功，否则失败。见Mrc_appInfoSt定义

头文件

Mrc_base_i.h


获取系统日期时间。

Syntax

int32 mrc_getDatetime(mr_datetime* datetime);

Parameters

datetime
[OUT]日期时间，见mr_datetime定义

Return Value

单位毫秒的系统时间

Requirements

Header:mrc_base.h


/获取本ext模块全局变量使用的内存空间大小(字节)

函数定义

int32 mrc_getExtGlobalMem(void);

参数说明

无

返回值

成功为非NULL值，反之失败

头文件

Mrc_base_i.h


获取系统所剩余的内存数

Syntax

uint32 mrc_getMemoryRemain(void);

Parameters

void

Return Value

系统所剩余的内存数，单位字节

Requirements

Header:mrc_base.h


从当前MRP文件中读取头信息。

Syntax

int32 mrc_GetMrpInfo(
char *MrpName,
E_MRP_INFOID CMD,
uint8 *RecBuf,
int32 BufLen
);

Parameters

MrpName
[IN]MRP文件名称，含路径；
lCMD
[IN]操作命令码，值见枚举定义E_MRP_INFOID；
lRecBuf
[OUT]接收返回数据的缓冲区指针；
BufLen
[OUT]接收返回数据的缓冲区字节数

Return Value

当操作不支持、操作失败等情况时，函数返回值小于等于0；若操作成功，函数返回值为RecBuf中实际填写的字节数。

Remarks

void

Requirements

Header:mrc_exb.h


获取当前正在运行的mrp的文件名称,mythroad中支持的最大文件长度为127字节.

Syntax

char* mrc_getPackName(void);

Parameters

void

Return Value

当前正在运行的mrp的文件名称

Requirements

Header:mrc_base.h


获取当前正在运行的mrp的文件名称,mythroad中支持的最大文件长度为127字节，同mrc_getPackName

函数定义

char* mrc_getPackNameMr(void);

参数说明

无

返回值

当前正在运行的mrp的文件名称

头文件

Mrc_exb.h


获取固化应用、内存镜像应用的运行时加载地址。

Syntax

int32 mrc_getRegAppAddr(
char *MrpName
);

Parameters

MrpName
[IN]应用名称，固化应用都是"*"开头的，RAM应用都是"$"开头的；应用名称可以通过mrc_getPackName获取。

Return Value

NULL 获取失败；非NULL为应用内存地址。

Requirements

Header:mrc_exb.h


获取屏幕宽、高、象素深度等信息。

Syntax

int32 mrc_getScreenInfo(
mr_screeninfo * screeninfo
);

Parameters

screeninfo
[OUT] 屏幕信息，见mr_screeninfo

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Requirements

Header:mrc_base.h


获取系统信息

函数定义

int32 mrc_getSysInfo(mr_userinfo* info);

参数说明

info [OUT] 系统信息结构体，见mr_userinfo定义

返回值

MR_SUCCESS成功；MR_FAILED失败

头文件

Mrc_base_i.h


获取系统时间，单位毫秒。系统时间可以以Mythroad平台引擎启动之前的任意时刻为起始时间，返回从起始时间到目前经过的毫秒数。
例如这个函数可能返回的是系统启动后经过的毫秒数。

Syntax

int32 mrc_getUptime(void);

Parameters

void

Return Value

单位毫秒的系统时间

Requirements

Header:mrc_base.h


取得用户的ID。对每个手机用户，mythroad都会根据手机环境生成一个ID号，两个不同用户ID号相同的概率较小。

函数定义

int32 mrc_getUserID(uint8** id);

参数说明

Id [OUT] 一个指针，指向一片16字节长的内存空间，该空间保存了用户ID。

返回值

MR_SUCCESS 成功

MR_FAILED 失败，为防止在同一手机上生成的ID不同， mythroad都会对手机环境进行一定的检测，若检测出的手机环境不是非常确定时，将返回 失败。

头文件

Mrc_base_i.h


取得mythroad平台版本号

Syntax

int32 mrc_getVersion(void);

Parameters

void

Return Value

mythroad平台版本号

Requirements

Header:mrc_base.h


将一个无符号32bit整数从主机字节序(little-endian)转换为网络字节序(big-endian)。

函数定义

uint32 mrc_htonl(uint32 hostlong);

参数说明

Hostlong [IN]

返回值

头文件

Mrc_exb.h


打开、关闭LCD定时休眠功能。

Syntax

int32 mrc_LCDCanSleep(char CanSleep);

Parameters

CanSleep
[IN]char CanSleep=1 时，允许LCD定时休眠；har CanSleep=0时，不允许LCD定时休眠。

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_IGNORE 不支持该功能

Remarks

void

Requirements

Header:mrc_exb.h


分配长度为num_bytes字节的内存块

函数定义

void *mrc_malloc(unsigned int num_bytes);

参数说明

Num_bytes[IN] 欲分配空间的大小

返回值

如果分配成功则返回指向被分配内存的指针，否则返回空指针NULL。

备注

当内存不再使用时，应使用mrc_free()函数将内存块释放。

头文件

Mrc_base_i.h


Md5 Append

函数定义

void mrc_md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);

参数说明

Pms [IN]

Data [IN]

Nbytes [IN]

返回值

无

头文件

Mrc_base.h


Md5 Append

函数定义

void mrc_md5_finish(md5_state_t *pms, md5_byte_t digest[16]);

参数说明

Pms [IN]

digest [IN]

返回值

无

头文件

Mrc_base.h


Md5初始化

函数定义

void mrc_md5_init(md5_state_t *pms);

参数说明

Pms [IN]

返回值

无

头文件

Mrc_base.h


从buf所指内存区域的前count个字节查找字符ch

函数定义

void *mrc_memchr(void *buf, char ch, unsigned count);

参数说明

buf[IN] 目标1空间指针

ch[IN] 查找的字符

Count[IN]

返回值

当第一次遇到字符ch时停止查找。如果成功，返回指向字符ch的指针；否则返回NULL。

备注

无

头文件

Mrc_base_i.h


比较内存区域buf1和buf2的前count个字节

函数定义

int mrc_memcmp(void *buf1, void *buf2, unsigned int count);

参数说明

Dest[IN] 目标1空间指针

Src[IN] 目标2空间指针

Count[IN] 空间的大小

返回值

当buf1<buf2时，返回值<0
当buf1=buf2时，返回值=0
当buf1>buf2时，返回值>0

备注

无

头文件

Mrc_base_i.h


由src所指内存区域复制count个字节到dest所指内存区域

函数定义

void *mrc_memcpy(void *dest, void *src, unsigned int count);

参数说明

Dest[IN] 目标空间指针

Src[IN] 源空间指针

Count[IN] 拷贝空间的大小

返回值

指向dest的指针

备注

src和dest所指内存区域不能重叠，函数返回指向dest的指针。

头文件

Mrc_base_i.h


由src所指内存区域复制count个字节到dest所指内存区域

函数定义

void *mrc_memmove(void *dest, void *src, unsigned int count);

参数说明

Dest[IN] 目标空间指针

Src[IN] 源空间指针

Count[IN] 拷贝空间的大小

返回值

指向dest的指针

备注

src和dest所指内存区域可以重叠，但复制后src内容会被更改。函数返回指向dest的指针。

头文件

Mrc_base_i.h


将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值

函数定义

void *mrc_memset(void *s, char ch, unsigned n);

参数说明

s[IN] 目标1空间指针

ch[IN] 空间欲设置的值

n[IN]

返回值

无

备注

块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

头文件

Mrc_base_i.h


将一个无符号32bit整数从网络字节序(big-endian)转换为主机字节序(little-endian)。

函数定义

uint32 mrc_ntohl(uint32 netlong);

参数说明

netlong [IN]

返回值

头文件

Mrc_exb.h


该函数功能与printf函数相似，区别是本函数的输出信息将打印在手机的trace上

Syntax

void (*mrc_printf)(const char *format,...);

Parameters

void

Return Value

void

Remarks

该函数功能与printf函数相似，区别是本函数的输出信息将打印在手机的trace上。

Requirements

Header:mrc_base.h


生成一个随机数

生成一个随机数。在调用本函数之前，请调用mrc_sand以重置随机数种子。

原型

uint32 mrc_rand(void);

参数说明

无

返回值

随机数值

头文件

mrc_exb.h


读取mrp中一个文件的指定长度内容到指定空间。

Syntax

int32 mrc_readAllEx(char* filename, char* buf, int32 *len)

Parameters

char *filename 文件名
char *buf 读取的文件的保存空间
int *len 期望读取长度

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

读取文件filename的len长度的内容到buf指向的地址上，若 文件长度小于len，仅读取文件长度的内容，len被赋值 为实际读取的长度。

Requirements

Header:mrc_aux.h


刷新屏幕指定的区域。该函数的功能是将mythroad屏幕缓冲指定的区域刷新到屏幕上。

Syntax

void mrc_refreshScreen(
int16 x,
int16 y,
uint16 w,
uint16 h
);

Parameters

x
[IN]指定区域X坐标
y
[IN]指定区域Y坐标
w
[IN]指定区域宽度
h
[IN]指定区域高度

Return Value

void

Requirements

Header:mrc_base.h


重命名指定mrp文件

函数定义

int32 mrc_runMrp(

char* mrp_name,

char* file_name,

char* parameter

);

参数说明

mrp_name [IN] MRP文件名称

file_name [IN] 新名称

parameter [IN] 在1945以前，parameter参数无效

返回值

MR_SUCCESS 成功；MR_FAILED 失败

头文件

Mrc_base_i.h


设置随机数种子

重置随机数种子，和mrc_rand配合使用

原型

void mrc_sand(uint32 seed);

参数说明

seed [IN] 种子值

返回值

无

头文件

mrc_exb.h


发送短消息

函数定义

int32 mrc_sendSms(

char* pNumber,

char*pContent,

int32 flags

);

参数说明

pNumber [IN] 目标号码

pContent [IN] 短消息内容

flags [IN]

返回值

MR_SUCCESS成功；MR_FAILED失败

头文件

Mrc_base_i.h


将name设置为当前mrp,mythroad中支持的最大文件长度为127字节

Syntax

int32 mrc_setPackName(char * name);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


将name设置为当前mrp,mythroad中支持的最大文件长度为127字节，同mrc_setPackName

函数定义

int32 mrc_setPackNameMr(char * name);

参数说明

Name [IN] MRP新名称

返回值

MR_SUCCESS 成功
MR_FAILED 失败

头文件

Mrc_exb.h


VM休眠指定时间

函数定义

int32 mrc_sleep(uint32 ms);

参数说明

ms [IN] 休眠时间，以毫秒为单位

返回值

MR_SUCCESS成功；MR_FAILED失败

头文件

Mrc_base_i.h


将字串格式化

函数定义

void *mrc_sprintf(const char* format, ...);

参数说明

无

返回值

无

备注

无

头文件

Mrc_base_i.h


启动手机震动

Syntax

int32 mrc_startShake(int32 ms);

Parameters

ms
[IN]震动持续的时间，单位毫秒

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


将src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’

函数定义

char *mrc_strcat(char *dest,char *src);

参数说明

dest[OUT] 目标空间指针

src[IN] 源字符串指针

返回值

指向s1的指针

备注

Src和dest所指内存区域不可重叠且dest必须有足够的空间来容纳src的字符串

头文件

Mrc_base_i.h


查找字符串s中首次出现字符c的位置

函数定义

char *mrc_strchr(char *s,char c);

参数说明

S[IN] 查询的目标字符串

C[IN] 查询的字符

返回值

返回首次出现C的位置指针，如果不存在，则返回NULL。

头文件

Mrc_base_i.h


字符串比较

函数定义

int mrc_strcmp(char *str1, char *str2);

参数说明

Str1[IN] 目标空间指针

Str2[IN] 源字符串指针

返回值

当s1<s2时，返回值<0
当s1=s2时，返回值=0
当s1>s2时，返回值>0

头文件

Mrc_base_i.h


字符串比较

函数定义

int mrc_strcoll( const char *str1, const char *str2 );

参数说明

Str1[IN] 目标空间指针

Str2[IN] 源字符串指针

返回值

当s1<s2时，返回值<0
当s1=s2时，返回值=0
当s1>s2时，返回值>0

头文件

Mrc_base_i.h


把src所指由NULL结束的字符串复制到dest所指的数组中。

函数定义

char *mrc_strcpy(char *dest,char *src);

参数说明

dest[IN] 目标字符串指针

src[IN] 源字符串指针

返回值

返回指向dest的指针

备注

Src和dest所指内存区域不可以重叠且dest必须有足够的空音来容纳src的字符串

头文件

Mrc_base_i.h


计算字符串s的长度

函数定义

int mrc_strlen(char *s);

参数说明

s[IN] 目标空间指针

返回值

字符串的长度

备注

返回s的长度，不包括结束符NULL。
mrc_strlen用于取GB格式的文字长度，unicode编码的文字是用mrc_wstrlen。

头文件

Mrc_base_i.h


把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

函数定义

char *mrc_strncat(char *dest,char *src,int n);

参数说明

dest[OUT] 目标空间指针

src[IN] 源字符串指针

n[IN] 字符的个数

返回值

指向dest的指针

备注

Src和dest所指内存区域不可重叠且dest必须有足够的空间来容纳src的字符串

头文件

Mrc_base_i.h


字符串比较

函数定义

int mrc_strncmp(char *str1, char *str2, int maxlen);

参数说明

Str1[IN] 目标空间指针

Str2[IN] 源字符串指针

Maxlen[IN] 比较字符串的长度

返回值

当s1<s2时，返回值<0
当s1=s2时，返回值=0
当s1>s2时，返回值>0

头文件

Mrc_base_i.h


将字符串s2中的最多n个字符串复制到字符数组s1中，返回指向s1的指针。

函数定义

char *mrc_strncpy(char *s1, char *s2,size_t n);

参数说明

S1[OUT] 目标空间指针

S2[IN] 源字符串指针

N[IN] 字符个数

返回值

指向s1的指针

备注

如果源串长度大于n,则strncpy不复制最后的’\0’结束符，所以是不安全的，复制后需要手动添加字符串的结束符才行。

头文件

Mrc_base_i.h


从一个字符串中搜索一个字符最后出现的位置。

函数定义

char * mrc_strrchr (

const char * string,

int32 ch

);

参数说明

string [IN] 以NULL结尾的字符串，即欲查找字符所在的字符串；

ch [IN] 需要查找的字符；

返回值

函数返回字符在串中最后出现的位置指针，若没有找到，返回NULL。

头文件

mrc_exb.h


从字符串haystack中寻找needle第一次出现的位置（不比较结束符NULL)。

函数定义

char *mrc_strstr(char *haystack, char *needle);

参数说明

s[IN] 目标空间指针

needle[IN] 查询目标指针

返回值

返回指向第一次出现needle位置的指针，如果没找到则返回NULL。

头文件

Mrc_base_i.h


把输入的字符串转换成数字

函数定义

unsigned long mrc_strtoul( const char *nptr, char endptr, int base )

参数说明

nptr[IN] 字符串的起始地址

endptr[IN] 返回字符串有效数字的结尾地址

base[IN] 转化基数

返回值

转化后的数字

头文件

Mrc_base_i.h


将用户信息的MD5值返回给应用。

Syntax

int32 mrc_UserInfoMD5(
uint32 Option,
char *out
);

Parameters

Option
［IN］Option: 0，用户手机IMEI的MD5值；1，用户SIM卡的IMSI号码的MD5值；3，用户SIM卡和IMEI的MD5值；
out
［OUT］用户接受MD5输入的缓冲区，33个字节，缓冲区由用户负责申请和释放内存空间，以NULL结尾。

Return Value

MR_SUCCESS 计算MD5成功；
MR_FAILED 计算MD5失败。

Remarks

1、如果最终使用的通道不需要二次确认，则本函数的行为和mrc_ChargeExOversea一致；
2、如果最终使用的通道需要二次确认，则在收到运营商回复的第一条的回复请求后，调用回调函数cbQueConfirm。

Requirements

Header:mrc_payment.h


日期时间描述结构体

Syntax

typedef struct{
uint16 year;
uint8 month;
uint8 day;
uint8 hour;
uint8 minute;
uint8 second;
}mr_datetime;

Members

year
年
month
月
day
日
hour
时
minute
分
second
秒

Requirements

Header:mrc_base.h


屏幕信息描述结构体

Syntax

typedef struct{
uint32 width;
uint32 height;
uint32 bit;
}mr_screeninfo;

Members

width
屏幕宽
height
屏幕高
bit
屏幕象素深度，单位bit

Requirements

Header:mrc_base.h


屏幕矩形区定义

Syntax

typedef struct{
uint16 x;
uint16 y;
uint16 w;
uint16 h;
}mr_screenRectSt;

Members

x
屏幕矩形x方向起始位置（相对上屏幕左上角）
y
屏幕矩形y方向起始位置（相对上屏幕左上角）
w
屏幕矩形宽度
h
屏幕矩形高度

Requirements

Header:mrc_base.h


用户信息结构体

结构体定义

typedef struct

{

uint8 IMEI[16]; //IMEI 长度为15字节

uint8 IMSI[16]; //IMSI 长度为15字节

char manufactory[8]; //厂商名，最大7个字符，空字节填\0

char type[8]; //mobile type，最大7个字符，空字节填\0

uint32 ver; //移植软件版本

uint8 spare[12]; //备用

}mr_userinfo;

头文件

Mrc_base_i.h


typedef BYTE*

typedef BYTE* PBYTE;


typedef const char* PCSTR;


typedef char* PSTR;


typedef signed short Sint16;


typedef signed int Sint32;


typedef signed char Sint8;


typedef unsigned short Uint16;


typedef unsigned int Uint32;


typedef unsigned char Uint8;


#define

#define VOID void


无线移动网络类型

Syntax

enum {
MR_NET_ID_MOBILE,
MR_NET_ID_CN,
MR_NET_ID_CDMA,
MR_NET_ID_NONE
};

Members

MR_NET_ID_MOBILE 中国移动
MR_NET_ID_CN 联通gsm
MR_NET_ID_CDMA 联通CDMA
MR_NET_ID_NONE 未插卡

Requirements

Header:mrc_base.h


SIM卡状态

Syntax

enum {
MR_SIM_NEW,
MR_SIM_CHANGE,
MR_SIM_SAME
};

Members

MR_SIM_NEW 新手机第一次插入SIM卡
MR_SIM_CHANGE 用户更换SIM卡
MR_SIM_SAME 未进行换卡操作

Requirements

Header:mrc_base.h


Socket事件处理回调

函数定义

typedef DWORD (*FN_SOCKEVENT)(PSOCKET socket, DWORD evt, PSOCKEVTDATA data);

参数说明

Socket [IN] Soceket句柄

Evt [IN] Socket通知事件

Data [IN] 事件数据

返回值

0 -- do not called Socket_Close on that socket in the event process

1 -- called the Socket_Close in the event process

头文件

Mrc_network.h


Socket接收处理回调。Socket模块调用该接口完成数据接收处理。Socket在创建时会生成一个缺省处理，用户可以重载该处理。

函数定义

typedef void (*FN_SOCKRECV)(PSOCKET socket);

参数说明

Socket [IN] socket指针

返回值

无

头文件

Mrc_network.h


GPRS事件枚举

枚举定义

typedef enum

{

GPRS_EVENT_CONNECTOK, // connect success

GPRS_EVENT_CONNECTFAILED, // connect failed

GPRS_EVENT_TIMEOUT, // connect timeout

GPRS_EVENT_CLOSED //user close the disconnect

}GPRS_EVENT;

头文件

Mrc_network.h


GPRS类型枚举

枚举定义

typedef enum

{

CMWAP, //CMWAP Mode

CMNET //CMNET Mode

}GPRS_MODE;

头文件

Mrc_network.h


GPRS状态枚举定义

枚举定义

typedef enum

{

GPRS_STATUS_IDLE, //is ready for connect

GPRS_STATUS_CONNECTING, // is in connecting process

GPRS_STATUS_CONNECTED, // has connected

GPRS_STATUS_ERROR // error happened

}GPRS_STATUS;

头文件

Mrc_network.h


HTTP事件枚举

枚举定义

typedef enum HTTP_EVENT_E

{

/** sent when http socket connected */

HTTPEVT_CONNECTED = SOCKEVT_CONNECTED,

/** sent when http socket connect failed */

HTTPEVT_CONNECTFAILED = SOCKEVT_CONNECTFAILED,

/** sent when error happen */

HTTPEVT_ERROR = SOCKEVT_ERROR,

/** sent when socket closed */

HTTPEVT_CLOSED = SOCKEVT_CLOSED,

/** sent when get the http response header */

HTTPEVT_RESPONSE_HEADER,

/** sent when get the http response data */

HTTPEVT_RESPONSE_DATA,

/** sent when one http response finished */

HTTPEVT_RESPONSE_END

}HTTPEVENT;

头文件

Mrc_network.h


HTTP 方法枚举

枚举定义

typedef enum HTTP_METHOD_E

{

GET = 0, //"GET"

#ifdef HTTP_HEAD_METHOD_ENABLE

HEAD, //"HEAD"

#endif

POST //"POST"

}HTTPMETHOD;

头文件

Mrc_network.h


#define HTTP_FIELDVALUE_SIZE

#define HTTP_FIELDVALUE_SIZE 128

定义说明：HTTP回复头内容最大空间为128，单位byte

头文件：

Mrc_network.h


#define HTTP_HEADER_SIZE

#define HTTP_HEADER_SIZE 1024

定义说明：HTTP 头的最大空间为1024，单位为byte

头文件

Mrc_network.h


IP ？？？

Syntax

typedef enum {
MR_IPPROTO_TCP,
MR_IPPROTO_UDP
};

Members

MR_IPPROTO_TCP TCP连接
MR_IPPROTO_UDP UPD连接

Requirements

Header:mrc_base.h


断开拨号连接。

Syntax

int32 mrc_closeNetwork(void);

Parameters

void

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Requirements

Header:mrc_base.h


关闭一个socket连接。

Syntax

int32 mrc_closeSocket(int32 s);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建

Return Value

MR_SUCCESS ： 关闭成功
MR_FAILED ： 关闭失败

Requirements

Header:mrc_base.h


建立TCP连接。

Syntax

int32 mrc_connect(
int32 s,
int32 ip,
uint16 port,
int32 type
);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建
ip
[IN] IP地址,如果一个主机的IP地址为218.18.95.203，则值为218<<24 + 18<<16 + 95<<8 + 203= 0xda125fcb
port
[IN] 端口号
type
[IN] 工作模式，有MR_SOCKET_BLOCK MR_SOCKET_NONBLOCK

Return Value

MR_SUCCESS 成功
MR_FAILED 失败
MR_WAITING 使用异步方式进行连接，应用需要轮询该socket的状态以获知连接状况

Requirements

Header:mrc_base.h


通过主机名获得该主机的IP地址值，如果一个主机的IP地址为218.18.95.203，则值为218<<24 + 18<<16 + 95<<8 + 203= 0xda125fcb。 若获取主机IP使用异步模式，使用回调函数通知引擎获取IP的结果。

Syntax

int32 mrc_getHostByName(
const char *name,
MR_GET_HOST_CB cb
);

Parameters

name
p: MR_FAILED 获取IP失败; 其他值 IP地址
cb
回调函数，见MR_GET_HOST_CB定义

Return Value

MR_FAILED （立即感知的）失败，不再调用cb
MR_WAITING 使用回调函数通知引擎获取IP的结果
其他值 同步模式，立即返回的IP地址，不再调用cb

Requirements

Header:mrc_base.h


取得网络ID。

Syntax

int32 mrc_getNetworkID(void);

Parameters

void

Return Value

见MR_NET_ID_MOBILE;MR_NET_ID_CN;MR_NET_ID_CDMA;MR_NET_ID_NONE定义

Requirements

Header:mrc_base.h


获取网络模块版本信息

函数定义

PCSTR mrc_GetNetWorkVersion(void);

参数说明

socket [IN] HTTP Socket句柄

buf [OUT] HTTP 头指针

size [OUT] 数据大小

返回值

非NULL为网络版本信息，NULL为失败

头文件

Mrc_network.h


获取socket connect 状态（主要用于TCP的异步连接）

Syntax

int32 mrc_getSocketState(int32 s);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建

Return Value

MR_SUCCESS ： 连接成功
MR_FAILED ： 连接失败
MR_WAITING ： 连接中
MR_IGNORE ： 不支持该功能

Requirements

Header:mrc_base.h


建立GPRS连接

函数定义

void mrc_GPRS_Connect(

GPRS_MODE mode,

gprs_event_handler handler,

DWORD timeout

);

参数说明

Mode [IN] GPRS模式

Handler [IN] 事件句柄

Timeout [IN] 连接超时值，0表示使用默认值，>0则为自定义时间

返回值

无

头文件

Mrc_network.h


断开GPRS连接

函数定义

void mrc_GPRS_DisConnect(void);

参数说明

无

返回值

无

头文件

Mrc_network.h


获取当前的GPRS模式

函数定义

GPRS_MODE mrc_GPRS_GetMode(void);

参数说明

无

返回值

GPRS模式，见GPRS_MODE

头文件

Mrc_network.h


获取当前GPRS状态

函数定义

GPRS_STATUS mrc_GPRS_GetStatus(void);

参数说明

无

返回值

GPRS状态，见GPRS_STATUS

头文件

Mrc_network.h


关闭Http Socket

函数定义

BOOL mrc_Http_Close(PSOCKET socket, DWORD evt);

参数说明

socket [IN] Socket句柄

evt [IN] Socket关闭事件

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


发送Http Get命令

函数定义

BOOL mrc_Http_Get(PSOCKET socket, PCSTR url, uint32 from, uint32 to);

参数说明

socket [IN] Socket句柄

url [IN] 请求的URL

from [IN] 发起端

to [IN] 目的地

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


获取HTTP响应CODE，只有在收到EVENT HTTPEVT_RESPONSE_HEADER，方可调用该接口。

函数定义

uint32 mrc_Http_GetResponseCode(PSOCKET socket);

参数说明

socket [IN] HTTP Socket句柄

返回值

响应CODE

头文件

Mrc_network.h


获取HTTP响应内容，只有在收到EVENT HTTPEVT_RESPONSE_HEADER，方可调用该接口。

函数定义

PCSTR mrc_Http_GetResponseField(PSOCKET socket, PCSTR field);

参数说明

socket [IN] HTTP Socket句柄

field [IN] HTTP 头域

返回值

非NULL为响应内容，NULL为失败

头文件

Mrc_network.h


获取HTTP响应头

函数定义

int mrc_Http_GetResponseHead(PSOCKET socket,uint8** buf, uint32* size);

参数说明

socket [IN] HTTP Socket句柄

buf [OUT] HTTP 头指针

size [OUT] 数据大小

返回值

MR_SUCCESS 成功

MR_FAILED 失败

头文件

Mrc_network.h


HTTP模块初始化，由于HTTP依赖于Socket，所以在本接口调用之前，必须完成Socket模块的初始化

函数定义

VOID mrc_Http_Initialize(VOID);

参数说明

无

返回值

无

头文件

Mrc_network.h


打开一个Socket供HTTP使用

函数定义

PSOCKET mrc_Http_Open(uint16 port, FN_SOCKEVENT fnEvent);

参数说明

Port [IN] 服务端服务端口

fnEvent [IN]

返回值

非NULL为HTTP Socket句柄，反之失败

头文件

Mrc_network.h


打开一个Socket供HTTP使用

函数定义

PSOCKET mrc_Http_OpenEx(char*ip_string,uint16 port,FN_SOCKEVENT fnEvent);

参数说明

ip_string [IN] 服务端的IP地址及主机名称

Port [IN] 服务端的端口号

fnEvent [IN]

返回值

非NULL为HTTP Socket句柄，反之失败

头文件

Mrc_network.h


发送HTTP数据

函数定义

BOOL mrc_Http_Post(PSOCKET socket, PCSTR url, PCSTR buffer, uint32 size);

参数说明

socket [IN] Socket句柄

url [IN] 请求的URL

buffer [IN] 数据缓存指针

to [IN] 数据长度

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


HTTP模块退出

函数定义

VOID mrc_Http_Terminate(VOID);

参数说明

无

返回值

无

头文件

Mrc_network.h


网络初始化，如果没有拨号，进行拨号操作。

Syntax

int32 mrc_initNetwork(
MR_INIT_NETWORK_CB cb,
const char *mode
);

Parameters

cb
[IN] 当网络初始化使用异步模式时，使用该回调函数通知应用初始化结果,见MR_INIT_NETWORK_CB定义
mode
[IN] 网络初始化拨号方式，有CMNET或CMWAP两种拨号方式。

Return Value

MR_SUCCESS 同步模式，初始化成功，不再调用cb
MR_FAILED （立即感知的）失败，不再调用cb
MR_WAITING 使用回调函数通知引擎初始化结果

Remarks

本文档描述的所有网络接口函数在实现时建议优先考虑采用非阻塞方式。若网络初始化使用异步模式，使用回调函数通知引擎初始化结果。

Requirements

Header:mrc_base.h


从网络接收数据。

Syntax

int32 mrc_recv(
int32 s,
char *buf,
int len
);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建
buf
[OUT] 缓冲区，存放接收到的数据
len
[IN] 缓存区的大小

Return Value

>=0的整数 实际接收的数据字节个数
MR_FAILED Socket已经被关闭或遇到了无法修复的错误。

Requirements

Header:mrc_base.h


从指定地址接收数据。

Syntax

int32 mrc_recvfrom(
int32 s,
char *buf,
int len,
int32 *ip,
uint16 *port
);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建
buf
[OUT] 要发送数据的缓冲区
len
[IN] 缓存区的大小
ip
[IN] 对端IP地址
port
[IN] 对端端口号

Return Value

>=0的整数 实际接收的数据字节个数
MR_FAILED Socket已经被关闭或遇到了无法修复的错误。

Requirements

Header:mrc_base.h


发送数据。

Syntax

int32 mrc_send(
int32 s,
const char *buf,
int len
);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建
buf
[OUT] 缓冲区，存放接收到的数据
len
[IN] 缓存区的大小

Return Value

>=0 实际发送的数据字节个数
MR_FAILED Socket已经被关闭或遇到了无法修复的错误。

Requirements

Header:mrc_base.h


向指定地址发送数据。

Syntax

int32 mrc_sendto(
int32 s,
const char *buf,
int len,
int32 ip,
uint16 port
);

Parameters

s
[IN] 打开的socket句柄，由mrc_socket创建
buf
[OUT]要发送数据的缓冲区
len
[IN] 缓存区的大小
ip
[IN] 对端IP地址
port
[IN] 对端端口号

Return Value

>=0 实际发送的数据字节个数
MR_FAILED Socket已经被关闭或遇到了无法修复的错误。

Requirements

Header:mrc_base.h


创建一个socket。

Syntax

int32 mrc_socket(
int32 type,
int32 protocol
);

Parameters

type
Socket类型 MR_SOCK_STREAM MR_SOCK_DGRAM
protocol
协议类型MR_IPPROTO_TCP MR_IPPROTO_UDP

Return Value

>=0 返回的Socket句柄
MR_FAILED 失败

Requirements

Header:mrc_base.h


关闭Socket连接

函数定义

int mrc_Socket_Close(PSOCKET socket, SOCKEVENT evt);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

Evt [IN] Socket关闭的原因，SOCKEVT_ERROR on error；SOCKEVT_CLOSED on finish

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


关闭所有可用的Socket

函数定义

void mrc_Socket_CloseAll(SOCKEVENT evt);

参数说明

Evt [IN] Socket事件。SOCKEVT_ERROR -- on error； SOCKEVT_CLOSED -- on finish

返回值

无

头文件

Mrc_network.h


Socket连接到服务端

函数定义

int mrc_Socket_Connect(PSOCKET socket, uint16 port, int block);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

Port [IN] 服务端口

Block [IN] 连接模式，TRUE-à同步阻塞模式；FALSE--à异步非阻塞模式

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


Socket连接到服务端

函数定义

int mrc_Socket_ConnectEx(PSOCKET socket, char* ip_string,uint16 port, int block);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

Ip_string [IN] Socket服务IP地址或主机名称

Port [IN] 服务端口

Block [IN] 连接模式，TRUE-à同步阻塞模式；FALSE--à异步非阻塞模式

返回值

TRUE 成功

FALSE 失败

头文件

Mrc_network.h


创建一个Socket

函数定义

PSOCKET mrc_Socket_Create(

SOCKPROTO protocol,

FN_SOCKEVENT fnEvent,

DWORD userdata

);

参数说明

Protocol [IN] Socket协议，见SOCKPROTO

fnEvent [IN] 事件名柄，不能为NULL。见FN_SOCKEVENT

userdata [IN]

返回值

非NULL为Socket句柄，反之失败

头文件

Mrc_network.h


Socket连接初始化，必须在所有Socket动作之前调用，Socket使用完毕需调用Socket_Terminate结束。

函数定义

void mrc_Socket_Initialize(void);

参数说明

无

返回值

无

头文件

Mrc_network.h


检查当前Socket是否处于连接状态。由于UDP Socket在非连接状态下，也可发送数据，所以UDP方式下检测此处返回为TRUE。

函数定义

int mrc_Socket_IsConnected(PSOCKET socket);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

返回值

TRUE Socket处于连接状态

FALSE Socket连接断开

头文件

Mrc_network.h


检查当前Socket是否可用

函数定义

int mrc_Socket_IsNull(PSOCKET socket);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

返回值

TRUE Socket不为NULL

FALSE Socket为NULL

头文件

Mrc_network.h


Socket发送数据。发送机制如下：如果Socket的发送缓存为空，那么数据直接发送，当数据量较大时，未发送数据将转入发送缓存；如果Socket发送缓存不为空，那么数据将直接转入发送缓存。

函数定义

int mrc_Socket_Send(PSOCKET socket, PBYTE buffer, int32 size);

参数说明

Socket [IN] Socet句柄，见mrc_Socket_Create

buffer [IN] 发送缓存指针

size [IN] 数据大小

返回值

TRUE 发送成功或已转入发送缓存

FALSE 失败

头文件

Mrc_network.h


Socket连接终止，释放该模块资源。该函数与mrc_Socket_Initialize配对使用。

函数定义

void mrc_Socket_Initialize(void);

参数说明

无

返回值

无

头文件

Mrc_network.h


Socket套接字绑定描述结构体

Syntax

typedef struct{
int32 socket;
int32 port;
}mr_bind_st;

Members

socket
socket说明，需添加
port
socket欲绑定的端口号

Requirements

Header:mrc_base.h


获取主机IP回调函数

Syntax

typedef int32 (*MR_GET_HOST_CB)(int32 ip);

Parameters

ip
p: MR_FAILED 获取IP失败; 其他值 IP地址

Return Value

MR_SUCCESS 成功
MR_FAILED 失败

Remarks

函数的返回值仅作为将来升级版本保留，目前mythroad不关心函数的返回值。

Requirements

Header:mrc_base.h


网络初始化回调函数

Syntax

typedef int32 (*MR_INIT_NETWORK_CB)(int32 result);

Parameters

result
[IN] MR_SUCCESS 初始化成功; MR_FAILED 初始化失败

Return Value

MR_SUCCESS 操作成功
MR_FAILED 操作失败

Remarks

函数的返回值仅作为将来升级版本保留，目前mythroad不关心函数的返回值。

Requirements

Header:mrc_base.h


typedef struct SOCKET_T* PSOCKET;

定义说明：Socket类型指针，见SOCKET_T


typedef struct SOCKEVTDATA_T* PSOCKEVTDATA;

定义说明：Socket事件数据指针，见SOCKEVTDATA_T

头文件

Mrc_network.h


#define SOCKET_MAX_COUNT

#define SOCKET_MAX_COUNT 2

定义说明：SDK支持的最大SOCKET连接数2

头文件

Mrc_network.h


#define SOCKET_RECVBUFFER_SIZE 2048

定义说明：接收缓存的最大空间值，单位为byte

头文件

Mrc_network.h


#define SOCKET_SELECT_INTERVAL 300

定义说明：Socket 轮询Timer

头文件

Mrc_network.h


#define SOCKET_SENDBUFFER_SIZE

#define SOCKET_SENDBUFFER_SIZE 4096

定义说明：发送缓存的最大空间，单位byte

头文件

Mrc_network.h


Socket信息结构体

结构体定义

typedef struct SOCKET_T{

/** platform socket descriptor */

int32 sd;

SOCKPROTO protocol; //Socket连接类型，见SOCKPROTO

SOCKSTAT state; //Socket状态，见SOCKSTAT

FN_SOCKRECV fnRecv; //接收处理，见FN_SOCKRECV

FN_SOCKEVENT fnEvent; //Socket事件处理，见FN_SOCKEVENT

DWORD userdata;

BYTE sendbuf[SOCKET_SENDBUFFER_SIZE];//发送缓存

Uint32 begin; //发送缓存开始位置偏移

Uint32 end; //发送缓存结束位置偏移

}SOCKET, *PSOCKET;

头文件

Mrc_network.h


Socket套接字类型

Syntax

typedef enum {
MR_SOCK_STREAM,
MR_SOCK_DGRAM
};

Members

MR_SOCK_STREAM 数据流套接字，TCP连接
MR_SOCK_DGRAM 数据报套接字，UPD连接

Requirements

Header:mrc_base.h


Socket工作模式

Syntax

typedef enum {
MR_SOCKET_BLOCK,
MR_SOCKET_NONBLOCK
};

Members

MR_SOCKET_BLOCK 阻塞方式（同步方式）
MR_SOCKET_NONBLOCK 非阻塞方式（异步方式）

Requirements

Header:mrc_base.h


Socket事件枚举

枚举定义

typedef enum SOCKET_EVENT_E{

SOCKEVT_CONNECTED, /** sent when connect success with no event data */

SOCKEVT_CONNECTFAILED, /** sent when connecting failed with no event data */

SOCKEVT_ERROR, /** sent when anything error happen with no event data */

SOCKEVT_CLOSED, /** sent when the socket closed by user in normal case(finished use of the socket) with not event data*/

SOCKEVT_RECVDATA /** sent when receive data from network with event data*/

}SOCKEVENT;

头文件

Mrc_network.h


Socket事件数据结构体

结构体定义

typedef struct SOCKEVTDATA_T

{

PBYTE buffer; //接收数据缓存指针

int32 size; //接收数据长度

Uint32 ip; //UDP服务IP

uint16 port; //UDP服务端口

}SOCKEVTDATA, *PSOCKEVTDATA;

头文件

Mrc_network.h


Socket连接类型枚举

枚举定义

typedef enum SOCKET_PROTOCOL_E

{

//tcp

SOCKPROTO_TCP,

//udp

SOCKPROTO_UDP

}SOCKPROTO;

头文件

Mrc_network.h


Socket状态枚举

枚举定义

typedef enum SOCKET_STATE_E{

SOCKSTAT_CREATED, //新创建状态

SOCKSTAT_CONNECTING, //连接中状态

SOCKSTAT_CONNECTED, //已连接状态

SOCKSTAT_CLOSED //连接关闭或出错状态

}SOCKSTAT;

头文件

Mrc_network.h