[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnokii/common/phones nk7110.c,1.155,1.156
From: |
BORBELY Zoltan <address@hidden> |
Subject: |
gnokii/common/phones nk7110.c,1.155,1.156 |
Date: |
Wed, 12 Nov 2003 20:13:36 +0000 |
Update of /cvsroot/gnokii/gnokii/common/phones
In directory subversions:/tmp/cvs-serv14350/common/phones
Modified Files:
nk7110.c
Log Message:
full ringtone handling for nk7110
Index: nk7110.c
===================================================================
RCS file: /cvsroot/gnokii/gnokii/common/phones/nk7110.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -C2 -d -r1.155 -r1.156
*** nk7110.c 28 Oct 2003 00:03:41 -0000 1.155
--- nk7110.c 12 Nov 2003 20:13:33 -0000 1.156
***************
*** 100,104 ****
--- 100,108 ----
static gn_error NK7110_GetSecurityCode(gn_data *data, struct gn_statemachine
*state);
static gn_error NK7110_PressOrReleaseKey(gn_data *data, struct
gn_statemachine *state, bool press);
+ static gn_error NK7110_GetRawRingtone(gn_data *data, struct gn_statemachine
*state);
+ static gn_error NK7110_SetRawRingtone(gn_data *data, struct gn_statemachine
*state);
+ static gn_error NK7110_GetRingtone(gn_data *data, struct gn_statemachine
*state);
static gn_error NK7110_SetRingtone(gn_data *data, struct gn_statemachine
*state);
+ static gn_error NK7110_GetRingtoneList(gn_data *data, struct gn_statemachine
*state);
static gn_error NK7110_GetProfile(gn_data *data, struct gn_statemachine
*state);
***************
*** 123,126 ****
--- 127,131 ----
static gn_error NK7110_IncomingKeypress(int messagetype, unsigned char
*message, int length, gn_data *data, struct gn_statemachine *state);
static gn_error NK7110_IncomingProfile(int messagetype, unsigned char
*message, int length, gn_data *data, struct gn_statemachine *state);
+ static gn_error NK7110_IncomingRingtone(int messagetype, unsigned char
*message, int length, gn_data *data, struct gn_statemachine *state);
static int get_memory_type(gn_memory_type memory_type);
***************
*** 142,145 ****
--- 147,151 ----
{ NK7110_MSG_KEYPRESS_RESP, NK7110_IncomingKeypress },
{ NK7110_MSG_PROFILE, NK7110_IncomingProfile },
+ { NK7110_MSG_RINGTONE, NK7110_IncomingRingtone },
{ 0, NULL }
};
***************
*** 277,282 ****
--- 283,296 ----
case GN_OP_ReleasePhoneKey:
return NK7110_PressOrReleaseKey(data, state, false);
+ case GN_OP_GetRawRingtone:
+ return NK7110_GetRawRingtone(data, state);
+ case GN_OP_SetRawRingtone:
+ return NK7110_SetRawRingtone(data, state);
+ case GN_OP_GetRingtone:
+ return NK7110_GetRingtone(data, state);
case GN_OP_SetRingtone:
return NK7110_SetRingtone(data, state);
+ case GN_OP_GetRingtoneList:
+ return NK7110_GetRingtoneList(data, state);
case GN_OP_PlayTone:
return pnok_play_tone(data, state);
***************
*** 356,359 ****
--- 370,376 ----
state->driver.phone.startup_logo_height = 65;
dprintf("7110 detected - startup logo height set to 65\n");
+ DRVINSTANCE(state)->userdef_location = 0x75;
+ } else {
+ DRVINSTANCE(state)->userdef_location = 0x8a;
}
***************
*** 2565,2575 ****
/********* RINGTONE **********/
/*****************************/
static gn_error NK7110_SetRingtone(gn_data *data, struct gn_statemachine
*state)
{
if (!data->ringtone) return GN_ERR_INTERNALERROR;
! data->ringtone->location = -1;
! return NBSUpload(data, state, GN_SMS_DATA_Ringtone);
}
--- 2582,2727 ----
/********* RINGTONE **********/
/*****************************/
+ static gn_error NK7110_IncomingRingtone(int messagetype, unsigned char
*message, int length, gn_data *data, struct gn_statemachine *state)
+ {
+ switch (message[3]) {
+ case 0x23:
+ if (!data->ringtone || !data->raw_data) return
GN_ERR_INTERNALERROR;
+ data->ringtone->location = message[5];
+ char_unicode_decode(data->ringtone->name, message + 6, 2 * 15);
+ if (data->raw_data->length < length - 36) return
GN_ERR_MEMORYFULL;
+ if (data->raw_data && data->raw_data->data) {
+ memcpy(data->raw_data->data, message + 36, length - 36);
+ data->raw_data->length = length - 35;
+ }
+ break;
+
+ case 0x24:
+ return GN_ERR_INVALIDLOCATION;
+
+ default:
+ return GN_ERR_UNHANDLEDFRAME;
+ }
+
+ return GN_ERR_NONE;
+ }
+
+ static gn_error NK7110_GetRawRingtone(gn_data *data, struct gn_statemachine
*state)
+ {
+ unsigned char req[] = {FBUS_FRAME_HEADER, 0x22, 0x00, 0x00};
+ gn_error error;
+
+ if (!data || !data->ringtone || !data->raw_data) return
GN_ERR_INTERNALERROR;
+ if (data->ringtone->location < 0) return GN_ERR_INVALIDLOCATION;
+
+ req[5] = data->ringtone->location;
+
+ if (sm_message_send(6, NK7110_MSG_RINGTONE, req, state)) return
GN_ERR_NOTREADY;
+ return sm_block(NK7110_MSG_RINGTONE, data, state);
+ }
+
+ static gn_error NK7110_SetRawRingtone(gn_data *data, struct gn_statemachine
*state)
+ {
+ unsigned char req[512] = {FBUS_FRAME_HEADER, 0x1f, 0x00, 0x00};
+ gn_error error;
+ int len;
+
+ if (!data || !data->ringtone || !data->raw_data ||
!data->raw_data->data)
+ return GN_ERR_INTERNALERROR;
+ if (sizeof(req) < 36 + data->raw_data->length) return GN_ERR_MEMORYFULL;
+ if (data->ringtone->location < 0) {
+ /* FIXME: search first free location */
+ data->ringtone->location = DRVINSTANCE(state)->userdef_location;
+ }
+
+ req[5] = data->ringtone->location;
+ char_unicode_encode(req + 6, data->ringtone->name,
strlen(data->ringtone->name));
+ memcpy(req + 36, data->raw_data->data, data->raw_data->length);
+ len = 36 + data->raw_data->length;
+
+ if (sm_message_send(len, NK7110_MSG_RINGTONE, req, state)) return
GN_ERR_NOTREADY;
+ return sm_block_ack(state);
+ }
+
+ static gn_error NK7110_GetRingtone(gn_data *data, struct gn_statemachine
*state)
+ {
+ gn_data d;
+ gn_error err;
+ gn_raw_data rawdata;
+ char buf[4096];
+
+ if (!data->ringtone) return GN_ERR_INTERNALERROR;
+
+ memset(&rawdata, 0, sizeof(gn_raw_data));
+ rawdata.data = buf;
+ rawdata.length = sizeof(buf);
+ gn_data_clear(&d);
+ d.ringtone = data->ringtone;
+ d.raw_data = &rawdata;
+
+ if ((err = NK7110_GetRawRingtone(&d, state)) != GN_ERR_NONE) return err;
+
+ return pnok_ringtone_from_raw(data->ringtone, rawdata.data,
rawdata.length);
+ }
+
static gn_error NK7110_SetRingtone(gn_data *data, struct gn_statemachine
*state)
{
+ gn_data d;
+ gn_error err;
+ gn_raw_data rawdata;
+ char buf[4096];
+
if (!data->ringtone) return GN_ERR_INTERNALERROR;
! memset(&rawdata, 0, sizeof(gn_raw_data));
! rawdata.data = buf;
! rawdata.length = sizeof(buf);
! gn_data_clear(&d);
! d.ringtone = data->ringtone;
! d.raw_data = &rawdata;
! if ((err = pnok_ringtone_to_raw(rawdata.data, &rawdata.length,
data->ringtone, 0)) != GN_ERR_NONE)
! return err;
!
! return NK7110_SetRawRingtone(&d, state);
! }
!
! static gn_error NK7110_GetRingtoneList(gn_data *data, struct gn_statemachine
*state)
! {
! gn_ringtone_list *rl;
! gn_ringtone ringtone;
! gn_data d;
! int i;
!
! #define ADDRINGTONE(id, str) \
! rl->ringtone[rl->count].location = (id); \
! strcpy(rl->ringtone[rl->count].name, (str)); \
! rl->ringtone[rl->count].user_defined = 0; \
! rl->ringtone[rl->count].readable = 0; \
! rl->ringtone[rl->count].writable = 0; \
! rl->count++;
!
! if (!(rl = data->ringtone_list)) return GN_ERR_INTERNALERROR;
! rl->count = 0;
! rl->userdef_location = DRVINSTANCE(state)->userdef_location;
! rl->userdef_count = 5;
!
! memset(&ringtone, 0, sizeof(ringtone));
! gn_data_clear(&d);
! d.ringtone = &ringtone;
! for (i = 0; i < rl->userdef_count; i++) {
! ringtone.location = rl->userdef_location + i;
! if (NK7110_GetRingtone(&d, state) == GN_ERR_NONE) {
! rl->ringtone[rl->count].location = ringtone.location;
! strcpy(rl->ringtone[rl->count].name, ringtone.name);
! rl->ringtone[rl->count].user_defined = 1;
! rl->ringtone[rl->count].readable = 1;
! rl->ringtone[rl->count].writable = 1;
! rl->count++;
! }
! }
!
! #undef ADDRINGTONE
!
! return GN_ERR_NONE;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnokii/common/phones nk7110.c,1.155,1.156,
BORBELY Zoltan <address@hidden> <=