djjd47130

Grandstream IP Camera API [in progress]

Dec 18th, 2013
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 32.19 KB | None | 0 0
  1. unit GrandstreamAPI;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Classes, SysUtils,
  7.   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  8.   IdAllAuthentications ;
  9.  
  10. type
  11.   TGrandstreamAPI = class;
  12.   TGsParams = class;
  13.   TGsRequestChannel = class;
  14.   TGsRequestChannelBase = class;
  15.   TGsRequestBase = class;
  16.   TGsAudioVideo = class;
  17.   TGsDevice = class;
  18.   TGsStatus = class;
  19.   TGsMaintenance = class;
  20.   TGsOSD = class;
  21.  
  22.   TGsRequestResult = (grOkay,grBadRequest,grUnauthorized,grNotFound,
  23.     grServiceUnavailable);
  24.  
  25.   TGrandstreamAPI = class(TComponent)
  26.   private
  27.     FStream: TStringStream;
  28.     FAddress: String;
  29.     FPort: Integer;
  30.     FPass: String;
  31.     FUser: String;
  32.     FWeb: TIdHTTP;
  33.     FAudioVideo: TGsAudioVideo;
  34.     FDevice: TGsDevice;
  35.     FStatus: TGsStatus;
  36.     FMaintenance: TGsMaintenance;
  37.     function GetURL: String;
  38.     procedure SetAddress(const Value: String);
  39.     procedure SetPort(const Value: Integer);
  40.     procedure SetPass(const Value: String);
  41.     procedure SetUser(const Value: String);
  42.     function Get(const Module: String): TGsRequestResult;
  43.   public
  44.     constructor Create(AOwner: TComponent); override;
  45.     destructor Destroy; override;
  46.     property URL: String read GetURL;
  47.     property AudioVideo: TGsAudioVideo read FAudioVideo;
  48.     property Device: TGsDevice read FDevice;
  49.     property Status: TGsStatus read FStatus;
  50.     property Maintenance: TGsMaintenance read FMaintenance;
  51.   published
  52.     property Address: String read FAddress write SetAddress;
  53.     property Port: Integer read FPort write SetPort;
  54.     property User: String read FUser write SetUser;
  55.     property Pass: String read FPass write SetPass;
  56.   end;
  57.  
  58.   TGsParams = class(TObject)
  59.   private
  60.     FItems: TStringList;
  61.     function GetItem(const Name: String): String;
  62.     procedure SetItem(const Name, Value: String);
  63.     function GetName(const Index: Integer): String;
  64.   public
  65.     constructor Create;
  66.     destructor Destroy; override;
  67.     function Count: Integer;
  68.     procedure Clear;
  69.     property Items[const Name: String]: String read GetItem write SetItem; default;
  70.     property Names[const Index: Integer]: String read GetName;
  71.   end;
  72.  
  73.   { Request Base }
  74.  
  75.   TGsRequestBase = class(TObject)
  76.   private
  77.     FOwner: TGrandstreamAPI;
  78.     FList: TStringList;
  79.     FData: String;
  80.     procedure Next;
  81.     function Check(const V: String): Boolean;
  82.     function ValInt: Integer;
  83.     function ValStr: String;
  84.     function ValBol: Boolean;
  85.   public
  86.     constructor Create(AOwner: TGrandstreamAPI); virtual;
  87.     destructor Destroy; override;
  88.     function Owner: TGrandstreamAPI;
  89.     function Get(const Cmd: String): TGsRequestResult;
  90.     function Items: TStringList;
  91.   end;
  92.  
  93.  
  94.   TGsRequestChannel = class(TObject)
  95.   private
  96.  
  97.   public
  98.     constructor Create(AOwner: TGsRequestChannelBase);
  99.     destructor Destroy; override;
  100.   end;
  101.  
  102.   TGsRequestChannelClass = class of TGsRequestChannel;
  103.  
  104.   TGsRequestChannelBase = class(TGsRequestBase)
  105.   private
  106.     FChannels: TList;
  107.     FItemClass: TGsRequestChannelClass;
  108.     function New: TGsRequestChannel;
  109.     function GetChannel(Index: Integer): TGsRequestChannel;
  110.   public
  111.     constructor Create(AOwner: TGrandstreamAPI; const ItemClass: TGsRequestChannelClass);
  112.     destructor Destroy; override;
  113.     function Get(const Cmd: String): TGsRequestResult;
  114.     function Count: Integer;
  115.     procedure ClearChannels;
  116.     property Channels[Index: Integer]: TGsRequestChannel read GetChannel; default;
  117.   end;
  118.  
  119.   { Audio/Video (1) }
  120.  
  121.   TGsVideoCodec = (gvcH264,gvcMJPEG);
  122.  
  123.   TGsBrType = (gvbVBR,gvbCBR);
  124.  
  125.   TGsAudioCodec = (gacPCMU,gacPCMA,gacG726,gacDisabled,gacAAC);
  126.  
  127.   TGsAudioChipType = (gctAIC33,gctAIC3104,gctNone);
  128.  
  129.   TGsNtscPalType = (gptPAL,gtpNTSC);
  130.  
  131.   TGsPowerFreq = (gpfIndoor50,gpfIndoor60,gpfOutdoor);
  132.  
  133.   TGsVideoResolution = class(TObject)
  134.   private
  135.     FLength: Integer;
  136.     FWidth: Integer;
  137.     procedure SetLength(const Value: Integer);
  138.     procedure SetWidth(const Value: Integer);
  139.   public
  140.     property Width: Integer read FWidth write SetWidth;
  141.     property Length: Integer read FLength write SetLength;
  142.   end;
  143.  
  144.   TGsAudioVideoStream = class(TObject)
  145.   private
  146.     FVideoEncoder: TGsVideoCodec;
  147.     FResolution: TGsVideoResolution;
  148.     FVideoBitrate: Integer;
  149.     FBrType: TGsBrType;
  150.     FFramerate: Integer;
  151.     FIFrame: Integer;
  152.     FImageQuality: Integer;
  153.     FAudioEncoder: TGsAudioCodec;
  154.     FAudioBitrate: Integer;
  155.     procedure SetAudioBitrate(const Value: Integer);
  156.     procedure SetAudioEncoder(const Value: TGsAudioCodec);
  157.     procedure SetBitrate(const Value: Integer);
  158.     procedure SetBrType(const Value: TGsBrType);
  159.     procedure SetFramerate(const Value: Integer);
  160.     procedure SetIFrame(const Value: Integer);
  161.     procedure SetImageQuality(const Value: Integer);
  162.     procedure SetVideoEncoder(const Value: TGsVideoCodec);
  163.   public
  164.     constructor Create;
  165.     destructor Destroy; override;
  166.     property VideoEncoder: TGsVideoCodec read FVideoEncoder write SetVideoEncoder;
  167.     property Resolution: TGsVideoResolution read FResolution;
  168.     property VideoBitrate: Integer read FVideoBitrate write SetBitrate;
  169.     property BrType: TGsBrType read FBrType write SetBrType;
  170.     property Framerate: Integer read FFramerate write SetFramerate;
  171.     property IFrame: Integer read FIFrame write SetIFrame;
  172.     property ImageQuality: Integer read FImageQuality write SetImageQuality;
  173.     property AudioEncoder: TGsAudioCodec read FAudioEncoder write SetAudioEncoder;
  174.     property AudioBitrate: Integer read FAudioBitrate write SetAudioBitrate;
  175.   end;
  176.  
  177.   TGsAudioVideoChannel = class(TGsRequestChannel)
  178.   private
  179.     FHasSecondary: Boolean;
  180.     FChannel: Integer;
  181.     FPrimary: TGsAudioVideoStream;
  182.     FSecondary: TGsAudioVideoStream;
  183.     FMicrophoneVolume: Integer;
  184.     FSpeakerVolume: Integer;
  185.     FAudioLineIn: Boolean;
  186.     FAudioLineOut: Boolean;
  187.     FAudioChipType: TGsAudioChipType;
  188.     FNtscPalType: TGsNtscPalType;
  189.     FPowerFreq: TGsPowerFreq;
  190.     procedure SetAudioChipType(const Value: TGsAudioChipType);
  191.     procedure SetAudioLineIn(const Value: Boolean);
  192.     procedure SetAudioLineOut(const Value: Boolean);
  193.     procedure SetMicrophoneVolume(const Value: Integer);
  194.     procedure SetNtscPalType(const Value: TGsNtscPalType);
  195.     procedure SetPowerFreq(const Value: TGsPowerFreq);
  196.     procedure SetSpeakerVolume(const Value: Integer);
  197.   public
  198.     constructor Create;
  199.     destructor Destroy; override;
  200.     property HasSecondaryStream: Boolean read FHasSecondary;
  201.     property Channel: Integer read FChannel;
  202.     property Primary: TGsAudioVideoStream read FPrimary;
  203.     property Secondary: TGsAudioVideoStream read FSecondary;
  204.     property MicrophoneVolume: Integer read FMicrophoneVolume write SetMicrophoneVolume;
  205.     property SpeakerVolume: Integer read FSpeakerVolume write SetSpeakerVolume;
  206.     property AudioLineIn: Boolean read FAudioLineIn write SetAudioLineIn;
  207.     property AudioLineOut: Boolean read FAudioLineOut write SetAudioLineOut;
  208.     property AudioChipType: TGsAudioChipType read FAudioChipType write SetAudioChipType;
  209.     property NtscPalType: TGsNtscPalType read FNtscPalType write SetNtscPalType;
  210.     property PowerFreq: TGsPowerFreq read FPowerFreq write SetPowerFreq;
  211.   end;
  212.  
  213.   TGsAudioVideo = class(TGsRequestChannelBase)
  214.   private
  215.     function GetChannel(Index: Integer): TGsAudioVideoChannel;
  216.     function New: TGsAudioVideoChannel;
  217.   public
  218.     constructor Create(AOwner: TGrandstreamAPI);
  219.     destructor Destroy; override;
  220.     function Get: TGsRequestResult;
  221.     property Channels[Index: Integer]: TGsAudioVideoChannel read GetChannel; default;
  222.   end;
  223.  
  224.   { OSD (2) }
  225.  
  226.   TGsOSD = class(TGsRequestBase)
  227.   private
  228.  
  229.   public
  230.     constructor Create(AOwner: TGrandstreamAPI); override;
  231.     destructor Destroy; override;
  232.     function Get: TGsRequestResult;
  233.   end;
  234.  
  235.   { Network (3) }
  236.  
  237.   TGsNetwork = class(TGsRequestBase)
  238.  
  239.   end;
  240.  
  241.   { Dynamic DNS (4) }
  242.  
  243.   TGsDynamicDNS = class(TGsRequestBase)
  244.  
  245.   end;
  246.  
  247.   { SIP (5) }
  248.  
  249.   { Date/Time (6) }
  250.  
  251.   { System Info / Status (7) }
  252.  
  253.   TGsDDNSState = (gdsDisable,gdsProcessing,gdsSuccess,gdsAcctPassErr,
  254.     gdsServerBlocking,gdsStunServerErr,gdsDBFailed);
  255.  
  256.   TGsWiFiState = (gwsDisconnected,gwsConnected);
  257.  
  258.   TGsLedStatus = (glsUnsupported,glsOn,glsOff);
  259.  
  260.   TGsPPPoEStatus = (gpsDisconnected,gpsConnected);
  261.  
  262.   TGsStatus = class(TGsRequestBase)
  263.   private
  264.     FProductMode: String;
  265.     FDDNSState: TGsDDNSState;
  266.     FPartNumber: String;
  267.     FCoreVersion: String;
  268.     FBootLoaderVersion: String;
  269.     FFirmwareVersion: String;
  270.     FBaseVersion: String;
  271.     FHardwareVersion: String;
  272.     FCameraType: String;
  273.     FSystemRun: String;
  274.     FPPPoEStatus: TGsPPPoEStatus;
  275.     FLedStatus: TGsLedStatus;
  276.     FWiFiState: TGsWiFiState;
  277.     FPPPoEIP: String;
  278.     FMac: String;
  279.     FDefaultGateway: String;
  280.     FSubnetMask: String;
  281.     FIPAddress: String;
  282.   public
  283.     constructor Create(AOwner: TGrandstreamAPI); override;
  284.     destructor Destroy; override;
  285.     function Get: TGsRequestResult;
  286.     function DDNSStateStr: String;
  287.     function WiFiStateStr: String;
  288.     function LedStatusStr: String;
  289.     function PPPoEStatusStr: String;
  290.     property ProductMode: String read FProductMode;
  291.     property HardwareVersion: String read FHardwareVersion;
  292.     property PartNumber: String read FPartNumber;
  293.     property BootLoaderVersion: String read FBootLoaderVersion;
  294.     property CoreVersion: String read FCoreVersion;
  295.     property BaseVersion: String read FBaseVersion;
  296.     property FirmwareVersion: String read FFirmwareVersion;
  297.     property CameraType: String read FCameraType;
  298.     property DDNSState: TGsDDNSState read FDDNSState;
  299.     property WiFiState: TGsWiFiState read FWiFiState;
  300.     property SystemRun: String read FSystemRun;
  301.     property Mac: String read FMac;
  302.     property LedStatus: TGsLedStatus read FLedStatus;
  303.     property PPPoEIP: String read FPPPoEIP;
  304.     property PPPoEStatus: TGsPPPoEStatus read FPPPoEStatus;
  305.     property IPAddress: String read FIPAddress;
  306.     property SubnetMask: String read FSubnetMask;
  307.     property DefaultGateway: String read FDefaultGateway;
  308.   end;
  309.  
  310.   { Account Management (8) }
  311.  
  312.   { SMTP Email (9) }
  313.  
  314.   { FTP (10) }
  315.  
  316.   { PTZ (11) }
  317.  
  318.   { Alarm Event (12) }
  319.  
  320.   { Motion Detection (13) }
  321.  
  322.   { System Log (14) }
  323.  
  324.   { Storage (15) }
  325.  
  326.   { Maintenance (16) }
  327.  
  328.   TGsUpdateVia = (guvTFTP,guvHTTP,guvHTTPS);
  329.  
  330.   TGsMaintenance = class(TGsRequestBase)
  331.   private
  332.     FUpdateVia: TGsUpdateVia;
  333.     FUpgradeConfigServerPath: String;
  334.     FUpgradeInterval: Integer;
  335.     FUpgradeConfigXmlPassword: String;
  336.     FUpgradeServerPath: String;
  337.     FUpgradeAutomatic: Boolean;
  338.   public
  339.     constructor Create(AOwner: TGrandstreamAPI); override;
  340.     destructor Destroy; override;
  341.     function Get: TGsRequestResult;
  342.     procedure Restart;
  343.     procedure Restore;
  344.     property UpdateVia: TGsUpdateVia read FUpdateVia;
  345.     property UpgradeServerPath: String read FUpgradeServerPath;
  346.     property UpgradeConfigServerPath: String read FUpgradeConfigServerPath;
  347.     property UpgradeConfigXmlPassword: String read FUpgradeConfigXmlPassword;
  348.     property UpgradeAutomatic: Boolean read FUpgradeAutomatic;
  349.     property UpgradeInterval: Integer read FUpgradeInterval;
  350.   end;
  351.  
  352.   { Video Control (17) }
  353.  
  354.   TGsVideoControl = class(TGsRequestBase)
  355.  
  356.   end;
  357.  
  358.   { WiFi (18) }
  359.  
  360.   { System Settings / Device (19) }
  361.  
  362.   TGsAlarmType = (gatNormalOpen,gatNormalClose);
  363.  
  364.   TGsAlarmStatus = (gasOpen,gasClose);
  365.  
  366.   TGsAlarmOutputTime = (gao0,gao5,gao15,gao30,gao60,gao180,gao300,gao600,gao900,gao1800);
  367.  
  368.   TGsGpioPinMultiplex = (gpmNone,gpmControl,gpmAlarmIO);
  369.  
  370.   PGsDeviceInfo = ^TGsDeviceInfo;
  371.   TGsDeviceInfo = record
  372.     Channel: Integer;
  373.     AlarmInType: TGsAlarmType;
  374.     AlarmOutType: TGsAlarmType;
  375.     AlarmInStatus: TGsAlarmStatus;
  376.     AlarmOutStatus: TGsAlarmStatus;
  377.     AlarmOutputTime: TGsAlarmOutputTime;
  378.     GpioPinMultiplex: TGsGpioPinMultiplex;
  379.   end;
  380.  
  381.   TGsDevice = class(TGsRequestBase)
  382.   private
  383.     FChannels: Array of PGsDeviceInfo;
  384.     FDeviceName: String;
  385.     function GetChannel(Index: Integer): PGsDeviceInfo;
  386.     procedure ClearChannels;
  387.     procedure SetDeviceName(const Value: String);
  388.   public
  389.     constructor Create(AOwner: TGrandstreamAPI); override;
  390.     destructor Destroy; override;
  391.     function Get: TGsRequestResult;
  392.     function Count: Integer;
  393.     property Channels[Index: Integer]: PGsDeviceInfo read GetChannel; default;
  394.     property DeviceName: String read FDeviceName write SetDeviceName;
  395.   end;
  396.  
  397.   { PPPoE (20) }
  398.  
  399.   { Snapshot (21) }
  400.  
  401.   { Language (22) }
  402.  
  403.   { Decode (23) }
  404.  
  405.   { Stream (24) }
  406.  
  407.   { CMOS (25) }
  408.  
  409.   { 4*D1 (26) }
  410.  
  411.   { Alarm Server (27) }
  412.  
  413.   { Recording (28) }
  414.  
  415.  
  416.  
  417. implementation
  418.  
  419. const
  420.   CAMERA_URL = 'http://%s:%d/';
  421.   // http://user:pass@address:port/
  422.  
  423. function EncodeUrl(source: string): string;
  424.  var i:integer;
  425. begin
  426.    result := '';
  427.    for i := 1 to length(source) do
  428.        if not (source[i] in ['A'..'Z','a'..'z','0','1'..'9','-','_','~','.']) then result := result + '%'+inttohex(ord(source[i]),2) else result := result + source[i];
  429. end;
  430.  
  431. function IntToResult(const R: Integer): TGsRequestResult;
  432. begin
  433.   case R of
  434.     200: Result:= grOkay;
  435.     400: Result:= grBadRequest;
  436.     401: Result:= grUnauthorized;
  437.     404: Result:= grNotFound;
  438.     503: Result:= grServiceUnavailable;
  439.   end;
  440. end;
  441.  
  442. function ResultToInt(const R: TGsRequestResult): Integer;
  443. begin
  444.   case R of
  445.     grOkay:                 Result:= 200;
  446.     grBadRequest:           Result:= 400;
  447.     grUnauthorized:         Result:= 401;
  448.     grNotFound:             Result:= 404;
  449.     grServiceUnavailable:   Result:= 503;
  450.   end;
  451. end;
  452.  
  453. { TGrandstreamAPI }
  454.  
  455. constructor TGrandstreamAPI.Create(AOwner: TComponent);
  456. begin
  457.   inherited;
  458.   FStream:= TStringStream.Create;
  459.   FWeb:= TIdHTTP.Create(nil);
  460.   FWeb.ProtocolVersion:= pv1_0;
  461.   FWeb.Request.Username:= FUser;
  462.   FWeb.Request.Password:= FPass;
  463.   FWeb.HTTPOptions:= FWeb.HTTPOptions + [hoInProcessAuth];
  464.   FAudioVideo:= TGsAudioVideo.Create(Self);
  465.   FDevice:= TGsDevice.Create(Self);
  466.   FStatus:= TGsStatus.Create(Self);
  467.   FMaintenance:= TGsMaintenance.Create(Self);
  468.  
  469. end;
  470.  
  471. destructor TGrandstreamAPI.Destroy;
  472. begin
  473.  
  474.   FMaintenance.Free;
  475.   FStatus.Free;
  476.   FDevice.Free;
  477.   FAudioVideo.Free;
  478.   FWeb.Free;
  479.   FStream.Free;
  480.   inherited;
  481. end;
  482.  
  483. function TGrandstreamAPI.GetURL: String;
  484. begin
  485.   Result:= Format(CAMERA_URL, [FAddress,FPort]);
  486. end;
  487.  
  488. procedure TGrandstreamAPI.SetAddress(const Value: String);
  489. begin
  490.   FAddress := Value;
  491. end;
  492.  
  493. procedure TGrandstreamAPI.SetPass(const Value: String);
  494. begin
  495.   FPass := Value;
  496. end;
  497.  
  498. procedure TGrandstreamAPI.SetPort(const Value: Integer);
  499. begin
  500.   FPort := Value;
  501. end;
  502.  
  503. procedure TGrandstreamAPI.SetUser(const Value: String);
  504. begin
  505.   FUser := Value;
  506. end;
  507.  
  508. function TGrandstreamAPI.Get(const Module: String): TGsRequestResult;
  509. var
  510.   U: String;
  511. begin
  512.  
  513.   U:= URL+'/goform/'+Module+'?cmd=get';
  514.  
  515.   FWeb.Request.UserAgent:= 'JD Grandstream API';
  516.   FWeb.Request.Username:= FUser;
  517.   FWeb.Request.Password:= FPass;
  518.  
  519.   FWeb.Get(U, FStream);
  520.  
  521.   Result:= grOkay;
  522.  
  523.   FStream.Position:= 0;
  524.  
  525. end;
  526.  
  527. { TGsParams }
  528.  
  529. constructor TGsParams.Create;
  530. begin
  531.   FItems:= TStringList.Create;
  532. end;
  533.  
  534. destructor TGsParams.Destroy;
  535. begin
  536.   FItems.Free;
  537.   inherited;
  538. end;
  539.  
  540. procedure TGsParams.Clear;
  541. begin
  542.   FItems.Clear;
  543. end;
  544.  
  545. function TGsParams.Count: Integer;
  546. begin
  547.   Result:= FItems.Count;
  548. end;
  549.  
  550. function TGsParams.GetItem(const Name: String): String;
  551. begin
  552.   Result:= FItems.Values[Name];
  553. end;
  554.  
  555. function TGsParams.GetName(const Index: Integer): String;
  556. begin
  557.   Result:= FItems.Names[Index];
  558. end;
  559.  
  560. procedure TGsParams.SetItem(const Name, Value: String);
  561. begin
  562.   FItems.Values[Name]:= Value;
  563. end;
  564.  
  565. { TGsRequestBase }
  566.  
  567. constructor TGsRequestBase.Create(AOwner: TGrandstreamAPI);
  568. begin
  569.   FOwner:= AOwner;
  570.   FList:= TStringList.Create;
  571. end;
  572.  
  573. destructor TGsRequestBase.Destroy;
  574. begin
  575.   FList.Free;
  576.   inherited;
  577. end;
  578.  
  579. function TGsRequestBase.Get(const Cmd: String): TGsRequestResult;
  580. begin
  581.   FOwner.Get(Cmd);
  582.   FList.Text:= Fowner.FStream.DataString;
  583. end;
  584.  
  585. function TGsRequestBase.Items: TStringList;
  586. begin
  587.   Result:= FList;
  588. end;
  589.  
  590. function TGsRequestBase.Owner: TGrandstreamAPI;
  591. begin
  592.   Result:= FOwner;
  593. end;
  594.  
  595. procedure TGsRequestBase.Next;
  596. begin
  597.   FData:= Items[0];
  598.   Items.Delete(0);
  599. end;
  600.  
  601. function TGsRequestBase.Check(const V: String): Boolean;
  602. begin
  603.   Result:= Pos(V+'=', FData) = 1;
  604. end;
  605.  
  606. function TGsRequestBase.ValStr: String;
  607. var
  608.   P: Integer;
  609. begin
  610.   P:= Pos('=', FData);
  611.   Result:= Copy(FData, P+1, Length(FData));
  612. end;
  613.  
  614. function TGsRequestBase.ValInt: Integer;
  615. begin
  616.   Result:= StrToIntDef(ValStr, 0);
  617. end;
  618.  
  619. function TGsRequestBase.ValBol: Boolean;
  620. begin
  621.   Result:= ValInt = 1;
  622. end;
  623.  
  624. { TGsRequestChannelBase }
  625.  
  626. constructor TGsRequestChannelBase.Create(AOwner: TGrandstreamAPI; const ItemClass: TGsRequestChannelClass);
  627. begin
  628.   inherited Create(AOwner);
  629.   FChannels:= TList.Create;
  630.   FItemClass:= ItemClass;
  631. end;
  632.  
  633. destructor TGsRequestChannelBase.Destroy;
  634. begin
  635.   ClearChannels;
  636.   FChannels.Free;
  637.   inherited;
  638. end;
  639.  
  640. procedure TGsRequestChannelBase.ClearChannels;
  641. begin
  642.   while FChannels.Count > 0 do begin
  643.     TGsRequestChannel(FChannels[0]).Free;
  644.     FChannels.Delete(0);
  645.   end;
  646. end;
  647.  
  648. function TGsRequestChannelBase.Count: Integer;
  649. begin
  650.   Result:= FChannels.Count;
  651. end;
  652.  
  653. function TGsRequestChannelBase.Get(const Cmd: String): TGsRequestResult;
  654. begin
  655.   Result:= inherited Get(Cmd);
  656. end;
  657.  
  658. function TGsRequestChannelBase.GetChannel(Index: Integer): TGsRequestChannel;
  659. begin
  660.   Result:= TGsRequestChannel(FChannels[Index]);
  661. end;
  662.  
  663. function TGsRequestChannelBase.New: TGsRequestChannel;
  664. begin
  665.   Result:= FItemClass.Create(Self);
  666.   FChannels.Add(Result);
  667. end;
  668.  
  669. { TGsRequestChannel }
  670.  
  671. constructor TGsRequestChannel.Create(AOwner: TGsRequestChannelBase);
  672. begin
  673.  
  674. end;
  675.  
  676. destructor TGsRequestChannel.Destroy;
  677. begin
  678.  
  679.   inherited;
  680. end;
  681.  
  682. { TGsVideoResolution }
  683.  
  684. procedure TGsVideoResolution.SetLength(const Value: Integer);
  685. begin
  686.   FLength := Value;
  687. end;
  688.  
  689. procedure TGsVideoResolution.SetWidth(const Value: Integer);
  690. begin
  691.   FWidth := Value;
  692. end;
  693.  
  694. { TGsAudioVideoStream }
  695.  
  696. constructor TGsAudioVideoStream.Create;
  697. begin
  698.   FResolution:= TGsVideoResolution.Create;
  699. end;
  700.  
  701. destructor TGsAudioVideoStream.Destroy;
  702. begin
  703.   FResolution.Free;
  704.   inherited;
  705. end;
  706.  
  707. procedure TGsAudioVideoStream.SetAudioBitrate(const Value: Integer);
  708. begin
  709.   FAudioBitrate := Value;
  710. end;
  711.  
  712. procedure TGsAudioVideoStream.SetAudioEncoder(const Value: TGsAudioCodec);
  713. begin
  714.   FAudioEncoder := Value;
  715. end;
  716.  
  717. procedure TGsAudioVideoStream.SetBitrate(const Value: Integer);
  718. begin
  719.   FVideoBitrate := Value;
  720. end;
  721.  
  722. procedure TGsAudioVideoStream.SetBrType(const Value: TGsBrType);
  723. begin
  724.   FBrType := Value;
  725. end;
  726.  
  727. procedure TGsAudioVideoStream.SetFramerate(const Value: Integer);
  728. begin
  729.   FFramerate := Value;
  730. end;
  731.  
  732. procedure TGsAudioVideoStream.SetIFrame(const Value: Integer);
  733. begin
  734.   FIFrame := Value;
  735. end;
  736.  
  737. procedure TGsAudioVideoStream.SetImageQuality(const Value: Integer);
  738. begin
  739.   FImageQuality := Value;
  740. end;
  741.  
  742. procedure TGsAudioVideoStream.SetVideoEncoder(const Value: TGsVideoCodec);
  743. begin
  744.   FVideoEncoder := Value;
  745. end;
  746.  
  747. { TGsAudioVideoChannel }
  748.  
  749. constructor TGsAudioVideoChannel.Create;
  750. begin
  751.   FPrimary:= TGsAudioVideoStream.Create;
  752.   FSecondary:= TGsAudioVideoStream.Create;
  753. end;
  754.  
  755. destructor TGsAudioVideoChannel.Destroy;
  756. begin
  757.   FSecondary.Free;
  758.   FPrimary.Free;
  759.   inherited;
  760. end;
  761.  
  762. procedure TGsAudioVideoChannel.SetAudioChipType(const Value: TGsAudioChipType);
  763. begin
  764.   FAudioChipType := Value;
  765. end;
  766.  
  767. procedure TGsAudioVideoChannel.SetAudioLineIn(const Value: Boolean);
  768. begin
  769.   FAudioLineIn := Value;
  770. end;
  771.  
  772. procedure TGsAudioVideoChannel.SetAudioLineOut(const Value: Boolean);
  773. begin
  774.   FAudioLineOut := Value;
  775. end;
  776.  
  777. procedure TGsAudioVideoChannel.SetMicrophoneVolume(const Value: Integer);
  778. begin
  779.   FMicrophoneVolume := Value;
  780. end;
  781.  
  782. procedure TGsAudioVideoChannel.SetNtscPalType(const Value: TGsNtscPalType);
  783. begin
  784.   FNtscPalType := Value;
  785. end;
  786.  
  787. procedure TGsAudioVideoChannel.SetPowerFreq(const Value: TGsPowerFreq);
  788. begin
  789.   FPowerFreq := Value;
  790. end;
  791.  
  792. procedure TGsAudioVideoChannel.SetSpeakerVolume(const Value: Integer);
  793. begin
  794.   FSpeakerVolume := Value;
  795. end;
  796.  
  797. { TGsAudioVideo }
  798.  
  799. constructor TGsAudioVideo.Create(AOwner: TGrandstreamAPI);
  800. begin
  801.   inherited Create(AOwner, TGsAudioVideoChannel);
  802.  
  803. end;
  804.  
  805. destructor TGsAudioVideo.Destroy;
  806. begin
  807.  
  808.   inherited;
  809. end;
  810.  
  811. function TGsAudioVideo.GetChannel(Index: Integer): TGsAudioVideoChannel;
  812. begin
  813.   Result:= TGsAudioVideoChannel(inherited Channels[Index]);
  814. end;
  815.  
  816. function TGsAudioVideo.New: TGsAudioVideoChannel;
  817. begin
  818.   Result:= TGsAudioVideoChannel(inherited New);
  819. end;
  820.  
  821. function TGsAudioVideo.Get: TGsRequestResult;
  822. var
  823.   I: TGsAudioVideoChannel;
  824.   X: Integer;
  825. begin
  826.   ClearChannels;
  827.   try
  828.     Result:= inherited Get('audio_video');;
  829.     X:= -1;
  830.     while Items.Count > 0 do begin
  831.       Next;
  832.       if Check('channel') then begin
  833.         Inc(X);
  834.         I:= New;
  835.         I.FChannel:= X;
  836.         I.FHasSecondary:= False;
  837.       end else
  838.       if Check('video.primary.encoder') then begin
  839.         case ValInt of
  840.           96: I.Primary.FVideoEncoder:= gvcH264;
  841.           26: I.Primary.FVideoEncoder:= gvcMJPEG;
  842.         end;
  843.       end else
  844.       if Check('video.primary.resolution') then begin
  845.         //I.Primary.Resolution:= StrToRes(ValStr);
  846.         //REDO
  847.       end else
  848.       if Check('video.primary.bitrate') then begin
  849.         I.Primary.FVideoBitrate:= ValInt;
  850.       end else
  851.       if Check('video.primary.brtype') then begin
  852.         case ValInt of
  853.           0: I.Primary.FBrType:= gvbVBR;
  854.           1: I.Primary.FBrType:= gvbCBR;
  855.         end;
  856.       end else
  857.       if Check('video.primary.framerate') then begin
  858.         I.Primary.FFramerate:= ValInt;
  859.       end else
  860.       if Check('video.primary.iframe') then begin
  861.         I.Primary.FIFrame:= ValInt;
  862.       end else
  863.       if Check('video.primary.imagequality') then begin
  864.         I.Primary.FImageQuality:= ValInt;
  865.       end else
  866.       if Check('audio.primary.encoder') then begin
  867.         case ValInt of
  868.           0: I.Primary.FAudioEncoder:= gacPCMU;
  869.           1: I.Primary.FAudioEncoder:= gacPCMA;
  870.           2: I.Primary.FAudioEncoder:= gacG726;
  871.           3: I.Primary.FAudioEncoder:= gacDisabled;
  872.           4: I.Primary.FAudioEncoder:= gacAAC;
  873.         end;
  874.       end else
  875.       if Check('audio.primary.bitrate') then begin
  876.         I.Primary.FAudioBitrate:= ValInt;
  877.       end else
  878.       if Check('video.secondary.encoder') then begin
  879.         I.FHasSecondary:= True;
  880.         case ValInt of
  881.           96: I.Secondary.FVideoEncoder:= gvcH264;
  882.           26: I.Secondary.FVideoEncoder:= gvcMJPEG;
  883.         end;
  884.       end else
  885.       if Check('video.secondary.resolution') then begin
  886.         //I.Secondary.Resolution:= StrToRes(ValStr);
  887.         //REDO
  888.       end else
  889.       if Check('video.secondary.bitrate') then begin
  890.         I.Secondary.FVideoBitrate:= ValInt;
  891.       end else
  892.       if Check('video.secondary.brtype') then begin
  893.         case ValInt of
  894.           0: I.Secondary.FBrType:= gvbVBR;
  895.           1: I.Secondary.FBrType:= gvbCBR;
  896.         end;
  897.       end else
  898.       if Check('video.secondary.framerate') then begin
  899.         I.Secondary.FFramerate:= ValInt;
  900.       end else
  901.       if Check('video.secondary.iframe') then begin
  902.         I.Secondary.FIFrame:= ValInt;
  903.       end else
  904.       if Check('video.secondary.imagequality') then begin
  905.         I.Secondary.FImageQuality:= ValInt;
  906.       end else
  907.       if Check('audio.secondary.encoder') then begin
  908.         case ValInt of
  909.           0: I.Secondary.FAudioEncoder:= gacPCMU;
  910.           1: I.Secondary.FAudioEncoder:= gacPCMA;
  911.           2: I.Secondary.FAudioEncoder:= gacG726;
  912.           3: I.Secondary.FAudioEncoder:= gacDisabled;
  913.           4: I.Secondary.FAudioEncoder:= gacAAC;
  914.         end;
  915.       end else
  916.       if Check('audio.secondary.bitrate') then begin
  917.         I.Secondary.FAudioBitrate:= ValInt;
  918.       end else
  919.       if Check('audio.microphone.volume') then begin
  920.         I.FMicrophoneVolume:= ValInt;
  921.       end else
  922.       if Check('audio.speaker.volume') then begin
  923.         I.FSpeakerVolume:= ValInt;
  924.       end else
  925.       if Check('audio.linein') then begin
  926.         case ValInt of
  927.           0: I.FAudioLineIn:= False;
  928.           1: I.FAudioLineIn:= True;
  929.         end;
  930.       end else
  931.       if Check('audio.lineout') then begin
  932.         case ValInt of
  933.           0: I.FAudioLineOut:= False;
  934.           1: I.FAudioLineOut:= True;
  935.         end;
  936.       end else
  937.       if Check('audio.chip.type') then begin
  938.         case ValInt of
  939.           0: I.FAudioChipType:= gctAIC33;
  940.           1: I.FAudioChipType:= gctAIC3104;
  941.           $FF: I.FAudioChipType:= gctNone;
  942.         end;
  943.       end else
  944.       if Check('ntscpal.type') then begin
  945.         case ValInt of
  946.           50: I.FPowerFreq:= gpfIndoor50;
  947.           60: I.FPowerFreq:= gpfIndoor60;
  948.           61: I.FPowerFreq:= gpfOutdoor;
  949.         end;
  950.       end else begin
  951.         //Unrecognized property
  952.       end;
  953.     end;
  954.  
  955.   except
  956.     on e: exception do begin
  957.  
  958.     end;
  959.   end;
  960. end;
  961.  
  962. { TGsStatus }
  963.  
  964. constructor TGsStatus.Create(AOwner: TGrandstreamAPI);
  965. begin
  966.   inherited;
  967.  
  968. end;
  969.  
  970. function TGsStatus.DDNSStateStr: String;
  971. begin
  972.  
  973. end;
  974.  
  975. destructor TGsStatus.Destroy;
  976. begin
  977.  
  978.   inherited;
  979. end;
  980.  
  981. function TGsStatus.Get: TGsRequestResult;
  982. var
  983.   T: String;
  984. begin
  985.   try
  986.     FLedStatus:= glsUnsupported;
  987.     Result:= inherited Get('systeminfo');
  988.     while Items.Count > 0 do begin
  989.       Next;
  990.       if Check('productmode') then begin
  991.         FProductMode:= ValStr;
  992.       end else
  993.       if Check('hardwareversion') then begin
  994.         FHardwareVersion:= ValStr;
  995.       end else
  996.       if Check('partnumber') then begin
  997.         FPartNumber:= ValStr;
  998.       end else
  999.       if Check('bootloaderversion') then begin
  1000.         FBootloaderVersion:= ValStr;
  1001.       end else
  1002.       if Check('coreversion') then begin
  1003.         FCoreVersion:= ValStr;
  1004.       end else
  1005.       if Check('baseversion') then begin
  1006.         FBaseVersion:= ValStr;
  1007.       end else
  1008.       if Check('firmwareversion') then begin
  1009.         FFirmwareVersion:= ValStr;
  1010.       end else
  1011.       if Check('cameratype') then begin
  1012.         T:= Trim(Items[0]);
  1013.         Items.Delete(0);
  1014.         T:= T + ' ' + Trim(Items[0]);
  1015.         Items.Delete(0);
  1016.         FCameraType:= T;
  1017.       end else
  1018.       if Check('ddnsstate') then begin
  1019.         case ValInt of
  1020.           0: FDDNSState:= gdsDisable;
  1021.           1: FDDNSState:= gdsProcessing;
  1022.           2: FDDNSState:= gdsSuccess;
  1023.           3: FDDNSState:= gdsAcctPassErr;
  1024.           4: FDDNSState:= gdsServerBlocking;
  1025.           5: FDDNSState:= gdsStunServerErr;
  1026.           6: FDDNSState:= gdsDBFailed;
  1027.         end;
  1028.       end else
  1029.       if Check('wifistate') then begin
  1030.         case ValInt of
  1031.           0: FWiFiState:= gwsDisconnected;
  1032.           1: FWiFiState:= gwsConnected;
  1033.         end;
  1034.       end else
  1035.       if Check('systemrun') then begin
  1036.         FSystemRun:= ValStr;
  1037.       end else
  1038.       if Check('mac') then begin
  1039.         FMac:= ValStr;
  1040.       end else
  1041.       if Check('ledstatus') then begin
  1042.         case ValInt of
  1043.           0: FLedStatus:= glsOn;
  1044.           1: FLedStatus:= glsOff;
  1045.         end;
  1046.       end else
  1047.       if Check('pppoe.ip') then begin
  1048.         FPPPoEIP:= ValStr;
  1049.       end else
  1050.       if Check('pppoe.status') then begin
  1051.         case ValInt of
  1052.           0: ;
  1053.           1: ;
  1054.         end;
  1055.       end else
  1056.       if Check('ipaddress') then begin
  1057.         FIPAddress:= ValStr;
  1058.       end else
  1059.       if Check('subnetmask') then begin
  1060.         FSubnetMask:= ValStr;
  1061.       end else
  1062.       if Check('defaultgateway') then begin
  1063.         FDefaultGateway:= ValStr;
  1064.       end else begin
  1065.  
  1066.       end;
  1067.     end;
  1068.   except
  1069.     on e: exception do begin
  1070.  
  1071.     end;
  1072.   end;
  1073. end;
  1074.  
  1075. function TGsStatus.LedStatusStr: String;
  1076. begin
  1077.  
  1078. end;
  1079.  
  1080. function TGsStatus.PPPoEStatusStr: String;
  1081. begin
  1082.  
  1083. end;
  1084.  
  1085. function TGsStatus.WiFiStateStr: String;
  1086. begin
  1087.  
  1088. end;
  1089.  
  1090. { TGsOSD }
  1091.  
  1092. constructor TGsOSD.Create(AOwner: TGrandstreamAPI);
  1093. begin
  1094.   inherited;
  1095.  
  1096. end;
  1097.  
  1098. destructor TGsOSD.Destroy;
  1099. begin
  1100.  
  1101.   inherited;
  1102. end;
  1103.  
  1104. function TGsOSD.Get: TGsRequestResult;
  1105. begin
  1106.  
  1107. end;
  1108.  
  1109. { TGsMaintenance }
  1110.  
  1111. constructor TGsMaintenance.Create(AOwner: TGrandstreamAPI);
  1112. begin
  1113.   inherited;
  1114.  
  1115. end;
  1116.  
  1117. destructor TGsMaintenance.Destroy;
  1118. begin
  1119.  
  1120.   inherited;
  1121. end;
  1122.  
  1123. function TGsMaintenance.Get: TGsRequestResult;
  1124. var
  1125.   T: String;
  1126. begin
  1127.   try
  1128.     Result:= inherited Get('maintenance');
  1129.     while Items.Count > 0 do begin
  1130.       Next;
  1131.       if Check('restart') then begin
  1132.  
  1133.       end else
  1134.       if Check('restore') then begin
  1135.  
  1136.       end else
  1137.       if Check('update_viatype') then begin
  1138.         case ValInt of
  1139.           1: FUpdateVia:= guvTFTP;
  1140.           2: FUpdateVia:= guvHTTP;
  1141.           3: FUpdateVia:= guvHTTPS;
  1142.         end;
  1143.       end else
  1144.       if Check('upgrade.serverpath') then begin
  1145.         FUpgradeServerPath:= ValStr;
  1146.       end else
  1147.       if Check('upgrade.cfgserverpath') then begin
  1148.         FUpgradeConfigServerPath:= ValStr;
  1149.       end else
  1150.       if Check('upgrade_cfg_xml_pwd') then begin
  1151.         FUpgradeConfigXmlPassword:= ValStr;
  1152.       end else
  1153.       if Check('upgrade.automatic') then begin
  1154.         FUpgradeAutomatic:= ValBol;
  1155.       end else
  1156.       if Check('upgrade.interval') then begin
  1157.         FUpgradeInterval:= ValInt;
  1158.       end else begin
  1159.  
  1160.       end;
  1161.     end;
  1162.   except
  1163.     on e: exception do begin
  1164.  
  1165.     end;
  1166.   end;
  1167. end;
  1168.  
  1169. procedure TGsMaintenance.Restart;
  1170. begin
  1171.   //SENSITIVE - MUST PROTECT
  1172.  
  1173. end;
  1174.  
  1175. procedure TGsMaintenance.Restore;
  1176. begin
  1177.   //SENSITIVE - MUST PROTECT
  1178.  
  1179. end;
  1180.  
  1181. { TGsDevice }
  1182.  
  1183. constructor TGsDevice.Create(AOwner: TGrandstreamAPI);
  1184. begin
  1185.   inherited;
  1186.   SetLength(FChannels, 0);
  1187. end;
  1188.  
  1189. destructor TGsDevice.Destroy;
  1190. begin
  1191.   ClearChannels;
  1192.   inherited;
  1193. end;
  1194.  
  1195. procedure TGsDevice.ClearChannels;
  1196. var
  1197.   X: Integer;
  1198. begin
  1199.   //REDO
  1200. end;
  1201.  
  1202. function TGsDevice.Count: Integer;
  1203. begin
  1204.   Result:= Length(FChannels);
  1205. end;
  1206.  
  1207. function TGsDevice.GetChannel(Index: Integer): PGsDeviceInfo;
  1208. begin
  1209.   Result:= FChannels[Index];
  1210. end;
  1211.  
  1212. procedure TGsDevice.SetDeviceName(const Value: String);
  1213. begin
  1214.   FDeviceName := Value;
  1215. end;
  1216.  
  1217. function TGsDevice.Get: TGsRequestResult;
  1218. var
  1219.   I: PGsDeviceInfo;
  1220.   X: Integer;
  1221. begin
  1222.   ClearChannels;
  1223.   try
  1224.     Result:= inherited Get('device');
  1225.     X:= -1;
  1226.     while Items.Count > 0 do begin
  1227.       Next;
  1228.       if Check('devicename') then begin
  1229.         FDeviceName:= ValStr;
  1230.       end else
  1231.       if Check('channel') then begin
  1232.         Inc(X);
  1233.         SetLength(FChannels, Length(FChannels)+1);
  1234.         I:= New(PGsDeviceInfo);
  1235.         FChannels[X]:= I;
  1236.         I.Channel:= X;
  1237.         I.GpioPinMultiplex:= gpmNone;
  1238.       end else
  1239.       if Check('alarmin.type') then begin
  1240.         case ValInt of
  1241.           0: I.AlarmInType:= gatNormalOpen;
  1242.           1: I.AlarmInType:= gatNormalClose;
  1243.         end;
  1244.       end else
  1245.       if Check('alarmout.type') then begin
  1246.         case ValInt of
  1247.           0: I.AlarmOutType:= gatNormalOpen;
  1248.           1: I.AlarmOutType:= gatNormalClose;
  1249.         end;
  1250.       end else
  1251.       if Check('alarmin.status') then begin
  1252.         case ValInt of
  1253.           0: I.AlarmInStatus:= gasOpen;
  1254.           1: I.AlarmInStatus:= gasClose;
  1255.         end;
  1256.       end else
  1257.       if Check('alarmout.status') then begin
  1258.         case ValInt of
  1259.           0: I.AlarmOutStatus:= gasOpen;
  1260.           1: I.AlarmOutStatus:= gasClose;
  1261.         end;
  1262.       end else
  1263.       if Check('alarm_output_time') then begin
  1264.         case ValInt of
  1265.           0: I.AlarmOutputTime:= gao0;
  1266.           5: I.AlarmOutputTime:= gao5;
  1267.           15: I.AlarmOutputTime:= gao15;
  1268.           30: I.AlarmOutputTime:= gao30;
  1269.           60: I.AlarmOutputTime:= gao60;
  1270.           180: I.AlarmOutputTime:= gao180;
  1271.           300: I.AlarmOutputTime:= gao300;
  1272.           600: I.AlarmOutputTime:= gao600;
  1273.           900: I.AlarmOutputTime:= gao900;
  1274.           1800: I.AlarmOutputTime:= gao1800;
  1275.         end;
  1276.       end else
  1277.       if Check('gpio_pin_multiplex') then begin
  1278.         case ValInt of
  1279.           0: I.GpioPinMultiplex:= gpmControl;
  1280.           1: I.GpioPinMultiplex:= gpmAlarmIO;
  1281.         end;
  1282.       end else begin
  1283.  
  1284.       end;
  1285.     end;
  1286.   except
  1287.     on e: exception do begin
  1288.  
  1289.     end;
  1290.   end;
  1291. end;
  1292.  
  1293. end.
Advertisement
Add Comment
Please, Sign In to add comment