gnokii-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnokii/common/phones nk6510.c,1.119,1.120


From: BORBELY Zoltan <address@hidden>
Subject: gnokii/common/phones nk6510.c,1.119,1.120
Date: Tue, 07 Oct 2003 22:38:53 +0000

Update of /cvsroot/gnokii/gnokii/common/phones
In directory subversions:/tmp/cvs-serv24823/common/phones

Modified Files:
        nk6510.c 
Log Message:
ringtone handling support added to the nk6510 driver


Index: nk6510.c
===================================================================
RCS file: /cvsroot/gnokii/gnokii/common/phones/nk6510.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -C2 -d -r1.119 -r1.120
*** nk6510.c    3 Oct 2003 09:50:35 -0000       1.119
--- nk6510.c    7 Oct 2003 22:38:51 -0000       1.120
***************
*** 119,122 ****
--- 119,126 ----
  */
  static gn_error NK6510_GetRingtoneList(gn_data *data, struct gn_statemachine 
*state);
+ static gn_error NK6510_GetRawRingtone(gn_data *data, struct gn_statemachine 
*state);
+ static gn_error NK6510_SetRawRingtone(gn_data *data, struct gn_statemachine 
*state);
+ static gn_error NK6510_GetRingtone(gn_data *data, struct gn_statemachine 
*state);
+ static gn_error NK6510_SetRingtone(gn_data *data, struct gn_statemachine 
*state);
  static gn_error NK6510_GetProfile(gn_data *data, struct gn_statemachine 
*state);
  static gn_error NK6510_SetProfile(gn_data *data, struct gn_statemachine 
*state);
***************
*** 350,353 ****
--- 354,365 ----
        case GN_OP_Subscribe:
                return NK6510_Subscribe(data, state);
+       case GN_OP_GetRawRingtone:
+               return NK6510_GetRawRingtone(data, state);
+       case GN_OP_SetRawRingtone:
+               return NK6510_SetRawRingtone(data, state);
+       case GN_OP_GetRingtone:
+               return NK6510_GetRingtone(data, state);
+       case GN_OP_SetRingtone:
+               return NK6510_SetRingtone(data, state);
        default:
                return GN_ERR_NOTIMPLEMENTED;
***************
*** 2451,2454 ****
--- 2463,2467 ----
  {
        int i, j, index;
+       unsigned char *pos;
  
        switch (message[3]) {
***************
*** 2468,2474 ****
                }               
                break;
        default:
                dprintf("Unknown subtype of type 0x1f (%d)\n", message[3]);
!               return GN_ERR_UNKNOWN;
        }
        return GN_ERR_NONE;
--- 2481,2518 ----
                }               
                break;
+ 
+       /* set raw ringtone result */
+       case 0x0f:
+               if (message[4] == 0x00 && message[5] == 0x00) {
+                       break;
+               } else if (message[4] == 0x03 || message[5] == 0x00) {
+                       /* FIXME: some kind of ringtone error */
+                       return GN_ERR_UNKNOWN;
+               } else return GN_ERR_UNHANDLEDFRAME;
+               break;
+ 
+       /* get raw ringtone result */
+       case 0x13:
+               if (!data->ringtone || !data->raw_data) return 
GN_ERR_INTERNALERROR;
+               pos = message + 8;
+               char_unicode_decode(data->ringtone->name, pos, 2 * message[7]);
+               pos += 2 * message[7];
+               i = (pos[0] << 8) + pos[1];
+               pos += 2;
+               if (data->raw_data->length < i) return GN_ERR_INVALIDSIZE;
+               data->raw_data->length = i;
+               memcpy(data->raw_data->data, pos, i);
+               pos += i;
+               if (pos + 2 - message != length || pos[0] != 0 || pos[1] != 0)
+                       return GN_ERR_UNHANDLEDFRAME;
+               break;
+ 
+       /* get raw ringtone failed */
+       case 0x14:
+               return GN_ERR_INVALIDLOCATION;
+ 
        default:
                dprintf("Unknown subtype of type 0x1f (%d)\n", message[3]);
!               return GN_ERR_UNHANDLEDFRAME;
        }
        return GN_ERR_NONE;
***************
*** 2483,2492 ****
  }
  
  static gn_error NK6510_GetRingtone(gn_data *data, struct gn_statemachine 
*state)
  {
!       unsigned char req[] = {FBUS_FRAME_HEADER, 0x07, 0x00, 0x00, 0xFE, 0x00, 
0x7D};
  
!       dprintf("Getting list of ringtones...\n");
!       SEND_MESSAGE_BLOCK(NK6510_MSG_RINGTONE, 9);
  }
  
--- 2527,2607 ----
  }
  
+ static gn_error NK6510_GetRawRingtone(gn_data *data, struct gn_statemachine 
*state)
+ {
+       unsigned char req[] = {FBUS_FRAME_HEADER, 0x12, 0x00, 0x00};
+ 
+       if (!data->ringtone || !data->raw_data) return GN_ERR_INTERNALERROR;
+ 
+       dprintf("Getting raw ringtone %d...\n", data->ringtone->location);
+       req[4] = data->ringtone->location / 256;
+       req[5] = data->ringtone->location % 256;
+ 
+       SEND_MESSAGE_BLOCK(NK6510_MSG_RINGTONE, 6);
+ }
+ 
+ static gn_error NK6510_SetRawRingtone(gn_data *data, struct gn_statemachine 
*state)
+ {
+       unsigned char req[32768] = {FBUS_FRAME_HEADER, 0x0e, 0x7f, 0xff, 0xfe};
+       unsigned char *pos;
+ 
+       if (!data->ringtone || !data->raw_data) return GN_ERR_INTERNALERROR;
+ 
+       dprintf("Setting raw ringtone %d...\n", data->ringtone->location);
+       pos = req + 7;
+       *pos = strlen(data->ringtone->name);
+       char_unicode_encode(pos + 1, data->ringtone->name, *pos);
+       pos += 1 + 2 * *pos;
+       *pos++ = data->raw_data->length / 256;
+       *pos++ = data->raw_data->length % 256;
+       if (pos - req + data->raw_data->length + 2 > sizeof(req)) return 
GN_ERR_INVALIDSIZE;
+       memcpy(pos, data->raw_data->data, data->raw_data->length);
+       pos += data->raw_data->length;
+       *pos++ = 0;
+       *pos++ = 0;
+ 
+       SEND_MESSAGE_BLOCK(NK6510_MSG_RINGTONE, pos - req);
+ }
+ 
  static gn_error NK6510_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 = NK6510_GetRawRingtone(&d, state)) != GN_ERR_NONE) return err;
! 
!       return pnok_ringtone_from_raw(data->ringtone, rawdata.data, 
rawdata.length);
! }
! 
! static gn_error NK6510_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)) != GN_ERR_NONE)
!               return err;
! 
!       return NK6510_SetRawRingtone(&d, state);
  }
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]