From 88b0d33b8b0b1f6ae320cfc863ca6a47fa8fec22 Mon Sep 17 00:00:00 2001 From: zautrix Date: Sat, 07 Aug 2004 17:24:40 +0000 Subject: Initial revision --- (limited to 'gammu/emb/common/service/gsmring.h') diff --git a/gammu/emb/common/service/gsmring.h b/gammu/emb/common/service/gsmring.h new file mode 100644 index 0000000..207cf31 --- a/dev/null +++ b/gammu/emb/common/service/gsmring.h @@ -0,0 +1,202 @@ +/* (c) 2002-2004 by Marcin Wiacek */ + +#ifndef __gsm_ring_h +#define __gsm_ring_h + +/* --------------- Smart Messaging Specification 2.0 & 3.0 ----------------- */ + +#define SM_CommandEnd_CommandEnd 0x00 + +/* specification gives also other */ +#define SM_Command_RingingToneProgramming 0x25<<1 +#define SM_Command_Sound 0x1d<<1 +/* specification gives also other */ + +#define SM_Song_BasicSongType 0x01<<5 +/* specification gives also other */ + +#define SM_PatternID_A_part 0x00<<6 +/* specification gives also other */ + +#define SM_InstructionID_PatternHeaderId 0x00<<5 +#define SM_InstructionID_NoteInstructionId 0x01<<5 +#define SM_InstructionID_ScaleInstructionId 0x02<<5 +#define SM_InstructionID_StyleInstructionId 0x03<<5 +#define SM_InstructionID_TempoInstructionId 0x04<<5 +#define SM_InstructionID_VolumeInstructionId 0x05<<5 + +/* ------ end of Smart Messaging Specification 2.0 & 3.0 definitions ------- */ + +#define MAX_RINGTONE_NOTES 255 + +typedef enum { + /** + * Natural style (rest between notes) + */ + NaturalStyle = 0x00<<6, + /** + * Continuous style (no rest between notes) + */ + ContinuousStyle = 0x01<<6, + /** + * Staccato style (shorter notes and longer rest period) + */ + StaccatoStyle = 0x02<<6 +} GSM_RingNoteStyle; + +typedef enum { + Note_Pause = 0x00<<4, + Note_C = 0x01<<4, + Note_Cis = 0x02<<4, + Note_D = 0x03<<4, + Note_Dis = 0x04<<4, + Note_E = 0x05<<4, + Note_F = 0x06<<4, + Note_Fis = 0x07<<4, + Note_G = 0x08<<4, + Note_Gis = 0x09<<4, + Note_A = 0x0a<<4, + Note_Ais = 0x0b<<4, + Note_H = 0x0c<<4 +} GSM_RingNoteNote; + +typedef enum { + Duration_Full = 0x00<<5, + Duration_1_2 = 0x01<<5, + Duration_1_4 = 0x02<<5, + Duration_1_8 = 0x03<<5, + Duration_1_16 = 0x04<<5, + Duration_1_32 = 0x05<<5 +} GSM_RingNoteDuration; + +typedef enum { + NoSpecialDuration = 0x00<<6, + DottedNote = 0x01<<6, + DoubleDottedNote = 0x02<<6, + Length_2_3 = 0x03<<6 +} GSM_RingNoteDurationSpec; + +typedef enum { + Scale_55 = 1, /* 55 Hz for note A */ + Scale_110, /* 110 Hz for note A */ + Scale_220, + Scale_440, /* first scale for Nokia */ + Scale_880, + Scale_1760, + Scale_3520, /* last scale for Nokia */ + Scale_7040, + Scale_14080 +} GSM_RingNoteScale; + +typedef struct { + GSM_RingNoteDuration Duration; + GSM_RingNoteDurationSpec DurationSpec; + GSM_RingNoteNote Note; + GSM_RingNoteStyle Style; + GSM_RingNoteScale Scale; + int Tempo; +} GSM_RingNote; + +typedef enum { + RING_Note = 1, + RING_EnableVibra, + RING_DisableVibra, + RING_EnableLight, + RING_DisableLight, + RING_EnableLED, + RING_DisableLED, + RING_Repeat +} GSM_RingCommandType; + +typedef struct { + GSM_RingCommandType Type; + GSM_RingNote Note; + unsigned char Value; +} GSM_RingCommand; + +typedef struct { + int NrCommands; + GSM_RingCommand Commands[MAX_RINGTONE_NOTES]; + bool AllNotesScale; +} GSM_NoteRingtone; + +/* Structure to hold Nokia binary ringtones. */ +typedef struct { + unsigned char Frame[30000]; + int Length; +} GSM_NokiaBinaryRingtone; + +typedef struct { + unsigned char *Frame; + int Length; +} GSM_BinaryTone; + +typedef enum { + RING_NOTETONE = 1, + RING_NOKIABINARY, + RING_MIDI +} GSM_RingtoneFormat; + +/** + * Structure for saving various ringtones formats + */ +typedef struct { + /** + * Ringtone saved in one of three formats + */ + GSM_NokiaBinaryRingtone NokiaBinary; + GSM_BinaryTone BinaryTone; + GSM_NoteRingtone NoteTone; + /** + * Ringtone format + */ + GSM_RingtoneFormat Format; + /** + * Ringtone name + */ + char Name[20*2]; + /** + * Ringtone location + */ + int Location; +} GSM_Ringtone; + +typedef struct { + int Group; //Nokia specific + int ID; + char Name[30*2]; +} GSM_RingtoneInfo; + +typedef struct { + int Number; + GSM_RingtoneInfo Ringtone[100]; +} GSM_AllRingtonesInfo; + +GSM_Error GSM_SaveRingtoneFile(char *FileName, GSM_Ringtone *ringtone); +GSM_Error GSM_ReadRingtoneFile(char *FileName, GSM_Ringtone *ringtone); + +void saveott(FILE *file, GSM_Ringtone *ringtone); +void savemid(FILE *file, GSM_Ringtone *ringtone); +void saverng(FILE *file, GSM_Ringtone *ringtone); +void saveimelody(FILE *file, GSM_Ringtone *ringtone); +GSM_Error savewav(FILE *file, GSM_Ringtone *ringtone); +GSM_Error saverttl(FILE *file, GSM_Ringtone *ringtone); + +unsigned char GSM_EncodeNokiaRTTLRingtone (GSM_Ringtone ringtone, unsigned char *package, int *maxlength); +unsigned char GSM_EncodeEMSSound (GSM_Ringtone ringtone, unsigned char *package, int *maxlength, double version, bool start); + +GSM_Error GSM_DecodeNokiaRTTLRingtone (GSM_Ringtone *ringtone, unsigned char *package, int maxlength); + +GSM_Error GSM_RingtoneConvert(GSM_Ringtone *dest, GSM_Ringtone *src, GSM_RingtoneFormat Format); + +int GSM_RTTLGetTempo (int Beats); +int GSM_RingNoteGetFrequency (GSM_RingNote Note); +int GSM_RingNoteGetFullDuration (GSM_RingNote Note); + +char *GSM_GetRingtoneName(GSM_AllRingtonesInfo *Info, int ID); + +#endif + +/* How should editor hadle tabs in this file? Add editor commands here. + * vim: noexpandtab sw=8 ts=8 sts=8: + */ -- cgit v0.9.0.2